@servicetitan/titan-chat-ui-anvil2 3.0.0

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 (205) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.md +15 -0
  3. package/dist/assets/floating-chat-avatar.svg +16 -0
  4. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts +2 -0
  5. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts.map +1 -0
  6. package/dist/components/chat/__tests-cy__/chat-messages.test.js +95 -0
  7. package/dist/components/chat/__tests-cy__/chat-messages.test.js.map +1 -0
  8. package/dist/components/chat/__tests-cy__/chat.test.d.ts +2 -0
  9. package/dist/components/chat/__tests-cy__/chat.test.d.ts.map +1 -0
  10. package/dist/components/chat/__tests-cy__/chat.test.js +130 -0
  11. package/dist/components/chat/__tests-cy__/chat.test.js.map +1 -0
  12. package/dist/components/chat/chat-connecting.d.ts +7 -0
  13. package/dist/components/chat/chat-connecting.d.ts.map +1 -0
  14. package/dist/components/chat/chat-connecting.js +6 -0
  15. package/dist/components/chat/chat-connecting.js.map +1 -0
  16. package/dist/components/chat/chat-error.d.ts +3 -0
  17. package/dist/components/chat/chat-error.d.ts.map +1 -0
  18. package/dist/components/chat/chat-error.js +20 -0
  19. package/dist/components/chat/chat-error.js.map +1 -0
  20. package/dist/components/chat/chat-error.module.less +6 -0
  21. package/dist/components/chat/chat-input-file.d.ts +5 -0
  22. package/dist/components/chat/chat-input-file.d.ts.map +1 -0
  23. package/dist/components/chat/chat-input-file.js +41 -0
  24. package/dist/components/chat/chat-input-file.js.map +1 -0
  25. package/dist/components/chat/chat-input.d.ts +5 -0
  26. package/dist/components/chat/chat-input.d.ts.map +1 -0
  27. package/dist/components/chat/chat-input.js +97 -0
  28. package/dist/components/chat/chat-input.js.map +1 -0
  29. package/dist/components/chat/chat-input.module.less +11 -0
  30. package/dist/components/chat/chat-log.d.ts +8 -0
  31. package/dist/components/chat/chat-log.d.ts.map +1 -0
  32. package/dist/components/chat/chat-log.js +15 -0
  33. package/dist/components/chat/chat-log.js.map +1 -0
  34. package/dist/components/chat/chat-message-template-agent.d.ts +4 -0
  35. package/dist/components/chat/chat-message-template-agent.d.ts.map +1 -0
  36. package/dist/components/chat/chat-message-template-agent.js +14 -0
  37. package/dist/components/chat/chat-message-template-agent.js.map +1 -0
  38. package/dist/components/chat/chat-message-template-user.d.ts +4 -0
  39. package/dist/components/chat/chat-message-template-user.d.ts.map +1 -0
  40. package/dist/components/chat/chat-message-template-user.js +16 -0
  41. package/dist/components/chat/chat-message-template-user.js.map +1 -0
  42. package/dist/components/chat/chat-message-typing.d.ts +3 -0
  43. package/dist/components/chat/chat-message-typing.d.ts.map +1 -0
  44. package/dist/components/chat/chat-message-typing.js +15 -0
  45. package/dist/components/chat/chat-message-typing.js.map +1 -0
  46. package/dist/components/chat/chat-message.d.ts +8 -0
  47. package/dist/components/chat/chat-message.d.ts.map +1 -0
  48. package/dist/components/chat/chat-message.js +60 -0
  49. package/dist/components/chat/chat-message.js.map +1 -0
  50. package/dist/components/chat/chat-messages.d.ts +10 -0
  51. package/dist/components/chat/chat-messages.d.ts.map +1 -0
  52. package/dist/components/chat/chat-messages.js +40 -0
  53. package/dist/components/chat/chat-messages.js.map +1 -0
  54. package/dist/components/chat/chat-notifications.d.ts +5 -0
  55. package/dist/components/chat/chat-notifications.d.ts.map +1 -0
  56. package/dist/components/chat/chat-notifications.js +12 -0
  57. package/dist/components/chat/chat-notifications.js.map +1 -0
  58. package/dist/components/chat/chat-timer.d.ts +3 -0
  59. package/dist/components/chat/chat-timer.d.ts.map +1 -0
  60. package/dist/components/chat/chat-timer.js +18 -0
  61. package/dist/components/chat/chat-timer.js.map +1 -0
  62. package/dist/components/chat/chat-timer.module.less +5 -0
  63. package/dist/components/chat/chat.d.ts +8 -0
  64. package/dist/components/chat/chat.d.ts.map +1 -0
  65. package/dist/components/chat/chat.js +30 -0
  66. package/dist/components/chat/chat.js.map +1 -0
  67. package/dist/components/common/multiline-text.d.ts +9 -0
  68. package/dist/components/common/multiline-text.d.ts.map +1 -0
  69. package/dist/components/common/multiline-text.js +12 -0
  70. package/dist/components/common/multiline-text.js.map +1 -0
  71. package/dist/components/common/multiline-text.module.less +9 -0
  72. package/dist/components/message-content/message-content-file.d.ts +8 -0
  73. package/dist/components/message-content/message-content-file.d.ts.map +1 -0
  74. package/dist/components/message-content/message-content-file.js +12 -0
  75. package/dist/components/message-content/message-content-file.js.map +1 -0
  76. package/dist/components/message-content/message-content-text.d.ts +8 -0
  77. package/dist/components/message-content/message-content-text.d.ts.map +1 -0
  78. package/dist/components/message-content/message-content-text.js +7 -0
  79. package/dist/components/message-content/message-content-text.js.map +1 -0
  80. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts +2 -0
  81. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts.map +1 -0
  82. package/dist/components/messages/__tests-cy__/message-agent.test.js +83 -0
  83. package/dist/components/messages/__tests-cy__/message-agent.test.js.map +1 -0
  84. package/dist/components/messages/__tests-cy__/message-system.test.d.ts +2 -0
  85. package/dist/components/messages/__tests-cy__/message-system.test.d.ts.map +1 -0
  86. package/dist/components/messages/__tests-cy__/message-system.test.js +19 -0
  87. package/dist/components/messages/__tests-cy__/message-system.test.js.map +1 -0
  88. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts +2 -0
  89. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts.map +1 -0
  90. package/dist/components/messages/__tests-cy__/message-timeout.test.js +25 -0
  91. package/dist/components/messages/__tests-cy__/message-timeout.test.js.map +1 -0
  92. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts +2 -0
  93. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts.map +1 -0
  94. package/dist/components/messages/__tests-cy__/message-typing.test.js +48 -0
  95. package/dist/components/messages/__tests-cy__/message-typing.test.js.map +1 -0
  96. package/dist/components/messages/__tests-cy__/message-user.test.d.ts +2 -0
  97. package/dist/components/messages/__tests-cy__/message-user.test.d.ts.map +1 -0
  98. package/dist/components/messages/__tests-cy__/message-user.test.js +27 -0
  99. package/dist/components/messages/__tests-cy__/message-user.test.js.map +1 -0
  100. package/dist/components/messages/message-agent.d.ts +14 -0
  101. package/dist/components/messages/message-agent.d.ts.map +1 -0
  102. package/dist/components/messages/message-agent.js +15 -0
  103. package/dist/components/messages/message-agent.js.map +1 -0
  104. package/dist/components/messages/message-agent.module.less +51 -0
  105. package/dist/components/messages/message-avatar.d.ts +9 -0
  106. package/dist/components/messages/message-avatar.d.ts.map +1 -0
  107. package/dist/components/messages/message-avatar.js +17 -0
  108. package/dist/components/messages/message-avatar.js.map +1 -0
  109. package/dist/components/messages/message-avatar.module.less +26 -0
  110. package/dist/components/messages/message-footer.d.ts +7 -0
  111. package/dist/components/messages/message-footer.d.ts.map +1 -0
  112. package/dist/components/messages/message-footer.js +7 -0
  113. package/dist/components/messages/message-footer.js.map +1 -0
  114. package/dist/components/messages/message-system.d.ts +8 -0
  115. package/dist/components/messages/message-system.d.ts.map +1 -0
  116. package/dist/components/messages/message-system.js +12 -0
  117. package/dist/components/messages/message-system.js.map +1 -0
  118. package/dist/components/messages/message-system.module.less +26 -0
  119. package/dist/components/messages/message-timeout.d.ts +7 -0
  120. package/dist/components/messages/message-timeout.d.ts.map +1 -0
  121. package/dist/components/messages/message-timeout.js +14 -0
  122. package/dist/components/messages/message-timeout.js.map +1 -0
  123. package/dist/components/messages/message-typing.d.ts +7 -0
  124. package/dist/components/messages/message-typing.d.ts.map +1 -0
  125. package/dist/components/messages/message-typing.js +6 -0
  126. package/dist/components/messages/message-typing.js.map +1 -0
  127. package/dist/components/messages/message-typing.module.less +40 -0
  128. package/dist/components/messages/message-user.d.ts +8 -0
  129. package/dist/components/messages/message-user.d.ts.map +1 -0
  130. package/dist/components/messages/message-user.js +10 -0
  131. package/dist/components/messages/message-user.js.map +1 -0
  132. package/dist/components/messages/message-user.module.less +32 -0
  133. package/dist/components/messages/use-avatar-props.d.ts +4 -0
  134. package/dist/components/messages/use-avatar-props.d.ts.map +1 -0
  135. package/dist/components/messages/use-avatar-props.js +11 -0
  136. package/dist/components/messages/use-avatar-props.js.map +1 -0
  137. package/dist/index.d.ts +14 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +14 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/stores/__tests__/chat-input.store.test.d.ts +2 -0
  142. package/dist/stores/__tests__/chat-input.store.test.d.ts.map +1 -0
  143. package/dist/stores/__tests__/chat-input.store.test.js +36 -0
  144. package/dist/stores/__tests__/chat-input.store.test.js.map +1 -0
  145. package/dist/stores/chat-input.store.d.ts +10 -0
  146. package/dist/stores/chat-input.store.d.ts.map +1 -0
  147. package/dist/stores/chat-input.store.js +46 -0
  148. package/dist/stores/chat-input.store.js.map +1 -0
  149. package/package.json +53 -0
  150. package/src/assets/floating-chat-avatar.svg +16 -0
  151. package/src/components/chat/__tests-cy__/chat-messages.test.tsx +111 -0
  152. package/src/components/chat/__tests-cy__/chat.test.tsx +164 -0
  153. package/src/components/chat/chat-connecting.tsx +23 -0
  154. package/src/components/chat/chat-error.module.less +6 -0
  155. package/src/components/chat/chat-error.module.less.d.ts +3 -0
  156. package/src/components/chat/chat-error.tsx +40 -0
  157. package/src/components/chat/chat-input-file.tsx +70 -0
  158. package/src/components/chat/chat-input.module.less +11 -0
  159. package/src/components/chat/chat-input.module.less.d.ts +3 -0
  160. package/src/components/chat/chat-input.tsx +144 -0
  161. package/src/components/chat/chat-log.tsx +28 -0
  162. package/src/components/chat/chat-message-template-agent.tsx +29 -0
  163. package/src/components/chat/chat-message-template-user.tsx +53 -0
  164. package/src/components/chat/chat-message-typing.tsx +19 -0
  165. package/src/components/chat/chat-message.tsx +84 -0
  166. package/src/components/chat/chat-messages.tsx +66 -0
  167. package/src/components/chat/chat-notifications.tsx +19 -0
  168. package/src/components/chat/chat-timer.module.less +5 -0
  169. package/src/components/chat/chat-timer.module.less.d.ts +3 -0
  170. package/src/components/chat/chat-timer.tsx +34 -0
  171. package/src/components/chat/chat.tsx +60 -0
  172. package/src/components/common/multiline-text.module.less +9 -0
  173. package/src/components/common/multiline-text.module.less.d.ts +3 -0
  174. package/src/components/common/multiline-text.tsx +30 -0
  175. package/src/components/message-content/message-content-file.tsx +28 -0
  176. package/src/components/message-content/message-content-text.tsx +12 -0
  177. package/src/components/messages/__tests-cy__/message-agent.test.tsx +142 -0
  178. package/src/components/messages/__tests-cy__/message-system.test.tsx +32 -0
  179. package/src/components/messages/__tests-cy__/message-timeout.test.tsx +29 -0
  180. package/src/components/messages/__tests-cy__/message-typing.test.tsx +57 -0
  181. package/src/components/messages/__tests-cy__/message-user.test.tsx +41 -0
  182. package/src/components/messages/message-agent.module.less +51 -0
  183. package/src/components/messages/message-agent.module.less.d.ts +8 -0
  184. package/src/components/messages/message-agent.tsx +69 -0
  185. package/src/components/messages/message-avatar.module.less +26 -0
  186. package/src/components/messages/message-avatar.module.less.d.ts +5 -0
  187. package/src/components/messages/message-avatar.tsx +38 -0
  188. package/src/components/messages/message-footer.tsx +18 -0
  189. package/src/components/messages/message-system.module.less +26 -0
  190. package/src/components/messages/message-system.module.less.d.ts +5 -0
  191. package/src/components/messages/message-system.tsx +36 -0
  192. package/src/components/messages/message-timeout.tsx +47 -0
  193. package/src/components/messages/message-typing.module.less +40 -0
  194. package/src/components/messages/message-typing.module.less.d.ts +5 -0
  195. package/src/components/messages/message-typing.tsx +21 -0
  196. package/src/components/messages/message-user.module.less +32 -0
  197. package/src/components/messages/message-user.module.less.d.ts +7 -0
  198. package/src/components/messages/message-user.tsx +46 -0
  199. package/src/components/messages/use-avatar-props.tsx +16 -0
  200. package/src/cypress.d.ts +10 -0
  201. package/src/index.ts +13 -0
  202. package/src/stores/__tests__/chat-input.store.test.ts +43 -0
  203. package/src/stores/chat-input.store.ts +25 -0
  204. package/tsconfig.json +24 -0
  205. package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,118 @@
