@microsoft/omnichannel-chat-widget 1.8.6 → 2.0.0-main.5ebd4eb

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 (258) hide show
  1. package/README.md +52 -5
  2. package/lib/cjs/common/Constants.js +5 -0
  3. package/lib/cjs/common/facades/FacadeChatSDK.js +234 -9
  4. package/lib/cjs/common/telemetry/TelemetryConstants.js +19 -0
  5. package/lib/cjs/common/telemetry/TelemetryManager.js +6 -1
  6. package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +2 -3
  7. package/lib/cjs/common/telemetry/sanitizeSasInPayload.js +91 -0
  8. package/lib/cjs/common/utils.js +93 -17
  9. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +16 -6
  10. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -10
  11. package/lib/cjs/components/citationpanestateful/CitationDim.js +2 -3
  12. package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +27 -5
  13. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +23 -3
  14. package/lib/cjs/components/dimlayer/DimLayer.js +1 -3
  15. package/lib/cjs/components/draggable/DraggableChatWidget.js +35 -15
  16. package/lib/cjs/components/draggable/DraggableEventEmitter.js +10 -1
  17. package/lib/cjs/components/draggable/DraggableEventReceiver.js +1 -3
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  19. package/lib/cjs/components/errorboundary/ErrorBoundary.js +4 -12
  20. package/lib/cjs/components/footerstateful/FooterStateful.js +18 -9
  21. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  22. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  23. package/lib/cjs/components/headerstateful/HeaderStateful.js +24 -12
  24. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +27 -4
  25. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +23 -6
  26. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  27. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  28. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  29. package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
  30. package/lib/cjs/components/livechatwidget/common/createAdapter.js +3 -2
  31. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
  32. package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
  33. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
  34. package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
  35. package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
  36. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
  37. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
  38. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
  39. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
  40. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  41. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
  42. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  43. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  44. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
  45. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
  46. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
  47. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  48. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  49. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  52. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  53. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  54. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  55. package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
  56. package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  71. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  72. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  100. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
  101. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  102. package/lib/cjs/contexts/createReducer.js +15 -0
  103. package/lib/cjs/controller/componentController.js +13 -1
  104. package/lib/cjs/hooks/useWindowDimensions.js +13 -5
  105. package/lib/cjs/package.json +1 -0
  106. package/lib/cjs/plugins/createChatTranscript.js +3 -4
  107. package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
  108. package/lib/esm/common/Constants.js +5 -0
  109. package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
  110. package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
  111. package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
  112. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
  113. package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
  114. package/lib/esm/common/utils.js +88 -14
  115. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
  116. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
  117. package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
  118. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
  119. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
  120. package/lib/esm/components/dimlayer/DimLayer.js +1 -3
  121. package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
  122. package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
  123. package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
  124. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  125. package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
  126. package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
  127. package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  128. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  129. package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
  130. package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
  131. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +23 -6
  132. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  133. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  134. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  135. package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
  136. package/lib/esm/components/livechatwidget/common/createAdapter.js +3 -2
  137. package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
  138. package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
  139. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
  140. package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
  141. package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
  142. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
  143. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
  144. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
  145. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
  146. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  147. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
  148. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  149. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  150. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
  151. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
  152. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
  153. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  154. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  155. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  156. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  157. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  158. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  159. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  160. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  161. package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
  162. package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
  163. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  164. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  165. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  166. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  167. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  168. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
  169. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  170. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
  171. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
  172. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
  173. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  174. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  175. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  176. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  177. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  178. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  179. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  180. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  181. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
  182. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
  183. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
  184. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
  185. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  186. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
  187. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  188. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
  189. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  190. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
  191. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  192. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  193. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  194. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  200. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
  202. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  203. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  204. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  205. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  206. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
  207. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  208. package/lib/esm/contexts/createReducer.js +15 -0
  209. package/lib/esm/controller/componentController.js +13 -1
  210. package/lib/esm/hooks/useWindowDimensions.js +13 -5
  211. package/lib/esm/plugins/createChatTranscript.js +3 -4
  212. package/lib/esm/plugins/newMessageEventHandler.js +20 -3
  213. package/lib/types/common/Constants.d.ts +4 -0
  214. package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
  215. package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
  216. package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
  217. package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
  218. package/lib/types/common/utils.d.ts +3 -1
  219. package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts +1 -0
  220. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
  221. package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
  222. package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
  223. package/lib/types/components/livechatwidget/interfaces/IBotAuthActivitySubscriberOptionalParams.d.ts +1 -0
  224. package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
  225. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
  226. package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
  227. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  228. package/lib/types/components/webchatcontainerstateful/interfaces/IBotAuthConfig.d.ts +7 -0
  229. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
  230. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
  231. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
  232. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
  233. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
  234. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
  235. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
  236. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
  237. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
  238. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
  239. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
  240. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
  241. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
  242. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
  243. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
  244. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
  245. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
  246. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
  247. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
  248. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
  249. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
  250. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
  251. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
  252. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  253. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
  254. package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
  255. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  256. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
  257. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  258. package/package.json +71 -57
