@microsoft/omnichannel-chat-widget 1.8.3-main.717ca8d → 1.8.3-main.b5b8289

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 (62) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +4 -0
  3. package/lib/cjs/components/citationpanestateful/CitationDim.js +29 -0
  4. package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +198 -0
  5. package/lib/cjs/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +70 -0
  6. package/lib/cjs/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
  7. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
  8. package/lib/cjs/components/livechatwidget/common/endChat.js +33 -4
  9. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +12 -9
  10. package/lib/cjs/components/livechatwidget/common/startChat.js +5 -4
  11. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +35 -1
  12. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +89 -5
  13. package/lib/cjs/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
  14. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +139 -0
  15. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +54 -0
  16. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
  17. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +46 -45
  18. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -0
  19. package/lib/cjs/contexts/createReducer.js +15 -0
  20. package/lib/cjs/firstresponselatency/util.js +12 -2
  21. package/lib/cjs/plugins/newMessageEventHandler.js +2 -2
  22. package/lib/esm/common/Constants.js +2 -0
  23. package/lib/esm/common/telemetry/TelemetryConstants.js +4 -0
  24. package/lib/esm/components/citationpanestateful/CitationDim.js +20 -0
  25. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +187 -0
  26. package/lib/esm/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +61 -0
  27. package/lib/esm/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
  28. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
  29. package/lib/esm/components/livechatwidget/common/endChat.js +34 -5
  30. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -10
  31. package/lib/esm/components/livechatwidget/common/startChat.js +5 -4
  32. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +35 -1
  33. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +89 -6
  34. package/lib/esm/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
  35. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +133 -0
  36. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +46 -0
  37. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
  38. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +46 -45
  39. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -0
  40. package/lib/esm/contexts/createReducer.js +15 -0
  41. package/lib/esm/firstresponselatency/util.js +9 -0
  42. package/lib/esm/plugins/newMessageEventHandler.js +3 -3
  43. package/lib/types/common/Constants.d.ts +2 -0
  44. package/lib/types/common/telemetry/TelemetryConstants.d.ts +4 -0
  45. package/lib/types/components/citationpanestateful/CitationDim.d.ts +5 -0
  46. package/lib/types/components/citationpanestateful/CitationPaneStateful.d.ts +4 -0
  47. package/lib/types/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.d.ts +11 -0
  48. package/lib/types/components/citationpanestateful/interfaces/ICitationPaneStatefulProps.d.ts +10 -0
  49. package/lib/types/components/confirmationpanestateful/common/defaultProps/defaultConfirmationPaneLocalizedTexts.d.ts +1 -1
  50. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulProps.d.ts +1 -1
  51. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +5 -1
  52. package/lib/types/components/webchatcontainerstateful/interfaces/ICitation.d.ts +12 -0
  53. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +4 -0
  54. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +5 -0
  55. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  56. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  57. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +46 -45
  58. package/lib/types/firstresponselatency/util.d.ts +1 -0
  59. package/package.json +4 -3
  60. /package/lib/cjs/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
  61. /package/lib/esm/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
  62. /package/lib/types/components/confirmationpanestateful/interfaces/{IConfirmationPaneLocalizedText.d.ts → IConfirmationPaneLocalizedTexts.d.ts} +0 -0
@@ -196,6 +196,8 @@ _defineProperty(HtmlAttributeNames, "adaptiveCardClassName", "ac-adaptiveCard");
196
196
  _defineProperty(HtmlAttributeNames, "adaptiveCardTextBlockClassName", "ac-textBlock");
197
197
  _defineProperty(HtmlAttributeNames, "adaptiveCardToggleInputClassName", "ac-toggleInput");
198
198
  _defineProperty(HtmlAttributeNames, "adaptiveCardActionSetClassName", "ac-actionSet");
199
+ _defineProperty(HtmlAttributeNames, "ocwCitationPaneClassName", "ocw-citation-pane");
200
+ _defineProperty(HtmlAttributeNames, "ocwCitationPaneTitle", "Citation");
199
201
  let WebChatMiddlewareConstants = /*#__PURE__*/_createClass(function WebChatMiddlewareConstants() {
200
202
  _classCallCheck(this, WebChatMiddlewareConstants);
201
203
  });
@@ -154,6 +154,7 @@ exports.TelemetryEvent = TelemetryEvent;
154
154
  TelemetryEvent["EmailTranscriptLoaded"] = "EmailTranscriptLoaded";
155
155
  TelemetryEvent["OutOfOfficePaneLoaded"] = "OutOfOfficePaneLoaded";
156
156
  TelemetryEvent["ConfirmationPaneLoaded"] = "ConfirmationPaneLoaded";
157
+ TelemetryEvent["CitationPaneLoaded"] = "CitationPaneLoaded";
157
158
  TelemetryEvent["ProactiveChatPaneLoaded"] = "ProactiveChatPaneLoaded";
158
159
  TelemetryEvent["ReconnectChatPaneLoaded"] = "ReconnectChatPaneLoaded";
159
160
  TelemetryEvent["HeaderCloseButtonClicked"] = "HeaderCloseButtonClicked";
