@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.
- package/dist/cjs/Chatbot/Chatbot.d.ts +2 -1
- package/dist/cjs/Chatbot/Chatbot.js +1 -0
- package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
- package/dist/cjs/ChatbotHeader/ChatbotHeaderTitle.test.js +15 -7
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
- package/dist/cjs/Message/ErrorMessage/ErrorMessage.js +26 -0
- package/dist/cjs/Message/Message.d.ts +3 -1
- package/dist/cjs/Message/Message.js +4 -3
- package/dist/cjs/Message/Message.test.js +25 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/tracking/console_tracking_provider.d.ts +10 -0
- package/dist/cjs/tracking/console_tracking_provider.js +27 -0
- package/dist/cjs/tracking/index.d.ts +2 -0
- package/dist/cjs/tracking/index.js +23 -0
- package/dist/cjs/tracking/posthog_tracking_provider.d.ts +9 -0
- package/dist/cjs/tracking/posthog_tracking_provider.js +37 -0
- package/dist/cjs/tracking/segment_tracking_provider.d.ts +10 -0
- package/dist/cjs/tracking/segment_tracking_provider.js +50 -0
- package/dist/cjs/tracking/trackingProviderProxy.d.ts +9 -0
- package/dist/cjs/tracking/trackingProviderProxy.js +24 -0
- package/dist/cjs/tracking/tracking_api.d.ts +8 -0
- package/dist/cjs/tracking/tracking_api.js +2 -0
- package/dist/cjs/tracking/tracking_registry.d.ts +4 -0
- package/dist/cjs/tracking/tracking_registry.js +33 -0
- package/dist/cjs/tracking/tracking_spi.d.ts +9 -0
- package/dist/cjs/tracking/tracking_spi.js +2 -0
- package/dist/cjs/tracking/umami_tracking_provider.d.ts +14 -0
- package/dist/cjs/tracking/umami_tracking_provider.js +44 -0
- package/dist/css/main.css +28 -3
- package/dist/css/main.css.map +1 -1
- package/dist/dynamic/tracking/package.json +1 -0
- package/dist/esm/Chatbot/Chatbot.d.ts +2 -1
- package/dist/esm/Chatbot/Chatbot.js +1 -0
- package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +1 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.d.ts +3 -1
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.js +4 -2
- package/dist/esm/ChatbotHeader/ChatbotHeaderTitle.test.js +15 -7
- package/dist/esm/Message/ErrorMessage/ErrorMessage.d.ts +4 -0
- package/dist/esm/Message/ErrorMessage/ErrorMessage.js +21 -0
- package/dist/esm/Message/Message.d.ts +3 -1
- package/dist/esm/Message/Message.js +4 -3
- package/dist/esm/Message/Message.test.js +25 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/tracking/console_tracking_provider.d.ts +10 -0
- package/dist/esm/tracking/console_tracking_provider.js +23 -0
- package/dist/esm/tracking/index.d.ts +2 -0
- package/dist/esm/tracking/index.js +2 -0
- package/dist/esm/tracking/posthog_tracking_provider.d.ts +9 -0
- package/dist/esm/tracking/posthog_tracking_provider.js +33 -0
- package/dist/esm/tracking/segment_tracking_provider.d.ts +10 -0
- package/dist/esm/tracking/segment_tracking_provider.js +46 -0
- package/dist/esm/tracking/trackingProviderProxy.d.ts +9 -0
- package/dist/esm/tracking/trackingProviderProxy.js +22 -0
- package/dist/esm/tracking/tracking_api.d.ts +8 -0
- package/dist/esm/tracking/tracking_api.js +1 -0
- package/dist/esm/tracking/tracking_registry.d.ts +4 -0
- package/dist/esm/tracking/tracking_registry.js +26 -0
- package/dist/esm/tracking/tracking_spi.d.ts +9 -0
- package/dist/esm/tracking/tracking_spi.js +1 -0
- package/dist/esm/tracking/umami_tracking_provider.d.ts +14 -0
- package/dist/esm/tracking/umami_tracking_provider.js +40 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +3 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +219 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/BotMessage.tsx +24 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/UserMessage.tsx +24 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +13 -0
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +37 -24
- package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotInDrawer.tsx +453 -0
- package/patternfly-docs/content/extensions/chatbot/img/analytics-example.svg +118 -0
- package/patternfly-docs/content/extensions/chatbot/img/chatbot-analytics.svg +51 -0
- package/patternfly-docs/content/extensions/chatbot/img/posthog.svg +30 -0
- package/patternfly-docs/content/extensions/chatbot/img/segment.svg +36 -0
- package/patternfly-docs/content/extensions/chatbot/img/umami.svg +30 -0
- package/src/Chatbot/Chatbot.scss +19 -0
- package/src/Chatbot/Chatbot.tsx +2 -1
- package/src/ChatbotContent/ChatbotContent.scss +1 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +2 -0
- package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +1 -1
- package/src/ChatbotFooter/ChatbotFooter.scss +9 -0
- package/src/ChatbotHeader/ChatbotHeader.scss +2 -1
- package/src/ChatbotHeader/ChatbotHeaderTitle.test.tsx +23 -7
- package/src/ChatbotHeader/ChatbotHeaderTitle.tsx +7 -2
- package/src/Message/ErrorMessage/ErrorMessage.tsx +14 -0
- package/src/Message/Message.test.tsx +32 -0
- package/src/Message/Message.tsx +50 -41
- package/src/MessageBar/MessageBar.scss +3 -3
- package/src/MessageBox/MessageBox.scss +1 -0
- package/src/index.ts +3 -0
- package/src/tracking/console_tracking_provider.ts +30 -0
- package/src/tracking/index.ts +3 -0
- package/src/tracking/posthog_tracking_provider.ts +42 -0
- package/src/tracking/segment_tracking_provider.ts +62 -0
- package/src/tracking/trackingProviderProxy.ts +28 -0
- package/src/tracking/tracking_api.ts +11 -0
- package/src/tracking/tracking_registry.ts +33 -0
- package/src/tracking/tracking_spi.ts +14 -0
- 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%;
|
package/dist/css/main.css.map
CHANGED
@@ -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;;;
|
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
|
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
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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,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 = ``;
|
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
|
});
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
@@ -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,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,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;
|