@patternfly/chatbot 6.8.0-prerelease.7 → 6.8.0-prerelease.9

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 (321) hide show
  1. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
  2. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +125 -16
  3. package/dist/cjs/CodeModal/CodeModal.js +5 -0
  4. package/dist/cjs/MarkdownContent/MarkdownContent.d.ts +26 -7
  5. package/dist/cjs/MarkdownContent/MarkdownContent.js +79 -166
  6. package/dist/cjs/MarkdownContent/MarkdownRenderer.d.ts +6 -0
  7. package/dist/cjs/MarkdownContent/MarkdownRenderer.js +187 -0
  8. package/dist/cjs/Message/Message.d.ts +3 -4
  9. package/dist/cjs/Message/Message.js +0 -2
  10. package/dist/cjs/MessageBox/MessageBox.d.ts +2 -0
  11. package/dist/cjs/MessageBox/MessageBox.js +7 -2
  12. package/dist/cjs/index.d.ts +0 -8
  13. package/dist/cjs/index.js +1 -13
  14. package/dist/css/main.css +77 -10
  15. package/dist/css/main.css.map +1 -1
  16. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +46 -5
  17. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +128 -19
  18. package/dist/esm/CodeModal/CodeModal.js +5 -0
  19. package/dist/esm/MarkdownContent/MarkdownContent.d.ts +26 -7
  20. package/dist/esm/MarkdownContent/MarkdownContent.js +52 -165
  21. package/dist/esm/MarkdownContent/MarkdownRenderer.d.ts +6 -0
  22. package/dist/esm/MarkdownContent/MarkdownRenderer.js +182 -0
  23. package/dist/esm/Message/Message.d.ts +3 -4
  24. package/dist/esm/Message/Message.js +0 -2
  25. package/dist/esm/MessageBox/MessageBox.d.ts +2 -0
  26. package/dist/esm/MessageBox/MessageBox.js +7 -2
  27. package/dist/esm/index.d.ts +0 -8
  28. package/dist/esm/index.js +0 -8
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/generate-index.js +41 -16
  31. package/generate-index.test.js +68 -0
  32. package/monaco-environment.js +45 -0
  33. package/package.json +20 -2
  34. package/patternfly-docs/content/extensions/chatbot/chatbot.md +1 -0
  35. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +1 -1
  36. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +2 -2
  37. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +2 -2
  38. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +1 -1
  39. package/patternfly-docs/content/extensions/chatbot/examples/Messages/monitor-sampleapp-quickstart.ts +1 -0
  40. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithExpandableGroups.tsx +104 -0
  41. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +12 -1
  42. package/patternfly-docs/content/extensions/chatbot/tree-shaking.md +124 -0
  43. package/patternfly-docs/monaco-environment.js +45 -0
  44. package/patternfly-docs/patternfly-docs.css.js +6 -0
  45. package/src/Chatbot/Chatbot.scss +4 -0
  46. package/src/ChatbotContent/ChatbotContent.scss +1 -1
  47. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +52 -6
  48. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +551 -3
  49. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +350 -49
  50. package/src/ChatbotFooter/ChatbotFooter.scss +2 -2
  51. package/src/ChatbotHeader/ChatbotHeader.scss +4 -0
  52. package/src/ChatbotModal/ChatbotModal.scss +10 -0
  53. package/src/ChatbotToggle/ChatbotToggle.scss +6 -0
  54. package/src/CodeModal/CodeModal.tsx +6 -0
  55. package/src/DeepThinking/DeepThinking.test.tsx +10 -12
  56. package/src/MarkdownContent/MarkdownContent.test.tsx +52 -5
  57. package/src/MarkdownContent/MarkdownContent.tsx +77 -220
  58. package/src/MarkdownContent/MarkdownRenderer.tsx +235 -0
  59. package/src/Message/Message.scss +5 -0
  60. package/src/Message/Message.test.tsx +5 -0
  61. package/src/Message/Message.tsx +3 -5
  62. package/src/MessageBox/MessageBox.scss +15 -1
  63. package/src/MessageBox/MessageBox.tsx +23 -2
  64. package/src/ResponseActions/ResponseActions.test.tsx +42 -48
  65. package/src/ToolCall/ToolCall.test.tsx +6 -9
  66. package/src/ToolResponse/ToolResponse.test.tsx +16 -22
  67. package/src/index.ts +0 -12
  68. package/src/test-utils/markdownTestUtils.ts +21 -0
  69. package/tsconfig.json +6 -1
  70. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
  71. package/dist/cjs/AttachmentEdit/AttachmentEdit.test.js +0 -77
  72. package/dist/cjs/Chatbot/Chatbot.test.d.ts +0 -1
  73. package/dist/cjs/Chatbot/Chatbot.test.js +0 -32
  74. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
  75. package/dist/cjs/ChatbotAlert/ChatbotAlert.test.js +0 -27
  76. package/dist/cjs/ChatbotContent/ChatbotContent.test.d.ts +0 -1
  77. package/dist/cjs/ChatbotContent/ChatbotContent.test.js +0 -22
  78. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
  79. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -75
  80. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
  81. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -277
  82. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
  83. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +0 -27
  84. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
  85. package/dist/cjs/ChatbotFooter/ChatbotFooternote.test.js +0 -87
  86. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
  87. package/dist/cjs/ChatbotHeader/ChatbotHeader.test.js +0 -18
  88. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
  89. package/dist/cjs/ChatbotHeader/ChatbotHeaderActions.test.js +0 -18
  90. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
  91. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -22
  92. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
  93. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.test.js +0 -18
  94. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
  95. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -22
  96. package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
  97. package/dist/cjs/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -22
  98. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
  99. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -46
  100. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
  101. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -44
  102. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
  103. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -55
  104. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +0 -1
  105. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +0 -16
  106. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
  107. package/dist/cjs/ChatbotToggle/ChatbotToggle.test.js +0 -64
  108. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
  109. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -61
  110. package/dist/cjs/CodeModal/CodeModal.test.d.ts +0 -1
  111. package/dist/cjs/CodeModal/CodeModal.test.js +0 -34
  112. package/dist/cjs/Compare/Compare.test.d.ts +0 -1
  113. package/dist/cjs/Compare/Compare.test.js +0 -18
  114. package/dist/cjs/DeepThinking/DeepThinking.test.d.ts +0 -1
  115. package/dist/cjs/DeepThinking/DeepThinking.test.js +0 -146
  116. package/dist/cjs/FileDetails/FileDetails.test.d.ts +0 -1
  117. package/dist/cjs/FileDetails/FileDetails.test.js +0 -42
  118. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
  119. package/dist/cjs/FileDetailsLabel/FileDetailsLabel.test.js +0 -79
  120. package/dist/cjs/FileDropZone/FileDropZone.test.d.ts +0 -1
  121. package/dist/cjs/FileDropZone/FileDropZone.test.js +0 -100
  122. package/dist/cjs/FilePreview/FilePreview.test.d.ts +0 -1
  123. package/dist/cjs/FilePreview/FilePreview.test.js +0 -97
  124. package/dist/cjs/ImagePreview/ImagePreview.test.d.ts +0 -1
  125. package/dist/cjs/ImagePreview/ImagePreview.test.js +0 -225
  126. package/dist/cjs/MarkdownContent/MarkdownContent.test.d.ts +0 -1
  127. package/dist/cjs/MarkdownContent/MarkdownContent.test.js +0 -192
  128. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
  129. package/dist/cjs/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -131
  130. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
  131. package/dist/cjs/Message/ErrorMessage/ErrorMessage.test.js +0 -30
  132. package/dist/cjs/Message/Message.test.d.ts +0 -1
  133. package/dist/cjs/Message/Message.test.js +0 -1128
  134. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
  135. package/dist/cjs/Message/MessageAndActions/MessageAndActions.test.js +0 -25
  136. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
  137. package/dist/cjs/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -25
  138. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
  139. package/dist/cjs/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -25
  140. package/dist/cjs/Message/MessageLoading.test.d.ts +0 -1
  141. package/dist/cjs/Message/MessageLoading.test.js +0 -25
  142. package/dist/cjs/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
  143. package/dist/cjs/Message/QuickResponse/QuickResponse.test.js +0 -109
  144. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
  145. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +0 -76
  146. package/dist/cjs/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
  147. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +0 -181
  148. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
  149. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +0 -243
  150. package/dist/cjs/MessageBar/AttachButton.test.d.ts +0 -1
  151. package/dist/cjs/MessageBar/AttachButton.test.js +0 -152
  152. package/dist/cjs/MessageBar/MessageBar.test.d.ts +0 -1
  153. package/dist/cjs/MessageBar/MessageBar.test.js +0 -338
  154. package/dist/cjs/MessageBar/SendButton.test.d.ts +0 -1
  155. package/dist/cjs/MessageBar/SendButton.test.js +0 -58
  156. package/dist/cjs/MessageBar/StopButton.test.d.ts +0 -1
  157. package/dist/cjs/MessageBar/StopButton.test.js +0 -58
  158. package/dist/cjs/MessageBox/JumpButton.test.d.ts +0 -1
  159. package/dist/cjs/MessageBox/JumpButton.test.js +0 -39
  160. package/dist/cjs/MessageBox/MessageBox.test.d.ts +0 -1
  161. package/dist/cjs/MessageBox/MessageBox.test.js +0 -294
  162. package/dist/cjs/MessageDivider/MessageDivider.test.d.ts +0 -1
  163. package/dist/cjs/MessageDivider/MessageDivider.test.js +0 -29
  164. package/dist/cjs/Onboarding/Onboarding.test.d.ts +0 -1
  165. package/dist/cjs/Onboarding/Onboarding.test.js +0 -80
  166. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
  167. package/dist/cjs/PreviewAttachment/PreviewAttachment.test.js +0 -50
  168. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +0 -1
  169. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +0 -54
  170. package/dist/cjs/ResponseActions/ResponseActions.test.d.ts +0 -1
  171. package/dist/cjs/ResponseActions/ResponseActions.test.js +0 -455
  172. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
  173. package/dist/cjs/ResponseActions/ResponseActionsGroups.test.js +0 -25
  174. package/dist/cjs/Settings/SettingsForm.test.d.ts +0 -1
  175. package/dist/cjs/Settings/SettingsForm.test.js +0 -35
  176. package/dist/cjs/SourcesCard/SourcesCard.test.d.ts +0 -1
  177. package/dist/cjs/SourcesCard/SourcesCard.test.js +0 -39
  178. package/dist/cjs/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
  179. package/dist/cjs/SourcesCardBase/SourcesCardBase.test.js +0 -199
  180. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +0 -1
  181. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +0 -77
  182. package/dist/cjs/ToolCall/ToolCall.test.d.ts +0 -1
  183. package/dist/cjs/ToolCall/ToolCall.test.js +0 -201
  184. package/dist/cjs/ToolResponse/ToolResponse.test.d.ts +0 -1
  185. package/dist/cjs/ToolResponse/ToolResponse.test.js +0 -184
  186. package/dist/cjs/__mocks__/monaco-editor.d.ts +0 -11
  187. package/dist/cjs/__mocks__/monaco-editor.js +0 -18
  188. package/dist/cjs/__mocks__/rehype-external-links.d.ts +0 -2
  189. package/dist/cjs/__mocks__/rehype-external-links.js +0 -4
  190. package/dist/cjs/__mocks__/rehype-highlight.d.ts +0 -2
  191. package/dist/cjs/__mocks__/rehype-highlight.js +0 -4
  192. package/dist/cjs/__mocks__/rehype-sanitize.d.ts +0 -2
  193. package/dist/cjs/__mocks__/rehype-sanitize.js +0 -4
  194. package/dist/cjs/__mocks__/rehype-unwrap-images.d.ts +0 -2
  195. package/dist/cjs/__mocks__/rehype-unwrap-images.js +0 -4
  196. package/dist/esm/AttachmentEdit/AttachmentEdit.test.d.ts +0 -1
  197. package/dist/esm/AttachmentEdit/AttachmentEdit.test.js +0 -72
  198. package/dist/esm/Chatbot/Chatbot.test.d.ts +0 -1
  199. package/dist/esm/Chatbot/Chatbot.test.js +0 -27
  200. package/dist/esm/ChatbotAlert/ChatbotAlert.test.d.ts +0 -1
  201. package/dist/esm/ChatbotAlert/ChatbotAlert.test.js +0 -22
  202. package/dist/esm/ChatbotContent/ChatbotContent.test.d.ts +0 -1
  203. package/dist/esm/ChatbotContent/ChatbotContent.test.js +0 -17
  204. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.d.ts +0 -1
  205. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.js +0 -70
  206. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.d.ts +0 -1
  207. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +0 -272
  208. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +0 -1
  209. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +0 -22
  210. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.d.ts +0 -1
  211. package/dist/esm/ChatbotFooter/ChatbotFooternote.test.js +0 -82
  212. package/dist/esm/ChatbotHeader/ChatbotHeader.test.d.ts +0 -1
  213. package/dist/esm/ChatbotHeader/ChatbotHeader.test.js +0 -13
  214. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.d.ts +0 -1
  215. package/dist/esm/ChatbotHeader/ChatbotHeaderActions.test.js +0 -13
  216. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +0 -1
  217. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +0 -20
  218. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.d.ts +0 -1
  219. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.test.js +0 -13
  220. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +0 -1
  221. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +0 -20
  222. package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.d.ts +0 -1
  223. package/dist/esm/ChatbotHeader/ChatbotHeaderNewChatButton.test.js +0 -20
  224. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +0 -1
  225. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +0 -44
  226. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +0 -1
  227. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +0 -42
  228. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.d.ts +0 -1
  229. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +0 -50
  230. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +0 -1
  231. package/dist/esm/ChatbotModal/ChatbotModal.test.js +0 -11
  232. package/dist/esm/ChatbotToggle/ChatbotToggle.test.d.ts +0 -1
  233. package/dist/esm/ChatbotToggle/ChatbotToggle.test.js +0 -59
  234. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.d.ts +0 -1
  235. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +0 -56
  236. package/dist/esm/CodeModal/CodeModal.test.d.ts +0 -1
  237. package/dist/esm/CodeModal/CodeModal.test.js +0 -29
  238. package/dist/esm/Compare/Compare.test.d.ts +0 -1
  239. package/dist/esm/Compare/Compare.test.js +0 -13
  240. package/dist/esm/DeepThinking/DeepThinking.test.d.ts +0 -1
  241. package/dist/esm/DeepThinking/DeepThinking.test.js +0 -141
  242. package/dist/esm/FileDetails/FileDetails.test.d.ts +0 -1
  243. package/dist/esm/FileDetails/FileDetails.test.js +0 -37
  244. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.d.ts +0 -1
  245. package/dist/esm/FileDetailsLabel/FileDetailsLabel.test.js +0 -74
  246. package/dist/esm/FileDropZone/FileDropZone.test.d.ts +0 -1
  247. package/dist/esm/FileDropZone/FileDropZone.test.js +0 -95
  248. package/dist/esm/FilePreview/FilePreview.test.d.ts +0 -1
  249. package/dist/esm/FilePreview/FilePreview.test.js +0 -92
  250. package/dist/esm/ImagePreview/ImagePreview.test.d.ts +0 -1
  251. package/dist/esm/ImagePreview/ImagePreview.test.js +0 -220
  252. package/dist/esm/MarkdownContent/MarkdownContent.test.d.ts +0 -1
  253. package/dist/esm/MarkdownContent/MarkdownContent.test.js +0 -187
  254. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.d.ts +0 -1
  255. package/dist/esm/Message/CodeBlockMessage/CodeBlockMessage.test.js +0 -126
  256. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.d.ts +0 -1
  257. package/dist/esm/Message/ErrorMessage/ErrorMessage.test.js +0 -25
  258. package/dist/esm/Message/Message.test.d.ts +0 -1
  259. package/dist/esm/Message/Message.test.js +0 -1123
  260. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.d.ts +0 -1
  261. package/dist/esm/Message/MessageAndActions/MessageAndActions.test.js +0 -20
  262. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.d.ts +0 -1
  263. package/dist/esm/Message/MessageAttachments/MessageAttachmentItem.test.js +0 -20
  264. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.d.ts +0 -1
  265. package/dist/esm/Message/MessageAttachments/MessageAttachmentsContainer.test.js +0 -20
  266. package/dist/esm/Message/MessageLoading.test.d.ts +0 -1
  267. package/dist/esm/Message/MessageLoading.test.js +0 -20
  268. package/dist/esm/Message/QuickResponse/QuickResponse.test.d.ts +0 -1
  269. package/dist/esm/Message/QuickResponse/QuickResponse.test.js +0 -104
  270. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +0 -1
  271. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +0 -48
  272. package/dist/esm/Message/UserFeedback/UserFeedback.test.d.ts +0 -1
  273. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +0 -176
  274. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.d.ts +0 -1
  275. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +0 -238
  276. package/dist/esm/MessageBar/AttachButton.test.d.ts +0 -1
  277. package/dist/esm/MessageBar/AttachButton.test.js +0 -147
  278. package/dist/esm/MessageBar/MessageBar.test.d.ts +0 -1
  279. package/dist/esm/MessageBar/MessageBar.test.js +0 -333
  280. package/dist/esm/MessageBar/SendButton.test.d.ts +0 -1
  281. package/dist/esm/MessageBar/SendButton.test.js +0 -53
  282. package/dist/esm/MessageBar/StopButton.test.d.ts +0 -1
  283. package/dist/esm/MessageBar/StopButton.test.js +0 -53
  284. package/dist/esm/MessageBox/JumpButton.test.d.ts +0 -1
  285. package/dist/esm/MessageBox/JumpButton.test.js +0 -34
  286. package/dist/esm/MessageBox/MessageBox.test.d.ts +0 -1
  287. package/dist/esm/MessageBox/MessageBox.test.js +0 -289
  288. package/dist/esm/MessageDivider/MessageDivider.test.d.ts +0 -1
  289. package/dist/esm/MessageDivider/MessageDivider.test.js +0 -24
  290. package/dist/esm/Onboarding/Onboarding.test.d.ts +0 -1
  291. package/dist/esm/Onboarding/Onboarding.test.js +0 -75
  292. package/dist/esm/PreviewAttachment/PreviewAttachment.test.d.ts +0 -1
  293. package/dist/esm/PreviewAttachment/PreviewAttachment.test.js +0 -48
  294. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +0 -1
  295. package/dist/esm/ResponseActions/ResponseActionButton.test.js +0 -49
  296. package/dist/esm/ResponseActions/ResponseActions.test.d.ts +0 -1
  297. package/dist/esm/ResponseActions/ResponseActions.test.js +0 -450
  298. package/dist/esm/ResponseActions/ResponseActionsGroups.test.d.ts +0 -1
  299. package/dist/esm/ResponseActions/ResponseActionsGroups.test.js +0 -20
  300. package/dist/esm/Settings/SettingsForm.test.d.ts +0 -1
  301. package/dist/esm/Settings/SettingsForm.test.js +0 -33
  302. package/dist/esm/SourcesCard/SourcesCard.test.d.ts +0 -1
  303. package/dist/esm/SourcesCard/SourcesCard.test.js +0 -34
  304. package/dist/esm/SourcesCardBase/SourcesCardBase.test.d.ts +0 -1
  305. package/dist/esm/SourcesCardBase/SourcesCardBase.test.js +0 -194
  306. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +0 -1
  307. package/dist/esm/TermsOfUse/TermsOfUse.test.js +0 -72
  308. package/dist/esm/ToolCall/ToolCall.test.d.ts +0 -1
  309. package/dist/esm/ToolCall/ToolCall.test.js +0 -196
  310. package/dist/esm/ToolResponse/ToolResponse.test.d.ts +0 -1
  311. package/dist/esm/ToolResponse/ToolResponse.test.js +0 -179
  312. package/dist/esm/__mocks__/monaco-editor.d.ts +0 -11
  313. package/dist/esm/__mocks__/monaco-editor.js +0 -18
  314. package/dist/esm/__mocks__/rehype-external-links.d.ts +0 -2
  315. package/dist/esm/__mocks__/rehype-external-links.js +0 -2
  316. package/dist/esm/__mocks__/rehype-highlight.d.ts +0 -2
  317. package/dist/esm/__mocks__/rehype-highlight.js +0 -2
  318. package/dist/esm/__mocks__/rehype-sanitize.d.ts +0 -2
  319. package/dist/esm/__mocks__/rehype-sanitize.js +0 -2
  320. package/dist/esm/__mocks__/rehype-unwrap-images.d.ts +0 -2
  321. package/dist/esm/__mocks__/rehype-unwrap-images.js +0 -2