1
+ # v3.0.0 (Tue Jul 15 2025)
2
+
3
+ #### 💥 Breaking Change
4
+
5
+ - SPA-6889: Common client interface for HC Chatbot and Titan Chatbot [#28](https://github.com/servicetitan/titan-chatbot-client/pull/28) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
6
+
7
+ #### Authors: 1
8
+
9
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
10
+
11
+ ---
12
+
13
+ # v2.0.4 (Mon Jun 09 2025)
14
+
15
+ #### 🐛 Bug Fix
16
+
17
+ - SPA-6766: Swapped data-cy and data-cy2 for chat message [#22](https://github.com/servicetitan/titan-chatbot-client/pull/22) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
18
+
19
+ #### Authors: 1
20
+
21
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
22
+
23
+ ---
24
+
25
+ # v2.0.3 (Mon Jun 09 2025)
26
+
27
+ #### 🐛 Bug Fix
28
+
29
+ - SPA-6766: Reorganized packages [#21](https://github.com/servicetitan/titan-chatbot-client/pull/21) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
30
+
31
+ #### Authors: 1
32
+
33
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
34
+
35
+ ---
36
+
37
+ # v2.0.2 (Mon Jun 09 2025)
38
+
39
+ #### 🐛 Bug Fix
40
+
41
+ - SPA-6766: Changed local import [#18](https://github.com/servicetitan/titan-chatbot-client/pull/18) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
42
+ - SPA-6766: [Chat/Chatbot package] Create missing unit and cypress comp… [#17](https://github.com/servicetitan/titan-chatbot-client/pull/17) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
43
+
44
+ #### Authors: 1
45
+
46
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
47
+
48
+ ---
49
+
50
+ # v2.0.1 (Tue Jun 03 2025)
51
+
52
+ #### 🐛 Bug Fix
53
+
54
+ - SPA-6767: [Help Center] Utilize chat/chatbot UI packages in the HC [#14](https://github.com/servicetitan/titan-chatbot-client/pull/14) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
55
+
56
+ #### Authors: 1
57
+
58
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
59
+
60
+ ---
61
+
62
+ # v2.0.0 (Mon Jun 02 2025)
63
+
64
+ #### 💥 Breaking Change
65
+
66
+ - SPA-6767: [Help Center] Utilize chat/chatbot UI packages in the HC [#13](https://github.com/servicetitan/titan-chatbot-client/pull/13) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
67
+
68
+ #### Authors: 1
69
+
70
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
71
+
72
+ ---
73
+
74
+ # v1.1.2 (Wed May 21 2025)
75
+
76
+ #### 🐛 Bug Fix
77
+
78
+ - SPA-5484 [#10](https://github.com/servicetitan/titan-chatbot-client/pull/10) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
79
+
80
+ #### Authors: 1
81
+
82
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
83
+
84
+ ---
85
+
86
+ # v1.1.1 (Tue May 13 2025)
87
+
88
+ #### 🐛 Bug Fix
89
+
90
+ - SPA-5484: Move chatbot stores into the package [#8](https://github.com/servicetitan/titan-chatbot-client/pull/8) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
91
+
92
+ #### Authors: 1
93
+
94
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
95
+
96
+ ---
97
+
98
+ # v1.1.0 (Tue May 13 2025)
99
+
100
+ #### 🚀 Enhancement
101
+
102
+ - SPA-5484: Improved error handling [#7](https://github.com/servicetitan/titan-chatbot-client/pull/7) ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
103
+
104
+ #### Authors: 1
105
+
106
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
107
+
108
+ ---
109
+
110
+ # v0.0.0 (Mon May 12 2025)
111
+
112
+ #### ⚠️ Pushed to `master`
113
+
114
+ Initial commit!
115
+
116
+ #### Authors: 1
117
+
118
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # ServiceTitan Chat UI
2
+
3
+ This package contains the React components and hooks for the ServiceTitan Chat UI.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @servicetitan/titan-chat-ui
9
+ ```
10
+
11
+ ## Description
12
+
13
+ This package provides a set of React components and hooks for building chat interfaces in ServiceTitan applications. It is designed to be used with the ServiceTitan Chatbot Client and provides a consistent look and feel across different chat interfaces.
14
+
15
+ The components are based on the ServiceTitan design system and are built to be easily customizable and extensible.
@@ -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,95 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Provider } from '@servicetitan/react-ioc';
3
+ import { CHAT_UI_STORE_TOKEN, mockChatMessageModelText } from '@servicetitan/titan-chat-ui-common';
4
+ import { ChatUiSelectors, CypressMocks } from '@servicetitan/titan-chatbot-ui-cypress';
5
+ import { mount } from 'cypress/react';
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 CypressMocks.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, { messages: storeMock.messages }) }));
21
+ };
22
+ it('should render default chat', () => {
23
+ render();
24
+ ChatUiSelectors.chatMessages.should('be.visible');
25
+ ChatUiSelectors.chatMessage.should('have.length', 2);
26
+ });
27
+ it('should render several consecutive agent messages without extra avatars', () => {
28
+ storeMock.messages = [
29
+ mockChatMessageModelText(true, {
30
+ id: 'id1',
31
+ timestamp: new Date('2023-01-01T10:10:00Z'),
32
+ message: 'Hello, this is the first message',
33
+ }),
34
+ mockChatMessageModelText(true, {
35
+ id: 'id2',
36
+ message: 'Hello, this is the second message. '.repeat(5).trim(),
37
+ timestamp: new Date('2023-01-01T10:10:59.999Z'),
38
+ }),
39
+ mockChatMessageModelText(true, {
40
+ id: 'id3',
41
+ message: 'Hello, this is the third message',
42
+ timestamp: new Date('2023-01-01T10:11:00Z'),
43
+ }),
44
+ mockChatMessageModelText(true, {
45
+ id: 'id4',
46
+ message: 'Hello, this is the forth message',
47
+ timestamp: new Date('2023-01-01T10:11:01Z'),
48
+ }),
49
+ mockChatMessageModelText(false, {
50
+ id: 'id11',
51
+ timestamp: new Date('2023-01-01T11:10:00Z'),
52
+ message: 'Hello, this is the first message',
53
+ }),
54
+ mockChatMessageModelText(false, {
55
+ id: 'id22',
56
+ message: 'Hello, this is the second message',
57
+ timestamp: new Date('2023-01-01T11:11:00Z'),
58
+ }),
59
+ mockChatMessageModelText(false, {
60
+ id: 'id33',
61
+ message: 'Hello, this is the third message',
62
+ timestamp: new Date('2023-01-01T11:12:00Z'),
63
+ }),
64
+ mockChatMessageModelText(false, {
65
+ id: 'id44',
66
+ message: 'Hello, this is the forth message',
67
+ timestamp: new Date('2023-01-01T11:12:01Z'),
68
+ }),
69
+ ];
70
+ render();
71
+ const getTimestamp = (i) => ChatUiSelectors.chatMessage
72
+ .eq(i)
73
+ .find(`[data-cy="${ChatUiSelectors.cy.chatMessageFooter}"]`);
74
+ ChatUiSelectors.chatMessageAgent.should('have.length', 4);
75
+ ChatUiSelectors.chatMessageUser.should('have.length', 4);
76
+ // Agent avatar should be visible only for the first message in group
77
+ const getAvatar = (i) => ChatUiSelectors.chatMessageAgent
78
+ .find(`[data-cy="${ChatUiSelectors.cy.chatAvatar}"]`)
79
+ .eq(i);
80
+ getAvatar(0).should('be.visible');
81
+ getAvatar(1).should('not.exist');
82
+ getAvatar(2).should('not.exist');
83
+ getAvatar(3).should('not.exist');
84
+ // Footer with date should be visible only for the different formatted timestamps
85
+ getTimestamp(0).should('not.exist');
86
+ getTimestamp(1).should('be.visible').should('contain.text', 'agent • 10:10 AM');
87
+ getTimestamp(2).should('not.exist');
88
+ getTimestamp(3).should('be.visible').should('contain.text', 'agent • 10:11 AM');
89
+ getTimestamp(4).should('be.visible').should('contain.text', '11:10 AM');
90
+ getTimestamp(5).should('be.visible').should('contain.text', '11:11 AM');
91
+ getTimestamp(6).should('not.exist');
92
+ getTimestamp(7).should('be.visible').should('contain.text', '11:12 AM');
93
+ });
94
+ });
95
+ //# 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":"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"}
@@ -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,130 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AnvilProvider } from '@servicetitan/anvil2';
3
+ import { Container, provide, useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHAT_UI_BACKEND_STORE_TOKEN, CHAT_UI_STORE_TOKEN, ChatParticipantIcon, ChatUiBackendEchoStore, ChatUiStore, } from '@servicetitan/titan-chat-ui-common';
5
+ import { ChatUiSelectors } from '@servicetitan/titan-chatbot-ui-cypress';
6
+ import { mount as cyMount } from 'cypress/react';
7
+ import { useEffect } from 'react';
8
+ import { Chat } from '../chat';
9
+ const mount = (children) => {
10
+ return cyMount(_jsx(AnvilProvider, { children: children }));
11
+ };
12
+ const initContainer = () => {
13
+ const rootContainer = new Container();
14
+ const container = new Container();
15
+ container.parent = rootContainer;
16
+ container.bind(CHAT_UI_STORE_TOKEN).to(ChatUiStore).inSingletonScope();
17
+ container
18
+ .bind(CHAT_UI_BACKEND_STORE_TOKEN)
19
+ .to(ChatUiBackendEchoStore)
20
+ .inSingletonScope();
21
+ return container;
22
+ };
23
+ describe('[Chat]', () => {
24
+ let container;
25
+ let chatUiStore;
26
+ let chatUiBackendStore;
27
+ beforeEach(() => {
28
+ container = initContainer();
29
+ chatUiStore = container.get(CHAT_UI_STORE_TOKEN);
30
+ chatUiBackendStore = container.get(CHAT_UI_BACKEND_STORE_TOKEN);
31
+ cy.viewport(780, 800);
32
+ cy.clock(Date.parse('2023-10-01T00:00:00Z'));
33
+ });
34
+ const render = () => {
35
+ const ChatWrapper = provide({
36
+ singletons: [
37
+ {
38
+ provide: CHAT_UI_STORE_TOKEN,
39
+ useValue: chatUiStore,
40
+ },
41
+ {
42
+ provide: CHAT_UI_BACKEND_STORE_TOKEN,
43
+ useValue: chatUiBackendStore,
44
+ },
45
+ ],
46
+ })(() => {
47
+ const [chatUiStore, chatUiBackendStore] = useDependencies(CHAT_UI_STORE_TOKEN, CHAT_UI_BACKEND_STORE_TOKEN);
48
+ useEffect(() => {
49
+ const init = async () => {
50
+ chatUiBackendStore.subscribe();
51
+ await chatUiStore.run({
52
+ agentName: 'EchoBot',
53
+ agentIcon: ChatParticipantIcon.Bot,
54
+ });
55
+ };
56
+ init().then(() => { });
57
+ return () => chatUiBackendStore.unsubscribe();
58
+ }, [chatUiStore, chatUiBackendStore]);
59
+ return _jsx(Chat, { className: "h-100vh max-h-100vh" });
60
+ });
61
+ cy.spy(chatUiStore, 'run').as('runSpy');
62
+ mount(_jsx(ChatWrapper, {}));
63
+ ChatUiSelectors.chatConnecting.should('be.visible');
64
+ cy.tick(1000);
65
+ return cy.wrap(new Promise(resolve => {
66
+ cy.get('@runSpy')
67
+ .should('have.been.calledOnce')
68
+ .then((invocation) => {
69
+ const initPromise = invocation.firstCall.returnValue;
70
+ initPromise.then(resolve);
71
+ });
72
+ }));
73
+ };
74
+ const ask = (message) => {
75
+ ChatUiSelectors.chatInput.type(`${message}{enter}`);
76
+ };
77
+ it('should render default chat', () => {
78
+ render().then(() => {
79
+ ChatUiSelectors.chatMessages.should('be.visible');
80
+ ChatUiSelectors.chatMessageAgent.should('have.length', 1).should('be.visible');
81
+ ChatUiSelectors.chatMessageContentAgent
82
+ .should('be.visible')
83
+ .should('contain.text', "Hello! I'm generic echo bot. I can echo your messages. Try it out!");
84
+ ChatUiSelectors.chatNotifications.should('exist');
85
+ ChatUiSelectors.chatSend.should('be.visible').should('be.disabled');
86
+ ChatUiSelectors.chatInput.should('be.visible').should('not.be.disabled');
87
+ ChatUiSelectors.chatInput.type('Hello');
88
+ ChatUiSelectors.chatSend.click();
89
+ ChatUiSelectors.chatMessageUser
90
+ .should('be.visible')
91
+ .should('have.length', 1)
92
+ .should('contain.text', 'Hello');
93
+ ChatUiSelectors.chatMessageTyping.should('be.visible');
94
+ ChatUiSelectors.chatMessageAgent.should('have.length', 1);
95
+ cy.tick(1000);
96
+ ChatUiSelectors.chatMessageTyping.should('not.exist');
97
+ ChatUiSelectors.chatMessageAgent.should('have.length', 2);
98
+ });
99
+ });
100
+ it('should render chat error message', () => {
101
+ render().then(() => {
102
+ chatUiStore.setTimer({ secondsTotal: 100, secondsLeft: 10 });
103
+ chatUiStore.setError('error message', {
104
+ title: 'Custom Error',
105
+ recoverStrategy: {
106
+ recoverButtonTitle: 'Recover button title',
107
+ },
108
+ });
109
+ ChatUiSelectors.chatTimer.should('not.exist');
110
+ ChatUiSelectors.chatError.should('be.visible');
111
+ });
112
+ });
113
+ it('should handle send message error and retry', () => {
114
+ render().then(() => {
115
+ ask('[Error]Custom error message');
116
+ cy.tick(1000);
117
+ // Check error message
118
+ ChatUiSelectors.chatMessageError
119
+ .should('be.visible')
120
+ .should('contain.text', 'Message not delivered. Retry');
121
+ ChatUiSelectors.chatError
122
+ .should('be.visible')
123
+ .should('contain.text', ['Custom Error Title', 'Custom error message'].join(''));
124
+ // Retry message
125
+ ChatUiSelectors.chatMessageErrorRetry.should('be.visible').click();
126
+ cy.tick(1000);
127
+ });
128
+ });
129
+ });
130
+ //# 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 { Flex, Spinner, Text } from '@servicetitan/anvil2';
3
+ export const ChatConnecting = ({ className }) => {
4
+ return (_jsx(Flex, { direction: "column", gap: "4", alignItems: "center", className: className, "data-cy": "titan-chat-connecting", children: _jsxs(Flex, { direction: "row", gap: "4", alignItems: "center", children: [_jsx(Spinner, {}), _jsx(Text, { 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,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAO3D,MAAM,CAAC,MAAM,cAAc,GAA6B,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IACtE,OAAO,CACH,KAAC,IAAI,IACD,SAAS,EAAC,QAAQ,EAClB,GAAG,EAAC,GAAG,EACP,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,SAAS,aACZ,uBAAuB,YAE/B,MAAC,IAAI,IAAC,SAAS,EAAC,KAAK,EAAC,GAAG,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAC7C,KAAC,OAAO,KAAG,EACX,KAAC,IAAI,IAAC,SAAS,EAAC,eAAe,4BAAmB,IAC/C,GACJ,CACV,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":"AAIA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,EA+BtB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Announcement, Button } from '@servicetitan/anvil2';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHAT_UI_STORE_TOKEN } from '@servicetitan/titan-chat-ui-common';
5
+ import { observer } from 'mobx-react';
6
+ import { useCallback } from 'react';
7
+ import { MultilineText } from '../common/multiline-text';
8
+ import * as Styles from './chat-error.module.less';
9
+ export const ChatError = observer(() => {
10
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
11
+ const { error } = chatUiStore;
12
+ const handleReconnect = useCallback(async () => {
13
+ await chatUiStore.recover();
14
+ }, [chatUiStore]);
15
+ if (!error) {
16
+ return null;
17
+ }
18
+ return (_jsxs(Announcement, { status: "danger", title: error.title, className: Styles.banner, "data-cy": "titan-chat-error", children: [_jsx(MultilineText, { text: error.message, "data-cy": "titan-chat-error-text" }), error.recoverStrategy && (_jsx(Button, { className: "m-t-2 bg-white-i", size: "small", onClick: handleReconnect, "data-cy": "titan-chat-error-recover", children: error.recoverStrategy.recoverButtonTitle }))] }));
19
+ });
20
+ //# 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,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,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;IAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;IAE9B,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,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,YAAY,IACT,MAAM,EAAC,QAAQ,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,aAChB,kBAAkB,aAE1B,KAAC,aAAa,IAAC,IAAI,EAAE,KAAK,CAAC,OAAO,aAAU,uBAAuB,GAAG,EACrE,KAAK,CAAC,eAAe,IAAI,CACtB,KAAC,MAAM,IACH,SAAS,EAAC,kBAAkB,EAC5B,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,eAAe,aAChB,0BAA0B,YAEjC,KAAK,CAAC,eAAe,CAAC,kBAAkB,GACpC,CACZ,IACU,CAClB,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":"AAMA,OAAO,EAAE,EAAE,EAAoC,MAAM,OAAO,CAAC;AAE7D,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA6DnD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ import { Flex, Text } from '@servicetitan/anvil2';
4
+ import { useDependencies } from '@servicetitan/react-ioc';
5
+ import { CHAT_UI_STORE_TOKEN } from '@servicetitan/titan-chat-ui-common';
6
+ import { observer } from 'mobx-react';
7
+ import { useCallback, useEffect, useState } from 'react';
8
+ export const ChatInputFile = observer(({ className }) => {
9
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
10
+ const [fileDescriptor, setFileDescriptor] = useState(undefined);
11
+ const handleSelected = useCallback((newAttachments) => {
12
+ const fileDescriptor = {
13
+ file: newAttachments[0],
14
+ displayName: newAttachments[0].name,
15
+ };
16
+ setFileDescriptor(fileDescriptor);
17
+ chatUiStore.setFile(fileDescriptor);
18
+ }, [chatUiStore]);
19
+ const handleReplace = useCallback(({ newFile }) => {
20
+ const fileDescriptor = {
21
+ file: newFile,
22
+ displayName: newFile.name,
23
+ };
24
+ setFileDescriptor(fileDescriptor);
25
+ chatUiStore.setFile(fileDescriptor);
26
+ }, [chatUiStore]);
27
+ const handleDelete = useCallback(() => {
28
+ setFileDescriptor(undefined);
29
+ chatUiStore.setFile(undefined);
30
+ }, [chatUiStore]);
31
+ useEffect(() => {
32
+ if (!chatUiStore.file) {
33
+ setFileDescriptor(undefined);
34
+ }
35
+ }, [chatUiStore.file]);
36
+ if (!chatUiStore.isFilePickerEnabled) {
37
+ return null;
38
+ }
39
+ return (_jsxs(Flex, { className: className, gap: "6", direction: "column", children: [_jsx(Text, { variant: "eyebrow", children: "Upload file" }), "FILE PICKER PLACEHOLDER"] }));
40
+ });
41
+ //# 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,sDAAsD;AACtD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7D,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,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAC,GAAG,EAAC,SAAS,EAAC,QAAQ,aAClD,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,4BAAmB,+BAevC,CACV,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":"AAMA,OAAO,EAAE,EAAE,EAA2D,MAAM,OAAO,CAAC;AAMpF,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAmIhD,CAAC"}