@patternfly/chatbot 2.2.0-prerelease.2 → 2.2.0-prerelease.21

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 (401) 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.test.d.ts +1 -0
  4. package/dist/cjs/Chatbot/Chatbot.test.js +28 -0
  5. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  6. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +27 -0
  7. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  8. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +18 -0
  9. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  10. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
  11. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
  12. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  13. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  14. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +18 -0
  15. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  16. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +87 -0
  17. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  18. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +18 -0
  19. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  20. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +18 -0
  21. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  22. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +16 -0
  23. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  24. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +20 -0
  25. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +18 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +20 -0
  31. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  32. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  33. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +43 -0
  34. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -1
  35. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +41 -0
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +47 -0
  39. package/dist/cjs/ChatbotHeader/index.d.ts +1 -0
  40. package/dist/cjs/ChatbotHeader/index.js +1 -0
  41. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +3 -1
  42. package/dist/cjs/CodeModal/CodeModal.js +2 -12
  43. package/dist/cjs/Compare/Compare.d.ts +17 -0
  44. package/dist/cjs/Compare/Compare.js +50 -0
  45. package/dist/cjs/Compare/Compare.test.d.ts +1 -0
  46. package/dist/cjs/Compare/Compare.test.js +20 -0
  47. package/dist/cjs/Compare/index.d.ts +2 -0
  48. package/dist/cjs/Compare/index.js +23 -0
  49. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  50. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
  51. package/dist/cjs/Message/Message.d.ts +31 -7
  52. package/dist/cjs/Message/Message.js +47 -15
  53. package/dist/cjs/Message/Message.test.js +183 -3
  54. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +17 -0
  55. package/dist/cjs/Message/QuickResponse/QuickResponse.js +34 -0
  56. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +13 -0
  57. package/dist/cjs/Message/QuickStarts/FallbackImg.js +34 -0
  58. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  59. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +82 -0
  60. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  61. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +64 -0
  62. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  63. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +76 -0
  64. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  65. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +30 -0
  66. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  67. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +77 -0
  68. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  69. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.js +77 -0
  70. package/dist/cjs/Message/QuickStarts/types.d.ts +132 -0
  71. package/dist/cjs/Message/QuickStarts/types.js +17 -0
  72. package/dist/cjs/Message/TableMessage/TableMessage.d.ts +20 -0
  73. package/dist/cjs/Message/TableMessage/TableMessage.js +67 -0
  74. package/dist/cjs/Message/TableMessage/TbodyMessage.d.ts +7 -0
  75. package/dist/cjs/Message/TableMessage/TbodyMessage.js +33 -0
  76. package/dist/cjs/Message/TableMessage/TdMessage.d.ts +5 -0
  77. package/dist/cjs/Message/TableMessage/TdMessage.js +26 -0
  78. package/dist/cjs/Message/TableMessage/ThMessage.d.ts +5 -0
  79. package/dist/cjs/Message/TableMessage/ThMessage.js +26 -0
  80. package/dist/cjs/Message/TableMessage/TheadMessage.d.ts +5 -0
  81. package/dist/cjs/Message/TableMessage/TheadMessage.js +26 -0
  82. package/dist/cjs/Message/TableMessage/TrMessage.d.ts +7 -0
  83. package/dist/cjs/Message/TableMessage/TrMessage.js +37 -0
  84. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +2 -1
  85. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  86. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
  87. package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
  88. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
  89. package/dist/cjs/Message/UserFeedback/UserFeedback.js +55 -0
  90. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  91. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +146 -0
  92. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  93. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
  94. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  95. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
  96. package/dist/cjs/MessageBar/AttachButton.js +4 -2
  97. package/dist/cjs/MessageBar/MessageBar.js +9 -12
  98. package/dist/cjs/MessageBar/MessageBar.test.js +4 -4
  99. package/dist/cjs/MessageBar/SendButton.js +3 -1
  100. package/dist/cjs/MessageBar/StopButton.js +3 -1
  101. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  102. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  103. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  104. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  105. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +10 -1
  106. package/dist/cjs/ResponseActions/ResponseActionButton.js +28 -5
  107. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  108. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
  109. package/dist/cjs/ResponseActions/ResponseActions.d.ts +12 -2
  110. package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
  111. package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
  112. package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
  113. package/dist/cjs/Settings/SettingsForm.js +27 -0
  114. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  115. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  116. package/dist/cjs/Settings/index.d.ts +2 -0
  117. package/dist/cjs/Settings/index.js +23 -0
  118. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
  119. package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
  120. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  121. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
  122. package/dist/cjs/TermsOfUse/index.d.ts +2 -0
  123. package/dist/cjs/TermsOfUse/index.js +23 -0
  124. package/dist/cjs/index.d.ts +6 -0
  125. package/dist/cjs/index.js +10 -1
  126. package/dist/css/main.css +400 -102
  127. package/dist/css/main.css.map +1 -1
  128. package/dist/dynamic/Compare/package.json +1 -0
  129. package/dist/dynamic/Settings/package.json +1 -0
  130. package/dist/dynamic/TermsOfUse/package.json +1 -0
  131. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  132. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  133. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  134. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  135. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  136. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  137. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  138. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  139. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  140. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
  141. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
  142. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  143. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  144. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  145. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  146. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  147. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  148. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  149. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  150. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  151. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  152. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +10 -0
  153. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  154. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  155. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  156. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  157. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  158. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  159. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  160. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  161. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  162. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  163. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  164. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -1
  165. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  166. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  167. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  168. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
  169. package/dist/esm/ChatbotHeader/index.d.ts +1 -0
  170. package/dist/esm/ChatbotHeader/index.js +1 -0
  171. package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
  172. package/dist/esm/CodeModal/CodeModal.js +2 -12
  173. package/dist/esm/Compare/Compare.d.ts +17 -0
  174. package/dist/esm/Compare/Compare.js +43 -0
  175. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  176. package/dist/esm/Compare/Compare.test.js +15 -0
  177. package/dist/esm/Compare/index.d.ts +2 -0
  178. package/dist/esm/Compare/index.js +2 -0
  179. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  180. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
  181. package/dist/esm/Message/Message.d.ts +31 -7
  182. package/dist/esm/Message/Message.js +45 -13
  183. package/dist/esm/Message/Message.test.js +183 -3
  184. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
  185. package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
  186. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
  187. package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
  188. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  189. package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
  190. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  191. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
  192. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  193. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
  194. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  195. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
  196. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  197. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
  198. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  199. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
  200. package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
  201. package/dist/esm/Message/QuickStarts/types.js +14 -0
  202. package/dist/esm/Message/TableMessage/TableMessage.d.ts +20 -0
  203. package/dist/esm/Message/TableMessage/TableMessage.js +62 -0
  204. package/dist/esm/Message/TableMessage/TbodyMessage.d.ts +7 -0
  205. package/dist/esm/Message/TableMessage/TbodyMessage.js +28 -0
  206. package/dist/esm/Message/TableMessage/TdMessage.d.ts +5 -0
  207. package/dist/esm/Message/TableMessage/TdMessage.js +21 -0
  208. package/dist/esm/Message/TableMessage/ThMessage.d.ts +5 -0
  209. package/dist/esm/Message/TableMessage/ThMessage.js +21 -0
  210. package/dist/esm/Message/TableMessage/TheadMessage.d.ts +5 -0
  211. package/dist/esm/Message/TableMessage/TheadMessage.js +21 -0
  212. package/dist/esm/Message/TableMessage/TrMessage.d.ts +7 -0
  213. package/dist/esm/Message/TableMessage/TrMessage.js +32 -0
  214. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  215. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  216. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
  217. package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
  218. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
  219. package/dist/esm/Message/UserFeedback/UserFeedback.js +50 -0
  220. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  221. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +141 -0
  222. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  223. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
  224. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  225. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
  226. package/dist/esm/MessageBar/AttachButton.js +4 -2
  227. package/dist/esm/MessageBar/MessageBar.js +9 -12
  228. package/dist/esm/MessageBar/MessageBar.test.js +4 -4
  229. package/dist/esm/MessageBar/SendButton.js +3 -1
  230. package/dist/esm/MessageBar/StopButton.js +3 -1
  231. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  232. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  233. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  234. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  235. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +10 -1
  236. package/dist/esm/ResponseActions/ResponseActionButton.js +25 -2
  237. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  238. package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
  239. package/dist/esm/ResponseActions/ResponseActions.d.ts +12 -2
  240. package/dist/esm/ResponseActions/ResponseActions.js +26 -9
  241. package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
  242. package/dist/esm/Settings/SettingsForm.d.ts +13 -0
  243. package/dist/esm/Settings/SettingsForm.js +20 -0
  244. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  245. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  246. package/dist/esm/Settings/index.d.ts +2 -0
  247. package/dist/esm/Settings/index.js +2 -0
  248. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
  249. package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
  250. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  251. package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
  252. package/dist/esm/TermsOfUse/index.d.ts +2 -0
  253. package/dist/esm/TermsOfUse/index.js +2 -0
  254. package/dist/esm/index.d.ts +6 -0
  255. package/dist/esm/index.js +6 -0
  256. package/dist/tsconfig.tsbuildinfo +1 -1
  257. package/package.json +7 -13
  258. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +5 -2
  259. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +41 -4
  260. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +168 -13
  261. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +4 -0
  262. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
  263. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
  264. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
  265. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +63 -11
  266. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +208 -12
  267. package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
  268. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  269. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  270. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +2 -2
  271. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  272. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  273. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
  274. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
  275. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
  276. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
  277. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
  278. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +49 -6
  279. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
  280. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
  281. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +2 -2
  282. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +20 -19
  283. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -2
  284. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -2
  285. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  286. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
  287. package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
  288. package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
  289. package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -57
  290. package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +5 -5
  291. package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
  292. package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
  293. package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
  294. package/patternfly-docs/content/extensions/chatbot/img/docked.svg +68 -49
  295. package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
  296. package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
  297. package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
  298. package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
  299. package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +85 -142
  300. package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +52 -36
  301. package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
  302. package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
  303. package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
  304. package/src/AttachMenu/AttachMenu.scss +1 -1
  305. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  306. package/src/Chatbot/Chatbot.test.tsx +31 -0
  307. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  308. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  309. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +7 -1
  310. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +8 -1
  311. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +112 -3
  312. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +41 -8
  313. package/src/ChatbotFooter/ChatbotFooter.scss +2 -6
  314. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  315. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  316. package/src/ChatbotHeader/ChatbotHeader.scss +2 -5
  317. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  318. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  319. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  320. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +57 -0
  321. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  322. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  323. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +11 -2
  324. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  325. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
  326. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  327. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +8 -1
  328. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
  329. package/src/ChatbotHeader/index.ts +1 -0
  330. package/src/ChatbotModal/ChatbotModal.scss +1 -1
  331. package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
  332. package/src/CodeModal/CodeModal.scss +9 -1
  333. package/src/CodeModal/CodeModal.tsx +2 -13
  334. package/src/Compare/Compare.scss +72 -0
  335. package/src/Compare/Compare.test.tsx +31 -0
  336. package/src/Compare/Compare.tsx +98 -0
  337. package/src/Compare/index.ts +2 -0
  338. package/src/FileDetails/FileDetails.scss +1 -1
  339. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
  340. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
  341. package/src/Message/ListMessage/ListMessage.scss +5 -5
  342. package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
  343. package/src/Message/Message.scss +4 -26
  344. package/src/Message/Message.test.tsx +215 -3
  345. package/src/Message/Message.tsx +94 -23
  346. package/src/Message/MessageLoading.scss +2 -2
  347. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  348. package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
  349. package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
  350. package/src/Message/QuickStarts/QuickStartTile.scss +24 -0
  351. package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
  352. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
  353. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
  354. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
  355. package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
  356. package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
  357. package/src/Message/QuickStarts/types.ts +154 -0
  358. package/src/Message/TableMessage/TableMessage.scss +23 -0
  359. package/src/Message/TableMessage/TableMessage.tsx +83 -0
  360. package/src/Message/TableMessage/TbodyMessage.tsx +20 -0
  361. package/src/Message/TableMessage/TdMessage.tsx +11 -0
  362. package/src/Message/TableMessage/ThMessage.tsx +11 -0
  363. package/src/Message/TableMessage/TheadMessage.tsx +11 -0
  364. package/src/Message/TableMessage/TrMessage.tsx +27 -0
  365. package/src/Message/TextMessage/TextMessage.scss +13 -11
  366. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  367. package/src/Message/UserFeedback/CloseButton.tsx +21 -0
  368. package/src/Message/UserFeedback/UserFeedback.scss +53 -0
  369. package/src/Message/UserFeedback/UserFeedback.test.tsx +257 -0
  370. package/src/Message/UserFeedback/UserFeedback.tsx +132 -0
  371. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
  372. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
  373. package/src/MessageBar/AttachButton.scss +19 -3
  374. package/src/MessageBar/AttachButton.tsx +3 -1
  375. package/src/MessageBar/MessageBar.scss +3 -2
  376. package/src/MessageBar/MessageBar.test.tsx +4 -4
  377. package/src/MessageBar/MessageBar.tsx +9 -12
  378. package/src/MessageBar/MicrophoneButton.scss +8 -8
  379. package/src/MessageBar/SendButton.tsx +2 -0
  380. package/src/MessageBar/StopButton.scss +17 -3
  381. package/src/MessageBar/StopButton.tsx +2 -0
  382. package/src/MessageBox/JumpButton.scss +6 -6
  383. package/src/MessageBox/MessageBox.test.tsx +26 -0
  384. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  385. package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
  386. package/src/ResponseActions/ResponseActionButton.tsx +59 -28
  387. package/src/ResponseActions/ResponseActions.scss +11 -9
  388. package/src/ResponseActions/ResponseActions.test.tsx +103 -5
  389. package/src/ResponseActions/ResponseActions.tsx +80 -9
  390. package/src/Settings/Settings.scss +34 -0
  391. package/src/Settings/SettingsForm.test.tsx +28 -0
  392. package/src/Settings/SettingsForm.tsx +25 -0
  393. package/src/Settings/index.ts +3 -0
  394. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +1 -1
  395. package/src/SourcesCard/SourcesCard.scss +2 -2
  396. package/src/TermsOfUse/TermsOfUse.scss +66 -0
  397. package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
  398. package/src/TermsOfUse/TermsOfUse.tsx +117 -0
  399. package/src/TermsOfUse/index.ts +3 -0
  400. package/src/index.ts +9 -0
  401. package/src/main.scss +7 -4