@@ -54,17 +54,25 @@ var _initConfirmationPropsComposer = require("../common/initConfirmationPropsCom
54
54
  var _initWebChatComposer = require("../common/initWebChatComposer");
55
55
  var _defaultCacheManager = require("../../../common/storage/default/defaultCacheManager");
56
56
  var _setPostChatContextAndLoadSurvey = require("../common/setPostChatContextAndLoadSurvey");
57
+ var _liveChatConfigUtils = require("../common/liveChatConfigUtils");
57
58
  var _startProactiveChat = require("../common/startProactiveChat");
58
- var _useChatAdapterStore = _interopRequireDefault(require("../../../hooks/useChatAdapterStore"));
59
- var _useChatContextStore = _interopRequireDefault(require("../../../hooks/useChatContextStore"));
59
+ var _useChatAdapterStore3 = _interopRequireDefault(require("../../../hooks/useChatAdapterStore"));
60
+ var _useChatContextStore3 = _interopRequireDefault(require("../../../hooks/useChatContextStore"));
60
61
  var _useFacadeChatSDKStore = _interopRequireDefault(require("../../../hooks/useFacadeChatSDKStore"));
61
62
  var _renderSurveyHelpers = require("../common/renderSurveyHelpers");
63
+ var _recoveryEligibilityTelemetry = require("../common/recoveryEligibilityTelemetry");
62
64
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
63
65
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
64
66
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
67
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
68
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
69
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
70
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
71
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
72
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
65
73
  let uiTimer;
66
74
  const LiveChatWidgetStateful = props => {
67
- var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$styleProps, _props$webChatContain6, _props$controlProps, _props$controlProps3, _state$appStates7, _props$webChatContain9, _state$appStates8, _props$webChatContain1, _props$webChatContain10, _props$controlProps10, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _livechatProps$webCha, _livechatProps$styleP, _livechatProps$contro, _livechatProps$contro2, _livechatProps$compon, _livechatProps$contro3, _livechatProps$compon2, _livechatProps$contro4, _livechatProps$compon3, _livechatProps$contro5, _livechatProps$compon4, _livechatProps$contro6, _livechatProps$compon5, _livechatProps$contro7, _livechatProps$compon6, _livechatProps$contro8, _livechatProps$compon7, _livechatProps$contro9, _livechatProps$compon8, _livechatProps$contro0, _livechatProps$contro1, _livechatProps$compon9, _livechatProps$contro10, _livechatProps$compon0, _livechatProps$contro11, _livechatProps$compon1, _livechatProps$compon10, _livechatProps$compon11;
75
+ var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$styleProps, _props$webChatContain6, _props$controlProps, _props$controlProps3, _state$appStates7, _props$webChatContain9, _state$appStates8, _props$webChatContain1, _props$webChatContain10, _props$controlProps10, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _livechatProps$webCha, _livechatProps$styleP, _props$headerProps, _livechatProps$contro, _livechatProps$contro2, _livechatProps$compon, _livechatProps$contro3, _livechatProps$compon2, _livechatProps$contro4, _livechatProps$compon3, _livechatProps$contro5, _livechatProps$compon4, _livechatProps$contro6, _livechatProps$compon5, _livechatProps$contro7, _livechatProps$compon6, _livechatProps$contro8, _livechatProps$compon7, _livechatProps$contro9, _livechatProps$compon8, _livechatProps$contro0, _livechatProps$contro1, _livechatProps$compon9, _livechatProps$contro10, _livechatProps$compon0, _livechatProps$contro11, _livechatProps$compon1, _livechatProps$compon10, _livechatProps$compon11;
68
76
  (0, _react2.useEffect)(() => {
69
77
  uiTimer = (0, _utils.createTimer)();
70
78
  _TelemetryHelper.TelemetryHelper.logLoadingEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
@@ -75,21 +83,36 @@ const LiveChatWidgetStateful = props => {
75
83
  }
76
84
  });
77
85
  }, []);
