@patternfly/chatbot 2.2.1 → 6.3.0-prerelease.10

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 (310) hide show
  1. package/dist/cjs/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  2. package/dist/cjs/AttachmentEdit/AttachmentEdit.js +2 -2
  3. package/dist/cjs/Chatbot/Chatbot.d.ts +2 -0
  4. package/dist/cjs/Chatbot/Chatbot.js +2 -2
  5. package/dist/cjs/Chatbot/Chatbot.test.js +4 -0
  6. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
  7. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
  8. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
  9. package/dist/cjs/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  10. package/dist/cjs/ChatbotFooter/ChatbotFooter.js +2 -2
  11. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  12. package/dist/cjs/ChatbotFooter/ChatbotFooter.test.js +5 -0
  13. package/dist/cjs/ChatbotHeader/ChatbotHeader.js +1 -1
  14. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
  15. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
  16. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  17. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
  18. package/dist/cjs/ChatbotHeader/ChatbotHeaderMain.js +1 -1
  19. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  20. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  21. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  22. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  23. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  24. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  25. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  26. package/dist/cjs/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  27. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  28. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  29. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  30. package/dist/cjs/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  31. package/dist/cjs/ChatbotModal/ChatbotModal.d.ts +3 -0
  32. package/dist/cjs/ChatbotModal/ChatbotModal.js +2 -2
  33. package/dist/cjs/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  34. package/dist/cjs/ChatbotModal/ChatbotModal.test.js +28 -0
  35. package/dist/cjs/ChatbotPopover/ChatbotPopover.js +1 -1
  36. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  37. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  38. package/dist/cjs/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  39. package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
  40. package/dist/cjs/CodeModal/CodeModal.js +3 -3
  41. package/dist/cjs/CodeModal/CodeModal.test.d.ts +1 -0
  42. package/dist/cjs/CodeModal/CodeModal.test.js +15 -0
  43. package/dist/cjs/FileDetails/FileDetails.js +1 -1
  44. package/dist/cjs/Message/Message.d.ts +19 -1
  45. package/dist/cjs/Message/Message.js +58 -39
  46. package/dist/cjs/Message/Message.test.js +64 -0
  47. package/dist/cjs/Message/MessageInput.d.ts +18 -0
  48. package/dist/cjs/Message/MessageInput.js +34 -0
  49. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +2 -0
  50. package/dist/cjs/Message/QuickResponse/QuickResponse.js +2 -2
  51. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +2 -0
  52. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +2 -2
  53. package/dist/cjs/Message/UserFeedback/UserFeedback.js +4 -4
  54. package/dist/cjs/Message/UserFeedback/UserFeedback.test.js +4 -0
  55. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  56. package/dist/cjs/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  57. package/dist/cjs/MessageBar/AttachButton.d.ts +1 -0
  58. package/dist/cjs/MessageBar/AttachButton.js +3 -3
  59. package/dist/cjs/MessageBar/AttachButton.test.js +4 -0
  60. package/dist/cjs/MessageBar/MessageBar.d.ts +5 -0
  61. package/dist/cjs/MessageBar/MessageBar.js +14 -13
  62. package/dist/cjs/MessageBar/MessageBar.test.js +13 -0
  63. package/dist/cjs/MessageBar/MicrophoneButton.d.ts +1 -0
  64. package/dist/cjs/MessageBar/MicrophoneButton.js +4 -4
  65. package/dist/cjs/MessageBar/SendButton.d.ts +1 -0
  66. package/dist/cjs/MessageBar/SendButton.js +3 -3
  67. package/dist/cjs/MessageBar/SendButton.test.js +4 -0
  68. package/dist/cjs/MessageBar/StopButton.d.ts +1 -0
  69. package/dist/cjs/MessageBar/StopButton.js +3 -3
  70. package/dist/cjs/MessageBar/StopButton.test.js +4 -0
  71. package/dist/cjs/MessageBox/MessageBox.d.ts +4 -0
  72. package/dist/cjs/MessageBox/MessageBox.js +21 -7
  73. package/dist/cjs/MessageBox/MessageBox.test.js +43 -0
  74. package/dist/cjs/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  75. package/dist/cjs/PreviewAttachment/PreviewAttachment.js +2 -2
  76. package/dist/cjs/Settings/SettingsForm.d.ts +2 -0
  77. package/dist/cjs/Settings/SettingsForm.js +2 -2
  78. package/dist/cjs/Settings/SettingsForm.test.d.ts +1 -1
  79. package/dist/cjs/Settings/SettingsForm.test.js +12 -0
  80. package/dist/cjs/SourcesCard/SourcesCard.d.ts +7 -1
  81. package/dist/cjs/SourcesCard/SourcesCard.js +17 -11
  82. package/dist/cjs/SourcesCard/SourcesCard.test.js +25 -15
  83. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +2 -0
  84. package/dist/cjs/TermsOfUse/TermsOfUse.js +5 -5
  85. package/dist/cjs/tracking/console_tracking_provider.d.ts +4 -5
  86. package/dist/cjs/tracking/console_tracking_provider.js +22 -15
  87. package/dist/cjs/tracking/posthog_tracking_provider.d.ts +2 -2
  88. package/dist/cjs/tracking/posthog_tracking_provider.js +21 -12
  89. package/dist/cjs/tracking/segment_tracking_provider.d.ts +2 -2
  90. package/dist/cjs/tracking/segment_tracking_provider.js +21 -12
  91. package/dist/cjs/tracking/trackingProviderProxy.d.ts +1 -1
  92. package/dist/cjs/tracking/trackingProviderProxy.js +2 -2
  93. package/dist/cjs/tracking/tracking_api.d.ts +1 -1
  94. package/dist/cjs/tracking/tracking_registry.js +46 -12
  95. package/dist/cjs/tracking/tracking_spi.d.ts +15 -5
  96. package/dist/cjs/tracking/tracking_spi.js +9 -0
  97. package/dist/cjs/tracking/umami_tracking_provider.d.ts +6 -2
  98. package/dist/cjs/tracking/umami_tracking_provider.js +66 -22
  99. package/dist/css/main.css +225 -22
  100. package/dist/css/main.css.map +1 -1
  101. package/dist/esm/AttachmentEdit/AttachmentEdit.d.ts +2 -0
  102. package/dist/esm/AttachmentEdit/AttachmentEdit.js +2 -2
  103. package/dist/esm/Chatbot/Chatbot.d.ts +2 -0
  104. package/dist/esm/Chatbot/Chatbot.js +2 -2
  105. package/dist/esm/Chatbot/Chatbot.test.js +4 -0
  106. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +6 -0
  107. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +9 -3
  108. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +27 -0
  109. package/dist/esm/ChatbotFooter/ChatbotFooter.d.ts +1 -0
  110. package/dist/esm/ChatbotFooter/ChatbotFooter.js +2 -2
  111. package/dist/esm/ChatbotFooter/ChatbotFooter.test.d.ts +1 -1
  112. package/dist/esm/ChatbotFooter/ChatbotFooter.test.js +5 -0
  113. package/dist/esm/ChatbotHeader/ChatbotHeader.js +1 -1
  114. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +4 -2
  115. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +20 -6
  116. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.d.ts +1 -1
  117. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.test.js +5 -0
  118. package/dist/esm/ChatbotHeader/ChatbotHeaderMain.js +1 -1
  119. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +3 -2
  120. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +20 -6
  121. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.d.ts +1 -1
  122. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.test.js +5 -0
  123. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.d.ts +1 -0
  124. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.js +3 -3
  125. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.d.ts +1 -1
  126. package/dist/esm/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.js +5 -0
  127. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.d.ts +1 -0
  128. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.js +2 -2
  129. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.d.ts +1 -1
  130. package/dist/esm/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.js +5 -0
  131. package/dist/esm/ChatbotModal/ChatbotModal.d.ts +3 -0
  132. package/dist/esm/ChatbotModal/ChatbotModal.js +2 -2
  133. package/dist/esm/ChatbotModal/ChatbotModal.test.d.ts +1 -0
  134. package/dist/esm/ChatbotModal/ChatbotModal.test.js +23 -0
  135. package/dist/esm/ChatbotPopover/ChatbotPopover.js +1 -1
  136. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.d.ts +1 -0
  137. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.js +3 -3
  138. package/dist/esm/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.js +4 -0
  139. package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
  140. package/dist/esm/CodeModal/CodeModal.js +3 -3
  141. package/dist/esm/CodeModal/CodeModal.test.d.ts +1 -0
  142. package/dist/esm/CodeModal/CodeModal.test.js +10 -0
  143. package/dist/esm/FileDetails/FileDetails.js +1 -1
  144. package/dist/esm/Message/Message.d.ts +19 -1
  145. package/dist/esm/Message/Message.js +58 -39
  146. package/dist/esm/Message/Message.test.js +64 -0
  147. package/dist/esm/Message/MessageInput.d.ts +18 -0
  148. package/dist/esm/Message/MessageInput.js +29 -0
  149. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +2 -0
  150. package/dist/esm/Message/QuickResponse/QuickResponse.js +2 -2
  151. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +2 -0
  152. package/dist/esm/Message/QuickStarts/QuickStartTile.js +2 -2
  153. package/dist/esm/Message/UserFeedback/UserFeedback.js +4 -4
  154. package/dist/esm/Message/UserFeedback/UserFeedback.test.js +4 -0
  155. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.js +4 -4
  156. package/dist/esm/Message/UserFeedback/UserFeedbackComplete.test.js +4 -0
  157. package/dist/esm/MessageBar/AttachButton.d.ts +1 -0
  158. package/dist/esm/MessageBar/AttachButton.js +3 -3
  159. package/dist/esm/MessageBar/AttachButton.test.js +4 -0
  160. package/dist/esm/MessageBar/MessageBar.d.ts +5 -0
  161. package/dist/esm/MessageBar/MessageBar.js +14 -13
  162. package/dist/esm/MessageBar/MessageBar.test.js +13 -0
  163. package/dist/esm/MessageBar/MicrophoneButton.d.ts +1 -0
  164. package/dist/esm/MessageBar/MicrophoneButton.js +4 -4
  165. package/dist/esm/MessageBar/SendButton.d.ts +1 -0
  166. package/dist/esm/MessageBar/SendButton.js +3 -3
  167. package/dist/esm/MessageBar/SendButton.test.js +4 -0
  168. package/dist/esm/MessageBar/StopButton.d.ts +1 -0
  169. package/dist/esm/MessageBar/StopButton.js +3 -3
  170. package/dist/esm/MessageBar/StopButton.test.js +4 -0
  171. package/dist/esm/MessageBox/MessageBox.d.ts +4 -0
  172. package/dist/esm/MessageBox/MessageBox.js +21 -7
  173. package/dist/esm/MessageBox/MessageBox.test.js +44 -1
  174. package/dist/esm/PreviewAttachment/PreviewAttachment.d.ts +2 -0
  175. package/dist/esm/PreviewAttachment/PreviewAttachment.js +2 -2
  176. package/dist/esm/Settings/SettingsForm.d.ts +2 -0
  177. package/dist/esm/Settings/SettingsForm.js +2 -2
  178. package/dist/esm/Settings/SettingsForm.test.d.ts +1 -1
  179. package/dist/esm/Settings/SettingsForm.test.js +12 -0
  180. package/dist/esm/SourcesCard/SourcesCard.d.ts +7 -1
  181. package/dist/esm/SourcesCard/SourcesCard.js +18 -12
  182. package/dist/esm/SourcesCard/SourcesCard.test.js +25 -15
  183. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +2 -0
  184. package/dist/esm/TermsOfUse/TermsOfUse.js +5 -5
  185. package/dist/esm/tracking/console_tracking_provider.d.ts +4 -5
  186. package/dist/esm/tracking/console_tracking_provider.js +22 -15
  187. package/dist/esm/tracking/posthog_tracking_provider.d.ts +2 -2
  188. package/dist/esm/tracking/posthog_tracking_provider.js +21 -12
  189. package/dist/esm/tracking/segment_tracking_provider.d.ts +2 -2
  190. package/dist/esm/tracking/segment_tracking_provider.js +21 -12
  191. package/dist/esm/tracking/trackingProviderProxy.d.ts +1 -1
  192. package/dist/esm/tracking/trackingProviderProxy.js +2 -2
  193. package/dist/esm/tracking/tracking_api.d.ts +1 -1
  194. package/dist/esm/tracking/tracking_registry.js +46 -12
  195. package/dist/esm/tracking/tracking_spi.d.ts +15 -5
  196. package/dist/esm/tracking/tracking_spi.js +8 -1
  197. package/dist/esm/tracking/umami_tracking_provider.d.ts +6 -2
  198. package/dist/esm/tracking/umami_tracking_provider.js +66 -22
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +1 -1
  201. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +18 -14
  202. package/patternfly-docs/content/extensions/chatbot/examples/Messages/AttachmentEdit.tsx +10 -1
  203. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +74 -104
  204. package/patternfly-docs/content/extensions/chatbot/examples/Messages/FileDetailsLabel.tsx +48 -37
  205. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithFeedback.tsx +33 -0
  206. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +34 -0
  207. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +11 -0
  208. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithSources.tsx +71 -13
  209. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +3 -1
  210. package/patternfly-docs/content/extensions/chatbot/examples/Messages/PreviewAttachment.tsx +10 -1
  211. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +80 -104
  212. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +44 -2
  213. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +13 -2
  214. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithActions.tsx +9 -0
  215. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +11 -2
  216. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactSettings.tsx +289 -0
  217. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUseCompact.tsx +136 -0
  218. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +15 -1
  219. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +8 -1
  220. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +6 -3
  221. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +2 -0
  222. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +2 -0
  223. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotCompact.tsx +481 -0
  224. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +2 -0
  225. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -0
  226. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +62 -57
  227. package/patternfly-docs/content/extensions/chatbot/examples/demos/Feedback.tsx +2 -0
  228. package/src/AttachmentEdit/AttachmentEdit.tsx +5 -1
  229. package/src/Chatbot/Chatbot.scss +7 -0
  230. package/src/Chatbot/Chatbot.test.tsx +9 -0
  231. package/src/Chatbot/Chatbot.tsx +4 -1
  232. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +38 -3
  233. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +71 -0
  234. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +23 -2
  235. package/src/ChatbotFooter/ChatbotFooter.scss +5 -0
  236. package/src/ChatbotFooter/ChatbotFooter.test.tsx +10 -0
  237. package/src/ChatbotFooter/ChatbotFooter.tsx +3 -1
  238. package/src/ChatbotHeader/ChatbotHeader.scss +25 -0
  239. package/src/ChatbotHeader/ChatbotHeader.tsx +1 -1
  240. package/src/ChatbotHeader/ChatbotHeaderCloseButton.test.tsx +6 -0
  241. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +12 -6
  242. package/src/ChatbotHeader/ChatbotHeaderMain.tsx +3 -1
  243. package/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx +8 -0
  244. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +10 -5
  245. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.test.tsx +6 -0
  246. package/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx +5 -2
  247. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.test.tsx +10 -0
  248. package/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx +4 -0
  249. package/src/ChatbotModal/ChatbotModal.scss +15 -4
  250. package/src/ChatbotModal/ChatbotModal.test.tsx +59 -0
  251. package/src/ChatbotModal/ChatbotModal.tsx +5 -1
  252. package/src/ChatbotPopover/ChatbotPopover.scss +9 -5
  253. package/src/ChatbotPopover/ChatbotPopover.tsx +1 -1
  254. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss +9 -1
  255. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx +13 -0
  256. package/src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx +13 -2
  257. package/src/ChatbotWelcomePrompt/__snapshots__/ChatbotWelcomePrompt.test.tsx.snap +1 -1
  258. package/src/CodeModal/CodeModal.scss +11 -3
  259. package/src/CodeModal/CodeModal.test.tsx +24 -0
  260. package/src/CodeModal/CodeModal.tsx +6 -2
  261. package/src/FileDetails/FileDetails.tsx +1 -1
  262. package/src/FileDetails/__snapshots__/FileDetails.test.tsx.snap +1 -1
  263. package/src/FileDetailsLabel/__snapshots__/FileDetailsLabel.test.tsx.snap +1 -1
  264. package/src/Message/Message.scss +31 -0
  265. package/src/Message/Message.test.tsx +83 -0
  266. package/src/Message/Message.tsx +121 -56
  267. package/src/Message/MessageInput.tsx +59 -0
  268. package/src/Message/QuickResponse/QuickResponse.tsx +5 -1
  269. package/src/Message/QuickStarts/QuickStartTile.tsx +5 -1
  270. package/src/Message/TextMessage/TextMessage.scss +25 -0
  271. package/src/Message/UserFeedback/UserFeedback.scss +24 -3
  272. package/src/Message/UserFeedback/UserFeedback.test.tsx +13 -0
  273. package/src/Message/UserFeedback/UserFeedback.tsx +4 -2
  274. package/src/Message/UserFeedback/UserFeedbackComplete.test.tsx +4 -0
  275. package/src/Message/UserFeedback/UserFeedbackComplete.tsx +10 -2
  276. package/src/MessageBar/AttachButton.scss +10 -0
  277. package/src/MessageBar/AttachButton.test.tsx +4 -0
  278. package/src/MessageBar/AttachButton.tsx +5 -2
  279. package/src/MessageBar/MessageBar.scss +17 -0
  280. package/src/MessageBar/MessageBar.test.tsx +13 -0
  281. package/src/MessageBar/MessageBar.tsx +23 -8
  282. package/src/MessageBar/MicrophoneButton.scss +10 -0
  283. package/src/MessageBar/MicrophoneButton.tsx +6 -3
  284. package/src/MessageBar/SendButton.scss +10 -0
  285. package/src/MessageBar/SendButton.test.tsx +5 -1
  286. package/src/MessageBar/SendButton.tsx +5 -2
  287. package/src/MessageBar/StopButton.scss +10 -0
  288. package/src/MessageBar/StopButton.test.tsx +5 -1
  289. package/src/MessageBar/StopButton.tsx +5 -2
  290. package/src/MessageBox/MessageBox.scss +6 -0
  291. package/src/MessageBox/MessageBox.test.tsx +45 -1
  292. package/src/MessageBox/MessageBox.tsx +16 -6
  293. package/src/PreviewAttachment/PreviewAttachment.tsx +5 -1
  294. package/src/Settings/Settings.scss +11 -0
  295. package/src/Settings/SettingsForm.test.tsx +17 -0
  296. package/src/Settings/SettingsForm.tsx +12 -2
  297. package/src/SourcesCard/SourcesCard.scss +11 -7
  298. package/src/SourcesCard/SourcesCard.test.tsx +30 -22
  299. package/src/SourcesCard/SourcesCard.tsx +56 -13
  300. package/src/TermsOfUse/TermsOfUse.scss +20 -0
  301. package/src/TermsOfUse/TermsOfUse.tsx +9 -4
  302. package/src/tracking/console_tracking_provider.ts +21 -17
  303. package/src/tracking/posthog_tracking_provider.ts +20 -13
  304. package/src/tracking/segment_tracking_provider.ts +20 -13
  305. package/src/tracking/trackingProviderProxy.ts +2 -2
  306. package/src/tracking/tracking_api.ts +1 -1
  307. package/src/tracking/tracking_registry.ts +46 -13
  308. package/src/tracking/tracking_spi.ts +18 -7
  309. package/src/tracking/umami_tracking_provider.ts +76 -20
  310. package/src/SourcesCard/__snapshots__/SourcesCard.test.tsx.snap +0 -34
