@microsoft/omnichannel-chat-widget 1.1.0 → 1.1.1-main.1f4a6a7

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 (64) hide show
  1. package/lib/cjs/common/Constants.js +1 -0
  2. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +20 -15
  3. package/lib/cjs/common/telemetry/TelemetryConstants.js +2 -0
  4. package/lib/cjs/common/telemetry/TelemetryHelper.js +9 -0
  5. package/lib/cjs/components/draggable/DraggableChatWidget.js +168 -0
  6. package/lib/cjs/components/draggable/DraggableEventEmitter.js +74 -0
  7. package/lib/cjs/components/draggable/DraggableEventNames.js +14 -0
  8. package/lib/cjs/components/draggable/DraggableEventReceiver.js +34 -0
  9. package/lib/cjs/components/draggable/IDraggableElementPosition.js +1 -0
  10. package/lib/cjs/components/draggable/IDraggableElementPositionDelta.js +1 -0
  11. package/lib/cjs/components/draggable/IDraggableEvent.js +1 -0
  12. package/lib/cjs/components/headerstateful/HeaderStateful.js +27 -0
  13. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +4 -1
  14. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +15 -5
  15. package/lib/cjs/components/livechatwidget/common/startChat.js +1 -1
  16. package/lib/cjs/components/livechatwidget/interfaces/IDraggableChatWidgetProps.js +1 -0
  17. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +28 -8
  18. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +41 -14
  19. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +2 -1
  20. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +1 -0
  21. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +5 -0
  22. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
  23. package/lib/esm/common/Constants.js +1 -0
  24. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +18 -14
  25. package/lib/esm/common/telemetry/TelemetryConstants.js +2 -0
  26. package/lib/esm/common/telemetry/TelemetryHelper.js +9 -0
  27. package/lib/esm/components/draggable/DraggableChatWidget.js +158 -0
  28. package/lib/esm/components/draggable/DraggableEventEmitter.js +64 -0
  29. package/lib/esm/components/draggable/DraggableEventNames.js +7 -0
  30. package/lib/esm/components/draggable/DraggableEventReceiver.js +25 -0
  31. package/lib/esm/components/draggable/IDraggableElementPosition.js +1 -0
  32. package/lib/esm/components/draggable/IDraggableElementPositionDelta.js +1 -0
  33. package/lib/esm/components/draggable/IDraggableEvent.js +1 -0
  34. package/lib/esm/components/headerstateful/HeaderStateful.js +27 -0
  35. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +4 -1
  36. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +15 -5
  37. package/lib/esm/components/livechatwidget/common/startChat.js +1 -1
  38. package/lib/esm/components/livechatwidget/interfaces/IDraggableChatWidgetProps.js +1 -0
  39. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +28 -8
  40. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +41 -14
  41. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +2 -1
  42. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +1 -0
  43. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +5 -0
  44. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
  45. package/lib/types/common/Constants.d.ts +1 -0
  46. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +1 -0
  47. package/lib/types/common/telemetry/TelemetryConstants.d.ts +1 -0
  48. package/lib/types/components/draggable/DraggableChatWidget.d.ts +9 -0
  49. package/lib/types/components/draggable/DraggableEventEmitter.d.ts +27 -0
  50. package/lib/types/components/draggable/DraggableEventNames.d.ts +6 -0
  51. package/lib/types/components/draggable/DraggableEventReceiver.d.ts +27 -0
  52. package/lib/types/components/draggable/IDraggableElementPosition.d.ts +5 -0
  53. package/lib/types/components/draggable/IDraggableElementPositionDelta.d.ts +5 -0
  54. package/lib/types/components/draggable/IDraggableEvent.d.ts +12 -0
  55. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +12 -0
  56. package/lib/types/components/livechatwidget/interfaces/IDraggableChatWidgetProps.d.ts +10 -0
  57. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -0
  58. package/lib/types/components/webchatcontainerstateful/WebChatContainerStateful.d.ts +2 -2
  59. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +5 -0
  60. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  61. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
  62. package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.d.ts +2 -1
  63. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +1 -0
  64. package/package.json +3 -3
@@ -114,6 +114,7 @@ _defineProperty(Constants, "PopoutCacheSuffix", "popout");
114
114
  _defineProperty(Constants, "LWICheckOnVisibilityTimeout", 3 * 60 * 1000);