@@ -195,6 +196,7 @@ exports.TelemetryEvent = TelemetryEvent;
195
196
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
196
197
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
197
198
  TelemetryEvent["AttachmentUploadValidatorMiddlewareFailed"] = "AttachmentUploadValidatorMiddlewareFailed";
199
+ TelemetryEvent["CitationMiddlewareFailed"] = "CitationMiddlewareFailed";
198
200
  TelemetryEvent["QueuePositionMessageRecieved"] = "QueuePositionMessageRecieved";
199
201
  TelemetryEvent["AverageWaitTimeMessageRecieved"] = "AverageWaitTimeMessageRecieved";
200
202
  TelemetryEvent["DataMaskingRuleApplied"] = "DataMaskingRuleApplied";
@@ -279,7 +281,9 @@ exports.TelemetryEvent = TelemetryEvent;
279
281
  TelemetryEvent["UXLCWChatButtonLoadingStart"] = "UXLCWChatButtonLoadingStart";
280
282
  TelemetryEvent["UXLCWChatButtonLoadingCompleted"] = "UXLCWChatButtonLoadingCompleted";
281
283
  TelemetryEvent["UXConfirmationPaneStart"] = "UXConfirmationPaneStart";
284
+ TelemetryEvent["UXCitationPaneStart"] = "UXCitationPaneStart";
282
285
  TelemetryEvent["UXConfirmationPaneCompleted"] = "UXConfirmationPaneCompleted";
286
+ TelemetryEvent["UXCitationPaneCompleted"] = "UXCitationPaneCompleted";
283
287
  TelemetryEvent["UXLiveChatWidgetStart"] = "UXLiveChatWidgetStart";
284
288
  TelemetryEvent["UXLiveChatWidgetCompleted"] = "UXLiveChatWidgetCompleted";