@@ -18,17 +18,13 @@ const user_event_1 = __importDefault(require("@testing-library/user-event"));
18
18
  require("@testing-library/jest-dom");
19
19
  const SourcesCard_1 = __importDefault(require("./SourcesCard"));
20
20
  describe('SourcesCard', () => {
21
- it('should render card', () => {
22
- const { container } = (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ link: '' }] }));
23
- expect(container).toMatchSnapshot();
24
- });
25
21
  it('should render card correctly if one source with only a link is passed in', () => {
26
22
  (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ link: '' }] }));
27
23
  expect(react_2.screen.getByText('1 source')).toBeTruthy();
28
24
  expect(react_2.screen.getByText('Source 1')).toBeTruthy();
29
25
  // no buttons or navigation when there is only 1 source
30
26
  expect(react_2.screen.queryByRole('button')).toBeFalsy();
31
- expect(react_2.screen.queryByText('1 of 1')).toBeFalsy();
27
+ expect(react_2.screen.queryByText('1/1')).toBeFalsy();
32
28
  });
33
29
  it('should render card correctly if one source with a title is passed in', () => {
34
30
  (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [{ title: 'How to make an apple pie', link: '' }] }));
@@ -53,7 +49,7 @@ describe('SourcesCard', () => {
53
49
  ] }));
