@microsoft/omnichannel-chat-widget 1.8.7 → 2.0.0-main.ba244dd

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 (248) hide show
  1. package/README.md +42 -3
  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 +17 -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/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  26. package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  27. package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  28. package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
  29. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
  30. package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
  31. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
  32. package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
  33. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +158 -21
  34. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
  35. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
  36. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
  37. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  38. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
  39. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  40. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  41. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
  42. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
  43. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
  44. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  45. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  46. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  47. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  48. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  49. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  51. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  52. package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
  53. package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
  54. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  55. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  71. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  72. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  97. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
  98. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  99. package/lib/cjs/contexts/createReducer.js +15 -0
  100. package/lib/cjs/controller/componentController.js +13 -1
  101. package/lib/cjs/hooks/useWindowDimensions.js +13 -5
  102. package/lib/cjs/package.json +1 -0
  103. package/lib/cjs/plugins/createChatTranscript.js +3 -4
  104. package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
  105. package/lib/esm/common/Constants.js +5 -0
  106. package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
  107. package/lib/esm/common/telemetry/TelemetryConstants.js +17 -0
  108. package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
  109. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
  110. package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
  111. package/lib/esm/common/utils.js +88 -14
  112. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
  113. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
  114. package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
  115. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
  116. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
  117. package/lib/esm/components/dimlayer/DimLayer.js +1 -3
  118. package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
  119. package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
  120. package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
  121. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  122. package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
  123. package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
  124. package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  125. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  126. package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
  127. package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
  128. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  129. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  130. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  131. package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
  132. package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
  133. package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
  134. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
  135. package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
  136. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +157 -20
  137. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
  138. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
  139. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
  140. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  141. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
  142. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  143. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  144. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
  145. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
  146. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
  147. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  148. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  149. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  150. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  151. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  152. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  153. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  154. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  155. package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
  156. package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
  157. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  158. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  159. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  160. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  161. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  162. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
  163. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  164. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
  165. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
  166. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
  167. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  168. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  169. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  170. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  171. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  172. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  173. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  174. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  175. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
  176. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
  177. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
  178. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
  179. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  180. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
  181. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  182. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
  183. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  184. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
  185. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  186. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  187. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  188. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  189. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  190. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  191. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  192. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  193. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  194. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  200. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
  201. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  202. package/lib/esm/contexts/createReducer.js +15 -0
  203. package/lib/esm/controller/componentController.js +13 -1
  204. package/lib/esm/hooks/useWindowDimensions.js +13 -5
  205. package/lib/esm/plugins/createChatTranscript.js +3 -4
  206. package/lib/esm/plugins/newMessageEventHandler.js +20 -3
  207. package/lib/types/common/Constants.d.ts +4 -0
  208. package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
  209. package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
  210. package/lib/types/common/telemetry/TelemetryConstants.d.ts +14 -2
  211. package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
  212. package/lib/types/common/utils.d.ts +3 -1
  213. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
  214. package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
  215. package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
  216. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
  217. package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
  218. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  219. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
  220. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
  221. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
  222. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
  223. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
  224. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
  225. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
  226. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
  227. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
  228. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
  229. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
  230. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
  231. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
  232. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
  233. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
  234. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
  235. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
  236. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
  237. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
  238. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
  239. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
  240. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
  241. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
  242. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  243. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
  244. package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
  245. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  246. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
  247. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  248. package/package.json +69 -56
@@ -54,17 +54,24 @@ 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");
62
63
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
63
64
  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
65
  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); }
66
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
67
+ 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."); }
68
+ 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; } }
69
+ 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; }
70
+ 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; } }
71
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
65
72
  let uiTimer;
66
73
  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;
74
+ 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
75
  (0, _react2.useEffect)(() => {
69
76
  uiTimer = (0, _utils.createTimer)();
70
77
  _TelemetryHelper.TelemetryHelper.logLoadingEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
@@ -75,21 +82,36 @@ const LiveChatWidgetStateful = props => {
75
82
  }
76
83
  });