285
289
  TelemetryEvent["AppInsightsInitialized"] = "AppInsightsInitialized";
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.CitationDim = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactDom = _interopRequireDefault(require("react-dom"));
9
+ var _DimLayer = require("../dimlayer/DimLayer");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ const CONTAINER_SELECTOR = ".webchat__stacked-layout_container";
12
+ const CitationDim = _ref => {
13
+ let {
14
+ brightness = "0.2"
15
+ } = _ref;
16
+ const container = document.querySelector(CONTAINER_SELECTOR);
17
+ if (!container) return null;
18
+ return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement("div", {
19
+ style: {
20
+ position: "absolute",
21
+ inset: 0
22
+ }
23
+ }, /*#__PURE__*/_react.default.createElement(_DimLayer.DimLayer, {
24
+ brightness: brightness
25
+ })), container);
26
+ };
27
+ exports.CitationDim = CitationDim;
28
+ var _default = CitationDim;
29
+ exports.default = _default;
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.CitationPaneStateful = void 0;
7
+ var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _utils = require("../../common/utils");
10
+ var _CitationDim = _interopRequireDefault(require("./CitationDim"));
11
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
12
+ var _Constants = require("../../common/Constants");
13
+ var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
14
+ var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
15
+ var _defaultCitationPaneProps = require("./common/defaultProps/defaultCitationPaneProps");
16
+ var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+ let uiTimer;
21
+ const CitationPaneStateful = props => {
22
+ var _props$styleProps3;
23
+ (0, _react.useEffect)(() => {
24
+ uiTimer = (0, _utils.createTimer)();
25
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
26
+ Event: _TelemetryConstants.TelemetryEvent.UXCitationPaneStart
27
+ });
28
+ }, []);
29
+ const initialTabIndexMap = new Map();
30
+ let elements = [];
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ const [state, dispatch] = (0, _useChatContextStore.default)();
34
+
35
+ // Use props.id if provided, otherwise fall back to default
36
+ const controlId = props.id || _Constants.HtmlAttributeNames.ocwCitationPaneClassName;
37
+
38
+ // Pane style computed to match the webchat widget container bounds so the pane
39
+ // stays within the widget and scrolls only vertically. We also track an
40
+ // "isReady" flag so we don't render the pane contents until the style is
41
+ // computed — this prevents a transient render that can appear as a flicker.
42
+ const [paneStyle, setPaneStyle] = (0, _react.useState)(null);
43
+ const [isReady, setIsReady] = (0, _react.useState)(false);
44
+
45
+ // Move focus to the container
46
+ (0, _react.useEffect)(() => {
47
+ (0, _utils.preventFocusToMoveOutOfElement)(controlId);
48
+ const focusableElements = (0, _utils.findAllFocusableElement)(`#${controlId}`);
49
+ requestAnimationFrame(() => {
50
+ if (focusableElements && focusableElements.length > 0 && focusableElements[0]) {
51
+ focusableElements[0].focus({
52
+ preventScroll: true
53
+ });
54
+ }
55
+ });
56
+ elements = (0, _utils.findParentFocusableElementsWithoutChildContainer)(controlId);
57
+ (0, _utils.setTabIndices)(elements, initialTabIndexMap, false);
58
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
59
+ Event: _TelemetryConstants.TelemetryEvent.CitationPaneLoaded
60
+ });
61
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
62
+ Event: _TelemetryConstants.TelemetryEvent.UXCitationPaneCompleted,
63
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
64
+ });
65
+ }, []);
66
+
67
+ // Compute the widget bounds and set pane style accordingly (95% of widget size
68
+ // and centered inside the widget). If the widget container can't be found,
69
+ // fall back to the default pane styles from defaultCitationPaneProps.
70
+ (0, _react.useEffect)(() => {
71
+ const compute = () => {
72
+ var _props$styleProps2;
73
+ try {
74
+ const container = document.querySelector(".webchat__stacked-layout_container");
75
+ if (container) {
76
+ var _props$styleProps;
77
+ const rect = container.getBoundingClientRect();
78
+ const widthPx = Math.round(rect.width * 0.95);
79
+ const heightPx = Math.round(rect.height * 0.95);
80
+ const leftPx = Math.round(rect.left + (rect.width - widthPx) / 2);
81
+ const topPx = Math.round(rect.top + (rect.height - heightPx) / 2);
82
+ // Clone defaults and remove transform so explicit left/top pixel
83
+ // coordinates are respected and the pane stays within the
84
+ // widget bounds.
85
+ const base = Object.assign({}, _defaultCitationPaneProps.defaultCitationPaneStyles.pane);
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ if (base && base.transform) {
88
+ // remove centering transform when we compute exact pixel coords
89
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
+ delete base.transform;
91
+ }
92
+
93
+ // Merge user styles first, then computed positioning to ensure proper positioning
94
+ const computedStyle = {
95
+ left: `${leftPx}px`,
96
+ top: `${topPx}px`,
97
+ width: `${widthPx}px`,
98
+ height: `${heightPx}px`
99
+ };
100
+
101
+ // Apply user styles first, then override with computed positioning
102
+ const generalProps = (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps;
103
+ const userStyles = generalProps && typeof generalProps === "object" ? Object.assign({}, generalProps) : {};
104
+ // Remove positioning properties from user styles that would interfere
105
+ delete userStyles.position;
106
+ delete userStyles.left;
107
+ delete userStyles.top;
108
+ delete userStyles.width;
109
+ delete userStyles.height;
110
+ setPaneStyle(Object.assign({}, base, userStyles, computedStyle));
111
+ // Make the pane visible after the next paint to avoid layout
112
+ // flashes on initial mount.
113
+ requestAnimationFrame(() => setIsReady(true));
114
+ return;
115
+ }
116
+ } catch (e) {
117
+ // ignore
118
+ }
119
+
120
+ // fallback - merge defaults with user-provided styles but preserve positioning
121
+ const generalProps = (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.generalStyleProps;
122
+ const userStyles = generalProps && typeof generalProps === "object" ? Object.assign({}, generalProps) : {};
123
+ // Remove positioning properties from user styles for fallback
124
+ delete userStyles.position;
125
+ delete userStyles.left;
126
+ delete userStyles.top;
127
+ delete userStyles.width;
128
+ delete userStyles.height;
129
+ const fallbackStyle = Object.assign({}, _defaultCitationPaneProps.defaultCitationPaneStyles.pane, userStyles);
130
+ setPaneStyle(fallbackStyle);
131
+ requestAnimationFrame(() => setIsReady(true));
132
+ };
133
+ compute();
134
+ window.addEventListener("resize", compute);
135
+ return () => window.removeEventListener("resize", compute);
136
+ }, [(_props$styleProps3 = props.styleProps) === null || _props$styleProps3 === void 0 ? void 0 : _props$styleProps3.generalStyleProps]);
137
+ const handleClose = () => {
138
+ if (props.onClose) props.onClose();
139
+ dispatch({
140
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
141
+ payload: null
142
+ });
143
+ (0, _utils.setTabIndices)(elements, initialTabIndexMap, true);
144
+ };
145
+
146
+ // Merge a safe style object for the container and cast to CSSProperties to satisfy TS
147
+ const baseStyle = Object.assign({
148
+ position: "relative"
149
+ }, paneStyle ?? {
150
+ position: "fixed"
151
+ });
152
+
153
+ // If paneStyle hasn't been computed yet, render the DimLayer so clicks
154
+ // still close overlays but hide the pane itself to avoid flashes.
155
+ const hiddenStyle = {
156
+ visibility: isReady ? "visible" : "hidden",
157
+ pointerEvents: isReady ? "auto" : "none"
158
+ };
159
+
160
+ // Default wrapper styles - these control the positioning container
161
+ const defaultWrapperStyles = {
162
+ display: "flex",
163
+ flexDirection: "column",
164
+ zIndex: 10001
165
+ };
166
+
167
+ // Wrapper styles for the positioning container
168
+ const wrapperStyles = Object.assign({}, baseStyle, hiddenStyle, defaultWrapperStyles);
169
+
170
+ // Merge the computed positioning styles with user's generalStyleProps for the CitationPane
171
+ const mergedStyleProps = props.styleProps ? {
172
+ ...props.styleProps,
173
+ generalStyleProps: Object.assign({}, props.styleProps.generalStyleProps)
174
+ } : undefined;
175
+ const controlProps = {
176
+ id: controlId,
177
+ dir: state.domainStates.globalDir,
178
+ titleText: props.title,
179
+ contentHtml: props.contentHtml,
180
+ brightnessValueOnDim: "0.2",
181
+ // Default brightness
182
+ onClose: handleClose,
183
+ ...(props === null || props === void 0 ? void 0 : props.controlProps) // User props override defaults
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
+ };
186
+
187
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CitationDim.default, {
188
+ brightness: controlProps.brightnessValueOnDim
189
+ }), /*#__PURE__*/_react.default.createElement("div", {
190
+ style: wrapperStyles
191
+ }, /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.CitationPane, {
192
+ controlProps: controlProps,
193
+ styleProps: mergedStyleProps
194
+ })));
195
+ };
196
+ exports.CitationPaneStateful = CitationPaneStateful;
197
+ var _default = CitationPaneStateful;
198
+ exports.default = _default;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultCitationPaneStyles = exports.defaultCitationContentCSS = exports.default = void 0;
7
+ const defaultCitationPaneStyles = {
8
+ pane: {
9
+ position: "fixed",
10
+ left: "50%",
11
+ top: "18%",
12
+ transform: "translateX(-50%)",
13
+ background: "#fff",
14
+ width: "85%",
15
+ height: "85%",
16
+ overflowY: "auto",
17
+ overflowX: "hidden",
18
+ padding: 16,
19
+ borderRadius: 6,
20
+ zIndex: 10001,
21
+ boxSizing: "border-box"
22
+ }
23
+ };
24
+ exports.defaultCitationPaneStyles = defaultCitationPaneStyles;
25
+ const defaultCitationContentCSS = controlId => `
26
+ #${controlId} .citation-content {
27
+ flex: 1;
28
+ min-height: 0; /* allow flex child to scroll */
29
+ overflow-y: auto;
30
+ overflow-x: auto;
31
+ margin-bottom: 12px;
32
+ white-space: normal; /* wrap normal text */
33
+ word-break: break-word;
34
+ -webkit-overflow-scrolling: touch;
35
+ }
36
+
37
+ #${controlId} .citation-content pre,
38
+ #${controlId} .citation-content code {
39
+ white-space: pre; /* preserve formatting */
40
+ }
41
+
42
+ #${controlId} .citation-content table {
43
+ width: 100%;
44
+ border-collapse: collapse;
45
+ margin-bottom: 12px;
46
+ table-layout: auto;
47
+ overflow-x: auto;
48
+ display: block;
49
+ }
50
+
51
+ #${controlId} .citation-content table th,
52
+ #${controlId} .citation-content table td {
53
+ padding: 8px 12px;
54
+ border: 1px solid rgba(0,0,0,0.08);
55
+ text-align: left;
56
+ vertical-align: top;
57
+ word-break: break-word;
58
+ }
59
+
60
+ #${controlId} .citation-content img {
61
+ max-width: 100%;
62
+ height: auto;
63
+ }
64
+ `;
65
+ exports.defaultCitationContentCSS = defaultCitationContentCSS;
66
+ var _default = {
67
+ defaultCitationPaneStyles,
68
+ defaultCitationContentCSS
69
+ };
70
+ exports.default = _default;
@@ -17,7 +17,6 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
17
17
  const supportedSignInCardContentTypes = ["application/vnd.microsoft.card.signin", "application/vnd.microsoft.card.oauth"];