54
50
  expect(react_2.screen.getByText('2 sources')).toBeTruthy();
55
51
  expect(react_2.screen.getByText('How to make an apple pie')).toBeTruthy();
56
- expect(react_2.screen.getByText('1 of 2')).toBeTruthy();
52
+ expect(react_2.screen.getByText('1/2')).toBeTruthy();
57
53
  react_2.screen.getByRole('button', { name: /Go to previous page/i });
58
54
  react_2.screen.getByRole('button', { name: /Go to next page/i });
59
55
  });
@@ -63,12 +59,12 @@ describe('SourcesCard', () => {
63
59
  { title: 'How to make cookies', link: '' }
64
60
  ] }));
65
61
  expect(react_2.screen.getByText('How to make an apple pie')).toBeTruthy();
66
- expect(react_2.screen.getByText('1 of 2')).toBeTruthy();
62
+ expect(react_2.screen.getByText('1/2')).toBeTruthy();
67
63
  expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled();
68
64
  yield user_event_1.default.click(react_2.screen.getByRole('button', { name: /Go to next page/i }));
69
65
  expect(react_2.screen.queryByText('How to make an apple pie')).toBeFalsy();
70
66
  expect(react_2.screen.getByText('How to make cookies')).toBeTruthy();
71
- expect(react_2.screen.getByText('2 of 2')).toBeTruthy();
67
+ expect(react_2.screen.getByText('2/2')).toBeTruthy();
72
68
  expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeEnabled();