78
- const [state, dispatch] = (0, _useChatContextStore.default)();
86
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
87
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
88
+ state = _useChatContextStore2[0],
89
+ dispatch = _useChatContextStore2[1];
79
90
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
- const [adapter, setAdapter] = (0, _useChatAdapterStore.default)();
81
- const [webChatStyles, setWebChatStyles] = (0, _react2.useState)({
82
- ..._defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles,
83
- ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
84
- });
91
+ const _useChatAdapterStore = (0, _useChatAdapterStore3.default)(),
92
+ _useChatAdapterStore2 = _slicedToArray(_useChatAdapterStore, 2),
93
+ adapter = _useChatAdapterStore2[0],
94
+ setAdapter = _useChatAdapterStore2[1];
95
+ const _useState = (0, _react2.useState)({
96
+ ..._defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles,
97
+ ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
98
+ }),
99
+ _useState2 = _slicedToArray(_useState, 2),
100
+ webChatStyles = _useState2[0],
101
+ setWebChatStyles = _useState2[1];
85
102
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- const [facadeChatSDK] = (0, _useFacadeChatSDKStore.default)();
103
+ const _useFacadeSDKStore = (0, _useFacadeChatSDKStore.default)(),
104
+ _useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
105
+ facadeChatSDK = _useFacadeSDKStore2[0];
87
106
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
- const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = (0, _react2.useState)(undefined);
89
- const [conversationId, setConversationId] = (0, _react2.useState)("");
90
- const {
91
- Composer
92
- } = _botframeworkWebchat.Components;
107
+ const _useState3 = (0, _react2.useState)(undefined),
108
+ _useState4 = _slicedToArray(_useState3, 2),
109
+ voiceVideoCallingSDK = _useState4[0],
110
+ setVoiceVideoCallingSDK = _useState4[1];
111
+ const _useState5 = (0, _react2.useState)(""),
112
+ _useState6 = _slicedToArray(_useState5, 2),
113
+ conversationId = _useState6[0],
114
+ setConversationId = _useState6[1];
115
+ const Composer = _botframeworkWebchat.Components.Composer;
93
116
  const canStartProactiveChat = (0, _react2.useRef)(true);
94
117
  const bubbleBackground = ((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 || (_props$webChatContain2 = _props$webChatContain2.webChatStyles) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.bubbleBackground) ?? ((_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 || (_props$webChatContain3 = _props$webChatContain3.adaptiveCardStyles) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.background) ?? _defaultAdaptiveCardStyles.defaultAdaptiveCardStyles.background;
95
118
  const bubbleTextColor = ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 || (_props$webChatContain4 = _props$webChatContain4.webChatStyles) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.bubbleTextColor) ?? ((_props$webChatContain5 = props.webChatContainerProps) === null || _props$webChatContain5 === void 0 || (_props$webChatContain5 = _props$webChatContain5.adaptiveCardStyles) === null || _props$webChatContain5 === void 0 ? void 0 : _props$webChatContain5.color) ?? _defaultAdaptiveCardStyles.defaultAdaptiveCardStyles.color;
@@ -135,6 +158,7 @@ const LiveChatWidgetStateful = props => {
135
158
  activeCachedChatExist = false;
136
159
  optionalParams = {};
137
160
  }
161
+ (0, _recoveryEligibilityTelemetry.logRecoveryEligibilityTelemetry)(state, activeCachedChatExist);
138
162
  };
139
163
 
140
164
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -560,9 +584,7 @@ const LiveChatWidgetStateful = props => {
560
584
  }
561
585
  });
562
586
  const conversationDetails = await (0, _utils.getConversationDetailsCall)(facadeChatSDK);
563
- const {
564
- chatConfig
565
- } = props;
587
+ const chatConfig = props.chatConfig;
566
588
  const isPersistent = (0, _reconnectChatHelper.isPersistentEnabled)(chatConfig);
567
589
  _TelemetryHelper.TelemetryHelper.logSDKEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
568
590
  Event: _TelemetryConstants.TelemetryEvent.EndChatEventReceived,