18
18
  const botOauthUrlRegex = /[\S]+.botframework.com\/api\/oauth\/signin\?signin=([\S]+)/;
19
19
  const delay = t => new Promise(resolve => setTimeout(resolve, t));
20
- let response;
21
20
  const extractSignInId = signInUrl => {
22
21
  const result = botOauthUrlRegex.exec(signInUrl);
23
22
  if (result && result[1]) {
@@ -53,20 +52,20 @@ const fetchBotAuthConfig = async (retries, interval) => {
53
52
  eventName: _TelemetryConstants.BroadcastEvent.BotAuthConfigRequest
54
53
  };
55
54
  _omnichannelChatComponents.BroadcastService.postMessage(botAuthConfigRequestEvent);
55
+ let response;
56
56
  const listener = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.BotAuthConfigResponse).subscribe(data => {
57
57
  var _data$payload, _data$payload2;
58
58
  response = ((_data$payload = data.payload) === null || _data$payload === void 0 ? void 0 : _data$payload.response) !== undefined ? (_data$payload2 = data.payload) === null || _data$payload2 === void 0 ? void 0 : _data$payload2.response : response;
59
59
  listener.unsubscribe();
60
60
  });
61
- if (response !== undefined) {
62
- //return response;
63
- return response;
64
- }
65
61
  if (retries === 1) {
66
62
  // Base Case
67
63
  throw new Error();
68
64
  }
69
65
  await delay(interval);
66
+ if (response !== undefined) {
67
+ return response;
68
+ }
70
69
  return await fetchBotAuthConfig(--retries, interval);
71
70
  };