73
69
  expect(react_2.screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled();
74
70
  }));
@@ -88,13 +84,6 @@ describe('SourcesCard', () => {
88
84
  expect(react_2.screen.getByRole('button', { name: /Go to previous page/i })).toBeDisabled();
89
85
  expect(react_2.screen.getByRole('button', { name: /Go to next page/i })).toBeDisabled();
90
86
  });
91
- it('should change ofWord appropriately', () => {
92
- (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
93
- { title: 'How to make an apple pie', link: '' },
94
- { title: 'How to make cookies', link: '' }
95
- ], ofWord: 'de' }));
96
- expect(react_2.screen.getByText('1 de 2')).toBeTruthy();
97
- });
98
87
  it('should render navigation aria label appropriately', () => {
99
88
  (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
100
89
  { title: 'How to make an apple pie', link: '' },
@@ -164,4 +153,25 @@ describe('SourcesCard', () => {
164
153
  yield user_event_1.default.click(react_2.screen.getByRole('button', { name: /Go to previous page/i }));
165
154
  expect(spy).toHaveBeenCalledTimes(2);
166
155
  }));
156
+ it('should handle showMore appropriately', () => __awaiter(void 0, void 0, void 0, function* () {
157
+ (0, react_2.render)(react_1.default.createElement(SourcesCard_1.default, { sources: [
158
+ {
159
+ title: 'Getting started with Red Hat OpenShift',
160
+ link: '#',
161
+ body: 'Red Hat OpenShift on IBM Cloud is a managed offering to create your own cluster of compute hosts where you can deploy and manage containerized apps on IBM Cloud ...',
162
+ hasShowMore: true
163
+ },
164
+ {
165
+ title: 'Azure Red Hat OpenShift documentation',
166
+ link: '#',
167
+ body: 'Microsoft Azure Red Hat OpenShift allows you to deploy a production ready Red Hat OpenShift cluster in Azure ...'
168
+ },
169
+ {
170
+ title: 'OKD Documentation: Home',
171
+ link: '#',
172
+ body: 'OKD is a distribution of Kubernetes optimized for continuous application development and multi-tenant deployment. OKD also serves as the upstream code base upon ...'
173
+ }
174
+ ] }));
175
+ expect(react_2.screen.getByRole('region')).toHaveAttribute('class', 'pf-v6-c-expandable-section__content');
176
+ }));
167
177
  });
