@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,318 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import userEvent from '@testing-library/user-event';
5
+ import { MessageBar } from './MessageBar';
6
+ import { DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core';
7
+ import SourceDetailsMenuItem from '../SourceDetailsMenuItem';
8
+ import { BellIcon, CalendarAltIcon, ClipboardIcon, CodeIcon } from '@patternfly/react-icons';
9
+
10
+ const ATTACH_MENU_ITEMS = [
11
+ <DropdownList key="list-1">
12
+ <DropdownItem className="pf-chatbot-source-details-dropdown-item" value="auth-operator Pod" id="0">
13
+ <SourceDetailsMenuItem
14
+ icon={
15
+ <svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
16
+ <path
17
+ 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"
18
+ fill="currentColor"
19
+ />
20
+ <g clipPath="url(#clip0_3280_27488)">
21
+ <path
22
+ 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"
23
+ fill="white"
24
+ />
25
+ </g>
26
+ <defs>
27
+ <clipPath id="clip0_3280_27488">
28
+ <rect width="7.5" height="12" fill="white" transform="translate(8.25 6.5)" />
29
+ </clipPath>
30
+ </defs>
31
+ </svg>
32
+ }
33
+ name="auth-operator"
34
+ type="Pod"
35
+ />
36
+ </DropdownItem>
37
+ </DropdownList>,
38
+ <DropdownGroup key="group2">
39
+ <DropdownList>
40
+ <DropdownItem value="Alerts" id="1" icon={<BellIcon />}>
41
+ Alerts
42
+ </DropdownItem>
43
+ <DropdownItem value="Events" id="2" icon={<CalendarAltIcon />}>
44
+ Events
45
+ </DropdownItem>
46
+ <DropdownItem value="Logs" id="3" icon={<ClipboardIcon />}>
47
+ Logs
48
+ </DropdownItem>
49
+ <DropdownItem value="YAML - Status" id="4" icon={<CodeIcon />}>
50
+ YAML - Status
51
+ </DropdownItem>
52
+ <DropdownItem value="YAML - All contents" id="5" icon={<CodeIcon />}>
53
+ YAML - All contents
54
+ </DropdownItem>
55
+ </DropdownList>
56
+ </DropdownGroup>
57
+ ];
58
+
59
+ const originalSpeechRecognition = window.SpeechRecognition;
60
+
61
+ const mockSpeechRecognition = () => {
62
+ const MockSpeechRecognition = jest.fn().mockImplementation(() => ({
63
+ start: jest.fn(),
64
+ stop: jest.fn()
65
+ }));
66
+ (MockSpeechRecognition as any).prototype = {};
67
+ window.SpeechRecognition = MockSpeechRecognition as any;
68
+ };
69
+
70
+ describe('Message bar', () => {
71
+ afterAll(() => {
72
+ window.SpeechRecognition = originalSpeechRecognition;
73
+ });
74
+ it('should render correctly', () => {
75
+ render(<MessageBar onSendMessage={jest.fn} />);
76
+ expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
77
+ expect(screen.queryByRole('button', { name: 'Send button' })).toBeFalsy();
78
+ expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
79
+ expect(screen.getByRole('textbox', { name: /Send a message.../i })).toBeTruthy();
80
+ });
81
+ it('can send via enter key', async () => {
82
+ const spy = jest.fn();
83
+ render(<MessageBar onSendMessage={spy} />);
84
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
85
+ await userEvent.type(input, 'Hello world');
86
+ expect(input).toHaveTextContent('Hello world');
87
+ await userEvent.type(input, '[Enter]');
88
+ expect(spy).toHaveBeenCalledTimes(1);
89
+ });
90
+ it('calls onChange callback appropriately', async () => {
91
+ const spy = jest.fn();
92
+ render(<MessageBar onSendMessage={jest.fn} onChange={spy} />);
93
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
94
+ await userEvent.type(input, 'A');
95
+ expect(input).toHaveTextContent('A');
96
+ expect(spy).toHaveBeenCalledTimes(1);
97
+ expect(spy).toHaveBeenCalledWith(expect.any(Object), 'A');
98
+ });
99
+
100
+ // Send button
101
+ // --------------------------------------------------------------------------
102
+ it('shows send button when text is input', async () => {
103
+ render(<MessageBar onSendMessage={jest.fn} />);
104
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
105
+ await userEvent.type(input, 'Hello world');
106
+ expect(input).toHaveTextContent('Hello world');
107
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
108
+ });
109
+ it('can disable send button shown when text is input', async () => {
110
+ render(<MessageBar onSendMessage={jest.fn} isSendButtonDisabled />);
111
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
112
+ await userEvent.type(input, 'Hello world');
113
+ expect(input).toHaveTextContent('Hello world');
114
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
115
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
116
+ });
117
+ it('can click send button', async () => {
118
+ const spy = jest.fn();
119
+ render(<MessageBar onSendMessage={spy} />);
120
+ const input = screen.getByRole('textbox', { name: /Send a message.../i });
121
+ await userEvent.type(input, 'Hello world');
122
+ expect(input).toHaveTextContent('Hello world');
123
+ const sendButton = screen.getByRole('button', { name: 'Send button' });
124
+ expect(sendButton).toBeTruthy();
125
+ await userEvent.click(sendButton);
126
+ expect(spy).toHaveBeenCalledTimes(1);
127
+ });
128
+ it('can always show send button', () => {
129
+ render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton />);
130
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
131
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeEnabled();
132
+ });
133
+ it('can disable send button if always showing', () => {
134
+ render(<MessageBar onSendMessage={jest.fn} alwayShowSendButton isSendButtonDisabled />);
135
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeTruthy();
136
+ expect(screen.getByRole('button', { name: 'Send button' })).toBeDisabled();
137
+ });
138
+ it('can handle buttonProps tooltipContent appropriately for send', async () => {
139
+ render(
140
+ <MessageBar onSendMessage={jest.fn} alwayShowSendButton buttonProps={{ send: { tooltipContent: 'Test' } }} />
141
+ );
142
+ await userEvent.click(screen.getByRole('button', { name: 'Send button' }));
143
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
144
+ });
145
+ it('can handle buttonProps props appropriately for send', async () => {
146
+ render(
147
+ <MessageBar
148
+ onSendMessage={jest.fn}
149
+ alwayShowSendButton
150
+ buttonProps={{ send: { props: { 'aria-label': 'Test' } } }}
151
+ />
152
+ );
153
+ await userEvent.click(screen.getByRole('button', { name: 'Test' }));
154
+ });
155
+
156
+ // Attach button
157
+ // --------------------------------------------------------------------------
158
+ it('can show attach menu', async () => {
159
+ render(
160
+ <MessageBar
161
+ onSendMessage={jest.fn}
162
+ attachMenuProps={{
163
+ isAttachMenuOpen: true,
164
+ setIsAttachMenuOpen: jest.fn(),
165
+ onAttachMenuToggleClick: jest.fn(),
166
+ onAttachMenuInputChange: jest.fn(),
167
+ attachMenuItems: ATTACH_MENU_ITEMS
168
+ }}
169
+ />
170
+ );
171
+ expect(screen.getByRole('textbox', { name: /Filter menu items/i })).toBeTruthy();
172
+ expect(screen.getByRole('menuitem', { name: /auth-operator/i })).toBeTruthy();
173
+ expect(screen.getByRole('menuitem', { name: /Alerts/i })).toBeTruthy();
174
+ expect(screen.getByRole('menuitem', { name: /Events/i })).toBeTruthy();
175
+ expect(screen.getByRole('menuitem', { name: /Logs/i })).toBeTruthy();
176
+ expect(screen.getByRole('menuitem', { name: /YAML - Status/i })).toBeTruthy();
177
+ expect(screen.getByRole('menuitem', { name: /YAML - All contents/i })).toBeTruthy();
178
+ });
179
+ it('can toggle attach menu', async () => {
180
+ const attachToggleClickSpy = jest.fn();
181
+ render(
182
+ <MessageBar
183
+ onSendMessage={jest.fn}
184
+ attachMenuProps={{
185
+ isAttachMenuOpen: false,
186
+ setIsAttachMenuOpen: jest.fn(),
187
+ onAttachMenuToggleClick: attachToggleClickSpy,
188
+ onAttachMenuInputChange: jest.fn(),
189
+ attachMenuItems: ATTACH_MENU_ITEMS
190
+ }}
191
+ />
192
+ );
193
+ expect(screen.queryByRole('textbox', { name: /Filter menu items/i })).toBeFalsy();
194
+ expect(screen.queryByRole('menuitem', { name: /auth-operator/i })).toBeFalsy();
195
+ expect(screen.queryByRole('menuitem', { name: /Alerts/i })).toBeFalsy();
196
+ expect(screen.queryByRole('menuitem', { name: /Events/i })).toBeFalsy();
197
+ expect(screen.queryByRole('menuitem', { name: /Logs/i })).toBeFalsy();
198
+ expect(screen.queryByRole('menuitem', { name: /YAML - Status/i })).toBeFalsy();
199
+ expect(screen.queryByRole('menuitem', { name: /YAML - All contents/i })).toBeFalsy();
200
+ const attachButton = screen.getByRole('button', { name: 'Attach button' });
201
+ await userEvent.click(attachButton);
202
+ expect(attachToggleClickSpy).toHaveBeenCalledTimes(1);
203
+ });
204
+ it('can hide attach button', () => {
205
+ render(<MessageBar onSendMessage={jest.fn} hasAttachButton={false} />);
206
+ expect(screen.queryByRole('button', { name: 'Attach button' })).toBeFalsy();
207
+ });
208
+ // Based on this because I had no idea how to do this and was looking around: https://stackoverflow.com/a/75562651
209
+ // See also https://developer.mozilla.org/en-US/docs/Web/API/File/File for what that file variable is doing
210
+ it('can handle handleAttach', async () => {
211
+ const spy = jest.fn();
212
+ render(
213
+ <MessageBar
214
+ onSendMessage={jest.fn}
215
+ hasAttachButton
216
+ handleAttach={spy}
217
+ buttonProps={{ attach: { inputTestId: 'input' } }}
218
+ />
219
+ );
220
+ expect(screen.getByRole('button', { name: 'Attach button' })).toBeTruthy();
221
+ await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
222
+ const file = new File(['test'], 'test.json');
223
+ const input = screen.getByTestId('input') as HTMLInputElement;
224
+ await userEvent.upload(input, file);
225
+ expect(input.files).toHaveLength(1);
226
+ expect(spy).toHaveBeenCalledTimes(1);
227
+ });
228
+ it('can handle buttonProps tooltipContent appropriately for attach', async () => {
229
+ render(<MessageBar onSendMessage={jest.fn} hasAttachButton buttonProps={{ attach: { tooltipContent: 'Test' } }} />);
230
+ await userEvent.click(screen.getByRole('button', { name: 'Attach button' }));
231
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
232
+ });
233
+ it('can handle buttonProps props appropriately for attach', async () => {
234
+ render(
235
+ <MessageBar
236
+ onSendMessage={jest.fn}
237
+ hasAttachButton
238
+ buttonProps={{ attach: { props: { 'aria-label': 'Test' } } }}
239
+ />
240
+ );
241
+ await userEvent.click(screen.getByRole('button', { name: 'Test' }));
242
+ });
243
+
244
+ // Stop button
245
+ // --------------------------------------------------------------------------
246
+ it('can show stop button', () => {
247
+ render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={jest.fn} />);
248
+ expect(screen.getByRole('button', { name: 'Stop button' })).toBeTruthy();
249
+ });
250
+ it('can call handleStopButton', async () => {
251
+ const spy = jest.fn();
252
+ render(<MessageBar onSendMessage={jest.fn} hasStopButton handleStopButton={spy} />);
253
+ await userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
254
+ expect(spy).toHaveBeenCalledTimes(1);
255
+ });
256
+ it('can handle buttonProps tooltipContent appropriately for stop', async () => {
257
+ render(
258
+ <MessageBar
259
+ onSendMessage={jest.fn}
260
+ hasStopButton
261
+ handleStopButton={jest.fn}
262
+ buttonProps={{ stop: { tooltipContent: 'Test' } }}
263
+ />
264
+ );
265
+ await userEvent.click(screen.getByRole('button', { name: 'Stop button' }));
266
+ expect(screen.getByRole('tooltip', { name: 'Test' })).toBeTruthy();
267
+ });
268
+ it('can handle buttonProps props appropriately for stop', async () => {
269
+ render(
270
+ <MessageBar
271
+ onSendMessage={jest.fn}
272
+ hasStopButton
273
+ handleStopButton={jest.fn}
274
+ buttonProps={{ stop: { props: { 'aria-label': 'Test' } } }}
275
+ />
276
+ );
277
+ await userEvent.click(screen.getByRole('button', { name: 'Test' }));
278
+ });
279
+
280
+ // Microphone button
281
+ // --------------------------------------------------------------------------
282
+ it('can hide microphone button when window.SpeechRecognition is not there', () => {
283
+ render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
284
+ expect(screen.queryByRole('button', { name: 'Microphone button' })).toBeFalsy();
285
+ });
286
+ it('can show microphone button', () => {
287
+ mockSpeechRecognition();
288
+ render(<MessageBar onSendMessage={jest.fn} hasMicrophoneButton />);
289
+ expect(screen.getByRole('button', { name: 'Microphone button' })).toBeTruthy();
290
+ });
291
+ it('can handle buttonProps appropriately for microphone', async () => {
292
+ mockSpeechRecognition();
293
+ render(
294
+ <MessageBar
295
+ onSendMessage={jest.fn}
296
+ hasMicrophoneButton
297
+ buttonProps={{
298
+ microphone: { tooltipContent: { active: 'Currently listening', inactive: 'Not currently listening' } }
299
+ }}
300
+ />
301
+ );
302
+ await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
303
+ expect(screen.getByRole('tooltip', { name: 'Currently listening' })).toBeTruthy();
304
+ await userEvent.click(screen.getByRole('button', { name: 'Microphone button' }));
305
+ expect(screen.getByRole('tooltip', { name: 'Not currently listening' })).toBeTruthy();
306
+ });
307
+ it('can handle buttonProps props appropriately for microphone', async () => {
308
+ mockSpeechRecognition();
309
+ render(
310
+ <MessageBar
311
+ onSendMessage={jest.fn}
312
+ hasMicrophoneButton
313
+ buttonProps={{ microphone: { props: { 'aria-label': 'Test' } } }}
314
+ />
315
+ );
316
+ await userEvent.click(screen.getByRole('button', { name: 'Test' }));
317
+ });
318
+ });
@@ -0,0 +1,252 @@
1
+ import React from 'react';
2
+ import { ButtonProps, DropEvent } from '@patternfly/react-core';
3
+
4
+ // Import Chatbot components
5
+ import SendButton from './SendButton';
6
+ import MicrophoneButton from './MicrophoneButton';
7
+ import { AttachButton } from './AttachButton';
8
+ import AttachMenu from '../AttachMenu';
9
+ import StopButton from './StopButton';
10
+ import DOMPurify from 'dompurify';
11
+
12
+ export interface MessageBarWithAttachMenuProps {
13
+ /** Flag to enable whether attach menu is open */
14
+ isAttachMenuOpen: boolean;
15
+ /** Callback to close attach menu */
16
+ setIsAttachMenuOpen: (isOpen: boolean) => void;
17
+ /** Items in menu */
18
+ attachMenuItems: React.ReactNode;
19
+ /** A callback for when the attachment menu toggle is clicked */
20
+ onAttachMenuToggleClick: () => void;
21
+ /** A callback for when the input value in the menu changes. */
22
+ onAttachMenuInputChange: (value: string) => void;
23
+ /** Function callback called when user selects item in menu. */
24
+ onAttachMenuSelect?: (event?: React.MouseEvent<Element, MouseEvent>, value?: string | number) => void;
25
+ /** Placeholder for search input */
26
+ attachMenuInputPlaceholder?: string;
27
+ /** Keys that trigger onOpenChange, defaults to tab and escape. It is highly recommended to include Escape in the array, while Tab may be omitted if the menu contains non-menu items that are focusable. */
28
+ onAttachMenuOnOpenChangeKeys?: string[];
29
+ /** Callback to change the open state of the menu. Triggered by clicking outside of the menu. */
30
+ onAttachMenuOpenChange?: (isOpen: boolean) => void;
31
+ }
32
+
33
+ export interface MessageBarProps {
34
+ /** Callback to get the value of input message by user */
35
+ onSendMessage: (message: string) => void;
36
+ /** Class Name for the MessageBar component */
37
+ className?: string;
38
+ /** Flag to always to show the send button. By default send button is shown when there is a message in the input field */
39
+ alwayShowSendButton?: boolean;
40
+ /** Flag to disable/enable the Attach button */
41
+ hasAttachButton?: boolean;
42
+ /** Flag to enable the Microphone button */
43
+ hasMicrophoneButton?: boolean;
44
+ /** Flag to enable the Stop button, used for streaming content */
45
+ hasStopButton?: boolean;
46
+ /** Callback function for when stop button is clicked */
47
+ handleStopButton?: (event: React.MouseEvent<HTMLButtonElement>) => void;
48
+ /** Callback function for when attach button is used to upload a file */
49
+ handleAttach?: (data: File[], event: DropEvent) => void;
50
+ /** Props to enable a menu that opens when the Attach button is clicked, instead of the attachment window */
51
+ attachMenuProps?: MessageBarWithAttachMenuProps;
52
+ /** Flag to provide manual control over whether send button is disabled */
53
+ isSendButtonDisabled?: boolean;
54
+ /** Prop to allow passage of additional props to buttons */
55
+ buttonProps?: {
56
+ attach?: { tooltipContent?: string; props?: ButtonProps; inputTestId?: string };
57
+ stop?: { tooltipContent?: string; props?: ButtonProps };
58
+ send?: { tooltipContent?: string; props?: ButtonProps };
59
+ microphone?: {
60
+ tooltipContent?: { active?: string; inactive?: string };
61
+ props?: ButtonProps;
62
+ };
63
+ };
64
+ /** A callback for when the text area value changes. */
65
+ onChange?: (event: React.ChangeEvent<HTMLDivElement>, value: string) => void;
66
+ }
67
+
68
+ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
69
+ onSendMessage,
70
+ className,
71
+ alwayShowSendButton,
72
+ hasAttachButton = true,
73
+ hasMicrophoneButton,
74
+ handleAttach,
75
+ attachMenuProps,
76
+ isSendButtonDisabled,
77
+ handleStopButton,
78
+ hasStopButton,
79
+ buttonProps,
80
+ onChange,
81
+ ...props
82
+ }: MessageBarProps) => {
83
+ // Text Input
84
+ // --------------------------------------------------------------------------
85
+ const [message, setMessage] = React.useState<string>('');
86
+ const [isListeningMessage, setIsListeningMessage] = React.useState<boolean>(false);
87
+ const [showPlaceholder, setShowPlaceholder] = React.useState(true);
88
+ const textareaRef = React.useRef<HTMLDivElement>(null);
89
+ const attachButtonRef = React.useRef<HTMLButtonElement>(null);
90
+
91
+ const handleInput = (event) => {
92
+ // newMessage === '' doesn't work unless we trim, which causes other problems
93
+ // textContent seems to work, but doesn't allow for markdown, so we need both
94
+ const messageText = DOMPurify.sanitize(event.target.textContent);
95
+ if (messageText === '') {
96
+ setShowPlaceholder(true);
97
+ setMessage('');
98
+ onChange && onChange(event, '');
99
+ } else {
100
+ setShowPlaceholder(false);
101
+ // this is so that tests work; RTL doesn't seem to like event.target.innerText, but browsers don't pick up markdown without it
102
+ let newMessage = messageText;
103
+ if (event.target.innerText) {
104
+ newMessage = DOMPurify.sanitize(event.target.innerText);
105
+ }
106
+ setMessage(newMessage);
107
+ onChange && onChange(event, newMessage);
108
+ }
109
+ };
110
+
111
+ // Handle sending message
112
+ const handleSend = React.useCallback(() => {
113
+ setMessage((m) => {
114
+ onSendMessage(m);
115
+ setMessage('');
116
+ if (textareaRef.current) {
117
+ textareaRef.current.innerText = '';
118
+ setShowPlaceholder(true);
119
+ textareaRef.current.blur();
120
+ }
121
+ return '';
122
+ });
123
+ }, [onSendMessage]);
124
+
125
+ const handleKeyDown = React.useCallback(
126
+ (event: React.KeyboardEvent) => {
127
+ if (event.key === 'Enter' && !event.shiftKey) {
128
+ event.preventDefault();
129
+ if (!isSendButtonDisabled && !hasStopButton) {
130
+ handleSend();
131
+ }
132
+ }
133
+ },
134
+ [handleSend]
135
+ );
136
+
137
+ const handleAttachMenuToggle = () => {
138
+ attachMenuProps?.setIsAttachMenuOpen && attachMenuProps?.setIsAttachMenuOpen(!attachMenuProps?.isAttachMenuOpen);
139
+ attachMenuProps?.onAttachMenuToggleClick();
140
+ };
141
+
142
+ const renderButtons = () => {
143
+ if (hasStopButton && handleStopButton) {
144
+ return (
145
+ <StopButton
146
+ onClick={handleStopButton}
147
+ tooltipContent={buttonProps?.stop?.tooltipContent}
148
+ {...buttonProps?.stop?.props}
149
+ />
150
+ );
151
+ }
152
+ return (
153
+ <>
154
+ {attachMenuProps && (
155
+ <AttachButton
156
+ ref={attachButtonRef}
157
+ onClick={handleAttachMenuToggle}
158
+ isDisabled={isListeningMessage}
159
+ tooltipContent={buttonProps?.attach?.tooltipContent}
160
+ {...buttonProps?.attach?.props}
161
+ />
162
+ )}
163
+ {!attachMenuProps && hasAttachButton && (
164
+ <AttachButton
165
+ onAttachAccepted={handleAttach}
166
+ isDisabled={isListeningMessage}
167
+ tooltipContent={buttonProps?.attach?.tooltipContent}
168
+ inputTestId={buttonProps?.attach?.inputTestId}
169
+ {...buttonProps?.attach?.props}
170
+ />
171
+ )}
172
+ {hasMicrophoneButton && (
173
+ <MicrophoneButton
174
+ isListening={isListeningMessage}
175
+ onIsListeningChange={setIsListeningMessage}
176
+ onSpeechRecognition={setMessage}
177
+ tooltipContent={buttonProps?.microphone?.tooltipContent}
178
+ {...buttonProps?.microphone?.props}
179
+ />
180
+ )}
181
+ {(alwayShowSendButton || message) && (
182
+ <SendButton
183
+ value={message}
184
+ onClick={handleSend}
185
+ isDisabled={isSendButtonDisabled}
186
+ tooltipContent={buttonProps?.send?.tooltipContent}
187
+ {...buttonProps?.send?.props}
188
+ />
189
+ )}
190
+ </>
191
+ );
192
+ };
193
+
194
+ const placeholder = isListeningMessage ? 'Listening' : 'Send a message...';
195
+
196
+ const messageBarContents = (
197
+ <>
198
+ <div className="pf-chatbot__message-bar-input">
199
+ {(showPlaceholder || message === '') && (
200
+ <div className="pf-chatbot__message-bar-placeholder">{placeholder}</div>
201
+ )}
202
+ <div
203
+ contentEditable
204
+ suppressContentEditableWarning={true}
205
+ role="textbox"
206
+ aria-multiline="false"
207
+ className="pf-chatbot__message-textarea"
208
+ onInput={handleInput}
209
+ onFocus={() => setShowPlaceholder(false)}
210
+ onBlur={() => {
211
+ if (message === '') {
212
+ setShowPlaceholder(!showPlaceholder);
213
+ }
214
+ }}
215
+ aria-label={placeholder}
216
+ ref={textareaRef}
217
+ onKeyDown={handleKeyDown}
218
+ {...props}
219
+ ></div>
220
+ </div>
221
+ <div className="pf-chatbot__message-bar-actions">{renderButtons()}</div>
222
+ </>
223
+ );
224
+
225
+ if (attachMenuProps) {
226
+ return (
227
+ <AttachMenu
228
+ toggle={(toggleRef) => (
229
+ <div ref={toggleRef} className={`pf-chatbot__message-bar ${className ?? ''}`}>
230
+ {messageBarContents}
231
+ </div>
232
+ )}
233
+ filteredItems={attachMenuProps?.attachMenuItems}
234
+ {...(attachMenuProps && { isOpen: attachMenuProps.isAttachMenuOpen })}
235
+ onOpenChange={(isAttachMenuOpen) => {
236
+ attachButtonRef.current?.focus();
237
+ attachMenuProps?.setIsAttachMenuOpen(isAttachMenuOpen);
238
+ attachMenuProps?.onAttachMenuOpenChange && attachMenuProps?.onAttachMenuOpenChange(isAttachMenuOpen);
239
+ }}
240
+ onOpenChangeKeys={attachMenuProps?.onAttachMenuOnOpenChangeKeys}
241
+ onSelect={attachMenuProps?.onAttachMenuSelect}
242
+ {...(attachMenuProps && { handleTextInputChange: attachMenuProps.onAttachMenuInputChange })}
243
+ popperProps={{ direction: 'up', distance: '8' }}
244
+ searchInputPlaceholder={attachMenuProps?.attachMenuInputPlaceholder}
245
+ />
246
+ );
247
+ }
248
+
249
+ return <div className={`pf-chatbot__message-bar ${className ?? ''}`}>{messageBarContents}</div>;
250
+ };
251
+
252
+ export default MessageBar;
@@ -0,0 +1,48 @@
1
+ // ============================================================================
2
+ // Chatbot Footer - Message Bar - Microphone
3
+ // ============================================================================
4
+ .pf-v6-c-button.pf-chatbot__button--microphone {
5
+ border-radius: var(--pf-t--global--border--radius--pill);
6
+ padding: var(--pf-t--global--spacer--md);
7
+ width: 3rem;
8
+ height: 3rem;
9
+
10
+ .pf-v6-c-button__icon {
11
+ color: var(--pf-t--chatbot--icon--fill);
12
+ }
13
+
14
+ // Interactive states
15
+ &:hover,
16
+ &:focus {
17
+ .pf-v6-c-button__icon {
18
+ color: var(--pf-t--chatbot--icon--fill--hover);
19
+ }
20
+ }
21
+
22
+ // Active state (while recording voice)
23
+ &--active {
24
+ background-color: var(--pf-t--color--blue--50);
25
+ animation: motionMicButton var(--pf-t--chatbot--timing-function) calc(var(--pf-t--global--motion--duration--md) * 8)
26
+ infinite;
27
+
28
+ .pf-v6-c-button__icon {
29
+ color: var(--pf-t--color--white);
30
+ }
31
+
32
+ &:hover,
33
+ &:focus {
34
+ .pf-v6-c-button__icon {
35
+ color: var(--pf-t--color--white);
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ @keyframes motionMicButton {
42
+ 0% {
43
+ box-shadow: 0 0 0 0 rgba(0, 102, 204, 1);
44
+ }
45
+ 100% {
46
+ box-shadow: 0 0 0 16px rgba(0, 102, 204, 0);
47
+ }
48
+ }