@patternfly/chatbot 2.2.0-prerelease.9 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +52 -0
  3. package/dist/cjs/Chatbot/Chatbot.d.ts +2 -1
  4. package/dist/cjs/Chatbot/Chatbot.js +1 -0
  5. package/dist/cjs/Chatbot/Chatbot.test.d.ts +1 -0
  6. package/dist/cjs/Chatbot/Chatbot.test.js +28 -0
  7. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  8. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +27 -0
  9. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  10. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +18 -0
  11. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
  12. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  13. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
  14. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +24 -12
  15. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
  16. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
  17. package/dist/cjs/ChatbotConversationHistoryNav/EmptyState.js +29 -0
  18. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
  19. package/dist/cjs/ChatbotConversationHistoryNav/LoadingState.js +45 -0
  20. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  21. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
  22. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  23. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
  24. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
  25. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +1 -1
  26. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +3 -1
  31. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  32. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
  33. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  34. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +3 -1
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
  46. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  47. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +55 -0
  48. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
  49. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
  50. package/dist/cjs/Compare/Compare.d.ts +17 -0
  51. package/dist/cjs/Compare/Compare.js +50 -0
  52. package/dist/cjs/Compare/Compare.test.d.ts +1 -0
  53. package/dist/cjs/Compare/Compare.test.js +20 -0
  54. package/dist/cjs/Compare/index.d.ts +2 -0
  55. package/dist/cjs/Compare/index.js +23 -0
  56. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
  57. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +26 -0
  58. package/dist/cjs/Message/ImageMessage/ImageMessage.d.ts +4 -0
  59. package/dist/cjs/Message/ImageMessage/ImageMessage.js +25 -0
  60. package/dist/cjs/Message/LinkMessage/LinkMessage.d.ts +4 -0
  61. package/dist/cjs/Message/LinkMessage/LinkMessage.js +30 -0
  62. package/dist/cjs/Message/Message.d.ts +35 -8
  63. package/dist/cjs/Message/Message.js +68 -18
  64. package/dist/cjs/Message/Message.test.js +239 -3
  65. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
  66. package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -0
  67. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
  68. package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
  69. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
  70. package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
  71. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
  72. package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
  73. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
  74. package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
  75. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
  76. package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
  77. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
  78. package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
  79. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
  80. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  81. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
  82. package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
  83. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
  84. package/dist/cjs/Message/UserFeedback/UserFeedback.js +54 -0
  85. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  86. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +133 -0
  87. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  88. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
  89. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  90. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
  91. package/dist/cjs/MessageBar/AttachButton.js +4 -2
  92. package/dist/cjs/MessageBar/MessageBar.d.ts +11 -4
  93. package/dist/cjs/MessageBar/MessageBar.js +127 -46
  94. package/dist/cjs/MessageBar/MessageBar.test.js +12 -4
  95. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -1
  96. package/dist/cjs/MessageBar/SendButton.js +3 -1
  97. package/dist/cjs/MessageBar/StopButton.js +3 -1
  98. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  99. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  100. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  101. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  102. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +4 -1
  103. package/dist/cjs/ResponseActions/ResponseActionButton.js +21 -6
  104. package/dist/cjs/ResponseActions/ResponseActions.d.ts +8 -2
  105. package/dist/cjs/ResponseActions/ResponseActions.js +7 -7
  106. package/dist/cjs/ResponseActions/ResponseActions.test.js +2 -2
  107. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  108. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  109. package/dist/cjs/__mocks__/rehype-external-links.d.ts +2 -0
  110. package/dist/cjs/__mocks__/rehype-external-links.js +4 -0
  111. package/dist/cjs/__mocks__/rehype-sanitize.d.ts +2 -0
  112. package/dist/cjs/__mocks__/rehype-sanitize.js +4 -0
  113. package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +2 -0
  114. package/dist/cjs/__mocks__/rehype-unwrap-images.js +4 -0
  115. package/dist/cjs/index.d.ts +4 -0
  116. package/dist/cjs/index.js +7 -1
  117. package/dist/cjs/tracking/console_tracking_provider.d.ts +10 -0
  118. package/dist/cjs/tracking/console_tracking_provider.js +27 -0
  119. package/dist/cjs/tracking/index.d.ts +2 -0
  120. package/dist/cjs/tracking/index.js +23 -0
  121. package/dist/cjs/tracking/posthog_tracking_provider.d.ts +9 -0
  122. package/dist/cjs/tracking/posthog_tracking_provider.js +37 -0
  123. package/dist/cjs/tracking/segment_tracking_provider.d.ts +10 -0
  124. package/dist/cjs/tracking/segment_tracking_provider.js +50 -0
  125. package/dist/cjs/tracking/trackingProviderProxy.d.ts +9 -0
  126. package/dist/cjs/tracking/trackingProviderProxy.js +24 -0
  127. package/dist/cjs/tracking/tracking_api.d.ts +8 -0
  128. package/dist/cjs/tracking/tracking_api.js +2 -0
  129. package/dist/cjs/tracking/tracking_registry.d.ts +4 -0
  130. package/dist/cjs/tracking/tracking_registry.js +33 -0
  131. package/dist/cjs/tracking/tracking_spi.d.ts +9 -0
  132. package/dist/cjs/tracking/tracking_spi.js +2 -0
  133. package/dist/cjs/tracking/umami_tracking_provider.d.ts +14 -0
  134. package/dist/cjs/tracking/umami_tracking_provider.js +44 -0
  135. package/dist/css/main.css +420 -148
  136. package/dist/css/main.css.map +1 -1
  137. package/dist/dynamic/Compare/package.json +1 -0
  138. package/dist/dynamic/tracking/package.json +1 -0
  139. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  140. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  141. package/dist/esm/Chatbot/Chatbot.d.ts +2 -1
  142. package/dist/esm/Chatbot/Chatbot.js +1 -0
  143. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  144. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  145. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  146. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  147. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  148. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  149. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +3 -3
  150. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  151. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +27 -4
  152. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +24 -12
  153. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +99 -3
  154. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.d.ts +11 -0
  155. package/dist/esm/ChatbotConversationHistoryNav/EmptyState.js +22 -0
  156. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.d.ts +4 -0
  157. package/dist/esm/ChatbotConversationHistoryNav/LoadingState.js +38 -0
  158. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  159. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  160. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  161. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  162. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +1 -1
  163. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +1 -1
  164. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  165. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  166. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  167. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  168. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +3 -1
  169. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  170. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  171. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  172. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  173. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +3 -1
  174. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  175. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  176. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  177. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  178. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  179. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +6 -4
  180. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  181. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  182. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
  183. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
  184. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  185. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +50 -0
  186. package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
  187. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +19 -11
  188. package/dist/esm/Compare/Compare.d.ts +17 -0
  189. package/dist/esm/Compare/Compare.js +43 -0
  190. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  191. package/dist/esm/Compare/Compare.test.js +15 -0
  192. package/dist/esm/Compare/index.d.ts +2 -0
  193. package/dist/esm/Compare/index.js +2 -0
  194. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
  195. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +21 -0
  196. package/dist/esm/Message/ImageMessage/ImageMessage.d.ts +4 -0
  197. package/dist/esm/Message/ImageMessage/ImageMessage.js +20 -0
  198. package/dist/esm/Message/LinkMessage/LinkMessage.d.ts +4 -0
  199. package/dist/esm/Message/LinkMessage/LinkMessage.js +25 -0
  200. package/dist/esm/Message/Message.d.ts +35 -8
  201. package/dist/esm/Message/Message.js +66 -16
  202. package/dist/esm/Message/Message.test.js +239 -3
  203. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
  204. package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
  205. package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
  206. package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
  207. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
  208. package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
  209. package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
  210. package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
  211. package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
  212. package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
  213. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
  214. package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
  215. package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
  216. package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
  217. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  218. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  219. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
  220. package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
  221. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
  222. package/dist/esm/Message/UserFeedback/UserFeedback.js +49 -0
  223. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  224. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +128 -0
  225. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  226. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
  227. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  228. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
  229. package/dist/esm/MessageBar/AttachButton.js +4 -2
  230. package/dist/esm/MessageBar/MessageBar.d.ts +11 -4
  231. package/dist/esm/MessageBar/MessageBar.js +127 -46
  232. package/dist/esm/MessageBar/MessageBar.test.js +12 -4
  233. package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -1
  234. package/dist/esm/MessageBar/SendButton.js +3 -1
  235. package/dist/esm/MessageBar/StopButton.js +3 -1
  236. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  237. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  238. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  239. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  240. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +4 -1
  241. package/dist/esm/ResponseActions/ResponseActionButton.js +18 -3
  242. package/dist/esm/ResponseActions/ResponseActions.d.ts +8 -2
  243. package/dist/esm/ResponseActions/ResponseActions.js +7 -7
  244. package/dist/esm/ResponseActions/ResponseActions.test.js +2 -2
  245. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  246. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  247. package/dist/esm/__mocks__/rehype-external-links.d.ts +2 -0
  248. package/dist/esm/__mocks__/rehype-external-links.js +2 -0
  249. package/dist/esm/__mocks__/rehype-sanitize.d.ts +2 -0
  250. package/dist/esm/__mocks__/rehype-sanitize.js +2 -0
  251. package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +2 -0
  252. package/dist/esm/__mocks__/rehype-unwrap-images.js +2 -0
  253. package/dist/esm/index.d.ts +4 -0
  254. package/dist/esm/index.js +4 -0
  255. package/dist/esm/tracking/console_tracking_provider.d.ts +10 -0
  256. package/dist/esm/tracking/console_tracking_provider.js +23 -0
  257. package/dist/esm/tracking/index.d.ts +2 -0
  258. package/dist/esm/tracking/index.js +2 -0
  259. package/dist/esm/tracking/posthog_tracking_provider.d.ts +9 -0
  260. package/dist/esm/tracking/posthog_tracking_provider.js +33 -0
  261. package/dist/esm/tracking/segment_tracking_provider.d.ts +10 -0
  262. package/dist/esm/tracking/segment_tracking_provider.js +46 -0
  263. package/dist/esm/tracking/trackingProviderProxy.d.ts +9 -0
  264. package/dist/esm/tracking/trackingProviderProxy.js +22 -0
  265. package/dist/esm/tracking/tracking_api.d.ts +8 -0
  266. package/dist/esm/tracking/tracking_api.js +1 -0
  267. package/dist/esm/tracking/tracking_registry.d.ts +4 -0
  268. package/dist/esm/tracking/tracking_registry.js +26 -0
  269. package/dist/esm/tracking/tracking_spi.d.ts +9 -0
  270. package/dist/esm/tracking/tracking_spi.js +1 -0
  271. package/dist/esm/tracking/umami_tracking_provider.d.ts +14 -0
  272. package/dist/esm/tracking/umami_tracking_provider.js +40 -0
  273. package/dist/tsconfig.tsbuildinfo +1 -1
  274. package/package.json +8 -3
  275. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +8 -2
  276. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +192 -15
  277. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +219 -0
  278. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +2 -2
  279. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +214 -12
  280. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +2 -1
  281. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +2 -2
  282. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +1 -1
  283. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
  284. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
  285. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +1 -1
  286. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  287. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +1 -1
  288. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +1 -1
  289. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +49 -8
  290. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +244 -14
  291. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessageWithExtraContent.tsx +54 -0
  292. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  293. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +5 -5
  294. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +1 -1
  295. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +36 -3
  296. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  297. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  298. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
  299. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +1 -1
  300. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +7 -7
  301. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +21 -6
  302. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
  303. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +39 -1
  304. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +48 -35
  305. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +2 -2
  306. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +3 -3
  307. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +453 -0
  308. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +11 -11
  309. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  310. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
  311. package/patternfly-docs/content/extensions/chatbot/img/ai-action-inpage.svg +85 -0
  312. package/patternfly-docs/content/extensions/chatbot/img/ai-action-message.svg +63 -0
  313. package/patternfly-docs/content/extensions/chatbot/img/analytics-example.svg +127 -0
  314. package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
  315. package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
  316. package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -58
  317. package/patternfly-docs/content/extensions/chatbot/img/chatbot-analytics.svg +51 -0
  318. package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +11 -12
  319. package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
  320. package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
  321. package/patternfly-docs/content/extensions/chatbot/img/comparison.svg +45 -0
  322. package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
  323. package/patternfly-docs/content/extensions/chatbot/img/docked.svg +259 -241
  324. package/patternfly-docs/content/extensions/chatbot/img/drawer.svg +255 -0
  325. package/patternfly-docs/content/extensions/chatbot/img/error-state.svg +30 -0
  326. package/patternfly-docs/content/extensions/chatbot/img/feedback-form.svg +88 -0
  327. package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
  328. package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
  329. package/patternfly-docs/content/extensions/chatbot/img/listening-pulse.svg +22 -0
  330. package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
  331. package/patternfly-docs/content/extensions/chatbot/img/loading-state.svg +28 -0
  332. package/patternfly-docs/content/extensions/chatbot/img/masthead-toggle-notification.svg +49 -0
  333. package/patternfly-docs/content/extensions/chatbot/img/masthead-toggle.svg +75 -0
  334. package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
  335. package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +84 -142
  336. package/patternfly-docs/content/extensions/chatbot/img/message-feedback.svg +52 -0
  337. package/patternfly-docs/content/extensions/chatbot/img/message-responses.svg +54 -0
  338. package/patternfly-docs/content/extensions/chatbot/img/new-chat-emptystate.svg +27 -0
  339. package/patternfly-docs/content/extensions/chatbot/img/no-results-emptystate.svg +27 -0
  340. package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +54 -39
  341. package/patternfly-docs/content/extensions/chatbot/img/posthog.svg +30 -0
  342. package/patternfly-docs/content/extensions/chatbot/img/segment.svg +36 -0
  343. package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
  344. package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
  345. package/patternfly-docs/content/extensions/chatbot/img/thank-you-card.svg +81 -0
  346. package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
  347. package/patternfly-docs/content/extensions/chatbot/img/toggle-tooltips.svg +38 -0
  348. package/patternfly-docs/content/extensions/chatbot/img/umami.svg +30 -0
  349. package/patternfly-docs/content/extensions/chatbot/img/welcome-elements.svg +82 -0
  350. package/patternfly-docs/content/extensions/chatbot/img/welcome-message.svg +94 -0
  351. package/src/AttachMenu/AttachMenu.scss +1 -1
  352. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  353. package/src/Chatbot/Chatbot.scss +20 -1
  354. package/src/Chatbot/Chatbot.test.tsx +31 -0
  355. package/src/Chatbot/Chatbot.tsx +2 -1
  356. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  357. package/src/ChatbotContent/ChatbotContent.scss +1 -0
  358. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  359. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +10 -4
  360. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +24 -1
  361. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +242 -3
  362. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +94 -26
  363. package/src/ChatbotConversationHistoryNav/EmptyState.tsx +44 -0
  364. package/src/ChatbotConversationHistoryNav/LoadingState.tsx +38 -0
  365. package/src/ChatbotFooter/ChatbotFooter.scss +8 -4
  366. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  367. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  368. package/src/ChatbotFooter/ChatbotFootnote.tsx +2 -2
  369. package/src/ChatbotHeader/ChatbotHeader.scss +5 -6
  370. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  371. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  372. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  373. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +7 -1
  374. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  375. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  376. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +7 -1
  377. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  378. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
  379. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  380. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +11 -4
  381. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +75 -0
  382. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +7 -2
  383. package/src/ChatbotModal/ChatbotModal.scss +12 -12
  384. package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
  385. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +2 -0
  386. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +26 -18
  387. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +2 -2
  388. package/src/CodeModal/CodeModal.scss +7 -4
  389. package/src/Compare/Compare.scss +72 -0
  390. package/src/Compare/Compare.test.tsx +31 -0
  391. package/src/Compare/Compare.tsx +98 -0
  392. package/src/Compare/index.ts +2 -0
  393. package/src/FileDetails/FileDetails.scss +1 -1
  394. package/src/FileDetailsLabel/FileDetailsLabel.scss +2 -2
  395. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
  396. package/src/Message/ErrorMessage/ErrorMessage.tsx +14 -0
  397. package/src/Message/ImageMessage/ImageMessage.scss +9 -0
  398. package/src/Message/ImageMessage/ImageMessage.tsx +14 -0
  399. package/src/Message/LinkMessage/LinkMessage.tsx +34 -0
  400. package/src/Message/ListMessage/ListMessage.scss +6 -6
  401. package/src/Message/Message.scss +4 -26
  402. package/src/Message/Message.test.tsx +313 -3
  403. package/src/Message/Message.tsx +130 -31
  404. package/src/Message/MessageLoading.scss +2 -2
  405. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  406. package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
  407. package/src/Message/QuickStarts/QuickStartTile.scss +0 -1
  408. package/src/Message/TableMessage/TableMessage.scss +23 -0
  409. package/src/Message/TableMessage/TableMessage.tsx +83 -0
  410. package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
  411. package/src/Message/TableMessage/TdMessage.tsx +11 -0
  412. package/src/Message/TableMessage/ThMessage.tsx +11 -0
  413. package/src/Message/TableMessage/TheadMessage.tsx +11 -0
  414. package/src/Message/TableMessage/TrMessage.tsx +27 -0
  415. package/src/Message/TextMessage/TextMessage.scss +21 -12
  416. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  417. package/src/Message/UserFeedback/CloseButton.tsx +21 -0
  418. package/src/Message/UserFeedback/UserFeedback.scss +53 -0
  419. package/src/Message/UserFeedback/UserFeedback.test.tsx +236 -0
  420. package/src/Message/UserFeedback/UserFeedback.tsx +128 -0
  421. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
  422. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
  423. package/src/MessageBar/AttachButton.scss +19 -3
  424. package/src/MessageBar/AttachButton.tsx +3 -1
  425. package/src/MessageBar/MessageBar.scss +58 -24
  426. package/src/MessageBar/MessageBar.test.tsx +12 -4
  427. package/src/MessageBar/MessageBar.tsx +164 -65
  428. package/src/MessageBar/MicrophoneButton.scss +8 -8
  429. package/src/MessageBar/MicrophoneButton.tsx +1 -1
  430. package/src/MessageBar/SendButton.tsx +2 -0
  431. package/src/MessageBar/StopButton.scss +17 -3
  432. package/src/MessageBar/StopButton.tsx +2 -0
  433. package/src/MessageBox/JumpButton.scss +6 -6
  434. package/src/MessageBox/MessageBox.scss +1 -0
  435. package/src/MessageBox/MessageBox.test.tsx +26 -0
  436. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  437. package/src/ResponseActions/ResponseActionButton.tsx +14 -2
  438. package/src/ResponseActions/ResponseActions.scss +2 -2
  439. package/src/ResponseActions/ResponseActions.test.tsx +4 -2
  440. package/src/ResponseActions/ResponseActions.tsx +26 -2
  441. package/src/Settings/Settings.scss +2 -2
  442. package/src/Settings/SettingsForm.test.tsx +28 -0
  443. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +2 -2
  444. package/src/SourcesCard/SourcesCard.scss +9 -3
  445. package/src/TermsOfUse/TermsOfUse.scss +1 -1
  446. package/src/__mocks__/rehype-external-links.ts +3 -0
  447. package/src/__mocks__/rehype-sanitize.ts +3 -0
  448. package/src/__mocks__/rehype-unwrap-images.tsx +3 -0
  449. package/src/index.ts +6 -0
  450. package/src/main.scss +5 -6
  451. package/src/tracking/console_tracking_provider.ts +30 -0
  452. package/src/tracking/index.ts +3 -0
  453. package/src/tracking/posthog_tracking_provider.ts +42 -0
  454. package/src/tracking/segment_tracking_provider.ts +62 -0
  455. package/src/tracking/trackingProviderProxy.ts +28 -0
  456. package/src/tracking/tracking_api.ts +11 -0
  457. package/src/tracking/tracking_registry.ts +33 -0
  458. package/src/tracking/tracking_spi.ts +14 -0
  459. package/src/tracking/umami_tracking_provider.ts +54 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const AttachmentEdit_1 = __importDefault(require("./AttachmentEdit"));
