@patternfly/chatbot 2.2.0-prerelease.30 → 2.2.0-prerelease.32

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 (103) hide show
  1. package/dist/cjs/Chatbot/Chatbot.d.ts +2 -1
  2. package/dist/cjs/Chatbot/Chatbot.js +1 -0
  3. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
  4. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
  5. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
  6. package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +15 -7
  7. package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
  8. package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +26 -0
  9. package/dist/cjs/Message/Message.d.ts +3 -1
  10. package/dist/cjs/Message/Message.js +4 -3
  11. package/dist/cjs/Message/Message.test.js +25 -0
  12. package/dist/cjs/index.d.ts +2 -0
  13. package/dist/cjs/index.js +4 -1
  14. package/dist/cjs/tracking/console_tracking_provider.d.ts +10 -0
  15. package/dist/cjs/tracking/console_tracking_provider.js +27 -0
  16. package/dist/cjs/tracking/index.d.ts +2 -0
  17. package/dist/cjs/tracking/index.js +23 -0
  18. package/dist/cjs/tracking/posthog_tracking_provider.d.ts +9 -0
  19. package/dist/cjs/tracking/posthog_tracking_provider.js +37 -0
  20. package/dist/cjs/tracking/segment_tracking_provider.d.ts +10 -0
  21. package/dist/cjs/tracking/segment_tracking_provider.js +50 -0
  22. package/dist/cjs/tracking/trackingProviderProxy.d.ts +9 -0
  23. package/dist/cjs/tracking/trackingProviderProxy.js +24 -0
  24. package/dist/cjs/tracking/tracking_api.d.ts +8 -0
  25. package/dist/cjs/tracking/tracking_api.js +2 -0
  26. package/dist/cjs/tracking/tracking_registry.d.ts +4 -0
  27. package/dist/cjs/tracking/tracking_registry.js +33 -0
  28. package/dist/cjs/tracking/tracking_spi.d.ts +9 -0
  29. package/dist/cjs/tracking/tracking_spi.js +2 -0
  30. package/dist/cjs/tracking/umami_tracking_provider.d.ts +14 -0
  31. package/dist/cjs/tracking/umami_tracking_provider.js +44 -0
  32. package/dist/css/main.css +28 -3
  33. package/dist/css/main.css.map +1 -1
  34. package/dist/dynamic/tracking/package.json +1 -0
  35. package/dist/esm/Chatbot/Chatbot.d.ts +2 -1
  36. package/dist/esm/Chatbot/Chatbot.js +1 -0
  37. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
  38. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
  39. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
  40. package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +15 -7
  41. package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
  42. package/dist/esm/Message/ErrorMessage/ErrorMessage.js +21 -0
  43. package/dist/esm/Message/Message.d.ts +3 -1
  44. package/dist/esm/Message/Message.js +4 -3
  45. package/dist/esm/Message/Message.test.js +25 -0
  46. package/dist/esm/index.d.ts +2 -0
  47. package/dist/esm/index.js +2 -0
  48. package/dist/esm/tracking/console_tracking_provider.d.ts +10 -0
  49. package/dist/esm/tracking/console_tracking_provider.js +23 -0
  50. package/dist/esm/tracking/index.d.ts +2 -0
  51. package/dist/esm/tracking/index.js +2 -0
  52. package/dist/esm/tracking/posthog_tracking_provider.d.ts +9 -0
  53. package/dist/esm/tracking/posthog_tracking_provider.js +33 -0
  54. package/dist/esm/tracking/segment_tracking_provider.d.ts +10 -0
  55. package/dist/esm/tracking/segment_tracking_provider.js +46 -0
  56. package/dist/esm/tracking/trackingProviderProxy.d.ts +9 -0
  57. package/dist/esm/tracking/trackingProviderProxy.js +22 -0
  58. package/dist/esm/tracking/tracking_api.d.ts +8 -0
  59. package/dist/esm/tracking/tracking_api.js +1 -0
  60. package/dist/esm/tracking/tracking_registry.d.ts +4 -0
  61. package/dist/esm/tracking/tracking_registry.js +26 -0
  62. package/dist/esm/tracking/tracking_spi.d.ts +9 -0
  63. package/dist/esm/tracking/tracking_spi.js +1 -0
  64. package/dist/esm/tracking/umami_tracking_provider.d.ts +14 -0
  65. package/dist/esm/tracking/umami_tracking_provider.js +40 -0
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +5 -3
  68. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +3 -0
  69. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +219 -0
  70. package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -1
  71. package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +24 -1
  72. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +13 -0
  73. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +37 -24
  74. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +453 -0
  75. package/patternfly-docs/content/extensions/chatbot/img/analytics-example.svg +118 -0
  76. package/patternfly-docs/content/extensions/chatbot/img/chatbot-analytics.svg +51 -0
  77. package/patternfly-docs/content/extensions/chatbot/img/posthog.svg +30 -0
  78. package/patternfly-docs/content/extensions/chatbot/img/segment.svg +36 -0
  79. package/patternfly-docs/content/extensions/chatbot/img/umami.svg +30 -0
  80. package/src/Chatbot/Chatbot.scss +19 -0
  81. package/src/Chatbot/Chatbot.tsx +2 -1
  82. package/src/ChatbotContent/ChatbotContent.scss +1 -0
  83. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +2 -0
  84. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +1 -1
  85. package/src/ChatbotFooter/ChatbotFooter.scss +9 -0
  86. package/src/ChatbotHeader/ChatbotHeader.scss +2 -1
  87. package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +23 -7
  88. package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +7 -2
  89. package/src/Message/ErrorMessage/ErrorMessage.tsx +14 -0
  90. package/src/Message/Message.test.tsx +32 -0
  91. package/src/Message/Message.tsx +50 -41
  92. package/src/MessageBar/MessageBar.scss +3 -3
  93. package/src/MessageBox/MessageBox.scss +1 -0
  94. package/src/index.ts +3 -0
  95. package/src/tracking/console_tracking_provider.ts +30 -0
  96. package/src/tracking/index.ts +3 -0
  97. package/src/tracking/posthog_tracking_provider.ts +42 -0
  98. package/src/tracking/segment_tracking_provider.ts +62 -0
  99. package/src/tracking/trackingProviderProxy.ts +28 -0
  100. package/src/tracking/tracking_api.ts +11 -0
  101. package/src/tracking/tracking_registry.ts +33 -0
  102. package/src/tracking/tracking_spi.ts +14 -0
  103. package/src/tracking/umami_tracking_provider.ts +54 -0