@@ -28,6 +28,8 @@ export interface TermsOfUseProps extends ModalProps {
28
28
  innerRef?: React.Ref<HTMLDivElement>;
29
29
  /** OuiaID applied to modal */
30
30
  ouiaId?: string;
31
+ /** Sets modal to compact styling. */
32
+ isCompact?: boolean;
31
33
  }
32
34
  export declare const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps>;
33
35
  declare const TermsOfUse: React.ForwardRefExoticComponent<Omit<TermsOfUseProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -23,7 +23,7 @@ const react_core_1 = require("@patternfly/react-core");
23
23
  const Chatbot_1 = require("../Chatbot");
24
24
  const ChatbotModal_1 = __importDefault(require("../ChatbotModal/ChatbotModal"));
25
25
  const TermsOfUseBase = (_a) => {
26
- var { handleModalToggle, isModalOpen, onPrimaryAction, onSecondaryAction, primaryActionBtn = 'Accept', secondaryActionBtn = 'Decline', title = 'Terms of use', image, altText, displayMode = Chatbot_1.ChatbotDisplayMode.default, className, children, innerRef, ouiaId = 'TermsOfUse' } = _a, props = __rest(_a, ["handleModalToggle", "isModalOpen", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "image", "altText", "displayMode", "className", "children", "innerRef", "ouiaId"]);
26
+ var { handleModalToggle, isModalOpen, onPrimaryAction, onSecondaryAction, primaryActionBtn = 'Accept', secondaryActionBtn = 'Decline', title = 'Terms of use', image, altText, displayMode = Chatbot_1.ChatbotDisplayMode.default, className, children, innerRef, ouiaId = 'TermsOfUse', isCompact } = _a, props = __rest(_a, ["handleModalToggle", "isModalOpen", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "image", "altText", "displayMode", "className", "children", "innerRef", "ouiaId", "isCompact"]);
27
27
  const handlePrimaryAction = (_event) => {
28
28
  handleModalToggle(_event);
29
29
  onPrimaryAction && onPrimaryAction(_event);
@@ -31,13 +31,13 @@ const TermsOfUseBase = (_a) => {
31
31
  const handleSecondaryAction = (_event) => {
32
32
  onSecondaryAction(_event);
33
33
  };
34
- const modal = (react_1.default.createElement(ChatbotModal_1.default, Object.assign({ isOpen: isModalOpen, ouiaId: ouiaId, "aria-labelledby": "terms-of-use-title", "aria-describedby": "terms-of-use-modal", className: `pf-chatbot__terms-of-use-modal pf-chatbot__terms-of-use-modal--${displayMode} ${className ? className : ''}`, displayMode: displayMode }, props),
34
+ const modal = (react_1.default.createElement(ChatbotModal_1.default, Object.assign({ isOpen: isModalOpen, ouiaId: ouiaId, "aria-labelledby": "terms-of-use-title", "aria-describedby": "terms-of-use-modal", className: `pf-chatbot__terms-of-use-modal pf-chatbot__terms-of-use-modal--${displayMode} ${isCompact ? 'pf-m-compact' : ''} ${className ? className : ''}`, displayMode: displayMode }, props),
35
35
  react_1.default.createElement("section", { className: `pf-chatbot__terms-of-use--section`, "aria-label": title, tabIndex: -1, ref: innerRef },
36
- react_1.default.createElement(react_core_1.ModalHeader, null,
36
+ react_1.default.createElement(react_core_1.ModalHeader, { className: "pf-chatbot__terms-of-use--modal-header" },
37
37
  react_1.default.createElement("div", { className: "pf-chatbot__terms-of-use--header" },
38
- image && altText && react_1.default.createElement("img", { src: image, className: "pf-chatbot__terms-of-use--image", alt: altText }),
38
+ !isCompact && image && altText && (react_1.default.createElement("img", { src: image, className: "pf-chatbot__terms-of-use--image", alt: altText })),
39
39
  react_1.default.createElement("h1", { className: "pf-chatbot__terms-of-use--title" }, title))),
40
- react_1.default.createElement(react_core_1.ModalBody, null,
40
+ react_1.default.createElement(react_core_1.ModalBody, { className: "pf-chatbot__terms-of-use--modal-body" },
41
41
  react_1.default.createElement(react_core_1.Content, null, children)),
42
42
  react_1.default.createElement(react_core_1.ModalFooter, { className: "pf-chatbot__terms-of-use--footer" },
43
43
  react_1.default.createElement(react_core_1.Button, { isBlock: true, key: "terms-of-use-modal-primary", variant: "primary", onClick: handlePrimaryAction, form: "terms-of-use-form", size: "lg" }, primaryActionBtn),
@@ -1,10 +1,9 @@
1
- import { TrackingSpi } from './tracking_spi';
1
+ import { InitProps, TrackingSpi } from './tracking_spi';
2
2
  import { TrackingApi, TrackingEventProperties } from './tracking_api';
3
3
  export declare class ConsoleTrackingProvider implements TrackingSpi, TrackingApi {
4
+ private verbose;
4
5
  trackPageView(url: string | undefined): void;
5
- registerProvider(): void;
6
- initialize(): void;
7
- identify(userID: string): void;
6
+ initialize(props: InitProps): void;
7
+ identify(userID: string, userProperties?: TrackingEventProperties): void;
8
8
  trackSingleItem(item: string, properties?: TrackingEventProperties): void;
9
- getKey(): string;
10
9
  }
@@ -2,26 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConsoleTrackingProvider = void 0;
4
4
  class ConsoleTrackingProvider {
5
+ constructor() {
6
+ this.verbose = false;
7
+ }
5
8
  trackPageView(url) {
6
- // eslint-disable-next-line no-console
7
- console.log('ConsoleProvider pageView', url);
9
+ if (this.verbose) {
10
+ // eslint-disable-next-line no-console
11
+ console.log('ConsoleProvider pageView ', url);
12
+ }
8
13
  }
9
- // eslint-disable-next-line @typescript-eslint/no-empty-function
10
- registerProvider() { }
11
- initialize() {
12
- // eslint-disable-next-line no-console
13
- console.log('ConsoleProvider initialize');
14
+ initialize(props) {
15
+ this.verbose = props.verbose;
16
+ if (this.verbose) {
17
+ // eslint-disable-next-line no-console
18
+ console.log('ConsoleProvider initialize');
19
+ }
14
20
  }
15
- identify(userID) {
16
- // eslint-disable-next-line no-console
17
- console.log('ConsoleProvider identify', userID);
21
+ identify(userID, userProperties = {}) {
22
+ if (this.verbose) {
23
+ // eslint-disable-next-line no-console
24
+ console.log('ConsoleProvider identify ', userID, userProperties);
25
+ }
18
26
  }
19
27
  trackSingleItem(item, properties) {
20
- // eslint-disable-next-line no-console
21
- console.log('ConsoleProvider: ' + item, properties);
22
- }
23
- getKey() {
24
- return 'console';
28
+ if (this.verbose) {
29
+ // eslint-disable-next-line no-console
30
+ console.log('ConsoleProvider: ' + item, properties);
31
+ }
25
32
  }
26
33
  }
27
34
  exports.ConsoleTrackingProvider = ConsoleTrackingProvider;
@@ -1,9 +1,9 @@
1
1
  import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
2
  import { InitProps, TrackingSpi } from './tracking_spi';
3
3
  export declare class PosthogTrackingProvider implements TrackingSpi, TrackingApi {
4
- getKey(): string;
4
+ private verbose;
5
5
  initialize(props: InitProps): void;
6
- identify(userID: string): void;
6
+ identify(userID: string, userProperties?: TrackingEventProperties): void;
7
7
  trackPageView(url: string | undefined): void;
8
8
  trackSingleItem(item: string, properties?: TrackingEventProperties): void;
9
9
  }
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PosthogTrackingProvider = void 0;
4
4
  const posthog_js_1 = require("posthog-js");
5
5
  class PosthogTrackingProvider {
6
- getKey() {
7
- return 'posthogKey';
6
+ constructor() {
7
+ this.verbose = false;
8
8
  }
9
9
  initialize(props) {
10
- // eslint-disable-next-line no-console
11
- console.log('PosthogProvider initialize');
10
+ this.verbose = props.verbose;
11
+ if (this.verbose) {
12
+ // eslint-disable-next-line no-console
13
+ console.log('PosthogProvider initialize');
14
+ }
12
15
  const posthogKey = props.posthogKey;
13
16
  posthog_js_1.posthog.init(posthogKey, {
14
17
  // eslint-disable-next-line camelcase
@@ -17,20 +20,26 @@ class PosthogTrackingProvider {
17
20
  person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well
18
21
  });
19
22
  }
20
- identify(userID) {
21
- // eslint-disable-next-line no-console
22
- console.log('PosthogProvider userID: ' + userID);
23
- posthog_js_1.posthog.identify(userID);
23
+ identify(userID, userProperties = {}) {
24
+ if (this.verbose) {
25
+ // eslint-disable-next-line no-console
26
+ console.log('PosthogProvider userID: ' + userID);
27
+ }
28
+ posthog_js_1.posthog.identify(userID, userProperties);
24
29
  }
25
30
  trackPageView(url) {
26
- // eslint-disable-next-line no-console
27
- console.log('PostHogProvider url', url);
31
+ if (this.verbose) {
32
+ // eslint-disable-next-line no-console
33
+ console.log('PostHogProvider url ', url);
34
+ }
28
35
  // TODO posthog seems to record that automatically.
29
36
  // How to not clash with this here? Just leave as no-op?
30
37
  }
31
38
  trackSingleItem(item, properties) {
32
- // eslint-disable-next-line no-console
33
- console.log('PosthogProvider: trackSingleItem' + item, properties);
39
+ if (this.verbose) {
40
+ // eslint-disable-next-line no-console
41
+ console.log('PosthogProvider: trackSingleItem ' + item, properties);
42
+ }
34
43
  posthog_js_1.posthog.capture(item, { properties });
35
44
  }
36
45
  }
@@ -2,9 +2,9 @@ import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
2
  import { InitProps, TrackingSpi } from './tracking_spi';
3
3
  export declare class SegmentTrackingProvider implements TrackingSpi, TrackingApi {
4
4
  private analytics;
5
- getKey(): string;
5
+ private verbose;
6
6
  initialize(props: InitProps): void;
7
- identify(userID: string): void;
7
+ identify(userID: string, userProperties?: TrackingEventProperties): void;
8
8
  trackPageView(url: string | undefined): void;
9
9
  trackSingleItem(item: string, properties?: TrackingEventProperties): void;
10
10
  }
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SegmentTrackingProvider = void 0;
4
4
  const analytics_next_1 = require("@segment/analytics-next");
5
5
  class SegmentTrackingProvider {
6
- getKey() {
7
- return 'segmentKey';
6
+ constructor() {
7
+ this.verbose = false;
8
8
  }
9
9
  initialize(props) {
10
- // eslint-disable-next-line no-console
11
- console.log('SegmentProvider initialize');
10
+ this.verbose = props.verbose;
11
+ if (this.verbose) {
12
+ // eslint-disable-next-line no-console
13
+ console.log('SegmentProvider initialize');
14
+ }
12
15
  const segmentKey = props.segmentKey;
13
16
  // We need to create an object here, as ts lint is unhappy otherwise
14
17
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -20,16 +23,20 @@ class SegmentTrackingProvider {
20
23
  integrations: Object.assign({}, integrations)
21
24
  });
22
25
  }
23
- identify(userID) {
24
- // eslint-disable-next-line no-console
25
- console.log('SegmentProvider userID: ' + userID);
26
+ identify(userID, userProperties = {}) {
27
+ if (this.verbose) {
28
+ // eslint-disable-next-line no-console
29
+ console.log('SegmentProvider userID: ' + userID);
30
+ }
26
31
  if (this.analytics) {
27
- this.analytics.identify(userID);
32
+ this.analytics.identify(userID, userProperties);
28
33
  }
29
34
  }
30
35
  trackPageView(url) {
31
- // eslint-disable-next-line no-console
32
- console.log('SegmentProvider url', url);
36
+ if (this.verbose) {
37
+ // eslint-disable-next-line no-console
38
+ console.log('SegmentProvider url ', url);
39
+ }
33
40
  if (this.analytics) {
34
41
  if (url) {
35
42
  this.analytics.page(url);
@@ -40,8 +47,10 @@ class SegmentTrackingProvider {
40
47
  }
41
48
  }
42
49
  trackSingleItem(item, properties) {
43
- // eslint-disable-next-line no-console
44
- console.log('SegmentProvider: trackSingleItem' + item, properties);
50
+ if (this.verbose) {
51
+ // eslint-disable-next-line no-console
52
+ console.log('SegmentProvider: trackSingleItem ' + item, properties);
53
+ }
45
54
  if (this.analytics) {
46
55
  this.analytics.track(item, { properties });
47
56
  }
@@ -2,7 +2,7 @@ import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
2
  declare class TrackingProviderProxy implements TrackingApi {
3
3
  providers: TrackingApi[];
4
4
  constructor(providers: TrackingApi[]);
5
- identify(userID: string): void;
5
+ identify(userID: string, userProperties?: TrackingEventProperties): void;
6
6
  trackSingleItem(eventName: string, properties?: TrackingEventProperties): void;
7
7
  trackPageView(url: string | undefined): void;
8
8
  }
@@ -5,9 +5,9 @@ class TrackingProviderProxy {
5
5
  this.providers = [];
6
6
  this.providers = providers;
7
7
  }
8
- identify(userID) {
8
+ identify(userID, userProperties = {}) {
9
9
  for (const provider of this.providers) {
10
- provider.identify(userID);
10
+ provider.identify(userID, userProperties);
11
11
  }
12
12
  }
13
13
  trackSingleItem(eventName, properties) {
@@ -2,7 +2,7 @@ export interface TrackingEventProperties {
2
2
  [key: string]: string | number | boolean | undefined;
3
3
  }
4
4
  export interface TrackingApi {
5
- identify: (userID: string) => void;
5
+ identify: (userID: string, userProperties: TrackingEventProperties) => void;
6
6
  trackPageView: (url: string | undefined) => void;
7
7
  trackSingleItem: (eventName: string, properties: TrackingEventProperties | undefined) => void;
8
8
  }
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getTrackingProviders = void 0;
7
+ const tracking_spi_1 = require("./tracking_spi");
7
8
  const trackingProviderProxy_1 = __importDefault(require("./trackingProviderProxy"));
8
9
  const console_tracking_provider_1 = require("./console_tracking_provider");
9
10
  const segment_tracking_provider_1 = require("./segment_tracking_provider");
@@ -11,23 +12,56 @@ const posthog_tracking_provider_1 = require("./posthog_tracking_provider");
11
12
  const umami_tracking_provider_1 = require("./umami_tracking_provider");
12
13
  const getTrackingProviders = (initProps) => {
13
14
  const providers = [];
14
- providers.push(new segment_tracking_provider_1.SegmentTrackingProvider());
15
- providers.push(new posthog_tracking_provider_1.PosthogTrackingProvider());
16
- providers.push(new umami_tracking_provider_1.UmamiTrackingProvider());
17
- // TODO dynamically find and register providers
15
+ if (initProps.activeProviders) {
16
+ let tmpProps = initProps.activeProviders;
17
+ // Theoretically we get an array of provider names, but it could also be a CSV string...
18
+ if (!Array.isArray(initProps.activeProviders)) {
19
+ const tmpString = initProps.activeProviders;
20
+ if (tmpString && tmpString.indexOf(',') !== -1) {
21
+ tmpProps = tmpString.split(',');
22
+ }
23
+ else {
24
+ tmpProps = [tmpString];
25
+ }
26
+ }
27
+ tmpProps.forEach((provider) => {
28
+ switch (tracking_spi_1.Providers[provider]) {
29
+ case tracking_spi_1.Providers.Segment:
30
+ providers.push(new segment_tracking_provider_1.SegmentTrackingProvider());
31
+ break;
32
+ case tracking_spi_1.Providers.Umami:
33
+ providers.push(new umami_tracking_provider_1.UmamiTrackingProvider());
34
+ break;
35
+ case tracking_spi_1.Providers.Posthog:
36
+ providers.push(new posthog_tracking_provider_1.PosthogTrackingProvider());
37
+ break;
38
+ case tracking_spi_1.Providers.Console:
39
+ providers.push(new console_tracking_provider_1.ConsoleTrackingProvider());
40
+ break;
41
+ case tracking_spi_1.Providers.None: // Do nothing, just a placeholder
42
+ break;
43
+ default:
44
+ if (providers.length > 1) {
45
+ if (initProps.verbose) {
46
+ // eslint-disable-next-line no-console
47
+ console.error("Unknown provider '" + provider);
48
+ }
49
+ }
50
+ break;
51
+ }
52
+ });
53
+ }
18
54
  // Initialize them
19
- const enabledProviders = [];
20
55
  for (const provider of providers) {
21
- const key = provider.getKey();
22
- if (Object.keys(initProps).indexOf(key) > -1) {
56
+ try {
23
57
  provider.initialize(initProps);
24
- enabledProviders.push(provider);
58
+ }
59
+ catch (e) {
60
+ // eslint-disable-next-line no-console
61
+ console.error(e);
25
62
  }
26
63
  }
27
- // Add the console provider
28
- const consoleTrackingProvider = new console_tracking_provider_1.ConsoleTrackingProvider();
29
- enabledProviders.push(consoleTrackingProvider); // TODO noop- provider?
30
- return new trackingProviderProxy_1.default(enabledProviders);
64
+ return new trackingProviderProxy_1.default(providers);
31
65
  };
32
66
  exports.getTrackingProviders = getTrackingProviders;
33
67
  exports.default = exports.getTrackingProviders;
@@ -1,9 +1,19 @@
1
- import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
- export interface InitProps {
3
- [key: string]: string | number | boolean;
1
+ import { TrackingApi } from './tracking_api';
2
+ export declare enum Providers {
3
+ None = 0,
4
+ Segment = 1,
5
+ Umami = 2,
6
+ Posthog = 3,
7
+ Console = 4
8
+ }
9
+ export type ProviderAsString = keyof typeof Providers;
10
+ export interface BaseProps {
11
+ verbose: boolean;
12
+ activeProviders: [ProviderAsString];
4
13
  }
14
+ export type InitProps = {
15
+ [key: string]: string | number | boolean;
16
+ } & BaseProps;
5
17
  export interface TrackingSpi extends TrackingApi {
6
- getKey: () => string;
7
18
  initialize: (props: InitProps) => void;
8
- trackSingleItem: (item: string, properties?: TrackingEventProperties) => void;
9
19
  }
@@ -1,2 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Providers = void 0;
4
+ var Providers;
5
+ (function (Providers) {
6
+ Providers[Providers["None"] = 0] = "None";
7
+ Providers[Providers["Segment"] = 1] = "Segment";
8
+ Providers[Providers["Umami"] = 2] = "Umami";
9
+ Providers[Providers["Posthog"] = 3] = "Posthog";
10
+ Providers[Providers["Console"] = 4] = "Console";
11
+ })(Providers || (exports.Providers = Providers = {}));
@@ -6,9 +6,13 @@ declare global {
6
6
  }
7
7
  }
8
8
  export declare class UmamiTrackingProvider implements TrackingSpi, TrackingApi {
9
- getKey(): string;
9
+ private verbose;
10
+ private websiteId;
11
+ private queue;
10
12
  initialize(props: InitProps): void;
11
- identify(userID: string): void;
13
+ identify(userID: string, userProperties?: TrackingEventProperties): void;
12
14
  trackPageView(url: string | undefined): void;
13
15
  trackSingleItem(item: string, properties?: TrackingEventProperties): void;
16
+ flushQueue(): void;
17
+ log(msg: string): void;
14
18
  }
@@ -2,43 +2,87 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UmamiTrackingProvider = void 0;
4
4
  class UmamiTrackingProvider {
5
- getKey() {
6
- return 'umamiKey';
5
+ constructor() {
6
+ this.verbose = false;
7
+ this.queue = [];
7
8
  }
8
9
  initialize(props) {
9
- // eslint-disable-next-line no-console
10
- console.log('UmamiProvider initialize');
11
- const umamiKey = props.umamiKey;
10
+ this.verbose = props.verbose;
11
+ this.log('UmamiProvider initialize');
12
+ this.websiteId = props.umamiKey;
12
13
  const hostUrl = props.umamiHostUrl;
13
14
  const script = document.createElement('script');
14
15
  script.src = hostUrl + '/script.js';
15
16
  script.async = true;
16
17
  script.defer = true;
17
18
  // Configure Umami properties
18
- script.setAttribute('data-website-id', umamiKey);
19
- script.setAttribute('data-domains', 'localhost'); // TODO ?
19
+ script.setAttribute('data-website-id', this.websiteId);
20
+ script.setAttribute('data-host-url', hostUrl);
20
21
  script.setAttribute('data-auto-track', 'false');
21
- script.setAttribute('data-host-url', hostUrl); // TODO ?
22
- script.setAttribute('data-exclude-search', 'false'); // TODO ?
22
+ script.setAttribute('data-exclude-search', 'false');
23
+ // Now get from config, which may override some of the above.
24
+ const UMAMI_PREFIX = 'umami-';
25
+ for (const prop in props) {
26
+ if (prop.startsWith(UMAMI_PREFIX)) {
27
+ const att = 'data-' + prop.substring(UMAMI_PREFIX.length);
28
+ const val = props[prop];
29
+ script.setAttribute(att, String(val));
30
+ }
31
+ }
32
+ script.onload = () => {
33
+ this.log('UmamiProvider script loaded');
34
+ this.flushQueue();
35
+ };
23
36
  document.body.appendChild(script);
24
37
  }
25
- identify(userID) {
26
- var _a;
27
- // eslint-disable-next-line no-console
28
- console.log('UmamiProvider userID: ' + userID);
29
- (_a = window.umami) === null || _a === void 0 ? void 0 : _a.identify({ userID });
38
+ identify(userID, userProperties = {}) {
39
+ this.log('UmamiProvider userID: ' + userID + ' => ' + JSON.stringify(userProperties));
40
+ if (window.umami) {
41
+ window.umami.identify({ userID, userProperties });
42
+ }
43
+ else {
44
+ this.queue.push({ what: 'i', name: userID, payload: userProperties });
45
+ }
30
46
  }
31
47
  trackPageView(url) {
32
- var _a;
33
- // eslint-disable-next-line no-console
34
- console.log('UmamiProvider url', url);
35
- (_a = window.umami) === null || _a === void 0 ? void 0 : _a.track({ url });
48
+ this.log('UmamiProvider url ' + url);
49
+ if (window.umami) {
50
+ window.umami.track({ url, website: this.websiteId });
51
+ }
52
+ else {
53
+ this.queue.push({ what: 'p', name: String(url) });
54
+ }
36
55
  }
37
56
  trackSingleItem(item, properties) {
38
- var _a;
39
- // eslint-disable-next-line no-console
40
- console.log('UmamiProvider: trackSingleItem' + item, properties);
41
- (_a = window.umami) === null || _a === void 0 ? void 0 : _a.track(item, properties);
57
+ this.log('UmamiProvider: trackSingleItem ' + item + JSON.stringify(properties));
58
+ if (window.umami) {
59
+ window.umami.track(item, properties);
60
+ }
61
+ else {
62
+ this.queue.push({ what: 't', name: item, payload: properties });
63
+ }
64
+ }
65
+ flushQueue() {
66
+ for (const item of this.queue) {
67
+ this.log('Queue flush ' + JSON.stringify(item));
68
+ switch (item.what) {
69
+ case 'i':
70
+ this.identify(item.name, item.payload);
71
+ break;
72
+ case 't':
73
+ this.trackSingleItem(item.name, item.payload);
74
+ break;
75
+ case 'p':
76
+ this.trackPageView(item.name);
77
+ break;
78
+ }
79
+ }
80
+ }
81
+ log(msg) {
82
+ if (this.verbose) {
83
+ // eslint-disable-next-line no-console
84
+ console.debug('UmamiProvider: ', msg);
85
+ }
42
86
  }
43
87
  }
44
88
  exports.UmamiTrackingProvider = UmamiTrackingProvider;