9
+ describe('AttachmentEdit', () => {
10
+ it('should open AttachmentEdit modal', () => {
11
+ const props = {
12
+ code: 'code',
13
+ fileName: 'fileName',
14
+ onCancel: jest.fn(),
15
+ onSave: jest.fn(),
16
+ isModalOpen: true,
17
+ handleModalToggle: jest.fn()
18
+ };
19
+ (0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
20
+ expect(react_2.screen.getByText('Edit attachment')).toBeTruthy();
21
+ });
22
+ it('should call onSave handler when the save button is clicked', () => {
23
+ const onSaveHandler = jest.fn();
24
+ const props = {
25
+ code: 'code',
26
+ fileName: 'fileName',
27
+ onCancel: jest.fn(),
28
+ onSave: onSaveHandler,
29
+ isModalOpen: true,
30
+ handleModalToggle: jest.fn()
31
+ };
32
+ (0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
33
+ // Click on save button
34
+ react_2.fireEvent.click(react_2.screen.getByText('Save'));
35
+ expect(onSaveHandler).toHaveBeenCalledWith(expect.any(Object), 'code');
36
+ });
37
+ it('should call cancel handler when the cancel button is clicked', () => {
38
+ const onCancelHandler = jest.fn();
39
+ const props = {
40
+ code: 'code',
41
+ fileName: 'fileName',
42
+ onCancel: onCancelHandler,
43
+ onSave: jest.fn(),
44
+ isModalOpen: true,
45
+ handleModalToggle: jest.fn()
46
+ };
47
+ (0, react_2.render)(react_1.default.createElement(AttachmentEdit_1.default, Object.assign({}, props)));
48
+ // Click on cancel button
49
+ react_2.fireEvent.click(react_2.screen.getByText('Cancel'));
50
+ expect(onCancelHandler).toHaveBeenCalled();
51
+ });
52
+ });
@@ -17,7 +17,8 @@ export declare enum ChatbotDisplayMode {
17
17
  default = "default",
18
18
  embedded = "embedded",
19
19
  docked = "docked",
20
- fullscreen = "fullscreen"
20
+ fullscreen = "fullscreen",
21
+ drawer = "drawer"
21
22
  }
22
23
  declare const Chatbot: React.ForwardRefExoticComponent<ChatbotProps & React.RefAttributes<HTMLDivElement>>;
23
24
  export default Chatbot;
@@ -26,6 +26,7 @@ var ChatbotDisplayMode;
26
26
  ChatbotDisplayMode["embedded"] = "embedded";
27
27
  ChatbotDisplayMode["docked"] = "docked";
28
28
  ChatbotDisplayMode["fullscreen"] = "fullscreen";
29
+ ChatbotDisplayMode["drawer"] = "drawer";
29
30
  })(ChatbotDisplayMode || (exports.ChatbotDisplayMode = ChatbotDisplayMode = {}));