package/dist/css/main.css CHANGED
@@ -144,6 +144,21 @@
144
144
  border-radius: unset;
145
145
  }
146
146
 
147
+ .pf-chatbot--drawer {
148
+ inset-block-end: 0;
149
+ inset-inline-end: 0;
150
+ padding: 0;
151
+ width: 100%;
152
+ height: 100%;
153
+ border-radius: 0;
154
+ box-shadow: none;
155
+ border-left: var(--pf-t--global--border--width--divider--default) solid;
156
+ border-color: var(--pf-t--global--border--color--default);
157
+ }
158
+ .pf-chatbot--drawer .pf-chatbot-container {
159
+ border-radius: var(--pf-t--global--border--radius--sharp);
160
+ }
161
+
147
162
  .pf-chatbot__alert {
148
163
  position: sticky;
149
164
  top: var(--pf-t--global--spacer--lg);
@@ -164,6 +179,7 @@
164
179
  }
165
180
 
166
181
  @media screen and (min-width: 64rem) {
182
+ .pf-chatbot--drawer .pf-chatbot__content,
167
183
  .pf-chatbot--fullscreen .pf-chatbot__content,
168
184
  .pf-chatbot--embedded .pf-chatbot__content {
169
185
  display: flex;
@@ -284,9 +300,11 @@
284
300
  height: 100vh;
285
301
  }
286
302
 
303
+ .pf-chatbot--drawer .pf-chatbot__history.pf-v6-c-drawer,
287
304
  .pf-chatbot--fullscreen .pf-chatbot__history.pf-v6-c-drawer {
288
305
  height: 100vh;
289
306
  }
307
+ .pf-chatbot--drawer .pf-chatbot__history.pf-v6-c-drawer .pf-v6-c-drawer__body,
290
308
  .pf-chatbot--fullscreen .pf-chatbot__history.pf-v6-c-drawer .pf-v6-c-drawer__body {
291
309
  width: 100%;
292
310
  }
@@ -303,6 +321,7 @@
303
321
  }
304
322
 
305
323
  .pf-chatbot--docked .pf-chatbot__history .pf-chatbot__drawer-backdrop,
324
+ .pf-chatbot--drawer .pf-chatbot__history .pf-chatbot__drawer-backdrop,
306
325
  .pf-chatbot--embedded .pf-chatbot__history .pf-chatbot__drawer-backdrop,
307
326
  .pf-chatbot--fullscreen .pf-chatbot__history .pf-chatbot__drawer-backdrop {
308
327
  border-radius: unset;
@@ -367,6 +386,10 @@
367
386
  padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
368
387
  }
369
388
 
389
+ .pf-chatbot--drawer .pf-chatbot__footer-container {
390
+ padding: var(--pf-t--global--spacer--sm) var(--pf-t--global--spacer--lg);
391
+ }
392
+
370
393
  .pf-chatbot__header-container {
371
394
  display: grid;
372
395
  }
@@ -423,6 +446,7 @@
423
446
  display: none;
424
447
  }
425
448
  }
449
+ .pf-chatbot--drawer .pf-chatbot__header,
426
450
  .pf-chatbot--docked .pf-chatbot__header {
427
451
  background-color: var(--pf-t--chatbot--background);
428
452
  }
@@ -1610,9 +1634,9 @@
1610
1634
  }
1611
1635
 
