@microsoft/omnichannel-chat-widget 1.8.3-main.ec1328d → 1.8.4-main.1bfa518

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 (204) hide show
  1. package/README.md +27 -0
  2. package/lib/cjs/common/Constants.js +9 -0
  3. package/lib/cjs/common/facades/FacadeChatSDK.js +6 -0
  4. package/lib/cjs/common/telemetry/AppInsightsEvents.js +14 -9
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +49 -2
  6. package/lib/cjs/common/telemetry/TelemetryManager.js +10 -7
  7. package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +29 -13
  8. package/lib/cjs/common/utils/SecureEventBus.js +307 -0
  9. package/lib/cjs/common/utils/dispatchCustomEvent.js +25 -0
  10. package/lib/cjs/common/utils.js +14 -1
  11. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +16 -4
  12. package/lib/cjs/components/citationpanestateful/CitationDim.js +29 -0
  13. package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +218 -0
  14. package/lib/cjs/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +70 -0
  15. package/lib/cjs/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
  16. package/lib/cjs/components/headerstateful/HeaderStateful.js +8 -2
  17. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +4 -4
  18. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +127 -0
  19. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
  20. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +15 -0
  21. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +290 -0
  22. package/lib/cjs/components/livechatwidget/common/createAdapter.js +2 -0
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +17 -0
  24. package/lib/cjs/components/livechatwidget/common/endChat.js +54 -12
  25. package/lib/cjs/components/livechatwidget/common/getMockChatSDKIfApplicable.js +4 -3
  26. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +16 -7
  27. package/lib/cjs/components/livechatwidget/common/liveChatConfigUtils.js +36 -4
  28. package/lib/cjs/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +2 -1
  29. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +3 -0
  30. package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
  31. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
  32. package/lib/cjs/components/livechatwidget/common/startChat.js +10 -5
  33. package/lib/cjs/components/livechatwidget/common/startChatErrorHandler.js +24 -4
  34. package/lib/cjs/components/livechatwidget/interfaces/IMockProps.js +8 -2
  35. package/lib/cjs/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
  36. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +152 -33
  37. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +37 -8
  38. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +12 -3
  39. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +135 -26
  40. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +43 -14
  41. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatSDK.js +6 -1
  42. package/lib/cjs/components/webchatcontainerstateful/common/activities/botActivity.js +14 -0
  43. package/lib/cjs/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +17 -0
  44. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +103 -0
  45. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
  46. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +1 -1
  47. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +1 -1
  48. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +36 -2
  49. package/lib/cjs/components/webchatcontainerstateful/common/utils/fontUtils.js +28 -0
  50. package/lib/cjs/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +57 -0
  51. package/lib/cjs/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
  52. package/lib/cjs/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.js +1 -0
  53. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +121 -0
  54. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +10 -0
  55. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +47 -0
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1058 -0
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +34 -0
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +50 -1
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +16 -2
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +20 -0
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +1 -1
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +2 -2
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +59 -0
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +5 -3
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -2
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +102 -30
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
  70. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +47 -45
  71. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +9 -1
  72. package/lib/cjs/contexts/createReducer.js +30 -0
  73. package/lib/cjs/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
  74. package/lib/cjs/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
  75. package/lib/cjs/index.js +9 -1
  76. package/lib/cjs/plugins/newMessageEventHandler.js +4 -1
  77. package/lib/esm/common/Constants.js +9 -0
  78. package/lib/esm/common/facades/FacadeChatSDK.js +6 -0
  79. package/lib/esm/common/telemetry/AppInsightsEvents.js +14 -9
  80. package/lib/esm/common/telemetry/TelemetryConstants.js +47 -1
  81. package/lib/esm/common/telemetry/TelemetryManager.js +10 -7
  82. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +30 -14
  83. package/lib/esm/common/utils/SecureEventBus.js +328 -0
  84. package/lib/esm/common/utils/dispatchCustomEvent.js +18 -0
  85. package/lib/esm/common/utils.js +11 -0
  86. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +17 -5
  87. package/lib/esm/components/citationpanestateful/CitationDim.js +20 -0
  88. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +207 -0
  89. package/lib/esm/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +61 -0
  90. package/lib/esm/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
  91. package/lib/esm/components/headerstateful/HeaderStateful.js +9 -3
  92. package/lib/esm/components/livechatwidget/LiveChatWidget.js +4 -4
  93. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +120 -0
  94. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
  95. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +8 -0
  96. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +283 -0
  97. package/lib/esm/components/livechatwidget/common/createAdapter.js +2 -0
  98. package/lib/esm/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +10 -0
  99. package/lib/esm/components/livechatwidget/common/endChat.js +55 -13
  100. package/lib/esm/components/livechatwidget/common/getMockChatSDKIfApplicable.js +4 -3
  101. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +16 -7
  102. package/lib/esm/components/livechatwidget/common/liveChatConfigUtils.js +33 -2
  103. package/lib/esm/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +2 -1
  104. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +3 -0
  105. package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
  106. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
  107. package/lib/esm/components/livechatwidget/common/startChat.js +12 -7
  108. package/lib/esm/components/livechatwidget/common/startChatErrorHandler.js +23 -4
  109. package/lib/esm/components/livechatwidget/interfaces/IMockProps.js +3 -3
  110. package/lib/esm/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
  111. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -34
  112. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +39 -10
  113. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -4
  114. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +135 -27
  115. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +43 -14
  116. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatSDK.js +6 -1
  117. package/lib/esm/components/webchatcontainerstateful/common/activities/botActivity.js +7 -0
  118. package/lib/esm/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +9 -0
  119. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +96 -0
  120. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
  121. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  122. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +1 -1
  123. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +32 -0
  124. package/lib/esm/components/webchatcontainerstateful/common/utils/fontUtils.js +21 -0
  125. package/lib/esm/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +49 -0
  126. package/lib/esm/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
  127. package/lib/esm/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.js +1 -0
  128. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +114 -0
  129. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +3 -0
  130. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +39 -0
  131. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1080 -0
  132. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +25 -0
  133. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +48 -1
  134. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +13 -0
  135. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  136. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +13 -0
  137. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +1 -1
  138. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +1 -1
  139. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +52 -0
  140. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +3 -2
  141. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +1 -1
  142. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +103 -30
  143. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
  144. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
  145. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +47 -45
  146. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +9 -1
  147. package/lib/esm/contexts/createReducer.js +30 -0
  148. package/lib/esm/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
  149. package/lib/esm/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
  150. package/lib/esm/index.js +1 -0
  151. package/lib/esm/plugins/newMessageEventHandler.js +4 -1
  152. package/lib/types/common/Constants.d.ts +8 -0
  153. package/lib/types/common/facades/FacadeChatSDK.d.ts +3 -1
  154. package/lib/types/common/telemetry/TelemetryConstants.d.ts +44 -2
  155. package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +1 -0
  156. package/lib/types/common/utils/SecureEventBus.d.ts +159 -0
  157. package/lib/types/common/utils/dispatchCustomEvent.d.ts +2 -0
  158. package/lib/types/common/utils.d.ts +9 -1
  159. package/lib/types/components/citationpanestateful/CitationDim.d.ts +5 -0
  160. package/lib/types/components/citationpanestateful/CitationPaneStateful.d.ts +4 -0
  161. package/lib/types/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.d.ts +11 -0
  162. package/lib/types/components/citationpanestateful/interfaces/ICitationPaneStatefulProps.d.ts +19 -0
  163. package/lib/types/components/confirmationpanestateful/common/defaultProps/defaultConfirmationPaneLocalizedTexts.d.ts +1 -1
  164. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulProps.d.ts +1 -1
  165. package/lib/types/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.d.ts +45 -0
  166. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +7 -0
  167. package/lib/types/components/livechatwidget/common/PersistentConversationHandler.d.ts +28 -0
  168. package/lib/types/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.d.ts +2 -0
  169. package/lib/types/components/livechatwidget/common/getMockChatSDKIfApplicable.d.ts +2 -1
  170. package/lib/types/components/livechatwidget/common/liveChatConfigUtils.d.ts +11 -0
  171. package/lib/types/components/livechatwidget/common/startChatErrorHandler.d.ts +1 -0
  172. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +5 -1
  173. package/lib/types/components/livechatwidget/interfaces/IMockProps.d.ts +5 -3
  174. package/lib/types/components/livechatwidget/interfaces/IPersistentChatHistoryProps.d.ts +11 -0
  175. package/lib/types/components/webchatcontainerstateful/common/DesignerChatAdapter.d.ts +4 -2
  176. package/lib/types/components/webchatcontainerstateful/common/DesignerChatSDK.d.ts +5 -0
  177. package/lib/types/components/webchatcontainerstateful/common/activities/botActivity.d.ts +7 -0
  178. package/lib/types/components/webchatcontainerstateful/common/activities/conversationDividerActivity.d.ts +10 -0
  179. package/lib/types/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.d.ts +2 -0
  180. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +6 -1
  181. package/lib/types/components/webchatcontainerstateful/common/utils/fontUtils.d.ts +10 -0
  182. package/lib/types/components/webchatcontainerstateful/hooks/usePersistentChatHistory.d.ts +4 -0
  183. package/lib/types/components/webchatcontainerstateful/interfaces/ICitation.d.ts +12 -0
  184. package/lib/types/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.d.ts +15 -0
  185. package/lib/types/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.d.ts +6 -0
  186. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.d.ts +3 -0
  187. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.d.ts +4 -0
  188. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +326 -0
  189. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.d.ts +8 -0
  190. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -1
  191. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -0
  192. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.d.ts +2 -0
  193. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.d.ts +2 -0
  194. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +3 -4
  195. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +1 -1
  196. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  197. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -0
  198. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +6 -0
  199. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +47 -45
  200. package/lib/types/index.d.ts +1 -0
  201. package/package.json +3 -3
  202. /package/lib/cjs/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
  203. /package/lib/esm/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
  204. /package/lib/types/components/confirmationpanestateful/interfaces/{IConfirmationPaneLocalizedText.d.ts → IConfirmationPaneLocalizedTexts.d.ts} +0 -0
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _TelemetryHelper = require("../telemetry/TelemetryHelper");
8
+ var _TelemetryConstants = require("../telemetry/TelemetryConstants");
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
11
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
12
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
14
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
15
+ /**
16
+ * SecureEventBus class implementing the singleton pattern for secure event communication.
17
+ * Provides authentication-based event dispatching to prevent unauthorized external access.
18
+ */
19
+ let SecureEventBus = /*#__PURE__*/function () {
20
+ /**
21
+ * Private constructor to enforce singleton pattern.
22
+ * Generates a unique authentication token for this session.
23
+ */
24
+ function SecureEventBus() {
25
+ _classCallCheck(this, SecureEventBus);
26
+ _defineProperty(this, "listeners", new Map());
27
+ _defineProperty(this, "authToken", void 0);
28
+ _defineProperty(this, "eventCounter", 0);
29
+ // Generate a secure, unique token for this session
30
+ this.authToken = this.generateAuthToken();
31
+ }
32
+
33
+ /**
34
+ * Get the singleton instance of SecureEventBus.
35
+ * Creates a new instance if one doesn't exist.
36
+ *
37
+ * @returns The singleton instance of SecureEventBus
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const eventBus = SecureEventBus.getInstance();
42
+ * ```
43
+ */
44
+ _createClass(SecureEventBus, [{
45
+ key: "generateAuthToken",
46
+ value:
47
+ /**
48
+ * Generate a cryptographically secure authentication token.
49
+ * Uses crypto.getRandomValues when available, falls back to Math.random.
50
+ *
51
+ * @private
52
+ * @returns A 64-character hexadecimal string representing the authentication token
53
+ */
54
+ function generateAuthToken() {
55
+ const array = new Uint8Array(32);
56
+ if (typeof crypto !== "undefined" && crypto.getRandomValues) {
57
+ crypto.getRandomValues(array);
58
+ } else {
59
+ // Fallback for environments without crypto.getRandomValues
60
+ for (let i = 0; i < array.length; i++) {
61
+ array[i] = Math.floor(Math.random() * 256);
62
+ }
63
+ }
64
+ return Array.from(array, byte => byte.toString(16).padStart(2, "0")).join("");
65
+ }
66
+
67
+ /**
68
+ * Get the authentication token for this SecureEventBus instance.
69
+ * This token is required for dispatching events and should only be used internally.
70
+ *
71
+ * @returns The authentication token string
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const eventBus = SecureEventBus.getInstance();
76
+ * const token = eventBus.getAuthToken();
77
+ * eventBus.dispatch('myEvent', { data: 'value' }, token);
78
+ * ```
79
+ */
80
+ }, {
81
+ key: "getAuthToken",
82
+ value: function getAuthToken() {
83
+ return this.authToken;
84
+ }
85
+
86
+ /**
87
+ * Dispatch an event with authentication to all registered listeners.
88
+ * Verifies the authentication token before dispatching to prevent unauthorized access.
89
+ *
90
+ * @param eventName - The name of the event to dispatch
91
+ * @param payload - The data to send with the event (optional)
92
+ * @param token - Authentication token (must match the internal token)
93
+ * @returns true if event was successfully dispatched, false if unauthorized or error occurred
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const eventBus = SecureEventBus.getInstance();
98
+ * const token = eventBus.getAuthToken();
99
+ *
100
+ * // Dispatch with payload
101
+ * const success = eventBus.dispatch('userAction', { action: 'click', target: 'button' }, token);
102
+ *
103
+ * // Dispatch without payload
104
+ * eventBus.dispatch('windowClosed', undefined, token);
105
+ * ```
106
+ */
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ }, {
109
+ key: "dispatch",
110
+ value: function dispatch(eventName, payload, token) {
111
+ // Verify authentication token
112
+ if (token !== this.authToken) {
113
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
114
+ Event: _TelemetryConstants.TelemetryEvent.SecureEventBusUnauthorizedDispatch,
115
+ Description: `Unauthorized event dispatch attempt blocked: ${eventName}`,
116
+ ExceptionDetails: {
117
+ eventName,
118
+ providedToken: token ? "provided" : "missing",
119
+ expectedToken: "secured"
120
+ }
121
+ });
122
+ return false;
123
+ }
124
+ const listeners = this.listeners.get(eventName);
125
+ if (!listeners || listeners.length === 0) {
126
+ return true; // No listeners, but not an error
127
+ }
128
+
129
+ // Dispatch to all registered listeners
130
+ try {
131
+ listeners.forEach(listener => {
132
+ try {
133
+ listener.callback(payload);
134
+ } catch (error) {
135
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
136
+ Event: _TelemetryConstants.TelemetryEvent.SecureEventBusListenerError,
137
+ Description: `Error in event listener for event: ${eventName}`,
138
+ ExceptionDetails: error
139
+ });
140
+ }
141
+ });
142
+ return true;
143
+ } catch (error) {
144
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
145
+ Event: _TelemetryConstants.TelemetryEvent.SecureEventBusDispatchError,
146
+ Description: `Error dispatching event: ${eventName}`,
147
+ ExceptionDetails: error
148
+ });
149
+ return false;
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Subscribe to an event with a callback function.
155
+ * The callback will be executed whenever the specified event is dispatched.
156
+ *
157
+ * @param eventName - The name of the event to listen for
158
+ * @param callback - The function to execute when the event is fired
159
+ * @returns A function that can be called to unsubscribe from the event
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const eventBus = SecureEventBus.getInstance();
164
+ *
165
+ * // Subscribe to an event
166
+ * const unsubscribe = eventBus.subscribe('chatMessage', (message) => {
167
+ * console.log('New message:', message.text);
168
+ * console.log('From user:', message.userId);
169
+ * });
170
+ *
171
+ * // Later, unsubscribe
172
+ * unsubscribe();
173
+ * ```
174
+ */
175
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
176
+ }, {
177
+ key: "subscribe",
178
+ value: function subscribe(eventName, callback) {
179
+ const listenerId = `listener_${++this.eventCounter}`;
180
+ if (!this.listeners.has(eventName)) {
181
+ this.listeners.set(eventName, []);
182
+ }
183
+ const listeners = this.listeners.get(eventName);
184
+ if (!listeners) {
185
+ throw new Error(`Listeners for event "${eventName}" not found.`);
186
+ }
187
+ const listener = {
188
+ callback,
189
+ id: listenerId
190
+ };
191
+ listeners.push(listener);
192
+
193
+ // Return unsubscribe function
194
+ return () => {
195
+ const currentListeners = this.listeners.get(eventName);
196
+ if (currentListeners) {
197
+ const index = currentListeners.findIndex(l => l.id === listenerId);
198
+ if (index !== -1) {
199
+ currentListeners.splice(index, 1);
200
+ }
201
+
202
+ // Clean up empty listener arrays
203
+ if (currentListeners.length === 0) {
204
+ this.listeners.delete(eventName);
205
+ }
206
+ }
207
+ };
208
+ }
209
+
210
+ /**
211
+ * Remove all listeners for a specific event.
212
+ * This completely removes the event from the internal listeners map.
213
+ *
214
+ * @param eventName - The name of the event to remove all listeners for
215
+ *
216
+ * @example
217
+ * ```typescript
218
+ * const eventBus = SecureEventBus.getInstance();
219
+ *
220
+ * // Remove all listeners for 'chatClosed' event
221
+ * eventBus.removeAllListeners('chatClosed');
222
+ * ```
223
+ */
224
+ }, {
225
+ key: "removeAllListeners",
226
+ value: function removeAllListeners(eventName) {
227
+ this.listeners.delete(eventName);
228
+ }
229
+
230
+ /**
231
+ * Clear all listeners for all events.
232
+ * This resets the entire event bus to its initial state.
233
+ * Useful for cleanup during application shutdown or testing.
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const eventBus = SecureEventBus.getInstance();
238
+ *
239
+ * // Clear all event listeners
240
+ * eventBus.clear();
241
+ * ```
242
+ */
243
+ }, {
244
+ key: "clear",
245
+ value: function clear() {
246
+ this.listeners.clear();
247
+ }
248
+
249
+ /**
250
+ * Get the number of listeners for a specific event.
251
+ * Useful for debugging and monitoring purposes.
252
+ *
253
+ * @param eventName - The name of the event to count listeners for
254
+ * @returns The number of listeners registered for the event
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const eventBus = SecureEventBus.getInstance();
259
+ *
260
+ * // Check how many listeners are registered for 'userAction'
261
+ * const count = eventBus.getListenerCount('userAction');
262
+ * console.log(`${count} listeners registered for userAction`);
263
+ * ```
264
+ */
265
+ }, {
266
+ key: "getListenerCount",
267
+ value: function getListenerCount(eventName) {
268
+ var _this$listeners$get;
269
+ return ((_this$listeners$get = this.listeners.get(eventName)) === null || _this$listeners$get === void 0 ? void 0 : _this$listeners$get.length) || 0;
270
+ }
271
+
272
+ /**
273
+ * Get all registered event names.
274
+ * Returns an array of event names that currently have listeners.
275
+ * Useful for debugging and monitoring purposes.
276
+ *
277
+ * @returns An array of event names that have registered listeners
278
+ *
279
+ * @example
280
+ * ```typescript
281
+ * const eventBus = SecureEventBus.getInstance();
282
+ *
283
+ * // Get all registered events
284
+ * const events = eventBus.getRegisteredEvents();
285
+ * console.log('Active events:', events);
286
+ * // Output: ['userAction', 'chatMessage', 'windowResize']
287
+ * ```
288
+ */
289
+ }, {
290
+ key: "getRegisteredEvents",
291
+ value: function getRegisteredEvents() {
292
+ return Array.from(this.listeners.keys());
293
+ }
294
+ }], [{
295
+ key: "getInstance",
296
+ value: function getInstance() {
297
+ if (!SecureEventBus.instance) {
298
+ SecureEventBus.instance = new SecureEventBus();
299
+ }
300
+ return SecureEventBus.instance;
301
+ }
302
+ }]);
303
+ return SecureEventBus;
304
+ }();
305
+ _defineProperty(SecureEventBus, "instance", null);
306
+ var _default = SecureEventBus;
307
+ exports.default = _default;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _SecureEventBus = _interopRequireDefault(require("./SecureEventBus"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ const dispatchCustomEvent = (name, payload) => {
11
+ try {
12
+ const eventBus = _SecureEventBus.default.getInstance();
13
+ const authToken = eventBus.getAuthToken();
14
+
15
+ // Dispatch through the secure event bus instead of global window
16
+ const success = eventBus.dispatch(name, payload, authToken);
17
+ if (!success) {
18
+ console.error("Failed to dispatch secure event:", name);
19
+ }
20
+ } catch (error) {
21
+ console.error("Error dispatching secure custom event:", name, payload, error);
22
+ }
23
+ };
24
+ var _default = dispatchCustomEvent;
25
+ exports.default = _default;
@@ -7,7 +7,9 @@ exports.getCustomEventValue = exports.getConversationDetailsCall = exports.getBr
7
7
  exports.getDeviceType = getDeviceType;
8
8
  exports.getWidgetEndChatEventName = exports.getWidgetCacheIdfromProps = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = void 0;
9
9
  exports.isEndConversationDueToOverflowActivity = isEndConversationDueToOverflowActivity;
10
- exports.setTabIndices = exports.setOcUserAgent = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseLowerCaseString = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isValidCustomEvent = exports.isUndefinedOrEmpty = exports.isThisSessionPopout = exports.isNullOrUndefined = exports.isNullOrEmptyString = void 0;
10
+ exports.parseAdaptiveCardPayload = exports.newGuid = exports.isValidCustomEvent = exports.isUndefinedOrEmpty = exports.isThisSessionPopout = exports.isNullOrUndefined = exports.isNullOrEmptyString = void 0;
11
+ exports.parseBooleanFromConfig = parseBooleanFromConfig;
12
+ exports.setTabIndices = exports.setOcUserAgent = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseLowerCaseString = void 0;
11
13
  var _Constants = require("./Constants");
12
14
  var _TelemetryConstants = require("./telemetry/TelemetryConstants");
13
15
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
@@ -519,4 +521,15 @@ exports.getCustomEventValue = getCustomEventValue;
519
521
  function isEndConversationDueToOverflowActivity(activity) {
520
522
  var _activity$channelData, _activity$channelData2;
521
523
  return (activity === null || activity === void 0 ? void 0 : (_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : _activity$channelData.tags) && Array.isArray(activity === null || activity === void 0 ? void 0 : (_activity$channelData2 = activity.channelData) === null || _activity$channelData2 === void 0 ? void 0 : _activity$channelData2.tags) && activity.channelData.tags.includes(_Constants.Constants.EndConversationDueToOverflow);
524
+ }
525
+
526
+ /**
527
+ * Parses a value that can be boolean or string ("true"/"false") into a boolean.
528
+ * Handles null/undefined by returning false.
529
+ *
530
+ * @param value - The value to parse (can be boolean, string, null, or undefined)
531
+ * @returns true if value is true or "true" (case-insensitive), false otherwise
532
+ */
533
+ function parseBooleanFromConfig(value) {
534
+ return value === true || (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === "true";
522
535
  }
@@ -26,7 +26,10 @@ const ChatButtonStateful = props => {
26
26
  uiTimer = (0, _utils.createTimer)();
27
27
  _TelemetryHelper.TelemetryHelper.logLoadingEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
28
28
  Event: _TelemetryConstants.TelemetryEvent.UXLCWChatButtonLoadingStart,
29
- Description: "Chat button loading started"
29
+ Description: "Chat button loading started",
30
+ CustomProperties: {
31
+ ConversationStage: _TelemetryConstants.ConversationStage.Initialization
32
+ }
30
33
  });
31
34
  }, []);
32
35
 
@@ -49,7 +52,10 @@ const ChatButtonStateful = props => {
49
52
  ref.current = async () => {
50
53
  _TelemetryHelper.TelemetryHelper.logActionEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
51
54
  Event: _TelemetryConstants.TelemetryEvent.LCWChatButtonClicked,
52
- Description: "Chat button click action started"
55
+ Description: "Chat button click action started",
56
+ CustomProperties: {
57
+ ConversationStage: _TelemetryConstants.ConversationStage.Initialization
58
+ }
53
59
  });
54
60
  if (state.appStates.isMinimized) {
55
61
  dispatch({
@@ -69,7 +75,10 @@ const ChatButtonStateful = props => {
69
75
  }
70
76
  _TelemetryHelper.TelemetryHelper.logActionEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
71
77
  Event: _TelemetryConstants.TelemetryEvent.LCWChatButtonActionCompleted,
72
- Description: "Chat button action completed"
78
+ Description: "Chat button action completed",
79
+ CustomProperties: {
80
+ ConversationStage: _TelemetryConstants.ConversationStage.Initialization
81
+ }
73
82
  });
74
83
  };
75
84
  const outOfOfficeStyleProps = Object.assign({}, _defaultOutOfOfficeChatButtonStyleProps.defaultOutOfOfficeChatButtonStyleProps, outOfOfficeButtonProps === null || outOfOfficeButtonProps === void 0 ? void 0 : outOfOfficeButtonProps.styleProps);
@@ -123,7 +132,10 @@ const ChatButtonStateful = props => {
123
132
  _TelemetryHelper.TelemetryHelper.logLoadingEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
124
133
  Event: _TelemetryConstants.TelemetryEvent.UXLCWChatButtonLoadingCompleted,
125
134
  Description: "Chat button loading completed",
126
- ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
135
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed,
136
+ CustomProperties: {
137
+ ConversationStage: _TelemetryConstants.ConversationStage.Initialization
138
+ }
127
139
  });