72
71
  let BotAuthActivitySubscriber = /*#__PURE__*/function () {
@@ -44,7 +44,7 @@ const prepareEndChat = async (props, facadeChatSDK, state, dispatch, setAdapter,
44
44
  }
45
45
 
46
46
  // Use Case: If ended by Agent, stay chat in InActive state
47
- let isConversationalSurveyEnabled = state.appStates.isConversationalSurveyEnabled;
47
+ const isConversationalSurveyEnabled = state.appStates.isConversationalSurveyEnabled;
48
48
  if (isConversationalSurveyEnabled && ((state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationEndedBy) === _Constants.ConversationEndEntity.Agent || (state === null || state === void 0 ? void 0 : (_state$appStates3 = state.appStates) === null || _state$appStates3 === void 0 ? void 0 : _state$appStates3.conversationEndedBy) === _Constants.ConversationEndEntity.Bot)) {
49
49
  dispatch({
50
50
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
@@ -153,8 +153,23 @@ const endChat = async (props, facadeChatSDK, state, dispatch, setAdapter, setWeb
153
153
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
154
154
  payload: null
155
155
  });
156
+ let isSessionEnded = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta = inMemoryState.appStates) === null || _inMemoryState$appSta === void 0 ? void 0 : _inMemoryState$appSta.chatDisconnectEventReceived;
157
+ if (!isSessionEnded) {
158
+ // double check by fetching the latest conversation details
159
+ const conversationDetails = await (0, _utils.getConversationDetailsCall)(facadeChatSDK);
160
+ if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.state) === _Constants.LiveWorkItemState.WrapUp || (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.state) === _Constants.LiveWorkItemState.Closed) {
161
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
162
+ Event: _TelemetryConstants.TelemetryEvent.ChatDisconnectThreadEventReceived,
163
+ Description: "Checking conversation details upon endChat. Chat disconnected.",
164
+ CustomProperties: {
165
+ conversationDetails
166
+ }
167
+ });
168
+ isSessionEnded = true;
169
+ }
170
+ }
156
171
  const endChatOptionalParameters = {
157
- isSessionEnded: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta = inMemoryState.appStates) === null || _inMemoryState$appSta === void 0 ? void 0 : _inMemoryState$appSta.chatDisconnectEventReceived
172
+ isSessionEnded
158
173
  };
159
174
  try {
160
175
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -217,7 +232,7 @@ const endChat = async (props, facadeChatSDK, state, dispatch, setAdapter, setWeb
217
232
  payload: undefined
218
233
  });
219
234
  // Always allow to close the chat for embedded mode irrespective of end chat errors
220
- closeChatWidget(dispatch);
235
+ closeChatWidget(dispatch, setWebChatStyles, props);
221
236
  facadeChatSDK.destroy();
222
237
  }
223
238
  }
@@ -305,6 +320,10 @@ const closeChatStateCleanUp = dispatch => {
305
320
  proactiveChatInNewWindow: false
306
321
  }
307
322
  });
323
+ dispatch({
324
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CITATIONS,
325
+ payload: {}
326
+ });
308
327
 
309
328
  // Clear live chat context only if chat widget is fully closed to support transcript calls after sessionclose is called
310
329
  dispatch({
@@ -350,13 +369,23 @@ const endVoiceVideoCallIfOngoing = async (facadeChatSDK, dispatch) => {
350
369
  }, callId);
351
370
  }
352
371
  };
372
+
373
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
353
374
  exports.endVoiceVideoCallIfOngoing = endVoiceVideoCallIfOngoing;