@@ -735,7 +757,15 @@ const LiveChatWidgetStateful = props => {
735
757
  if (state.appStates.isMinimized) {
736
758
  _ActivityStreamHandler.ActivityStreamHandler.cork();
737
759
  } else {
738
- setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
760
+ var _state$domainStates4;
761
+ const extendedChatConfig = state === null || state === void 0 || (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.liveChatConfig;
762
+ if ((0, _liveChatConfigUtils.shouldLoadPersistentChatHistory)(extendedChatConfig)) {
763
+ requestAnimationFrame(() => {
764
+ setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
765
+ });
766
+ } else {
767
+ setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
768
+ }
739
769
  }
740
770
  }, [state.appStates.isMinimized]);
741
771
 
@@ -874,6 +904,37 @@ const LiveChatWidgetStateful = props => {
874
904
  }
875
905
  }, [state.appStates.chatDisconnectEventReceived]);
876
906
 
907
+ // Auth state change listeners (broadcast by FacadeChatSDK.startChat())
908
+ (0, _react2.useEffect)(() => {
909
+ const authSucceededSub = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.MidConversationAuthSucceeded).subscribe(msg => {
910
+ var _msg$payload13;
911
+ if (msg !== null && msg !== void 0 && (_msg$payload13 = msg.payload) !== null && _msg$payload13 !== void 0 && _msg$payload13.isAuthenticated) {
912
+ // Only store boolean flag, NOT the token - token is managed by FacadeChatSDK
913
+ dispatch({
914
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_USER_AUTHENTICATED,
915
+ payload: true
916
+ });
917
+ }
918
+ });
919
+
920
+ // Auth reset: only update the boolean flag here.
921
+ // We do NOT clear widget state/cache/adapter because this fires DURING startChat(),
922
+ // which will handle state transitions. FacadeChatSDK has already cleared SDK internals.
923
+ const authResetSub = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.MidConversationAuthReset).subscribe(msg => {
924
+ var _msg$payload14;
925
+ if ((msg === null || msg === void 0 || (_msg$payload14 = msg.payload) === null || _msg$payload14 === void 0 ? void 0 : _msg$payload14.isAuthenticated) === false) {
926
+ dispatch({
927
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_USER_AUTHENTICATED,
928
+ payload: false
929
+ });
930
+ }
931
+ });
932
+ return () => {
933
+ authSucceededSub.unsubscribe();
934
+ authResetSub.unsubscribe();
935
+ };
936
+ }, [dispatch]);
937
+
877
938
  // if props state gets updates we need to update the renderingMiddlewareProps in the state
878
939
  (0, _react2.useEffect)(() => {
879
940
  var _props$webChatContain0;
@@ -892,6 +953,25 @@ const LiveChatWidgetStateful = props => {
892
953
  }
893
954
  });
894
955
  }, []);
956
+
957
+ // Reliable browser close detection via visibilitychange + sendBeacon
958
+ // visibilitychange fires while the page is still alive (unlike beforeunload),
959
+ // so telemetry calls complete reliably. False positives (tab switch, minimize)
960
+ // are filtered in Kusto by checking if this is the last event in the session.
961
+ (0, _react2.useEffect)(() => {
962
+ const handleVisibilityChange = () => {
963
+ if (document.visibilityState === "hidden" && state.appStates.conversationState === _ConversationState.ConversationState.Active) {
964
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
965
+ Event: _TelemetryConstants.TelemetryEvent.BrowserTabHidden,
966
+ Description: "Browser tab hidden during active conversation"
967
+ });
968
+ }
969
+ };
970
+ document.addEventListener("visibilitychange", handleVisibilityChange);
971
+ return () => {
972
+ document.removeEventListener("visibilitychange", handleVisibilityChange);
973
+ };
974
+ }, [state.appStates.conversationState]);
895
975
  const initiateEndChatOnBrowserUnload = () => {
896
976
  var _DataStoreManager$cli;
897
977
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -969,6 +1049,15 @@ const LiveChatWidgetStateful = props => {
969
1049
  }));
970
1050
  }
971
1051
  }, [state.domainStates.botAvatarInitials]);