@@ -1,92 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { render, screen } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import FilePreview from './FilePreview';
5
- import { ChatbotDisplayMode } from '../Chatbot';
6
- import { Button } from '@patternfly/react-core';
7
- describe('FilePreview', () => {
8
- const defaultProps = {
9
- isModalOpen: true,
10
- handleModalToggle: jest.fn(),
11
- fileName: 'test-file.txt',
12
- children: 'File content preview'
13
- };
14
- beforeEach(() => {
15
- jest.clearAllMocks();
16
- });
17
- it('should render with basic props', () => {
18
- render(_jsx(FilePreview, Object.assign({}, defaultProps)));
19
- expect(screen.getByText('File preview')).toBeInTheDocument();
20
- expect(screen.getByText('test-file.txt')).toBeInTheDocument();
21
- });
22
- it('should render with custom title', () => {
23
- const customTitle = 'Custom file preview title';
24
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { title: customTitle })));
25
- expect(screen.getByRole('heading', { name: customTitle })).toBeTruthy();
26
- });
27
- it('should handle modal toggle when closed', () => {
28
- const mockToggle = jest.fn();
29
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { isModalOpen: false, handleModalToggle: mockToggle })));
30
- expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
31
- });
32
- it('should apply default display mode class', () => {
33
- render(_jsx(FilePreview, Object.assign({}, defaultProps)));
34
- const modal = screen.getByRole('dialog');
35
- expect(modal).toHaveClass('pf-chatbot__file-preview-modal--default');
36
- });
37
- it('should apply custom display mode class', () => {
38
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { displayMode: ChatbotDisplayMode.fullscreen })));
39
- const modal = screen.getByRole('dialog');
40
- expect(modal).toHaveClass('pf-chatbot__file-preview-modal--fullscreen');
41
- });
42
- it('should apply compact styling when isCompact is true', () => {
43
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { isCompact: true })));
44
- const modal = screen.getByRole('dialog');
45
- expect(modal).toHaveClass('pf-m-compact');
46
- });
47
- it('should not apply compact styling when isCompact is false', () => {
48
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { isCompact: false })));
49
- const modal = screen.getByRole('dialog');
50
- expect(modal).not.toHaveClass('pf-m-compact');
51
- });
52
- it('should apply custom className', () => {
53
- const customClass = 'custom-file-preview';
54
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { className: customClass })));
55
- const modal = screen.getByRole('dialog');
56
- expect(modal).toHaveClass(customClass);
57
- });
58
- it('should pass through additional props to ChatbotModal', () => {
59
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { "data-testid": "file-preview-modal" })));
60
- const modal = screen.getByTestId('file-preview-modal');
61
- expect(modal).toBeInTheDocument();
62
- });
63
- it('should pass modalHeaderProps to ModalHeader', () => {
64
- const modalHeaderProps = {
65
- 'data-testid': 'custom-header'
66
- };
67
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { modalHeaderProps: modalHeaderProps })));
68
- const header = screen.getByTestId('custom-header');
69
- expect(header).toBeInTheDocument();
70
- });
71
- it('should pass modalBodyProps to ModalBody', () => {
72
- const modalBodyProps = {
73
- 'data-testid': 'custom-body'
74
- };
75
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { modalBodyProps: modalBodyProps })));
76
- const body = screen.getByTestId('custom-body');
77
- expect(body).toBeInTheDocument();
78
- });
79
- it('should pass ouiaId to ChatbotModal', () => {
80
- const ouiaId = 'file-preview-ouia-id';
81
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { ouiaId: ouiaId })));
82
- const modal = screen.getByRole('dialog');
83
- expect(modal).toHaveAttribute('data-ouia-component-id', ouiaId);
84
- });
85
- it('should handle complex children', () => {
86
- const complexChildren = (_jsxs("div", { children: [_jsx("h3", { children: "File details" }), _jsx("p", { children: "Size: 1.2 MB" }), _jsx(Button, { children: "Download" })] }));
87
- render(_jsx(FilePreview, Object.assign({}, defaultProps, { children: complexChildren })));
88
- expect(screen.getByRole('heading', { name: /File details/i })).toBeTruthy();
89
- expect(screen.getByText('Size: 1.2 MB')).toBeTruthy();
90
- expect(screen.getByRole('button', { name: /Download/i })).toBeTruthy();
91
- });
92
- });
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,220 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { render, screen, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import ImagePreview from './ImagePreview';
5
- import { ChatbotDisplayMode } from '../Chatbot';
6
- const mockImages = [
7
- {
8
- fileName: 'image1.jpg',
9
- fileSize: '2.5 MB',
10
- image: _jsx("img", { src: "", alt: "Test image 1" })
11
- },
12
- {
13
- fileName: 'image2.png',
14
- fileSize: '1.8 MB',
15
- image: _jsx("img", { src: "", alt: "Test image 2" })
16
- },
17
- {
18
- fileName: 'image3.gif',
19
- image: _jsx("img", { src: "", alt: "Test image 3" })
20
- }
21
- ];
22
- const defaultProps = {
23
- isModalOpen: true,
24
- handleModalToggle: jest.fn(),
25
- images: mockImages
26
- };
27
- describe('ImagePreview', () => {
28
- beforeEach(() => {
29
- jest.clearAllMocks();
30
- });
31
- it('renders modal when isModalOpen is true', () => {
32
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
33
- expect(screen.getByRole('dialog')).toBeInTheDocument();
34
- });
35
- it('does not render modal when isModalOpen is false', () => {
36
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { isModalOpen: false })));
37
- expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
38
- });
39
- it('displays custom title when provided', () => {
40
- const customTitle = 'Custom image preview';
41
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { title: customTitle })));
42
- expect(screen.getByRole('heading', { name: customTitle })).toBeInTheDocument();
43
- });
44
- it('displays default title when no title provided', () => {
45
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
46
- expect(screen.getByRole('heading', { name: /Preview images/i })).toBeInTheDocument();
47
- });
48
- it('calls handleModalToggle when modal is closed', () => {
49
- const mockHandleToggle = jest.fn();
50
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { handleModalToggle: mockHandleToggle })));
51
- const closeButton = screen.getByRole('button', { name: /close/i });
52
- fireEvent.click(closeButton);
53
- expect(mockHandleToggle).toHaveBeenCalledTimes(1);
54
- });
55
- it('displays first image by default', () => {
56
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
57
- expect(screen.getByText('image1.jpg')).toBeInTheDocument();
58
- expect(screen.getByText('2.5 MB')).toBeInTheDocument();
59
- expect(screen.getByAltText('Test image 1')).toBeInTheDocument();
60
- });
61
- it('displays page counter correctly', () => {
62
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
63
- expect(screen.getByText('1/3')).toBeInTheDocument();
64
- });
65
- it('navigates to next image when next button is clicked', () => {
66
- const mockOnNextClick = jest.fn();
67
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { onNextClick: mockOnNextClick })));
68
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
69
- fireEvent.click(nextButton);
70
- expect(mockOnNextClick).toHaveBeenCalled();
71
- expect(screen.getByText('2/3')).toBeInTheDocument();
72
- expect(screen.getByText('image2.png')).toBeInTheDocument();
73
- });
74
- it('navigates to previous image when previous button is clicked', () => {
75
- const mockOnPreviousClick = jest.fn();
76
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { onPreviousClick: mockOnPreviousClick })));
77
- // First go to page 2
78
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
79
- fireEvent.click(nextButton);
80
- // Then go back to page 1
81
- const previousButton = screen.getByRole('button', { name: /Go to previous image/i });
82
- fireEvent.click(previousButton);
83
- expect(mockOnPreviousClick).toHaveBeenCalled();
84
- expect(screen.getByText('1/3')).toBeInTheDocument();
85
- });
86
- it('calls onSetPage when page changes', () => {
87
- const mockOnSetPage = jest.fn();
88
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { onSetPage: mockOnSetPage })));
89
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
90
- fireEvent.click(nextButton);
91
- expect(mockOnSetPage).toHaveBeenCalledWith(expect.any(Object), 2);
92
- });
93
- it('disables previous button on first page', () => {
94
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
95
- const previousButton = screen.getByRole('button', { name: /Go to previous image/i });
96
- expect(previousButton).toBeDisabled();
97
- });
98
- it('disables next button on last page', () => {
99
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
100
- // Navigate to last page
101
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
102
- fireEvent.click(nextButton); // page 2
103
- fireEvent.click(nextButton); // page 3
104
- expect(nextButton).toBeDisabled();
105
- });
106
- it('disables both navigation buttons when isDisabled is true', () => {
107
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { isDisabled: true })));
108
- const previousButton = screen.getByRole('button', { name: /Go to previous image/i });
109
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
110
- expect(previousButton).toBeDisabled();
111
- expect(nextButton).toBeDisabled();
112
- });
113
- it('uses custom aria labels for pagination', () => {
114
- const customLabels = {
115
- paginationAriaLabel: 'Custom pagination',
116
- toPreviousPageAriaLabel: 'Go to previous image',
117
- toNextPageAriaLabel: 'Go to next image'
118
- };
119
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, customLabels)));
120
- expect(screen.getByRole('navigation', { name: 'Custom pagination' })).toBeInTheDocument();
121
- expect(screen.getByRole('button', { name: 'Go to previous image' })).toBeInTheDocument();
122
- expect(screen.getByRole('button', { name: 'Go to next image' })).toBeInTheDocument();
123
- });
124
- it('renders with compact mode when isCompact is true', () => {
125
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { isCompact: true })));
126
- const modal = screen.getByRole('dialog');
127
- expect(modal).toHaveClass('pf-m-compact');
128
- });
129
- it('applies custom className when provided', () => {
130
- const customClassName = 'custom-image-preview';
131
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { className: customClassName })));
132
- const modal = screen.getByRole('dialog');
133
- expect(modal).toHaveClass(customClassName);
134
- });
135
- it('applies display mode class correctly', () => {
136
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { displayMode: ChatbotDisplayMode.embedded })));
137
- const modal = screen.getByRole('dialog');
138
- expect(modal).toHaveClass('pf-chatbot__image-preview-modal--embedded');
139
- });
140
- it('passes additional props to ChatbotModal', () => {
141
- const modalClass = 'custom-modal-class';
142
- const additionalProps = {
143
- 'data-testid': 'modal',
144
- className: modalClass
145
- };
146
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, additionalProps)));
147
- const modal = screen.getByTestId('modal');
148
- expect(modal).toBeInTheDocument();
149
- expect(modal).toBeInTheDocument();
150
- expect(modal).toHaveClass(modalClass);
151
- });
152
- it('passes modalHeaderProps correctly', () => {
153
- const headerClass = 'custom-modal-header-class';
154
- const headerProps = {
155
- 'data-testid': 'header',
156
- className: headerClass
157
- };
158
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { modalHeaderProps: headerProps })));
159
- expect(screen.getByTestId('header')).toBeInTheDocument();
160
- expect(screen.getByTestId('header')).toHaveClass(headerClass);
161
- });
162
- it('passes modalBodyProps correctly', () => {
163
- const bodyClass = 'custom-modal-body-class';
164
- const bodyProps = {
165
- 'data-testid': 'body',
166
- className: bodyClass
167
- };
168
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { modalBodyProps: bodyProps })));
169
- expect(screen.getByTestId('body')).toBeInTheDocument();
170
- expect(screen.getByTestId('body')).toHaveClass(bodyClass);
171
- });
172
- it('handles single image without pagination', () => {
173
- const singleImage = [mockImages[0]];
174
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { images: singleImage })));
175
- expect(screen.queryByText('1/1')).not.toBeInTheDocument();
176
- expect(screen.queryByRole('button', { name: /Go to previous image/i })).not.toBeInTheDocument();
177
- expect(screen.queryByRole('button', { name: /Go to next image/i })).not.toBeInTheDocument();
178
- });
179
- it('calls onCloseFileDetailsLabel when file details close button is clicked', () => {
180
- const mockOnClose = jest.fn();
181
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { onCloseFileDetailsLabel: mockOnClose })));
182
- const closeButton = screen.getByRole('button', { name: /Close image1.jpg/i });
183
- fireEvent.click(closeButton);
184
- expect(mockOnClose).toHaveBeenCalled();
185
- });
186
- it('passes fileDetailsLabelProps correctly to FileDetailsLabel', () => {
187
- const customFileDetailsProps = {
188
- 'data-testid': 'custom-file-details'
189
- };
190
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { fileDetailsLabelProps: customFileDetailsProps })));
191
- expect(screen.getByTestId('custom-file-details')).toBeInTheDocument();
192
- });
193
- it('displays file details for current page when navigating', () => {
194
- render(_jsx(ImagePreview, Object.assign({}, defaultProps)));
195
- // Initially shows first image details
196
- expect(screen.getByText('image1.jpg')).toBeInTheDocument();
197
- expect(screen.getByText('2.5 MB')).toBeInTheDocument();
198
- // Navigate to second page
199
- const nextButton = screen.getByRole('button', { name: /Go to next image/i });
200
- fireEvent.click(nextButton);
201
- // Should now show second image details
202
- expect(screen.getByText('image2.png')).toBeInTheDocument();
203
- expect(screen.getByText('1.8 MB')).toBeInTheDocument();
204
- // Navigate to third page
205
- fireEvent.click(nextButton);
206
- // Should now show third image details (no file size)
207
- expect(screen.getByText('image3.gif')).toBeInTheDocument();
208
- expect(screen.queryByText(/MB/)).not.toBeInTheDocument();
209
- });
210
- it('sets hasTruncation to false on FileDetailsLabel', () => {
211
- const longFileName = 'very-long-filename-that-would-normally-be-truncated-in-other-contexts.jpg';
212
- const imageWithLongName = {
213
- fileName: longFileName,
214
- fileSize: '1.0 MB',
215
- image: _jsx("img", { src: "", alt: "Test image with long name" })
216
- };
217
- render(_jsx(ImagePreview, Object.assign({}, defaultProps, { images: [imageWithLongName] })));
218
- expect(screen.getByText(longFileName)).toBeInTheDocument();
219
- });
220
- });
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,187 +0,0 @@
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 { jsx as _jsx } from "react/jsx-runtime";
11
- import { render, screen } from '@testing-library/react';
12
- import '@testing-library/jest-dom';
13
- import MarkdownContent from './MarkdownContent';
14
- import rehypeExternalLinks from '../__mocks__/rehype-external-links';
15
- const BOLD_TEXT = '**Bold text**';
16
- const ITALIC_TEXT = '*Italic text*';
17
- const INLINE_CODE = 'Here is inline code: `const x = 5`';
18
- const CODE_BLOCK = `\`\`\`javascript
19
- function hello() {
20
- console.log('Hello, world!');
21
- }
22
- \`\`\``;
23
- const HEADING = '# Heading 1';
24
- const LINK = '[PatternFly](https://www.patternfly.org/)';
25
- const UNORDERED_LIST = `
26
- * Item 1
27
- * Item 2
28
- * Item 3
29
- `;
30
- const ORDERED_LIST = `
31
- 1. First item
32
- 2. Second item
33
- 3. Third item
34
- `;
35
- const TABLE = `
36
- | Column 1 | Column 2 |
37
- |----------|----------|
38
- | Cell 1 | Cell 2 |
39
- | Cell 3 | Cell 4 |
40
- `;
41
- const BLOCKQUOTE = '> This is a blockquote';
42
- const IMAGE = '![Alt text](https://example.com/image.png)';
43
- describe('MarkdownContent', () => {
44
- beforeEach(() => {
45
- jest.clearAllMocks();
46
- });
47
- it('should render bold text correctly', () => {
48
- const { container } = render(_jsx(MarkdownContent, { content: BOLD_TEXT }));
49
- expect(container.querySelector('strong')).toBeTruthy();
50
- expect(screen.getByText('Bold text')).toBeTruthy();
51
- });
52
- it('should render italic text correctly', () => {
53
- const { container } = render(_jsx(MarkdownContent, { content: ITALIC_TEXT }));
54
- expect(container.querySelector('em')).toBeTruthy();
55
- expect(screen.getByText('Italic text')).toBeTruthy();
56
- });
57
- it('should render inline code correctly', () => {
58
- render(_jsx(MarkdownContent, { content: INLINE_CODE }));
59
- expect(screen.getByText(/const x = 5/)).toBeTruthy();
60
- });
61
- it('should render code blocks correctly', () => {
62
- render(_jsx(MarkdownContent, { content: CODE_BLOCK }));
63
- expect(screen.getByText(/function hello/)).toBeVisible();
64
- expect(screen.getByText(/console.log/)).toBeVisible();
65
- expect(screen.getByRole('button', { name: 'Copy code' })).toBeVisible();
66
- });
67
- it('should render headings correctly', () => {
68
- render(_jsx(MarkdownContent, { content: HEADING }));
69
- expect(screen.getByRole('heading', { name: /Heading 1/i })).toBeTruthy();
70
- });
71
- it('should render links correctly', () => {
72
- render(_jsx(MarkdownContent, { content: LINK }));
73
- expect(screen.getByRole('link', { name: /PatternFly/i })).toBeTruthy();
74
- });
75
- it('should render unordered lists correctly', () => {
76
- render(_jsx(MarkdownContent, { content: UNORDERED_LIST }));
77
- expect(screen.getByText('Item 1')).toBeTruthy();
78
- expect(screen.getByText('Item 2')).toBeTruthy();
79
- expect(screen.getByText('Item 3')).toBeTruthy();
80
- expect(screen.getAllByRole('listitem')).toHaveLength(3);
81
- });
82
- it('should render ordered lists correctly', () => {
83
- render(_jsx(MarkdownContent, { content: ORDERED_LIST }));
84
- expect(screen.getByText('First item')).toBeTruthy();
85
- expect(screen.getByText('Second item')).toBeTruthy();
86
- expect(screen.getByText('Third item')).toBeTruthy();
87
- expect(screen.getAllByRole('listitem')).toHaveLength(3);
88
- });
89
- it('should render tables correctly', () => {
90
- render(_jsx(MarkdownContent, { content: TABLE, tableProps: { 'aria-label': 'Test table' } }));
91
- expect(screen.getByRole('grid', { name: /Test table/i })).toBeTruthy();
92
- expect(screen.getByRole('columnheader', { name: /Column 1/i })).toBeTruthy();
93
- expect(screen.getByRole('columnheader', { name: /Column 2/i })).toBeTruthy();
94
- expect(screen.getByRole('cell', { name: /Cell 1/i })).toBeTruthy();
95
- expect(screen.getByRole('cell', { name: /Cell 2/i })).toBeTruthy();
96
- });
97
- it('should render blockquotes correctly', () => {
98
- var _a;
99
- render(_jsx(MarkdownContent, { content: BLOCKQUOTE }));
100
- const quote = screen.getByText(/This is a blockquote/);
101
- expect(quote).toBeVisible();
102
- expect((_a = quote.closest('.pf-v6-c-content--blockquote')) === null || _a === void 0 ? void 0 : _a.tagName).toBe('BLOCKQUOTE');
103
- });
104
- it('should render images when hasNoImages is false', () => {
105
- render(_jsx(MarkdownContent, { content: IMAGE, hasNoImages: false }));
106
- expect(screen.getByRole('img', { name: /Alt text/i })).toBeTruthy();
107
- });
108
- it('should not render images when hasNoImages is true', () => {
109
- render(_jsx(MarkdownContent, { content: IMAGE, hasNoImages: true }));
110
- expect(screen.queryByRole('img', { name: /Alt text/i })).toBeFalsy();
111
- });
112
- it('should disable markdown rendering when isMarkdownDisabled is true', () => {
113
- render(_jsx(MarkdownContent, { content: BOLD_TEXT, isMarkdownDisabled: true }));
114
- expect(screen.getByText('**Bold text**')).toBeTruthy();
115
- });
116
- it('should render text component when isMarkdownDisabled is true and textComponent is provided', () => {
117
- const textComponent = _jsx("div", { "data-testid": "custom-text", children: "Custom text component" });
118
- render(_jsx(MarkdownContent, { content: BOLD_TEXT, isMarkdownDisabled: true, textComponent: textComponent }));
119
- expect(screen.getByTestId('custom-text')).toBeTruthy();
120
- expect(screen.getByText('Custom text component')).toBeTruthy();
121
- });
122
- it('should apply isPrimary prop to elements', () => {
123
- const { container } = render(_jsx(MarkdownContent, { content: INLINE_CODE, isPrimary: true }));
124
- expect(container.querySelector('.pf-m-primary')).toBeTruthy();
125
- });
126
- it('should apply shouldRetainStyles prop to elements', () => {
127
- const { container } = render(_jsx(MarkdownContent, { content: BOLD_TEXT, shouldRetainStyles: true }));
128
- expect(container.querySelector('.pf-m-markdown')).toBeTruthy();
129
- });
130
- it('should pass codeBlockProps to code blocks', () => {
131
- render(_jsx(MarkdownContent, { content: CODE_BLOCK, codeBlockProps: { 'aria-label': 'Custom code block' } }));
132
- expect(screen.getByRole('button', { name: /Custom code block/i })).toBeTruthy();
133
- });
134
- it('should pass tableProps to tables', () => {
135
- render(_jsx(MarkdownContent, { content: TABLE, tableProps: { 'aria-label': 'Custom table label' } }));
136
- expect(screen.getByRole('grid', { name: /Custom table label/i })).toBeTruthy();
137
- });
138
- it('should open links in new tab when openLinkInNewTab is true', () => {
139
- render(_jsx(MarkdownContent, { content: LINK, openLinkInNewTab: true }));
140
- expect(rehypeExternalLinks).toHaveBeenCalledTimes(1);
141
- });
142
- it('should not open links in new tab when openLinkInNewTab is false', () => {
143
- render(_jsx(MarkdownContent, { content: LINK, openLinkInNewTab: false }));
144
- expect(rehypeExternalLinks).not.toHaveBeenCalled();
145
- });
146
- it('should pass linkProps to links', () => __awaiter(void 0, void 0, void 0, function* () {
147
- const onClick = jest.fn();
148
- render(_jsx(MarkdownContent, { content: LINK, linkProps: { onClick } }));
149
- const link = screen.getByRole('link', { name: /PatternFly/i });
150
- link.click();
151
- expect(onClick).toHaveBeenCalledTimes(1);
152
- }));
153
- it('should handle reactMarkdownProps.disallowedElements', () => {
154
- render(_jsx(MarkdownContent, { content: CODE_BLOCK, reactMarkdownProps: { disallowedElements: ['code'] } }));
155
- // Code block should not render when disallowed
156
- expect(screen.queryByRole('button', { name: /Copy code/i })).toBeFalsy();
157
- });
158
- it('should render plain text when no markdown is present', () => {
159
- render(_jsx(MarkdownContent, { content: "Plain text without markdown" }));
160
- expect(screen.getByText('Plain text without markdown')).toBeTruthy();
161
- });
162
- it('should handle empty content', () => {
163
- const { container } = render(_jsx(MarkdownContent, { content: "" }));
164
- expect(container.textContent).toBe('');
165
- });
166
- it('should handle undefined content', () => {
167
- const { container } = render(_jsx(MarkdownContent, {}));
168
- expect(container.textContent).toBe('');
169
- });
170
- it('should render multiple markdown elements together', () => {
171
- const content = `# Heading
172
-
173
- **Bold text** and *italic text*
174
-
175
- \`\`\`javascript
176
- const x = 5;
177
- \`\`\`
178
-
179
- [Link](https://example.com)`;
180
- render(_jsx(MarkdownContent, { content: content }));
181
- expect(screen.getByRole('heading', { name: /Heading/i })).toBeTruthy();
182
- expect(screen.getByText('Bold text')).toBeTruthy();
183
- expect(screen.getByText('italic text')).toBeTruthy();
184
- expect(screen.getByText(/const x = 5/)).toBeTruthy();
185
- expect(screen.getByRole('link', { name: /Link/i })).toBeTruthy();
186
- });
187
- });
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,126 +0,0 @@
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 { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- import '@testing-library/jest-dom';
12
- import { render, screen } from '@testing-library/react';
13
- import userEvent from '@testing-library/user-event';
14
- import CodeBlockMessage from './CodeBlockMessage';
15
- // Mock clipboard API
16
- Object.assign(navigator, {
17
- clipboard: {
18
- writeText: jest.fn()
19
- }
20
- });
21
- describe('CodeBlockMessage', () => {
22
- beforeEach(() => {
23
- jest.clearAllMocks();
24
- });
25
- it('should render inline code for single-line content', () => {
26
- render(_jsx(CodeBlockMessage, { className: "language-javascript", children: "const x = 5;" }));
27
- const code = screen.getByText('const x = 5;');
28
- expect(code.tagName).toBe('CODE');
29
- expect(code).toHaveClass('pf-chatbot__message-inline-code');
30
- });
31
- it('should render code block for multi-line content', () => {
32
- const multilineCode = 'const x = 5;\nconst y = 10;';
33
- const { container } = render(_jsx(CodeBlockMessage, { className: "language-javascript", children: multilineCode }));
34
- const codeElement = container.querySelector('code');
35
- expect(codeElement === null || codeElement === void 0 ? void 0 : codeElement.textContent).toBe(multilineCode);
36
- });
37
- it('should display language label', () => {
38
- const code = 'const x = 5;\nconst y = 10;';
39
- render(_jsx(CodeBlockMessage, { className: "language-javascript", children: code }));
40
- expect(screen.getByText('javascript')).toBeInTheDocument();
41
- });
42
- it('should render copy button', () => {
43
- const code = 'const x = 5;\nconst y = 10;';
44
- render(_jsx(CodeBlockMessage, { children: code }));
45
- expect(screen.getByRole('button', { name: 'Copy code' })).toBeInTheDocument();
46
- });
47
- it('should copy plain string content to clipboard', () => __awaiter(void 0, void 0, void 0, function* () {
48
- const code = 'const x = 5;\nconst y = 10;';
49
- render(_jsx(CodeBlockMessage, { children: code }));
50
- const copyButton = screen.getByRole('button', { name: 'Copy code' });
51
- yield userEvent.click(copyButton);
52
- expect(navigator.clipboard.writeText).toHaveBeenCalledWith(code);
53
- }));
54
- it('should extract text content from React elements when copying', () => __awaiter(void 0, void 0, void 0, function* () {
55
- // Simulate what happens with syntax highlighting - children become React elements
56
- const { container } = render(_jsxs(CodeBlockMessage, { className: "language-javascript", children: [_jsx("span", { className: "hljs-keyword", children: "const" }), " x = 5;", '\n', _jsx("span", { className: "hljs-keyword", children: "const" }), " y = 10;"] }));
57
- const copyButton = screen.getByRole('button', { name: 'Copy code' });
58
- yield userEvent.click(copyButton);
59
- // Should extract actual text content from DOM, not "[object Object]"
60
- const codeElement = container.querySelector('code');
61
- const expectedText = (codeElement === null || codeElement === void 0 ? void 0 : codeElement.textContent) || '';
62
- expect(navigator.clipboard.writeText).toHaveBeenCalledWith(expectedText);
63
- expect(expectedText).not.toContain('[object Object]');
64
- }));
65
- it('should show check icon after copying', () => __awaiter(void 0, void 0, void 0, function* () {
66
- const code = 'const x = 5;\nconst y = 10;';
67
- render(_jsx(CodeBlockMessage, { children: code }));
68
- const copyButton = screen.getByRole('button', { name: 'Copy code' });
69
- yield userEvent.click(copyButton);
70
- // Check icon should be visible (we can verify by checking if CopyIcon is not present)
71
- const svgElement = copyButton.querySelector('svg');
72
- expect(svgElement).toBeInTheDocument();
73
- }));
74
- it('should render expandable section when isExpandable is true', () => {
75
- const code = 'const x = 5;\nconst y = 10;';
76
- render(_jsx(CodeBlockMessage, { isExpandable: true, children: code }));
77
- expect(screen.getByRole('button', { name: 'Show more' })).toBeInTheDocument();
78
- });
79
- it('should toggle expandable section', () => __awaiter(void 0, void 0, void 0, function* () {
80
- const code = 'const x = 5;\nconst y = 10;';
81
- render(_jsx(CodeBlockMessage, { isExpandable: true, children: code }));
82
- const toggleButton = screen.getByRole('button', { name: 'Show more' });
83
- yield userEvent.click(toggleButton);
84
- expect(screen.getByRole('button', { name: 'Show less' })).toBeInTheDocument();
85
- }));
86
- it('should use custom expanded/collapsed text', () => {
87
- const code = 'const x = 5;\nconst y = 10;';
88
- render(_jsx(CodeBlockMessage, { isExpandable: true, expandedText: "Hide", collapsedText: "Reveal", children: code }));
89
- expect(screen.getByRole('button', { name: 'Reveal' })).toBeInTheDocument();
90
- });
91
- it('should pass through expandableSectionProps', () => {
92
- const code = 'const x = 5;\nconst y = 10;';
93
- const { container } = render(_jsx(CodeBlockMessage, { isExpandable: true, expandableSectionProps: { className: 'custom-expandable-class' }, children: code }));
94
- const expandableSection = container.querySelector('.pf-v6-c-expandable-section.custom-expandable-class');
95
- expect(expandableSection).toBeInTheDocument();
96
- });
97
- it('should render custom actions', () => {
98
- const code = 'const x = 5;\nconst y = 10;';
99
- const customAction = _jsx("button", { "aria-label": "Custom action", children: "Custom" });
100
- render(_jsx(CodeBlockMessage, { customActions: customAction, children: code }));
101
- expect(screen.getByRole('button', { name: 'Custom action' })).toBeInTheDocument();
102
- });
103
- it('should apply isPrimary class to inline code', () => {
104
- render(_jsx(CodeBlockMessage, { isPrimary: true, children: "const x = 5;" }));
105
- const code = screen.getByText('const x = 5;');
106
- expect(code).toHaveClass('pf-m-primary');
107
- });
108
- it('should apply shouldRetainStyles class to code block', () => {
109
- const code = 'const x = 5;\nconst y = 10;';
110
- const { container } = render(_jsx(CodeBlockMessage, { shouldRetainStyles: true, children: code }));
111
- const codeBlockDiv = container.querySelector('.pf-chatbot__message-code-block');
112
- expect(codeBlockDiv).toHaveClass('pf-m-markdown');
113
- });
114
- it('should use custom aria-label for copy button', () => {
115
- const code = 'const x = 5;\nconst y = 10;';
116
- render(_jsx(CodeBlockMessage, { "aria-label": "Copy this code", children: code }));
117
- expect(screen.getByRole('button', { name: 'Copy this code' })).toBeInTheDocument();
118
- });
119
- it('should prioritize data-expanded-text over expandedText prop', () => {
120
- const code = 'const x = 5;\nconst y = 10;';
121
- const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(jest.fn());
122
- render(_jsx(CodeBlockMessage, { isExpandable: true, expandedText: "Custom Expanded", "data-expanded-text": "Data Expanded", children: code }));
123
- expect(consoleErrorSpy).toHaveBeenCalledWith('Message:', expect.stringContaining('data-expanded-text or data-collapsed-text will override'));
124
- consoleErrorSpy.mockRestore();
125
- });
126
- });
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';