115
115
  // 3 minute
116
116
  // Popup mode custom context response event message name
117
+ _defineProperty(Constants, "InitContextParamsRequest", "initContextParamsRequest");
117
118
  _defineProperty(Constants, "InitContextParamsResponse", "initContextParamsResponse");
118
119
  const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
119
120
  exports.Regex = Regex;
@@ -3,30 +3,35 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.defaultClientDataStoreProvider = void 0;
6
+ exports.isCookieAllowed = exports.defaultClientDataStoreProvider = void 0;
7
7
  var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
8
+ var _Constants = require("../../Constants");
8
9
  var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
9
10
  var _defaultInMemoryDataStore = require("./defaultInMemoryDataStore");
10
- var _Constants = require("../../Constants");
11
11
  /* eslint-disable @typescript-eslint/no-explicit-any */
12
12
 
13
+ const isCookieAllowed = () => {
14
+ try {
15
+ localStorage;
16
+ sessionStorage;
17
+ return true;
18
+ } catch (error) {
19
+ if (!window.TPCWarningLogged) {
20
+ console.warn("Third party cookies blocked.");
21
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
22
+ Event: _TelemetryConstants.TelemetryEvent.ThirdPartyCookiesBlocked,
23
+ Description: "Third party cookies are blocked. Cannot access local storage or session storage."
24
+ });
25
+ window.TPCWarningLogged = true;
26
+ }
27
+ return false;
28
+ }
29
+ };
30
+ exports.isCookieAllowed = isCookieAllowed;
13
31
  const defaultClientDataStoreProvider = function () {
14
32
  let cacheTtlinMins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
15
33
  let storageType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Constants.StorageType.localStorage;
16
34
  let ttlInMs = 0;
17
- const isCookieAllowed = () => {
18
- try {
19
- localStorage;
20
- sessionStorage;
21
- return true;
22
- } catch (error) {
23
- if (!window.TPCWarningShown) {
24
- console.warn("Third party cookies blocked.");
25
- window.TPCWarningShown = true;
26
- }
27
- return false;
28
- }
29
- };
30
35
  if (ttlInMs == 0) {
31
36
  ttlInMs = cacheTtlinMins * 60 * 1000;
32
37
  }
@@ -164,6 +164,7 @@ exports.TelemetryEvent = TelemetryEvent;
164
164
  TelemetryEvent["SetBotAuthProviderHideCard"] = "SetBotAuthProviderHideCard";
165
165
  TelemetryEvent["SetBotAuthProviderDisplayCard"] = "SetBotAuthProviderDisplayCard";
166
166
  TelemetryEvent["SetBotAuthProviderNotFound"] = "SetBotAuthProviderNotFound";
167
+ TelemetryEvent["ThirdPartyCookiesBlocked"] = "ThirdPartyCookiesBlocked";
167
168
  TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
168
169
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
169
170
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
@@ -231,6 +232,7 @@ class TelemetryConstants {
231
232
  case TelemetryEvent.OutOfOfficePaneLoaded:
232
233
  case TelemetryEvent.ConfirmationPaneLoaded:
233
234
  case TelemetryEvent.ProactiveChatPaneLoaded:
235
+ case TelemetryEvent.ThirdPartyCookiesBlocked:
234
236
  return ScenarioType.LOAD;
235
237
  case TelemetryEvent.PrechatSubmitted:
236
238
  case TelemetryEvent.LCWChatButtonClicked:
@@ -167,6 +167,15 @@ class TelemetryHelper {
167
167
  }
168
168
  static addWidgetDataToTelemetry(telemetryConfig, telemetryInternalData) {
169
169
  const telemetryDataLocal = telemetryInternalData;
170
+ if (!(telemetryConfig !== null && telemetryConfig !== void 0 && telemetryConfig.appId) || (telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.appId.trim()) === "") {
171
+ throw new Error("TelemetryConfig.appId is not set");
172
+ }
173
+ if (!(telemetryConfig !== null && telemetryConfig !== void 0 && telemetryConfig.orgId) || (telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.orgId.trim()) === "") {
174
+ throw new Error("TelemetryConfig.orgId is not set");
175
+ }
176
+ if (!(telemetryConfig !== null && telemetryConfig !== void 0 && telemetryConfig.orgUrl) || (telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.orgUrl.trim()) === "") {
177
+ throw new Error("TelemetryConfig.orgUrl is not set");
178
+ }
170
179
  telemetryDataLocal.widgetId = telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.appId;
171
180
  telemetryDataLocal.orgId = telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.orgId;
172
181
  telemetryDataLocal.orgUrl = telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.orgUrl;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _DraggableEventReceiver = _interopRequireDefault(require("./DraggableEventReceiver"));
9
+ var _DraggableEventNames = _interopRequireDefault(require("./DraggableEventNames"));
10
+ var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
11
+ var _ConversationState = require("../../contexts/common/ConversationState");
12
+ var _utils = require("../../common/utils");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ 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); }
15
+ 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; }
16
+ const DraggableChatWidget = props => {
17
+ const [state] = (0, _useChatContextStore.default)();
18
+ const [initialPosition, setInitialPosition] = (0, _react.useState)({
19
+ offsetLeft: 0,
20
+ offsetTop: 0
21
+ });
22
+ const [cachedPosition, setCachedPosition] = (0, _react.useState)(undefined);
23
+ const [position, setPosition] = (0, _react.useState)({
24
+ offsetLeft: 0,
25
+ offsetTop: 0
26
+ });
27
+ const [delta, setDelta] = (0, _react.useState)({
28
+ left: 0,
29
+ top: 0
30
+ });
31
+ const repositionElement = (draggableElement, offsetLeft, offsetTop) => {
32
+ draggableElement.style.left = `${offsetLeft}px`;
33
+ draggableElement.style.top = `${offsetTop}px`;
34
+ };
35
+ const calculateOffsetsWithinViewport = (0, _react.useCallback)((id, offset, delta) => {
36
+ const draggableElement = document.getElementById(id);
37
+ const positionRelativeToViewport = draggableElement.getBoundingClientRect();
38
+ if ((0, _utils.isNullOrUndefined)(draggableElement) || (0, _utils.isNullOrUndefined)(positionRelativeToViewport) || (0, _utils.isNullOrUndefined)(offset.offsetLeft) || (0, _utils.isNullOrUndefined)(offset.offsetTop)) {
39
+ return;
40
+ }
41
+ let offsetLeft = offset.offsetLeft;
42
+ let offsetTop = offset.offsetTop;
43
+
44
+ // Widget size larger than viewport would not have any restriction
45
+ if (positionRelativeToViewport.width > window.innerWidth) {
46
+ return;
47
+ }
48
+ if (positionRelativeToViewport.height > window.innerHeight) {
49
+ return;
50
+ }
51
+
52
+ // Ensures widget is within viewport
53
+ if (positionRelativeToViewport.x < 0) {
54
+ offsetLeft = 0 - delta.left;
55
+ }
56
+ if (positionRelativeToViewport.y < 0) {
57
+ offsetTop = 0 - delta.top;
58
+ }
59
+ if (positionRelativeToViewport.x + positionRelativeToViewport.width > window.innerWidth) {
60
+ offsetLeft = window.innerWidth - positionRelativeToViewport.width - delta.left;
61
+ }
62
+ if (positionRelativeToViewport.y + positionRelativeToViewport.height > window.innerHeight) {
63
+ offsetTop = window.innerHeight - positionRelativeToViewport.height - delta.top;
64
+ }
65
+ repositionElement(draggableElement, offsetLeft, offsetTop);
66
+ setPosition({
67
+ offsetLeft,
68
+ offsetTop
69
+ });
70
+ }, []);
71
+ const resetPosition = (0, _react.useCallback)(targetPosition => {
72
+ calculateOffsetsWithinViewport(props.elementId, targetPosition, delta); // Ensure viewport restriction
73
+ }, [delta]);
74
+ (0, _react.useEffect)(() => {
75
+ if (props.disabled === true) {
76
+ return;
77
+ }
78
+ const cacheInitialPosition = () => {
79
+ const draggableElement = document.getElementById(props.elementId);
80
+ const offsetLeft = draggableElement.offsetLeft;
81
+ const offsetTop = draggableElement.offsetTop;
82
+ setInitialPosition({
83
+ offsetLeft,
84
+ offsetTop
85
+ });
86
+ };
87
+ const calculateOffsets = () => {
88
+ const draggableElement = document.getElementById(props.elementId);
89
+ const offsetLeft = draggableElement.offsetLeft;
90
+ const offsetTop = draggableElement.offsetTop;
91
+
92
+ // Calculates the delta between the position of the widget and the position of the widget relative to the viewport which will be used for repositioning
93
+ const positionRelativeToViewport = draggableElement.getBoundingClientRect();
94
+ const left = positionRelativeToViewport.left - offsetLeft;
95
+ const top = positionRelativeToViewport.top - offsetTop;
96
+ setDelta({
97
+ left,
98
+ top
99
+ });
100
+ calculateOffsetsWithinViewport(props.elementId, {
101
+ offsetLeft,
102
+ offsetTop
103
+ }, {
104
+ left,
105
+ top
106
+ });
107
+ };
108
+ calculateOffsets();
109
+ cacheInitialPosition();
110
+ window.addEventListener("resize", calculateOffsets);
111
+ return () => {
112
+ window.removeEventListener("resize", calculateOffsets);
113
+ };
114
+ }, [props.disabled]);
115
+ (0, _react.useEffect)(() => {
116
+ if (props.disabled === true) {
117
+ return;
118
+ }
119
+ if (state.appStates.conversationState == _ConversationState.ConversationState.Closed) {
120
+ resetPosition(initialPosition);
121
+ } else if (state.appStates.isMinimized) {
122
+ const draggableElement = document.getElementById(props.elementId);
123
+ const offsetLeft = draggableElement.offsetLeft;
124
+ const offsetTop = draggableElement.offsetTop;
125
+ if (!cachedPosition) {
126
+ setCachedPosition({
127
+ offsetLeft,
128
+ offsetTop
129
+ });
130
+ }
131
+ resetPosition(initialPosition);
132
+ } else if (!(0, _utils.isNullOrUndefined)(state.appStates.isMinimized) && !state.appStates.isMinimized) {
133
+ if (cachedPosition) {
134
+ resetPosition(cachedPosition);
135
+ setCachedPosition(undefined);
136
+ }
137
+ }
138
+ }, [props.disabled, state.appStates.isMinimized, state.appStates.conversationState, initialPosition, cachedPosition]);
139
+ const onEvent = (0, _react.useCallback)(event => {
140
+ if (event.eventName === _DraggableEventNames.default.Dragging) {
141
+ if (event.offset) {
142
+ const offsetLeft = position.offsetLeft + event.offset.x;
143
+ const offsetTop = position.offsetTop + event.offset.y;
144
+
145
+ // Update position via DOM manipulation to prevent <Stack/> continuously rendering on style change causing high CPU spike
146
+ const draggableElement = document.getElementById(props.elementId);
147
+ repositionElement(draggableElement, offsetLeft, offsetTop);
148
+ setPosition({
149
+ offsetLeft,
150
+ offsetTop
151
+ });
152
+ calculateOffsetsWithinViewport(props.elementId, {
153
+ offsetLeft,
154
+ offsetTop
155
+ }, delta);
156
+ }
157
+ }
158
+ }, [position, delta]);
159
+ if (props.disabled === true) {
160
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.children);
161
+ }
162
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_DraggableEventReceiver.default, {
163
+ channel: props.channel ?? "lcw",
164
+ onEvent: onEvent
165
+ }, props.children));
166
+ };
167
+ var _default = DraggableChatWidget;
168
+ exports.default = _default;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _DraggableEventNames = _interopRequireDefault(require("./DraggableEventNames"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ 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); }
11
+ 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; }
12
+ /**
13
+ * Trigger component which would send IDraggableEvent to the receiver to update the draggable component position
14
+ *
15
+ * @param props IDraggableEventEmitterProps
16
+ * @returns
17
+ */
18
+ const DraggableEventEmitter = props => {
19
+ const [initialized, setInitialized] = (0, _react.useState)(false);
20
+ const postMessage = (0, _react.useCallback)(data => {
21
+ const targetWindow = props.targetWindow ?? window;
22
+ targetWindow.postMessage(data, "*");
23
+ }, [props.targetWindow]);
24
+ const dragStart = (0, _react.useCallback)(event => {
25
+ postMessage({
26
+ channel: props.channel,
27
+ eventName: _DraggableEventNames.default.DragStart
28
+ });
29
+ let cursor = {
30
+ x: event.screenX,
31
+ y: event.screenY
32
+ }; // Cursor init position
33
+ const dragging = event => {
34
+ event.preventDefault();
35
+ const newX = event.screenX;
36
+ const newY = event.screenY;
37
+ const offset = {
38
+ x: newX - cursor.x,
39
+ y: newY - cursor.y
40
+ }; // Calculate cursor position diff
41
+ cursor = {
42
+ ...cursor,
43
+ x: newX,
44
+ y: newY
45
+ }; // Update cursor new position
46
+
47
+ postMessage({
48
+ channel: props.channel,
49
+ eventName: _DraggableEventNames.default.Dragging,
50
+ offset
51
+ });
52
+ };
53
+ const dragEnd = () => {
54
+ postMessage({
55
+ channel: props.channel,
56
+ eventName: _DraggableEventNames.default.DragEnd
57
+ });
58
+ document.removeEventListener("mousemove", dragging);
59
+ document.removeEventListener("mouseup", dragEnd);
60
+ };
61
+ document.addEventListener("mousemove", dragging);
62
+ document.addEventListener("mouseup", dragEnd);
63
+ }, [props.channel]);
64
+ (0, _react.useEffect)(() => {
65
+ if (!initialized && props.elementId) {
66
+ const element = document.getElementById(props.elementId);
67
+ element === null || element === void 0 ? void 0 : element.addEventListener("mousedown", dragStart);
68
+ setInitialized(true);
69
+ }
70
+ }, [dragStart, props.elementId, initialized]);
71
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, " ", props.children, " ");
72
+ };
73
+ var _default = DraggableEventEmitter;
74
+ exports.default = _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var DraggableEventNames;
8
+ (function (DraggableEventNames) {
9
+ DraggableEventNames["DragStart"] = "DragStart";
10
+ DraggableEventNames["Dragging"] = "Dragging";
11
+ DraggableEventNames["DragEnd"] = "DragEnd";
12
+ })(DraggableEventNames || (DraggableEventNames = {}));
13
+ var _default = DraggableEventNames;
14
+ exports.default = _default;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ 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); }
9
+ 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; }
10
+ /**
11
+ * Component which would listen to DraggableEvent, update the component position or react accordingly.
12
+ *
13
+ * @param props IDraggableEventReceiverProps
14
+ * @returns
15
+ */
16
+ const DraggableEventReceiver = props => {
17
+ (0, _react.useEffect)(() => {
18
+ const listener = event => {
19
+ const {
20
+ data
21
+ } = event;
22
+ if (data.channel && props.channel && data.channel === props.channel) {
23
+ props.onEvent(data);
24
+ }
25
+ };
26
+ window.addEventListener("message", listener);
27
+ return () => {
28
+ window.removeEventListener("message", listener);
29
+ };
30
+ }, [props]);
31
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, " ", props.children, " ");
32
+ };
33
+ var _default = DraggableEventReceiver;
34
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -14,6 +14,7 @@ var _defaultOutOfOfficeHeaderStyleProps = require("./common/styleProps/defaultOu
14
14
  var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
15
15
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
16
16
  var _Constants = require("../../common/Constants");
17
+ var _DraggableEventEmitter = _interopRequireDefault(require("../draggable/DraggableEventEmitter"));
17
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19
  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
20
  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; }