354
- const closeChatWidget = dispatch => {
375
+ const closeChatWidget = (dispatch, setWebChatStyles, props) => {
376
+ var _props$webChatContain2, _props$webChatContain3;
355
377
  // Embedded chat
356
378
  dispatch({
357
379
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
358
380
  payload: _ConversationState.ConversationState.Closed
359
381
  });
382
+
383
+ // if customer is setting the hideSendbox, we should not alter its value
384
+ if ((props === null || props === void 0 ? void 0 : (_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : (_props$webChatContain3 = _props$webChatContain2.webChatStyles) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.hideSendBox) === true) return;
385
+ setWebChatStyles(styles => ({
386
+ ...styles,
387
+ hideSendBox: false
388
+ }));
360
389
  };
361
390
 
362
391
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7,6 +7,8 @@ exports.initWebChatComposer = void 0;
7
7
  var _Constants = require("../../../common/Constants");
8
8
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
9
  var _utils = require("../../../common/utils");
10
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
11
+ var _ConversationState = require("../../../contexts/common/ConversationState");
10
12
  var _dompurify = _interopRequireDefault(require("dompurify"));
11
13
  var _HyperlinkTextOverrideRenderer = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/markdownrenderers/HyperlinkTextOverrideRenderer"));
12
14
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
@@ -18,35 +20,35 @@ var _activityMiddleware = require("../../webchatcontainerstateful/webchatcontrol
18
20
  var _attachmentMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware");
19
21
  var _attachmentUploadValidatorMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware"));
20
22
  var _avatarMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware");
23
+ var _callActionMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware"));
21
24
  var _cardActionMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware");
25
+ var _citationsMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware");
22
26
  var _conversationEndMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware"));
27
+ var _customEventMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware"));
23
28
  var _dataMaskingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware"));
24
29
  var _createMarkdown = require("./createMarkdown");
25
30
  var _maxMessageSizeValidator = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator"));
26
31
  var _messageSequenceIdOverrideMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware");
27
32
  var _messageTimestampMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware");
33
+ var _queueOverflowHandlerMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware");
28
34
  var _botframeworkWebchat = require("botframework-webchat");
29
35
  var _toastMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware");
30
36
  var _WebChatLogger = require("../../webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger");
31
37
  var _defaultAttachmentProps = require("../../webchatcontainerstateful/common/defaultProps/defaultAttachmentProps");
32
38
  var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
33
39
  var _defaultWebChatContainerStatefulProps = require("../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps");
40
+ var _createReducer = require("../../../contexts/createReducer");
34
41
  var _omnichannelChatSdk = require("@microsoft/omnichannel-chat-sdk");
35
42
  var _gifUploadMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware"));
36
43
  var _htmlPlayerMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware"));
37
44
  var _htmlTextMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware"));
38
45
  var _preProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware"));
39
46
  var _sanitizationMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware"));
40
- var _callActionMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware"));
41
- var _customEventMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware"));
42
- var _ConversationState = require("../../../contexts/common/ConversationState");
43
- var _createReducer = require("../../../contexts/createReducer");
44
- var _queueOverflowHandlerMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware");
45
- var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
47
+ var _localizedStringsBotInitialsMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware");
46
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
49
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
50
  const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) => {
49
- var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$webChatContain6, _state$domainStates$l4, _state$domainStates$l5, _props$webChatContain11, _props$webChatContain12, _state$domainStates$r, _state$domainStates$r2, _props$webChatContain13, _props$webChatContain14, _state$domainStates$r3, _state$domainStates$r4, _props$webChatContain15, _props$webChatContain16, _defaultWebChatContai, _props$webChatContain17, _props$webChatContain18, _props$webChatContain19, _props$webChatContain20, _state$domainStates$r5, _state$domainStates$r6, _props$webChatContain21, _props$webChatContain22, _defaultWebChatContai2, _props$webChatContain23, _props$webChatContain24, _defaultWebChatContai3, _props$webChatContain25, _props$webChatContain26;
51
+ var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$webChatContain6, _state$domainStates$l4, _state$domainStates$l5, _props$webChatContain11, _props$webChatContain12, _state$domainStates$r, _state$domainStates$r2, _props$webChatContain13, _props$webChatContain14, _state$domainStates$r3, _state$domainStates$r4, _props$webChatContain15, _props$webChatContain16, _defaultWebChatContai, _props$webChatContain17, _props$webChatContain18, _props$webChatContain19, _props$webChatContain20, _state$domainStates$r5, _state$domainStates$r6, _props$webChatContain21, _props$webChatContain22, _defaultWebChatContai2, _props$webChatContain23, _props$webChatContain24, _defaultWebChatContai3, _props$webChatContain25, _props$webChatContain26, _props$webChatContain27, _props$webChatContain28;
50
52
  // Add a hook to make all links open a new window
51
53
  postDomPurifyActivities();
52
54
  const localizedTexts = {
@@ -121,7 +123,7 @@ const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) =>
121
123
  };
122
124
  webChatStore = (0, _botframeworkWebchat.createStore)({},
123
125
  //initial state
124
- _preProcessingMiddleware.default, _attachmentProcessingMiddleware.default, (0, _attachmentUploadValidatorMiddleware.default)((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : _state$domainStates$l.allowedFileExtensions, (_state$domainStates$l2 = state.domainStates.liveChatConfig) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.maxUploadFileSize, localizedTexts), (0, _customEventMiddleware.default)(_omnichannelChatComponents.BroadcastService), (0, _queueOverflowHandlerMiddleware.createQueueOverflowMiddleware)(state, dispatch), (0, _channelDataMiddleware.default)(addConversationalSurveyTagsCallback), (0, _conversationEndMiddleware.default)(conversationEndCallback, startConversationalSurveyCallback, endConversationalSurveyCallback), (0, _dataMaskingMiddleware.default)((_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : _state$domainStates$l3.DataMaskingInfo), _messageTimestampMiddleware.createMessageTimeStampMiddleware, _messageSequenceIdOverrideMiddleware.createMessageSequenceIdOverrideMiddleware, _gifUploadMiddleware.default, _htmlPlayerMiddleware.default, (0, _htmlTextMiddleware.default)(honorsTargetInHTMLLinks), (0, _maxMessageSizeValidator.default)(localizedTexts), _sanitizationMiddleware.default, (0, _callActionMiddleware.default)(),
126
+ _preProcessingMiddleware.default, _attachmentProcessingMiddleware.default, (0, _attachmentUploadValidatorMiddleware.default)((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : _state$domainStates$l.allowedFileExtensions, (_state$domainStates$l2 = state.domainStates.liveChatConfig) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.maxUploadFileSize, localizedTexts), (0, _customEventMiddleware.default)(_omnichannelChatComponents.BroadcastService), (0, _queueOverflowHandlerMiddleware.createQueueOverflowMiddleware)(state, dispatch), (0, _channelDataMiddleware.default)(addConversationalSurveyTagsCallback), (0, _conversationEndMiddleware.default)(conversationEndCallback, startConversationalSurveyCallback, endConversationalSurveyCallback), (0, _dataMaskingMiddleware.default)((_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : _state$domainStates$l3.DataMaskingInfo), _messageTimestampMiddleware.createMessageTimeStampMiddleware, _messageSequenceIdOverrideMiddleware.createMessageSequenceIdOverrideMiddleware, (0, _citationsMiddleware.createCitationsMiddleware)(state, dispatch), _gifUploadMiddleware.default, _htmlPlayerMiddleware.default, (0, _htmlTextMiddleware.default)(honorsTargetInHTMLLinks), (0, _maxMessageSizeValidator.default)(localizedTexts), _sanitizationMiddleware.default, (0, _callActionMiddleware.default)(), (0, _localizedStringsBotInitialsMiddleware.localizedStringsBotInitialsMiddleware)(),
125
127
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
126
128
  ...(((_props$webChatContain7 = props.webChatContainerProps) === null || _props$webChatContain7 === void 0 ? void 0 : _props$webChatContain7.storeMiddlewares) ?? []));
127
129
  _WebChatStoreLoader.WebChatStoreLoader.store = webChatStore;
@@ -175,7 +177,8 @@ const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) =>
175
177
  onTelemetry: (0, _WebChatLogger.createWebChatTelemetry)(),
176
178
  cardActionMiddleware: (0, _cardActionMiddleware.createCardActionMiddleware)(((_props$webChatContain25 = props.webChatContainerProps) === null || _props$webChatContain25 === void 0 ? void 0 : _props$webChatContain25.botMagicCode) || undefined),
177
179
  sendTypingIndicator: true,
178
- ...((_props$webChatContain26 = props.webChatContainerProps) === null || _props$webChatContain26 === void 0 ? void 0 : _props$webChatContain26.webChatProps)
180
+ overrideLocalizedStrings: (0, _localizedStringsBotInitialsMiddleware.getOverriddenLocalizedStrings)((_props$webChatContain26 = props.webChatContainerProps) === null || _props$webChatContain26 === void 0 ? void 0 : (_props$webChatContain27 = _props$webChatContain26.webChatProps) === null || _props$webChatContain27 === void 0 ? void 0 : _props$webChatContain27.overrideLocalizedStrings),
181
+ ...((_props$webChatContain28 = props.webChatContainerProps) === null || _props$webChatContain28 === void 0 ? void 0 : _props$webChatContain28.webChatProps)
179
182
  };
180
183
  return webChatProps;
181
184
  };
@@ -105,7 +105,7 @@ const setPreChatAndInitiateChat = async (facadeChatSDK, dispatch, setAdapter, is
105
105
 
106
106
  // If minimized, maximize the chat, if the state is missing, consider it as minimized
107
107
  if ((state === null || state === void 0 ? void 0 : state.appStates.isMinimized) === undefined || (state === null || state === void 0 ? void 0 : (_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.isMinimized) === true) {
108
- var _state$domainStates3, _state$domainStates3$, _state$domainStates4, _state$domainStates4$;
108
+ var _state$domainStates3, _state$domainStates3$, _state$domainStates4, _state$domainStates4$, _TelemetryManager$Int;
109
109
  dispatch({
110
110
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
111
111
  payload: false
@@ -116,7 +116,8 @@ const setPreChatAndInitiateChat = async (facadeChatSDK, dispatch, setAdapter, is
116
116
  eventName: _TelemetryConstants.BroadcastEvent.MaximizeChat,
117
117
  payload: {
118
118
  height: state === null || state === void 0 ? void 0 : (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : (_state$domainStates3$ = _state$domainStates3.widgetSize) === null || _state$domainStates3$ === void 0 ? void 0 : _state$domainStates3$.height,
119
- width: state === null || state === void 0 ? void 0 : (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : (_state$domainStates4$ = _state$domainStates4.widgetSize) === null || _state$domainStates4$ === void 0 ? void 0 : _state$domainStates4$.width
119
+ width: state === null || state === void 0 ? void 0 : (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : (_state$domainStates4$ = _state$domainStates4.widgetSize) === null || _state$domainStates4$ === void 0 ? void 0 : _state$domainStates4$.width,
120
+ runtimeId: _TelemetryManager.TelemetryManager === null || _TelemetryManager.TelemetryManager === void 0 ? void 0 : (_TelemetryManager$Int = _TelemetryManager.TelemetryManager.InternalTelemetryData) === null || _TelemetryManager$Int === void 0 ? void 0 : _TelemetryManager$Int.lcwRuntimeId
120
121
  }
121
122
  });
122
123
  }
@@ -137,7 +138,7 @@ const setPreChatAndInitiateChat = async (facadeChatSDK, dispatch, setAdapter, is
137
138
  * This is because a new change to control OOH as closed event when a widget is coming from chat.
138
139
  */
139
140
  if ((state === null || state === void 0 ? void 0 : state.appStates.isMinimized) === undefined || (state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.isMinimized) === true) {
140
- var _state$domainStates5, _state$domainStates5$, _state$domainStates6, _state$domainStates6$, _TelemetryManager$Int;
141
+ var _state$domainStates5, _state$domainStates5$, _state$domainStates6, _state$domainStates6$, _TelemetryManager$Int2;
141
142
  dispatch({
142
143
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
143
144
  payload: false
@@ -148,7 +149,7 @@ const setPreChatAndInitiateChat = async (facadeChatSDK, dispatch, setAdapter, is
148
149
  payload: {
149
150
  height: state === null || state === void 0 ? void 0 : (_state$domainStates5 = state.domainStates) === null || _state$domainStates5 === void 0 ? void 0 : (_state$domainStates5$ = _state$domainStates5.widgetSize) === null || _state$domainStates5$ === void 0 ? void 0 : _state$domainStates5$.height,
150
151
  width: state === null || state === void 0 ? void 0 : (_state$domainStates6 = state.domainStates) === null || _state$domainStates6 === void 0 ? void 0 : (_state$domainStates6$ = _state$domainStates6.widgetSize) === null || _state$domainStates6$ === void 0 ? void 0 : _state$domainStates6$.width,
151
- runtimeId: _TelemetryManager.TelemetryManager === null || _TelemetryManager.TelemetryManager === void 0 ? void 0 : (_TelemetryManager$Int = _TelemetryManager.TelemetryManager.InternalTelemetryData) === null || _TelemetryManager$Int === void 0 ? void 0 : _TelemetryManager$Int.lcwRuntimeId
152
+ runtimeId: _TelemetryManager.TelemetryManager === null || _TelemetryManager.TelemetryManager === void 0 ? void 0 : (_TelemetryManager$Int2 = _TelemetryManager.TelemetryManager.InternalTelemetryData) === null || _TelemetryManager$Int2 === void 0 ? void 0 : _TelemetryManager$Int2.lcwRuntimeId
152
153
  }
153
154
  });
154
155
  }
@@ -488,7 +488,8 @@ const LiveChatWidgetStateful = props => {
488
488
  eventName: _TelemetryConstants.BroadcastEvent.MaximizeChat,
489
489
  payload: {
490
490
  height: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$domain = inMemoryState.domainStates) === null || _inMemoryState$domain === void 0 ? void 0 : (_inMemoryState$domain2 = _inMemoryState$domain.widgetSize) === null || _inMemoryState$domain2 === void 0 ? void 0 : _inMemoryState$domain2.height,
491
- width: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$domain3 = inMemoryState.domainStates) === null || _inMemoryState$domain3 === void 0 ? void 0 : (_inMemoryState$domain4 = _inMemoryState$domain3.widgetSize) === null || _inMemoryState$domain4 === void 0 ? void 0 : _inMemoryState$domain4.width
491
+ width: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$domain3 = inMemoryState.domainStates) === null || _inMemoryState$domain3 === void 0 ? void 0 : (_inMemoryState$domain4 = _inMemoryState$domain3.widgetSize) === null || _inMemoryState$domain4 === void 0 ? void 0 : _inMemoryState$domain4.width,
492
+ lcwRuntimeId: _TelemetryManager.TelemetryManager.InternalTelemetryData.lcwRuntimeId
492
493
  }
493
494
  });
494
495
  return;
@@ -893,6 +894,29 @@ const LiveChatWidgetStateful = props => {
893
894
  background: ${scrollbarProps.thumbHoverColor};
894
895
  }
895
896
 
897
+ /* High Contrast mode support - optimized for all variants */
898
+ @media (prefers-contrast: high), (-ms-high-contrast: active), (forced-colors: active) {
899
+ ::-webkit-scrollbar-track {
900
+ background: Canvas !important;
901
+ border: 1px solid CanvasText !important;
902
+ }
903
+
904
+ ::-webkit-scrollbar-thumb {
905
+ background: CanvasText !important;
906
+ border: 1px solid Canvas !important;
907
+ min-height: 20px !important;
908
+ }
909
+
910
+ ::-webkit-scrollbar-thumb:hover {
911
+ background: Highlight !important;
912
+ border: 1px solid CanvasText !important;
913
+ }
914
+
915
+ ::-webkit-scrollbar-corner {
916
+ background: Canvas !important;
917
+ }
918
+ }
919
+
896
920
  .webchat__basic-transcript__activity-markdown-body > :last-child {
897
921
  margin-bottom: 0px;
898
922
  }
@@ -900,11 +924,21 @@ const LiveChatWidgetStateful = props => {
900
924
  .webchat__basic-transcript__activity-markdown-body > :first-child {
901
925
  margin-top: 0px;
902
926
  }
927
+
903
928
  .webchat__basic-transcript__activity-markdown-body img.webchat__render-markdown__external-link-icon {
904
929
  background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==) !important;
905
930
  height: .75em;
906
931
  margin-left: .25em;
907
932
  }
933
+
934
+ .webchat__link-definitions__header-text {
935
+ color: ${bubbleBackground}
936
+ }
937
+
938
+ .webchat__link-definitions__header-chevron {
939
+ color: ${bubbleBackground}
940
+ }
941
+
908
942
  ${(sendBoxTextArea === null || sendBoxTextArea === void 0 ? void 0 : sendBoxTextArea.minHeight) && `
909
943
  .webchat__auto-resize-textarea.webchat__send-box-text-box__text-area {
910
944
  min-height: ${sendBoxTextArea === null || sendBoxTextArea === void 0 ? void 0 : sendBoxTextArea.minHeight} !important;