30
31
  const ChatbotBase = (_a) => {
31
32
  var { children, displayMode = ChatbotDisplayMode.default, isVisible = true, className, innerRef, ariaLabel } = _a, props = __rest(_a, ["children", "displayMode", "isVisible", "className", "innerRef", "ariaLabel"]);
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ require("@testing-library/jest-dom");
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_2 = require("@testing-library/react");
9
+ const Chatbot_1 = __importDefault(require("./Chatbot"));
10
+ describe('Chatbot', () => {
11
+ it('should render Chatbot with default display mode', () => {
12
+ (0, react_2.render)(react_1.default.createElement(Chatbot_1.default, null, "Chatbot Content"));
13
+ expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
14
+ });
15
+ it('should render Chatbot with custom ariaLabel', () => {
16
+ (0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { ariaLabel: "Chatbot" }, "Chatbot Content"));
17
+ expect(react_2.screen.getByLabelText('Chatbot')).toBeTruthy();
18
+ });
19
+ it('should render Chatbot with custom className', () => {
20
+ const { container } = (0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { ariaLabel: "Chatbot", className: "custom-class" }, "Chatbot Content"));
21
+ const chatbotElement = container.querySelector('.custom-class');
22
+ expect(chatbotElement).toBeInTheDocument();
23
+ });
24
+ it('should not render Chatbot', () => {
25
+ (0, react_2.render)(react_1.default.createElement(Chatbot_1.default, { isVisible: false }, "Chatbot Content"));
26
+ expect(react_2.screen.queryByLabelText('Chatbot')).toBeFalsy();
27
+ });
28
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const ChatbotAlert_1 = __importDefault(require("./ChatbotAlert"));
9
+ describe('ChatbotAlert', () => {
10
+ it('should render ChatbotAlert with default variant', () => {
11
+ (0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert" }));
12
+ expect(react_2.screen.getByText('Chatbot Alert')).toBeTruthy();
13
+ });
14
+ it('should render ChatbotAlert with children', () => {
15
+ (0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert" }, "Chatbot Alert Content"));
16
+ expect(react_2.screen.getByText('Chatbot Alert Content')).toBeTruthy();
17
+ });
18
+ it('should call onClose handler when onClose button is clicked', () => {
19
+ const onCloseHandler = jest.fn();
20
+ (0, react_2.render)(react_1.default.createElement(ChatbotAlert_1.default, { title: "Chatbot Alert", onClose: onCloseHandler }, "Chatbot Alert Content"));
21
+ expect(react_2.screen.getByText('Chatbot Alert')).toBeTruthy();
22
+ expect(react_2.screen.getByText('Chatbot Alert Content')).toBeTruthy();
23
+ // click on the close button
24
+ react_2.fireEvent.click(react_2.screen.getByRole('button'));
25
+ expect(onCloseHandler).toHaveBeenCalled();
26
+ });
27
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const ChatbotContent_1 = __importDefault(require("./ChatbotContent"));
9
+ describe('ChatbotContent', () => {
10
+ it('should render ChatbotContent with children', () => {
11
+ (0, react_2.render)(react_1.default.createElement(ChatbotContent_1.default, null, "Chatbot Content"));
12
+ expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
13
+ });
14
+ it('should render ChatbotContent with custom classname', () => {
15
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotContent_1.default, { className: "custom-class" }, "Chatbot Content"));
16
+ expect(container.querySelector('.custom-class')).toBeTruthy();
17
+ });
18
+ });
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import { DropdownProps } from '@patternfly/react-core';
3
3
  export interface ChatbotConversationHistoryDropdownProps extends Omit<DropdownProps, 'toggle'> {
4
- /** Dropdown items rendered in conversation options dropdown */
4
+ /** Dropdown items rendered in conversation settings dropdown */
5
5
  menuItems: React.ReactNode;
6
- /** Optional classname applied to conversation options dropdown */
6
+ /** Optional classname applied to conversation settings dropdown */
7
7
  menuClassName?: string;
8
- /** Tooltip content and aria-label applied to conversation options dropdown */
8
+ /** Tooltip content and aria-label applied to conversation settings dropdown */
9
9
  label?: string;
10
10
  /** Callback for when user selects item. */
11
11
  onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
@@ -13,7 +13,9 @@ const react_core_1 = require("@patternfly/react-core");
13
13
  const ellipsis_v_icon_1 = __importDefault(require("@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"));
14
14
  const ChatbotConversationHistoryDropdown = ({ menuItems, menuClassName, onSelect, label }) => {
15
15
  const [isOpen, setIsOpen] = react_1.default.useState(false);
16
- const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom" },
16
+ const toggle = (toggleRef) => (react_1.default.createElement(react_core_1.Tooltip, { className: "pf-chatbot__tooltip", content: label !== null && label !== void 0 ? label : 'Conversation options', position: "bottom",
17
+ // prevents VO announcements of both aria label and tooltip
18
+ aria: "none" },
17
19
  react_1.default.createElement(react_core_1.MenuToggle, { className: "pf-chatbot__history-actions", variant: "plain", "aria-label": label !== null && label !== void 0 ? label : 'Conversation options', ref: toggleRef, isExpanded: isOpen, onClick: () => setIsOpen(!isOpen), role: "menuitem" },
18
20
  react_1.default.createElement(ellipsis_v_icon_1.default, null))));
19
21
  return (react_1.default.createElement(react_core_1.Dropdown, { className: `pf-chatbot__selections ${menuClassName !== null && menuClassName !== void 0 ? menuClassName : ''}`, isOpen: isOpen, onSelect: (props) => {
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
- import { DrawerProps, MenuItemProps } from '@patternfly/react-core';
2
+ import { DrawerProps, MenuItemProps, MenuProps, DrawerPanelContentProps, DrawerContentProps, DrawerContentBodyProps, DrawerHeadProps, DrawerActionsProps, DrawerCloseButtonProps, DrawerPanelBodyProps, SkeletonProps } from '@patternfly/react-core';
3
3
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
4
+ import { HistoryEmptyStateProps } from './EmptyState';
4
5
  export interface Conversation {
5
6
  /** Conversation id */
6
7
  id: string;
@@ -10,11 +11,11 @@ export interface Conversation {
10
11
  noIcon?: boolean;
11
12
  /** Conversation */
12
13
  text: string;
13
- /** Dropdown items rendered in conversation options dropdown */
14
+ /** Dropdown items rendered in conversation settings dropdown */
14
15
  menuItems?: React.ReactNode;
15
- /** Optional classname applied to conversation options dropdown */
16
+ /** Optional classname applied to conversation settings dropdown */
16
17
  menuClassName?: string;
17
- /** Tooltip content and aria-label applied to conversation options dropdown */
18
+ /** Tooltip content and aria-label applied to conversation settings dropdown */
18
19
  label?: string;
19
20
  /** Callback for when user selects item. */
20
21
  onSelect?: (event?: React.MouseEvent, value?: string | number) => void;
@@ -53,6 +54,28 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
53
54
  reverseButtonOrder?: boolean;
54
55
  /** Custom test id for the drawer actions */
55
56
  drawerActionsTestId?: string;
57
+ /** Additional props applied to menu */
58
+ menuProps?: MenuProps;
59
+ /** Additional props applied to panel */
60
+ drawerPanelContentProps?: DrawerPanelContentProps;
61
+ /** Additional props applied to drawer content */
62
+ drawerContentProps?: Omit<DrawerContentProps, 'panelContent'>;
63
+ /** Additional props applied to drawer content body */
64
+ drawerContentBodyProps?: DrawerContentBodyProps;
65
+ /** Additional props applied to drawer head */
66
+ drawerHeadProps?: DrawerHeadProps;
67
+ /** Additional props applied to drawer actions */
68
+ drawerActionsProps?: DrawerActionsProps;
69
+ /** Additional props applied to drawer close button */
70
+ drawerCloseButtonProps?: DrawerCloseButtonProps;
71
+ /** Additional props appleid to drawer panel body */
72
+ drawerPanelBodyProps?: DrawerPanelBodyProps;
73
+ /** Whether to show drawer loading state */
74
+ isLoading?: boolean;
75
+ /** Additional props for loading state */
76
+ loadingState?: SkeletonProps;
77
+ /** Content to show in error state. Error state will appear once content is passed in. */
78
+ errorState?: HistoryEmptyStateProps;
56
79
  }
57
80
  export declare const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps>;
58
81
  export default ChatbotConversationHistoryNav;
@@ -24,8 +24,10 @@ const react_core_1 = require("@patternfly/react-core");
24
24
  const react_icons_1 = require("@patternfly/react-icons");
25
25
  const Chatbot_1 = require("../Chatbot/Chatbot");
26
26
  const ChatbotConversationHistoryDropdown_1 = __importDefault(require("./ChatbotConversationHistoryDropdown"));
27
+ const LoadingState_1 = __importDefault(require("./LoadingState"));
28
+ const EmptyState_1 = __importDefault(require("./EmptyState"));
27
29
  const ChatbotConversationHistoryNav = (_a) => {
28
- var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions' } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId"]);
30
+ var { onDrawerToggle, isDrawerOpen, setIsDrawerOpen, activeItemId, onSelectActiveItem, conversations, newChatButtonText = 'New chat', drawerContent, onNewChat, searchInputPlaceholder = 'Search previous conversations...', searchInputAriaLabel = 'Filter menu items', handleTextInputChange, displayMode, reverseButtonOrder = false, drawerActionsTestId = 'chatbot-nav-drawer-actions', menuProps, drawerPanelContentProps, drawerContentProps, drawerContentBodyProps, drawerHeadProps, drawerActionsProps, drawerCloseButtonProps, drawerPanelBodyProps, isLoading, loadingState, errorState } = _a, props = __rest(_a, ["onDrawerToggle", "isDrawerOpen", "setIsDrawerOpen", "activeItemId", "onSelectActiveItem", "conversations", "newChatButtonText", "drawerContent", "onNewChat", "searchInputPlaceholder", "searchInputAriaLabel", "handleTextInputChange", "displayMode", "reverseButtonOrder", "drawerActionsTestId", "menuProps", "drawerPanelContentProps", "drawerContentProps", "drawerContentBodyProps", "drawerHeadProps", "drawerActionsProps", "drawerCloseButtonProps", "drawerPanelBodyProps", "isLoading", "loadingState", "errorState"]);
29
31
  const drawerRef = react_1.default.useRef(null);
30
32
  const onExpand = () => {
31
33
  drawerRef.current && drawerRef.current.focus();
@@ -52,16 +54,26 @@ const ChatbotConversationHistoryNav = (_a) => {
52
54
  // Menu Content
53
55
  // - Consumers should pass an array to <Chatbot> of the list of conversations
54
56
  // - Groups could be optional, but items need to be ordered by date
55
- const menuContent = (react_1.default.createElement(react_core_1.Menu, { isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId },
56
- react_1.default.createElement(react_core_1.MenuContent, null, buildMenu())));
57
- const panelContent = (react_1.default.createElement(react_core_1.DrawerPanelContent, { focusTrap: { enabled: true }, minSize: "384px", maxSize: "384px" },
58
- react_1.default.createElement(react_core_1.DrawerHead, null,
59
- react_1.default.createElement(react_core_1.DrawerActions, { "data-testid": drawerActionsTestId, className: reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : '' },
60
- react_1.default.createElement(react_core_1.DrawerCloseButton, { onClick: onDrawerToggle }),
61
- onNewChat && react_1.default.createElement(react_core_1.Button, { onClick: onNewChat }, newChatButtonText))),
57
+ const renderMenuContent = () => {
58
+ if (errorState) {
59
+ return react_1.default.createElement(EmptyState_1.default, Object.assign({}, errorState));
60
+ }
61
+ return (react_1.default.createElement(react_core_1.Menu, Object.assign({ isPlain: true, onSelect: onSelectActiveItem, activeItemId: activeItemId }, menuProps),
62
+ react_1.default.createElement(react_core_1.MenuContent, null, buildMenu())));
63
+ };
64
+ const renderDrawerContent = () => (react_1.default.createElement(react_1.default.Fragment, null,
62
65
  handleTextInputChange && (react_1.default.createElement("div", { className: "pf-chatbot__input" },
63
66
  react_1.default.createElement(react_core_1.SearchInput, { "aria-label": searchInputAriaLabel, onChange: (_event, value) => handleTextInputChange(value), placeholder: searchInputPlaceholder }))),
64
- react_1.default.createElement(react_core_1.DrawerPanelBody, null, menuContent)));
67
+ react_1.default.createElement(react_core_1.DrawerPanelBody, Object.assign({}, drawerPanelBodyProps), renderMenuContent())));
68
+ const renderPanelContent = () => {
69
+ const drawer = (react_1.default.createElement(react_1.default.Fragment, null,
70
+ react_1.default.createElement(react_core_1.DrawerHead, Object.assign({}, drawerHeadProps),
71
+ react_1.default.createElement(react_core_1.DrawerActions, Object.assign({ "data-testid": drawerActionsTestId, className: reverseButtonOrder ? 'pf-v6-c-drawer__actions--reversed' : '' }, drawerActionsProps),
72
+ react_1.default.createElement(react_core_1.DrawerCloseButton, Object.assign({ onClick: onDrawerToggle }, drawerCloseButtonProps)),
73
+ onNewChat && react_1.default.createElement(react_core_1.Button, { onClick: onNewChat }, newChatButtonText))),
74
+ isLoading ? react_1.default.createElement(LoadingState_1.default, Object.assign({}, loadingState)) : renderDrawerContent()));
75
+ return (react_1.default.createElement(react_core_1.DrawerPanelContent, Object.assign({ "aria-live": "polite", focusTrap: { enabled: true }, defaultSize: "384px" }, drawerPanelContentProps), drawer));
76
+ };
65
77
  // An onKeyDown property must be passed to the Drawer component to handle closing
66
78
  // the drawer panel and deactivating the focus trap via the Escape key.
67
79
  const onEscape = (event) => {
@@ -73,10 +85,10 @@ const ChatbotConversationHistoryNav = (_a) => {
73
85
  }
74
86
  };
75
87
  return (react_1.default.createElement(react_core_1.Drawer, Object.assign({ className: "pf-chatbot__history", isExpanded: isDrawerOpen, onExpand: onExpand, position: "start", onKeyDown: onEscape, isInline: displayMode === Chatbot_1.ChatbotDisplayMode.fullscreen || displayMode === Chatbot_1.ChatbotDisplayMode.embedded }, props),
76
- react_1.default.createElement(react_core_1.DrawerContent, { panelContent: panelContent },
77
- react_1.default.createElement(react_core_1.DrawerContentBody, null,
88
+ react_1.default.createElement(react_core_1.DrawerContent, Object.assign({ panelContent: renderPanelContent() }, drawerContentProps),
89
+ react_1.default.createElement(react_core_1.DrawerContentBody, Object.assign({}, drawerContentBodyProps),
78
90
  react_1.default.createElement(react_1.default.Fragment, null,
79
- react_1.default.createElement("div", { className: `${isDrawerOpen && (displayMode === Chatbot_1.ChatbotDisplayMode.default || displayMode === Chatbot_1.ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
91
+ react_1.default.createElement("div", { className: `${isDrawerOpen && (displayMode === Chatbot_1.ChatbotDisplayMode.default || displayMode === Chatbot_1.ChatbotDisplayMode.docked || displayMode === Chatbot_1.ChatbotDisplayMode.drawer) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
80
92
  drawerContent)))));
81
93
  };
82
94
  exports.ChatbotConversationHistoryNav = ChatbotConversationHistoryNav;
@@ -17,17 +17,44 @@ require("@testing-library/jest-dom");
17
17
  const react_2 = require("@testing-library/react");
18
18
  const Chatbot_1 = require("../Chatbot/Chatbot");
19
19
  const ChatbotConversationHistoryNav_1 = __importDefault(require("./ChatbotConversationHistoryNav"));
20
+ const react_core_1 = require("@patternfly/react-core");
21
+ const ERROR = {
22
+ bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
23
+ "To try again, check your connection and reload this page. If the issue persists,",
24
+ ' ',
25
+ react_1.default.createElement("a", { href: "" }, "contact the support team"),
26
+ ".")),
27
+ buttonText: 'Reload',
28
+ buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
29
+ hasButton: true,
30
+ titleText: 'Could not load chat history',
31
+ status: react_core_1.EmptyStateStatus.danger,
32
+ onClick: () => alert('Clicked Reload')
33
+ };
34
+ const ERROR_WITHOUT_BUTTON = {
35
+ bodyText: (react_1.default.createElement(react_1.default.Fragment, null,
36
+ "To try again, check your connection and reload this page. If the issue persists,",
37
+ ' ',
38
+ react_1.default.createElement("a", { href: "" }, "contact the support team"),
39
+ ".")),
40
+ buttonText: 'Reload',
41
+ buttonIcon: react_1.default.createElement(react_core_1.Spinner, { size: "sm" }),
42
+ hasButton: false,
43
+ titleText: 'Could not load chat history',
44
+ status: react_core_1.EmptyStateStatus.danger,
45
+ onClick: () => alert('Clicked Reload')
46
+ };
20
47
  describe('ChatbotConversationHistoryNav', () => {
21
48
  const onDrawerToggle = jest.fn();
22
49
  const initialConversations = [
23
50
  {
24
51
  id: '1',
25
- text: 'Lightspeed documentation'
52
+ text: 'ChatBot documentation'
26
53
  }
27
54
  ];
28
55
  it('should open the conversation history navigation drawer', () => {
29
56
  (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations }));
30
- expect(react_2.screen.queryByText('Lightspeed documentation')).toBeInTheDocument();
57
+ expect(react_2.screen.queryByText('ChatBot documentation')).toBeInTheDocument();
31
58
  });
32
59
  it('should display the conversations for grouped conversations', () => {
33
60
  const groupedConversations = {
@@ -63,7 +90,76 @@ describe('ChatbotConversationHistoryNav', () => {
63
90
  charCode: 27
64
91
  });
65
92
  (0, react_2.waitFor)(() => {
66
- expect(react_2.screen.queryByText('Lightspeed documentation')).not.toBeInTheDocument();
93
+ expect(react_2.screen.queryByText('ChatBot documentation')).not.toBeInTheDocument();
67
94
  });
68
95
  }));
96
+ it('should be resizable', () => {
97
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerPanelContentProps: { isResizable: true, minSize: '200px' } }));
98
+ expect(react_2.screen.getByRole('dialog', { name: /Resize/i })).toBeTruthy();
99
+ expect(react_2.screen.getByRole('separator', { name: /Resize/i })).toBeTruthy();
100
+ expect(react_2.screen.getByRole('dialog', { name: /Resize/i })).toHaveAttribute('style', '--pf-v6-c-drawer__panel--md--FlexBasis: 384px; --pf-v6-c-drawer__panel--md--FlexBasis--min: 200px;');
101
+ });
102
+ it('should accept drawerContentProps', () => {
103
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerContentProps: { className: 'test' } }));
104
+ const element = container.querySelector('.test');
105
+ expect(element).toBeInTheDocument();
106
+ });
107
+ it('should accept drawerContentBodyProps', () => {
108
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerContentBodyProps: { className: 'test' } }));
109
+ const element = container.querySelector('.test');
110
+ expect(element).toBeInTheDocument();
111
+ });
112
+ it('should accept drawerHeadProps', () => {
113
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerHeadProps: { className: 'test' } }));
114
+ const element = container.querySelector('.test');
115
+ expect(element).toBeInTheDocument();
116
+ });
117
+ it('should accept drawerActionsProps', () => {
118
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerActionsProps: { className: 'test' } }));
119
+ const element = container.querySelector('.test');
120
+ expect(element).toBeInTheDocument();
121
+ });
122
+ it('should accept drawerCloseButtonProps', () => {
123
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerCloseButtonProps: { className: 'test' } }));
124
+ const element = container.querySelector('.test');
125
+ expect(element).toBeInTheDocument();
126
+ });
127
+ it('should accept drawerPanelBodyProps', () => {
128
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), conversations: initialConversations, drawerPanelBodyProps: { className: 'test' } }));
129
+ const element = container.querySelector('.test');
130
+ expect(element).toBeInTheDocument();
131
+ });
132
+ it('should show loading state if triggered', () => {
133
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true }));
134
+ expect(react_2.screen.getByRole('dialog', { name: /Loading chatbot conversation history/i })).toBeTruthy();
135
+ expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
136
+ });
137
+ it('should pass alternative aria label to loading state', () => {
138
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, loadingState: { screenreaderText: 'I am a test' } }));
139
+ expect(react_2.screen.getByRole('dialog', { name: /I am a test/i })).toBeTruthy();
140
+ });
141
+ it('should accept errorState', () => {
142
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR }));
143
+ expect(react_2.screen.getByRole('dialog', {
144
+ name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team . Loading... Reload/i
145
+ })).toBeTruthy();
146
+ expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
147
+ expect(react_2.screen.getByRole('button', { name: /Loading... Reload/i })).toBeTruthy();
148
+ expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
149
+ expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
150
+ });
151
+ it('should accept errorState without button', () => {
152
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, errorState: ERROR_WITHOUT_BUTTON }));
153
+ expect(react_2.screen.getByRole('dialog', {
154
+ name: /Could not load chat history To try again, check your connection and reload this page. If the issue persists, contact the support team ./i
155
+ })).toBeTruthy();
156
+ expect(react_2.screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
157
+ expect(react_2.screen.queryByRole('button', { name: /Loading... Reload/i })).toBeFalsy();
158
+ expect(react_2.screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
159
+ expect(react_2.screen.getByRole('heading', { name: /Could not load chat history/i })).toBeTruthy();
160
+ });
161
+ it('should show loading state over error state if both are supplied', () => {
162
+ (0, react_2.render)(react_1.default.createElement(ChatbotConversationHistoryNav_1.default, { onDrawerToggle: onDrawerToggle, isDrawerOpen: true, displayMode: Chatbot_1.ChatbotDisplayMode.fullscreen, setIsDrawerOpen: jest.fn(), reverseButtonOrder: false, handleTextInputChange: jest.fn(), conversations: initialConversations, isLoading: true, errorState: ERROR }));
163
+ expect(react_2.screen.getByRole('dialog', { name: /Loading/i })).toBeTruthy();
164
+ });
69
165
  });
