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

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 (370) 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 +28 -7
  52. package/dist/cjs/Message/Message.js +29 -14
  53. package/dist/cjs/Message/Message.test.js +89 -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/TextMessage/TextMessage.d.ts +2 -1
  73. package/dist/cjs/Message/TextMessage/TextMessage.js +2 -2
  74. package/dist/cjs/Message/UserFeedback/CloseButton.d.ts +10 -0
  75. package/dist/cjs/Message/UserFeedback/CloseButton.js +14 -0
  76. package/dist/cjs/Message/UserFeedback/UserFeedback.d.ts +39 -0
  77. package/dist/cjs/Message/UserFeedback/UserFeedback.js +55 -0
  78. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  79. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +146 -0
  80. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  81. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +117 -0
  82. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  83. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +249 -0
  84. package/dist/cjs/MessageBar/AttachButton.js +4 -2
  85. package/dist/cjs/MessageBar/MessageBar.js +9 -12
  86. package/dist/cjs/MessageBar/MessageBar.test.js +4 -4
  87. package/dist/cjs/MessageBar/SendButton.js +3 -1
  88. package/dist/cjs/MessageBar/StopButton.js +3 -1
  89. package/dist/cjs/MessageBox/MessageBox.test.d.ts +1 -0
  90. package/dist/cjs/MessageBox/MessageBox.test.js +22 -0
  91. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  92. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +28 -0
  93. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +10 -1
  94. package/dist/cjs/ResponseActions/ResponseActionButton.js +28 -5
  95. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  96. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
  97. package/dist/cjs/ResponseActions/ResponseActions.d.ts +12 -2
  98. package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
  99. package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
  100. package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
  101. package/dist/cjs/Settings/SettingsForm.js +27 -0
  102. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -0
  103. package/dist/cjs/Settings/SettingsForm.test.js +26 -0
  104. package/dist/cjs/Settings/index.d.ts +2 -0
  105. package/dist/cjs/Settings/index.js +23 -0
  106. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
  107. package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
  108. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  109. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
  110. package/dist/cjs/TermsOfUse/index.d.ts +2 -0
  111. package/dist/cjs/TermsOfUse/index.js +23 -0
  112. package/dist/cjs/index.d.ts +6 -0
  113. package/dist/cjs/index.js +10 -1
  114. package/dist/css/main.css +372 -102
  115. package/dist/css/main.css.map +1 -1
  116. package/dist/dynamic/Compare/package.json +1 -0
  117. package/dist/dynamic/Settings/package.json +1 -0
  118. package/dist/dynamic/TermsOfUse/package.json +1 -0
  119. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +1 -0
  120. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +47 -0
  121. package/dist/esm/Chatbot/Chatbot.test.d.ts +1 -0
  122. package/dist/esm/Chatbot/Chatbot.test.js +23 -0
  123. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +1 -0
  124. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +22 -0
  125. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +1 -0
  126. package/dist/esm/ChatbotContent/ChatbotContent.test.js +13 -0
  127. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +3 -1
  128. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +17 -1
  129. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -9
  130. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  131. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -0
  132. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +13 -0
  133. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +1 -0
  134. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +82 -0
  135. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +1 -0
  136. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +13 -0
  137. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +1 -0
  138. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +13 -0
  139. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  140. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +10 -0
  141. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -0
  142. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +15 -0
  143. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +1 -0
  144. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +13 -0
  145. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  146. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +4 -2
  147. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -0
  148. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +15 -0
  149. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -1
  150. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -0
  151. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +38 -0
  152. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +3 -1
  153. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -0
  154. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +36 -0
  155. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +1 -0
  156. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +42 -0
  157. package/dist/esm/ChatbotHeader/index.d.ts +1 -0
  158. package/dist/esm/ChatbotHeader/index.js +1 -0
  159. package/dist/esm/ChatbotToggle/ChatbotToggle.js +3 -1
  160. package/dist/esm/CodeModal/CodeModal.js +2 -12
  161. package/dist/esm/Compare/Compare.d.ts +17 -0
  162. package/dist/esm/Compare/Compare.js +43 -0
  163. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  164. package/dist/esm/Compare/Compare.test.js +15 -0
  165. package/dist/esm/Compare/index.d.ts +2 -0
  166. package/dist/esm/Compare/index.js +2 -0
  167. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  168. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
  169. package/dist/esm/Message/Message.d.ts +28 -7
  170. package/dist/esm/Message/Message.js +27 -12
  171. package/dist/esm/Message/Message.test.js +89 -3
  172. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +17 -0
  173. package/dist/esm/Message/QuickResponse/QuickResponse.js +27 -0
  174. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
  175. package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
  176. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  177. package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
  178. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  179. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
  180. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  181. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
  182. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  183. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
  184. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  185. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
  186. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  187. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
  188. package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
  189. package/dist/esm/Message/QuickStarts/types.js +14 -0
  190. package/dist/esm/Message/TextMessage/TextMessage.d.ts +2 -1
  191. package/dist/esm/Message/TextMessage/TextMessage.js +3 -3
  192. package/dist/esm/Message/UserFeedback/CloseButton.d.ts +10 -0
  193. package/dist/esm/Message/UserFeedback/CloseButton.js +9 -0
  194. package/dist/esm/Message/UserFeedback/UserFeedback.d.ts +39 -0
  195. package/dist/esm/Message/UserFeedback/UserFeedback.js +50 -0
  196. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +1 -0
  197. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +141 -0
  198. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.d.ts +42 -0
  199. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +112 -0
  200. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +1 -0
  201. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +244 -0
  202. package/dist/esm/MessageBar/AttachButton.js +4 -2
  203. package/dist/esm/MessageBar/MessageBar.js +9 -12
  204. package/dist/esm/MessageBar/MessageBar.test.js +4 -4
  205. package/dist/esm/MessageBar/SendButton.js +3 -1
  206. package/dist/esm/MessageBar/StopButton.js +3 -1
  207. package/dist/esm/MessageBox/MessageBox.test.d.ts +1 -0
  208. package/dist/esm/MessageBox/MessageBox.test.js +17 -0
  209. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +1 -0
  210. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +23 -0
  211. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +10 -1
  212. package/dist/esm/ResponseActions/ResponseActionButton.js +25 -2
  213. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  214. package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
  215. package/dist/esm/ResponseActions/ResponseActions.d.ts +12 -2
  216. package/dist/esm/ResponseActions/ResponseActions.js +26 -9
  217. package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
  218. package/dist/esm/Settings/SettingsForm.d.ts +13 -0
  219. package/dist/esm/Settings/SettingsForm.js +20 -0
  220. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -0
  221. package/dist/esm/Settings/SettingsForm.test.js +21 -0
  222. package/dist/esm/Settings/index.d.ts +2 -0
  223. package/dist/esm/Settings/index.js +2 -0
  224. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
  225. package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
  226. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  227. package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
  228. package/dist/esm/TermsOfUse/index.d.ts +2 -0
  229. package/dist/esm/TermsOfUse/index.js +2 -0
  230. package/dist/esm/index.d.ts +6 -0
  231. package/dist/esm/index.js +6 -0
  232. package/dist/tsconfig.tsbuildinfo +1 -1
  233. package/package.json +7 -13
  234. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +5 -2
  235. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +41 -4
  236. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +142 -13
  237. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +4 -0
  238. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +71 -0
  239. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedbackTimeout.tsx +27 -0
  240. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
  241. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +63 -11
  242. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +182 -12
  243. package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
  244. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  245. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  246. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +2 -2
  247. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  248. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  249. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +1 -1
  250. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
  251. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
  252. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
  253. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
  254. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +49 -6
  255. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +14 -0
  256. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
  257. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +2 -2
  258. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +20 -19
  259. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -2
  260. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -2
  261. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  262. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +104 -0
  263. package/patternfly-docs/content/extensions/chatbot/img/attached-file.svg +24 -29
  264. package/patternfly-docs/content/extensions/chatbot/img/attachment-menu.svg +4 -4
  265. package/patternfly-docs/content/extensions/chatbot/img/attachment-unsent.svg +30 -57
  266. package/patternfly-docs/content/extensions/chatbot/img/chatbot-elements.svg +5 -5
  267. package/patternfly-docs/content/extensions/chatbot/img/chatbot-quickstarts-tile.svg +58 -0
  268. package/patternfly-docs/content/extensions/chatbot/img/chatbot-settings.svg +83 -0
  269. package/patternfly-docs/content/extensions/chatbot/img/conversation-history.svg +6 -29
  270. package/patternfly-docs/content/extensions/chatbot/img/docked.svg +68 -49
  271. package/patternfly-docs/content/extensions/chatbot/img/footnote.svg +1 -1
  272. package/patternfly-docs/content/extensions/chatbot/img/fullscreen.svg +25 -16
  273. package/patternfly-docs/content/extensions/chatbot/img/listening.svg +1 -1
  274. package/patternfly-docs/content/extensions/chatbot/img/message-bar-elements.svg +3 -3
  275. package/patternfly-docs/content/extensions/chatbot/img/message-elements.svg +85 -142
  276. package/patternfly-docs/content/extensions/chatbot/img/overlay.svg +52 -36
  277. package/patternfly-docs/content/extensions/chatbot/img/settings-menu.svg +122 -0
  278. package/patternfly-docs/content/extensions/chatbot/img/source-tile.svg +62 -0
  279. package/patternfly-docs/content/extensions/chatbot/img/toggle-customizations.svg +12 -0
  280. package/src/AttachMenu/AttachMenu.scss +1 -1
  281. package/src/AttachmentEdit/AttachmentEdit.test.tsx +55 -0
  282. package/src/Chatbot/Chatbot.test.tsx +31 -0
  283. package/src/ChatbotAlert/ChatbotAlert.test.tsx +31 -0
  284. package/src/ChatbotContent/ChatbotContent.test.tsx +15 -0
  285. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +7 -1
  286. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +8 -1
  287. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +112 -3
  288. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +41 -8
  289. package/src/ChatbotFooter/ChatbotFooter.scss +2 -6
  290. package/src/ChatbotFooter/ChatbotFooter.test.tsx +15 -0
  291. package/src/ChatbotFooter/ChatbotFooternote.test.tsx +84 -0
  292. package/src/ChatbotHeader/ChatbotHeader.scss +2 -5
  293. package/src/ChatbotHeader/ChatbotHeader.test.tsx +15 -0
  294. package/src/ChatbotHeader/ChatbotHeaderActions.test.tsx +17 -0
  295. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +20 -0
  296. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +57 -0
  297. package/src/ChatbotHeader/ChatbotHeaderMain.test.tsx +17 -0
  298. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +19 -0
  299. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +11 -2
  300. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +45 -0
  301. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +8 -1
  302. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +43 -0
  303. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +8 -1
  304. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +59 -0
  305. package/src/ChatbotHeader/index.ts +1 -0
  306. package/src/ChatbotModal/ChatbotModal.scss +1 -1
  307. package/src/ChatbotToggle/ChatbotToggle.tsx +6 -1
  308. package/src/CodeModal/CodeModal.scss +9 -1
  309. package/src/CodeModal/CodeModal.tsx +2 -13
  310. package/src/Compare/Compare.scss +72 -0
  311. package/src/Compare/Compare.test.tsx +31 -0
  312. package/src/Compare/Compare.tsx +98 -0
  313. package/src/Compare/index.ts +2 -0
  314. package/src/FileDetails/FileDetails.scss +1 -1
  315. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
  316. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +4 -4
  317. package/src/Message/ListMessage/ListMessage.scss +5 -5
  318. package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
  319. package/src/Message/Message.scss +4 -26
  320. package/src/Message/Message.test.tsx +116 -3
  321. package/src/Message/Message.tsx +72 -22
  322. package/src/Message/MessageLoading.scss +2 -2
  323. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  324. package/src/Message/QuickResponse/QuickResponse.tsx +54 -0
  325. package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
  326. package/src/Message/QuickStarts/QuickStartTile.scss +24 -0
  327. package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
  328. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
  329. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
  330. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
  331. package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
  332. package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
  333. package/src/Message/QuickStarts/types.ts +154 -0
  334. package/src/Message/TextMessage/TextMessage.scss +8 -11
  335. package/src/Message/TextMessage/TextMessage.tsx +3 -3
  336. package/src/Message/UserFeedback/CloseButton.tsx +21 -0
  337. package/src/Message/UserFeedback/UserFeedback.scss +53 -0
  338. package/src/Message/UserFeedback/UserFeedback.test.tsx +257 -0
  339. package/src/Message/UserFeedback/UserFeedback.tsx +132 -0
  340. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +255 -0
  341. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +211 -0
  342. package/src/MessageBar/AttachButton.scss +19 -3
  343. package/src/MessageBar/AttachButton.tsx +3 -1
  344. package/src/MessageBar/MessageBar.scss +3 -2
  345. package/src/MessageBar/MessageBar.test.tsx +4 -4
  346. package/src/MessageBar/MessageBar.tsx +9 -12
  347. package/src/MessageBar/MicrophoneButton.scss +8 -8
  348. package/src/MessageBar/SendButton.tsx +2 -0
  349. package/src/MessageBar/StopButton.scss +17 -3
  350. package/src/MessageBar/StopButton.tsx +2 -0
  351. package/src/MessageBox/JumpButton.scss +6 -6
  352. package/src/MessageBox/MessageBox.test.tsx +26 -0
  353. package/src/PreviewAttachment/PreviewAttachment.test.tsx +51 -0
  354. package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
  355. package/src/ResponseActions/ResponseActionButton.tsx +59 -28
  356. package/src/ResponseActions/ResponseActions.scss +11 -9
  357. package/src/ResponseActions/ResponseActions.test.tsx +103 -5
  358. package/src/ResponseActions/ResponseActions.tsx +80 -9
  359. package/src/Settings/Settings.scss +34 -0
  360. package/src/Settings/SettingsForm.test.tsx +28 -0
  361. package/src/Settings/SettingsForm.tsx +25 -0
  362. package/src/Settings/index.ts +3 -0
  363. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +1 -1
  364. package/src/SourcesCard/SourcesCard.scss +2 -2
  365. package/src/TermsOfUse/TermsOfUse.scss +66 -0
  366. package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
  367. package/src/TermsOfUse/TermsOfUse.tsx +117 -0
  368. package/src/TermsOfUse/index.ts +3 -0
  369. package/src/index.ts +9 -0
  370. package/src/main.scss +6 -4
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const react_1 = __importDefault(require("react"));
16
+ const react_2 = require("@testing-library/react");
17
+ require("@testing-library/jest-dom");
18
+ const user_event_1 = __importDefault(require("@testing-library/user-event"));
19
+ const UserFeedbackComplete_1 = __importDefault(require("./UserFeedbackComplete"));
20
+ describe('UserFeedbackComplete', () => {
21
+ it('should render correctly', () => {
22
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12" }));
23
+ expect(react_2.screen.getByText('Feedback submitted')).toBeTruthy();
24
+ react_2.screen.getByText(/We've received your response. Thank you for sharing your feedback!/i);
25
+ expect(react_2.screen.queryByRole('button', { name: /Close/i })).toBeFalsy();
26
+ });
27
+ it('should render different title correctly', () => {
28
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", title: "Thanks!" }));
29
+ expect(react_2.screen.getByText('Thanks!')).toBeTruthy();
30
+ react_2.screen.getByText(/We've received your response. Thank you for sharing your feedback!/i);
31
+ });
32
+ it('should render different string body correctly', () => {
33
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", body: "Thanks!" }));
34
+ expect(react_2.screen.getByText('Feedback submitted')).toBeTruthy();
35
+ expect(react_2.screen.getByText('Thanks!')).toBeTruthy();
36
+ });
37
+ it('should render different node body correctly', () => {
38
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", body: react_1.default.createElement("div", null, "Thanks!") }));
39
+ expect(react_2.screen.getByText('Feedback submitted')).toBeTruthy();
40
+ expect(react_2.screen.getByText('Thanks!')).toBeTruthy();
41
+ });
42
+ it('should handle onClose correctly', () => __awaiter(void 0, void 0, void 0, function* () {
43
+ const spy = jest.fn();
44
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", onClose: spy }));
45
+ const closeButton = react_2.screen.getByRole('button', { name: 'Close feedback for message received at 12/12/12' });
46
+ expect(closeButton).toBeTruthy();
47
+ yield user_event_1.default.click(closeButton);
48
+ expect(spy).toHaveBeenCalledTimes(1);
49
+ }));
50
+ it('should be able to change close button aria label', () => {
51
+ const spy = jest.fn();
52
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", onClose: spy, closeButtonAriaLabel: "Ima button" }));
53
+ expect(react_2.screen.getByRole('button', { name: /Ima button/i })).toBeTruthy();
54
+ });
55
+ it('should handle className', () => __awaiter(void 0, void 0, void 0, function* () {
56
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", className: "test", "data-testid": "card" }));
57
+ expect(react_2.screen.getByTestId('card')).toHaveClass('test');
58
+ }));
59
+ it('should apply id', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", id: "test", "data-testid": "card" }));
61
+ expect(react_2.screen.getByTestId('card').parentElement).toHaveAttribute('id', 'test');
62
+ }));
63
+ it('renders with no timeout by default', () => {
64
+ jest.useFakeTimers();
65
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12" }));
66
+ (0, react_2.act)(() => {
67
+ jest.advanceTimersByTime(8000);
68
+ });
69
+ expect(react_2.screen.getByText('Feedback submitted')).toBeVisible();
70
+ jest.useRealTimers();
71
+ });
72
+ it('should handle timeout correctly after 8000ms when timeout = true', () => __awaiter(void 0, void 0, void 0, function* () {
73
+ jest.useFakeTimers();
74
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true }));
75
+ (0, react_2.act)(() => {
76
+ jest.advanceTimersByTime(7999);
77
+ });
78
+ expect(react_2.screen.getByText('Feedback submitted')).toBeVisible();
79
+ (0, react_2.act)(() => {
80
+ jest.advanceTimersByTime(1);
81
+ });
82
+ expect(react_2.screen.queryByText('Feedback submitted')).not.toBeInTheDocument();
83
+ jest.useRealTimers();
84
+ }));
85
+ it('should handle timeout correctly when timeout = numeric value', () => __awaiter(void 0, void 0, void 0, function* () {
86
+ jest.useFakeTimers();
87
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: 300 }));
88
+ (0, react_2.act)(() => {
89
+ jest.advanceTimersByTime(299);
90
+ });
91
+ expect(react_2.screen.getByText('Feedback submitted')).toBeVisible();
92
+ (0, react_2.act)(() => {
93
+ jest.advanceTimersByTime(1);
94
+ });
95
+ expect(react_2.screen.queryByText('Feedback submitted')).not.toBeInTheDocument();
96
+ jest.useRealTimers();
97
+ }));
98
+ it('does not get removed on timeout if the user is focused on the card', () => __awaiter(void 0, void 0, void 0, function* () {
99
+ const user = user_event_1.default.setup({
100
+ advanceTimers: (delay) => jest.advanceTimersByTime(delay)
101
+ });
102
+ jest.useFakeTimers();
103
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card" }));
104
+ expect(react_2.screen.getByText('Feedback submitted')).toBeTruthy();
105
+ yield user.click(react_2.screen.getByTestId('card'));
106
+ (0, react_2.act)(() => {
107
+ jest.advanceTimersByTime(8000);
108
+ });
109
+ expect(react_2.screen.getByText('Feedback submitted')).toBeTruthy();
110
+ jest.useRealTimers();
111
+ }));
112
+ it('does not remove the card on timeout if the user is hovered over it', () => __awaiter(void 0, void 0, void 0, function* () {
113
+ const user = user_event_1.default.setup({
114
+ advanceTimers: (delay) => jest.advanceTimersByTime(delay)
115
+ });
116
+ jest.useFakeTimers();
117
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card" }));
118
+ const card = react_2.screen.getByTestId('card');
119
+ yield user.hover(card);
120
+ (0, react_2.act)(() => {
121
+ jest.advanceTimersByTime(8000);
122
+ });
123
+ expect(card).toBeVisible();
124
+ jest.useRealTimers();
125
+ }));
126
+ it('removes the card after the user removes focus from the card and 3000ms have passed', () => __awaiter(void 0, void 0, void 0, function* () {
127
+ const user = user_event_1.default.setup({
128
+ advanceTimers: (delay) => jest.advanceTimersByTime(delay)
129
+ });
130
+ jest.useFakeTimers();
131
+ (0, react_2.render)(react_1.default.createElement("div", null,
132
+ react_1.default.createElement("input", null),
133
+ react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card" })));
134
+ const card = react_2.screen.getByTestId('card');
135
+ yield user.click(card);
136
+ (0, react_2.act)(() => {
137
+ jest.advanceTimersByTime(8000);
138
+ });
139
+ yield user.click(react_2.screen.getByRole('textbox'));
140
+ (0, react_2.act)(() => {
141
+ jest.advanceTimersByTime(3000);
142
+ });
143
+ expect(react_2.screen.queryByText('Feedback submitted')).not.toBeInTheDocument();
144
+ jest.useRealTimers();
145
+ }));
146
+ it('removes the card after the user removes hover from the card and 3000ms have passed', () => __awaiter(void 0, void 0, void 0, function* () {
147
+ const user = user_event_1.default.setup({
148
+ advanceTimers: (delay) => jest.advanceTimersByTime(delay)
149
+ });
150
+ jest.useFakeTimers();
151
+ (0, react_2.render)(react_1.default.createElement("div", null,
152
+ react_1.default.createElement("input", null),
153
+ react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card" })));
154
+ const card = react_2.screen.getByTestId('card');
155
+ yield user.hover(card);
156
+ (0, react_2.act)(() => {
157
+ jest.advanceTimersByTime(8000);
158
+ });
159
+ yield user.hover(react_2.screen.getByRole('textbox'));
160
+ (0, react_2.act)(() => {
161
+ jest.advanceTimersByTime(3000);
162
+ });
163
+ expect(react_2.screen.queryByText('Feedback submitted')).not.toBeInTheDocument();
164
+ jest.useRealTimers();
165
+ }));
166
+ it('removes the card after the user removes hover from the card and timeoutAnimation time has passed', () => __awaiter(void 0, void 0, void 0, function* () {
167
+ const user = user_event_1.default.setup({
168
+ advanceTimers: (delay) => jest.advanceTimersByTime(delay)
169
+ });
170
+ jest.useFakeTimers();
171
+ (0, react_2.render)(react_1.default.createElement("div", null,
172
+ react_1.default.createElement("input", null),
173
+ react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card", timeoutAnimation: 1000 })));
174
+ const card = react_2.screen.getByTestId('card');
175
+ yield user.hover(card);
176
+ (0, react_2.act)(() => {
177
+ jest.advanceTimersByTime(8000);
178
+ });
179
+ yield user.hover(react_2.screen.getByRole('textbox'));
180
+ (0, react_2.act)(() => {
181
+ jest.advanceTimersByTime(1000);
182
+ });
183
+ expect(react_2.screen.queryByText('Feedback submitted')).not.toBeInTheDocument();
184
+ jest.useRealTimers();
185
+ }));
186
+ it('does not call the onTimeout callback before the timeout period has expired', () => {
187
+ const spy = jest.fn();
188
+ jest.useFakeTimers();
189
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card", onTimeout: spy }));
190
+ (0, react_2.act)(() => {
191
+ jest.advanceTimersByTime(7999);
192
+ });
193
+ expect(spy).not.toHaveBeenCalled();
194
+ jest.useRealTimers();
195
+ });
196
+ it('calls the onTimeout callback after the timeout period has expired', () => {
197
+ jest.useFakeTimers();
198
+ const spy = jest.fn();
199
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card", onTimeout: spy }));
200
+ (0, react_2.act)(() => {
201
+ jest.advanceTimersByTime(8000);
202
+ });
203
+ expect(spy).toHaveBeenCalledTimes(1);
204
+ jest.useRealTimers();
205
+ });
206
+ it('renders without aria-live and aria-atomic attributes by default', () => {
207
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card" }));
208
+ const card = react_2.screen.getByTestId('card').parentElement;
209
+ expect(card).not.toHaveAttribute('aria-live');
210
+ expect(card).not.toHaveAttribute('aria-atomic');
211
+ });
212
+ it('has an aria-live value of polite and aria-atomic value of false when isLiveRegion = true', () => {
213
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", timeout: true, "data-testid": "card", isLiveRegion: true }));
214
+ const card = react_2.screen.getByTestId('card').parentElement;
215
+ expect(card).toHaveAttribute('aria-live', 'polite');
216
+ expect(card).toHaveAttribute('aria-atomic', 'false');
217
+ });
218
+ it('calls onMouseEnter appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
219
+ const spy = jest.fn();
220
+ const user = user_event_1.default.setup();
221
+ (0, react_2.render)(react_1.default.createElement("div", null,
222
+ react_1.default.createElement("input", null),
223
+ react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", "data-testid": "card", onMouseEnter: spy })));
224
+ const card = react_2.screen.getByTestId('card');
225
+ expect(spy).toHaveBeenCalledTimes(0);
226
+ yield user.hover(card);
227
+ expect(spy).toHaveBeenCalledTimes(1);
228
+ }));
229
+ it('calls onMouseLeave appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
230
+ const spy = jest.fn();
231
+ const user = user_event_1.default.setup();
232
+ (0, react_2.render)(react_1.default.createElement("div", null,
233
+ react_1.default.createElement("input", null),
234
+ react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", "data-testid": "card", onMouseLeave: spy })));
235
+ const card = react_2.screen.getByTestId('card');
236
+ expect(spy).toHaveBeenCalledTimes(0);
237
+ yield user.hover(card);
238
+ yield user.hover(react_2.screen.getByRole('textbox'));
239
+ expect(spy).toHaveBeenCalledTimes(1);
240
+ }));
241
+ it('should focus on load by default', () => {
242
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", "data-testid": "card" }));
243
+ expect(react_2.screen.getByTestId('card').parentElement).toHaveFocus();
244
+ });
245
+ it('should not focus on load if focusOnLoad = false', () => {
246
+ (0, react_2.render)(react_1.default.createElement(UserFeedbackComplete_1.default, { timestamp: "12/12/12", "data-testid": "card", focusOnLoad: false }));
247
+ expect(react_2.screen.getByTestId('card').parentElement).not.toHaveFocus();
248
+ });
249
+ });
@@ -30,8 +30,10 @@ const AttachButtonBase = (_a) => {
30
30
  onDropAccepted: onAttachAccepted
31
31
  });
32
32
  return (react_1.default.createElement(react_1.default.Fragment, null,
33
- react_1.default.createElement("input", Object.assign({ "data-testid": inputTestId }, getInputProps())),
34
- react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--attach", content: tooltipContent, position: "top", entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0 }, tooltipProps),
33
+ react_1.default.createElement("input", Object.assign({ "data-testid": inputTestId }, getInputProps(), { hidden: true })),
34
+ react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--attach", content: tooltipContent, position: "top", entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
35
+ // prevents VO announcements of both aria label and tooltip
36
+ aria: "none" }, tooltipProps),
35
37
  react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", ref: innerRef, className: `pf-chatbot__button--attach ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Attach button', isDisabled: isDisabled, onClick: onClick !== null && onClick !== void 0 ? onClick : open, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: "xl", isInline: true },
36
38
  react_1.default.createElement(paperclip_icon_1.PaperclipIcon, null)) }, props)))));
