@patternfly/chatbot 2.1.0-prerelease.17

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 (534) hide show
  1. package/@types/index.d.ts +9 -0
  2. package/dist/cjs/AttachMenu/AttachMenu.d.ts +29 -0
  3. package/dist/cjs/AttachMenu/AttachMenu.js +33 -0
  4. package/dist/cjs/AttachMenu/index.d.ts +2 -0
  5. package/dist/cjs/AttachMenu/index.js +23 -0
  6. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +22 -0
  7. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +25 -0
  8. package/dist/cjs/AttachmentEdit/index.d.ts +2 -0
  9. package/dist/cjs/AttachmentEdit/index.js +23 -0
  10. package/dist/cjs/Chatbot/Chatbot.d.ts +23 -0
  11. package/dist/cjs/Chatbot/Chatbot.js +49 -0
  12. package/dist/cjs/Chatbot/index.d.ts +2 -0
  13. package/dist/cjs/Chatbot/index.js +23 -0
  14. package/dist/cjs/ChatbotAlert/ChatbotAlert.d.ts +8 -0
  15. package/dist/cjs/ChatbotAlert/ChatbotAlert.js +28 -0
  16. package/dist/cjs/ChatbotAlert/index.d.ts +2 -0
  17. package/dist/cjs/ChatbotAlert/index.js +23 -0
  18. package/dist/cjs/ChatbotContent/ChatbotContent.d.ts +9 -0
  19. package/dist/cjs/ChatbotContent/ChatbotContent.js +27 -0
  20. package/dist/cjs/ChatbotContent/index.d.ts +2 -0
  21. package/dist/cjs/ChatbotContent/index.js +23 -0
  22. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +14 -0
  23. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +22 -0
  24. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +52 -0
  25. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +83 -0
  26. package/dist/cjs/ChatbotConversationHistoryNav/index.d.ts +3 -0
  27. package/dist/cjs/ChatbotConversationHistoryNav/index.js +24 -0
  28. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +9 -0
  29. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +35 -0
  30. package/dist/cjs/ChatbotFooter/ChatbotFootnote.d.ts +44 -0
  31. package/dist/cjs/ChatbotFooter/ChatbotFootnote.js +56 -0
  32. package/dist/cjs/ChatbotFooter/index.d.ts +3 -0
  33. package/dist/cjs/ChatbotFooter/index.js +24 -0
  34. package/dist/cjs/ChatbotHeader/ChatbotHeader.d.ts +9 -0
  35. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +13 -0
  36. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.d.ts +9 -0
  37. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.js +10 -0
  38. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.d.ts +9 -0
  39. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +10 -0
  40. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +15 -0
  41. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +14 -0
  42. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +14 -0
  43. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +33 -0
  44. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +18 -0
  45. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +33 -0
  46. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +20 -0
  47. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +33 -0
  48. package/dist/cjs/ChatbotHeader/index.d.ts +8 -0
  49. package/dist/cjs/ChatbotHeader/index.js +29 -0
  50. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +10 -0
  51. package/dist/cjs/ChatbotModal/ChatbotModal.js +34 -0
  52. package/dist/cjs/ChatbotModal/index.d.ts +2 -0
  53. package/dist/cjs/ChatbotModal/index.js +23 -0
  54. package/dist/cjs/ChatbotPopover/ChatbotPopover.d.ts +4 -0
  55. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +29 -0
  56. package/dist/cjs/ChatbotPopover/index.d.ts +2 -0
  57. package/dist/cjs/ChatbotPopover/index.js +23 -0
  58. package/dist/cjs/ChatbotToggle/ChatbotToggle.d.ts +20 -0
  59. package/dist/cjs/ChatbotToggle/ChatbotToggle.js +35 -0
  60. package/dist/cjs/ChatbotToggle/index.d.ts +2 -0
  61. package/dist/cjs/ChatbotToggle/index.js +23 -0
  62. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +23 -0
  63. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +40 -0
  64. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +1 -0
  65. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +49 -0
  66. package/dist/cjs/ChatbotWelcomePrompt/index.d.ts +2 -0
  67. package/dist/cjs/ChatbotWelcomePrompt/index.js +23 -0
  68. package/dist/cjs/CodeModal/CodeModal.d.ts +34 -0
  69. package/dist/cjs/CodeModal/CodeModal.js +105 -0
  70. package/dist/cjs/CodeModal/index.d.ts +2 -0
  71. package/dist/cjs/CodeModal/index.js +23 -0
  72. package/dist/cjs/FileDetails/FileDetails.d.ts +922 -0
  73. package/dist/cjs/FileDetails/FileDetails.js +954 -0
  74. package/dist/cjs/FileDetails/FileDetails.test.d.ts +1 -0
  75. package/dist/cjs/FileDetails/FileDetails.test.js +26 -0
  76. package/dist/cjs/FileDetails/index.d.ts +2 -0
  77. package/dist/cjs/FileDetails/index.js +23 -0
  78. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.d.ts +21 -0
  79. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.js +22 -0
  80. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.d.ts +1 -0
  81. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +61 -0
  82. package/dist/cjs/FileDetailsLabel/index.d.ts +2 -0
  83. package/dist/cjs/FileDetailsLabel/index.js +23 -0
  84. package/dist/cjs/FileDropZone/FileDropZone.d.ts +17 -0
  85. package/dist/cjs/FileDropZone/FileDropZone.js +28 -0
  86. package/dist/cjs/FileDropZone/FileDropZone.test.d.ts +1 -0
  87. package/dist/cjs/FileDropZone/FileDropZone.test.js +19 -0
  88. package/dist/cjs/FileDropZone/index.d.ts +2 -0
  89. package/dist/cjs/FileDropZone/index.js +23 -0
  90. package/dist/cjs/LoadingMessage/LoadingMessage.d.ts +6 -0
  91. package/dist/cjs/LoadingMessage/LoadingMessage.js +20 -0
  92. package/dist/cjs/LoadingMessage/LoadingMessage.test.d.ts +1 -0
  93. package/dist/cjs/LoadingMessage/LoadingMessage.test.js +20 -0
  94. package/dist/cjs/LoadingMessage/index.d.ts +2 -0
  95. package/dist/cjs/LoadingMessage/index.js +23 -0
  96. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.d.ts +4 -0
  97. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.js +61 -0
  98. package/dist/cjs/Message/ListMessage/ListItemMessage.d.ts +4 -0
  99. package/dist/cjs/Message/ListMessage/ListItemMessage.js +12 -0
  100. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +4 -0
  101. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +13 -0
  102. package/dist/cjs/Message/ListMessage/UnorderedListMessage.d.ts +4 -0
  103. package/dist/cjs/Message/ListMessage/UnorderedListMessage.js +13 -0
  104. package/dist/cjs/Message/Message.d.ts +65 -0
  105. package/dist/cjs/Message/Message.js +69 -0
  106. package/dist/cjs/Message/Message.test.d.ts +1 -0
  107. package/dist/cjs/Message/Message.test.js +239 -0
  108. package/dist/cjs/Message/MessageLoading.d.ts +5 -0
  109. package/dist/cjs/Message/MessageLoading.js +13 -0
  110. package/dist/cjs/Message/TextMessage/TextMessage.d.ts +4 -0
  111. package/dist/cjs/Message/TextMessage/TextMessage.js +27 -0
  112. package/dist/cjs/Message/index.d.ts +2 -0
  113. package/dist/cjs/Message/index.js +23 -0
  114. package/dist/cjs/MessageBar/AttachButton.d.ts +21 -0
  115. package/dist/cjs/MessageBar/AttachButton.js +38 -0
  116. package/dist/cjs/MessageBar/AttachButton.test.d.ts +1 -0
  117. package/dist/cjs/MessageBar/AttachButton.test.js +66 -0
  118. package/dist/cjs/MessageBar/MessageBar.d.ts +71 -0
  119. package/dist/cjs/MessageBar/MessageBar.js +112 -0
  120. package/dist/cjs/MessageBar/MessageBar.test.d.ts +1 -0
  121. package/dist/cjs/MessageBar/MessageBar.test.js +237 -0
  122. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +21 -0
  123. package/dist/cjs/MessageBar/MicrophoneButton.js +74 -0
  124. package/dist/cjs/MessageBar/SendButton.d.ts +14 -0
  125. package/dist/cjs/MessageBar/SendButton.js +32 -0
  126. package/dist/cjs/MessageBar/SendButton.test.d.ts +1 -0
  127. package/dist/cjs/MessageBar/SendButton.test.js +54 -0
  128. package/dist/cjs/MessageBar/StopButton.d.ts +14 -0
  129. package/dist/cjs/MessageBar/StopButton.js +32 -0
  130. package/dist/cjs/MessageBar/StopButton.test.d.ts +1 -0
  131. package/dist/cjs/MessageBar/StopButton.test.js +54 -0
  132. package/dist/cjs/MessageBar/index.d.ts +5 -0
  133. package/dist/cjs/MessageBar/index.js +26 -0
  134. package/dist/cjs/MessageBox/JumpButton.d.ts +11 -0
  135. package/dist/cjs/MessageBox/JumpButton.js +17 -0
  136. package/dist/cjs/MessageBox/JumpButton.test.d.ts +1 -0
  137. package/dist/cjs/MessageBox/JumpButton.test.js +39 -0
  138. package/dist/cjs/MessageBox/MessageBox.d.ts +17 -0
  139. package/dist/cjs/MessageBox/MessageBox.js +74 -0
  140. package/dist/cjs/MessageBox/index.d.ts +3 -0
  141. package/dist/cjs/MessageBox/index.js +24 -0
  142. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +22 -0
  143. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +25 -0
  144. package/dist/cjs/PreviewAttachment/index.d.ts +2 -0
  145. package/dist/cjs/PreviewAttachment/index.js +23 -0
  146. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +20 -0
  147. package/dist/cjs/ResponseActions/ResponseActionButton.js +12 -0
  148. package/dist/cjs/ResponseActions/ResponseActions.d.ts +30 -0
  149. package/dist/cjs/ResponseActions/ResponseActions.js +36 -0
  150. package/dist/cjs/ResponseActions/ResponseActions.test.d.ts +1 -0
  151. package/dist/cjs/ResponseActions/ResponseActions.test.js +67 -0
  152. package/dist/cjs/ResponseActions/index.d.ts +2 -0
  153. package/dist/cjs/ResponseActions/index.js +23 -0
  154. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +11 -0
  155. package/dist/cjs/SourceDetailsMenuItem/SourceDetailsMenuItem.js +31 -0
  156. package/dist/cjs/SourceDetailsMenuItem/index.d.ts +2 -0
  157. package/dist/cjs/SourceDetailsMenuItem/index.js +23 -0
  158. package/dist/cjs/SourcesCard/SourcesCard.d.ts +34 -0
  159. package/dist/cjs/SourcesCard/SourcesCard.js +68 -0
  160. package/dist/cjs/SourcesCard/SourcesCard.test.d.ts +1 -0
  161. package/dist/cjs/SourcesCard/SourcesCard.test.js +167 -0
  162. package/dist/cjs/SourcesCard/index.d.ts +2 -0
  163. package/dist/cjs/SourcesCard/index.js +23 -0
  164. package/dist/cjs/index.d.ts +48 -0
  165. package/dist/cjs/index.js +93 -0
  166. package/dist/css/main.css +1583 -0
  167. package/dist/css/main.css.map +1 -0
  168. package/dist/dynamic/AttachMenu/package.json +1 -0
  169. package/dist/dynamic/AttachmentEdit/package.json +1 -0
  170. package/dist/dynamic/Chatbot/package.json +1 -0
  171. package/dist/dynamic/ChatbotAlert/package.json +1 -0
  172. package/dist/dynamic/ChatbotContent/package.json +1 -0
  173. package/dist/dynamic/ChatbotConversationHistoryNav/package.json +1 -0
  174. package/dist/dynamic/ChatbotFooter/package.json +1 -0
  175. package/dist/dynamic/ChatbotHeader/package.json +1 -0
  176. package/dist/dynamic/ChatbotModal/package.json +1 -0
  177. package/dist/dynamic/ChatbotPopover/package.json +1 -0
  178. package/dist/dynamic/ChatbotToggle/package.json +1 -0
  179. package/dist/dynamic/ChatbotWelcomePrompt/package.json +1 -0
  180. package/dist/dynamic/CodeModal/package.json +1 -0
  181. package/dist/dynamic/FileDetails/package.json +1 -0
  182. package/dist/dynamic/FileDetailsLabel/package.json +1 -0
  183. package/dist/dynamic/FileDropZone/package.json +1 -0
  184. package/dist/dynamic/LoadingMessage/package.json +1 -0
  185. package/dist/dynamic/Message/package.json +1 -0
  186. package/dist/dynamic/MessageBar/package.json +1 -0
  187. package/dist/dynamic/MessageBox/package.json +1 -0
  188. package/dist/dynamic/PreviewAttachment/package.json +1 -0
  189. package/dist/dynamic/ResponseActions/package.json +1 -0
  190. package/dist/dynamic/SourceDetailsMenuItem/package.json +1 -0
  191. package/dist/dynamic/SourcesCard/package.json +1 -0
  192. package/dist/esm/AttachMenu/AttachMenu.d.ts +29 -0
  193. package/dist/esm/AttachMenu/AttachMenu.js +26 -0
  194. package/dist/esm/AttachMenu/index.d.ts +2 -0
  195. package/dist/esm/AttachMenu/index.js +2 -0
  196. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +22 -0
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.js +18 -0
  198. package/dist/esm/AttachmentEdit/index.d.ts +2 -0
  199. package/dist/esm/AttachmentEdit/index.js +2 -0
  200. package/dist/esm/Chatbot/Chatbot.d.ts +23 -0
  201. package/dist/esm/Chatbot/Chatbot.js +43 -0
  202. package/dist/esm/Chatbot/index.d.ts +2 -0
  203. package/dist/esm/Chatbot/index.js +2 -0
  204. package/dist/esm/ChatbotAlert/ChatbotAlert.d.ts +8 -0
  205. package/dist/esm/ChatbotAlert/ChatbotAlert.js +21 -0
  206. package/dist/esm/ChatbotAlert/index.d.ts +2 -0
  207. package/dist/esm/ChatbotAlert/index.js +2 -0
  208. package/dist/esm/ChatbotContent/ChatbotContent.d.ts +9 -0
  209. package/dist/esm/ChatbotContent/ChatbotContent.js +20 -0
  210. package/dist/esm/ChatbotContent/index.d.ts +2 -0
  211. package/dist/esm/ChatbotContent/index.js +2 -0
  212. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.d.ts +14 -0
  213. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.js +15 -0
  214. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +52 -0
  215. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +76 -0
  216. package/dist/esm/ChatbotConversationHistoryNav/index.d.ts +3 -0
  217. package/dist/esm/ChatbotConversationHistoryNav/index.js +3 -0
  218. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +9 -0
  219. package/dist/esm/ChatbotFooter/ChatbotFooter.js +28 -0
  220. package/dist/esm/ChatbotFooter/ChatbotFootnote.d.ts +44 -0
  221. package/dist/esm/ChatbotFooter/ChatbotFootnote.js +49 -0
  222. package/dist/esm/ChatbotFooter/index.d.ts +3 -0
  223. package/dist/esm/ChatbotFooter/index.js +3 -0
  224. package/dist/esm/ChatbotHeader/ChatbotHeader.d.ts +9 -0
  225. package/dist/esm/ChatbotHeader/ChatbotHeader.js +6 -0
  226. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.d.ts +9 -0
  227. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.js +3 -0
  228. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.d.ts +9 -0
  229. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +3 -0
  230. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +15 -0
  231. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +8 -0
  232. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +14 -0
  233. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +26 -0
  234. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +18 -0
  235. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +26 -0
  236. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +20 -0
  237. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +26 -0
  238. package/dist/esm/ChatbotHeader/index.d.ts +8 -0
  239. package/dist/esm/ChatbotHeader/index.js +8 -0
  240. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +10 -0
  241. package/dist/esm/ChatbotModal/ChatbotModal.js +27 -0
  242. package/dist/esm/ChatbotModal/index.d.ts +2 -0
  243. package/dist/esm/ChatbotModal/index.js +2 -0
  244. package/dist/esm/ChatbotPopover/ChatbotPopover.d.ts +4 -0
  245. package/dist/esm/ChatbotPopover/ChatbotPopover.js +22 -0
  246. package/dist/esm/ChatbotPopover/index.d.ts +2 -0
  247. package/dist/esm/ChatbotPopover/index.js +2 -0
  248. package/dist/esm/ChatbotToggle/ChatbotToggle.d.ts +20 -0
  249. package/dist/esm/ChatbotToggle/ChatbotToggle.js +30 -0
  250. package/dist/esm/ChatbotToggle/index.d.ts +2 -0
  251. package/dist/esm/ChatbotToggle/index.js +2 -0
  252. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +23 -0
  253. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +33 -0
  254. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +1 -0
  255. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +44 -0
  256. package/dist/esm/ChatbotWelcomePrompt/index.d.ts +2 -0
  257. package/dist/esm/ChatbotWelcomePrompt/index.js +2 -0
  258. package/dist/esm/CodeModal/CodeModal.d.ts +34 -0
  259. package/dist/esm/CodeModal/CodeModal.js +75 -0
  260. package/dist/esm/CodeModal/index.d.ts +2 -0
  261. package/dist/esm/CodeModal/index.js +2 -0
  262. package/dist/esm/FileDetails/FileDetails.d.ts +922 -0
  263. package/dist/esm/FileDetails/FileDetails.js +947 -0
  264. package/dist/esm/FileDetails/FileDetails.test.d.ts +1 -0
  265. package/dist/esm/FileDetails/FileDetails.test.js +21 -0
  266. package/dist/esm/FileDetails/index.d.ts +2 -0
  267. package/dist/esm/FileDetails/index.js +2 -0
  268. package/dist/esm/FileDetailsLabel/FileDetailsLabel.d.ts +21 -0
  269. package/dist/esm/FileDetailsLabel/FileDetailsLabel.js +15 -0
  270. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.d.ts +1 -0
  271. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +56 -0
  272. package/dist/esm/FileDetailsLabel/index.d.ts +2 -0
  273. package/dist/esm/FileDetailsLabel/index.js +2 -0
  274. package/dist/esm/FileDropZone/FileDropZone.d.ts +17 -0
  275. package/dist/esm/FileDropZone/FileDropZone.js +23 -0
  276. package/dist/esm/FileDropZone/FileDropZone.test.d.ts +1 -0
  277. package/dist/esm/FileDropZone/FileDropZone.test.js +14 -0
  278. package/dist/esm/FileDropZone/index.d.ts +2 -0
  279. package/dist/esm/FileDropZone/index.js +2 -0
  280. package/dist/esm/LoadingMessage/LoadingMessage.d.ts +6 -0
  281. package/dist/esm/LoadingMessage/LoadingMessage.js +13 -0
  282. package/dist/esm/LoadingMessage/LoadingMessage.test.d.ts +1 -0
  283. package/dist/esm/LoadingMessage/LoadingMessage.test.js +15 -0
  284. package/dist/esm/LoadingMessage/index.d.ts +2 -0
  285. package/dist/esm/LoadingMessage/index.js +2 -0
  286. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.d.ts +4 -0
  287. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.js +56 -0
  288. package/dist/esm/Message/ListMessage/ListItemMessage.d.ts +4 -0
  289. package/dist/esm/Message/ListMessage/ListItemMessage.js +7 -0
  290. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +4 -0
  291. package/dist/esm/Message/ListMessage/OrderedListMessage.js +8 -0
  292. package/dist/esm/Message/ListMessage/UnorderedListMessage.d.ts +4 -0
  293. package/dist/esm/Message/ListMessage/UnorderedListMessage.js +8 -0
  294. package/dist/esm/Message/Message.d.ts +65 -0
  295. package/dist/esm/Message/Message.js +62 -0
  296. package/dist/esm/Message/Message.test.d.ts +1 -0
  297. package/dist/esm/Message/Message.test.js +234 -0
  298. package/dist/esm/Message/MessageLoading.d.ts +5 -0
  299. package/dist/esm/Message/MessageLoading.js +8 -0
  300. package/dist/esm/Message/TextMessage/TextMessage.d.ts +4 -0
  301. package/dist/esm/Message/TextMessage/TextMessage.js +22 -0
  302. package/dist/esm/Message/index.d.ts +2 -0
  303. package/dist/esm/Message/index.js +2 -0
  304. package/dist/esm/MessageBar/AttachButton.d.ts +21 -0
  305. package/dist/esm/MessageBar/AttachButton.js +32 -0
  306. package/dist/esm/MessageBar/AttachButton.test.d.ts +1 -0
  307. package/dist/esm/MessageBar/AttachButton.test.js +61 -0
  308. package/dist/esm/MessageBar/MessageBar.d.ts +71 -0
  309. package/dist/esm/MessageBar/MessageBar.js +105 -0
  310. package/dist/esm/MessageBar/MessageBar.test.d.ts +1 -0
  311. package/dist/esm/MessageBar/MessageBar.test.js +232 -0
  312. package/dist/esm/MessageBar/MicrophoneButton.d.ts +21 -0
  313. package/dist/esm/MessageBar/MicrophoneButton.js +67 -0
  314. package/dist/esm/MessageBar/SendButton.d.ts +14 -0
  315. package/dist/esm/MessageBar/SendButton.js +25 -0
  316. package/dist/esm/MessageBar/SendButton.test.d.ts +1 -0
  317. package/dist/esm/MessageBar/SendButton.test.js +49 -0
  318. package/dist/esm/MessageBar/StopButton.d.ts +14 -0
  319. package/dist/esm/MessageBar/StopButton.js +25 -0
  320. package/dist/esm/MessageBar/StopButton.test.d.ts +1 -0
  321. package/dist/esm/MessageBar/StopButton.test.js +49 -0
  322. package/dist/esm/MessageBar/index.d.ts +5 -0
  323. package/dist/esm/MessageBar/index.js +5 -0
  324. package/dist/esm/MessageBox/JumpButton.d.ts +11 -0
  325. package/dist/esm/MessageBox/JumpButton.js +12 -0
  326. package/dist/esm/MessageBox/JumpButton.test.d.ts +1 -0
  327. package/dist/esm/MessageBox/JumpButton.test.js +34 -0
  328. package/dist/esm/MessageBox/MessageBox.d.ts +17 -0
  329. package/dist/esm/MessageBox/MessageBox.js +68 -0
  330. package/dist/esm/MessageBox/index.d.ts +3 -0
  331. package/dist/esm/MessageBox/index.js +3 -0
  332. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +22 -0
  333. package/dist/esm/PreviewAttachment/PreviewAttachment.js +18 -0
  334. package/dist/esm/PreviewAttachment/index.d.ts +2 -0
  335. package/dist/esm/PreviewAttachment/index.js +2 -0
  336. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +20 -0
  337. package/dist/esm/ResponseActions/ResponseActionButton.js +5 -0
  338. package/dist/esm/ResponseActions/ResponseActions.d.ts +30 -0
  339. package/dist/esm/ResponseActions/ResponseActions.js +29 -0
  340. package/dist/esm/ResponseActions/ResponseActions.test.d.ts +1 -0
  341. package/dist/esm/ResponseActions/ResponseActions.test.js +62 -0
  342. package/dist/esm/ResponseActions/index.d.ts +2 -0
  343. package/dist/esm/ResponseActions/index.js +2 -0
  344. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.d.ts +11 -0
  345. package/dist/esm/SourceDetailsMenuItem/SourceDetailsMenuItem.js +24 -0
  346. package/dist/esm/SourceDetailsMenuItem/index.d.ts +2 -0
  347. package/dist/esm/SourceDetailsMenuItem/index.js +2 -0
  348. package/dist/esm/SourcesCard/SourcesCard.d.ts +34 -0
  349. package/dist/esm/SourcesCard/SourcesCard.js +63 -0
  350. package/dist/esm/SourcesCard/SourcesCard.test.d.ts +1 -0
  351. package/dist/esm/SourcesCard/SourcesCard.test.js +162 -0
  352. package/dist/esm/SourcesCard/index.d.ts +2 -0
  353. package/dist/esm/SourcesCard/index.js +2 -0
  354. package/dist/esm/index.d.ts +48 -0
  355. package/dist/esm/index.js +49 -0
  356. package/dist/tsconfig.tsbuildinfo +1 -0
  357. package/generate-fed-package-json.js +75 -0
  358. package/generate-index.js +42 -0
  359. package/package.json +79 -0
  360. package/patternfly-a11y.config.js +28 -0
  361. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +29 -0
  362. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachMenu.tsx +149 -0
  363. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +26 -0
  364. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentError.tsx +13 -0
  365. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +87 -0
  366. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetails.tsx +4 -0
  367. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +54 -0
  368. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDropZone.tsx +60 -0
  369. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithAttachment.tsx +75 -0
  370. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +39 -0
  371. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +44 -0
  372. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithResponseActions.tsx +25 -0
  373. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +118 -0
  374. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +171 -0
  375. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PaperclipIcon.svg +10 -0
  376. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +25 -0
  377. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +37 -0
  378. package/patternfly-docs/content/extensions/chatbot/examples/Messages/patternfly_avatar.jpg +0 -0
  379. package/patternfly-docs/content/extensions/chatbot/examples/Messages/user_avatar.jpg +0 -0
  380. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotContainer.tsx +66 -0
  381. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +14 -0
  382. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +26 -0
  383. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx +189 -0
  384. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +93 -0
  385. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +75 -0
  386. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderTitle.tsx +50 -0
  387. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBar.tsx +8 -0
  388. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarAttach.tsx +148 -0
  389. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotMessageBarStop.tsx +10 -0
  390. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotModal.tsx +84 -0
  391. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotToggleBasic.tsx +13 -0
  392. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomeInteraction.tsx +144 -0
  393. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotWelcomePrompt.tsx +38 -0
  394. package/patternfly-docs/content/extensions/chatbot/examples/UI/CustomClosedIcon.tsx +89 -0
  395. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-HorizontalLogo-Color.svg +29 -0
  396. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-HorizontalLogo-Reverse.svg +28 -0
  397. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-IconLogo-Color.svg +17 -0
  398. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-IconLogo-Reverse.svg +16 -0
  399. package/patternfly-docs/content/extensions/chatbot/examples/UI/SkipToContent.tsx +40 -0
  400. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +336 -0
  401. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +99 -0
  402. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +105 -0
  403. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +473 -0
  404. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +278 -0
  405. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +268 -0
  406. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +437 -0
  407. package/patternfly-docs/pages/index.js +27 -0
  408. package/patternfly-docs/patternfly-docs.config.js +8 -0
  409. package/patternfly-docs/patternfly-docs.css.js +9 -0
  410. package/patternfly-docs/patternfly-docs.routes.js +12 -0
  411. package/patternfly-docs/patternfly-docs.source.js +24 -0
  412. package/release.config.js +18 -0
  413. package/src/AttachMenu/AttachMenu.scss +62 -0
  414. package/src/AttachMenu/AttachMenu.tsx +81 -0
  415. package/src/AttachMenu/index.ts +3 -0
  416. package/src/AttachmentEdit/AttachmentEdit.tsx +63 -0
  417. package/src/AttachmentEdit/index.ts +3 -0
  418. package/src/Chatbot/Chatbot.scss +89 -0
  419. package/src/Chatbot/Chatbot.tsx +81 -0
  420. package/src/Chatbot/index.ts +3 -0
  421. package/src/ChatbotAlert/ChatbotAlert.scss +5 -0
  422. package/src/ChatbotAlert/ChatbotAlert.tsx +32 -0
  423. package/src/ChatbotAlert/index.ts +3 -0
  424. package/src/ChatbotContent/ChatbotContent.scss +23 -0
  425. package/src/ChatbotContent/ChatbotContent.tsx +23 -0
  426. package/src/ChatbotContent/index.ts +3 -0
  427. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx +62 -0
  428. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +166 -0
  429. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +217 -0
  430. package/src/ChatbotConversationHistoryNav/index.ts +4 -0
  431. package/src/ChatbotFooter/ChatbotFooter.scss +54 -0
  432. package/src/ChatbotFooter/ChatbotFooter.tsx +33 -0
  433. package/src/ChatbotFooter/ChatbotFootnote.scss +12 -0
  434. package/src/ChatbotFooter/ChatbotFootnote.tsx +135 -0
  435. package/src/ChatbotFooter/index.ts +4 -0
  436. package/src/ChatbotHeader/ChatbotHeader.scss +140 -0
  437. package/src/ChatbotHeader/ChatbotHeader.tsx +22 -0
  438. package/src/ChatbotHeader/ChatbotHeaderActions.tsx +15 -0
  439. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +15 -0
  440. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +48 -0
  441. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +73 -0
  442. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +68 -0
  443. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +57 -0
  444. package/src/ChatbotHeader/index.ts +9 -0
  445. package/src/ChatbotModal/ChatbotModal.scss +93 -0
  446. package/src/ChatbotModal/ChatbotModal.tsx +43 -0
  447. package/src/ChatbotModal/index.ts +3 -0
  448. package/src/ChatbotPopover/ChatbotPopover.scss +27 -0
  449. package/src/ChatbotPopover/ChatbotPopover.tsx +15 -0
  450. package/src/ChatbotPopover/index.ts +3 -0
  451. package/src/ChatbotToggle/ChatbotToggle.scss +26 -0
  452. package/src/ChatbotToggle/ChatbotToggle.tsx +80 -0
  453. package/src/ChatbotToggle/index.ts +3 -0
  454. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +48 -0
  455. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +64 -0
  456. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +66 -0
  457. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +29 -0
  458. package/src/ChatbotWelcomePrompt/index.ts +3 -0
  459. package/src/CodeModal/CodeModal.scss +76 -0
  460. package/src/CodeModal/CodeModal.tsx +153 -0
  461. package/src/CodeModal/index.ts +3 -0
  462. package/src/FileDetails/FileDetails.scss +25 -0
  463. package/src/FileDetails/FileDetails.test.tsx +23 -0
  464. package/src/FileDetails/FileDetails.tsx +990 -0
  465. package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +74 -0
  466. package/src/FileDetails/index.ts +2 -0
  467. package/src/FileDetailsLabel/FileDetailsLabel.scss +66 -0
  468. package/src/FileDetailsLabel/FileDetailsLabel.test.tsx +48 -0
  469. package/src/FileDetailsLabel/FileDetailsLabel.tsx +66 -0
  470. package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +90 -0
  471. package/src/FileDetailsLabel/index.ts +2 -0
  472. package/src/FileDropZone/FileDropZone.scss +36 -0
  473. package/src/FileDropZone/FileDropZone.test.tsx +15 -0
  474. package/src/FileDropZone/FileDropZone.tsx +56 -0
  475. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +18 -0
  476. package/src/FileDropZone/index.ts +3 -0
  477. package/src/LoadingMessage/LoadingMessage.test.tsx +16 -0
  478. package/src/LoadingMessage/LoadingMessage.tsx +27 -0
  479. package/src/LoadingMessage/__snapshots__/LoadingMessage.test.tsx.snap +52 -0
  480. package/src/LoadingMessage/index.ts +3 -0
  481. package/src/Message/CodeBlockMessage/CodeBlockMessage.scss +82 -0
  482. package/src/Message/CodeBlockMessage/CodeBlockMessage.tsx +88 -0
  483. package/src/Message/ListMessage/ListItemMessage.tsx +11 -0
  484. package/src/Message/ListMessage/ListMessage.scss +25 -0
  485. package/src/Message/ListMessage/OrderedListMessage.tsx +17 -0
  486. package/src/Message/ListMessage/UnorderedListMessage.tsx +15 -0
  487. package/src/Message/Message.scss +118 -0
  488. package/src/Message/Message.test.tsx +281 -0
  489. package/src/Message/Message.tsx +181 -0
  490. package/src/Message/MessageLoading.scss +53 -0
  491. package/src/Message/MessageLoading.tsx +15 -0
  492. package/src/Message/TextMessage/TextMessage.scss +51 -0
  493. package/src/Message/TextMessage/TextMessage.tsx +17 -0
  494. package/src/Message/index.ts +3 -0
  495. package/src/MessageBar/AttachButton.scss +20 -0
  496. package/src/MessageBar/AttachButton.test.tsx +53 -0
  497. package/src/MessageBar/AttachButton.tsx +81 -0
  498. package/src/MessageBar/MessageBar.scss +77 -0
  499. package/src/MessageBar/MessageBar.test.tsx +318 -0
  500. package/src/MessageBar/MessageBar.tsx +252 -0
  501. package/src/MessageBar/MicrophoneButton.scss +48 -0
  502. package/src/MessageBar/MicrophoneButton.tsx +114 -0
  503. package/src/MessageBar/SendButton.scss +29 -0
  504. package/src/MessageBar/SendButton.test.tsx +43 -0
  505. package/src/MessageBar/SendButton.tsx +54 -0
  506. package/src/MessageBar/StopButton.scss +22 -0
  507. package/src/MessageBar/StopButton.test.tsx +42 -0
  508. package/src/MessageBar/StopButton.tsx +57 -0
  509. package/src/MessageBar/index.ts +6 -0
  510. package/src/MessageBox/JumpButton.scss +46 -0
  511. package/src/MessageBox/JumpButton.test.tsx +26 -0
  512. package/src/MessageBox/JumpButton.tsx +37 -0
  513. package/src/MessageBox/MessageBox.scss +36 -0
  514. package/src/MessageBox/MessageBox.tsx +114 -0
  515. package/src/MessageBox/index.ts +4 -0
  516. package/src/PreviewAttachment/PreviewAttachment.tsx +67 -0
  517. package/src/PreviewAttachment/index.ts +3 -0
  518. package/src/ResponseActions/ResponseActionButton.tsx +56 -0
  519. package/src/ResponseActions/ResponseActions.scss +26 -0
  520. package/src/ResponseActions/ResponseActions.test.tsx +59 -0
  521. package/src/ResponseActions/ResponseActions.tsx +115 -0
  522. package/src/ResponseActions/index.ts +3 -0
  523. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss +33 -0
  524. package/src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx +36 -0
  525. package/src/SourceDetailsMenuItem/index.ts +2 -0
  526. package/src/SourcesCard/SourcesCard.scss +74 -0
  527. package/src/SourcesCard/SourcesCard.test.tsx +238 -0
  528. package/src/SourcesCard/SourcesCard.tsx +159 -0
  529. package/src/SourcesCard/__snapshots__/SourcesCard.test.tsx.snap +34 -0
  530. package/src/SourcesCard/index.ts +3 -0
  531. package/src/index.ts +73 -0
  532. package/src/main.scss +89 -0
  533. package/tsconfig.cjs.json +8 -0
  534. package/tsconfig.json +73 -0