1612
1636
  .pf-chatbot__message-textarea {
1613
- --pf-v6-c-form-control--before--BorderStyle: none;
1614
- --pf-v6-c-form-control--after--BorderStyle: none;
1615
- resize: none;
1637
+ --pf-v6-c-form-control--before--BorderStyle: none !important;
1638
+ --pf-v6-c-form-control--after--BorderStyle: none !important;
1639
+ resize: none !important;
1616
1640
  background-color: transparent;
1617
1641
  font-size: var(--pf-t--global--font--size--md);
1618
1642
  line-height: 1.5rem;
@@ -1725,6 +1749,7 @@
1725
1749
 
1726
1750
  @media screen and (min-width: 64rem) {
1727
1751
  .pf-chatbot--embedded .pf-chatbot__messagebox,
1752
+ .pf-chatbot--drawer .pf-chatbot__messagebox,
1728
1753
  .pf-chatbot--fullscreen .pf-chatbot__messagebox {
1729
1754
  max-width: 60rem;
1730
1755
  width: 100%;
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ImageMessage/ImageMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/TableMessage/TableMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AC1GF;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAGI;AAAA;IACE;IACA;;;ACpBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AAQF;EACE;;AACA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AASF;AAAA;AAAA;EACE;;;AAKN;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACvMF;EACE;;AAEA;EACE;EACA;;;ACHJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EAGI;AAAA;IACE;;EACA;AAAA;IACE;;EAGJ;AAAA;IACE;IACA;IACA;;;AASJ;EACE;;;AC5CJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AASJ;EACE;;;AAOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAOJ;EACE;;;AAOJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;ACvIF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;;AAEF;EACE;;;AAOJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAGJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAOJ;EACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAQE;EACE;;;AAQN;EACE;;;ACvFA;EAA0B;;AAMxB;EAAM;;AACN;EAAuB;;AACvB;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACnBN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;;AC3BF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;AC1CN;EACE;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;;AASA;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AClFF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AAEA;EALF;IAMI;;;AAGF;EACE;;AAEA;EAHF;IAII;;;;AAKN;EACE;;AAEA;EACE;;AAGF;EACE;;AAIA;EADF;IAEI;;;;AAIN;EACE;;AAEA;EAHF;IAII;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;;;;ACrEJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;ACvBF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;EAEE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;;AAGF;EACE;;;AAIJ;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAKF;EACE;;;AAMF;AAAA;EACE;;;AC/DJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EANF;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;EACA;;;AAME;EADF;IAEI;IACA;IACA;;EAEA;IACE;;;;AChDR;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AC7FF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AC9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;ADrDN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AEhFF;EACE;EACA;EACA;EACA;EAGA;;;ADDE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AEpDN;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAKF;AAAA;EAEE;EACA;EACA;;;ACtBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;ALjBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AMjDN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAKA;EACE;;;AAOF;EACE;;;ACnBJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EAPF;IAQI;;;AAKF;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;AC7BJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AChDF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AC5BR;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AC1CJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;EAEE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC/CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;ACrBR;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;ACxFN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AC9CJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EAVF;IAWI;;;AAGF;EAdF;IAeI;;;;AAIJ;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAGI;AAAA;IACE;IACA;;;ADtCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AEhDJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1BF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;ACrER;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AC9BA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;IACE;IACA;;;;AAKN;AAAA;EAGE;;AAGE;AAAA;EACE;;AAIJ;AAAA;EACE;;;AC5BJ;EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASA;EACA;EAEA;EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EAKA;EACA;EACA;EAEA;EAEA;;;AAMF;EACE;EACA;EAEA;EAEA;EACA;;;AAGF;EACE;EACA","file":"main.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../src/AttachMenu/AttachMenu.scss","../../src/Chatbot/Chatbot.scss","../../src/ChatbotAlert/ChatbotAlert.scss","../../src/ChatbotContent/ChatbotContent.scss","../../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss","../../src/ChatbotFooter/ChatbotFootnote.scss","../../src/ChatbotFooter/ChatbotFooter.scss","../../src/ChatbotHeader/ChatbotHeader.scss","../../src/ChatbotModal/ChatbotModal.scss","../../src/ChatbotPopover/ChatbotPopover.scss","../../src/ChatbotToggle/ChatbotToggle.scss","../../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.scss","../../src/CodeModal/CodeModal.scss","../../src/Compare/Compare.scss","../../src/FileDetails/FileDetails.scss","../../src/FileDetailsLabel/FileDetailsLabel.scss","../../src/FileDropZone/FileDropZone.scss","../../src/Message/Message.scss","../../src/Message/MessageLoading.scss","../../src/Message/CodeBlockMessage/CodeBlockMessage.scss","../../src/Message/TextMessage/TextMessage.scss","../../src/Message/ImageMessage/ImageMessage.scss","../../src/Message/ListMessage/ListMessage.scss","../../src/Message/TableMessage/TableMessage.scss","../../src/Message/QuickStarts/QuickStartTile.scss","../../src/Message/QuickResponse/QuickResponse.scss","../../src/Message/UserFeedback/UserFeedback.scss","../../src/MessageBar/AttachButton.scss","../../src/MessageBar/MicrophoneButton.scss","../../src/MessageBar/SendButton.scss","../../src/MessageBar/StopButton.scss","../../src/MessageBar/MessageBar.scss","../../src/MessageBox/JumpButton.scss","../../src/MessageBox/MessageBox.scss","../../src/ResponseActions/ResponseActions.scss","../../src/Settings/Settings.scss","../../src/SourcesCard/SourcesCard.scss","../../src/SourceDetailsMenuItem/SourceDetailsMenuItem.scss","../../src/TermsOfUse/TermsOfUse.scss","../../src/main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;AACE;AAsBA;AASA;;AA9BA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;AACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;;AAGF;EACE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKF;EAvBF;IAwBI;IACA;;;AAIF;EA7BF;IA8BI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAXF;IAYI;;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIF;EAdF;IAeI;;;;AAIJ;EACE;;;AAGF;AAAA;AAAA;EAGE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AC5HJ;EACE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;;AAGA;EARF;IASI;;;;AAOJ;EAII;AAAA;AAAA;IACE;IACA;;;ACrBJ;EACE;EACA;;AAIF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKA;EACE;;;AASJ;EACE;;;AASF;AAAA;EACE;;AACA;AAAA;EACE;;;AASJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AAUF;AAAA;AAAA;AAAA;EACE;;;AAKN;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACzMF;EACE;;AAEA;EACE;EACA;;;ACHJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAMF;EAGI;AAAA;IACE;;EACA;AAAA;IACE;;EAGJ;AAAA;IACE;IACA;IACA;;;AASJ;EACE;;;AAQF;EACE;;;ACrDJ;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAQN;EAGI;AAAA;IACE;;EAEF;AAAA;IACE;;;AAUJ;AAAA;EACE;;;AAOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAOJ;EACE;;;AAOJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;ACxIF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;;AAEF;EACE;;;AAOJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAGJ;EACE;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;;AAOJ;EACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAQE;EACE;;;AAQN;EACE;;;ACvFA;EAA0B;;AAMxB;EAAM;;AACN;EAAuB;;AACvB;EACE;;AAIF;EACE;EACA;;AAEF;EACE;;;ACnBN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;;AC3BF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAOJ;EAIM;AAAA;IACE;IACA;;;AC1CN;EACE;EACA;EACA;EACA;;AAEF;EACE;AACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;;AASA;EACE;EACA;;;AAKN;EACE;;;AAGF;EACE;;;AClFF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;AAEA;EACE;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AAEA;EALF;IAMI;;;AAGF;EACE;;AAEA;EAHF;IAII;;;;AAKN;EACE;;AAEA;EACE;;AAGF;EACE;;AAIA;EADF;IAEI;;;;AAIN;EACE;;AAEA;EAHF;IAII;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;;;;ACrEJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;ACvBF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;EAEE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;;AAGF;EACE;;;AAIJ;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAKF;EACE;;;AAMF;AAAA;EACE;;;AC/DJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EANF;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;EACA;;;AAME;EADF;IAEI;IACA;IACA;;EAEA;IACE;;;;AChDR;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;;AAEF;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;;AC7FF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AC9CN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1EE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;ADrDN;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EAEE;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;;;AEhFF;EACE;EACA;EACA;EACA;EAGA;;;ADDE;EACE;;;AAMN;EACE;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AEpDN;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;;AAKF;AAAA;EAEE;EACA;EACA;;;ACtBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;ALjBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAEE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;IACE;;EAEF;IAEE;;;;AMjDN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;;;AAKA;EACE;;;AAOF;EACE;;;ACnBJ;EACE;;AAEA;EAHF;IAII;;;AAGF;EAPF;IAQI;;;AAKF;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;AC7BJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AChDF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKA;EACE;;AAIJ;EAEE;;AAEA;EACE;;AAKA;EACE;;;AC5BR;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAMA;EACE;;AAKJ;EACE;EACA;;AAGA;EACE;;AAKA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AC1CJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;EAEE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC/CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAKA;EACE;;;ACrBR;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;IACE;IACA;;;AAKF;EACE;IACE;IACA;;;;ACxFN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AC9CJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EAVF;IAWI;;;AAGF;EAdF;IAeI;;;;AAIJ;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAII;AAAA;AAAA;IACE;IACA;;;ADvCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EA3CF;IA4CI;;;;AEhDJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;;AAKN;EACE;EACA;;;AC1BF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;;AAGJ;EACE;EACA;;AAKA;AAAA;EACE;;AAGJ;EACE;;;ACrER;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGA;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AC9BA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;IACE;IACA;;;;AAKN;AAAA;EAGE;;AAGE;AAAA;EACE;;AAIJ;AAAA;EACE;;;AC5BJ;EAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASA;EACA;EAEA;EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EAKA;EACA;EACA;EAEA;EAEA;;;AAMF;EACE;EACA;EAEA;EAEA;EACA;;;AAGF;EACE;EACA","file":"main.css"}
@@ -0,0 +1 @@
1
+ {"main":"../../cjs/tracking/index.js","module":"../../esm/tracking/index.js","typings":"../../esm/tracking/index.d.ts"}
@@ -17,7 +17,8 @@ export declare enum ChatbotDisplayMode {
17
17
  default = "default",
18
18
  embedded = "embedded",
19
19
  docked = "docked",
20
- fullscreen = "fullscreen"
20
+ fullscreen = "fullscreen",
21
+ drawer = "drawer"
21
22
  }
22
23
  declare const Chatbot: React.ForwardRefExoticComponent<ChatbotProps & React.RefAttributes<HTMLDivElement>>;
23
24
  export default Chatbot;
@@ -20,6 +20,7 @@ export var ChatbotDisplayMode;
20
20
  ChatbotDisplayMode["embedded"] = "embedded";
21
21
  ChatbotDisplayMode["docked"] = "docked";
22
22
  ChatbotDisplayMode["fullscreen"] = "fullscreen";
23
+ ChatbotDisplayMode["drawer"] = "drawer";
23
24
  })(ChatbotDisplayMode || (ChatbotDisplayMode = {}));
24
25
  const ChatbotBase = (_a) => {
25
26
  var { children, displayMode = ChatbotDisplayMode.default, isVisible = true, className, innerRef, ariaLabel } = _a, props = __rest(_a, ["children", "displayMode", "isVisible", "className", "innerRef", "ariaLabel"]);
@@ -82,7 +82,7 @@ export const ChatbotConversationHistoryNav = (_a) => {
82
82
  React.createElement(DrawerContent, Object.assign({ panelContent: renderPanelContent() }, drawerContentProps),
83
83
  React.createElement(DrawerContentBody, Object.assign({}, drawerContentBodyProps),
84
84
  React.createElement(React.Fragment, null,
85
- React.createElement("div", { className: `${isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
85
+ React.createElement("div", { className: `${isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked || displayMode === ChatbotDisplayMode.drawer) ? 'pf-v6-c-backdrop pf-chatbot__drawer-backdrop' : undefined} ` }),
86
86
  drawerContent)))));
87
87
  };
88
88
  export default ChatbotConversationHistoryNav;
@@ -11,8 +11,10 @@ export interface ChatbotHeaderTitleProps {
11
11
  showOnFullScreen?: React.ReactNode | string;
12
12
  /** Content to display on docked screen */
13
13
  showOnDocked?: React.ReactNode | string;
14
- /** Content to display on overlay screen */
14
+ /** Content to display on embedded screen */
15
15
  showOnEmbedded?: React.ReactNode | string;
16
+ /** Content to display in drawer mode */
17
+ showOnDrawer?: React.ReactNode | string;
16
18
  /** Content to display by default; this will be shown if a case is not explicitly set */
17
19
  showOnDefault?: React.ReactNode | string;
18
20
  }
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { SplitItem } from '@patternfly/react-core';
3
3
  import { ChatbotDisplayMode } from '../Chatbot/Chatbot';
4
- export const ChatbotHeaderTitle = ({ className, children, displayMode, showOnFullScreen, showOnDocked, showOnEmbedded, showOnDefault }) => {
4
+ export const ChatbotHeaderTitle = ({ className, children, displayMode, showOnFullScreen, showOnDocked, showOnEmbedded, showOnDrawer, showOnDefault }) => {
5
5
  const renderChildren = () => {
6
- if (displayMode && (showOnDefault || showOnFullScreen || showOnEmbedded || showOnDocked)) {
6
+ if (displayMode) {
7
7
  /* eslint-disable indent */
8
8
  switch (displayMode) {
9
9
  case ChatbotDisplayMode.fullscreen:
@@ -12,6 +12,8 @@ export const ChatbotHeaderTitle = ({ className, children, displayMode, showOnFul
12
12
  return showOnDocked !== null && showOnDocked !== void 0 ? showOnDocked : showOnDefault;
13
13
  case ChatbotDisplayMode.embedded:
14
14
  return showOnEmbedded !== null && showOnEmbedded !== void 0 ? showOnEmbedded : showOnDefault;
15
+ case ChatbotDisplayMode.drawer:
16
+ return showOnDrawer !== null && showOnDrawer !== void 0 ? showOnDrawer : showOnDefault;
15
17
  default:
16
18
  return showOnDefault;
17
19
  }
@@ -12,31 +12,39 @@ describe('ChatbotHeaderTitle', () => {
12
12
  expect(container.querySelector('.custom-header-class')).toBeTruthy();
13
13
  });
14
14
  it('should render title for default display mode', () => {
15
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.default, showOnDefault: 'Default header title' }));
15
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.default, showOnDefault: "Default header title" }));
16
16
  expect(screen.getByText('Default header title')).toBeTruthy();
17
17
  });
18
18
  it('should render title for docked display mode', () => {
19
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDocked: 'Docked header title' }));
19
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDocked: "Docked header title" }));
20
20
  expect(screen.getByText('Docked header title')).toBeTruthy();
21
21
  });
22
22
  it('should fallback to default title when docked display mode title is not configured', () => {
23
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDefault: 'Default header title' }));
23
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.docked, showOnDefault: "Default header title" }));
24
24
  expect(screen.getByText('Default header title')).toBeTruthy();
25
25
  });
26
26
  it('should render title for embedded display mode', () => {
27
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnEmbedded: 'Embedded header title' }));
27
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnEmbedded: "Embedded header title" }));
28
28
  expect(screen.getByText('Embedded header title')).toBeTruthy();
29
29
  });
30
30
  it('should fallback to default title when embedded display mode title is not configured', () => {
31
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnDefault: 'Default header title' }));
31
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.embedded, showOnDefault: "Default header title" }));
32
32
  expect(screen.getByText('Default header title')).toBeTruthy();
33
33
  });
34
34
  it('should render title for fullscreen display mode', () => {
35
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnFullScreen: 'Fullscreen header title', className: "custom-header-class" }));
35
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnFullScreen: "Fullscreen header title", className: "custom-header-class" }));
36
36
  expect(screen.getByText('Fullscreen header title')).toBeTruthy();
37
37
  });
38
38
  it('should fallback to default title when fullscreen display mode title is not configured', () => {
39
- render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnDefault: 'Default header title' }));
39
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.fullscreen, showOnDefault: "Default header title" }));
40
+ expect(screen.getByText('Default header title')).toBeTruthy();
41
+ });
42
+ it('should render title for drawer display mode', () => {
43
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.drawer, showOnDrawer: "Drawer header title", className: "custom-header-class" }));
44
+ expect(screen.getByText('Drawer header title')).toBeTruthy();
45
+ });
46
+ it('should fallback to default title when drawer display mode title is not configured', () => {
47
+ render(React.createElement(ChatbotHeaderTitle, { displayMode: ChatbotDisplayMode.drawer, showOnDefault: "Default header title" }));
40
48
  expect(screen.getByText('Default header title')).toBeTruthy();
41
49
  });
42
50
  });
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AlertProps } from '@patternfly/react-core';
3
+ declare const ErrorMessage: ({ title, actionLinks, children, ...props }: AlertProps) => React.JSX.Element;
4
+ export default ErrorMessage;
@@ -0,0 +1,21 @@
1
+ // ============================================================================
2
+ // Chatbot Main - Message - Content - Error
3
+ // ============================================================================
4
+ var __rest = (this && this.__rest) || function (s, e) {
5
+ var t = {};
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
7
+ t[p] = s[p];
8
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
9
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
10
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
11
+ t[p[i]] = s[p[i]];
12
+ }
13
+ return t;
14
+ };
15
+ import React from 'react';
16
+ import { Alert } from '@patternfly/react-core';
17
+ const ErrorMessage = (_a) => {
18
+ var { title, actionLinks, children } = _a, props = __rest(_a, ["title", "actionLinks", "children"]);
19
+ return (React.createElement(Alert, Object.assign({ isInline: true, variant: "danger", title: title, actionLinks: actionLinks }, props), children));
20
+ };
21
+ export default ErrorMessage;
@@ -1,5 +1,5 @@
1
1
  import React, { ReactNode } from 'react';
2
- import { AvatarProps, LabelGroupProps } from '@patternfly/react-core';
2
+ import { AlertProps, AvatarProps, LabelGroupProps } from '@patternfly/react-core';
3
3
  import { ActionProps } from '../ResponseActions/ResponseActions';
4
4
  import { SourcesCardProps } from '../SourcesCard';
5
5
  import { QuickStart, QuickstartAction } from './QuickStarts/types';
@@ -102,6 +102,8 @@ export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'rol
102
102
  additionalRehypePlugins?: PluggableList;
103
103
  /** Whether to open links in message in new tab. */
104
104
  openLinkInNewTab?: boolean;
105
+ /** Optional inline error message that can be displayed in the message */
106
+ error?: AlertProps;
105
107
  }
106
108
  export declare const MessageBase: React.FunctionComponent<MessageProps>;
107
109
  declare const Message: React.ForwardRefExoticComponent<Omit<MessageProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -40,8 +40,9 @@ import rehypeUnwrapImages from 'rehype-unwrap-images';
40
40
  import rehypeExternalLinks from 'rehype-external-links';
41
41
  import rehypeSanitize from 'rehype-sanitize';
42
42
  import LinkMessage from './LinkMessage/LinkMessage';
43
+ import ErrorMessage from './ErrorMessage/ErrorMessage';
43
44
  export const MessageBase = (_a) => {
44
- var { role, content, extraContent, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef, tableProps, openLinkInNewTab = true, additionalRehypePlugins = [] } = _a, props = __rest(_a, ["role", "content", "extraContent", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef", "tableProps", "openLinkInNewTab", "additionalRehypePlugins"]);
45
+ var { role, content, extraContent, name, avatar, timestamp, isLoading, actions, sources, botWord = 'AI', loadingWord = 'Loading message', codeBlockProps, quickResponses, quickResponseContainerProps = { numLabels: 5 }, attachments, hasRoundAvatar = true, avatarProps, quickStarts, userFeedbackForm, userFeedbackComplete, isLiveRegion = true, innerRef, tableProps, openLinkInNewTab = true, additionalRehypePlugins = [], error } = _a, props = __rest(_a, ["role", "content", "extraContent", "name", "avatar", "timestamp", "isLoading", "actions", "sources", "botWord", "loadingWord", "codeBlockProps", "quickResponses", "quickResponseContainerProps", "attachments", "hasRoundAvatar", "avatarProps", "quickStarts", "userFeedbackForm", "userFeedbackComplete", "isLiveRegion", "innerRef", "tableProps", "openLinkInNewTab", "additionalRehypePlugins", "error"]);
45
46
  const { beforeMainContent, afterMainContent, endContent } = extraContent || {};
46
47
  let rehypePlugins = [rehypeUnwrapImages];
47
48
  if (openLinkInNewTab) {
@@ -71,7 +72,7 @@ export const MessageBase = (_a) => {
71
72
  React.createElement("div", { className: "pf-chatbot__message-and-actions" },
72
73
  isLoading ? (React.createElement(MessageLoading, { loadingWord: loadingWord })) : (React.createElement(React.Fragment, null,
73
74
  beforeMainContent && React.createElement(React.Fragment, null, beforeMainContent),
74
- React.createElement(Markdown, { components: {
75
+ error ? (React.createElement(ErrorMessage, Object.assign({}, error))) : (React.createElement(Markdown, { components: {
75
76
  p: (props) => React.createElement(TextMessage, Object.assign({ component: ContentVariants.p }, props)),
76
77
  code: (_a) => {
77
78
  var { children } = _a, props = __rest(_a, ["children"]);
@@ -100,7 +101,7 @@ export const MessageBase = (_a) => {
100
101
  th: (props) => React.createElement(ThMessage, Object.assign({}, props)),
101
102
  img: (props) => React.createElement(ImageMessage, Object.assign({}, props)),
102
103
  a: (props) => (React.createElement(LinkMessage, { href: props.href, rel: props.rel, target: props.target }, props.children))
103
- }, remarkPlugins: [remarkGfm], rehypePlugins: rehypePlugins }, content),
104
+ }, remarkPlugins: [remarkGfm], rehypePlugins: rehypePlugins }, content)),
104
105
  afterMainContent && React.createElement(React.Fragment, null, afterMainContent))),
105
106
  !isLoading && sources && React.createElement(SourcesCard, Object.assign({}, sources)),
106
107
  quickStarts && quickStarts.quickStart && (React.createElement(QuickStartTile, { quickStart: quickStarts.quickStart, onSelectQuickStart: quickStarts.onSelectQuickStart, minuteWord: quickStarts.minuteWord, minuteWordPlural: quickStarts.minuteWordPlural, prerequisiteWord: quickStarts.prerequisiteWord, prerequisiteWordPlural: quickStarts.prerequisiteWordPlural, quickStartButtonAriaLabel: quickStarts.quickStartButtonAriaLabel })),
@@ -15,6 +15,7 @@ import userEvent from '@testing-library/user-event';
15
15
  import { monitorSampleAppQuickStart } from './QuickStarts/monitor-sampleapp-quickstart';
16
16
  import { monitorSampleAppQuickStartWithImage } from './QuickStarts/monitor-sampleapp-quickstart-with-image';
17
17
  import rehypeExternalLinks from '../__mocks__/rehype-external-links';
18
+ import { AlertActionLink } from '@patternfly/react-core';
18
19
  const ALL_ACTIONS = [
19
20
  { label: /Good response/i },
20
21
  { label: /Bad response/i },
@@ -134,6 +135,13 @@ const EMPTY_TABLE = `
134
135
 
135
136
  `;
136
137
  const IMAGE = `![Multi-colored wavy lines on a black background](https://cdn.dribbble.com/userupload/10651749/file/original-8a07b8e39d9e8bf002358c66fce1223e.gif)`;
138
+ const ERROR = {
139
+ title: 'Could not load chat',
140
+ children: 'Wait a few minutes and check your network settings. If the issue persists: ',
141
+ actionLinks: (React.createElement(React.Fragment, null,
142
+ React.createElement(AlertActionLink, { component: "a", href: "#" }, "Start a new chat"),
143
+ React.createElement(AlertActionLink, { component: "a", href: "#" }, "Contact support")))
144
+ };
137
145
  const checkListItemsRendered = () => {
138
146
  const items = ['Item 1', 'Item 2', 'Item 3'];
139
147
  expect(screen.getAllByRole('listitem')).toHaveLength(3);
@@ -589,4 +597,21 @@ describe('Message', () => {
589
597
  // we are mocking rehype libraries, so we can't test target _blank addition on links directly with RTL
590
598
  expect(rehypeExternalLinks).not.toHaveBeenCalled();
591
599
  });
600
+ it('should handle error correctly', () => {
601
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", error: ERROR }));
602
+ expect(screen.getByRole('heading', { name: /Could not load chat/i })).toBeTruthy();
603
+ expect(screen.getByRole('link', { name: /Start a new chat/i })).toBeTruthy();
604
+ expect(screen.getByRole('link', { name: /Contact support/i })).toBeTruthy();
605
+ expect(screen.getByText('Wait a few minutes and check your network settings. If the issue persists:')).toBeTruthy();
606
+ });
607
+ it('should handle error correctly when loading', () => {
608
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", error: ERROR, isLoading: true }));
609
+ expect(screen.queryByRole('heading', { name: /Could not load chat/i })).toBeFalsy();
610
+ expect(screen.getByText('Loading message')).toBeTruthy();
611
+ });
612
+ it('should handle error correctly when these is content', () => {
613
+ render(React.createElement(Message, { avatar: "./img", role: "user", name: "User", error: ERROR, content: "Test" }));
614
+ expect(screen.getByRole('heading', { name: /Could not load chat/i })).toBeTruthy();
615
+ expect(screen.queryByText('Test')).toBeFalsy();
616
+ });
592
617
  });
@@ -52,3 +52,5 @@ export { default as SourcesCard } from './SourcesCard';
52
52
  export * from './SourcesCard';
53
53
  export { default as TermsOfUse } from './TermsOfUse';
54
54
  export * from './TermsOfUse';
55
+ export { default as tracking } from './tracking';
56
+ export * from './tracking';
package/dist/esm/index.js CHANGED
@@ -53,3 +53,5 @@ export { default as SourcesCard } from './SourcesCard';
53
53
  export * from './SourcesCard';
54
54
  export { default as TermsOfUse } from './TermsOfUse';
55
55
  export * from './TermsOfUse';
56
+ export { default as tracking } from './tracking';
57
+ export * from './tracking';
@@ -0,0 +1,10 @@
1
+ import { TrackingSpi } from './tracking_spi';
2
+ import { TrackingApi, TrackingEventProperties } from './tracking_api';
3
+ export declare class ConsoleTrackingProvider implements TrackingSpi, TrackingApi {
4
+ trackPageView(url: string | undefined): void;
5
+ registerProvider(): void;
6
+ initialize(): void;
7
+ identify(userID: string): void;
8
+ trackSingleItem(item: string, properties?: TrackingEventProperties): void;
9
+ getKey(): string;
10
+ }
@@ -0,0 +1,23 @@
1
+ export class ConsoleTrackingProvider {
2
+ trackPageView(url) {
3
+ // eslint-disable-next-line no-console
4
+ console.log('ConsoleProvider pageView', url);
5
+ }
6
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
7
+ registerProvider() { }
8
+ initialize() {
9
+ // eslint-disable-next-line no-console
10
+ console.log('ConsoleProvider initialize');
11
+ }
12
+ identify(userID) {
13
+ // eslint-disable-next-line no-console
14
+ console.log('ConsoleProvider identify', userID);
15
+ }
16
+ trackSingleItem(item, properties) {
17
+ // eslint-disable-next-line no-console
18
+ console.log('ConsoleProvider: ' + item, properties);
19
+ }
20
+ getKey() {
21
+ return 'console';
22
+ }
23
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './tracking_registry';
2
+ export * from './tracking_registry';
@@ -0,0 +1,2 @@
1
+ export { default } from './tracking_registry';
2
+ export * from './tracking_registry';
@@ -0,0 +1,9 @@
1
+ import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
+ import { InitProps, TrackingSpi } from './tracking_spi';
3
+ export declare class PosthogTrackingProvider implements TrackingSpi, TrackingApi {
4
+ getKey(): string;
5
+ initialize(props: InitProps): void;
6
+ identify(userID: string): void;
7
+ trackPageView(url: string | undefined): void;
8
+ trackSingleItem(item: string, properties?: TrackingEventProperties): void;
9
+ }
@@ -0,0 +1,33 @@
1
+ import { posthog } from 'posthog-js';
2
+ export class PosthogTrackingProvider {
3
+ getKey() {
4
+ return 'posthogKey';
5
+ }
6
+ initialize(props) {
7
+ // eslint-disable-next-line no-console
8
+ console.log('PosthogProvider initialize');
9
+ const posthogKey = props.posthogKey;
10
+ posthog.init(posthogKey, {
11
+ // eslint-disable-next-line camelcase
12
+ api_host: 'https://us.i.posthog.com',
13
+ // eslint-disable-next-line camelcase
14
+ person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well
15
+ });
16
+ }
17
+ identify(userID) {
18
+ // eslint-disable-next-line no-console
19
+ console.log('PosthogProvider userID: ' + userID);
20
+ posthog.identify(userID);
21
+ }
22
+ trackPageView(url) {
23
+ // eslint-disable-next-line no-console
24
+ console.log('PostHogProvider url', url);
25
+ // TODO posthog seems to record that automatically.
26
+ // How to not clash with this here? Just leave as no-op?
27
+ }
28
+ trackSingleItem(item, properties) {
29
+ // eslint-disable-next-line no-console
30
+ console.log('PosthogProvider: trackSingleItem' + item, properties);
31
+ posthog.capture(item, { properties });
32
+ }
33
+ }
@@ -0,0 +1,10 @@
1
+ import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
+ import { InitProps, TrackingSpi } from './tracking_spi';
3
+ export declare class SegmentTrackingProvider implements TrackingSpi, TrackingApi {
4
+ private analytics;
5
+ getKey(): string;
6
+ initialize(props: InitProps): void;
7
+ identify(userID: string): void;
8
+ trackPageView(url: string | undefined): void;
9
+ trackSingleItem(item: string, properties?: TrackingEventProperties): void;
10
+ }
@@ -0,0 +1,46 @@
1
+ import { AnalyticsBrowser } from '@segment/analytics-next';
2
+ export class SegmentTrackingProvider {
3
+ getKey() {
4
+ return 'segmentKey';
5
+ }
6
+ initialize(props) {
7
+ // eslint-disable-next-line no-console
8
+ console.log('SegmentProvider initialize');
9
+ const segmentKey = props.segmentKey;
10
+ // We need to create an object here, as ts lint is unhappy otherwise
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const integrations = props.segmentIntegrations;
13
+ this.analytics = AnalyticsBrowser.load({
14
+ writeKey: segmentKey,
15
+ cdnURL: props.segmentCdn
16
+ }, {
17
+ integrations: Object.assign({}, integrations)
18
+ });
19
+ }
20
+ identify(userID) {
21
+ // eslint-disable-next-line no-console
22
+ console.log('SegmentProvider userID: ' + userID);
23
+ if (this.analytics) {
24
+ this.analytics.identify(userID);
25
+ }
26
+ }
27
+ trackPageView(url) {
28
+ // eslint-disable-next-line no-console
29
+ console.log('SegmentProvider url', url);
30
+ if (this.analytics) {
31
+ if (url) {
32
+ this.analytics.page(url);
33
+ }
34
+ else {
35
+ this.analytics.page(); // Uses window.url
36
+ }
37
+ }
38
+ }
39
+ trackSingleItem(item, properties) {
40
+ // eslint-disable-next-line no-console
41
+ console.log('SegmentProvider: trackSingleItem' + item, properties);
42
+ if (this.analytics) {
43
+ this.analytics.track(item, { properties });
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,9 @@
1
+ import { TrackingApi, TrackingEventProperties } from './tracking_api';
2
+ declare class TrackingProviderProxy implements TrackingApi {
3
+ providers: TrackingApi[];
4
+ constructor(providers: TrackingApi[]);
5
+ identify(userID: string): void;
6
+ trackSingleItem(eventName: string, properties?: TrackingEventProperties): void;
7
+ trackPageView(url: string | undefined): void;
8
+ }
9
+ export default TrackingProviderProxy;
@@ -0,0 +1,22 @@
1
+ class TrackingProviderProxy {
2
+ constructor(providers) {
3
+ this.providers = [];
4
+ this.providers = providers;
5
+ }
6
+ identify(userID) {
7
+ for (const provider of this.providers) {
8
+ provider.identify(userID);
9
+ }
10
+ }
11
+ trackSingleItem(eventName, properties) {
12
+ for (const provider of this.providers) {
13
+ provider.trackSingleItem(eventName, properties);
14
+ }
15
+ }
16
+ trackPageView(url) {
17
+ for (const provider of this.providers) {
18
+ provider.trackPageView(url);
19
+ }
20
+ }
21
+ }
22
+ export default TrackingProviderProxy;
@@ -0,0 +1,8 @@
1
+ export interface TrackingEventProperties {
2
+ [key: string]: string | number | boolean | undefined;
3
+ }
4
+ export interface TrackingApi {
5
+ identify: (userID: string) => void;
6
+ trackPageView: (url: string | undefined) => void;
7
+ trackSingleItem: (eventName: string, properties: TrackingEventProperties | undefined) => void;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { InitProps } from './tracking_spi';
2
+ import { TrackingApi } from './tracking_api';
3
+ export declare const getTrackingProviders: (initProps: InitProps) => TrackingApi;
4
+ export default getTrackingProviders;
@@ -0,0 +1,26 @@
1
+ import TrackingProviderProxy from './trackingProviderProxy';
2
+ import { ConsoleTrackingProvider } from './console_tracking_provider';
3
+ import { SegmentTrackingProvider } from './segment_tracking_provider';
4
+ import { PosthogTrackingProvider } from './posthog_tracking_provider';
5
+ import { UmamiTrackingProvider } from './umami_tracking_provider';
6
+ export const getTrackingProviders = (initProps) => {
7
+ const providers = [];
8
+ providers.push(new SegmentTrackingProvider());
9
+ providers.push(new PosthogTrackingProvider());
10
+ providers.push(new UmamiTrackingProvider());
11
+ // TODO dynamically find and register providers
12
+ // Initialize them
13
+ const enabledProviders = [];
14
+ for (const provider of providers) {
15
+ const key = provider.getKey();
16
+ if (Object.keys(initProps).indexOf(key) > -1) {
17
+ provider.initialize(initProps);
18
+ enabledProviders.push(provider);
19
+ }
20
+ }
21
+ // Add the console provider
22
+ const consoleTrackingProvider = new ConsoleTrackingProvider();
23
+ enabledProviders.push(consoleTrackingProvider); // TODO noop- provider?
24
+ return new TrackingProviderProxy(enabledProviders);
25
+ };
26
+ export default getTrackingProviders;