@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,3 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatbotMessageFeedbackFormGuardrail: FC;
3
+ //# sourceMappingURL=chatbot-message-feedback-form-guardrail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-form-guardrail.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAe,EAAE,EAAE,MAAM,OAAO,CAAC;AAGxC,eAAO,MAAM,mCAAmC,EAAE,EA8BhD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Flex, TextField, Textarea } from '@servicetitan/anvil2';
3
+ import { FormStateErrorBanner } from '@servicetitan/form';
4
+ import { useDependencies } from '@servicetitan/react-ioc';
5
+ import { MessageFeedbackGuardrailStore } from '@servicetitan/titan-chatbot-api';
6
+ import classNames from 'classnames';
7
+ import { observer } from 'mobx-react';
8
+ import * as Styles from './chatbot-message-feedback-form.module.less';
9
+ export const ChatbotMessageFeedbackFormGuardrail = observer(() => {
10
+ const [store] = useDependencies(MessageFeedbackGuardrailStore);
11
+ const onLinkUrlChange = (event) => {
12
+ store.formState.$.linkUrl.onChange(event.target.value);
13
+ };
14
+ return (_jsxs(Flex, { direction: "column", gap: "4", children: [store.formState.error && _jsx(FormStateErrorBanner, { form: store.formState }), _jsxs("form", { "data-cy": "titan-chatbot-message-feedback-form", children: [_jsx(TextField, { label: "Link to correct article", className: classNames(Styles.formItem), error: store.formState.$.linkUrl.error, value: store.formState.$.linkUrl.value, onChange: onLinkUrlChange, "data-cy": "titan-chatbot-message-feedback-form-link-url" }), _jsx(Textarea, { label: "Notes", className: classNames(Styles.formItem, Styles.textArea), value: store.formState.$.comment.value, onChange: store.formState.$.comment.onChangeHandler, onBlur: store.formState.$.comment.enableAutoValidationAndValidate, "data-cy": "titan-chatbot-message-feedback-form-other-comment" })] })] }));
15
+ });
16
+ //# sourceMappingURL=chatbot-message-feedback-form-guardrail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-form-guardrail.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-form-guardrail.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,6CAA6C,CAAC;AAEtE,MAAM,CAAC,MAAM,mCAAmC,GAAO,QAAQ,CAAC,GAAG,EAAE;IACjE,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,6BAA6B,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC7D,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,aAC3B,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,KAAC,oBAAoB,IAAC,IAAI,EAAE,KAAK,CAAC,SAAS,GAAI,EACzE,2BAAc,qCAAqC,aAC/C,KAAC,SAAS,IACN,KAAK,EAAC,yBAAyB,EAC/B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EACtC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EACtC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EACtC,QAAQ,EAAE,eAAe,aACjB,8CAA8C,GACxD,EACF,KAAC,QAAQ,IACL,KAAK,EAAC,OAAO,EACb,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EACvD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EACnD,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,+BAA+B,aACzD,mDAAmD,GAC7D,IACC,IACJ,CACV,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatbotMessageFeedbackForm: FC;
3
+ //# sourceMappingURL=chatbot-message-feedback-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-form.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,eAAO,MAAM,0BAA0B,EAAE,EAkEvC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Checkbox, Flex, Text, Textarea } from '@servicetitan/anvil2';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { MessageFeedbackStore } from '@servicetitan/titan-chatbot-api';
5
+ import classNames from 'classnames';
6
+ import { observer } from 'mobx-react';
7
+ import * as Styles from './chatbot-message-feedback-form.module.less';
8
+ export const ChatbotMessageFeedbackForm = observer(() => {
9
+ const [store] = useDependencies(MessageFeedbackStore);
10
+ const onCheckboxChange = (checkbox) => {
11
+ return (_, state) => {
12
+ const fieldState = store.formState.$[checkbox];
13
+ fieldState.onChange(!state.checked);
14
+ };
15
+ };
16
+ return (_jsx("form", { "data-cy": "titan-chatbot-message-feedback-form", children: _jsxs(Flex, { direction: "column", children: [_jsx(Checkbox, { label: "Answer is unrelated to my question", className: Styles.formItem, checked: store.formState.$.unrelated.value, onChange: onCheckboxChange('unrelated'), "data-cy": "titan-chatbot-message-feedback-form-unrelated" }), _jsx(Checkbox, { label: "Answer is unclear, not sure what it means", className: Styles.formItem, checked: store.formState.$.unclear.value, onChange: onCheckboxChange('unclear'), "data-cy": "titan-chatbot-message-feedback-form-unclear" }), _jsx(Checkbox, { label: "Answer doesn\u2019t fully address the question", className: Styles.formItem, checked: store.formState.$.notFull.value, onChange: onCheckboxChange('notFull'), "data-cy": "titan-chatbot-message-feedback-form-not-full" }), _jsx(Checkbox, { label: "Answer is incorrect or doesn\u2019t work", className: Styles.formItem, checked: store.formState.$.incorrect.value, onChange: onCheckboxChange('incorrect'), "data-cy": "titan-chatbot-message-feedback-form-incorrect" }), _jsx(Checkbox, { label: "Other", className: Styles.formItem, checked: store.formState.$.other.value, onChange: onCheckboxChange('other'), "data-cy": "titan-chatbot-message-feedback-form-other" }), store.isTextAreaVisible && (_jsxs("div", { className: "m-inline-start-8", children: [_jsx(Textarea, { className: classNames(Styles.formItem, Styles.textArea), error: store.formState.$.otherComment.error, value: store.formState.$.otherComment.value, onChange: store.formState.$.otherComment.onChangeHandler, onBlur: store.formState.$.otherComment.enableAutoValidationAndValidate, "data-cy": "titan-chatbot-message-feedback-form-other-comment" }), _jsx(Text, { size: "small", subdued: true, className: "m-block-end-2", children: "Tell us more about what can be improved." })] }))] }) }));
17
+ });
18
+ //# sourceMappingURL=chatbot-message-feedback-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-message-feedback-form.js","sourceRoot":"","sources":["../../../../src/components/chatbot/feedback/chatbot-message-feedback-form.tsx"],"names":[],"mappings":"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"}
@@ -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":"AAMA,OAAO,EAKH,MAAM,EACT,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,EAAE,EAAmD,MAAM,OAAO,CAAC;AAK5E,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,CAqL1E,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Flex, Icon, Link, Popover, Spinner, Text } from '@servicetitan/anvil2';
3
+ import IconCheck from '@servicetitan/anvil2/assets/icons/material/round/check.svg';
4
+ import IconError from '@servicetitan/anvil2/assets/icons/material/round/error.svg';
5
+ import IconThumbDown from '@servicetitan/anvil2/assets/icons/material/round/thumb_down.svg';
6
+ import IconThumbUp from '@servicetitan/anvil2/assets/icons/material/round/thumb_up.svg';
7
+ import { provide, useDependencies } from '@servicetitan/react-ioc';
8
+ import { CHATBOT_UI_STORE_TOKEN, MessageFeedbackGuardrailStore, MessageFeedbackStore, Models, } from '@servicetitan/titan-chatbot-api';
9
+ import classNames from 'classnames';
10
+ import { observer } from 'mobx-react';
11
+ import { Fragment, useCallback, useState } from 'react';
12
+ import { ChatbotMessageFeedbackForm } from './chatbot-message-feedback-form';
13
+ import { ChatbotMessageFeedbackFormGuardrail } from './chatbot-message-feedback-form-guardrail';
14
+ import * as Styles from './chatbot-message-feedback-popover.module.less';
15
+ export const ChatbotMessageFeedbackPopover = provide({
16
+ singletons: [MessageFeedbackStore, MessageFeedbackGuardrailStore],
17
+ })(observer(({ botMessage, className }) => {
18
+ var _a;
19
+ const [chatbotUiStore, messageFeedbackStore, messageFeedbackGuardrailStore] = useDependencies(CHATBOT_UI_STORE_TOKEN, MessageFeedbackStore, MessageFeedbackGuardrailStore);
20
+ const [feedbackState, setFeedbackState] = useState(Models.ChatbotFeedbackState.None);
21
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
22
+ const title = (_a = chatbotUiStore.customizations.feedback) === null || _a === void 0 ? void 0 : _a.title;
23
+ const isGuardrail = botMessage.isGuardrailed;
24
+ const feedbackStore = isGuardrail
25
+ ? messageFeedbackGuardrailStore
26
+ : messageFeedbackStore;
27
+ const sendFeedback = useCallback(async (feedback) => {
28
+ setFeedbackState(Models.ChatbotFeedbackState.Sent);
29
+ try {
30
+ await chatbotUiStore.sendMessageFeedback(botMessage, feedback);
31
+ setFeedbackState(Models.ChatbotFeedbackState.Success);
32
+ }
33
+ catch (_a) {
34
+ setFeedbackState(Models.ChatbotFeedbackState.Failure);
35
+ }
36
+ }, [chatbotUiStore, botMessage]);
37
+ const handleFeedbackThumbsUp = useCallback(async () => {
38
+ await sendFeedback(new Models.Feedback({ rating: Models.FeedbackRatings.ThumbsUp }));
39
+ }, [sendFeedback]);
40
+ const handleFeedbackSubmit = useCallback(async () => {
41
+ const validateResult = await feedbackStore.formState.validate();
42
+ if (validateResult.hasError) {
43
+ return;
44
+ }
45
+ const feedback = feedbackStore.export();
46
+ await sendFeedback(feedback);
47
+ }, [feedbackStore, sendFeedback]);
48
+ if (feedbackState === Models.ChatbotFeedbackState.Sent) {
49
+ return (_jsx(Flex, { direction: "row", gap: "2", alignItems: "center", className: classNames(className, Styles.feedback), "data-cy": "titan-chatbot-message-feedback-loading", children: _jsx(Spinner, {}) }));
50
+ }
51
+ if (feedbackState === Models.ChatbotFeedbackState.Success) {
52
+ return (_jsxs(Flex, { direction: "row", gap: "2", alignItems: "center", className: classNames(className, Styles.feedback), children: [_jsx(Icon, { svg: IconCheck, className: "c-status-success" }), _jsx(Text, { className: Styles.feedbackResultText, subdued: true, size: "small", "data-cy": "titan-chatbot-message-feedback-success", children: "Thanks for your feedback." })] }));
53
+ }
54
+ if (feedbackState === Models.ChatbotFeedbackState.Failure) {
55
+ // Feedback is done: either user clicked thumbs up or submitted feedback
56
+ return (_jsxs(Flex, { direction: "row", gap: "2", alignItems: "center", className: classNames(className, Styles.feedback), "data-cy": "titan-chatbot-message-feedback-failed", children: [_jsx(Icon, { svg: IconError, className: "c-status-danger" }), _jsx(Text, { className: classNames('c-status-danger', Styles.feedbackResultText), children: "Failed to send feedback." })] }));
57
+ }
58
+ const SubmitButton = (_jsx(Button, { appearance: "primary", disabled: !feedbackStore.isValid, onClick: handleFeedbackSubmit, "data-cy": "titan-chatbot-message-feedback-submit", children: "Submit" }));
59
+ return (_jsxs(Flex, { direction: "row", gap: "2", alignItems: "center", className: className, children: [!isGuardrail && title && _jsx(Text, { variant: "eyebrow", children: title }), !isGuardrail && (_jsx(Button, { icon: IconThumbUp, size: "small", appearance: "ghost", "aria-label": "thumb up", onClick: handleFeedbackThumbsUp, "data-cy": "titan-chatbot-message-feedback-thumbs-up" })), _jsx(Popover, { placement: "top-start", onOutsidePress: () => setIsPopoverOpen(false), open: isPopoverOpen, children: isGuardrail ? (_jsxs(Fragment, { children: [_jsx(Popover.Trigger, { children: props => (_jsx(Link, { ...props, onClick: () => setIsPopoverOpen(true), className: classNames('fs-paragraph-small', Styles.provideAnswer), color: "blue", "data-cy": "titan-chatbot-message-feedback-provide-answer", children: "Provide correct answer" })) }), _jsx(Popover.Content, { children: _jsxs(Flex, { direction: "column", children: [_jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: _jsx(Text, { el: "h3", variant: "headline", size: "small", children: "Provide correct answer" }) }), _jsx(ChatbotMessageFeedbackFormGuardrail, {}), SubmitButton] }) })] })) : (_jsxs(Fragment, { children: [_jsx(Popover.Button, { icon: IconThumbDown, size: "small", appearance: "ghost", onClick: () => setIsPopoverOpen(true), "aria-label": "thumb down", "data-cy": "titan-chatbot-message-feedback-thumbs-down" }), _jsx(Popover.Content, { children: _jsxs(Flex, { direction: "column", children: [_jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: _jsx(Text, { el: "h3", variant: "headline", size: "small", children: "Why didn't this answer solve your problem?" }) }), _jsx(ChatbotMessageFeedbackForm, {}), SubmitButton] }) })] })) })] }));
60
+ }));
61
+ //# 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,14 @@
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
+ }
11
+
12
+ .provideAnswer {
13
+ text-transform: uppercase;
14
+ }
@@ -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/anvil2';
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,sBAAsB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAC;AAG5D,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,SAAS,CAsBpD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from '@servicetitan/anvil2';
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 handleFeedback = useCallback(() => {
8
+ setIsFeedbackOpen(false);
9
+ }, []);
10
+ return (_jsxs(Fragment, { children: [_jsx(Link, { ...rest, onClick: e => {
11
+ setIsFeedbackOpen(true);
12
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
13
+ }, "data-cy": "titan-chatbot-session-feedback-link", children: children }), isFeedbackOpen && _jsx(ChatbotSessionFeedbackModal, { onClose: handleFeedback })] }));
14
+ };
15
+ //# 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,sBAAsB,CAAC;AACvD,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,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,CAAC,CAAC,EAAE;oBACT,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBACxB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,CAAC,CAAC,CAAC;gBACjB,CAAC,aACO,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":"AAMA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAExC,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAsFnE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, ButtonToggle, Dialog, Flex, Text, Textarea } from '@servicetitan/anvil2';
3
+ import IconThumbDown from '@servicetitan/anvil2/assets/icons/material/round/thumb_down.svg';
4
+ import IconThumbUp from '@servicetitan/anvil2/assets/icons/material/round/thumb_up.svg';
5
+ import { provide, useDependencies } from '@servicetitan/react-ioc';
6
+ import { CHATBOT_UI_STORE_TOKEN, SessionFeedbackStore } from '@servicetitan/titan-chatbot-api';
7
+ import { observer } from 'mobx-react';
8
+ import { useCallback } from 'react';
9
+ export const ChatbotSessionFeedbackModal = provide({
10
+ singletons: [SessionFeedbackStore],
11
+ })(observer(({ onClose }) => {
12
+ const [chatbotFeedbackStore, chatbotUiStore] = useDependencies(SessionFeedbackStore, CHATBOT_UI_STORE_TOKEN);
13
+ const handleClose = useCallback(() => {
14
+ onClose();
15
+ }, [onClose]);
16
+ const handleSubmit = useCallback(() => {
17
+ chatbotUiStore.sendSessionFeedback(chatbotFeedbackStore.feedback);
18
+ onClose();
19
+ }, [chatbotUiStore, chatbotFeedbackStore, onClose]);
20
+ const handleThumbs = useCallback((isThumbsUp) => {
21
+ chatbotFeedbackStore.formState.$.thumbs.onChange(isThumbsUp ? 1 : -1);
22
+ }, [chatbotFeedbackStore]);
23
+ return (_jsxs(Dialog, { onClose: handleClose, open: true, title: "Give Feedback on Titan", "data-cy": "titan-chatbot-session-feedback-modal", children: [_jsx(Dialog.Content, { children: _jsxs(Flex, { direction: "column", gap: "2", className: "m-block-start-6", children: [_jsx(Text, { children: "Was Titan able to help solve your problem?" }), _jsxs(Flex, { direction: "row", gap: "4", alignItems: "center", children: [_jsx(ButtonToggle, { size: "small", "aria-label": "Thumbs Up", title: "Thumbs Up", icon: IconThumbUp, checked: chatbotFeedbackStore.isThumbsUp, onClick: () => handleThumbs(true), "data-cy": "titan-chatbot-session-feedback-thumbs-up" }), _jsx(ButtonToggle, { size: "small", "aria-label": "Thumbs Down", title: "Thumbs Down", icon: IconThumbDown, checked: chatbotFeedbackStore.isThumbsDown, onClick: () => handleThumbs(false), "data-cy": "titan-chatbot-session-feedback-thumbs-down" })] }), _jsx(Textarea, { className: "m-block-start-4", label: "Tell us more", rows: 3, value: chatbotFeedbackStore.formState.$.comment.value, onChange: chatbotFeedbackStore.formState.$.comment.onChangeHandler, "data-cy": "titan-chatbot-session-feedback-comment" })] }) }), _jsx(Dialog.Footer, { children: _jsxs(Flex, { direction: "row", justifyContent: "flex-end", gap: "3", children: [_jsx(Button, { onClick: handleClose, "data-cy": "titan-chatbot-session-feedback-cancel", children: "Cancel" }), _jsx(Button, { onClick: handleSubmit, appearance: "primary", disabled: !chatbotFeedbackStore.isValid, "data-cy": "titan-chatbot-session-feedback-submit", children: "Submit Feedback" })] }) })] }));
24
+ }));
25
+ //# 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":";AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,aAAa,MAAM,iEAAiE,CAAC;AAC5F,OAAO,WAAW,MAAM,+DAA+D,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,2BAA2B,GAAgC,OAAO,CAAC;IAC5E,UAAU,EAAE,CAAC,oBAAoB,CAAC;CACrC,CAAC,CACE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACrB,MAAM,CAAC,oBAAoB,EAAE,cAAc,CAAC,GAAG,eAAe,CAC1D,oBAAoB,EACpB,sBAAsB,CACzB,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,cAAc,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,UAAmB,EAAE,EAAE;QACpB,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,EACD,CAAC,oBAAoB,CAAC,CACzB,CAAC;IAEF,OAAO,CACH,MAAC,MAAM,IACH,OAAO,EAAE,WAAW,EACpB,IAAI,QACJ,KAAK,EAAC,wBAAwB,aACtB,sCAAsC,aAE9C,KAAC,MAAM,CAAC,OAAO,cACX,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,SAAS,EAAC,iBAAiB,aACxD,KAAC,IAAI,6DAAkD,EACvD,MAAC,IAAI,IAAC,SAAS,EAAC,KAAK,EAAC,GAAG,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAC7C,KAAC,YAAY,IACT,IAAI,EAAC,OAAO,gBACD,WAAW,EACtB,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,oBAAoB,CAAC,UAAU,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aACzB,0CAA0C,GACpD,EACF,KAAC,YAAY,IACT,IAAI,EAAC,OAAO,gBACD,aAAa,EACxB,KAAK,EAAC,aAAa,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,oBAAoB,CAAC,YAAY,EAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,aAC1B,4CAA4C,GACtD,IACC,EACP,KAAC,QAAQ,IACL,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAC,cAAc,EACpB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EACrD,QAAQ,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,aAC1D,wCAAwC,GAClD,IACC,GACM,EACjB,KAAC,MAAM,CAAC,MAAM,cACV,MAAC,IAAI,IAAC,SAAS,EAAC,KAAK,EAAC,cAAc,EAAC,UAAU,EAAC,GAAG,EAAC,GAAG,aACnD,KAAC,MAAM,IACH,OAAO,EAAE,WAAW,aACZ,uCAAuC,uBAG1C,EACT,KAAC,MAAM,IACH,OAAO,EAAE,YAAY,EACrB,UAAU,EAAC,SAAS,EACpB,QAAQ,EAAE,CAAC,oBAAoB,CAAC,OAAO,aAC/B,uCAAuC,gCAG1C,IACN,GACK,IACX,CACZ,CAAC;AACN,CAAC,CAAC,CACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatbot-filters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filters.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/chatbot/filters/__tests-cy__/chatbot-filters.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AnvilProvider } from '@servicetitan/anvil2';
3
+ import { runChatbotFiltersSharedTests } from '@servicetitan/titan-chatbot-ui-cypress';
4
+ import { ChatFilters } from '../chatbot-filters';
5
+ describe('[ChatFilters]', () => {
6
+ runChatbotFiltersSharedTests(ChatFilters, component => (_jsx(AnvilProvider, { children: component })));
7
+ });
8
+ //# sourceMappingURL=chatbot-filters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filters.test.js","sourceRoot":"","sources":["../../../../../src/components/chatbot/filters/__tests-cy__/chatbot-filters.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,4BAA4B,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CACnD,KAAC,aAAa,cAAE,SAAS,GAAiB,CAC7C,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ChipProps } from '@servicetitan/anvil2';
2
+ import { FC, RefAttributes } from 'react';
3
+ export declare const ChatbotFilterButton: FC<RefAttributes<HTMLElement> & ChipProps & {
4
+ count: number;
5
+ open: boolean;
6
+ }>;
7
+ //# sourceMappingURL=chatbot-filter-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filter-button.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filter-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,aAAa,EAAsD,MAAM,OAAO,CAAC;AAG9F,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAChC,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAmD5E,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Chip } from '@servicetitan/anvil2';
3
+ import classNames from 'classnames';
4
+ import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
5
+ import * as Styles from './chatbot-filter.module.css';
6
+ export const ChatbotFilterButton = forwardRef(({ className, count, open, ...chipProps }, ref) => {
7
+ const buttonRef = useRef(null);
8
+ useImperativeHandle(ref, () => buttonRef.current, []);
9
+ useEffect(() => {
10
+ // This is temporary solution until we have a proper filter button component, or it's replacement in Anvil2
11
+ const chip = buttonRef.current;
12
+ if (!chip) {
13
+ return;
14
+ }
15
+ // Ensure chip has a counter element
16
+ let counterEl = chip.querySelector('.chip__counter');
17
+ if (!counterEl) {
18
+ counterEl = document.createElement('div');
19
+ counterEl.className = 'chip__counter';
20
+ chip.append(counterEl);
21
+ }
22
+ counterEl.textContent = count.toString();
23
+ counterEl.style.display = count > 0 ? 'flex' : 'none';
24
+ // Ensure chip has an icon element
25
+ const iconEl = chip.querySelector('.chip__icon');
26
+ if (!iconEl) {
27
+ const icon = document.createElement('img');
28
+ icon.className = 'chip__icon';
29
+ icon.src =
30
+ 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9ImN1cnJlbnRDb2xvciIgaGVpZ2h0PSIxZW0iIHdpZHRoPSIxZW0iIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTcuNDEgNy44NEwxMiAxMi40Mmw0LjU5LTQuNThMMTggOS4yNWwtNiA2LTYtNnoiPjwvcGF0aD48L3N2Zz4=';
31
+ chip.append(icon);
32
+ }
33
+ }, [count]);
34
+ return (_jsx(Chip, { ref: buttonRef, className: classNames(Styles.filterButton, {
35
+ [Styles.filterButtonActive]: count > 0,
36
+ [Styles.filterButtonOpen]: open,
37
+ }, className), ...chipProps }));
38
+ });
39
+ //# sourceMappingURL=chatbot-filter-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-filter-button.js","sourceRoot":"","sources":["../../../../src/components/chatbot/filters/chatbot-filter-button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,sBAAsB,CAAC;AACvD,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAqB,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC9F,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAE5B,UAAU,CACV,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAEnD,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACX,2GAA2G;QAC3G,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,oCAAoC;QACpC,IAAI,SAAS,GAAuB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtD,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,CAAC,GAAG;gBACJ,wQAAwQ,CAAC;YAC7Q,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACH,KAAC,IAAI,IACD,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,UAAU,CACjB,MAAM,CAAC,YAAY,EACnB;YACI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,GAAG,CAAC;YACtC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI;SAClC,EACD,SAAS,CACZ,KACG,SAAS,GACf,CACL,CAAC;AACN,CAAC,CACJ,CAAC"}
@@ -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":"AAEA,OAAO,EAA0B,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAe,EAAE,EAA0D,MAAM,OAAO,CAAC;AAGhG,UAAU,gBAAgB;IACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,gBAAgB,CA0J1C,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Checkbox, Flex, Link, Popover, Text, TextField, useMergeRefs } from '@servicetitan/anvil2';
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 { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { ChatbotFilterButton } from './chatbot-filter-button';
8
+ export const ChatFilter = observer(({ filter }) => {
9
+ var _a, _b, _c;
10
+ const triggerRef = useRef();
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).trim();
16
+ const selectedOptionsCount = (_c = (_b = filterStore.selectedOptions[filter.key]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;
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
+ return;
33
+ }
34
+ const triggerElement = triggerRef.current;
35
+ const boundingRect = triggerElement.getBoundingClientRect();
36
+ const headerFooterSize = 160;
37
+ setListMaxHeight(boundingRect.top - headerFooterSize);
38
+ }, []);
39
+ const handleToggle = () => {
40
+ setOpen(prev => !prev);
41
+ };
42
+ const handleCancel = (e) => {
43
+ var _a;
44
+ if ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
45
+ return;
46
+ }
47
+ setOpen(false);
48
+ };
49
+ const handleFilterChange = useCallback((event) => {
50
+ setFilterText(event.target.value);
51
+ }, []);
52
+ const handleItemChecked = useCallback((value, checked) => {
53
+ if (checked) {
54
+ filterStore.selectOption(filter.key, value);
55
+ }
56
+ else {
57
+ filterStore.deselectOption(filter.key, value);
58
+ }
59
+ }, [filterStore, filter]);
60
+ return (_jsxs(Popover, { placement: "top", noPadding: true, maxHeight: listMaxHeight, onOutsidePress: handleCancel, open: open, children: [_jsx(Popover.Trigger, { children: ({ ref: popoverRef, ...props }) => {
61
+ const mergedRef = useMergeRefs([
62
+ popoverRef,
63
+ triggerRef,
64
+ ]);
65
+ return (_jsx(ChatbotFilterButton, { ...props, ref: mergedRef, count: selectedOptionsCount, open: open, label: filterLabel, onClick: handleToggle, "data-cy": "titan-chatbot-filter-button" }));
66
+ } }), _jsx(Popover.Content, { children: _jsxs(Flex, { direction: "column", className: "p-4", gap: "4", "data-cy": "titan-chatbot-filter-content", children: [_jsx(Flex, { children: _jsx(TextField, { onChange: handleFilterChange, value: filterText, size: "small", placeholder: "Search", "data-cy": "titan-chatbot-filter-search" }) }), allOptions.length > 0 ? (_jsx(Flex, { direction: "column", gap: "2", "data-cy": "titan-chatbot-filter-options", children: filteredOptions.map(option => (_jsx(Checkbox, { label: option.text, value: option.value, checked: (filterStore.selectedOptions[filter.key] || []).includes(option.value), onChange: (_, state) => {
67
+ var _a;
68
+ handleItemChecked(String((_a = state === null || state === void 0 ? void 0 : state.value) !== null && _a !== void 0 ? _a : ''), !(state === null || state === void 0 ? void 0 : state.checked));
69
+ } }, option.value))) })) : (_jsx(Text, { className: "ta-center", size: "small", subdued: true, children: "No items available" })), _jsxs(Flex, { direction: "row", alignItems: "baseline", gap: "2", children: [_jsx(Text, { size: "small", children: "Select" }), _jsx(Text, { size: "small", children: _jsx(Link, { appearance: "primary", onClick: () => filterStore.selectAll(filter.key), "data-cy": "titan-chatbot-filter-all", children: "All" }) }), _jsx(Text, { size: "small", children: _jsx(Link, { appearance: "primary", onClick: () => filterStore.deselectAll(filter.key), "data-cy": "titan-chatbot-filter-none", children: "None" }) })] })] }) })] }));
70
+ });
71
+ //# 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,43 @@
1
+ @import '@servicetitan/tokens/dist/tokens.css';
2
+
3
+ .filterButton {
4
+ padding-inline: var(--size-1);
5
+ padding-block: var(--size-1);
6
+ border-radius: 0.375rem;
7
+ border: 1px solid
8
+ light-dark(var(--color-neutral-80, #949596), var(--color-neutral-100, #606162));
9
+ background-color: light-dark(
10
+ var(--color-neutral-0, #ffffff),
11
+ var(--color-neutral-400, #141414)
12
+ );
13
+ }
14
+
15
+ .filterButton:hover {
16
+ background-color: light-dark(#14141414, #ffffff14);
17
+ }
18
+
19
+ .filterButton > :global(.chip__counter) {
20
+ background-color: var(--color-purple-400, #6954c0);
21
+ color: var(--color-purple-100, #f1edff);
22
+ border-radius: 100%;
23
+ width: 1.25rem;
24
+ height: 1.25rem;
25
+ display: flex;
26
+ justify-content: center;
27
+ align-items: center;
28
+ margin-block: auto;
29
+ }
30
+
31
+ .filterButton.filterButtonActive {
32
+ background-color: var(--color-purple-100, #f1edff);
33
+ color: var(--color-purple-400, #6954c0);
34
+ border: 1px solid var(--color-purple-400, #6954c0);
35
+ }
36
+
37
+ .filterButton > :global(.chip__icon) {
38
+ transform: rotate(0deg);
39
+ }
40
+
41
+ .filterButton.filterButtonOpen > :global(.chip__icon) {
42
+ transform: rotate(180deg);
43
+ }
@@ -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 { Flex } from '@servicetitan/anvil2';
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(Flex, { className: className, gap: "2", "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,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,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,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAC,GAAG,aAAS,uBAAuB,YAC9D,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,GACC,CACV,CAAC,CAAC,CAAC,IAAI,CAAC;AACb,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatbot-links.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-links.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-links.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AnvilProvider } from '@servicetitan/anvil2';
3
+ import { runChatbotLinksSharedTests } from '@servicetitan/titan-chatbot-ui-cypress';
4
+ import { ChatbotLinks } from '../chatbot-links';
5
+ describe('[ChatbotLinks]', () => {
6
+ runChatbotLinksSharedTests(ChatbotLinks, component => (_jsx(AnvilProvider, { children: component })));
7
+ });
8
+ //# sourceMappingURL=chatbot-links.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-links.test.js","sourceRoot":"","sources":["../../../../../src/components/chatbot/messages/__tests-cy__/chatbot-links.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,0BAA0B,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,CAClD,KAAC,aAAa,cAAE,SAAS,GAAiB,CAC7C,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chatbot-message-answer-readonly.test.d.ts.map