@@ -0,0 +1,83 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Table, TableProps } from '@patternfly/react-table';
8
+
9
+ interface Properties {
10
+ line: number;
11
+ column: number;
12
+ offset: number;
13
+ }
14
+ export interface TableNode {
15
+ children?: TableNode[];
16
+ value?: string;
17
+ position: { start: Properties; end: Properties };
18
+ tagName: string;
19
+ type: string;
20
+ }
21
+
22
+ const TableMessage = ({ children, ...props }: TableProps & ExtraProps) => {
23
+ const { className, ...rest } = props;
24
+
25
+ // This allows us to parse the nested data we get back from the 3rd party Markdown parser
26
+ // Open to feedback here if there is a better way to do this
27
+ // This looks for ths and spits them all out so we can filter them later, looking for text values
28
+ const findHeaders = (array?: TableNode[]) => {
29
+ const headers: TableNode[] = [];
30
+ if (!array) {
31
+ return headers;
32
+ }
33
+ const traverse = (items: TableNode[]) => {
34
+ for (const item of items) {
35
+ if (item.tagName === 'th') {
36
+ headers.push(item);
37
+ }
38
+ if (item.children) {
39
+ traverse(item.children);
40
+ }
41
+ }
42
+ };
43
+
44
+ traverse(array);
45
+ return headers;
46
+ };
47
+
48
+ const headers = findHeaders(rest.node?.children as TableNode[] | undefined);
49
+ const headerTextValues = headers.map((header) => header?.children?.filter((c) => c?.type === 'text')[0]?.value);
50
+
51
+ // We are sending these header text values down to child tds by passing them through children, since mobile view for tables expects a dataLabel prop
52
+ // The data structure does not otherwise know this information at that level
53
+ // This is somewhat opinionated and may break if 3rd party library changes
54
+ // See Tr and Tbody for other usage
55
+ const modifyChildren = (children) =>
56
+ React.Children.map(children, (child) => {
57
+ if (child && headerTextValues?.length > 0) {
58
+ return React.cloneElement(child, { extraHeaders: headerTextValues });
59
+ }
60
+ return child;
61
+ });
62
+
63
+ if (!props['aria-label']) {
64
+ // eslint-disable-next-line no-console
65
+ console.warn(
66
+ 'For accessibility reasons an aria-label should be specified for the Table via the <Message /> tableProps prop'
67
+ );
68
+ }
69
+
70
+ return (
71
+ // gridBreakPoint is so we show mobile-styled-PF table
72
+ <Table
73
+ aria-label={props['aria-label']}
74
+ gridBreakPoint="grid"
75
+ className={`pf-chatbot__message-table ${className ? className : ''}`}
76
+ {...rest}
77
+ >
78
+ {modifyChildren(children)}
79
+ </Table>
80
+ );
81
+ };
82
+
83
+ export default TableMessage;
@@ -0,0 +1,20 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Tbody, TbodyProps } from '@patternfly/react-table';
8
+
9
+ const TbodyProps = ({ children, ...props }: TbodyProps & ExtraProps & { extraHeaders?: string[] }) => {
10
+ // passthrough so we can place dataLabel on tds
11
+ const modifyChildren = (children) => {
12
+ if (children && props.extraHeaders) {
13
+ return React.Children.map(children, (child) => React.cloneElement(child, { extraHeaders: props.extraHeaders }));
14
+ }
15
+ return children;
16
+ };
17
+
18
+ return <Tbody {...props}>{modifyChildren(children)}</Tbody>;
19
+ };
20
+ export default TbodyProps;
@@ -0,0 +1,11 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Td, TdProps } from '@patternfly/react-table';
8
+
9
+ const TdMessage = ({ children, ...props }: TdProps & ExtraProps) => <Td {...props}>{children}</Td>;
10
+
11
+ export default TdMessage;
@@ -0,0 +1,11 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Th, ThProps } from '@patternfly/react-table';
8
+
9
+ const ThMessage = ({ children, ...props }: ThProps & ExtraProps) => <Th {...props}>{children}</Th>;
10
+
11
+ export default ThMessage;
@@ -0,0 +1,11 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Thead, TheadProps } from '@patternfly/react-table';
8
+
9
+ const TheadMessage = ({ children, ...props }: TheadProps & ExtraProps) => <Thead {...props}>{children}</Thead>;
10
+
11
+ export default TheadMessage;
@@ -0,0 +1,27 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Table
3
+ // ============================================================================
4
+
5
+ import React from 'react';
6
+ import { ExtraProps } from 'react-markdown';
7
+ import { Tr, TrProps } from '@patternfly/react-table';
8
+
9
+ const TrMessage = ({ children, ...props }: TrProps & ExtraProps & { extraHeaders?: string[] }) => {
10
+ let tdIndex = 0;
11
+
12
+ // passthrough so we can place dataLabel on tds
13
+ // places column name on correct child
14
+ const modifyChildren = (children) =>
15
+ React.Children.map(children, (child) => {
16
+ if (child.type.name === 'td' && props.extraHeaders) {
17
+ const clonedChild = React.cloneElement(child, { dataLabel: props.extraHeaders[tdIndex] });
18
+ tdIndex = tdIndex + 1;
19
+ return clonedChild;
20
+ }
21
+ return child;
22
+ });
23
+
24
+ return <Tr {...props}>{modifyChildren(children)}</Tr>;
25
+ };
26
+
27
+ export default TrMessage;
@@ -10,11 +10,16 @@
10
10
  }