@@ -0,0 +1,232 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React from 'react';
11
+ import { render, screen } from '@testing-library/react';
12
+ import '@testing-library/jest-dom';
13
+ import userEvent from '@testing-library/user-event';
14
+ import { MessageBar } from './MessageBar';
15
+ import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
16
+ import SourceDetailsMenuItem from '../SourceDetailsMenuItem';
17
+ import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
18
+ const ATTACH_MENU_ITEMS = [
19
+ React.createElement(DropdownList, { key: "list-1" },
20
+ React.createElement(DropdownItem, { className: "pf-chatbot-source-details-dropdown-item", value: "auth-operator Pod", id: "0" },
21
+ React.createElement(SourceDetailsMenuItem, { icon: React.createElement("svg", { width: "24", height: "25", viewBox: "0 0 24 25", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
22
+ React.createElement("path", { d: "M0 12.5C0 5.87258 5.37258 0.5 12 0.5C18.6274 0.5 24 5.87258 24 12.5C24 19.1274 18.6274 24.5 12 24.5C5.37258 24.5 0 19.1274 0 12.5Z", fill: "currentColor" }),
23
+ React.createElement("g", { clipPath: "url(#clip0_3280_27488)" },
24
+ React.createElement("path", { d: "M8.25 8.75C8.25 7.92266 8.92266 7.25 9.75 7.25H12C14.0719 7.25 15.75 8.92812 15.75 11C15.75 13.0719 14.0719 14.75 12 14.75H9.75V17C9.75 17.4148 9.41484 17.75 9 17.75C8.58516 17.75 8.25 17.4148 8.25 17V14V8.75ZM9.75 13.25H12C13.2422 13.25 14.25 12.2422 14.25 11C14.25 9.75781 13.2422 8.75 12 8.75H9.75V13.25Z", fill: "white" })),
25
+ React.createElement("defs", null,
26
+ React.createElement("clipPath", { id: "clip0_3280_27488" },
27
+ React.createElement("rect", { width: "7.5", height: "12", fill: "white", transform: "translate(8.25 6.5)" })))), name: "auth-operator", type: "Pod" }))),
28
+ React.createElement(DropdownGroup, { key: "group2" },
29
+ React.createElement(DropdownList, null,
30
+ React.createElement(DropdownItem, { value: "Alerts", id: "1", icon: React.createElement(BellIcon, null) }, "Alerts"),
31
+ React.createElement(DropdownItem, { value: "Events", id: "2", icon: React.createElement(CalendarAltIcon, null) }, "Events"),
32
+ React.createElement(DropdownItem, { value: "Logs", id: "3", icon: React.createElement(ClipboardIcon, null) }, "Logs"),
33
+ React.createElement(DropdownItem, { value: "YAML - Status", id: "4", icon: React.createElement(CodeIcon, null) }, "YAML - Status"),
34
+ React.createElement(DropdownItem, { value: "YAML - All contents", id: "5", icon: React.createElement(CodeIcon, null) }, "YAML - All contents")))
35
+ ];
36
+ const originalSpeechRecognition = window.SpeechRecognition;
37
+ const mockSpeechRecognition = () => {
38
+ const MockSpeechRecognition = jest.fn().mockImplementation(() => ({
39
+ start: jest.fn(),
40
+ stop: jest.fn()
41
+ }));
42
+ MockSpeechRecognition.prototype = {};
43
+ window.SpeechRecognition = MockSpeechRecognition;
44
+ };
45
+ describe('Message bar', () => {
46
+ afterAll(() => {
47
+ window.SpeechRecognition = originalSpeechRecognition;
48
+ });
49
+ it('should render correctly', () => {
50
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn }));
51
+ expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
52
+ expect(screen.queryByRole('button', { name: 'Send button' })).toBeFalsy();
53
+ expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
54
+ expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
55
+ });
56
+ it('can send via enter key', () => __awaiter(void 0, void 0, void 0, function* () {
57
+ const spy = jest.fn();
58
+ render(React.createElement(MessageBar, { onSendMessage: spy }));
59
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
60
+ yield userEvent.type(input, 'Hello world');
61
+ expect(input).toHaveTextContent('Hello world');
62
+ yield userEvent.type(input, '[Enter]');
63
+ expect(spy).toHaveBeenCalledTimes(1);
64
+ }));
65
+ it('calls onChange callback appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
66
+ const spy = jest.fn();
67
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, onChange: spy }));
68
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
69
+ yield userEvent.type(input, 'A');
70
+ expect(input).toHaveTextContent('A');
71
+ expect(spy).toHaveBeenCalledTimes(1);
72
+ expect(spy).toHaveBeenCalledWith(expect.any(Object), 'A');
73
+ }));
74
+ // Send button
75
+ // --------------------------------------------------------------------------
76
+ it('shows send button when text is input', () => __awaiter(void 0, void 0, void 0, function* () {
77
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn }));
78
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
79
+ yield userEvent.type(input, 'Hello world');
80
+ expect(input).toHaveTextContent('Hello world');
81
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
82
+ }));
83
+ it('can disable send button shown when text is input', () => __awaiter(void 0, void 0, void 0, function* () {
84
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, isSendButtonDisabled: true }));
85
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
86
+ yield userEvent.type(input, 'Hello world');
87
+ expect(input).toHaveTextContent('Hello world');
88
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
89
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
90
+ }));
91
+ it('can click send button', () => __awaiter(void 0, void 0, void 0, function* () {
92
+ const spy = jest.fn();
93
+ render(React.createElement(MessageBar, { onSendMessage: spy }));
94
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
95
+ yield userEvent.type(input, 'Hello world');
96
+ expect(input).toHaveTextContent('Hello world');
97
+ const sendButton = screen.getByRole('button', { name: 'Send button' });
98
+ expect(sendButton).toBeTruthy();
99
+ yield userEvent.click(sendButton);
100
+ expect(spy).toHaveBeenCalledTimes(1);
101
+ }));
102
+ it('can always show send button', () => {
103
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, alwayShowSendButton: true }));
104
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
105
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeEnabled();
106
+ });
107
+ it('can disable send button if always showing', () => {
108
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, alwayShowSendButton: true, isSendButtonDisabled: true }));
109
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
110
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
111
+ });
112
+ it('can handle buttonProps tooltipContent appropriately for send', () => __awaiter(void 0, void 0, void 0, function* () {
113
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, alwayShowSendButton: true, buttonProps: { send: { tooltipContent: 'Test' } } }));
114
+ yield userEvent.click(screen.getByRole('button', { name: 'Send button' }));
115
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
116
+ }));
117
+ it('can handle buttonProps props appropriately for send', () => __awaiter(void 0, void 0, void 0, function* () {
118
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, alwayShowSendButton: true, buttonProps: { send: { props: { 'aria-label': 'Test' } } } }));
119
+ yield userEvent.click(screen.getByRole('button', { name: 'Test' }));
120
+ }));
121
+ // Attach button
122
+ // --------------------------------------------------------------------------
123
+ it('can show attach menu', () => __awaiter(void 0, void 0, void 0, function* () {
124
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, attachMenuProps: {
125
+ isAttachMenuOpen: true,
126
+ setIsAttachMenuOpen: jest.fn(),
127
+ onAttachMenuToggleClick: jest.fn(),
128
+ onAttachMenuInputChange: jest.fn(),
129
+ attachMenuItems: ATTACH_MENU_ITEMS
130
+ } }));
131
+ expect(screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
132
+ expect(screen.getByRole('menuitem', { name: /auth-operator/i })).toBeTruthy();
133
+ expect(screen.getByRole('menuitem', { name: /Alerts/i })).toBeTruthy();
134
+ expect(screen.getByRole('menuitem', { name: /Events/i })).toBeTruthy();
135
+ expect(screen.getByRole('menuitem', { name: /Logs/i })).toBeTruthy();
136
+ expect(screen.getByRole('menuitem', { name: /YAML - Status/i })).toBeTruthy();
137
+ expect(screen.getByRole('menuitem', { name: /YAML - All contents/i })).toBeTruthy();
138
+ }));
139
+ it('can toggle attach menu', () => __awaiter(void 0, void 0, void 0, function* () {
140
+ const attachToggleClickSpy = jest.fn();
141
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, attachMenuProps: {
142
+ isAttachMenuOpen: false,
143
+ setIsAttachMenuOpen: jest.fn(),
144
+ onAttachMenuToggleClick: attachToggleClickSpy,
145
+ onAttachMenuInputChange: jest.fn(),
146
+ attachMenuItems: ATTACH_MENU_ITEMS
147
+ } }));
148
+ expect(screen.queryByRole('textbox', { name: /Filter menu items/i })).toBeFalsy();
149
+ expect(screen.queryByRole('menuitem', { name: /auth-operator/i })).toBeFalsy();
150
+ expect(screen.queryByRole('menuitem', { name: /Alerts/i })).toBeFalsy();
151
+ expect(screen.queryByRole('menuitem', { name: /Events/i })).toBeFalsy();
152
+ expect(screen.queryByRole('menuitem', { name: /Logs/i })).toBeFalsy();
153
+ expect(screen.queryByRole('menuitem', { name: /YAML - Status/i })).toBeFalsy();
154
+ expect(screen.queryByRole('menuitem', { name: /YAML - All contents/i })).toBeFalsy();
155
+ const attachButton = screen.getByRole('button', { name: 'Attach button' });
156
+ yield userEvent.click(attachButton);
157
+ expect(attachToggleClickSpy).toHaveBeenCalledTimes(1);
158
+ }));
159
+ it('can hide attach button', () => {
160
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasAttachButton: false }));
161
+ expect(screen.queryByRole('button', { name: 'Attach button' })).toBeFalsy();
162
+ });
163
+ // Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
164
+ // See also https://developer.mozilla.org/en-US/docs/Web/API/File/File for what that file variable is doing
165
+ it('can handle handleAttach', () => __awaiter(void 0, void 0, void 0, function* () {
166
+ const spy = jest.fn();
167
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasAttachButton: true, handleAttach: spy, buttonProps: { attach: { inputTestId: 'input' } } }));
168
+ expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
169
+ yield userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
170
+ const file = new File(['test'], 'test.json');
171
+ const input = screen.getByTestId('input');
172
+ yield userEvent.upload(input, file);
173
+ expect(input.files).toHaveLength(1);
174
+ expect(spy).toHaveBeenCalledTimes(1);
175
+ }));
176
+ it('can handle buttonProps tooltipContent appropriately for attach', () => __awaiter(void 0, void 0, void 0, function* () {
177
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasAttachButton: true, buttonProps: { attach: { tooltipContent: 'Test' } } }));
178
+ yield userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
179
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
180
+ }));
181
+ it('can handle buttonProps props appropriately for attach', () => __awaiter(void 0, void 0, void 0, function* () {
182
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasAttachButton: true, buttonProps: { attach: { props: { 'aria-label': 'Test' } } } }));
183
+ yield userEvent.click(screen.getByRole('button', { name: 'Test' }));
184
+ }));
185
+ // Stop button
186
+ // --------------------------------------------------------------------------
187
+ it('can show stop button', () => {
188
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasStopButton: true, handleStopButton: jest.fn }));
189
+ expect(screen.getByRole('button', { name: 'Stop button' })).toBeTruthy();
190
+ });
191
+ it('can call handleStopButton', () => __awaiter(void 0, void 0, void 0, function* () {
192
+ const spy = jest.fn();
193
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasStopButton: true, handleStopButton: spy }));
194
+ yield userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
195
+ expect(spy).toHaveBeenCalledTimes(1);
196
+ }));
197
+ it('can handle buttonProps tooltipContent appropriately for stop', () => __awaiter(void 0, void 0, void 0, function* () {
198
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasStopButton: true, handleStopButton: jest.fn, buttonProps: { stop: { tooltipContent: 'Test' } } }));
199
+ yield userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
200
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
201
+ }));
202
+ it('can handle buttonProps props appropriately for stop', () => __awaiter(void 0, void 0, void 0, function* () {
203
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasStopButton: true, handleStopButton: jest.fn, buttonProps: { stop: { props: { 'aria-label': 'Test' } } } }));
204
+ yield userEvent.click(screen.getByRole('button', { name: 'Test' }));
205
+ }));
206
+ // Microphone button
207
+ // --------------------------------------------------------------------------
208
+ it('can hide microphone button when window.SpeechRecognition is not there', () => {
209
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasMicrophoneButton: true }));
210
+ expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
211
+ });
212
+ it('can show microphone button', () => {
213
+ mockSpeechRecognition();
214
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasMicrophoneButton: true }));
215
+ expect(screen.getByRole('button', { name: 'Microphone button' })).toBeTruthy();
216
+ });
217
+ it('can handle buttonProps appropriately for microphone', () => __awaiter(void 0, void 0, void 0, function* () {
218
+ mockSpeechRecognition();
219
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasMicrophoneButton: true, buttonProps: {
220
+ microphone: { tooltipContent: { active: 'Currently listening', inactive: 'Not currently listening' } }
221
+ } }));
222
+ yield userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
223
+ expect(screen.getByRole('tooltip', { name: 'Currently listening' })).toBeTruthy();
224
+ yield userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
225
+ expect(screen.getByRole('tooltip', { name: 'Not currently listening' })).toBeTruthy();
226
+ }));
227
+ it('can handle buttonProps props appropriately for microphone', () => __awaiter(void 0, void 0, void 0, function* () {
228
+ mockSpeechRecognition();
229
+ render(React.createElement(MessageBar, { onSendMessage: jest.fn, hasMicrophoneButton: true, buttonProps: { microphone: { props: { 'aria-label': 'Test' } } } }));
230
+ yield userEvent.click(screen.getByRole('button', { name: 'Test' }));
231
+ }));
232
+ });
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { ButtonProps, TooltipProps } from '@patternfly/react-core';
3
+ export interface MicrophoneButtonProps extends ButtonProps {
4
+ /** Boolean check if the browser is listening to speech or not */
5
+ isListening: boolean;
6
+ /** Class name for MicrophoneButton */
7
+ className?: string;
8
+ /** Callback to update the value of isListening */
9
+ onIsListeningChange: React.Dispatch<React.SetStateAction<boolean>>;
10
+ /** Callback to update the message value once speech recognition is complete */
11
+ onSpeechRecognition: React.Dispatch<React.SetStateAction<string>>;
12
+ /** Props to control the PF Tooltip component */
13
+ tooltipProps?: TooltipProps;
14
+ /** English text "Use microphone" and "Stop listening" used in the tooltip */
15
+ tooltipContent?: {
16
+ active?: string;
17
+ inactive?: string;
18
+ };
19
+ }
20
+ export declare const MicrophoneButton: React.FunctionComponent<MicrophoneButtonProps>;
21
+ export default MicrophoneButton;
@@ -0,0 +1,67 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ // ============================================================================
13
+ // Chatbot Footer - Message Bar - Microphone
14
+ // ============================================================================
15
+ import React from 'react';
16
+ // Import PatternFly components
17
+ import { Button, Tooltip, Icon } from '@patternfly/react-core';
18
+ // Import FontAwesome icons
19
+ import { MicrophoneIcon } from '@patternfly/react-icons/dist/esm/icons/microphone-icon';
20
+ export const MicrophoneButton = (_a) => {
21
+ var { isListening, onIsListeningChange, onSpeechRecognition, className, tooltipProps, tooltipContent = { active: 'Stop listening', inactive: 'Use microphone' } } = _a, props = __rest(_a, ["isListening", "onIsListeningChange", "onSpeechRecognition", "className", "tooltipProps", "tooltipContent"]);
22
+ // Microphone
23
+ // --------------------------------------------------------------------------
24
+ const [speechRecognition, setSpeechRecognition] = React.useState();
25
+ // Listen for speech
26
+ const startListening = React.useCallback(() => {
27
+ if (speechRecognition) {
28
+ speechRecognition.start();
29
+ onIsListeningChange(true);
30
+ }
31
+ }, [onIsListeningChange, speechRecognition]);
32
+ // Stop listening for speech
33
+ const stopListening = React.useCallback(() => {
34
+ if (speechRecognition && isListening) {
35
+ speechRecognition.stop();
36
+ onIsListeningChange(false);
37
+ }
38
+ }, [isListening, onIsListeningChange, speechRecognition]);
39
+ // Detect speech recognition browser support
40
+ React.useEffect(() => {
41
+ if ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window) {
42
+ // Initialize SpeechRecognition
43
+ const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
44
+ recognition.continuous = false;
45
+ recognition.interimResults = false;
46
+ recognition.lang = 'en-US';
47
+ recognition.onresult = (event) => {
48
+ const result = event.results[0][0].transcript;
49
+ onSpeechRecognition(result);
50
+ recognition.stop();
51
+ };
52
+ recognition.onerror = (event) => {
53
+ // eslint-disable-next-line no-console
54
+ console.error('Speech recognition error:', event.error);
55
+ recognition.stop();
56
+ };
57
+ setSpeechRecognition(recognition);
58
+ }
59
+ }, [onSpeechRecognition]);
60
+ if (!speechRecognition) {
61
+ return null;
62
+ }
63
+ return (React.createElement(Tooltip, Object.assign({ aria: "none", "aria-live": "polite", id: "pf-chatbot__tooltip--use-microphone", content: isListening ? tooltipContent.active : tooltipContent.inactive, 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),
64
+ React.createElement(Button, Object.assign({ variant: "plain", className: `pf-chatbot__button--microphone ${isListening ? 'pf-chatbot__button--microphone--active' : ''} ${className !== null && className !== void 0 ? className : ''}`, "aria-label": props['aria-label'] || 'Microphone button', onClick: isListening ? stopListening : startListening, icon: React.createElement(Icon, { iconSize: "xl", isInline: true },
65
+ React.createElement(MicrophoneIcon, null)) }, props))));
66
+ };
67
+ export default MicrophoneButton;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { ButtonProps, TooltipProps } from '@patternfly/react-core';
3
+ export interface SendButtonProps extends ButtonProps {
4
+ /** Callback for when button is clicked */
5
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
6
+ /** Class Name for SendButton */
7
+ className?: string;
8
+ /** Props to control the PF Tooltip component */
9
+ tooltipProps?: Omit<TooltipProps, 'content'>;
10
+ /** English text "Send" used in the tooltip */
11
+ tooltipContent?: string;
12
+ }
13
+ export declare const SendButton: React.FunctionComponent<SendButtonProps>;
14
+ export default SendButton;
@@ -0,0 +1,25 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ // ============================================================================
13
+ // Chatbot Footer - Message Bar - Send
14
+ // ============================================================================
15
+ import React from 'react';
16
+ // Import PatternFly components
17
+ import { Button, Tooltip, Icon } from '@patternfly/react-core';
18
+ import { PaperPlaneIcon } from '@patternfly/react-icons/dist/esm/icons/paper-plane-icon';
19
+ export const SendButton = (_a) => {
20
+ var { className, onClick, tooltipProps, tooltipContent = 'Send' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
21
+ return (React.createElement(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),
22
+ React.createElement(Button, Object.assign({ className: `pf-chatbot__button--send ${className !== null && className !== void 0 ? className : ''}`, variant: "link", "aria-label": props['aria-label'] || 'Send button', onClick: onClick, icon: React.createElement(Icon, { iconSize: "xl", isInline: true },
23
+ React.createElement(PaperPlaneIcon, null)) }, props))));
24
+ };
25
+ export default SendButton;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,49 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React from 'react';
11
+ import { render, screen } from '@testing-library/react';
12
+ import '@testing-library/jest-dom';
13
+ import userEvent from '@testing-library/user-event';
14
+ import { SendButton } from './SendButton';
15
+ const renderSend = (props) => {
16
+ const spy = jest.fn();
17
+ render(React.createElement(SendButton, Object.assign({ onClick: spy }, props)));
18
+ };
19
+ describe('Send button', () => {
20
+ it('should render button correctly', () => {
21
+ renderSend();
22
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
23
+ });
24
+ it('should handle onClick correctly', () => __awaiter(void 0, void 0, void 0, function* () {
25
+ const spy = jest.fn();
26
+ render(React.createElement(SendButton, { onClick: spy }));
27
+ yield userEvent.click(screen.getByRole('button', { name: 'Send button' }));
28
+ expect(screen.getByRole('tooltip', { name: 'Send' })).toBeTruthy();
29
+ expect(spy).toHaveBeenCalledTimes(1);
30
+ }));
31
+ it('should handle custom tooltip correctly', () => __awaiter(void 0, void 0, void 0, function* () {
32
+ render(React.createElement(SendButton, { onClick: jest.fn, tooltipContent: "Test" }));
33
+ yield userEvent.click(screen.getByRole('button', { name: 'Send button' }));
34
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
35
+ }));
36
+ it('should handle className prop', () => {
37
+ renderSend({ className: 'test' });
38
+ expect(screen.getByRole('button', { name: 'Send button' })).toHaveClass('test');
39
+ });
40
+ it('should handle spread props, including aria-label', () => {
41
+ renderSend({ 'aria-label': 'test' });
42
+ expect(screen.getByRole('button', { name: 'test' }));
43
+ });
44
+ it('should handle tooltipProps prop', () => __awaiter(void 0, void 0, void 0, function* () {
45
+ renderSend({ tooltipProps: { id: 'test' } });
46
+ yield userEvent.click(screen.getByRole('button', { name: 'Send button' }));
47
+ expect(screen.getByRole('tooltip', { name: 'Send' })).toHaveAttribute('id', 'test');
48
+ }));
49
+ });
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { ButtonProps, TooltipProps } from '@patternfly/react-core';
3
+ export interface StopButtonProps extends ButtonProps {
4
+ /** Callback for when button is clicked */
5
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
6
+ /** Class name for StopButton */
7
+ className?: string;
8
+ /** Props to control the PF Tooltip component */
9
+ tooltipProps?: Omit<TooltipProps, 'content'>;
10
+ /** English text "Stop" used in the tooltip */
11
+ tooltipContent?: string;
12
+ }
13
+ export declare const StopButton: React.FunctionComponent<StopButtonProps>;
14
+ export default StopButton;
@@ -0,0 +1,25 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ // ============================================================================
13
+ // Chatbot Footer - Message Bar - Stop
14
+ // ============================================================================
15
+ import React from 'react';
16
+ // Import PatternFly components
17
+ import { Button, Tooltip, Icon } from '@patternfly/react-core';
18
+ export const StopButton = (_a) => {
19
+ var { className, onClick, tooltipProps, tooltipContent = 'Stop' } = _a, props = __rest(_a, ["className", "onClick", "tooltipProps", "tooltipContent"]);
20
+ return (React.createElement(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),
21
+ React.createElement(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.createElement(Icon, { iconSize: "xl", isInline: true },
22
+ React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
23
+ React.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))));
24
+ };
25
+ export default StopButton;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,49 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React from 'react';
11
+ import { render, screen } from '@testing-library/react';
12
+ import '@testing-library/jest-dom';
13
+ import userEvent from '@testing-library/user-event';
14
+ import { StopButton } from './StopButton';
15
+ const renderStop = (props) => {
16
+ const spy = jest.fn();
17
+ render(React.createElement(StopButton, Object.assign({ onClick: spy }, props)));
18
+ };
19
+ describe('Stop button', () => {
20
+ it('should render button correctly', () => {
21
+ renderStop();
22
+ expect(screen.getByRole('button', { name: 'Stop button' })).toBeTruthy();
23
+ });
24
+ it('should handle onClick correctly', () => __awaiter(void 0, void 0, void 0, function* () {
25
+ const spy = jest.fn();
26
+ render(React.createElement(StopButton, { onClick: spy }));
27
+ yield userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
28
+ expect(screen.getByRole('tooltip', { name: 'Stop' })).toBeTruthy();
29
+ expect(spy).toHaveBeenCalledTimes(1);
30
+ }));
31
+ it('should handle custom tooltip correctly', () => __awaiter(void 0, void 0, void 0, function* () {
32
+ render(React.createElement(StopButton, { onClick: jest.fn, tooltipContent: "Test" }));
33
+ yield userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
34
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
35
+ }));
36
+ it('should handle className prop', () => {
37
+ renderStop({ className: 'test' });
38
+ expect(screen.getByRole('button', { name: 'Stop button' })).toHaveClass('test');
39
+ });
40
+ it('should handle spread props, including aria-label', () => {
41
+ renderStop({ 'aria-label': 'test' });
42
+ expect(screen.getByRole('button', { name: 'test' }));
43
+ });
44
+ it('should handle tooltipProps prop', () => __awaiter(void 0, void 0, void 0, function* () {
45
+ renderStop({ tooltipProps: { id: 'test' } });
46
+ yield userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
47
+ expect(screen.getByRole('tooltip', { name: 'Stop' })).toHaveAttribute('id', 'test');
48
+ }));
49
+ });
@@ -0,0 +1,5 @@
1
+ export { default } from './MessageBar';
2
+ export * from './MessageBar';
3
+ export * from './AttachButton';
4
+ export * from './MicrophoneButton';
5
+ export * from './SendButton';
@@ -0,0 +1,5 @@
1
+ export { default } from './MessageBar';
2
+ export * from './MessageBar';
3
+ export * from './AttachButton';
4
+ export * from './MicrophoneButton';
5
+ export * from './SendButton';
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface JumpButtonProps {
3
+ /** Position of the Jump Button(top/bottom) */
4
+ position: 'top' | 'bottom';
5
+ /** Callback for the onClick event */
6
+ onClick: () => void;
7
+ /** Flag to change the visibilty of the button */
8
+ isHidden?: boolean;
9
+ }
10
+ declare const JumpButton: React.FunctionComponent<JumpButtonProps>;
11
+ export default JumpButton;
@@ -0,0 +1,12 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Messages - Jump to Top
3
+ // ============================================================================
4
+ import React from 'react';
5
+ // Import PatternFly components
6
+ import { Button, Tooltip, Icon } from '@patternfly/react-core';
7
+ import { ArrowUpIcon } from '@patternfly/react-icons/dist/esm/icons/arrow-up-icon';
8
+ import { ArrowDownIcon } from '@patternfly/react-icons/dist/esm/icons/arrow-down-icon';
9
+ const JumpButton = ({ position, isHidden, onClick }) => isHidden ? null : (React.createElement(Tooltip, { id: `pf-chatbot__tooltip--jump-${position}`, content: `Back to ${position}`, position: "top" },
10
+ React.createElement(Button, { variant: "plain", className: `pf-chatbot__jump pf-chatbot__jump--${position}`, "aria-label": `Jump ${position} button`, onClick: onClick },
11
+ React.createElement(Icon, { iconSize: "lg", isInline: true }, position === 'top' ? React.createElement(ArrowUpIcon, null) : React.createElement(ArrowDownIcon, null)))));
12
+ export default JumpButton;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,34 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React from 'react';
11
+ import { render, screen } from '@testing-library/react';
12
+ import '@testing-library/jest-dom';
13
+ import JumpButton from './JumpButton';
14
+ import userEvent from '@testing-library/user-event';
15
+ describe('JumpButton', () => {
16
+ it('should render top button correctly', () => {
17
+ render(React.createElement(JumpButton, { position: "top", onClick: jest.fn() }));
18
+ expect(screen.getByRole('button', { name: /Jump top button/i })).toBeTruthy();
19
+ });
20
+ it('should render bottom button correctly', () => {
21
+ render(React.createElement(JumpButton, { position: "bottom", onClick: jest.fn() }));
22
+ expect(screen.getByRole('button', { name: /Jump bottom button/i })).toBeTruthy();
23
+ });
24
+ it('should call onClick appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
25
+ const spy = jest.fn();
26
+ render(React.createElement(JumpButton, { position: "bottom", onClick: spy }));
27
+ yield userEvent.click(screen.getByRole('button', { name: /Jump bottom button/i }));
28
+ expect(spy).toHaveBeenCalledTimes(1);
29
+ }));
30
+ it('should be hidden if isHidden prop is used', () => __awaiter(void 0, void 0, void 0, function* () {
31
+ render(React.createElement(JumpButton, { position: "bottom", onClick: jest.fn(), isHidden: true }));
32
+ expect(screen.queryByRole('button', { name: /Jump bottom button/i })).toBeFalsy();
33
+ }));
34
+ });
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface MessageBoxProps extends React.HTMLProps<HTMLDivElement> {
3
+ /** Content that can be announced, such as a new message, for screen readers */
4
+ announcement?: string;
5
+ /** Custom aria-label for scrollable portion of message box */
6
+ ariaLabel?: string;
7
+ /** Content to be displayed in the message box */
8
+ children: React.ReactNode;
9
+ /** Custom classname for the MessageBox component */
10
+ className?: string;
11
+ /** Ref applied to message box */
12
+ innerRef?: React.Ref<HTMLDivElement>;
13
+ /** Modifier that controls how content in MessageBox is positioned within the container */
14
+ position?: 'top' | 'bottom';
15
+ }
16
+ export declare const MessageBox: React.ForwardRefExoticComponent<Omit<MessageBoxProps, "ref"> & React.RefAttributes<any>>;
17
+ export default MessageBox;