77
84
  }, []);
78
- const [state, dispatch] = (0, _useChatContextStore.default)();
85
+ const _useChatContextStore = (0, _useChatContextStore3.default)(),
86
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
87
+ state = _useChatContextStore2[0],
88
+ dispatch = _useChatContextStore2[1];
79
89
  // 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
- });
90
+ const _useChatAdapterStore = (0, _useChatAdapterStore3.default)(),
91
+ _useChatAdapterStore2 = _slicedToArray(_useChatAdapterStore, 2),
92
+ adapter = _useChatAdapterStore2[0],
93
+ setAdapter = _useChatAdapterStore2[1];
94
+ const _useState = (0, _react2.useState)({
95
+ ..._defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles,
96
+ ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
97
+ }),
98
+ _useState2 = _slicedToArray(_useState, 2),
99
+ webChatStyles = _useState2[0],
100
+ setWebChatStyles = _useState2[1];
85
101
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- const [facadeChatSDK] = (0, _useFacadeChatSDKStore.default)();
102
+ const _useFacadeSDKStore = (0, _useFacadeChatSDKStore.default)(),
103
+ _useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
104
+ facadeChatSDK = _useFacadeSDKStore2[0];
87
105
  // 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;
106
+ const _useState3 = (0, _react2.useState)(undefined),
107
+ _useState4 = _slicedToArray(_useState3, 2),
108
+ voiceVideoCallingSDK = _useState4[0],
109
+ setVoiceVideoCallingSDK = _useState4[1];
110
+ const _useState5 = (0, _react2.useState)(""),
111
+ _useState6 = _slicedToArray(_useState5, 2),
112
+ conversationId = _useState6[0],
113
+ setConversationId = _useState6[1];
114
+ const Composer = _botframeworkWebchat.Components.Composer;
93
115
  const canStartProactiveChat = (0, _react2.useRef)(true);
94
116
  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
117
  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;
@@ -560,9 +582,7 @@ const LiveChatWidgetStateful = props => {
560
582
  }
561
583
  });
562
584
  const conversationDetails = await (0, _utils.getConversationDetailsCall)(facadeChatSDK);
563
- const {
564
- chatConfig
565
- } = props;
585
+ const chatConfig = props.chatConfig;
566
586
  const isPersistent = (0, _reconnectChatHelper.isPersistentEnabled)(chatConfig);
567
587
  _TelemetryHelper.TelemetryHelper.logSDKEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
568
588
  Event: _TelemetryConstants.TelemetryEvent.EndChatEventReceived,
@@ -735,7 +755,15 @@ const LiveChatWidgetStateful = props => {
735
755
  if (state.appStates.isMinimized) {
736
756
  _ActivityStreamHandler.ActivityStreamHandler.cork();
737
757
  } else {
738
- setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
758
+ var _state$domainStates4;
759
+ const extendedChatConfig = state === null || state === void 0 || (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.liveChatConfig;
760
+ if ((0, _liveChatConfigUtils.shouldLoadPersistentChatHistory)(extendedChatConfig)) {
761
+ requestAnimationFrame(() => {
762
+ setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
763
+ });
764
+ } else {
765
+ setTimeout(() => _ActivityStreamHandler.ActivityStreamHandler.uncork(), 500);
766
+ }
739
767
  }
740
768
  }, [state.appStates.isMinimized]);
741
769
 
@@ -874,6 +902,37 @@ const LiveChatWidgetStateful = props => {
874
902
  }
875
903
  }, [state.appStates.chatDisconnectEventReceived]);
876
904
 