@@ -100,6 +101,32 @@ const HeaderStateful = props => {
100
101
  var _state$domainStates2;
101
102
  localConfirmationPaneState.current = state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.confirmationState;
102
103
  }, [state === null || state === void 0 ? void 0 : (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.confirmationState]);
104
+ const draggableEventEmitterProps = {
105
+ channel: props.draggableEventChannel ?? "lcw",
106
+ elementId: outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeControlProps.id : controlProps.id,
107
+ targetWindow: props.draggableEventEmitterTargetWindow ?? window
108
+ };
109
+ if (props.draggable === true) {
110
+ var _generalStyleProps;
111
+ const styleProps = outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeStyleProps : headerProps === null || headerProps === void 0 ? void 0 : headerProps.styleProps;
112
+ const draggableSelectors = {
113
+ "&:hover": {
114
+ cursor: "move"
115
+ }
116
+ };
117
+ const selectors = Object.assign({}, (styleProps === null || styleProps === void 0 ? void 0 : (_generalStyleProps = styleProps.generalStyleProps) === null || _generalStyleProps === void 0 ? void 0 : _generalStyleProps.selectors) || {}, draggableSelectors); // eslint-disable-line @typescript-eslint/no-explicit-any
118
+ const generalStyleProps = Object.assign({}, styleProps === null || styleProps === void 0 ? void 0 : styleProps.generalStyleProps, {
119
+ selectors
120
+ });
121
+ const draggableStyleProps = Object.assign({}, styleProps, {
122
+ generalStyleProps
123
+ });
124
+ return /*#__PURE__*/_react.default.createElement(_DraggableEventEmitter.default, draggableEventEmitterProps, /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Header, {
125
+ componentOverrides: headerProps === null || headerProps === void 0 ? void 0 : headerProps.componentOverrides,
126
+ controlProps: outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeControlProps : controlProps,
127
+ styleProps: draggableStyleProps
128
+ }));
129
+ }
103
130
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Header, {
104
131
  componentOverrides: headerProps === null || headerProps === void 0 ? void 0 : headerProps.componentOverrides,
105
132
  controlProps: outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeControlProps : controlProps,
@@ -1804,7 +1804,10 @@ const dummyDefaultProps = {
1804
1804
  },
1805
1805
  adaptiveCardStyles: {
1806
1806
  background: "white",
1807
- color: "black"
1807
+ color: "black",
1808
+ anchorColor: "blue",
1809
+ textWhiteSpace: "normal",
1810
+ buttonWhiteSpace: "normal"
1808
1811
  },
1809
1812
  hyperlinkTextOverride: false
1810
1813
  },