11
11
  }
12
12
 
13
+ // make it full width when there's a table, so the table can grow as needed
14
+ .pf-chatbot__message-and-actions:has(.pf-chatbot__message-table) {
15
+ width: 100%;
16
+ }
17
+
13
18
  // Need to inline shorter text
14
19
  .pf-chatbot__message-text {
15
20
  width: fit-content;
16
- padding: var(--pf-t--chatbot-message--type--padding) 0 var(--pf-t--chatbot-message--type--padding) 0;
17
- border-radius: var(--pf-t--chatbot-message--type--border--radius);
21
+ padding: var(--pf-t--global--spacer--sm) 0 var(--pf-t--global--spacer--sm) 0;
22
+ border-radius: var(--pf-t--global--border--radius--small);
18
23
 
19
24
  .pf-v6-c-content,
20
25
  .pf-v6-c-content--small,
@@ -25,27 +30,24 @@
25
30
  }
26
31
 
27
32
  code {
28
- background-color: var(--pf-t--chatbot-message--type--background--color--default);
33
+ background-color: var(--pf-t--global--background--color--tertiary--default);
29
34
  font-size: var(--pf-t--global--font--size--body--default);
30
35
  }
31
36
  }
32
37
 
33
38
  .pf-chatbot__message--user {
34
39
  .pf-chatbot__message-text {
35
- background-color: var(--pf-t--chatbot-message--type--background--color--primary);
36
- color: var(--pf-t--chatbot-message--type--text--color--primary);
37
- padding: var(--pf-t--chatbot-message--type--padding);
40
+ background-color: var(--pf-t--global--color--brand--default);
41
+ color: var(--pf-t--global--text--color--on-brand--default);
42
+ --pf-v6-c-content--Color: var(--pf-t--global--text--color--on-brand--default);
43
+ padding: var(--pf-t--global--spacer--sm);
38
44
 
39
45
  .pf-v6-c-content,
40
46
  .pf-v6-c-content--small,
41
47
  .pf-v6-c-content--blockquote,
42
48
  p,
43
49
  a {
44
- color: var(--pf-t--chatbot-message--type--text--color--primary);
45
- }
46
-
47
- code {
48
- background-color: initial;
50
+ color: var(--pf-t--global--text--color--on-brand--default);
49
51
  }
50
52
  }
51
53
  }