128
140
  }, []);
129
141
  (0, _react.useEffect)(() => {
@@ -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,218 @@
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
+ // Initial focus pattern (mirrors ConfirmationPaneStateful): focus first focusable element (will re-attempt after visibility becomes true)
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
+ // Retry focus once pane is actually visible (isReady) in case initial attempt occurred while wrapper was visibility:hidden
68
+ (0, _react.useEffect)(() => {
69
+ if (!isReady) return;
70
+ const focusableElements = (0, _utils.findAllFocusableElement)(`#${controlId}`);
71
+ if (focusableElements && focusableElements.length > 0) {
72
+ const first = focusableElements[0];
73
+ // If focused element is not already inside the pane, move focus
74
+ if (!first.contains(document.activeElement) && !(document.activeElement && document.activeElement.id.startsWith(controlId))) {
75
+ requestAnimationFrame(() => {
76
+ if (first.isConnected) {
77
+ first.focus({
78
+ preventScroll: true
79
+ });
80
+ }
81
+ });
82
+ }
83
+ }
84
+ }, [isReady, controlId]);
85
+
86
+ // Compute the widget bounds and set pane style accordingly (95% of widget size
87
+ // and centered inside the widget). If the widget container can't be found,
88
+ // fall back to the default pane styles from defaultCitationPaneProps.
89
+ (0, _react.useEffect)(() => {
90
+ const compute = () => {
91
+ var _props$styleProps2;
92
+ try {
93
+ const container = document.querySelector(".webchat__stacked-layout_container");
94
+ if (container) {
95
+ var _props$styleProps;
96
+ const rect = container.getBoundingClientRect();
97
+ const widthPx = Math.round(rect.width * 0.95);
98
+ const heightPx = Math.round(rect.height * 0.95);
99
+ const leftPx = Math.round(rect.left + (rect.width - widthPx) / 2);
100
+ const topPx = Math.round(rect.top + (rect.height - heightPx) / 2);
101
+ // Clone defaults and remove transform so explicit left/top pixel
102
+ // coordinates are respected and the pane stays within the
103
+ // widget bounds.
104
+ const base = Object.assign({}, _defaultCitationPaneProps.defaultCitationPaneStyles.pane);
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ if (base && base.transform) {
107
+ // remove centering transform when we compute exact pixel coords
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ delete base.transform;
110
+ }
111
+
112
+ // Merge user styles first, then computed positioning to ensure proper positioning
113
+ const computedStyle = {
114
+ left: `${leftPx}px`,
115
+ top: `${topPx}px`,
116
+ width: `${widthPx}px`,
117
+ height: `${heightPx}px`
118
+ };
119
+
120
+ // Apply user styles first, then override with computed positioning
121
+ const generalProps = (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps;
122
+ const userStyles = generalProps && typeof generalProps === "object" ? Object.assign({}, generalProps) : {};
123
+ // Remove positioning properties from user styles that would interfere
124
+ delete userStyles.position;
125
+ delete userStyles.left;
126
+ delete userStyles.top;
127
+ delete userStyles.width;
128
+ delete userStyles.height;
129
+ setPaneStyle(Object.assign({}, base, userStyles, computedStyle));
130
+ // Make the pane visible after the next paint to avoid layout
131
+ // flashes on initial mount.
132
+ requestAnimationFrame(() => setIsReady(true));
133
+ return;
134
+ }
135
+ } catch (e) {
136
+ // ignore
137
+ }
138
+
139
+ // fallback - merge defaults with user-provided styles but preserve positioning
140
+ const generalProps = (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.generalStyleProps;
141
+ const userStyles = generalProps && typeof generalProps === "object" ? Object.assign({}, generalProps) : {};
142
+ // Remove positioning properties from user styles for fallback
143
+ delete userStyles.position;
144
+ delete userStyles.left;
145
+ delete userStyles.top;
146
+ delete userStyles.width;
147
+ delete userStyles.height;
148
+ const fallbackStyle = Object.assign({}, _defaultCitationPaneProps.defaultCitationPaneStyles.pane, userStyles);
149
+ setPaneStyle(fallbackStyle);
150
+ requestAnimationFrame(() => setIsReady(true));
151
+ };
152
+ compute();
153
+ window.addEventListener("resize", compute);
154
+ return () => window.removeEventListener("resize", compute);
155
+ }, [(_props$styleProps3 = props.styleProps) === null || _props$styleProps3 === void 0 ? void 0 : _props$styleProps3.generalStyleProps]);
156
+ const handleClose = () => {
157
+ if (props.onClose) props.onClose();
158
+ dispatch({
159
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
160
+ payload: null
161
+ });
162
+ (0, _utils.setTabIndices)(elements, initialTabIndexMap, true);
163
+ };
164
+
165
+ // Merge a safe style object for the container and cast to CSSProperties to satisfy TS
166
+ const baseStyle = Object.assign({
167
+ position: "relative"
168
+ }, paneStyle ?? {
169
+ position: "fixed"
170
+ });
171
+
172
+ // If paneStyle hasn't been computed yet, render the DimLayer so clicks
173
+ // still close overlays but hide the pane itself to avoid flashes.
174
+ const hiddenStyle = {
175
+ visibility: isReady ? "visible" : "hidden",
176
+ pointerEvents: isReady ? "auto" : "none"
177
+ };
178
+
179
+ // Default wrapper styles - these control the positioning container
180
+ const defaultWrapperStyles = {
181
+ display: "flex",
182
+ flexDirection: "column",
183
+ zIndex: 10001
184
+ };
185
+
186
+ // Wrapper styles for the positioning container
187
+ const wrapperStyles = Object.assign({}, baseStyle, hiddenStyle, defaultWrapperStyles);
188
+
189
+ // Merge the computed positioning styles with user's generalStyleProps for the CitationPane
190
+ const mergedStyleProps = props.styleProps ? {
191
+ ...props.styleProps,
192
+ generalStyleProps: Object.assign({}, props.styleProps.generalStyleProps)
193
+ } : undefined;
194
+ const controlProps = {
195
+ id: controlId,
196
+ dir: state.domainStates.globalDir,
197
+ titleText: props.title,
198
+ contentHtml: props.contentHtml,
199
+ brightnessValueOnDim: "0.2",
200
+ // Default brightness
201
+ onClose: handleClose,
202
+ ...(props === null || props === void 0 ? void 0 : props.controlProps) // User props override defaults
203
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
+ };
205
+
206
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CitationDim.default, {
207
+ brightness: controlProps.brightnessValueOnDim
208
+ }), /*#__PURE__*/_react.default.createElement("div", {
209
+ style: wrapperStyles
210
+ }, /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.CitationPane, {
211
+ componentOverrides: props === null || props === void 0 ? void 0 : props.componentOverrides,
212
+ controlProps: controlProps,
213
+ styleProps: mergedStyleProps
214
+ })));
215
+ };
216
+ exports.CitationPaneStateful = CitationPaneStateful;
217
+ var _default = CitationPaneStateful;
218
+ exports.default = _default;