@@ -10,6 +10,7 @@ var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
10
10
  var _defaultAriaConfig = require("../../../common/telemetry/defaultConfigs/defaultAriaConfig");
11
11
  var _defaultTelemetryInternalData = require("../../../common/telemetry/defaultConfigs/defaultTelemetryInternalData");
12
12
  var _defaultTelemetryConfiguration = require("../../../common/telemetry/defaultConfigs/defaultTelemetryConfiguration");
13
+ var _utils = require("../../../common/utils");
13
14
  const registerTelemetryLoggers = (props, dispatch) => {
14
15
  var _props$liveChatContex, _props$liveChatContex2;
15
16
  const telemetryConfig = {
@@ -20,7 +21,7 @@ const registerTelemetryLoggers = (props, dispatch) => {
20
21
  var _props$liveChatContex3, _props$liveChatContex4;
21
22
  _TelemetryManager.TelemetryManager.InternalTelemetryData = (_props$liveChatContex3 = props.liveChatContextFromCache) === null || _props$liveChatContex3 === void 0 ? void 0 : (_props$liveChatContex4 = _props$liveChatContex3.domainStates) === null || _props$liveChatContex4 === void 0 ? void 0 : _props$liveChatContex4.telemetryInternalData;
22
23
  } else {
23
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$chatSDK3, _props$chatSDK3$omnic;
24
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$chatSDK3, _props$chatSDK3$omnic, _props$chatSDK4, _props$chatSDK4$omnic, _props$chatSDK5, _props$chatSDK5$omnic, _props$chatSDK6, _props$chatSDK6$omnic, _props$chatSDK7, _props$chatSDK7$omnic, _props$chatSDK8, _props$chatSDK8$omnic, _props$chatSDK9, _props$chatSDK9$omnic;
24
25
  let telemetryData = {
25
26
  ..._defaultTelemetryInternalData.defaultInternalTelemetryData,
26
27
  telemetryConfig: Object.assign({}, _defaultTelemetryConfiguration.defaultTelemetryConfiguration, telemetryConfig),
@@ -29,13 +30,22 @@ const registerTelemetryLoggers = (props, dispatch) => {
29
30
  if (props.chatConfig) {
30
31
  telemetryData = _TelemetryHelper.TelemetryHelper.addChatConfigDataToTelemetry(props === null || props === void 0 ? void 0 : props.chatConfig, telemetryData);
31
32
  }
32
- telemetryData = _TelemetryHelper.TelemetryHelper.addWidgetDataToTelemetry(telemetryConfig, telemetryData);
33
+ if (!((_props$chatSDK = props.chatSDK) !== null && _props$chatSDK !== void 0 && (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) !== null && _props$chatSDK$omnich !== void 0 && _props$chatSDK$omnich.orgId) || ((_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.orgId.trim().length) === 0) {
34
+ throw new Error("orgId is undefined in ChatSDK");
35
+ }
36
+ if (!((_props$chatSDK3 = props.chatSDK) !== null && _props$chatSDK3 !== void 0 && (_props$chatSDK3$omnic = _props$chatSDK3.omnichannelConfig) !== null && _props$chatSDK3$omnic !== void 0 && _props$chatSDK3$omnic.widgetId) || ((_props$chatSDK4 = props.chatSDK) === null || _props$chatSDK4 === void 0 ? void 0 : (_props$chatSDK4$omnic = _props$chatSDK4.omnichannelConfig) === null || _props$chatSDK4$omnic === void 0 ? void 0 : _props$chatSDK4$omnic.widgetId.trim().length) === 0) {
37
+ throw new Error("widgetId is undefined in ChatSDK");
38
+ }
39
+ if (!((_props$chatSDK5 = props.chatSDK) !== null && _props$chatSDK5 !== void 0 && (_props$chatSDK5$omnic = _props$chatSDK5.omnichannelConfig) !== null && _props$chatSDK5$omnic !== void 0 && _props$chatSDK5$omnic.orgUrl) || ((_props$chatSDK6 = props.chatSDK) === null || _props$chatSDK6 === void 0 ? void 0 : (_props$chatSDK6$omnic = _props$chatSDK6.omnichannelConfig) === null || _props$chatSDK6$omnic === void 0 ? void 0 : _props$chatSDK6$omnic.orgUrl.trim().length) === 0) {
40
+ throw new Error("orgUrl is undefined in ChatSDK");
41
+ }
33
42
  telemetryData.OCChatSDKVersion = telemetryConfig.OCChatSDKVersion ?? "0.0.0-0";
34
43
  telemetryData.chatComponentVersion = telemetryConfig.chatComponentVersion ?? "0.0.0-0";
35
44
  telemetryData.chatWidgetVersion = telemetryConfig.chatWidgetVersion ?? "0.0.0-0";
36
- telemetryData.orgId = (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId;
37
- telemetryData.widgetId = (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId;
38
- telemetryData.orgUrl = (_props$chatSDK3 = props.chatSDK) === null || _props$chatSDK3 === void 0 ? void 0 : (_props$chatSDK3$omnic = _props$chatSDK3.omnichannelConfig) === null || _props$chatSDK3$omnic === void 0 ? void 0 : _props$chatSDK3$omnic.orgUrl;
45
+ telemetryData.orgId = (_props$chatSDK7 = props.chatSDK) === null || _props$chatSDK7 === void 0 ? void 0 : (_props$chatSDK7$omnic = _props$chatSDK7.omnichannelConfig) === null || _props$chatSDK7$omnic === void 0 ? void 0 : _props$chatSDK7$omnic.orgId;
46
+ telemetryData.widgetId = (_props$chatSDK8 = props.chatSDK) === null || _props$chatSDK8 === void 0 ? void 0 : (_props$chatSDK8$omnic = _props$chatSDK8.omnichannelConfig) === null || _props$chatSDK8$omnic === void 0 ? void 0 : _props$chatSDK8$omnic.widgetId;
47
+ telemetryData.orgUrl = (_props$chatSDK9 = props.chatSDK) === null || _props$chatSDK9 === void 0 ? void 0 : (_props$chatSDK9$omnic = _props$chatSDK9.omnichannelConfig) === null || _props$chatSDK9$omnic === void 0 ? void 0 : _props$chatSDK9$omnic.orgUrl;
48
+ telemetryData.lcwRuntimeId = telemetryConfig.LCWRuntimeId ?? (0, _utils.newGuid)();
39
49
  _TelemetryManager.TelemetryManager.InternalTelemetryData = telemetryData;
40
50
  dispatch({
41
51
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_TELEMETRY_DATA,
@@ -417,7 +417,7 @@ const getInitContextParamForPopoutFromOuterScope = async scope => {
417
417
  };
418
418
  window.addEventListener("message", getInitContextParamsFromParent, false);
419
419
  scope.postMessage({
420
- messageName: _Constants.Constants.InitContextParamsResponse
420
+ messageName: _Constants.Constants.InitContextParamsRequest
421
421
  }, "*");
422
422
  await waitPromise;
423
423
  window.removeEventListener("message", getInitContextParamsFromParent, false);