1052
+ const isWidgetOpen = !state.appStates.isMinimized && state.appStates.conversationState !== _ConversationState.ConversationState.Closed;
1053
+ const siblingAriaHiddenMapRef = (0, _react2.useRef)(new Map());
1054
+ (0, _react2.useEffect)(() => {
1055
+ const map = siblingAriaHiddenMapRef.current;
1056
+ (0, _utils.setAriaHiddenForSiblings)(widgetElementId, isWidgetOpen, map);
1057
+ return () => {
1058
+ (0, _utils.setAriaHiddenForSiblings)(widgetElementId, false, map);
1059
+ };
1060
+ }, [isWidgetOpen]);
972
1061
 
973
1062
  // WebChat's Composer can only be rendered if a directLine object is defined
974
1063
  return directLine && /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, /*#__PURE__*/_react2.default.createElement("style", null, `
@@ -1015,10 +1104,31 @@ const LiveChatWidgetStateful = props => {
1015
1104
  .webchat__basic-transcript__activity-markdown-body > :last-child {
1016
1105
  margin-bottom: 0px;
1017
1106
  }
1018
-
1107
+
1019
1108
  .webchat__basic-transcript__activity-markdown-body > :first-child {
1020
1109
  margin-top: 0px;
1021
1110
  }
1111
+
1112
+ /* Remove browser-default <p> margins inside system messages.
1113
+ Without this, each markdown paragraph adds ~1em top+bottom gap
1114
+ which causes the oversized line spacing visible on iOS Safari.
1115
+ Also disable iOS Safari's auto font-size scaling (-webkit-text-size-adjust)
1116
+ which inflates font sizes and causes line-height to grow over time
1117
+ when the layout is viewed in a narrow viewport. */
1118
+ .webchat__basic-transcript__activity-markdown-body {
1119
+ -webkit-text-size-adjust: 100%;
1120
+ text-size-adjust: 100%;
1121
+ }
1122
+
1123
+ .webchat__basic-transcript__activity-markdown-body p {
1124
+ margin-top: 0;
1125
+ margin-bottom: 4px;
1126
+ line-height: 1.4;
1127
+ }
1128
+
1129
+ .webchat__basic-transcript__activity-markdown-body p:last-child {
1130
+ margin-bottom: 0;
1131
+ }
1022
1132
 
1023
1133
  .webchat__basic-transcript__activity-markdown-body img.webchat__render-markdown__external-link-icon {
1024
1134
  background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==) !important;
@@ -1026,6 +1136,32 @@ const LiveChatWidgetStateful = props => {
1026
1136
  margin-left: .25em;
1027
1137
  }
1028
1138
 
1139
+ /* ── iOS Safari: underline + number alignment fixes ────────────────
1140
+ 1. Position underlines below all glyphs (not at alphabetic baseline)
1141
+ so they never intersect numbers in links or auto-detected tel: hrefs.
1142
+ 2. Use a solid underline (skip-ink: none) so numbers aren't split by
1143
+ gaps the browser renders around descenders.
1144
+ 3. Prevent ::marker pseudo-element from inheriting text-decoration,
1145
+ which Safari applies to ol/ul counters causing them to appear
1146
+ underlined and misaligned.
1147
+ 4. Normalise ordered-list indentation across Safari/WebKit. */
1148
+ .webchat__basic-transcript__activity-markdown-body a {
1149
+ -webkit-text-underline-position: under;
1150
+ text-underline-position: under;
1151
+ text-decoration-skip-ink: none;
1152
+ -webkit-text-decoration-skip: none;
1153
+ }
1154
+
1155
+ .webchat__basic-transcript__activity-markdown-body ol li::marker,
1156
+ .webchat__basic-transcript__activity-markdown-body ul li::marker {
1157
+ text-decoration: none;
1158
+ }
1159
+
1160
+ .webchat__basic-transcript__activity-markdown-body ol {
1161
+ -webkit-padding-start: 1.5em;
1162
+ padding-inline-start: 1.5em;
1163
+ }
1164
+
1029
1165
  .webchat__link-definitions__header-text {
1030
1166
  color: ${bubbleBackground}
1031
1167
  }
@@ -1045,7 +1181,10 @@ const LiveChatWidgetStateful = props => {
1045
1181
  }), /*#__PURE__*/_react2.default.createElement(_react.Stack, {
1046
1182
  id: widgetElementId,
1047
1183
  styles: generalStyles,
1048
- className: (_livechatProps$styleP = livechatProps.styleProps) === null || _livechatProps$styleP === void 0 ? void 0 : _livechatProps$styleP.className
1184
+ className: (_livechatProps$styleP = livechatProps.styleProps) === null || _livechatProps$styleP === void 0 ? void 0 : _livechatProps$styleP.className,
1185
+ role: isWidgetOpen ? "dialog" : undefined,
1186
+ "aria-modal": isWidgetOpen ? true : undefined,
1187
+ "aria-label": isWidgetOpen ? ((_props$headerProps = props.headerProps) === null || _props$headerProps === void 0 || (_props$headerProps = _props$headerProps.controlProps) === null || _props$headerProps === void 0 || (_props$headerProps = _props$headerProps.headerTitleProps) === null || _props$headerProps === void 0 ? void 0 : _props$headerProps.text) ?? "Live Chat" : undefined
1049
1188
  }, !((_livechatProps$contro = livechatProps.controlProps) !== null && _livechatProps$contro !== void 0 && _livechatProps$contro.hideChatButton) && !((_livechatProps$contro2 = livechatProps.controlProps) !== null && _livechatProps$contro2 !== void 0 && _livechatProps$contro2.hideStartChatButton) && (0, _componentController.shouldShowChatButton)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_livechatProps$compon = livechatProps.componentOverrides) === null || _livechatProps$compon === void 0 ? void 0 : _livechatProps$compon.chatButton) || /*#__PURE__*/_react2.default.createElement(_ChatButtonStateful.default, {
1050
1189
  buttonProps: livechatProps.chatButtonProps,
1051
1190
  outOfOfficeButtonProps: livechatProps.outOfOfficeChatButtonProps,
@@ -11,10 +11,16 @@ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components
11
11
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
12
12
  var _defaultgeneralLoadingPaneStyleProps = require("./common/defaultStyleProps/defaultgeneralLoadingPaneStyleProps");
13
13
  var _errorUILoadingPaneStyleProps = require("./common/errorUIStyleProps/errorUILoadingPaneStyleProps");
14
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
15
- var _useWindowDimensions = _interopRequireDefault(require("../../hooks/useWindowDimensions"));
14
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
15
+ var _useWindowDimensions2 = _interopRequireDefault(require("../../hooks/useWindowDimensions"));
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
17
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
19
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
20
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
21
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
22
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
23
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
18
24
  let uiTimer;
19
25
 
20
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -26,11 +32,11 @@ const LoadingPaneStateful = props => {
26
32
  Event: _TelemetryConstants.TelemetryEvent.UXLoadingPaneStart
27
33
  });
28
34
  }, []);
29
- const [state] = (0, _useChatContextStore.default)();
30
- const {
31
- loadingPaneProps,
32
- startChatErrorPaneProps
33
- } = props;
35
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
36
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
37
+ state = _useChatContextStore2[0];
38
+ const loadingPaneProps = props.loadingPaneProps,
39
+ startChatErrorPaneProps = props.startChatErrorPaneProps;
34
40
  const generalLoadingPaneStyleProps = Object.assign({}, _defaultgeneralLoadingPaneStyleProps.defaultGeneralLoadingPaneStyleProps, loadingPaneProps === null || loadingPaneProps === void 0 || (_loadingPaneProps$sty = loadingPaneProps.styleProps) === null || _loadingPaneProps$sty === void 0 ? void 0 : _loadingPaneProps$sty.generalStyleProps);
35
41
  const loadingPaneStyleProps = {
36
42
  ...(loadingPaneProps === null || loadingPaneProps === void 0 ? void 0 : loadingPaneProps.styleProps),
@@ -53,10 +59,9 @@ const LoadingPaneStateful = props => {
53
59
  hideSpinner: true,
54
60
  hideSpinnerText: true
55
61
  };
56
- const {
57
- height,
58
- width
59
- } = (0, _useWindowDimensions.default)();
62
+ const _useWindowDimensions = (0, _useWindowDimensions2.default)(),
63
+ height = _useWindowDimensions.height,
64
+ width = _useWindowDimensions.width;
60
65
 
61
66
  // Move focus to the first button
62
67
  (0, _react.useEffect)(() => {
@@ -15,10 +15,16 @@ var _utils = require("../../common/utils");
15
15
  var _defaultChatDisconnectControlProps = require("./defaultProps/defaultChatDisconnectControlProps");
16
16
  var _defaultChatDisconnectStyleProps = require("./defaultProps/defaultChatDisconnectStyleProps");
17
17
  var _botframeworkWebchat = require("botframework-webchat");
18
- var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
19
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
18
+ var _useChatAdapterStore3 = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
19
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
20
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
23
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
28
  let uiTimer;
23
29
  const NotificationPaneStateful = props => {
24
30
  var _state$domainStates, _state$domainStates3;
@@ -28,14 +34,17 @@ const NotificationPaneStateful = props => {
28
34
  Event: _TelemetryConstants.TelemetryEvent.UXNotificationPaneStart
29
35
  });
30
36
  }, []);
31
- const {
32
- notificationPaneProps,
33
- notificationScenarioType,
34
- endChat
35
- } = props;
36
- const [state, dispatch] = (0, _useChatContextStore.default)();
37
+ const notificationPaneProps = props.notificationPaneProps,
38
+ notificationScenarioType = props.notificationScenarioType,
39
+ endChat = props.endChat;
40
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
41
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
42
+ state = _useChatContextStore2[0],
43
+ dispatch = _useChatContextStore2[1];
37
44
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- const [adapter] = (0, _useChatAdapterStore.default)();
45
+ const _useChatAdapterStore = (0, _useChatAdapterStore3.default)(),
46
+ _useChatAdapterStore2 = _slicedToArray(_useChatAdapterStore, 1),
47
+ adapter = _useChatAdapterStore2[0];
39
48
  const localConfirmationPaneState = (0, _react.useRef)(state === null || state === void 0 || (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.confirmationState);
40
49
  const onCloseChatClick = async () => {
41
50
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -58,9 +67,7 @@ const NotificationPaneStateful = props => {
58
67
  var _state$domainStates2;
59
68
  localConfirmationPaneState.current = state === null || state === void 0 || (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.confirmationState;
60
69
  }, [state === null || state === void 0 || (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.confirmationState]);
61
- const {
62
- useDismissNotification
63
- } = _botframeworkWebchat.hooks;
70
+ const useDismissNotification = _botframeworkWebchat.hooks.useDismissNotification;
64
71
  const dismissNotification = useDismissNotification();
65
72
  const handleDismissNotification = (0, _react.useCallback)(() => {
66
73
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -11,9 +11,15 @@ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components
11
11
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
12
12
  var _defaultgeneralOOOHPaneStyleProps = require("./common/defaultStyleProps/defaultgeneralOOOHPaneStyleProps");
13
13
  var _xssUtils = require("../../common/utils/xssUtils");
14
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
14
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
15
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
18
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
22
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
17
23
  let uiTimer;
18
24
  const OOOHPaneTitleText = "Thanks for contacting us. You have reached us outside of our operating hours. An agent will respond when we open.";
19
25
  const OutOfOfficeHoursPaneStateful = props => {
@@ -25,7 +31,9 @@ const OutOfOfficeHoursPaneStateful = props => {
25
31
  Description: "Out of office hours pane loading started."
26
32
  });
27
33
  }, []);
28
- const [state] = (0, _useChatContextStore.default)();
34
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
35
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
36
+ state = _useChatContextStore2[0];
29
37
  const generalStyleProps = Object.assign({}, _defaultgeneralOOOHPaneStyleProps.defaultGeneralStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps);
30
38
  const styleProps = {
31
39
  ...props.styleProps,
@@ -57,10 +65,9 @@ const OutOfOfficeHoursPaneStateful = props => {
57
65
 
58
66
  // Enhanced titleText sanitization
59
67
  if (controlProps !== null && controlProps !== void 0 && controlProps.titleText) {
60
- const {
61
- cleanText,
62
- isXSSDetected
63
- } = (0, _xssUtils.detectAndCleanXSS)(controlProps.titleText);
68
+ const _detectAndCleanXSS = (0, _xssUtils.detectAndCleanXSS)(controlProps.titleText),
69
+ cleanText = _detectAndCleanXSS.cleanText,
70
+ isXSSDetected = _detectAndCleanXSS.isXSSDetected;
64
71
  if (!isXSSDetected) {
65
72
  // replace with the sanitized text
66
73
  controlProps.titleText = cleanText;
@@ -10,19 +10,39 @@ var _utils = require("../../common/utils");
10
10
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
11
11
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
12
12
  var _defaultgeneralPostChatLoadingPaneStyleProps = require("./common/defaultgeneralPostChatLoadingPaneStyleProps");
13
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
13
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
14
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
16
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
19
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
20
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
21
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
16
22
  let uiTimer;
17
23
  const PostChatLoadingPaneStateful = props => {
18
- var _props$styleProps;
24
+ var _props$controlProps, _props$styleProps;
25
+ const defaultSubtitleText = "Please take a moment to give us feedback about your chat experience. We are loading the survey for you now.";
26
+ const subtitleText = ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.subtitleText) ?? defaultSubtitleText;
27
+ const _useState = (0, _react.useState)(""),
28
+ _useState2 = _slicedToArray(_useState, 2),
29
+ announcedSubtitleText = _useState2[0],
30
+ setAnnouncedSubtitleText = _useState2[1];
19
31
  (0, _react.useEffect)(() => {
20
32
  uiTimer = (0, _utils.createTimer)();
21
33
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
22
34
  Event: _TelemetryConstants.TelemetryEvent.UXPostChatLoadingPaneStart
23
35
  });
24
36
  }, []);
25
- const [state] = (0, _useChatContextStore.default)();
37
+ (0, _react.useEffect)(() => {
38
+ const timeout = window.setTimeout(() => {
39
+ setAnnouncedSubtitleText(subtitleText);
40
+ }, 0);
41
+ return () => window.clearTimeout(timeout);
42
+ }, [subtitleText]);
43
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
44
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
45
+ state = _useChatContextStore2[0];
26
46
  const generalStyleProps = Object.assign({}, _defaultgeneralPostChatLoadingPaneStyleProps.defaultGeneralPostChatLoadingPaneStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps);
27
47
  const styleProps = {
28
48
  ...props.styleProps,
@@ -35,8 +55,11 @@ const PostChatLoadingPaneStateful = props => {
35
55
  hideTitle: true,
36
56
  hideSpinner: true,
37
57
  hideSpinnerText: true,
38
- subtitleText: "Please take a moment to give us feedback about your chat experience. We are loading the survey for you now.",
39
- ...props.controlProps
58
+ ...props.controlProps,
59
+ role: "status",
60
+ "aria-live": "polite",
61
+ "aria-atomic": "true",
62
+ subtitleText: announcedSubtitleText
40
63
  };
41
64
 
42
65
  // Move focus to the first button
@@ -13,10 +13,16 @@ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components
13
13
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
14
14
  var _defaultgeneralPostChatSurveyPaneStyleProps = require("./common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps");
15
15
  var _utils = require("../../common/utils");
16
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
16
+ var _useChatContextStore3 = _interopRequireDefault(require("../../hooks/useChatContextStore"));
17
17
  var _isValidSurveyUrl = _interopRequireDefault(require("./common/isValidSurveyUrl"));
18
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
19
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
20
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
21
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
22
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
25
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
20
26
  let uiTimer;
21
27
  const generateSurveyInviteLink = function (surveyInviteLink, isEmbed, locale, compact, customerVoiceSurveyCorrelationId) {
22
28
  let showMultiLingual = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
@@ -41,7 +47,9 @@ const PostChatSurveyPaneStateful = props => {
41
47
  }
42
48
  });
43
49
  }, []);
44
- const [state] = (0, _useChatContextStore.default)();
50
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
51
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
52
+ state = _useChatContextStore2[0];
45
53
  const generalStyleProps = Object.assign({}, _defaultgeneralPostChatSurveyPaneStyleProps.defaultGeneralPostChatSurveyPaneStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps, {
46
54
  display: state.appStates.isMinimized ? "none" : "contents"
47
55
  });
@@ -66,6 +74,7 @@ const PostChatSurveyPaneStateful = props => {
66
74
  };
67
75
  const controlProps = {
68
76
  id: "oc-lcw-postchatsurvey-pane",
77
+ title: "Post-chat survey",
69
78
  surveyURL: ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.surveyURL) ?? surveyInviteLink,
70
79
  ...props.controlProps
71
80
  };
@@ -104,9 +113,7 @@ const PostChatSurveyPaneStateful = props => {
104
113
  //Customer Voice Telemetry Events
105
114
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
115
  window.addEventListener("message", message => {
107
- const {
108
- data
109
- } = message;
116
+ const data = message.data;
110
117
  if (!data) return;
111
118
  if (data === _CustomerVoiceEvents.CustomerVoiceEvents.ResponsePageLoaded) {
112
119
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {