@servicetitan/titan-chatbot-ui-anvil2 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/CHANGELOG.md +166 -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 +8 -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 +8 -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 +8 -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 +8 -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 +10 -0
  24. package/dist/components/chatbot/chatbot.d.ts.map +1 -0
  25. package/dist/components/chatbot/chatbot.js +69 -0
  26. package/dist/components/chatbot/chatbot.js.map +1 -0
  27. package/dist/components/chatbot/chatbot.module.less +4 -0
  28. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-dialog.test.d.ts +2 -0
  29. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-dialog.test.d.ts.map +1 -0
  30. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-dialog.test.js +8 -0
  31. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-dialog.test.js.map +1 -0
  32. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-link.test.d.ts +2 -0
  33. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-link.test.d.ts.map +1 -0
  34. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-link.test.js +8 -0
  35. package/dist/components/chatbot/dialog/__tests-cy__/chatbot-restart-link.test.js.map +1 -0
  36. package/dist/components/chatbot/dialog/chatbot-restart-dialog.d.ts +6 -0
  37. package/dist/components/chatbot/dialog/chatbot-restart-dialog.d.ts.map +1 -0
  38. package/dist/components/chatbot/dialog/chatbot-restart-dialog.js +20 -0
  39. package/dist/components/chatbot/dialog/chatbot-restart-dialog.js.map +1 -0
  40. package/dist/components/chatbot/dialog/chatbot-restart-link.d.ts +4 -0
  41. package/dist/components/chatbot/dialog/chatbot-restart-link.d.ts.map +1 -0
  42. package/dist/components/chatbot/dialog/chatbot-restart-link.js +13 -0
  43. package/dist/components/chatbot/dialog/chatbot-restart-link.js.map +1 -0
  44. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.d.ts +2 -0
  45. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.d.ts.map +1 -0
  46. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.js +8 -0
  47. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.js.map +1 -0
  48. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.d.ts +2 -0
  49. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.d.ts.map +1 -0
  50. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.js +8 -0
  51. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.js.map +1 -0
  52. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-popover.test.d.ts +2 -0
  53. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-popover.test.d.ts.map +1 -0
  54. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-popover.test.js +8 -0
  55. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-popover.test.js.map +1 -0
  56. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-session-feedback-modal.test.d.ts +2 -0
  57. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-session-feedback-modal.test.d.ts.map +1 -0
  58. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-session-feedback-modal.test.js +8 -0
  59. package/dist/components/chatbot/feedback/__tests-cy__/chatbot-session-feedback-modal.test.js.map +1 -0
  60. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.d.ts +3 -0
  61. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.d.ts.map +1 -0
  62. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.js +16 -0
  63. package/dist/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.js.map +1 -0
  64. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.d.ts +3 -0
  65. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.d.ts.map +1 -0
  66. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.js +18 -0
  67. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.js.map +1 -0
  68. package/dist/components/chatbot/feedback/chatbot-message-feedback-form.module.less +15 -0
  69. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.d.ts +9 -0
  70. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.d.ts.map +1 -0
  71. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js +61 -0
  72. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.js.map +1 -0
  73. package/dist/components/chatbot/feedback/chatbot-message-feedback-popover.module.less +14 -0
  74. package/dist/components/chatbot/feedback/chatbot-message-feedback.d.ts +9 -0
  75. package/dist/components/chatbot/feedback/chatbot-message-feedback.d.ts.map +1 -0
  76. package/dist/components/chatbot/feedback/chatbot-message-feedback.js +17 -0
  77. package/dist/components/chatbot/feedback/chatbot-message-feedback.js.map +1 -0
  78. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.d.ts +4 -0
  79. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.d.ts.map +1 -0
  80. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.js +15 -0
  81. package/dist/components/chatbot/feedback/chatbot-session-feedback-link.js.map +1 -0
  82. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.d.ts +5 -0
  83. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.d.ts.map +1 -0
  84. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.js +25 -0
  85. package/dist/components/chatbot/feedback/chatbot-session-feedback-modal.js.map +1 -0
  86. package/dist/components/chatbot/filters/__tests-cy__/chatbot-filters.test.d.ts +2 -0
  87. package/dist/components/chatbot/filters/__tests-cy__/chatbot-filters.test.d.ts.map +1 -0
  88. package/dist/components/chatbot/filters/__tests-cy__/chatbot-filters.test.js +8 -0
  89. package/dist/components/chatbot/filters/__tests-cy__/chatbot-filters.test.js.map +1 -0
  90. package/dist/components/chatbot/filters/chatbot-filter-button.d.ts +7 -0
  91. package/dist/components/chatbot/filters/chatbot-filter-button.d.ts.map +1 -0
  92. package/dist/components/chatbot/filters/chatbot-filter-button.js +39 -0
  93. package/dist/components/chatbot/filters/chatbot-filter-button.js.map +1 -0
  94. package/dist/components/chatbot/filters/chatbot-filter.d.ts +8 -0
  95. package/dist/components/chatbot/filters/chatbot-filter.d.ts.map +1 -0
  96. package/dist/components/chatbot/filters/chatbot-filter.js +71 -0
  97. package/dist/components/chatbot/filters/chatbot-filter.js.map +1 -0
  98. package/dist/components/chatbot/filters/chatbot-filter.module.css +43 -0
  99. package/dist/components/chatbot/filters/chatbot-filters.d.ts +5 -0
  100. package/dist/components/chatbot/filters/chatbot-filters.d.ts.map +1 -0
  101. package/dist/components/chatbot/filters/chatbot-filters.js +11 -0
  102. package/dist/components/chatbot/filters/chatbot-filters.js.map +1 -0
  103. package/dist/components/chatbot/messages/__tests-cy__/chatbot-links.test.d.ts +2 -0
  104. package/dist/components/chatbot/messages/__tests-cy__/chatbot-links.test.d.ts.map +1 -0
  105. package/dist/components/chatbot/messages/__tests-cy__/chatbot-links.test.js +8 -0
  106. package/dist/components/chatbot/messages/__tests-cy__/chatbot-links.test.js.map +1 -0
  107. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer-readonly.test.d.ts +2 -0
  108. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer-readonly.test.d.ts.map +1 -0
  109. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer-readonly.test.js +8 -0
  110. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer-readonly.test.js.map +1 -0
  111. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.d.ts +2 -0
  112. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.d.ts.map +1 -0
  113. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.js +8 -0
  114. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.js.map +1 -0
  115. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.d.ts +2 -0
  116. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.d.ts.map +1 -0
  117. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.js +8 -0
  118. package/dist/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.js.map +1 -0
  119. package/dist/components/chatbot/messages/chatbot-links.d.ts +15 -0
  120. package/dist/components/chatbot/messages/chatbot-links.d.ts.map +1 -0
  121. package/dist/components/chatbot/messages/chatbot-links.js +21 -0
  122. package/dist/components/chatbot/messages/chatbot-links.js.map +1 -0
  123. package/dist/components/chatbot/messages/chatbot-links.module.less +24 -0
  124. package/dist/components/chatbot/messages/chatbot-message-agent-footer.d.ts +8 -0
  125. package/dist/components/chatbot/messages/chatbot-message-agent-footer.d.ts.map +1 -0
  126. package/dist/components/chatbot/messages/chatbot-message-agent-footer.js +13 -0
  127. package/dist/components/chatbot/messages/chatbot-message-agent-footer.js.map +1 -0
  128. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.d.ts +6 -0
  129. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.d.ts.map +1 -0
  130. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.js +17 -0
  131. package/dist/components/chatbot/messages/chatbot-message-answer-readonly.js.map +1 -0
  132. package/dist/components/chatbot/messages/chatbot-message-answer.d.ts +6 -0
  133. package/dist/components/chatbot/messages/chatbot-message-answer.d.ts.map +1 -0
  134. package/dist/components/chatbot/messages/chatbot-message-answer.js +29 -0
  135. package/dist/components/chatbot/messages/chatbot-message-answer.js.map +1 -0
  136. package/dist/components/chatbot/messages/chatbot-message-answer.module.less +3 -0
  137. package/dist/components/chatbot/messages/chatbot-message-timeout.d.ts +6 -0
  138. package/dist/components/chatbot/messages/chatbot-message-timeout.d.ts.map +1 -0
  139. package/dist/components/chatbot/messages/chatbot-message-timeout.js +17 -0
  140. package/dist/components/chatbot/messages/chatbot-message-timeout.js.map +1 -0
  141. package/dist/components/chatbot/messages/chatbot-message-typing.d.ts +8 -0
  142. package/dist/components/chatbot/messages/chatbot-message-typing.d.ts.map +1 -0
  143. package/dist/components/chatbot/messages/chatbot-message-typing.js +27 -0
  144. package/dist/components/chatbot/messages/chatbot-message-typing.js.map +1 -0
  145. package/dist/components/chatbot/messages/chatbot-message-welcome.d.ts +3 -0
  146. package/dist/components/chatbot/messages/chatbot-message-welcome.d.ts.map +1 -0
  147. package/dist/components/chatbot/messages/chatbot-message-welcome.js +4 -0
  148. package/dist/components/chatbot/messages/chatbot-message-welcome.js.map +1 -0
  149. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.d.ts +6 -0
  150. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.d.ts.map +1 -0
  151. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.js +12 -0
  152. package/dist/components/chatbot/templates/chatbot-message-template-agent-readonly.js.map +1 -0
  153. package/dist/components/chatbot/templates/chatbot-message-template-agent.d.ts +6 -0
  154. package/dist/components/chatbot/templates/chatbot-message-template-agent.d.ts.map +1 -0
  155. package/dist/components/chatbot/templates/chatbot-message-template-agent.js +10 -0
  156. package/dist/components/chatbot/templates/chatbot-message-template-agent.js.map +1 -0
  157. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.d.ts +6 -0
  158. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.d.ts.map +1 -0
  159. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.js +7 -0
  160. package/dist/components/chatbot/templates/chatbot-message-template-user-readonly.js.map +1 -0
  161. package/dist/index.d.ts +6 -0
  162. package/dist/index.d.ts.map +1 -0
  163. package/dist/index.js +6 -0
  164. package/dist/index.js.map +1 -0
  165. package/package.json +59 -0
  166. package/src/components/chatbot/__tests-cy__/chatbot-help-center.test.tsx +9 -0
  167. package/src/components/chatbot/__tests-cy__/chatbot-live.test.tsx +7 -0
  168. package/src/components/chatbot/__tests-cy__/chatbot-titan-chatbot.test.tsx +9 -0
  169. package/src/components/chatbot/__tests-cy__/chatbot.test.tsx +7 -0
  170. package/src/components/chatbot/chatbot-to-chat-provider-adapter.tsx +36 -0
  171. package/src/components/chatbot/chatbot.module.less +4 -0
  172. package/src/components/chatbot/chatbot.module.less.d.ts +3 -0
  173. package/src/components/chatbot/chatbot.tsx +99 -0
  174. package/src/components/chatbot/dialog/__tests-cy__/chatbot-restart-dialog.test.tsx +9 -0
  175. package/src/components/chatbot/dialog/__tests-cy__/chatbot-restart-link.test.tsx +9 -0
  176. package/src/components/chatbot/dialog/chatbot-restart-dialog.tsx +41 -0
  177. package/src/components/chatbot/dialog/chatbot-restart-link.tsx +29 -0
  178. package/src/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form-guardrail.test.tsx +10 -0
  179. package/src/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-form.test.tsx +9 -0
  180. package/src/components/chatbot/feedback/__tests-cy__/chatbot-message-feedback-popover.test.tsx +9 -0
  181. package/src/components/chatbot/feedback/__tests-cy__/chatbot-session-feedback-modal.test.tsx +9 -0
  182. package/src/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.tsx +40 -0
  183. package/src/components/chatbot/feedback/chatbot-message-feedback-form.module.less +15 -0
  184. package/src/components/chatbot/feedback/chatbot-message-feedback-form.module.less.d.ts +4 -0
  185. package/src/components/chatbot/feedback/chatbot-message-feedback-form.tsx +76 -0
  186. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.module.less +14 -0
  187. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.module.less.d.ts +5 -0
  188. package/src/components/chatbot/feedback/chatbot-message-feedback-popover.tsx +207 -0
  189. package/src/components/chatbot/feedback/chatbot-message-feedback.tsx +27 -0
  190. package/src/components/chatbot/feedback/chatbot-session-feedback-link.tsx +27 -0
  191. package/src/components/chatbot/feedback/chatbot-session-feedback-modal.tsx +95 -0
  192. package/src/components/chatbot/filters/__tests-cy__/chatbot-filters.test.tsx +9 -0
  193. package/src/components/chatbot/filters/chatbot-filter-button.tsx +58 -0
  194. package/src/components/chatbot/filters/chatbot-filter.module.css +43 -0
  195. package/src/components/chatbot/filters/chatbot-filter.module.css.d.ts +5 -0
  196. package/src/components/chatbot/filters/chatbot-filter.tsx +166 -0
  197. package/src/components/chatbot/filters/chatbot-filters.tsx +17 -0
  198. package/src/components/chatbot/messages/__tests-cy__/chatbot-links.test.tsx +9 -0
  199. package/src/components/chatbot/messages/__tests-cy__/chatbot-message-answer-readonly.test.tsx +9 -0
  200. package/src/components/chatbot/messages/__tests-cy__/chatbot-message-answer.test.tsx +9 -0
  201. package/src/components/chatbot/messages/__tests-cy__/chatbot-message-typing.test.tsx +9 -0
  202. package/src/components/chatbot/messages/chatbot-links.module.less +24 -0
  203. package/src/components/chatbot/messages/chatbot-links.module.less.d.ts +5 -0
  204. package/src/components/chatbot/messages/chatbot-links.tsx +73 -0
  205. package/src/components/chatbot/messages/chatbot-message-agent-footer.tsx +35 -0
  206. package/src/components/chatbot/messages/chatbot-message-answer-readonly.tsx +39 -0
  207. package/src/components/chatbot/messages/chatbot-message-answer.module.less +3 -0
  208. package/src/components/chatbot/messages/chatbot-message-answer.module.less.d.ts +3 -0
  209. package/src/components/chatbot/messages/chatbot-message-answer.tsx +55 -0
  210. package/src/components/chatbot/messages/chatbot-message-timeout.tsx +20 -0
  211. package/src/components/chatbot/messages/chatbot-message-typing.tsx +43 -0
  212. package/src/components/chatbot/messages/chatbot-message-welcome.tsx +16 -0
  213. package/src/components/chatbot/templates/chatbot-message-template-agent-readonly.tsx +25 -0
  214. package/src/components/chatbot/templates/chatbot-message-template-agent.tsx +25 -0
  215. package/src/components/chatbot/templates/chatbot-message-template-user-readonly.tsx +16 -0
  216. package/src/cypress.d.ts +10 -0
  217. package/src/index.ts +5 -0
  218. package/tsconfig.json +25 -0
  219. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,39 @@
1
+ import { MultilineText } from '@servicetitan/titan-chat-ui-anvil2';
2
+ import { ChatMessageModelText } from '@servicetitan/titan-chat-ui-common';
3
+ import { Models } from '@servicetitan/titan-chatbot-api';
4
+ import classNames from 'classnames';
5
+ import { observer } from 'mobx-react';
6
+ import { FC, Fragment, useMemo } from 'react';
7
+ import { ChatbotLinks } from './chatbot-links';
8
+ import * as Styles from './chatbot-message-answer.module.less';
9
+
10
+ export const ChatbotMessageAnswerReadonly: FC<{ message: ChatMessageModelText }> = observer(
11
+ ({ message }) => {
12
+ const linkProps = useMemo(
13
+ () => ({
14
+ primary: false,
15
+ className: classNames(Styles.link, 'm-block-1'),
16
+ }),
17
+ []
18
+ );
19
+
20
+ const chatbotMessageData = useMemo(
21
+ () => message?.data as Models.IBotMessageWithFeedback,
22
+ [message]
23
+ );
24
+
25
+ return (
26
+ <Fragment>
27
+ <MultilineText text={message.message} className="m-block-1" />
28
+ {chatbotMessageData && (
29
+ <ChatbotLinks
30
+ links={chatbotMessageData.scoredUrls ?? []}
31
+ seeMoreLabel="Learn more"
32
+ seeLessLabel="Learn more"
33
+ linkProps={linkProps}
34
+ />
35
+ )}
36
+ </Fragment>
37
+ );
38
+ }
39
+ );
@@ -0,0 +1,3 @@
1
+ .link {
2
+ text-decoration: underline;
3
+ }
@@ -0,0 +1,3 @@
1
+ export const __esModule: true;
2
+ export const link: string;
3
+
@@ -0,0 +1,55 @@
1
+ import { useDependencies } from '@servicetitan/react-ioc';
2
+ import { MultilineText } from '@servicetitan/titan-chat-ui-anvil2';
3
+ import { ChatMessageModelText } from '@servicetitan/titan-chat-ui-common';
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 { FC, Fragment, useCallback, useMemo } from 'react';
8
+ import { ChatbotLinks } from './chatbot-links';
9
+ import * as Styles from './chatbot-message-answer.module.less';
10
+
11
+ export const ChatbotMessageAnswer: FC<{ message: ChatMessageModelText }> = observer(
12
+ ({ message }) => {
13
+ const [chatbotUiStore] = useDependencies(CHATBOT_UI_STORE_TOKEN);
14
+ const chatbotMessageData = useMemo(
15
+ () => message?.data as Models.IBotMessageWithFeedback,
16
+ [message]
17
+ );
18
+
19
+ const handleToggleLinks = useCallback(() => {
20
+ if (chatbotUiStore.messages.at(-1)?.id !== message.id) {
21
+ return;
22
+ }
23
+ setTimeout(() => {
24
+ chatbotUiStore.triggerScroll();
25
+ }, 100);
26
+ }, [message.id, chatbotUiStore]);
27
+
28
+ const linkProps = useMemo(
29
+ () => ({
30
+ primary: false,
31
+ className: classNames(Styles.link, 'm-block-1'),
32
+ }),
33
+ []
34
+ );
35
+
36
+ return (
37
+ <Fragment>
38
+ <MultilineText
39
+ text={message.message}
40
+ className="m-block-1"
41
+ data-cy="titan-chatbot-message-answer"
42
+ />
43
+ {chatbotMessageData && (
44
+ <ChatbotLinks
45
+ links={chatbotMessageData.scoredUrls ?? []}
46
+ onToggle={handleToggleLinks}
47
+ seeMoreLabel="Learn more"
48
+ seeLessLabel="Learn less"
49
+ linkProps={linkProps}
50
+ />
51
+ )}
52
+ </Fragment>
53
+ );
54
+ }
55
+ );
@@ -0,0 +1,20 @@
1
+ import { useDependencies } from '@servicetitan/react-ioc';
2
+ import { MessageTimeout } from '@servicetitan/titan-chat-ui-anvil2';
3
+ import { ChatMessageModelTimeout } from '@servicetitan/titan-chat-ui-common';
4
+ import { CHATBOT_UI_STORE_TOKEN } from '@servicetitan/titan-chatbot-api';
5
+ import { observer } from 'mobx-react';
6
+ import { FC, useCallback } from 'react';
7
+
8
+ export const ChatbotMessageTimeout: FC<{ message: ChatMessageModelTimeout }> = observer(() => {
9
+ const [chatbotUiStore] = useDependencies(CHATBOT_UI_STORE_TOKEN);
10
+
11
+ const handleResume = useCallback(() => {
12
+ chatbotUiStore.restartTimers();
13
+ }, [chatbotUiStore]);
14
+
15
+ const handleReset = useCallback(() => {
16
+ chatbotUiStore.restart();
17
+ }, [chatbotUiStore]);
18
+
19
+ return <MessageTimeout onResume={handleResume} onReset={handleReset} />;
20
+ });
@@ -0,0 +1,43 @@
1
+ import { Text } from '@servicetitan/anvil2';
2
+ import {
3
+ IMessageTypingProps,
4
+ MessageAgent,
5
+ MessageTyping,
6
+ } from '@servicetitan/titan-chat-ui-anvil2';
7
+ import { FC, useEffect, useMemo, useState } from 'react';
8
+
9
+ /**
10
+ * Typing message for chatbot. Shows three dots that are blinking, after 10 and 20 seconds shows a messages
11
+ * that the chatbot is still working instead of the dots.
12
+ */
13
+ export const ChatbotMessageTyping: FC<IMessageTypingProps> = ({ avatar }) => {
14
+ const [timer, setTimer] = useState(0);
15
+ const [dots, setDots] = useState('');
16
+
17
+ useEffect(() => {
18
+ const interval = setInterval(() => setTimer(prev => prev + 1), 1000);
19
+ return () => clearInterval(interval);
20
+ }, []);
21
+
22
+ useEffect(() => {
23
+ setDots(() => '.'.repeat((timer % 3) + 1));
24
+ }, [timer]);
25
+
26
+ const dotsStyle = useMemo(() => ({ width: '1rem' }), []);
27
+
28
+ if (timer < 10) {
29
+ return <MessageTyping avatar={avatar} />;
30
+ }
31
+ return (
32
+ <MessageAgent avatar={avatar}>
33
+ <Text>
34
+ {timer < 20
35
+ ? 'Looking for the final details'
36
+ : 'This is taking longer than usual, please give me a little bit more time'}
37
+ <span className="d-ib" style={dotsStyle}>
38
+ {dots}
39
+ </span>
40
+ </Text>
41
+ </MessageAgent>
42
+ );
43
+ };
@@ -0,0 +1,16 @@
1
+ import { Text } from '@servicetitan/anvil2';
2
+ import { FC } from 'react';
3
+
4
+ export const ChatbotMessageWelcome: FC = () => (
5
+ <Text>
6
+ Hi there! I’m Titan, an AI chatbot.
7
+ <br />
8
+ <br />
9
+ <b>Have a question?</b> Ask me anything about how ServiceTitan works.
10
+ <br />
11
+ <b>Need help?</b> If I can’t solve your issue, I’ll guide you through submitting a support
12
+ case.
13
+ <br />
14
+ Let’s get started - how can I assist you today?
15
+ </Text>
16
+ );
@@ -0,0 +1,25 @@
1
+ import { MessageAgent, MessageFooter, useAvatarProps } from '@servicetitan/titan-chat-ui-anvil2';
2
+ import { ChatMessageModelBase, getFirstName } from '@servicetitan/titan-chat-ui-common';
3
+ import { observer } from 'mobx-react';
4
+ import { FC, PropsWithChildren, useMemo } from 'react';
5
+
6
+ export const ChatbotMessageTemplateAgentReadonly: FC<
7
+ PropsWithChildren<{
8
+ message: ChatMessageModelBase;
9
+ }>
10
+ > = observer(({ children, message }) => {
11
+ const {
12
+ participant: { icon, name },
13
+ } = message;
14
+ const firstName = useMemo(() => getFirstName(name), [name]);
15
+ const avatarProps = useAvatarProps(name, icon);
16
+
17
+ return (
18
+ <MessageAgent
19
+ avatar={avatarProps}
20
+ messageFooter={<MessageFooter name={firstName} timestamp={message.timestamp} />}
21
+ >
22
+ {children}
23
+ </MessageAgent>
24
+ );
25
+ });
@@ -0,0 +1,25 @@
1
+ import { MessageAgent, useAvatarProps } from '@servicetitan/titan-chat-ui-anvil2';
2
+ import { ChatMessageModelBase } from '@servicetitan/titan-chat-ui-common';
3
+ import { observer } from 'mobx-react';
4
+ import { FC, PropsWithChildren } from 'react';
5
+ import { ChatbotMessageAgentFooter } from '../messages/chatbot-message-agent-footer';
6
+
7
+ export const ChatbotMessageTemplateAgent: FC<
8
+ PropsWithChildren<{
9
+ message: ChatMessageModelBase;
10
+ }>
11
+ > = observer(({ children, message }) => {
12
+ const {
13
+ participant: { icon, name },
14
+ } = message;
15
+ const avatarProps = useAvatarProps(name, icon);
16
+
17
+ return (
18
+ <MessageAgent
19
+ avatar={avatarProps}
20
+ messageFooter={<ChatbotMessageAgentFooter message={message} />}
21
+ >
22
+ {children}
23
+ </MessageAgent>
24
+ );
25
+ });
@@ -0,0 +1,16 @@
1
+ import { MessageFooter, MessageUser } from '@servicetitan/titan-chat-ui-anvil2';
2
+ import { ChatMessageModelBase } from '@servicetitan/titan-chat-ui-common';
3
+ import { observer } from 'mobx-react';
4
+ import { FC, PropsWithChildren } from 'react';
5
+
6
+ export const ChatbotMessageTemplateUserReadonly: FC<
7
+ PropsWithChildren<{
8
+ message: ChatMessageModelBase;
9
+ }>
10
+ > = observer(({ children, message }) => {
11
+ return (
12
+ <MessageUser messageFooter={<MessageFooter timestamp={message.timestamp} />}>
13
+ {children}
14
+ </MessageUser>
15
+ );
16
+ });
@@ -0,0 +1,10 @@
1
+ // eslint-disable-next-line spaced-comment
2
+ /// <reference types="cypress" />
3
+ declare namespace Cypress {
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
+ interface Chainable<Subject = any> {
6
+ getCy<E extends Node = HTMLElement>(value: string): Chainable<JQuery<E>>;
7
+ getCy2<E extends Node = HTMLElement>(value: string): Chainable<JQuery<E>>;
8
+ getAnvil<E extends Node = HTMLElement>(value: string, extra?: string): Chainable<JQuery<E>>;
9
+ }
10
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from '@servicetitan/titan-chat-ui-anvil2';
2
+ export { Chatbot } from './components/chatbot/chatbot';
3
+ export { ChatbotLinks } from './components/chatbot/messages/chatbot-links';
4
+ export { ChatbotMessageAgentFooter } from './components/chatbot/messages/chatbot-message-agent-footer';
5
+ export { ChatbotSessionFeedbackLink } from './components/chatbot/feedback/chatbot-session-feedback-link';
package/tsconfig.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "extends": "@servicetitan/startup/tsconfig/base",
3
+ "compilerOptions": {
4
+ "composite": true,
5
+ "outDir": "dist",
6
+ "rootDir": "src",
7
+ "jsx": "react-jsx",
8
+ "moduleResolution": "bundler"
9
+ },
10
+ "include": ["src/**/*"],
11
+ "exclude": [
12
+ "node_modules"
13
+ ],
14
+ "references": [
15
+ {
16
+ "path": "../titan-chat-ui-anvil2"
17
+ },
18
+ {
19
+ "path": "../titan-chatbot-ui-cypress"
20
+ },
21
+ {
22
+ "path": "../titan-chat-ui-common"
23
+ }
24
+ ]
25
+ }