905
+ // Auth state change listeners (broadcast by FacadeChatSDK.startChat())
906
+ (0, _react2.useEffect)(() => {
907
+ const authSucceededSub = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.MidConversationAuthSucceeded).subscribe(msg => {
908
+ var _msg$payload13;
909
+ if (msg !== null && msg !== void 0 && (_msg$payload13 = msg.payload) !== null && _msg$payload13 !== void 0 && _msg$payload13.isAuthenticated) {
910
+ // Only store boolean flag, NOT the token - token is managed by FacadeChatSDK
911
+ dispatch({
912
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_USER_AUTHENTICATED,
913
+ payload: true
914
+ });
915
+ }
916
+ });
917
+
918
+ // Auth reset: only update the boolean flag here.
919
+ // We do NOT clear widget state/cache/adapter because this fires DURING startChat(),
920
+ // which will handle state transitions. FacadeChatSDK has already cleared SDK internals.
921
+ const authResetSub = _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.MidConversationAuthReset).subscribe(msg => {
922
+ var _msg$payload14;
923
+ if ((msg === null || msg === void 0 || (_msg$payload14 = msg.payload) === null || _msg$payload14 === void 0 ? void 0 : _msg$payload14.isAuthenticated) === false) {
924
+ dispatch({
925
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_USER_AUTHENTICATED,
926
+ payload: false
927
+ });
928
+ }
929
+ });
930
+ return () => {
931
+ authSucceededSub.unsubscribe();
932
+ authResetSub.unsubscribe();
933
+ };
934
+ }, [dispatch]);
935
+
877
936
  // if props state gets updates we need to update the renderingMiddlewareProps in the state
878
937
  (0, _react2.useEffect)(() => {
879
938
  var _props$webChatContain0;
@@ -892,6 +951,25 @@ const LiveChatWidgetStateful = props => {
892
951
  }
893
952
  });
894
953
  }, []);
954
+
955
+ // Reliable browser close detection via visibilitychange + sendBeacon
956
+ // visibilitychange fires while the page is still alive (unlike beforeunload),
957
+ // so telemetry calls complete reliably. False positives (tab switch, minimize)
958
+ // are filtered in Kusto by checking if this is the last event in the session.
959
+ (0, _react2.useEffect)(() => {
960
+ const handleVisibilityChange = () => {
961
+ if (document.visibilityState === "hidden" && state.appStates.conversationState === _ConversationState.ConversationState.Active) {
962
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
963
+ Event: _TelemetryConstants.TelemetryEvent.BrowserTabHidden,
964
+ Description: "Browser tab hidden during active conversation"
965
+ });
966
+ }
967
+ };
968
+ document.addEventListener("visibilitychange", handleVisibilityChange);
969
+ return () => {
970
+ document.removeEventListener("visibilitychange", handleVisibilityChange);
971
+ };
972
+ }, [state.appStates.conversationState]);
895
973
  const initiateEndChatOnBrowserUnload = () => {
896
974
  var _DataStoreManager$cli;
897
975
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -969,6 +1047,15 @@ const LiveChatWidgetStateful = props => {
969
1047
  }));
970
1048
  }
971
1049
  }, [state.domainStates.botAvatarInitials]);
1050
+ const isWidgetOpen = !state.appStates.isMinimized && state.appStates.conversationState !== _ConversationState.ConversationState.Closed;
1051
+ const siblingAriaHiddenMapRef = (0, _react2.useRef)(new Map());
1052
+ (0, _react2.useEffect)(() => {
1053
+ const map = siblingAriaHiddenMapRef.current;
1054
+ (0, _utils.setAriaHiddenForSiblings)(widgetElementId, isWidgetOpen, map);
1055
+ return () => {
1056
+ (0, _utils.setAriaHiddenForSiblings)(widgetElementId, false, map);
1057
+ };
1058
+ }, [isWidgetOpen]);
972
1059
 
973
1060
  // WebChat's Composer can only be rendered if a directLine object is defined