37
39
  };
@@ -54,17 +54,14 @@ const MessageBar = (_a) => {
54
54
  };
55
55
  // Handle sending message
56
56
  const handleSend = react_1.default.useCallback(() => {
57
- setMessage((m) => {
58
- onSendMessage(m);
59
- setMessage('');
60
- if (textareaRef.current) {
61
- textareaRef.current.innerText = '';
62
- setShowPlaceholder(true);
63
- textareaRef.current.blur();
64
- }
65
- return '';
66
- });
67
- }, [onSendMessage]);
57
+ onSendMessage(message);
58
+ if (textareaRef.current) {
59
+ textareaRef.current.innerText = '';
60
+ setShowPlaceholder(true);
61
+ textareaRef.current.blur();
62
+ }
63
+ setMessage('');
64
+ }, [onSendMessage, message]);
68
65
  const handleKeyDown = react_1.default.useCallback((event) => {
69
66
  if (event.key === 'Enter' && !event.shiftKey) {
70
67
  event.preventDefault();
@@ -72,7 +69,7 @@ const MessageBar = (_a) => {
72
69
  handleSend();
73
70
  }
74
71
  }
75
- }, [handleSend]);
72
+ }, [handleSend, isSendButtonDisabled, handleStopButton]);
76
73
  const handleAttachMenuToggle = () => {
77
74
  (attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.setIsAttachMenuOpen) && (attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.setIsAttachMenuOpen(!(attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.isAttachMenuOpen)));
78
75
  attachMenuProps === null || attachMenuProps === void 0 ? void 0 : attachMenuProps.onAttachMenuToggleClick();
@@ -12,14 +12,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ require("@testing-library/jest-dom");
15
16
  const react_1 = __importDefault(require("react"));
17
+ const react_core_1 = require("@patternfly/react-core");
18
+ const react_icons_1 = require("@patternfly/react-icons");
16
19
  const react_2 = require("@testing-library/react");
17
- require("@testing-library/jest-dom");
18
20
  const user_event_1 = __importDefault(require("@testing-library/user-event"));
19
- const MessageBar_1 = require("./MessageBar");
20
- const react_core_1 = require("@patternfly/react-core");
21
21
  const SourceDetailsMenuItem_1 = __importDefault(require("../SourceDetailsMenuItem"));
22
- const react_icons_1 = require("@patternfly/react-icons");
22
+ const MessageBar_1 = require("./MessageBar");
23
23
  const ATTACH_MENU_ITEMS = [
24
24
  react_1.default.createElement(react_core_1.DropdownList, { key: "list-1" },
25
25
  react_1.default.createElement(react_core_1.DropdownItem, { className: "pf-chatbot-source-details-dropdown-item", value: "auth-operator Pod", id: "0" },
@@ -24,7 +24,9 @@ const react_core_1 = require("@patternfly/react-core");
24
24
  const paper_plane_icon_1 = require("@patternfly/react-icons/dist/esm/icons/paper-plane-icon");
25
25
  const SendButton = (_a) => {
26
26
  var { className, onClick, tooltipProps, tooltipContent = 'Send' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
27
- return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--send", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0 }, tooltipProps),
27
+ return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--send", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
28
+ // prevents VO announcements of both aria label and tooltip
29
+ aria: "none" }, tooltipProps),
28
30
  react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--send ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Send button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: "xl", isInline: true },
29
31
  react_1.default.createElement(paper_plane_icon_1.PaperPlaneIcon, null)) }, props))));
