@servicetitan/titan-chatbot-ui 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 (226) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/README.md +15 -0
  3. package/dist/components/chatbot/__tests-cy__/chatbot-help-center.test.d.ts +2 -0
  4. package/dist/components/chatbot/__tests-cy__/chatbot-help-center.test.d.ts.map +1 -0
  5. package/dist/components/chatbot/__tests-cy__/chatbot-help-center.test.js +160 -0
  6. package/dist/components/chatbot/__tests-cy__/chatbot-help-center.test.js.map +1 -0
  7. package/dist/components/chatbot/__tests-cy__/chatbot-live.test.d.ts +2 -0
  8. package/dist/components/chatbot/__tests-cy__/chatbot-live.test.d.ts.map +1 -0
  9. package/dist/components/chatbot/__tests-cy__/chatbot-live.test.js +90 -0
  10. package/dist/components/chatbot/__tests-cy__/chatbot-live.test.js.map +1 -0
  11. package/dist/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.d.ts +2 -0
  12. package/dist/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.d.ts.map +1 -0
  13. package/dist/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.js +155 -0
  14. package/dist/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.js.map +1 -0
  15. package/dist/components/chatbot/__tests-cy__/chatbot.test.d.ts +2 -0
  16. package/dist/components/chatbot/__tests-cy__/chatbot.test.d.ts.map +1 -0
  17. package/dist/components/chatbot/__tests-cy__/chatbot.test.js +139 -0
  18. package/dist/components/chatbot/__tests-cy__/chatbot.test.js.map +1 -0
  19. package/dist/components/chatbot/chatbot-to-chat-provider-adapter.d.ts +6 -0
  20. package/dist/components/chatbot/chatbot-to-chat-provider-adapter.d.ts.map +1 -0
  21. package/dist/components/chatbot/chatbot-to-chat-provider-adapter.js +21 -0
  22. package/dist/components/chatbot/chatbot-to-chat-provider-adapter.js.map +1 -0
  23. package/dist/components/chatbot/chatbot.d.ts +9 -0
  24. package/dist/components/chatbot/chatbot.d.ts.map +1 -0
  25. package/dist/components/chatbot/chatbot.js +68 -0
  26. package/dist/components/chatbot/chatbot.js.map +1 -0
  27. package/dist/components/chatbot/dialog/chatbot-restart-dialog.d.ts +6 -0
  28. package/dist/components/chatbot/dialog/chatbot-restart-dialog.d.ts.map +1 -0
  29. package/dist/components/chatbot/dialog/chatbot-restart-dialog.js +20 -0
  30. package/dist/components/chatbot/dialog/chatbot-restart-dialog.js.map +1 -0
  31. package/dist/components/chatbot/dialog/chatbot-restart-link.d.ts +4 -0
  32. package/dist/components/chatbot/dialog/chatbot-restart-link.d.ts.map +1 -0
  33. package/dist/components/chatbot/dialog/chatbot-restart-link.js +13 -0
  34. package/dist/components/chatbot/dialog/chatbot-restart-link.js.map +1 -0
  35. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.d.ts +2 -0
  36. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.d.ts.map +1 -0
  37. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.js +65 -0
  38. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.js.map +1 -0
  39. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.d.ts +2 -0
  40. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.d.ts.map +1 -0
  41. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.js +100 -0
  42. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.js.map +1 -0
  43. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.d.ts +3 -0
  44. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.d.ts.map +1 -0
  45. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.js +13 -0
  46. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.js.map +1 -0
  47. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.d.ts +3 -0
  48. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.d.ts.map +1 -0
  49. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.js +12 -0
  50. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.js.map +1 -0
  51. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.module.less +15 -0
  52. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.d.ts +9 -0
  53. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.d.ts.map +1 -0
  54. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js +60 -0
  55. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js.map +1 -0
  56. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.module.less +10 -0
  57. package/dist/components/chatbot/feedback/chatbot-message-feedback.d.ts +9 -0
  58. package/dist/components/chatbot/feedback/chatbot-message-feedback.d.ts.map +1 -0
  59. package/dist/components/chatbot/feedback/chatbot-message-feedback.js +17 -0
  60. package/dist/components/chatbot/feedback/chatbot-message-feedback.js.map +1 -0
  61. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.d.ts +4 -0
  62. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.d.ts.map +1 -0
  63. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.js +16 -0
  64. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.js.map +1 -0
  65. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.d.ts +5 -0
  66. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.d.ts.map +1 -0
  67. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.js +24 -0
  68. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.js.map +1 -0
  69. package/dist/components/chatbot/filters/chatbot-filter.d.ts +8 -0
  70. package/dist/components/chatbot/filters/chatbot-filter.d.ts.map +1 -0
  71. package/dist/components/chatbot/filters/chatbot-filter.js +61 -0
  72. package/dist/components/chatbot/filters/chatbot-filter.js.map +1 -0
  73. package/dist/components/chatbot/filters/chatbot-filter.module.css +19 -0
  74. package/dist/components/chatbot/filters/chatbot-filters.d.ts +5 -0
  75. package/dist/components/chatbot/filters/chatbot-filters.d.ts.map +1 -0
  76. package/dist/components/chatbot/filters/chatbot-filters.js +11 -0
  77. package/dist/components/chatbot/filters/chatbot-filters.js.map +1 -0
  78. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.d.ts +2 -0
  79. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.d.ts.map +1 -0
  80. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.js +85 -0
  81. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.js.map +1 -0
  82. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.d.ts +2 -0
  83. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.d.ts.map +1 -0
  84. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.js +57 -0
  85. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.js.map +1 -0
  86. package/dist/components/chatbot/messages/chatbot-links.d.ts +15 -0
  87. package/dist/components/chatbot/messages/chatbot-links.d.ts.map +1 -0
  88. package/dist/components/chatbot/messages/chatbot-links.js +21 -0
  89. package/dist/components/chatbot/messages/chatbot-links.js.map +1 -0
  90. package/dist/components/chatbot/messages/chatbot-links.module.less +22 -0
  91. package/dist/components/chatbot/messages/chatbot-message-agent-footer.d.ts +8 -0
  92. package/dist/components/chatbot/messages/chatbot-message-agent-footer.d.ts.map +1 -0
  93. package/dist/components/chatbot/messages/chatbot-message-agent-footer.js +13 -0
  94. package/dist/components/chatbot/messages/chatbot-message-agent-footer.js.map +1 -0
  95. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.d.ts +6 -0
  96. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.d.ts.map +1 -0
  97. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.js +17 -0
  98. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.js.map +1 -0
  99. package/dist/components/chatbot/messages/chatbot-message-answer.d.ts +6 -0
  100. package/dist/components/chatbot/messages/chatbot-message-answer.d.ts.map +1 -0
  101. package/dist/components/chatbot/messages/chatbot-message-answer.js +29 -0
  102. package/dist/components/chatbot/messages/chatbot-message-answer.js.map +1 -0
  103. package/dist/components/chatbot/messages/chatbot-message-answer.module.less +3 -0
  104. package/dist/components/chatbot/messages/chatbot-message-timeout.d.ts +6 -0
  105. package/dist/components/chatbot/messages/chatbot-message-timeout.d.ts.map +1 -0
  106. package/dist/components/chatbot/messages/chatbot-message-timeout.js +17 -0
  107. package/dist/components/chatbot/messages/chatbot-message-timeout.js.map +1 -0
  108. package/dist/components/chatbot/messages/chatbot-message-typing.d.ts +8 -0
  109. package/dist/components/chatbot/messages/chatbot-message-typing.d.ts.map +1 -0
  110. package/dist/components/chatbot/messages/chatbot-message-typing.js +27 -0
  111. package/dist/components/chatbot/messages/chatbot-message-typing.js.map +1 -0
  112. package/dist/components/chatbot/messages/chatbot-message-welcome.d.ts +3 -0
  113. package/dist/components/chatbot/messages/chatbot-message-welcome.d.ts.map +1 -0
  114. package/dist/components/chatbot/messages/chatbot-message-welcome.js +4 -0
  115. package/dist/components/chatbot/messages/chatbot-message-welcome.js.map +1 -0
  116. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.d.ts +6 -0
  117. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.d.ts.map +1 -0
  118. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.js +12 -0
  119. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.js.map +1 -0
  120. package/dist/components/chatbot/templates/chatbot-message-template-agent.d.ts +6 -0
  121. package/dist/components/chatbot/templates/chatbot-message-template-agent.d.ts.map +1 -0
  122. package/dist/components/chatbot/templates/chatbot-message-template-agent.js +10 -0
  123. package/dist/components/chatbot/templates/chatbot-message-template-agent.js.map +1 -0
  124. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.d.ts +6 -0
  125. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.d.ts.map +1 -0
  126. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.js +7 -0
  127. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.js.map +1 -0
  128. package/dist/index.d.ts +6 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +6 -0
  131. package/dist/index.js.map +1 -0
  132. package/dist/stores/__tests__/message-feedback-guardrail.store.test.d.ts +2 -0
  133. package/dist/stores/__tests__/message-feedback-guardrail.store.test.d.ts.map +1 -0
  134. package/dist/stores/__tests__/message-feedback-guardrail.store.test.js +49 -0
  135. package/dist/stores/__tests__/message-feedback-guardrail.store.test.js.map +1 -0
  136. package/dist/stores/__tests__/message-feedback.store.test.d.ts +2 -0
  137. package/dist/stores/__tests__/message-feedback.store.test.d.ts.map +1 -0
  138. package/dist/stores/__tests__/message-feedback.store.test.js +114 -0
  139. package/dist/stores/__tests__/message-feedback.store.test.js.map +1 -0
  140. package/dist/stores/__tests__/session-feedback.store.test.d.ts +2 -0
  141. package/dist/stores/__tests__/session-feedback.store.test.d.ts.map +1 -0
  142. package/dist/stores/__tests__/session-feedback.store.test.js +39 -0
  143. package/dist/stores/__tests__/session-feedback.store.test.js.map +1 -0
  144. package/dist/stores/message-feedback-base.store.d.ts +8 -0
  145. package/dist/stores/message-feedback-base.store.d.ts.map +1 -0
  146. package/dist/stores/message-feedback-base.store.js +2 -0
  147. package/dist/stores/message-feedback-base.store.js.map +1 -0
  148. package/dist/stores/message-feedback-guardrail.store.d.ts +16 -0
  149. package/dist/stores/message-feedback-guardrail.store.d.ts.map +1 -0
  150. package/dist/stores/message-feedback-guardrail.store.js +85 -0
  151. package/dist/stores/message-feedback-guardrail.store.js.map +1 -0
  152. package/dist/stores/message-feedback.store.d.ts +23 -0
  153. package/dist/stores/message-feedback.store.d.ts.map +1 -0
  154. package/dist/stores/message-feedback.store.js +145 -0
  155. package/dist/stores/message-feedback.store.js.map +1 -0
  156. package/dist/stores/session-feedback.store.d.ts +15 -0
  157. package/dist/stores/session-feedback.store.d.ts.map +1 -0
  158. package/dist/stores/session-feedback.store.js +75 -0
  159. package/dist/stores/session-feedback.store.js.map +1 -0
  160. package/dist/utils/__tests__/axios-utils.test.d.ts +2 -0
  161. package/dist/utils/__tests__/axios-utils.test.d.ts.map +1 -0
  162. package/dist/utils/__tests__/axios-utils.test.js +33 -0
  163. package/dist/utils/__tests__/axios-utils.test.js.map +1 -0
  164. package/dist/utils/axios-utils.d.ts +5 -0
  165. package/dist/utils/axios-utils.d.ts.map +1 -0
  166. package/dist/utils/axios-utils.js +23 -0
  167. package/dist/utils/axios-utils.js.map +1 -0
  168. package/dist/utils/test-utils.d.ts +5 -0
  169. package/dist/utils/test-utils.d.ts.map +1 -0
  170. package/dist/utils/test-utils.js +17 -0
  171. package/dist/utils/test-utils.js.map +1 -0
  172. package/package.json +59 -0
  173. package/src/components/chatbot/__tests-cy__/chatbot-help-center.test.tsx +210 -0
  174. package/src/components/chatbot/__tests-cy__/chatbot-live.test.tsx +120 -0
  175. package/src/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.tsx +206 -0
  176. package/src/components/chatbot/__tests-cy__/chatbot.test.tsx +181 -0
  177. package/src/components/chatbot/chatbot-to-chat-provider-adapter.tsx +36 -0
  178. package/src/components/chatbot/chatbot.tsx +95 -0
  179. package/src/components/chatbot/dialog/chatbot-restart-dialog.tsx +36 -0
  180. package/src/components/chatbot/dialog/chatbot-restart-link.tsx +26 -0
  181. package/src/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.tsx +89 -0
  182. package/src/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.tsx +131 -0
  183. package/src/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.tsx +35 -0
  184. package/src/components/chatbot/feedback/chatbot-message-feedback-form.module.less +15 -0
  185. package/src/components/chatbot/feedback/chatbot-message-feedback-form.module.less.d.ts +4 -0
  186. package/src/components/chatbot/feedback/chatbot-message-feedback-form.tsx +65 -0
  187. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.module.less +10 -0
  188. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.module.less.d.ts +4 -0
  189. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx +200 -0
  190. package/src/components/chatbot/feedback/chatbot-message-feedback.tsx +27 -0
  191. package/src/components/chatbot/feedback/chatbot-session-feedback-link.tsx +29 -0
  192. package/src/components/chatbot/feedback/chatbot-session-feedback-modal.tsx +96 -0
  193. package/src/components/chatbot/filters/chatbot-filter.module.css +19 -0
  194. package/src/components/chatbot/filters/chatbot-filter.module.css.d.ts +5 -0
  195. package/src/components/chatbot/filters/chatbot-filter.tsx +160 -0
  196. package/src/components/chatbot/filters/chatbot-filters.tsx +17 -0
  197. package/src/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.tsx +110 -0
  198. package/src/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.tsx +71 -0
  199. package/src/components/chatbot/messages/chatbot-links.module.less +22 -0
  200. package/src/components/chatbot/messages/chatbot-links.module.less.d.ts +4 -0
  201. package/src/components/chatbot/messages/chatbot-links.tsx +76 -0
  202. package/src/components/chatbot/messages/chatbot-message-agent-footer.tsx +35 -0
  203. package/src/components/chatbot/messages/chatbot-message-answer-readonly.tsx +39 -0
  204. package/src/components/chatbot/messages/chatbot-message-answer.module.less +3 -0
  205. package/src/components/chatbot/messages/chatbot-message-answer.module.less.d.ts +3 -0
  206. package/src/components/chatbot/messages/chatbot-message-answer.tsx +55 -0
  207. package/src/components/chatbot/messages/chatbot-message-timeout.tsx +20 -0
  208. package/src/components/chatbot/messages/chatbot-message-typing.tsx +39 -0
  209. package/src/components/chatbot/messages/chatbot-message-welcome.tsx +16 -0
  210. package/src/components/chatbot/templates/chatbot-message-template-agent-readonly.tsx +25 -0
  211. package/src/components/chatbot/templates/chatbot-message-template-agent.tsx +25 -0
  212. package/src/components/chatbot/templates/chatbot-message-template-user-readonly.tsx +16 -0
  213. package/src/cypress.d.ts +10 -0
  214. package/src/index.ts +5 -0
  215. package/src/stores/__tests__/message-feedback-guardrail.store.test.ts +61 -0
  216. package/src/stores/__tests__/message-feedback.store.test.ts +121 -0
  217. package/src/stores/__tests__/session-feedback.store.test.ts +47 -0
  218. package/src/stores/message-feedback-base.store.ts +8 -0
  219. package/src/stores/message-feedback-guardrail.store.ts +60 -0
  220. package/src/stores/message-feedback.store.ts +113 -0
  221. package/src/stores/session-feedback.store.ts +44 -0
  222. package/src/utils/__tests__/axios-utils.test.ts +40 -0
  223. package/src/utils/axios-utils.ts +25 -0
  224. package/src/utils/test-utils.ts +22 -0
  225. package/tsconfig.json +25 -0
  226. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,15 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .formItem {
4
+ margin-bottom: @spacing-2;
5
+ white-space: nowrap;
6
+ }
7
+
8
+ .formItem.textArea {
9
+ margin-bottom: @spacing-1;
10
+ }
11
+
12
+ .formItem.textArea textarea {
13
+ resize: none;
14
+ height: 4lh;
15
+ }
@@ -0,0 +1,9 @@
1
+ import { Models } from '@servicetitan/titan-chatbot-api';
2
+ import { FC } from 'react';
3
+ interface IChatbotMessageFeedbackProps {
4
+ botMessage: Models.IBotMessage;
5
+ className?: string;
6
+ }
7
+ export declare const ChatbotMessageFeedbackPopover: FC<IChatbotMessageFeedbackProps>;
8
+ export {};
9
+ //# sourceMappingURL=chatbot-message-feedback-popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-popover.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":"AAaA,OAAO,EAA0B,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAGjF,OAAO,EAAE,EAAE,EAAyB,MAAM,OAAO,CAAC;AAQlD,UAAU,4BAA4B;IAClC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAAC,4BAA4B,CA0K1E,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Button, ButtonGroup, Eyebrow, Headline, Icon, Link, Popover, Spinner, Stack, } from '@servicetitan/design-system';
3
+ import { provide, useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHATBOT_UI_STORE_TOKEN, Models } from '@servicetitan/titan-chatbot-api';
5
+ import classNames from 'classnames';
6
+ import { observer } from 'mobx-react';
7
+ import { useCallback, useState } from 'react';
8
+ import { MessageFeedbackGuardrailStore } from '../../../stores/message-feedback-guardrail.store';
9
+ import { MessageFeedbackStore } from '../../../stores/message-feedback.store';
10
+ import { ChatbotMessageFeedbackForm } from './chatbot-message-feedback-form';
11
+ import { ChatbotMessageFeedbackFormGuardrail } from './chatbot-message-feedback-form-guardrail';
12
+ import * as Styles from './chatbot-message-feedback-popover.module.less';
13
+ export const ChatbotMessageFeedbackPopover = provide({
14
+ singletons: [MessageFeedbackStore, MessageFeedbackGuardrailStore],
15
+ })(observer(({ botMessage, className }) => {
16
+ var _a;
17
+ const [chatbotUiStore, messageFeedbackStore, messageFeedbackGuardrailStore] = useDependencies(CHATBOT_UI_STORE_TOKEN, MessageFeedbackStore, MessageFeedbackGuardrailStore);
18
+ const [feedbackState, setFeedbackState] = useState(Models.ChatbotFeedbackState.None);
19
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
20
+ const title = (_a = chatbotUiStore.customizations.feedback) === null || _a === void 0 ? void 0 : _a.title;
21
+ const isGuardrail = botMessage.isGuardrailed;
22
+ const feedbackStore = isGuardrail
23
+ ? messageFeedbackGuardrailStore
24
+ : messageFeedbackStore;
25
+ const sendFeedback = useCallback(async (feedback) => {
26
+ setFeedbackState(Models.ChatbotFeedbackState.Sent);
27
+ try {
28
+ const result = await chatbotUiStore.sendMessageFeedback(botMessage, feedback);
29
+ setFeedbackState(result !== null && result !== void 0 ? result : Models.ChatbotFeedbackState.Success);
30
+ }
31
+ catch (_a) {
32
+ setFeedbackState(Models.ChatbotFeedbackState.Failure);
33
+ }
34
+ }, [chatbotUiStore, botMessage]);
35
+ const handleFeedbackThumbsUp = useCallback(async () => {
36
+ await sendFeedback(new Models.Feedback({ rating: Models.FeedbackRatings.ThumbsUp }));
37
+ }, [sendFeedback]);
38
+ const handleFeedbackSubmit = useCallback(async () => {
39
+ const validateResult = await feedbackStore.formState.validate();
40
+ if (validateResult.hasError) {
41
+ return;
42
+ }
43
+ const feedback = feedbackStore.export();
44
+ await sendFeedback(feedback);
45
+ }, [feedbackStore, sendFeedback]);
46
+ if (feedbackState === Models.ChatbotFeedbackState.Sent) {
47
+ return (_jsx(Stack, { direction: "row", spacing: "1", alignItems: "center", className: classNames(className, Styles.feedback), "data-cy": "titan-chatbot-message-feedback-loading", children: _jsx(Spinner, { size: "tiny" }) }));
48
+ }
49
+ if (feedbackState === Models.ChatbotFeedbackState.Success) {
50
+ return (_jsxs(Stack, { direction: "row", spacing: "1", alignItems: "center", className: classNames(className, Styles.feedback), children: [_jsx(Icon, { name: "check", className: "c-green-500" }), _jsx(BodyText, { className: classNames('c-neutral-100', Styles.feedbackResultText), "data-cy": "titan-chatbot-message-feedback-success", children: "Thanks for your feedback." })] }));
51
+ }
52
+ if (feedbackState === Models.ChatbotFeedbackState.Failure) {
53
+ // Feedback is done: either user clicked thumbs up or submitted feedback
54
+ return (_jsxs(Stack, { direction: "row", spacing: "1", alignItems: "center", className: classNames(className, Styles.feedback), "data-cy": "titan-chatbot-message-feedback-failed", children: [_jsx(Icon, { name: "error", className: "c-red-500" }), _jsx(BodyText, { className: classNames('c-red-100', Styles.feedbackResultText), children: "Failed to send feedback." })] }));
55
+ }
56
+ return (_jsxs(Stack, { direction: "row", spacing: "1", alignItems: "center", className: className, children: [!isGuardrail && title && _jsx(Eyebrow, { children: title }), !isGuardrail && (_jsx(Button, { iconName: "thumb_up", xsmall: true, fill: "subtle", "aria-label": "thumb up", onClick: handleFeedbackThumbsUp, "data-cy": "titan-chatbot-message-feedback-thumbs-up" })), _jsx(Popover, { trigger: isGuardrail ? (_jsx(Link, { onClick: () => setIsPopoverOpen(true), className: "fs-1 tt-uppercase", color: "blue", "data-cy": "titan-chatbot-message-feedback-provide-answer", children: "Provide correct answer" })) : (_jsx(Button, { iconName: "thumb_down", xsmall: true, fill: "subtle", onClick: () => setIsPopoverOpen(true), "aria-label": "thumb down", "data-cy": "titan-chatbot-message-feedback-thumbs-down" })), header: _jsx(Stack, { justifyContent: "space-between", alignItems: "center", className: "w-100", children: _jsx(Headline, { size: "small", children: isGuardrail
57
+ ? 'Provide correct answer'
58
+ : 'Why didn’t this answer solve your problem?' }) }), onClickOutside: () => setIsPopoverOpen(false), headerAlign: "space-between", footer: _jsx(ButtonGroup, { children: _jsx(Button, { primary: true, disabled: !feedbackStore.isValid, onClick: handleFeedbackSubmit, "data-cy": "titan-chatbot-message-feedback-submit", children: "Submit" }) }), className: "feedback-form-popover-body", footerAlign: "right", direction: "tr", width: "m", padding: "m", autoFlipVertically: true, autoFlipHorizontally: true, open: isPopoverOpen, children: isGuardrail ? (_jsx(ChatbotMessageFeedbackFormGuardrail, {})) : (_jsx(ChatbotMessageFeedbackForm, {})) })] }));
59
+ }));
60
+ //# sourceMappingURL=chatbot-message-feedback-popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-popover.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .feedback {
4
+ min-width: 200px;
5
+ max-width: 200px;
6
+ }
7
+
8
+ .feedbackResultText {
9
+ white-space: nowrap;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { Models } from '@servicetitan/titan-chatbot-api';
2
+ import { FC } from 'react';
3
+ interface IChatbotFeedbackProps {
4
+ botMessage: Models.IBotMessage;
5
+ className?: string;
6
+ }
7
+ export declare const ChatbotMessageFeedback: FC<IChatbotFeedbackProps>;
8
+ export {};
9
+ //# sourceMappingURL=chatbot-message-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":"AACA,OAAO,EAA0B,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,UAAU,qBAAqB;IAC3B,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,qBAAqB,CAe5D,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useDependencies } from '@servicetitan/react-ioc';
3
+ import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
4
+ import { observer } from 'mobx-react';
5
+ import { ChatbotMessageFeedbackPopover } from './chatbot-message-feedback-popover';
6
+ export const ChatbotMessageFeedback = observer(({ botMessage, className }) => {
7
+ var _a, _b;
8
+ const [chatbotUiStore] = useDependencies(CHATBOT_UI_STORE_TOKEN);
9
+ // We show feedback for all messages with normal answer and for guardrailed messages if internal chatbot setting is enabled
10
+ const showGuardrailFeedback = Boolean((_b = (_a = chatbotUiStore.customizations) === null || _a === void 0 ? void 0 : _a.feedback) === null || _b === void 0 ? void 0 : _b.showGuardrailFeedback);
11
+ const isFeedbackVisible = showGuardrailFeedback || !botMessage.isGuardrailed;
12
+ if (!isFeedbackVisible) {
13
+ return null;
14
+ }
15
+ return _jsx(ChatbotMessageFeedbackPopover, { className: className, botMessage: botMessage });
16
+ });
17
+ //# sourceMappingURL=chatbot-message-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAU,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAOnF,MAAM,CAAC,MAAM,sBAAsB,GAA8B,QAAQ,CACrE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;;IAC1B,MAAM,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,sBAAsB,CAAC,CAAC;IAEjE,2HAA2H;IAC3H,MAAM,qBAAqB,GAAG,OAAO,CACjC,MAAA,MAAA,cAAc,CAAC,cAAc,0CAAE,QAAQ,0CAAE,qBAAqB,CACjE,CAAC;IACF,MAAM,iBAAiB,GAAG,qBAAqB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAE7E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAC,6BAA6B,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC;AAC3F,CAAC,CACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { LinkProps } from '@servicetitan/design-system';
2
+ import { FC } from 'react';
3
+ export declare const ChatbotSessionFeedbackLink: FC<LinkProps>;
4
+ //# sourceMappingURL=chatbot-session-feedback-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-session-feedback-link.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-session-feedback-link.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAC;AAG5D,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,SAAS,CAwBpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from '@servicetitan/design-system';
3
+ import { Fragment, useCallback, useState } from 'react';
4
+ import { ChatbotSessionFeedbackModal } from './chatbot-session-feedback-modal';
5
+ export const ChatbotSessionFeedbackLink = ({ children, onClick, ...rest }) => {
6
+ const [isFeedbackOpen, setIsFeedbackOpen] = useState(false);
7
+ const handleFeedbackOpen = useCallback(() => {
8
+ setIsFeedbackOpen(true);
9
+ onClick === null || onClick === void 0 ? void 0 : onClick();
10
+ }, [onClick]);
11
+ const handleFeedback = useCallback(() => {
12
+ setIsFeedbackOpen(false);
13
+ }, []);
14
+ return (_jsxs(Fragment, { children: [_jsx(Link, { ...rest, onClick: handleFeedbackOpen, "data-cy": "titan-chatbot-session-feedback-link", children: children }), isFeedbackOpen && _jsx(ChatbotSessionFeedbackModal, { onClose: handleFeedback })] }));
15
+ };
16
+ //# sourceMappingURL=chatbot-session-feedback-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-session-feedback-link.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-session-feedback-link.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAM,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,CAAC,MAAM,0BAA0B,GAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IACxF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAC;IAChB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,MAAC,QAAQ,eACL,KAAC,IAAI,OACG,IAAI,EACR,OAAO,EAAE,kBAAkB,aACnB,qCAAqC,YAE5C,QAAQ,GACN,EACN,cAAc,IAAI,KAAC,2BAA2B,IAAC,OAAO,EAAE,cAAc,GAAI,IACpE,CACd,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatbotSessionFeedbackModal: FC<{
3
+ onClose: () => void;
4
+ }>;
5
+ //# sourceMappingURL=chatbot-session-feedback-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-session-feedback-modal.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-session-feedback-modal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAGxC,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAwFnE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Button, ButtonGroup, Form, Modal, Stack } from '@servicetitan/design-system';
3
+ import { provide, useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
5
+ import { observer } from 'mobx-react';
6
+ import { useCallback } from 'react';
7
+ import { SessionFeedbackStore } from '../../../stores/session-feedback.store';
8
+ export const ChatbotSessionFeedbackModal = provide({
9
+ singletons: [SessionFeedbackStore],
10
+ })(observer(({ onClose }) => {
11
+ const [chatbotFeedbackStore, chatbotUiStore] = useDependencies(SessionFeedbackStore, CHATBOT_UI_STORE_TOKEN);
12
+ const handleClose = useCallback(() => {
13
+ onClose();
14
+ }, [onClose]);
15
+ const handleSubmit = useCallback(() => {
16
+ chatbotUiStore.sendSessionFeedback(chatbotFeedbackStore.feedback);
17
+ onClose();
18
+ }, [chatbotUiStore, chatbotFeedbackStore, onClose]);
19
+ const handleThumbs = useCallback((isThumbsUp) => {
20
+ chatbotFeedbackStore.formState.$.thumbs.onChange(isThumbsUp ? 1 : -1);
21
+ }, [chatbotFeedbackStore]);
22
+ return (_jsx(Modal, { onClose: handleClose, open: true, title: "Give Feedback on Titan", size: Modal.Sizes.S, footer: _jsxs(ButtonGroup, { children: [_jsx(Button, { onClick: handleClose, "data-cy": "titan-chatbot-session-feedback-cancel", children: "Cancel" }), _jsx(Button, { onClick: handleSubmit, primary: true, disabled: !chatbotFeedbackStore.isValid, "data-cy": "titan-chatbot-session-feedback-submit", children: "Submit Feedback" })] }), "data-cy": "titan-chatbot-session-feedback-modal", children: _jsxs(Stack, { direction: "column", spacing: "3", children: [_jsxs(Stack, { direction: "column", spacing: "2", children: [_jsx(BodyText, { children: "Was Titan able to help solve your problem?" }), _jsxs(ButtonGroup, { children: [_jsx(Button, { small: true, "aria-label": "Thumbs Up", title: "Thumbs Up", iconName: "thumb_up", fill: "outline", selected: chatbotFeedbackStore.isThumbsUp, onClick: () => handleThumbs(true), "data-cy": "titan-chatbot-session-feedback-thumbs-up" }), _jsx(Button, { small: true, fill: "outline", "aria-label": "Thumbs Down", title: "Thumbs Down", selected: chatbotFeedbackStore.isThumbsDown, iconName: "thumb_down", onClick: () => handleThumbs(false), "data-cy": "titan-chatbot-session-feedback-thumbs-down" })] })] }), _jsx(Form.TextArea, { label: "Tell us more", maxRows: 3, value: chatbotFeedbackStore.formState.$.comment.value, onChange: chatbotFeedbackStore.formState.$.comment.onChangeHandler, "data-cy": "titan-chatbot-session-feedback-comment" })] }) }));
23
+ }));
24
+ //# sourceMappingURL=chatbot-session-feedback-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-session-feedback-modal.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-session-feedback-modal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Models } from '@servicetitan/titan-chatbot-api';
2
+ import { FC } from 'react';
3
+ interface IChatFilterProps {
4
+ filter: Models.IOption;
5
+ }
6
+ export declare const ChatFilter: FC<IChatFilterProps>;
7
+ export {};
8
+ //# sourceMappingURL=chatbot-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filter.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filter.tsx"],"names":[],"mappings":"AAUA,OAAO,EAA0B,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAGjF,OAAO,EAAe,EAAE,EAAqD,MAAM,OAAO,CAAC;AAG3F,UAAU,gBAAgB;IACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,gBAAgB,CA2I1C,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Button, FilterButton, Input, OptionList, Popover, Stack, } from '@servicetitan/design-system';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
5
+ import classNames from 'classnames';
6
+ import { observer } from 'mobx-react';
7
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
+ import * as Style from './chatbot-filter.module.css';
9
+ export const ChatFilter = observer(({ filter }) => {
10
+ var _a, _b;
11
+ const [filterText, setFilterText] = useState('');
12
+ const [open, setOpen] = useState(false);
13
+ const [listMaxHeight, setListMaxHeight] = useState(400);
14
+ const [{ filterStore }] = useDependencies(CHATBOT_UI_STORE_TOKEN);
15
+ const filterLabel = filterStore.getFilterLabel((_a = filter.displayName) !== null && _a !== void 0 ? _a : filter.key);
16
+ const triggerRef = useRef(null);
17
+ const allOptions = useMemo(() => {
18
+ var _a, _b;
19
+ return ((_b = (_a = filter.subOptions) === null || _a === void 0 ? void 0 : _a.map(filterSelectable => {
20
+ var _a;
21
+ return ({
22
+ text: filterStore.getFilterLabel((_a = filterSelectable.displayName) !== null && _a !== void 0 ? _a : filterSelectable.key),
23
+ value: filterSelectable.key,
24
+ });
25
+ })) !== null && _b !== void 0 ? _b : []);
26
+ }, [filterStore, filter.subOptions]);
27
+ const filteredOptions = useMemo(() => {
28
+ return allOptions.filter(opt => opt.text && opt.text.toLowerCase().indexOf(filterText.toLowerCase()) > -1);
29
+ }, [filterText, allOptions]);
30
+ useEffect(() => {
31
+ if (triggerRef.current) {
32
+ const triggerElement = triggerRef.current;
33
+ const boundingRect = triggerElement.getBoundingClientRect();
34
+ const headerFooterSize = 160;
35
+ setListMaxHeight(boundingRect.top - headerFooterSize);
36
+ }
37
+ }, []);
38
+ const handleToggle = () => {
39
+ setOpen(prev => !prev);
40
+ };
41
+ const handleCancel = () => {
42
+ setOpen(false);
43
+ };
44
+ const handleFilterChange = useCallback((event) => {
45
+ setFilterText(event.target.value);
46
+ }, []);
47
+ const handleItemChecked = useCallback((value, checked) => {
48
+ if (checked) {
49
+ filterStore.selectOption(filter.key, value);
50
+ }
51
+ else {
52
+ filterStore.deselectOption(filter.key, value);
53
+ }
54
+ }, [filterStore, filter]);
55
+ return (_jsx(Popover, { el: "span", direction: "t", padding: "s", onClickOutside: handleCancel, open: open, portal: true, className: classNames(Style.filterPopover), scrollHeight: `${listMaxHeight}px`, header: _jsx(Stack, { className: classNames('w-100 p-x-2 p-y-half'), children: _jsx(Input, { onChange: handleFilterChange, value: filterText, size: "small", icon: "search", iconPosition: "left", placeholder: "Search", className: "w-100", "data-cy": "titan-chatbot-filter-search" }) }), footer: _jsxs(Stack, { direction: "row", className: "w-100 p-l-2", alignItems: "baseline", children: [_jsx(BodyText, { size: "small", className: Style.filterBottomText, children: "Select" }), _jsx(Button, { fill: "subtle", primary: true, xsmall: true, onClick: () => {
56
+ filterStore.selectAll(filter.key);
57
+ }, className: Style.filterBottomButton, "data-cy": "titan-chatbot-filter-all", children: "All" }), _jsx(Button, { fill: "subtle", primary: true, xsmall: true, onClick: () => {
58
+ filterStore.deselectAll(filter.key);
59
+ }, className: Style.filterBottomButton, "data-cy": "titan-chatbot-filter-none", children: "None" })] }), trigger: _jsx(FilterButton, { ref: triggerRef, onClick: handleToggle, value: ((_b = filterStore.selectedOptions[filter.key]) === null || _b === void 0 ? void 0 : _b.length) || undefined, label: filterLabel, expandIcon: open, disabled: false, "data-cy": "titan-chatbot-filter-button" }), children: allOptions.length > 0 ? (_jsx(OptionList, { multiple: true, options: filteredOptions, onChange: handleItemChecked, value: filterStore.selectedOptions[filter.key] || [], "data-cy": "titan-chatbot-filter-options" })) : (_jsx(BodyText, { className: "ta-center", size: "small", subdued: true, children: "No items available" })) }));
60
+ });
61
+ //# sourceMappingURL=chatbot-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filter.js","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ @import '@servicetitan/tokens/dist/tokens.css';
2
+
3
+ .filterBottomButton {
4
+ padding-left: var(--spacing-half);
5
+ padding-right: var(--spacing-half);
6
+ }
7
+
8
+ .filterBottomText {
9
+ padding-right: var(--spacing-half);
10
+ }
11
+
12
+ .filterPopover {
13
+ :global(.Popover__header),
14
+ :global(.Popover__content),
15
+ :global(.Popover__footer) {
16
+ padding-left: var(--spacing-1);
17
+ padding-right: var(--spacing-1);
18
+ }
19
+ }
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatFilters: FC<{
3
+ className?: string;
4
+ }>;
5
+ //# sourceMappingURL=chatbot-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filters.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filters.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CASjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Stack } from '@servicetitan/design-system';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
5
+ import { observer } from 'mobx-react';
6
+ import { ChatFilter } from './chatbot-filter';
7
+ export const ChatFilters = observer(({ className }) => {
8
+ const [{ filterStore }] = useDependencies(CHATBOT_UI_STORE_TOKEN);
9
+ return filterStore.filters.length > 0 ? (_jsx(Stack, { className: className, spacing: "1", "data-cy": "titan-chatbot-filters", children: filterStore.filters.map(filter => (_jsx(ChatFilter, { filter: filter }, filter.key))) })) : null;
10
+ });
11
+ //# sourceMappingURL=chatbot-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filters.js","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filters.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAA+B,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9E,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,eAAe,CAAC,sBAAsB,CAAC,CAAC;IAClE,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACpC,KAAC,KAAK,IAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAC,GAAG,aAAS,uBAAuB,YACnE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAC/B,KAAC,UAAU,IAAkB,MAAM,EAAE,MAAM,IAA1B,MAAM,CAAC,GAAG,CAAoB,CAClD,CAAC,GACE,CACX,CAAC,CAAC,CAAC,IAAI,CAAC;AACb,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatbot-message-answer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-answer.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Container, Provider } from '@servicetitan/react-ioc';
3
+ import { mockChatMessageModelText } from '@servicetitan/titan-chat-ui-common';
4
+ import { CHATBOT_UI_STORE_TOKEN, ChatbotUiStore, ModelsMocks, } from '@servicetitan/titan-chatbot-api';
5
+ import { ChatUiSelectors } from '@servicetitan/titan-chatbot-ui-cypress';
6
+ import { mount } from 'cypress/react';
7
+ import { ChatbotMessageAnswer } from '../chatbot-message-answer';
8
+ const initContainer = () => {
9
+ const container = new Container();
10
+ container.bind(CHATBOT_UI_STORE_TOKEN).to(ChatbotUiStore).inSingletonScope();
11
+ return container;
12
+ };
13
+ describe('<ChatbotMessageAnswer />', () => {
14
+ let container;
15
+ let uiStore;
16
+ beforeEach(() => {
17
+ container = initContainer();
18
+ uiStore = container.get(CHATBOT_UI_STORE_TOKEN);
19
+ cy.viewport(780, 800);
20
+ });
21
+ const renderComponent = (message) => {
22
+ const Wrapper = () => (_jsx(Provider, { singletons: [
23
+ {
24
+ provide: CHATBOT_UI_STORE_TOKEN,
25
+ useValue: uiStore,
26
+ },
27
+ ], children: _jsx(ChatbotMessageAnswer, { message: message }) }));
28
+ mount(_jsx(Wrapper, {}));
29
+ };
30
+ it('should render MultilineText and ChatbotLinks when chatbotMessageData exists', () => {
31
+ cy.clock();
32
+ cy.spy(uiStore, 'triggerScroll').as('triggerScroll');
33
+ const botMessage = ModelsMocks.mockBotMessage({
34
+ scoredUrls: ModelsMocks.mockScoredUrls(),
35
+ });
36
+ const message = mockChatMessageModelText(true, {
37
+ message: 'Test message',
38
+ data: botMessage,
39
+ });
40
+ uiStore.setMessages([message]);
41
+ renderComponent(message);
42
+ ChatUiSelectors.chatbotMessageAnswer.should('contain.text', 'Test message');
43
+ ChatUiSelectors.chatbotLinksLink.should('not.be.visible');
44
+ // Expand links
45
+ ChatUiSelectors.chatbotLinksMore
46
+ .should('be.visible')
47
+ .should('have.text', 'Learn more')
48
+ .click();
49
+ cy.tick(100);
50
+ cy.get('@triggerScroll').should('be.called');
51
+ ChatUiSelectors.chatbotLinksLink.should('be.visible').should('have.length', 2);
52
+ // Collapse links
53
+ ChatUiSelectors.chatbotLinksMore
54
+ .should('be.visible')
55
+ .should('have.text', 'Learn less')
56
+ .click();
57
+ cy.tick(100);
58
+ cy.get('@triggerScroll').should('be.called');
59
+ ChatUiSelectors.chatbotLinksLink.should('not.be.visible');
60
+ });
61
+ it('should not render ChatbotLinks when no links exist', () => {
62
+ const botMessage = ModelsMocks.mockBotMessage({
63
+ scoredUrls: [],
64
+ });
65
+ const message = mockChatMessageModelText(true, {
66
+ message: 'Test message',
67
+ data: botMessage,
68
+ });
69
+ renderComponent(message);
70
+ ChatUiSelectors.chatbotMessageAnswer.should('contain.text', 'Test message');
71
+ ChatUiSelectors.chatbotLinksMore.should('not.exist');
72
+ ChatUiSelectors.chatbotLinksLink.should('not.exist');
73
+ });
74
+ it('should not render ChatbotLinks when chatbotMessageData is undefined', () => {
75
+ const message = mockChatMessageModelText(true, {
76
+ message: 'Test message',
77
+ data: undefined,
78
+ });
79
+ renderComponent(message);
80
+ ChatUiSelectors.chatbotMessageAnswer.should('contain.text', 'Test message');
81
+ ChatUiSelectors.chatbotLinksMore.should('not.exist');
82
+ ChatUiSelectors.chatbotLinksLink.should('not.exist');
83
+ });
84
+ });
85
+ //# sourceMappingURL=chatbot-message-answer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-answer.test.js","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatbot-message-typing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-typing.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ChatParticipantIcon } from '@servicetitan/titan-chat-ui-common';
3
+ import { ChatUiSelectors } from '@servicetitan/titan-chatbot-ui-cypress';
4
+ import { mount } from 'cypress/react';
5
+ import { ChatbotMessageTyping } from '../chatbot-message-typing';
6
+ describe('ChatbotMessageTyping', () => {
7
+ function render(icon) {
8
+ const avatar = {
9
+ name: 'Test User Name',
10
+ icon,
11
+ };
12
+ mount(_jsx(ChatbotMessageTyping, { avatar: avatar }));
13
+ ChatUiSelectors.chatMessageTyping.should('be.visible');
14
+ ChatUiSelectors.chatMessageTypingDots.should('be.visible');
15
+ }
16
+ it('should render message with bot icon', () => {
17
+ render(ChatParticipantIcon.Bot);
18
+ ChatUiSelectors.chatAvatarBot
19
+ .should('be.visible')
20
+ .invoke('css', 'background-image')
21
+ .then(bgColor => {
22
+ const isSvg = Boolean(bgColor.indexOf('data:image/svg+xml;base64') >= 0);
23
+ expect(isSvg).to.eq(true);
24
+ });
25
+ });
26
+ it('should render message with empty icon', () => {
27
+ render(ChatParticipantIcon.Empty);
28
+ ChatUiSelectors.chatAvatarBot.should('not.exist');
29
+ ChatUiSelectors.chatAvatarInitials.should('not.exist');
30
+ });
31
+ it('should render message with initials', () => {
32
+ render(ChatParticipantIcon.Initials);
33
+ ChatUiSelectors.chatAvatarInitials.should('be.visible').should('contain.text', 'TU');
34
+ });
35
+ it('should show different messages during the time', () => {
36
+ cy.clock();
37
+ render(ChatParticipantIcon.Bot);
38
+ // Verify the rendered component + check the dots animation doesn't change over the time
39
+ ChatUiSelectors.chatMessageTypingDots.should('be.visible');
40
+ cy.tick(11000);
41
+ ChatUiSelectors.chatMessageContentAgent
42
+ .should('be.visible')
43
+ .should('contain.text', 'Looking for the final details');
44
+ ChatUiSelectors.chatMessageTypingDots.should('not.exist');
45
+ cy.tick(10000);
46
+ ChatUiSelectors.chatMessageContentAgent
47
+ .should('be.visible')
48
+ .should('contain.text', 'This is taking longer than usual, please give me a little bit more time');
49
+ ChatUiSelectors.chatMessageTypingDots.should('not.exist');
50
+ cy.tick(60000);
51
+ ChatUiSelectors.chatMessageContentAgent
52
+ .should('be.visible')
53
+ .should('contain.text', 'This is taking longer than usual, please give me a little bit more time');
54
+ ChatUiSelectors.chatMessageTypingDots.should('not.exist');
55
+ });
56
+ });
57
+ //# sourceMappingURL=chatbot-message-typing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-typing.test.js","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Models } from '@servicetitan/titan-chatbot-api';
2
+ import { FC } from 'react';
3
+ interface ChatLinksProps {
4
+ seeMoreLabel: string;
5
+ seeLessLabel: string;
6
+ links: Models.ScoredUrl[];
7
+ onToggle?: () => void;
8
+ linkProps?: {
9
+ primary?: boolean;
10
+ className?: string;
11
+ };
12
+ }
13
+ export declare const ChatbotLinks: FC<ChatLinksProps>;
14
+ export {};
15
+ //# sourceMappingURL=chatbot-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-links.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-links.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAC;AAG5D,UAAU,cAAc;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,cAAc,CA2D3C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Collapsible, Icon, Link, Stack } from '@servicetitan/design-system';
3
+ import { Fragment, useCallback, useState } from 'react';
4
+ import * as Styles from './chatbot-links.module.less';
5
+ export const ChatbotLinks = ({ linkProps, links, onToggle, seeLessLabel, seeMoreLabel, }) => {
6
+ const [linksCollapsed, setLinksCollapsed] = useState(true);
7
+ const handleToggleCollapsible = useCallback(() => {
8
+ setLinksCollapsed(!linksCollapsed);
9
+ setTimeout(() => {
10
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle();
11
+ }, 200);
12
+ }, [onToggle, linksCollapsed]);
13
+ if (!links.length) {
14
+ return null;
15
+ }
16
+ return (_jsxs(Fragment, { children: [_jsx(Link, { className: "m-t-2", onClick: handleToggleCollapsible, "data-cy": "titan-chatbot-links-more", "data-pendo": "titan-chatbot-links-more", children: _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(BodyText, { el: "div", children: linksCollapsed ? seeMoreLabel : seeLessLabel }), _jsx(Icon, { className: "m-l-half", name: linksCollapsed ? 'keyboard_arrow_down' : 'keyboard_arrow_up' })] }) }), _jsx(Collapsible, { animate: true, open: !linksCollapsed, "data-cy": "titan-chatbot-links-collapsible", children: _jsx("ul", { className: Styles.messageLinkList, children: links.map(u => {
17
+ var _a, _b;
18
+ return (_jsx("li", { children: _jsx(BodyText, { el: "span", children: _jsx(Link, { href: u.url, target: "_blank", className: Styles.messageLink, primary: true, "data-cy": "titan-chatbot-links-link", "data-pendo": "titan-chatbot-links-link-secondary", title: (_a = u.title) !== null && _a !== void 0 ? _a : u.url, ...linkProps, children: (_b = u.title) !== null && _b !== void 0 ? _b : u.url }) }) }, u.url));
19
+ }) }) })] }));
20
+ };
21
+ //# sourceMappingURL=chatbot-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-links.js","sourceRoot":"","sources":["../../../../src/components/chatbot/messages/chatbot-links.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEvF,OAAO,EAAM,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AAatD,MAAM,CAAC,MAAM,YAAY,GAAuB,CAAC,EAC7C,SAAS,EACT,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACf,EAAE,EAAE;IACD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC;QACnC,UAAU,CAAC,GAAG,EAAE;YACZ,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;QACjB,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,QAAQ,eACL,KAAC,IAAI,IACD,SAAS,EAAC,OAAO,EACjB,OAAO,EAAE,uBAAuB,aACxB,0BAA0B,gBACvB,0BAA0B,YAErC,MAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,aACtC,KAAC,QAAQ,IAAC,EAAE,EAAC,KAAK,YAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,GAAY,EAC5E,KAAC,IAAI,IACD,SAAS,EAAC,UAAU,EACpB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,GACpE,IACE,GACL,EACP,KAAC,WAAW,IAAC,OAAO,QAAC,IAAI,EAAE,CAAC,cAAc,aAAU,iCAAiC,YACjF,aAAI,SAAS,EAAE,MAAM,CAAC,eAAe,YAChC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;wBAAC,OAAA,CACZ,uBACI,KAAC,QAAQ,IAAC,EAAE,EAAC,MAAM,YACf,KAAC,IAAI,IACD,IAAI,EAAE,CAAC,CAAC,GAAG,EACX,MAAM,EAAC,QAAQ,EACf,SAAS,EAAE,MAAM,CAAC,WAAW,EAC7B,OAAO,mBACC,0BAA0B,gBACvB,oCAAoC,EAC/C,KAAK,EAAE,MAAA,CAAC,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,KACnB,SAAS,YAEZ,MAAA,CAAC,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,GACd,GACA,IAdN,CAAC,CAAC,GAAG,CAeT,CACR,CAAA;qBAAA,CAAC,GACD,GACK,IACP,CACd,CAAC;AACN,CAAC,CAAC"}