@@ -0,0 +1,11 @@
1
+ import { EmptyStateProps } from '@patternfly/react-core';
2
+ import React from 'react';
3
+ export interface HistoryEmptyStateProps extends EmptyStateProps {
4
+ onClick?: () => void;
5
+ bodyText?: string | React.ReactNode;
6
+ buttonText?: string;
7
+ buttonIcon?: React.ReactNode;
8
+ hasButton?: boolean;
9
+ }
10
+ export declare const HistoryEmptyState: React.FunctionComponent<HistoryEmptyStateProps>;
11
+ export default HistoryEmptyState;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.HistoryEmptyState = void 0;
18
+ const react_core_1 = require("@patternfly/react-core");
19
+ const react_1 = __importDefault(require("react"));
20
+ const HistoryEmptyState = (_a) => {
21
+ var { bodyText, buttonIcon, buttonText, status, titleText, headingLevel, onClick, hasButton = false } = _a, props = __rest(_a, ["bodyText", "buttonIcon", "buttonText", "status", "titleText", "headingLevel", "onClick", "hasButton"]);
22
+ return (react_1.default.createElement(react_core_1.EmptyState, Object.assign({ status: status, titleText: titleText, headingLevel: headingLevel }, props),
23
+ react_1.default.createElement(react_core_1.EmptyStateBody, null, bodyText),
24
+ hasButton && (react_1.default.createElement(react_core_1.EmptyStateFooter, null,
25
+ react_1.default.createElement(react_core_1.EmptyStateActions, null,
26
+ react_1.default.createElement(react_core_1.Button, { icon: buttonIcon, variant: "secondary", onClick: onClick }, buttonText))))));
27
+ };
28
+ exports.HistoryEmptyState = HistoryEmptyState;
29
+ exports.default = exports.HistoryEmptyState;
@@ -0,0 +1,4 @@
1
+ import { SkeletonProps } from '@patternfly/react-core';
2
+ import React from 'react';
3
+ export declare const LoadingState: React.FunctionComponent<SkeletonProps>;
4
+ export default LoadingState;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.LoadingState = void 0;
18
+ const react_core_1 = require("@patternfly/react-core");
19
+ const react_1 = __importDefault(require("react"));
20
+ const LoadingState = (_a) => {
21
+ var { screenreaderText } = _a, rest = __rest(_a, ["screenreaderText"]);
22
+ return (react_1.default.createElement("div", { className: "pf-chatbot__history-loading" },
23
+ react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
24
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ screenreaderText: screenreaderText !== null && screenreaderText !== void 0 ? screenreaderText : 'Loading chatbot conversation history', fontSize: "3xl" }, rest))),
25
+ react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
26
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
27
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
28
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
29
+ react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
30
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
31
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
32
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
33
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
34
+ react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
35
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
36
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
37
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
38
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)),
39
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest))),
40
+ react_1.default.createElement("div", { className: "pf-chatbot__history-loading-block" },
41
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "sm", width: "70%" }, rest)),
42
+ react_1.default.createElement(react_core_1.Skeleton, Object.assign({ fontSize: "3xl" }, rest)))));
43
+ };
44
+ exports.LoadingState = LoadingState;
45
+ exports.default = exports.LoadingState;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const ChatbotFooter_1 = __importDefault(require("./ChatbotFooter"));
9
+ describe('ChatbotFooter', () => {
10
+ it('should render ChatbotFooter with children', () => {
11
+ (0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, null, "Chatbot Content"));
12
+ expect(react_2.screen.getByText('Chatbot Content')).toBeTruthy();
13
+ });
14
+ it('should render ChatbotFooter with custom classname', () => {
15
+ const { container } = (0, react_2.render)(react_1.default.createElement(ChatbotFooter_1.default, { className: "custom-class" }, "Chatbot Content"));
16
+ expect(container.querySelector('.custom-class')).toBeTruthy();
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ export {};