@@ -4,11 +4,11 @@
4
4
 
5
5
  import React from 'react';
6
6
  import { ExtraProps } from 'react-markdown';
7
- import { Content, ContentVariants } from '@patternfly/react-core';
7
+ import { Content, ContentProps } from '@patternfly/react-core';
8
8
 
9
- const TextMessage = ({ children, ...props }: JSX.IntrinsicElements['p'] & ExtraProps) => (
9
+ const TextMessage = ({ component, children, ...props }: ContentProps & ExtraProps) => (
10
10
  <span className="pf-chatbot__message-text">
11
- <Content component={ContentVariants.p} {...props}>
11
+ <Content component={component} {...props}>
12
12
  {children}
13
13
  </Content>
14
14
  </span>
@@ -0,0 +1,21 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Messages - Close Button
3
+ // ============================================================================
4
+ import React from 'react';
5
+
6
+ // Import PatternFly components
7
+ import { Button, ButtonProps } from '@patternfly/react-core';
8
+ import { CloseIcon } from '@patternfly/react-icons';
9
+
10
+ export interface CloseButtonProps extends ButtonProps {
11
+ /** Callback function for when close button is clicked */
12
+ onClose?: () => void;
13
+ /** Aria-label for button */
14
+ ariaLabel?: string;
15
+ }
16
+
17
+ const CloseButton: React.FunctionComponent<CloseButtonProps> = ({ onClose, ariaLabel }: CloseButtonProps) => (
18
+ <Button variant="plain" onClick={onClose} icon={<CloseIcon />} aria-label={ariaLabel} />
19
+ );
20
+
21
+ export default CloseButton;
@@ -0,0 +1,53 @@
1
+ // shared
2
+ .pf-chatbot__feedback-card {
3
+ box-shadow: var(--pf-t--global--box-shadow--sm);
4
+ --pf-v6-c-card--BorderWidth: 0;
5
+ max-width: 27.5rem; // fixme address mobile vs desktop
6
+ }
7
+
8
+ // complete card
9
+ .pf-chatbot__feedback-complete-body {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: var(--pf-t--global--spacer--lg);
13
+ align-items: center;
14
+ }
15
+ .pf-chatbot__feedback-complete-text {
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex-direction: column;
20
+ gap: var(--pf-t--global--spacer--sm);
21
+ --pf-v6-c-card--first-child--PaddingBlockStart: 0;
22
+ --pf-v6-c-card__title--not--last-child--PaddingBlockEnd: 0;
23
+ }
24
+ .pf-chatbot__feedback-complete-image {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ }
29
+ .pf-chatbot__feedback-complete-body {
30
+ text-align: center;
31
+ }
32
+ .pf-chatbot__feedback-complete-title {
33
+ font-family: var(--pf-t--global--font--family--heading);
34
+ font-size: var(--pf-t--global--font--size--lg);
35
+ font-weight: var(--pf-t--global--font--weight--body--bold);
36
+ line-height: var(--pf-t--global--font--line-height--heading);
37
+ }
38
+
39
+ // feedback card
40
+ .pf-chatbot__feedback-card-title {
41
+ font-family: var(--pf-t--global--font--family--heading);
42
+ font-size: var(--pf-t--global--font--size--md);
43
+ font-weight: var(--pf-t--global--font--weight--body--bold);
44
+ line-height: var(--pf-t--global--font--line-height--heading);
45
+ }
46
+
47
+ .pf-chatbot__feedback-card-form {
48
+ --pf-v6-c-form__group--m-action--MarginBlockStart: 0;
49
+ }
50
+
51
+ .pf-chatbot__feedback-card-optional {
52
+ font-weight: initial;
53
+ }
@@ -0,0 +1,257 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import userEvent from '@testing-library/user-event';
5
+ import UserFeedback from './UserFeedback';
6
+
7
+ const MOCK_RESPONSES = [
8
+ { id: '1', content: 'Helpful information', onClick: () => alert('Clicked helpful information') },
9
+ { id: '2', content: 'Easy to understand', onClick: () => alert('Clicked easy to understand') },
10
+ { id: '3', content: 'Resolved my issue', onClick: () => alert('Clicked resolved my issue') }
11
+ ];
12
+
13
+ describe('UserFeedback', () => {
14
+ it('should render correctly', () => {
15
+ render(<UserFeedback onClose={jest.fn} onSubmit={jest.fn} quickResponses={MOCK_RESPONSES} timestamp="12/12/12" />);
16
+ expect(screen.getByRole('heading', { name: /Why did you choose this rating?/i })).toBeTruthy();
17
+ expect(screen.getByRole('list', { name: 'Quick feedback for message received at 12/12/12' })).toBeTruthy();
18
+ expect(screen.getByRole('button', { name: /Helpful information/i })).toBeTruthy();
19
+ expect(screen.getByRole('button', { name: /Easy to understand/i })).toBeTruthy();
20
+ expect(screen.getByRole('button', { name: /Resolved my issue/i })).toBeTruthy();
21
+ expect(screen.getByRole('button', { name: /Submit/i })).toBeTruthy();
22
+ expect(screen.getByRole('button', { name: 'Close feedback for message received at 12/12/12' })).toBeTruthy();
23
+ expect(screen.getByRole('button', { name: /Cancel/i })).toBeTruthy();
24
+ expect(screen.queryByRole('textbox', { name: /Provide optional additional feedback/i })).toBeFalsy();
25
+ });
26
+ it('should render different title correctly', () => {
27
+ render(
28
+ <UserFeedback
29
+ timestamp="12/12/12"
30
+ onClose={jest.fn}
31
+ onSubmit={jest.fn}
32
+ quickResponses={MOCK_RESPONSES}
33
+ title="Thanks! Why?"
34
+ />
35
+ );
36
+ expect(screen.getByText('Thanks! Why?')).toBeTruthy();
37
+ });
38
+ it('should render different submit button text correctly', () => {
39
+ render(
40
+ <UserFeedback
41
+ timestamp="12/12/12"
42
+ onClose={jest.fn}
43
+ onSubmit={jest.fn}
44
+ quickResponses={MOCK_RESPONSES}
45
+ submitWord="Give feedback"
46
+ />
47
+ );
48
+ expect(screen.getByRole('button', { name: /Give feedback/i })).toBeTruthy();
49
+ });
50
+ it('should render text area correctly', () => {
51
+ render(
52
+ <UserFeedback
53
+ timestamp="12/12/12"
54
+ onClose={jest.fn}
55
+ onSubmit={jest.fn}
56
+ quickResponses={MOCK_RESPONSES}
57
+ hasTextArea
58
+ />
59
+ );
60
+ expect(screen.getByRole('textbox', { name: /Provide optional additional feedback/i })).toBeTruthy();
61
+ });
62
+ it('should call onTextAreaChange correctly', async () => {
63
+ const spy = jest.fn();
64
+ render(
65
+ <UserFeedback
66
+ timestamp="12/12/12"
67
+ onClose={jest.fn}
68
+ onSubmit={jest.fn}
69
+ quickResponses={MOCK_RESPONSES}
70
+ hasTextArea
71
+ onTextAreaChange={spy}
72
+ />
73
+ );
74
+ const textbox = screen.getByRole('textbox', { name: /Provide optional additional feedback/i });
75
+ await userEvent.type(textbox, 'test');
76
+ expect(spy).toHaveBeenCalledTimes(4);
77
+ });
78
+ it('should render different placeholder correctly', () => {
79
+ render(
80
+ <UserFeedback
81
+ timestamp="12/12/12"
82
+ onClose={jest.fn}
83
+ onSubmit={jest.fn}
84
+ quickResponses={MOCK_RESPONSES}
85
+ hasTextArea
86
+ textAreaPlaceholder="Provide any other information"
87
+ />
88
+ );
89
+ expect(screen.getByRole('textbox', { name: /Provide optional additional feedback/i })).toHaveAttribute(
90
+ 'placeholder',
91
+ 'Provide any other information'
92
+ );
93
+ });
94
+ it('should render different text area label correctly', () => {
95
+ render(
96
+ <UserFeedback
97
+ timestamp="12/12/12"
98
+ onClose={jest.fn}
99
+ onSubmit={jest.fn}
100
+ quickResponses={MOCK_RESPONSES}
101
+ hasTextArea
102
+ textAreaAriaLabel="Provide more details"
103
+ />
104
+ );
105
+ expect(screen.getByRole('textbox', { name: /Provide more details/i })).toBeTruthy();
106
+ });
107
+ it('should handle onClose correctly when close button is clicked', async () => {
108
+ const spy = jest.fn();
109
+ render(<UserFeedback onSubmit={jest.fn} quickResponses={MOCK_RESPONSES} onClose={spy} timestamp="12/12/12" />);
110
+ const closeButton = screen.getByRole('button', { name: 'Close feedback for message received at 12/12/12' });
111
+ expect(closeButton).toBeTruthy();
112
+ await userEvent.click(closeButton);
113
+ expect(spy).toHaveBeenCalledTimes(1);
114
+ });
115
+ it('should be able to change close button aria label', () => {
116
+ const spy = jest.fn();
117
+ render(
118
+ <UserFeedback
119
+ timestamp="12/12/12"
120
+ onSubmit={jest.fn}
121
+ quickResponses={MOCK_RESPONSES}
122
+ onClose={spy}
123
+ closeButtonAriaLabel="Ima button"
124
+ />
125
+ );
126
+ expect(screen.getByRole('button', { name: /Ima button/i })).toBeTruthy();
127
+ });
128
+ it('should handle onClose correctly when cancel button is clicked', async () => {
129
+ const spy = jest.fn();
130
+ render(<UserFeedback onSubmit={jest.fn} quickResponses={MOCK_RESPONSES} onClose={spy} timestamp="12/12/12" />);
131
+ const cancelButton = screen.getByRole('button', { name: 'Cancel' });
132
+ expect(cancelButton).toBeTruthy();
133
+ await userEvent.click(cancelButton);
134
+ expect(spy).toHaveBeenCalledTimes(1);
135
+ });
136
+ it('should change cancel word correctly', () => {
137
+ render(
138
+ <UserFeedback
139
+ onSubmit={jest.fn}
140
+ quickResponses={MOCK_RESPONSES}
141
+ onClose={jest.fn}
142
+ cancelWord="Exit"
143
+ timestamp="12/12/12"
144
+ />
145
+ );
146
+ expect(screen.getByRole('button', { name: 'Exit' })).toBeTruthy();
147
+ });
148
+ it('should handle className', async () => {
149
+ render(
150
+ <UserFeedback
151
+ timestamp="12/12/12"
152
+ onClose={jest.fn}
153
+ onSubmit={jest.fn}
154
+ quickResponses={MOCK_RESPONSES}
155
+ className="test"
156
+ data-testid="card"
157
+ />
158
+ );
159
+ expect(screen.getByTestId('card')).toHaveClass('test');
160
+ });
161
+ it('should apply id', async () => {
162
+ render(
163
+ <UserFeedback
164
+ timestamp="12/12/12"
165
+ onClose={jest.fn}
166
+ onSubmit={jest.fn}
167
+ quickResponses={MOCK_RESPONSES}
168
+ id="test"
169
+ data-testid="card"
170
+ />
171
+ );
172
+ expect(screen.getByTestId('card').parentElement).toHaveAttribute('id', 'test');
173
+ });
174
+ it('should handle submit correctly when nothing is selected', async () => {
175
+ const spy = jest.fn();
176
+ render(<UserFeedback timestamp="12/12/12" onClose={jest.fn} onSubmit={spy} quickResponses={MOCK_RESPONSES} />);
177
+ await userEvent.click(screen.getByRole('button', { name: /Submit/i }));
178
+ expect(spy).toHaveBeenCalledTimes(1);
179
+ expect(spy).toHaveBeenCalledWith(undefined, '');
180
+ });
181
+ it('should handle submit correctly when item is selected', async () => {
182
+ const spy = jest.fn();
183
+ render(<UserFeedback timestamp="12/12/12" onClose={jest.fn} onSubmit={spy} quickResponses={MOCK_RESPONSES} />);
184
+ await userEvent.click(screen.getByRole('button', { name: /Easy to understand/i }));
185
+ await userEvent.click(screen.getByRole('button', { name: /Submit/i }));
186
+ expect(spy).toHaveBeenCalledTimes(1);
187
+ expect(spy).toHaveBeenCalledWith('2', '');
188
+ });
189
+ it('should handle submit correctly when there is just text input', async () => {
190
+ const spy = jest.fn();
191
+ render(
192
+ <UserFeedback timestamp="12/12/12" onClose={jest.fn} onSubmit={spy} quickResponses={MOCK_RESPONSES} hasTextArea />
193
+ );
194
+ await userEvent.type(
195
+ screen.getByRole('textbox', { name: /Provide optional additional feedback/i }),
196
+ 'What a great experience!'
197
+ );
198
+ await userEvent.click(screen.getByRole('button', { name: /Submit/i }));
199
+ expect(spy).toHaveBeenCalledTimes(1);
200
+ expect(spy).toHaveBeenCalledWith(undefined, 'What a great experience!');
201
+ });
202
+ it('should handle submit correctly when item is selected and there is text input', async () => {
203
+ const spy = jest.fn();
204
+ render(
205
+ <UserFeedback timestamp="12/12/12" onClose={jest.fn} onSubmit={spy} quickResponses={MOCK_RESPONSES} hasTextArea />
206
+ );
207
+ await userEvent.click(screen.getByRole('button', { name: /Easy to understand/i }));
208
+ await userEvent.type(
209
+ screen.getByRole('textbox', { name: /Provide optional additional feedback/i }),
210
+ 'What a great experience!'
211
+ );
212
+ await userEvent.click(screen.getByRole('button', { name: /Submit/i }));
213
+ expect(spy).toHaveBeenCalledTimes(1);
214
+ expect(spy).toHaveBeenCalledWith('2', 'What a great experience!');
215
+ });
216
+ it('should default title heading level to h1', () => {
217
+ render(<UserFeedback timestamp="12/12/12" onClose={jest.fn} onSubmit={jest.fn} quickResponses={MOCK_RESPONSES} />);
218
+ expect(screen.getByRole('heading', { level: 1, name: /Why did you choose this rating?/i })).toBeTruthy();
219
+ });
220
+ it('should be able to change title heading level', () => {
221
+ render(
222
+ <UserFeedback
223
+ timestamp="12/12/12"
224
+ onClose={jest.fn}
225
+ onSubmit={jest.fn}
226
+ quickResponses={MOCK_RESPONSES}
227
+ headingLevel="h6"
228
+ />
229
+ );
230
+ expect(screen.getByRole('heading', { level: 6, name: /Why did you choose this rating?/i })).toBeTruthy();
231
+ });
232
+ it('should focus on load by default', () => {
233
+ render(
234
+ <UserFeedback
235
+ timestamp="12/12/12"
236
+ onClose={jest.fn}
237
+ onSubmit={jest.fn}
238
+ quickResponses={MOCK_RESPONSES}
239
+ data-testid="card"
240
+ />
241
+ );
242
+ expect(screen.getByTestId('card').parentElement).toHaveFocus();
243
+ });
244
+ it('should not focus on load if focusOnLoad = false', () => {
245
+ render(
246
+ <UserFeedback
247
+ timestamp="12/12/12"
248
+ onClose={jest.fn}
249
+ onSubmit={jest.fn}
250
+ quickResponses={MOCK_RESPONSES}
251
+ data-testid="card"
252
+ focusOnLoad={false}
253
+ />
254
+ );
255
+ expect(screen.getByTestId('card').parentElement).not.toHaveFocus();
256
+ });
257
+ });