974
1061
  return directLine && /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, /*#__PURE__*/_react2.default.createElement("style", null, `
@@ -1015,10 +1102,31 @@ const LiveChatWidgetStateful = props => {
1015
1102
  .webchat__basic-transcript__activity-markdown-body > :last-child {
1016
1103
  margin-bottom: 0px;
1017
1104
  }
1018
-
1105
+
1019
1106
  .webchat__basic-transcript__activity-markdown-body > :first-child {
1020
1107
  margin-top: 0px;
1021
1108
  }
1109
+
1110
+ /* Remove browser-default <p> margins inside system messages.
1111
+ Without this, each markdown paragraph adds ~1em top+bottom gap
1112
+ which causes the oversized line spacing visible on iOS Safari.
1113
+ Also disable iOS Safari's auto font-size scaling (-webkit-text-size-adjust)
1114
+ which inflates font sizes and causes line-height to grow over time
1115
+ when the layout is viewed in a narrow viewport. */
1116
+ .webchat__basic-transcript__activity-markdown-body {
1117
+ -webkit-text-size-adjust: 100%;
1118
+ text-size-adjust: 100%;
1119
+ }
1120
+
1121
+ .webchat__basic-transcript__activity-markdown-body p {
1122
+ margin-top: 0;
1123
+ margin-bottom: 4px;
1124
+ line-height: 1.4;
1125
+ }
1126
+
1127
+ .webchat__basic-transcript__activity-markdown-body p:last-child {
1128
+ margin-bottom: 0;
1129
+ }
1022
1130
 
1023
1131
  .webchat__basic-transcript__activity-markdown-body img.webchat__render-markdown__external-link-icon {
1024
1132
  background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==) !important;
@@ -1026,6 +1134,32 @@ const LiveChatWidgetStateful = props => {
1026
1134
  margin-left: .25em;
1027
1135
  }
1028
1136
 
1137
+ /* ── iOS Safari: underline + number alignment fixes ────────────────
1138
+ 1. Position underlines below all glyphs (not at alphabetic baseline)
1139
+ so they never intersect numbers in links or auto-detected tel: hrefs.
1140
+ 2. Use a solid underline (skip-ink: none) so numbers aren't split by
1141
+ gaps the browser renders around descenders.
1142
+ 3. Prevent ::marker pseudo-element from inheriting text-decoration,
1143
+ which Safari applies to ol/ul counters causing them to appear
1144
+ underlined and misaligned.
1145
+ 4. Normalise ordered-list indentation across Safari/WebKit. */
1146
+ .webchat__basic-transcript__activity-markdown-body a {
1147
+ -webkit-text-underline-position: under;
1148
+ text-underline-position: under;
1149
+ text-decoration-skip-ink: none;
1150
+ -webkit-text-decoration-skip: none;
1151
+ }
1152
+
1153
+ .webchat__basic-transcript__activity-markdown-body ol li::marker,
1154
+ .webchat__basic-transcript__activity-markdown-body ul li::marker {
1155
+ text-decoration: none;
1156
+ }
1157
+
1158
+ .webchat__basic-transcript__activity-markdown-body ol {
1159
+ -webkit-padding-start: 1.5em;
1160
+ padding-inline-start: 1.5em;
1161
+ }
1162
+
1029
1163
  .webchat__link-definitions__header-text {
1030
1164
  color: ${bubbleBackground}
1031
1165
  }
@@ -1045,7 +1179,10 @@ const LiveChatWidgetStateful = props => {
1045
1179
  }), /*#__PURE__*/_react2.default.createElement(_react.Stack, {
1046
1180
  id: widgetElementId,
1047
1181
  styles: generalStyles,
1048
- className: (_livechatProps$styleP = livechatProps.styleProps) === null || _livechatProps$styleP === void 0 ? void 0 : _livechatProps$styleP.className
1182
+ className: (_livechatProps$styleP = livechatProps.styleProps) === null || _livechatProps$styleP === void 0 ? void 0 : _livechatProps$styleP.className,
1183
+ role: isWidgetOpen ? "dialog" : undefined,
1184
+ "aria-modal": isWidgetOpen ? true : undefined,
1185
+ "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
1186
  }, !((_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
1187
  buttonProps: livechatProps.chatButtonProps,
1051
1188
  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, {