30
32
  };
@@ -23,7 +23,9 @@ const react_1 = __importDefault(require("react"));
23
23
  const react_core_1 = require("@patternfly/react-core");
24
24
  const StopButton = (_a) => {
25
25
  var { className, onClick, tooltipProps, tooltipContent = 'Stop' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
26
- return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--stop", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0 }, tooltipProps),
26
+ return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: "pf-chatbot__tooltip--stop", content: tooltipContent, position: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.position) || 'top', entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
27
+ // prevents VO announcements of both aria label and tooltip
28
+ aria: "none" }, tooltipProps),
27
29
  react_1.default.createElement(react_core_1.Button, Object.assign({ className: `pf-chatbot__button--stop ${className !== null && className !== void 0 ? className : ''}`, variant: "link", "aria-label": props['aria-label'] || 'Stop button', onClick: onClick, icon: react_1.default.createElement(react_core_1.Icon, { iconSize: "xl", isInline: true },
28
30
  react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
29
31
  react_1.default.createElement("path", { d: "M0.5 3C0.5 1.62109 1.62109 0.5 3 0.5H13C14.3789 0.5 15.5 1.62109 15.5 3V13C15.5 14.3789 14.3789 15.5 13 15.5H3C1.62109 15.5 0.5 14.3789 0.5 13V3Z", fill: "currentColor" }))) }, props))));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
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 MessageBox_1 = require("./MessageBox");
9
+ describe('MessageBox', () => {
10
+ it('should render Message box', () => {
11
+ (0, react_2.render)(react_1.default.createElement(MessageBox_1.MessageBox, null,
12
+ react_1.default.createElement(react_1.default.Fragment, null, "Chatbot Messages")));
13
+ expect(react_2.screen.getByText('Chatbot Messages')).toBeTruthy();
14
+ });
15
+ it('should assign ref to Message box', () => {
16
+ const ref = react_1.default.createRef();
17
+ (0, react_2.render)(react_1.default.createElement(MessageBox_1.MessageBox, { ref: ref },
18
+ react_1.default.createElement("div", null, "Test message content")));
19
+ expect(ref.current).not.toBeNull();
20
+ expect(ref.current).toBeInstanceOf(HTMLDivElement);
21
+ });
22
+ });
@@ -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
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const PreviewAttachment_1 = require("./PreviewAttachment");
9
+ describe('PreviewAttachment', () => {
10
+ it('should render PreviewAttachment', () => {
11
+ (0, react_2.render)(react_1.default.createElement(PreviewAttachment_1.PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: jest.fn(), handleModalToggle: jest.fn() }));
12
+ expect(react_2.screen.getByText('Preview attachment')).toBeTruthy();
13
+ expect(react_2.screen.getByText('greetings')).toBeTruthy();
14
+ expect(react_2.screen.getAllByText('TEXT')).toBeTruthy();
15
+ });
16
+ it('should call onEdit handler when edit button is pressed', () => {
17
+ const onEdit = jest.fn();
18
+ (0, react_2.render)(react_1.default.createElement(PreviewAttachment_1.PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: onEdit, handleModalToggle: jest.fn() }));
19
+ react_2.fireEvent.click(react_2.screen.getByText('Edit'));
20
+ expect(onEdit).toHaveBeenCalled();
21
+ });
22
+ it('should call onDismiss handler when dismiss button is pressed', () => {
23
+ const onDismiss = jest.fn();
24
+ (0, react_2.render)(react_1.default.createElement(PreviewAttachment_1.PreviewAttachment, { code: "Hello world", fileName: "greetings.txt", isModalOpen: true, onEdit: jest.fn(), handleModalToggle: onDismiss }));
25
+ react_2.fireEvent.click(react_2.screen.getByText('Dismiss'));
26
+ expect(onDismiss).toHaveBeenCalled();
27
+ });
28
+ });
@@ -3,6 +3,8 @@ import { TooltipProps } from '@patternfly/react-core';
3
3
  export interface ResponseActionButtonProps {
4
4
  /** Aria-label for the button. Defaults to the value of the tooltipContent if none provided */
5
5
  ariaLabel?: string;
6
+ /** Aria-label for the button, shown when the button is clicked. Defaults to the value of ariaLabel or tooltipContent if not provided. */
7
+ clickedAriaLabel?: string;
6
8
  /** Icon for the button */
7
9
  icon: React.ReactNode;
8
10
  /** On-click handler for the button */
@@ -13,8 +15,15 @@ export interface ResponseActionButtonProps {
13
15
  isDisabled?: boolean;
14
16
  /** Content shown in the tooltip */
15
17
  tooltipContent?: string;
18
+ /** Content shown in the tooltip when the button is clicked. Defaults to the value of tooltipContent if not provided. */
19
+ clickedTooltipContent?: string;
16
20
  /** Props to control the PF Tooltip component */
17
21
  tooltipProps?: TooltipProps;
22
+ /** Whether button is in clicked state */
23
+ isClicked?: boolean;
24
+ /** Ref applied to button */
25
+ innerRef?: React.Ref<HTMLButtonElement>;
18
26
  }
19
- export declare const ResponseActionButton: React.FunctionComponent<ResponseActionButtonProps>;
27
+ export declare const ResponseActionButtonBase: React.FunctionComponent<ResponseActionButtonProps>;
28
+ declare const ResponseActionButton: React.ForwardRefExoticComponent<ResponseActionButtonProps & React.RefAttributes<HTMLButtonElement>>;
20
29
  export default ResponseActionButton;
@@ -1,12 +1,35 @@
1
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
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
5
16
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ResponseActionButton = void 0;
17
+ exports.ResponseActionButtonBase = void 0;
7
18
  const react_1 = __importDefault(require("react"));
8
19
  const react_core_1 = require("@patternfly/react-core");
9
- const ResponseActionButton = ({ ariaLabel, className, icon, isDisabled, onClick, tooltipContent, tooltipProps }) => (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: `pf-chatbot__tooltip-response-action-${tooltipContent}`, content: tooltipContent, position: "bottom", entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0 }, tooltipProps),
10
- react_1.default.createElement(react_core_1.Button, { variant: "plain", className: `pf-chatbot__button--response-action ${className !== null && className !== void 0 ? className : ''}`, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : tooltipContent, icon: react_1.default.createElement(react_core_1.Icon, { isInline: true, size: "lg" }, icon), isDisabled: isDisabled, onClick: onClick, size: "sm" })));
11
- exports.ResponseActionButton = ResponseActionButton;
12
- exports.default = exports.ResponseActionButton;
20
+ const ResponseActionButtonBase = (_a) => {
21
+ var { ariaLabel, clickedAriaLabel = ariaLabel, className, icon, isDisabled, onClick, tooltipContent, clickedTooltipContent = tooltipContent, tooltipProps, isClicked = false, innerRef } = _a, props = __rest(_a, ["ariaLabel", "clickedAriaLabel", "className", "icon", "isDisabled", "onClick", "tooltipContent", "clickedTooltipContent", "tooltipProps", "isClicked", "innerRef"]);
22
+ const generateAriaLabel = () => {
23
+ if (ariaLabel) {
24
+ return isClicked ? clickedAriaLabel : ariaLabel;
25
+ }
26
+ return isClicked ? clickedTooltipContent : tooltipContent;
27
+ };
28
+ return (react_1.default.createElement(react_core_1.Tooltip, Object.assign({ id: `pf-chatbot__tooltip-response-action-${tooltipContent}`, content: isClicked ? clickedTooltipContent : tooltipContent, "aria-live": "polite", position: "bottom", entryDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.entryDelay) || 0, exitDelay: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.exitDelay) || 0, distance: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.distance) || 8, animationDuration: (tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.animationDuration) || 0,
29
+ // prevents VO announcements of both aria label and tooltip
30
+ aria: "none" }, tooltipProps),
31
+ react_1.default.createElement(react_core_1.Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--response-action ${isClicked ? 'pf-chatbot__button--response-action-clicked' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": generateAriaLabel(), icon: react_1.default.createElement(react_core_1.Icon, { isInline: true, size: "lg" }, icon), isDisabled: isDisabled, onClick: onClick, size: "sm", ref: innerRef }, props))));
32
+ };
33
+ exports.ResponseActionButtonBase = ResponseActionButtonBase;
34
+ const ResponseActionButton = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(exports.ResponseActionButtonBase, Object.assign({ innerRef: ref }, props))));
35
+ exports.default = ResponseActionButton;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const react_1 = __importDefault(require("react"));
16
+ const react_2 = require("@testing-library/react");
17
+ require("@testing-library/jest-dom");
18
+ const user_event_1 = __importDefault(require("@testing-library/user-event"));
19
+ const react_icons_1 = require("@patternfly/react-icons");
20
+ const ResponseActionButton_1 = __importDefault(require("./ResponseActionButton"));
21
+ describe('ResponseActionButton', () => {
22
+ it('renders aria-label correctly if not clicked', () => {
23
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), ariaLabel: "Download", clickedAriaLabel: "Downloaded" }));
24
+ expect(react_2.screen.getByRole('button', { name: 'Download' })).toBeTruthy();
25
+ });
26
+ it('renders aria-label correctly if clicked', () => {
27
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), ariaLabel: "Download", clickedAriaLabel: "Downloaded", isClicked: true }));
28
+ expect(react_2.screen.getByRole('button', { name: 'Downloaded' })).toBeTruthy();
29
+ });
30
+ it('renders tooltip correctly if not clicked', () => __awaiter(void 0, void 0, void 0, function* () {
31
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), tooltipContent: "Download", clickedTooltipContent: "Downloaded" }));
32
+ expect(react_2.screen.getByRole('button', { name: 'Download' })).toBeTruthy();
33
+ // clicking here just triggers the tooltip; in this button, the logic is divorced from whether it is actually clicked
34
+ yield user_event_1.default.click(react_2.screen.getByRole('button', { name: 'Download' }));
35
+ expect(react_2.screen.getByRole('tooltip', { name: 'Download' })).toBeTruthy();
36
+ }));
37
+ it('renders tooltip correctly if clicked', () => __awaiter(void 0, void 0, void 0, function* () {
38
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), tooltipContent: "Download", clickedTooltipContent: "Downloaded", isClicked: true }));
39
+ expect(react_2.screen.getByRole('button', { name: 'Downloaded' })).toBeTruthy();
40
+ // clicking here just triggers the tooltip; in this button, the logic is divorced from whether it is actually clicked
41
+ yield user_event_1.default.click(react_2.screen.getByRole('button', { name: 'Downloaded' }));
42
+ expect(react_2.screen.getByRole('tooltip', { name: 'Downloaded' })).toBeTruthy();
43
+ }));
44
+ it('if clicked variant for tooltip is not supplied, it uses the default', () => __awaiter(void 0, void 0, void 0, function* () {
45
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), tooltipContent: "Download", isClicked: true }));
46
+ // clicking here just triggers the tooltip; in this button, the logic is divorced from whether it is actually clicked
47
+ yield user_event_1.default.click(react_2.screen.getByRole('button', { name: 'Download' }));
48
+ expect(react_2.screen.getByRole('button', { name: 'Download' })).toBeTruthy();
49
+ }));
50
+ it('if clicked variant for aria label is not supplied, it uses the default', () => __awaiter(void 0, void 0, void 0, function* () {
51
+ (0, react_2.render)(react_1.default.createElement(ResponseActionButton_1.default, { icon: react_1.default.createElement(react_icons_1.DownloadIcon, null), ariaLabel: "Download", isClicked: true }));
52
+ expect(react_2.screen.getByRole('button', { name: 'Download' })).toBeTruthy();
53
+ }));
54
+ });
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
- import { TooltipProps } from '@patternfly/react-core';
3
- export interface ActionProps {
2
+ import { ButtonProps, TooltipProps } from '@patternfly/react-core';
3
+ export interface ActionProps extends Omit<ButtonProps, 'ref'> {
4
4
  /** Aria-label for the button */
5
5
  ariaLabel?: string;
6
+ /** Aria-label for the button, shown when the button is clicked. */
7
+ clickedAriaLabel?: string;
6
8
  /** On-click handler for the button */
7
9
  onClick?: ((event: MouseEvent | React.MouseEvent<Element, MouseEvent> | KeyboardEvent) => void) | undefined;
8
10
  /** Class name for the button */
@@ -11,10 +13,18 @@ export interface ActionProps {
11
13
  isDisabled?: boolean;
12
14
  /** Content shown in the tooltip */
13
15
  tooltipContent?: string;
16
+ /** Content shown in the tooltip when the button is clicked. */
17
+ clickedTooltipContent?: string;
14
18
  /** Props to control the PF Tooltip component */
15
19
  tooltipProps?: TooltipProps;
16
20
  /** Icon for custom response action */
17
21
  icon?: React.ReactNode;
22
+ /** Ref for response action button */
23
+ ref?: React.Ref<HTMLButtonElement>;
24
+ /** Whether content launched by button, such as the feedback form, is expanded */
25
+ 'aria-expanded'?: boolean;
26
+ /** Id for content controlled by the button, such as the feedback form */
27
+ 'aria-controls'?: string;
18
28
  }
19
29
  export interface ResponseActionProps {
20
30
  /** Props for message actions, such as feedback (positive or negative), copy button, share, and listen */