@servicetitan/titan-chat-ui 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/assets/floating-chat-avatar.svg +16 -0
  3. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts +2 -0
  4. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts.map +1 -0
  5. package/dist/components/chat/__tests-cy__/chat-messages.test.js +28 -0
  6. package/dist/components/chat/__tests-cy__/chat-messages.test.js.map +1 -0
  7. package/dist/components/chat/__tests-cy__/chat.test.d.ts +2 -0
  8. package/dist/components/chat/__tests-cy__/chat.test.d.ts.map +1 -0
  9. package/dist/components/chat/__tests-cy__/chat.test.js +122 -0
  10. package/dist/components/chat/__tests-cy__/chat.test.js.map +1 -0
  11. package/dist/components/chat/chat-connecting.d.ts +7 -0
  12. package/dist/components/chat/chat-connecting.d.ts.map +1 -0
  13. package/dist/components/chat/chat-connecting.js +6 -0
  14. package/dist/components/chat/chat-connecting.js.map +1 -0
  15. package/dist/components/chat/chat-error.d.ts +3 -0
  16. package/dist/components/chat/chat-error.d.ts.map +1 -0
  17. package/dist/components/chat/chat-error.js +18 -0
  18. package/dist/components/chat/chat-error.js.map +1 -0
  19. package/dist/components/chat/chat-error.module.less +6 -0
  20. package/dist/components/chat/chat-input-file.d.ts +5 -0
  21. package/dist/components/chat/chat-input-file.d.ts.map +1 -0
  22. package/dist/components/chat/chat-input-file.js +43 -0
  23. package/dist/components/chat/chat-input-file.js.map +1 -0
  24. package/dist/components/chat/chat-input.d.ts +5 -0
  25. package/dist/components/chat/chat-input.d.ts.map +1 -0
  26. package/dist/components/chat/chat-input.js +94 -0
  27. package/dist/components/chat/chat-input.js.map +1 -0
  28. package/dist/components/chat/chat-input.module.less +11 -0
  29. package/dist/components/chat/chat-message-template-agent.d.ts +4 -0
  30. package/dist/components/chat/chat-message-template-agent.d.ts.map +1 -0
  31. package/dist/components/chat/chat-message-template-agent.js +14 -0
  32. package/dist/components/chat/chat-message-template-agent.js.map +1 -0
  33. package/dist/components/chat/chat-message-template-user.d.ts +4 -0
  34. package/dist/components/chat/chat-message-template-user.d.ts.map +1 -0
  35. package/dist/components/chat/chat-message-template-user.js +16 -0
  36. package/dist/components/chat/chat-message-template-user.js.map +1 -0
  37. package/dist/components/chat/chat-message-typing.d.ts +3 -0
  38. package/dist/components/chat/chat-message-typing.d.ts.map +1 -0
  39. package/dist/components/chat/chat-message-typing.js +15 -0
  40. package/dist/components/chat/chat-message-typing.js.map +1 -0
  41. package/dist/components/chat/chat-message.d.ts +12 -0
  42. package/dist/components/chat/chat-message.d.ts.map +1 -0
  43. package/dist/components/chat/chat-message.js +60 -0
  44. package/dist/components/chat/chat-message.js.map +1 -0
  45. package/dist/components/chat/chat-messages.d.ts +7 -0
  46. package/dist/components/chat/chat-messages.d.ts.map +1 -0
  47. package/dist/components/chat/chat-messages.js +12 -0
  48. package/dist/components/chat/chat-messages.js.map +1 -0
  49. package/dist/components/chat/chat-notifications.d.ts +5 -0
  50. package/dist/components/chat/chat-notifications.d.ts.map +1 -0
  51. package/dist/components/chat/chat-notifications.js +12 -0
  52. package/dist/components/chat/chat-notifications.js.map +1 -0
  53. package/dist/components/chat/chat-timer.d.ts +3 -0
  54. package/dist/components/chat/chat-timer.d.ts.map +1 -0
  55. package/dist/components/chat/chat-timer.js +18 -0
  56. package/dist/components/chat/chat-timer.js.map +1 -0
  57. package/dist/components/chat/chat-timer.module.less +5 -0
  58. package/dist/components/chat/chat.d.ts +8 -0
  59. package/dist/components/chat/chat.d.ts.map +1 -0
  60. package/dist/components/chat/chat.js +28 -0
  61. package/dist/components/chat/chat.js.map +1 -0
  62. package/dist/components/common/multiline-text.d.ts +8 -0
  63. package/dist/components/common/multiline-text.d.ts.map +1 -0
  64. package/dist/components/common/multiline-text.js +12 -0
  65. package/dist/components/common/multiline-text.js.map +1 -0
  66. package/dist/components/common/multiline-text.module.less +9 -0
  67. package/dist/components/message-content/message-content-file.d.ts +8 -0
  68. package/dist/components/message-content/message-content-file.d.ts.map +1 -0
  69. package/dist/components/message-content/message-content-file.js +11 -0
  70. package/dist/components/message-content/message-content-file.js.map +1 -0
  71. package/dist/components/message-content/message-content-text.d.ts +8 -0
  72. package/dist/components/message-content/message-content-text.d.ts.map +1 -0
  73. package/dist/components/message-content/message-content-text.js +7 -0
  74. package/dist/components/message-content/message-content-text.js.map +1 -0
  75. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts +2 -0
  76. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts.map +1 -0
  77. package/dist/components/messages/__tests-cy__/message-agent.test.js +89 -0
  78. package/dist/components/messages/__tests-cy__/message-agent.test.js.map +1 -0
  79. package/dist/components/messages/__tests-cy__/message-system.test.d.ts +2 -0
  80. package/dist/components/messages/__tests-cy__/message-system.test.d.ts.map +1 -0
  81. package/dist/components/messages/__tests-cy__/message-system.test.js +20 -0
  82. package/dist/components/messages/__tests-cy__/message-system.test.js.map +1 -0
  83. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts +2 -0
  84. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts.map +1 -0
  85. package/dist/components/messages/__tests-cy__/message-timeout.test.js +32 -0
  86. package/dist/components/messages/__tests-cy__/message-timeout.test.js.map +1 -0
  87. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts +2 -0
  88. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts.map +1 -0
  89. package/dist/components/messages/__tests-cy__/message-typing.test.js +49 -0
  90. package/dist/components/messages/__tests-cy__/message-typing.test.js.map +1 -0
  91. package/dist/components/messages/__tests-cy__/message-user.test.d.ts +2 -0
  92. package/dist/components/messages/__tests-cy__/message-user.test.d.ts.map +1 -0
  93. package/dist/components/messages/__tests-cy__/message-user.test.js +33 -0
  94. package/dist/components/messages/__tests-cy__/message-user.test.js.map +1 -0
  95. package/dist/components/messages/message-agent.d.ts +12 -0
  96. package/dist/components/messages/message-agent.d.ts.map +1 -0
  97. package/dist/components/messages/message-agent.js +18 -0
  98. package/dist/components/messages/message-agent.js.map +1 -0
  99. package/dist/components/messages/message-agent.module.less +59 -0
  100. package/dist/components/messages/message-avatar.d.ts +9 -0
  101. package/dist/components/messages/message-avatar.d.ts.map +1 -0
  102. package/dist/components/messages/message-avatar.js +14 -0
  103. package/dist/components/messages/message-avatar.js.map +1 -0
  104. package/dist/components/messages/message-avatar.module.less +26 -0
  105. package/dist/components/messages/message-footer.d.ts +7 -0
  106. package/dist/components/messages/message-footer.d.ts.map +1 -0
  107. package/dist/components/messages/message-footer.js +7 -0
  108. package/dist/components/messages/message-footer.js.map +1 -0
  109. package/dist/components/messages/message-system.d.ts +8 -0
  110. package/dist/components/messages/message-system.d.ts.map +1 -0
  111. package/dist/components/messages/message-system.js +12 -0
  112. package/dist/components/messages/message-system.js.map +1 -0
  113. package/dist/components/messages/message-system.module.less +26 -0
  114. package/dist/components/messages/message-timeout.d.ts +8 -0
  115. package/dist/components/messages/message-timeout.d.ts.map +1 -0
  116. package/dist/components/messages/message-timeout.js +16 -0
  117. package/dist/components/messages/message-timeout.js.map +1 -0
  118. package/dist/components/messages/message-typing.d.ts +8 -0
  119. package/dist/components/messages/message-typing.d.ts.map +1 -0
  120. package/dist/components/messages/message-typing.js +10 -0
  121. package/dist/components/messages/message-typing.js.map +1 -0
  122. package/dist/components/messages/message-typing.module.less +40 -0
  123. package/dist/components/messages/message-user.d.ts +9 -0
  124. package/dist/components/messages/message-user.d.ts.map +1 -0
  125. package/dist/components/messages/message-user.js +13 -0
  126. package/dist/components/messages/message-user.js.map +1 -0
  127. package/dist/components/messages/message-user.module.less +35 -0
  128. package/dist/components/messages/use-avatar-props.d.ts +4 -0
  129. package/dist/components/messages/use-avatar-props.d.ts.map +1 -0
  130. package/dist/components/messages/use-avatar-props.js +12 -0
  131. package/dist/components/messages/use-avatar-props.js.map +1 -0
  132. package/dist/index.d.ts +12 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +12 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/models/chat-customizations.d.ts +29 -0
  137. package/dist/models/chat-customizations.d.ts.map +1 -0
  138. package/dist/models/chat-customizations.js +2 -0
  139. package/dist/models/chat-customizations.js.map +1 -0
  140. package/dist/models/component.d.ts +4 -0
  141. package/dist/models/component.d.ts.map +1 -0
  142. package/dist/models/component.js +2 -0
  143. package/dist/models/component.js.map +1 -0
  144. package/dist/models/index.d.ts +3 -0
  145. package/dist/models/index.d.ts.map +1 -0
  146. package/dist/models/index.js +3 -0
  147. package/dist/models/index.js.map +1 -0
  148. package/dist/models/support-chat.d.ts +66 -0
  149. package/dist/models/support-chat.d.ts.map +1 -0
  150. package/dist/models/support-chat.js +28 -0
  151. package/dist/models/support-chat.js.map +1 -0
  152. package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts +65 -0
  153. package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts.map +1 -0
  154. package/dist/stores/__mocks-cy__/chat-ui.store.mock.js +268 -0
  155. package/dist/stores/__mocks-cy__/chat-ui.store.mock.js.map +1 -0
  156. package/dist/stores/chat-input.store.d.ts +10 -0
  157. package/dist/stores/chat-input.store.d.ts.map +1 -0
  158. package/dist/stores/chat-input.store.js +46 -0
  159. package/dist/stores/chat-input.store.js.map +1 -0
  160. package/dist/stores/chat-ui-backend-echo.store.d.ts +13 -0
  161. package/dist/stores/chat-ui-backend-echo.store.d.ts.map +1 -0
  162. package/dist/stores/chat-ui-backend-echo.store.js +111 -0
  163. package/dist/stores/chat-ui-backend-echo.store.js.map +1 -0
  164. package/dist/stores/chat-ui-backend.store.d.ts +6 -0
  165. package/dist/stores/chat-ui-backend.store.d.ts.map +1 -0
  166. package/dist/stores/chat-ui-backend.store.js +3 -0
  167. package/dist/stores/chat-ui-backend.store.js.map +1 -0
  168. package/dist/stores/chat-ui.store.d.ts +142 -0
  169. package/dist/stores/chat-ui.store.d.ts.map +1 -0
  170. package/dist/stores/chat-ui.store.js +679 -0
  171. package/dist/stores/chat-ui.store.js.map +1 -0
  172. package/dist/stores/index.d.ts +3 -0
  173. package/dist/stores/index.d.ts.map +1 -0
  174. package/dist/stores/index.js +3 -0
  175. package/dist/stores/index.js.map +1 -0
  176. package/dist/utils/text-utils.d.ts +11 -0
  177. package/dist/utils/text-utils.d.ts.map +1 -0
  178. package/dist/utils/text-utils.js +82 -0
  179. package/dist/utils/text-utils.js.map +1 -0
  180. package/package.json +52 -0
  181. package/src/assets/floating-chat-avatar.svg +16 -0
  182. package/src/components/chat/__tests-cy__/chat-messages.test.tsx +36 -0
  183. package/src/components/chat/__tests-cy__/chat.test.tsx +156 -0
  184. package/src/components/chat/chat-connecting.tsx +23 -0
  185. package/src/components/chat/chat-error.module.less +6 -0
  186. package/src/components/chat/chat-error.module.less.d.ts +3 -0
  187. package/src/components/chat/chat-error.tsx +39 -0
  188. package/src/components/chat/chat-input-file.tsx +68 -0
  189. package/src/components/chat/chat-input.module.less +11 -0
  190. package/src/components/chat/chat-input.module.less.d.ts +3 -0
  191. package/src/components/chat/chat-input.tsx +143 -0
  192. package/src/components/chat/chat-message-template-agent.tsx +26 -0
  193. package/src/components/chat/chat-message-template-user.tsx +46 -0
  194. package/src/components/chat/chat-message-typing.tsx +19 -0
  195. package/src/components/chat/chat-message.tsx +78 -0
  196. package/src/components/chat/chat-messages.tsx +23 -0
  197. package/src/components/chat/chat-notifications.tsx +19 -0
  198. package/src/components/chat/chat-timer.module.less +5 -0
  199. package/src/components/chat/chat-timer.module.less.d.ts +3 -0
  200. package/src/components/chat/chat-timer.tsx +35 -0
  201. package/src/components/chat/chat.tsx +55 -0
  202. package/src/components/common/multiline-text.module.less +9 -0
  203. package/src/components/common/multiline-text.module.less.d.ts +3 -0
  204. package/src/components/common/multiline-text.tsx +30 -0
  205. package/src/components/message-content/message-content-file.tsx +27 -0
  206. package/src/components/message-content/message-content-text.tsx +12 -0
  207. package/src/components/messages/__tests-cy__/message-agent.test.tsx +155 -0
  208. package/src/components/messages/__tests-cy__/message-system.test.tsx +33 -0
  209. package/src/components/messages/__tests-cy__/message-timeout.test.tsx +38 -0
  210. package/src/components/messages/__tests-cy__/message-typing.test.tsx +58 -0
  211. package/src/components/messages/__tests-cy__/message-user.test.tsx +52 -0
  212. package/src/components/messages/message-agent.module.less +59 -0
  213. package/src/components/messages/message-agent.module.less.d.ts +9 -0
  214. package/src/components/messages/message-agent.tsx +62 -0
  215. package/src/components/messages/message-avatar.module.less +26 -0
  216. package/src/components/messages/message-avatar.module.less.d.ts +5 -0
  217. package/src/components/messages/message-avatar.tsx +33 -0
  218. package/src/components/messages/message-footer.tsx +17 -0
  219. package/src/components/messages/message-system.module.less +26 -0
  220. package/src/components/messages/message-system.module.less.d.ts +5 -0
  221. package/src/components/messages/message-system.tsx +35 -0
  222. package/src/components/messages/message-timeout.tsx +42 -0
  223. package/src/components/messages/message-typing.module.less +40 -0
  224. package/src/components/messages/message-typing.module.less.d.ts +5 -0
  225. package/src/components/messages/message-typing.tsx +25 -0
  226. package/src/components/messages/message-user.module.less +35 -0
  227. package/src/components/messages/message-user.module.less.d.ts +7 -0
  228. package/src/components/messages/message-user.tsx +49 -0
  229. package/src/components/messages/use-avatar-props.tsx +17 -0
  230. package/src/cypress.d.ts +10 -0
  231. package/src/index.ts +11 -0
  232. package/src/models/chat-customizations.ts +34 -0
  233. package/src/models/component.ts +3 -0
  234. package/src/models/index.ts +2 -0
  235. package/src/models/support-chat.ts +84 -0
  236. package/src/stores/__mocks-cy__/chat-ui.store.mock.ts +105 -0
  237. package/src/stores/chat-input.store.ts +25 -0
  238. package/src/stores/chat-ui-backend-echo.store.ts +94 -0
  239. package/src/stores/chat-ui-backend.store.ts +10 -0
  240. package/src/stores/chat-ui.store.ts +537 -0
  241. package/src/stores/index.ts +10 -0
  242. package/src/utils/text-utils.ts +93 -0
  243. package/tsconfig.json +15 -0
  244. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // eslint-disable-next-line spaced-comment
3
+ /// <reference types="../../../cypress" />
4
+ import { BodyText } from '@servicetitan/design-system';
5
+ import { mount } from 'cypress/react';
6
+ import { MessageUser } from '../message-user';
7
+ describe('[MessageUser]', () => {
8
+ beforeEach(() => {
9
+ cy.viewport('macbook-13');
10
+ });
11
+ it('should be properly rendered', () => {
12
+ mount(_jsx(MessageUser, { children: _jsx(BodyText, { "data-cy": "content", children: "message user content" }) }));
13
+ cy.getCy('chat-message-user').should('be.visible');
14
+ cy.getCy2('chat-message-normal').should('be.visible');
15
+ cy.getCy('chat-message-user-content')
16
+ .should('be.visible')
17
+ .should('contain.text', 'message user content');
18
+ });
19
+ it('should be properly rendered with long text', () => {
20
+ const longText = 'message user content '.repeat(100).trim();
21
+ mount(_jsx(MessageUser, { children: _jsx(BodyText, { "data-cy": "content", children: longText }) }));
22
+ cy.getCy('chat-message-user-content').should('be.visible').should('contain.text', longText);
23
+ });
24
+ it('should be rendered with footer', () => {
25
+ mount(_jsx(MessageUser, { messageFooter: _jsx(BodyText, { children: "message user footer" }), children: _jsx(BodyText, { "data-cy": "content", children: "message user content" }) }));
26
+ cy.getCy('chat-message-user-footer').should('be.visible');
27
+ });
28
+ it('should be rendered with error', () => {
29
+ mount(_jsx(MessageUser, { isError: true, children: _jsx(BodyText, { "data-cy": "content", children: "message user content" }) }));
30
+ cy.getCy2('chat-message-error').should('be.visible');
31
+ });
32
+ });
33
+ //# sourceMappingURL=message-user.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-user.test.js","sourceRoot":"","sources":["../../../../src/components/messages/__tests-cy__/message-user.test.tsx"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,KAAK,CACD,KAAC,WAAW,cACR,KAAC,QAAQ,eAAS,SAAS,qCAAgC,GACjD,CACjB,CAAC;QACF,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtD,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC;aAChC,MAAM,CAAC,YAAY,CAAC;aACpB,MAAM,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,KAAK,CACD,KAAC,WAAW,cACR,KAAC,QAAQ,eAAS,SAAS,YAAE,QAAQ,GAAY,GACvC,CACjB,CAAC;QACF,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,KAAK,CACD,KAAC,WAAW,IAAC,aAAa,EAAE,KAAC,QAAQ,sCAA+B,YAChE,KAAC,QAAQ,eAAS,SAAS,qCAAgC,GACjD,CACjB,CAAC;QACF,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,KAAK,CACD,KAAC,WAAW,IAAC,OAAO,kBAChB,KAAC,QAAQ,eAAS,SAAS,qCAAgC,GACjD,CACjB,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { FC, PropsWithChildren, ReactNode } from 'react';
2
+ import { IDataCyProps } from '../../models/component';
3
+ import { IMessageAvatarProps } from './message-avatar';
4
+ export interface IMessageAgentProps extends IDataCyProps {
5
+ avatar?: IMessageAvatarProps;
6
+ messageFooter?: ReactNode;
7
+ isError?: boolean;
8
+ fullWidth?: boolean;
9
+ subtle?: boolean;
10
+ }
11
+ export declare const MessageAgent: FC<PropsWithChildren<IMessageAgentProps>>;
12
+ //# sourceMappingURL=message-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-agent.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-agent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAiB,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACpD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CA8ClE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Stack } from '@servicetitan/design-system';
3
+ import classNames from 'classnames';
4
+ import * as Styles from './message-agent.module.less';
5
+ import { MessageAvatar } from './message-avatar';
6
+ export const MessageAgent = ({ avatar, children, fullWidth, isError, messageFooter, subtle, ...rest }) => {
7
+ var _a;
8
+ const dataCy = (_a = rest['data-cy']) !== null && _a !== void 0 ? _a : 'chat-message-agent';
9
+ const dataCy2 = isError ? 'chat-message-error' : 'chat-message-normal';
10
+ return (_jsxs("div", { className: classNames(Styles.messageRoot, {
11
+ [Styles.fullWidth]: Boolean(fullWidth),
12
+ }), "data-cy": dataCy, "data-cy2": dataCy2, children: [_jsx("div", { className: Styles.messageAvatar, children: avatar ? _jsx(MessageAvatar, { ...avatar }) : _jsx("div", {}) }), _jsxs(Stack, { direction: "column", spacing: "1", className: classNames(Styles.messageContent, {
13
+ 'w-100': Boolean(fullWidth),
14
+ }), "data-cy": `${dataCy}-center`, children: [subtle ? (children) : (_jsx("div", { className: classNames(Styles.messageBubble, {
15
+ [Styles.error]: Boolean(isError),
16
+ }), "data-cy": `${dataCy}-content`, children: children })), Boolean(messageFooter) && _jsx("div", { "data-cy": `${dataCy}-footer`, children: messageFooter })] })] }));
17
+ };
18
+ //# sourceMappingURL=message-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-agent.js","sourceRoot":"","sources":["../../../src/components/messages/message-agent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAuB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtE,MAAM,CAAC,MAAM,YAAY,GAA8C,CAAC,EACpE,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,MAAM,EACN,GAAG,IAAI,EACV,EAAE,EAAE;;IACD,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,mCAAI,oBAAoB,CAAC;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACvE,OAAO,CACH,eACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE;YACtC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;SACzC,CAAC,aACO,MAAM,cACL,OAAO,aAEjB,cAAK,SAAS,EAAE,MAAM,CAAC,aAAa,YAC/B,MAAM,CAAC,CAAC,CAAC,KAAC,aAAa,OAAK,MAAM,GAAI,CAAC,CAAC,CAAC,eAAO,GAC/C,EACN,MAAC,KAAK,IACF,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAC,GAAG,EACX,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE;oBACzC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;iBAC9B,CAAC,aACO,GAAG,MAAM,SAAS,aAE1B,MAAM,CAAC,CAAC,CAAC,CACN,QAAQ,CACX,CAAC,CAAC,CAAC,CACA,cACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE;4BACxC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;yBACnC,CAAC,aACO,GAAG,MAAM,UAAU,YAE3B,QAAQ,GACP,CACT,EACA,OAAO,CAAC,aAAa,CAAC,IAAI,yBAAc,GAAG,MAAM,SAAS,YAAG,aAAa,GAAO,IAC9E,IACN,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,59 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ @color-gradient-bot-start: #2270ee;
4
+ @color-gradient-bot-end: #8772e5;
5
+
6
+ /* stylelint-disable declaration-property-value-no-unknown */
7
+ .messageRoot {
8
+ display: grid;
9
+ max-width: 100%;
10
+ column-gap: @spacing-2;
11
+ row-gap: @spacing-1;
12
+ grid-template-areas:
13
+ 'avatar content .'
14
+ '. footer .';
15
+ grid-template-rows: auto auto;
16
+ grid-template-columns: minmax(@spacing-5, auto) 1fr minmax(@spacing-5, auto);
17
+
18
+ &.fullWidth {
19
+ width: 100%;
20
+ grid-template-areas:
21
+ 'avatar content'
22
+ '. footer ';
23
+ grid-template-rows: auto auto;
24
+ grid-template-columns: minmax(@spacing-5, auto) 1fr;
25
+ }
26
+ }
27
+
28
+ .messageFooter {
29
+ grid-area: footer;
30
+ }
31
+
32
+ .messageAvatar {
33
+ grid-area: avatar;
34
+ }
35
+
36
+ .messageContent {
37
+ max-width: 100%;
38
+ grid-area: content;
39
+ overflow-wrap: anywhere;
40
+ justify-self: flex-start;
41
+ }
42
+
43
+ .messageBubble {
44
+ color: @color-neutral-200;
45
+ padding: @spacing-2 @spacing-3;
46
+ background-color: @color-blue-100;
47
+ position: relative;
48
+ border-radius: @spacing-0 @spacing-3 @spacing-3 @spacing-3;
49
+ box-sizing: border-box;
50
+
51
+ &.error {
52
+ color: @color-neutral-400;
53
+ background-color: @color-red-100;
54
+
55
+ &::after {
56
+ background: @color-red-200;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { ChatParticipantIcon } from '../../models/support-chat';
3
+ export interface IMessageAvatarProps {
4
+ className?: string;
5
+ name: string;
6
+ icon: ChatParticipantIcon;
7
+ }
8
+ export declare const MessageAvatar: FC<IMessageAvatarProps>;
9
+ //# sourceMappingURL=message-avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-avatar.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-avatar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,mBAAmB,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,mBAAmB,CAqBjD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import { ChatParticipantIcon } from '../../models/support-chat';
4
+ import * as Styles from './message-avatar.module.less';
5
+ export const MessageAvatar = ({ className, icon, name }) => {
6
+ const isEmpty = icon === ChatParticipantIcon.Empty;
7
+ const isInitials = icon === ChatParticipantIcon.Initials;
8
+ const isBot = icon === ChatParticipantIcon.Bot;
9
+ return (_jsx("div", { className: classNames('align-self-end', Styles.userIcon, {
10
+ [Styles.bot]: isBot,
11
+ [Styles.system]: isEmpty,
12
+ }, className), "data-cy": `chat-avatar-${icon}`, children: isInitials ? name : null }));
13
+ };
14
+ //# sourceMappingURL=message-avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-avatar.js","sourceRoot":"","sources":["../../../src/components/messages/message-avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,MAAM,MAAM,8BAA8B,CAAC;AAQvD,MAAM,CAAC,MAAM,aAAa,GAA4B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;IAChF,MAAM,OAAO,GAAG,IAAI,KAAK,mBAAmB,CAAC,KAAK,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,KAAK,mBAAmB,CAAC,QAAQ,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC,GAAG,CAAC;IAE/C,OAAO,CACH,cACI,SAAS,EAAE,UAAU,CACjB,gBAAgB,EAChB,MAAM,CAAC,QAAQ,EACf;YACI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK;YACnB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;SAC3B,EACD,SAAS,CACZ,aACQ,eAAe,IAAI,EAAE,YAE7B,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GACvB,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .userIcon {
4
+ width: @spacing-5;
5
+ height: @spacing-5;
6
+ min-width: @spacing-5;
7
+ min-height: @spacing-5;
8
+ border-radius: @spacing-3;
9
+ background-color: @color-neutral-60;
10
+ font-size: @typescale-4;
11
+ color: @color-neutral-400;
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ position: relative;
16
+
17
+ &.bot {
18
+ background-image: url('../../assets/floating-chat-avatar.svg');
19
+ }
20
+
21
+ &.system {
22
+ min-height: @spacing-0;
23
+ height: @spacing-0;
24
+ background-color: transparent;
25
+ }
26
+ }
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ export interface IMessageFooterProps {
3
+ timestamp: Date;
4
+ name?: string;
5
+ }
6
+ export declare const MessageFooter: FC<IMessageFooterProps>;
7
+ //# sourceMappingURL=message-footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-footer.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-footer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,mBAAmB,CAOjD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Eyebrow } from '@servicetitan/design-system';
3
+ import { formatChatMessageDate } from '../../utils/text-utils';
4
+ export const MessageFooter = ({ name, timestamp }) => {
5
+ return (_jsxs(Eyebrow, { children: [name && `${name} • `, formatChatMessageDate(timestamp)] }));
6
+ };
7
+ //# sourceMappingURL=message-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-footer.js","sourceRoot":"","sources":["../../../src/components/messages/message-footer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,MAAM,CAAC,MAAM,aAAa,GAA4B,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IAC1E,OAAO,CACH,MAAC,OAAO,eACH,IAAI,IAAI,GAAG,IAAI,KAAK,EACpB,qBAAqB,CAAC,SAAS,CAAC,IAC3B,CACb,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { IDataCyProps } from '../../models/component';
3
+ export interface IMessageSystemProps extends IDataCyProps {
4
+ fullWidth?: boolean;
5
+ className?: string;
6
+ }
7
+ export declare const MessageSystem: FC<PropsWithChildren<IMessageSystemProps>>;
8
+ //# sourceMappingURL=message-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-system.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-system.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAuBpE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Stack } from '@servicetitan/design-system';
3
+ import classNames from 'classnames';
4
+ import * as Styles from './message-system.module.less';
5
+ export const MessageSystem = ({ children, className, fullWidth, ...rest }) => {
6
+ var _a;
7
+ const dataCy = (_a = rest['data-cy']) !== null && _a !== void 0 ? _a : 'chat-message-system';
8
+ return (_jsx("div", { className: classNames(Styles.messageRoot, {
9
+ [Styles.fullWidth]: Boolean(fullWidth),
10
+ }, className), "data-cy": dataCy, children: _jsx(Stack, { direction: "column", spacing: "1", className: Styles.messageContent, children: children }) }));
11
+ };
12
+ //# sourceMappingURL=message-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-system.js","sourceRoot":"","sources":["../../../src/components/messages/message-system.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,OAAO,KAAK,MAAM,MAAM,8BAA8B,CAAC;AAOvD,MAAM,CAAC,MAAM,aAAa,GAA+C,CAAC,EACtE,QAAQ,EACR,SAAS,EACT,SAAS,EACT,GAAG,IAAI,EACV,EAAE,EAAE;;IACD,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,mCAAI,qBAAqB,CAAC;IACxD,OAAO,CACH,cACI,SAAS,EAAE,UAAU,CACjB,MAAM,CAAC,WAAW,EAClB;YACI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;SACzC,EACD,SAAS,CACZ,aACQ,MAAM,YAEf,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,GAAG,EAAC,SAAS,EAAE,MAAM,CAAC,cAAc,YACjE,QAAQ,GACL,GACN,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ /* stylelint-disable declaration-property-value-no-unknown */
4
+ .messageRoot {
5
+ display: grid;
6
+ grid-template-areas: '. content .';
7
+ grid-template-rows: auto;
8
+ grid-template-columns: minmax(@spacing-5, auto) 1fr minmax(@spacing-5, auto);
9
+ column-gap: @spacing-2;
10
+ row-gap: @spacing-1;
11
+ width: 100%;
12
+
13
+ &.fullWidth {
14
+ grid-template:
15
+ 'content' auto
16
+ /
17
+ 1fr;
18
+ }
19
+ }
20
+
21
+ .messageContent {
22
+ grid-area: content;
23
+ overflow-wrap: anywhere;
24
+ justify-self: flex-start;
25
+ width: 100%;
26
+ }
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { IDataCyProps } from '../../models/component';
3
+ export interface IMessageTimeoutProps extends IDataCyProps {
4
+ onResume: () => void;
5
+ onReset: () => void;
6
+ }
7
+ export declare const MessageTimeout: FC<IMessageTimeoutProps>;
8
+ //# sourceMappingURL=message-timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-timeout.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-timeout.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,oBAAoB,CA+BnD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Divider, Link, Stack } from '@servicetitan/design-system';
3
+ import { useCallback } from 'react';
4
+ import { MessageSystem } from './message-system';
5
+ export const MessageTimeout = ({ onReset, onResume, ...rest }) => {
6
+ var _a;
7
+ const dataCy = (_a = rest['data-cy']) !== null && _a !== void 0 ? _a : 'chat-message-timeout';
8
+ const handleResume = useCallback(() => {
9
+ onResume();
10
+ }, [onResume]);
11
+ const handleReset = useCallback(() => {
12
+ onReset();
13
+ }, [onReset]);
14
+ return (_jsx(MessageSystem, { "data-cy": dataCy, fullWidth: true, children: _jsxs(Stack, { direction: "column", spacing: "2", children: [_jsx(Divider, {}), _jsxs(BodyText, { el: "div", className: "ta-center", children: ["Your session has timed out.", _jsx("br", {}), "Would you like to resume it or start a new one?", _jsx("br", {}), _jsx(Link, { onClick: handleResume, primary: true, "data-cy": `${dataCy}-resume`, children: "Continue session" }), ' ', "or", ' ', _jsx(Link, { onClick: handleReset, primary: true, "data-cy": `${dataCy}-reset`, children: "Start new session" })] })] }) }));
15
+ };
16
+ //# sourceMappingURL=message-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-timeout.js","sourceRoot":"","sources":["../../../src/components/messages/message-timeout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,MAAM,CAAC,MAAM,cAAc,GAA6B,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;;IACvF,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,mCAAI,sBAAsB,CAAC;IAEzD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,QAAQ,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACH,KAAC,aAAa,eAAU,MAAM,EAAE,SAAS,kBACrC,MAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,GAAG,aACjC,KAAC,OAAO,KAAG,EACX,MAAC,QAAQ,IAAC,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,WAAW,4CAEpC,cAAM,qDAEN,cAAM,EACN,KAAC,IAAI,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,mBAAU,GAAG,MAAM,SAAS,iCAEzD,EAAC,GAAG,QACR,GAAG,EACN,KAAC,IAAI,IAAC,OAAO,EAAE,WAAW,EAAE,OAAO,mBAAU,GAAG,MAAM,QAAQ,kCAEvD,IACA,IACP,GACI,CACnB,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { IDataCyProps } from '../../models/component';
3
+ import { IMessageAvatarProps } from './message-avatar';
4
+ export interface IMessageTypingProps extends IDataCyProps {
5
+ avatar: IMessageAvatarProps;
6
+ }
7
+ export declare const MessageTyping: FC<IMessageTypingProps>;
8
+ //# sourceMappingURL=message-typing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-typing.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-typing.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACrD,MAAM,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,mBAAmB,CAajD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Stack } from '@servicetitan/design-system';
3
+ import { MessageAgent } from './message-agent';
4
+ import * as Styles from './message-typing.module.less';
5
+ export const MessageTyping = ({ avatar, ...rest }) => {
6
+ var _a;
7
+ const dataCy = (_a = rest['data-cy']) !== null && _a !== void 0 ? _a : 'chat-message-typing';
8
+ return (_jsx(MessageAgent, { avatar: avatar, "data-cy": dataCy, subtle: true, children: _jsx(Stack, { className: "h-100", alignItems: "center", children: _jsxs("div", { className: Styles.dotsContainer, "data-cy": `${dataCy}-dots`, children: [_jsx("span", { className: Styles.dot }), _jsx("span", { className: Styles.dot }), _jsx("span", { className: Styles.dot })] }) }) }));
9
+ };
10
+ //# sourceMappingURL=message-typing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-typing.js","sourceRoot":"","sources":["../../../src/components/messages/message-typing.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,MAAM,MAAM,8BAA8B,CAAC;AAMvD,MAAM,CAAC,MAAM,aAAa,GAA4B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;;IAC1E,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,mCAAI,qBAAqB,CAAC;IACxD,OAAO,CACH,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,aAAW,MAAM,EAAE,MAAM,kBACjD,KAAC,KAAK,IAAC,SAAS,EAAC,OAAO,EAAC,UAAU,EAAC,QAAQ,YACxC,eAAK,SAAS,EAAE,MAAM,CAAC,aAAa,aAAW,GAAG,MAAM,OAAO,aAC3D,eAAM,SAAS,EAAE,MAAM,CAAC,GAAG,GAAI,EAC/B,eAAM,SAAS,EAAE,MAAM,CAAC,GAAG,GAAI,EAC/B,eAAM,SAAS,EAAE,MAAM,CAAC,GAAG,GAAI,IAC7B,GACF,GACG,CAClB,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .dotsContainer {
4
+ @keyframes dot-jumping {
5
+ 0% {
6
+ transform: translateY(0);
7
+ }
8
+ 16.6666% {
9
+ transform: translateY(-6px);
10
+ }
11
+ 33.3333% {
12
+ transform: translateY(0);
13
+ }
14
+ 100% {
15
+ transform: translateY(0);
16
+ }
17
+ }
18
+
19
+ & .dot {
20
+ width: 6px;
21
+ height: 6px;
22
+ margin: @spacing-0 2px;
23
+ background-color: @color-neutral-80;
24
+ border-radius: @border-radius-circular;
25
+ display: inline-block;
26
+ animation: dot-jumping 1.5s infinite ease-in-out;
27
+ }
28
+
29
+ & .dot:nth-child(1) {
30
+ animation-delay: 0s;
31
+ }
32
+
33
+ & .dot:nth-child(2) {
34
+ animation-delay: 0.5s;
35
+ }
36
+
37
+ & .dot:nth-child(3) {
38
+ animation-delay: 1s;
39
+ }
40
+ }
@@ -0,0 +1,9 @@
1
+ import { FC, PropsWithChildren, ReactNode } from 'react';
2
+ import { IDataCyProps } from '../../models/component';
3
+ export interface IMessageUserProps extends IDataCyProps {
4
+ messageFooter?: ReactNode;
5
+ isError?: boolean;
6
+ className?: string;
7
+ }
8
+ export declare const MessageUser: FC<PropsWithChildren<IMessageUserProps>>;
9
+ //# sourceMappingURL=message-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-user.d.ts","sourceRoot":"","sources":["../../../src/components/messages/message-user.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACnD,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAoChE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Stack } from '@servicetitan/design-system';
3
+ import classNames from 'classnames';
4
+ import * as Styles from './message-user.module.less';
5
+ export const MessageUser = ({ children, className, isError, messageFooter, ...rest }) => {
6
+ var _a;
7
+ const dataCy = (_a = rest['data-cy']) !== null && _a !== void 0 ? _a : 'chat-message-user';
8
+ const dataCy2 = isError ? 'chat-message-error' : 'chat-message-normal';
9
+ return (_jsxs("div", { className: classNames(Styles.messageRoot, 'max-w-100'), "data-cy": dataCy, "data-cy2": dataCy2, children: [_jsx(Stack, { direction: "column", spacing: "1", className: classNames('max-w-100', Styles.messageContent), children: _jsx("div", { className: classNames(Styles.messageBubble, {
10
+ [Styles.error]: isError,
11
+ }), "data-cy": `${dataCy}-content`, children: children }) }), Boolean(messageFooter) && (_jsx("div", { className: Styles.messageFooter, "data-cy": `${dataCy}-footer`, children: messageFooter }))] }));
12
+ };
13
+ //# sourceMappingURL=message-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-user.js","sourceRoot":"","sources":["../../../src/components/messages/message-user.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAQrD,MAAM,CAAC,MAAM,WAAW,GAA6C,CAAC,EAClE,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,GAAG,IAAI,EACV,EAAE,EAAE;;IACD,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,mCAAI,mBAAmB,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACvE,OAAO,CACH,eACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,aAC7C,MAAM,cACL,OAAO,aAEjB,KAAC,KAAK,IACF,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAC,GAAG,EACX,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,YAEzD,cACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE;wBACxC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;qBAC1B,CAAC,aACO,GAAG,MAAM,UAAU,YAE3B,QAAQ,GACP,GACF,EACP,OAAO,CAAC,aAAa,CAAC,IAAI,CACvB,cAAK,SAAS,EAAE,MAAM,CAAC,aAAa,aAAW,GAAG,MAAM,SAAS,YAC5D,aAAa,GACZ,CACT,IACC,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ /* stylelint-disable declaration-property-value-no-unknown */
4
+ .messageRoot {
5
+ display: grid;
6
+ grid-template-areas:
7
+ '. content'
8
+ '. footer';
9
+ grid-template-rows: auto auto;
10
+ grid-template-columns: minmax(@spacing-5, auto) 1fr;
11
+ column-gap: @spacing-2;
12
+ row-gap: @spacing-1;
13
+ }
14
+
15
+ .messageFooter {
16
+ grid-area: footer;
17
+ justify-self: end;
18
+ }
19
+
20
+ .messageContent {
21
+ grid-area: content;
22
+ overflow-wrap: anywhere;
23
+ justify-self: end;
24
+ }
25
+
26
+ .messageBubble {
27
+ color: @color-neutral-200;
28
+ padding: @spacing-2 @spacing-3;
29
+ background-color: @color-neutral-50;
30
+ border-radius: @spacing-3 @spacing-3 @spacing-0 @spacing-3;
31
+
32
+ &.error {
33
+ background-color: @color-red-100;
34
+ }
35
+ }
@@ -0,0 +1,4 @@
1
+ import { ChatParticipantIcon } from '../../models/support-chat';
2
+ import { IMessageAvatarProps } from './message-avatar';
3
+ export declare const useAvatarProps: (name: string, icon: ChatParticipantIcon) => IMessageAvatarProps;
4
+ //# sourceMappingURL=use-avatar-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-avatar-props.d.ts","sourceRoot":"","sources":["../../../src/components/messages/use-avatar-props.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,MAAM,mBAAmB,KAAG,mBAWxE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { useMemo } from 'react';
2
+ import { ChatParticipantIcon } from '../../models/support-chat';
3
+ import { getNameInitialsFirst } from '../../utils/text-utils';
4
+ export const useAvatarProps = (name, icon) => {
5
+ return useMemo(() => ({
6
+ name: name.length && icon === ChatParticipantIcon.Initials
7
+ ? getNameInitialsFirst(name)
8
+ : name,
9
+ icon,
10
+ }), [icon, name]);
11
+ };
12
+ //# sourceMappingURL=use-avatar-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-avatar-props.js","sourceRoot":"","sources":["../../../src/components/messages/use-avatar-props.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAAyB,EAAuB,EAAE;IAC3F,OAAO,OAAO,CACV,GAAG,EAAE,CAAC,CAAC;QACH,IAAI,EACA,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,mBAAmB,CAAC,QAAQ;YAChD,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC5B,CAAC,CAAC,IAAI;QACd,IAAI;KACP,CAAC,EACF,CAAC,IAAI,EAAE,IAAI,CAAC,CACf,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { MessageAgent, IMessageAgentProps } from './components/messages/message-agent';
2
+ export { MessageUser, IMessageUserProps } from './components/messages/message-user';
3
+ export { MessageSystem, IMessageSystemProps } from './components/messages/message-system';
4
+ export { MessageTyping, IMessageTypingProps } from './components/messages/message-typing';
5
+ export { MessageTimeout, IMessageTimeoutProps } from './components/messages/message-timeout';
6
+ export { MessageAvatar, IMessageAvatarProps } from './components/messages/message-avatar';
7
+ export { MessageFooter, IMessageFooterProps } from './components/messages/message-footer';
8
+ export { useAvatarProps } from './components/messages/use-avatar-props';
9
+ export { MultilineText } from './components/common/multiline-text';
10
+ export * from './stores';
11
+ export * from './models';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export { MessageAgent } from './components/messages/message-agent';
2
+ export { MessageUser } from './components/messages/message-user';
3
+ export { MessageSystem } from './components/messages/message-system';
4
+ export { MessageTyping } from './components/messages/message-typing';
5
+ export { MessageTimeout } from './components/messages/message-timeout';
6
+ export { MessageAvatar } from './components/messages/message-avatar';
7
+ export { MessageFooter } from './components/messages/message-footer';
8
+ export { useAvatarProps } from './components/messages/use-avatar-props';
9
+ export { MultilineText } from './components/common/multiline-text';
10
+ export * from './stores';
11
+ export * from './models';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,WAAW,EAAqB,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAuB,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAuB,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAwB,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAuB,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAuB,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { FC, PropsWithChildren, ReactNode } from 'react';
2
+ import { IMessageTypingProps } from '../components/messages/message-typing';
3
+ import { ChatMessageModelBase } from './support-chat';
4
+ export interface IChatMessageProps<T extends ChatMessageModelBase = ChatMessageModelBase> {
5
+ message: T;
6
+ }
7
+ export interface ChatMessageTemplateCustomization {
8
+ component: FC<PropsWithChildren<IChatMessageProps>>;
9
+ predicate: (message: ChatMessageModelBase) => boolean;
10
+ }
11
+ export type ChatMessageTemplateCustomizations = Partial<{
12
+ agent: ChatMessageTemplateCustomization;
13
+ user: ChatMessageTemplateCustomization;
14
+ }>;
15
+ export interface ChatMessageCustomization {
16
+ component: FC<IChatMessageProps>;
17
+ predicate: (message: ChatMessageModelBase) => boolean;
18
+ isSystem?: boolean;
19
+ }
20
+ export interface ChatMessageTypingCustomization {
21
+ component: FC<IMessageTypingProps>;
22
+ }
23
+ export type ChatCustomizations = Partial<{
24
+ messageTemplates: ChatMessageTemplateCustomizations;
25
+ messages: ChatMessageCustomization[];
26
+ messageTyping: ChatMessageTypingCustomization;
27
+ footerComponent: ReactNode;
28
+ }>;
29
+ //# sourceMappingURL=chat-customizations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-customizations.d.ts","sourceRoot":"","sources":["../../src/models/chat-customizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB;IACpF,OAAO,EAAE,CAAC,CAAC;CACd;AAED,MAAM,WAAW,gCAAgC;IAC7C,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC;CACzD;AAED,MAAM,MAAM,iCAAiC,GAAG,OAAO,CAAC;IACpD,KAAK,EAAE,gCAAgC,CAAC;IACxC,IAAI,EAAE,gCAAgC,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC3C,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACrC,gBAAgB,EAAE,iCAAiC,CAAC;IACpD,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,aAAa,EAAE,8BAA8B,CAAC;IAC9C,eAAe,EAAE,SAAS,CAAC;CAC9B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat-customizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-customizations.js","sourceRoot":"","sources":["../../src/models/chat-customizations.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface IDataCyProps {
2
+ ['data-cy']?: string;
3
+ }
4
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/models/component.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/models/component.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './support-chat';
2
+ export * from './chat-customizations';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './support-chat';
2
+ export * from './chat-customizations';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}