@microsoft/omnichannel-chat-widget 1.8.7 → 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 (251) 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/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/recoveryEligibilityTelemetry.js +60 -0
  33. package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
  34. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
  35. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
  36. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
  37. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
  38. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  39. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
  40. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  41. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  42. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
  43. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
  44. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
  45. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  46. package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  47. package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  48. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  49. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  52. package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  53. package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
  54. package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
  55. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  66. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  67. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  68. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  69. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  70. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  71. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  72. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  73. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
  74. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
  75. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
  76. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
  77. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  78. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
  79. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  80. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
  81. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  82. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  98. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
  99. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  100. package/lib/cjs/contexts/createReducer.js +15 -0
  101. package/lib/cjs/controller/componentController.js +13 -1
  102. package/lib/cjs/hooks/useWindowDimensions.js +13 -5
  103. package/lib/cjs/package.json +1 -0
  104. package/lib/cjs/plugins/createChatTranscript.js +3 -4
  105. package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
  106. package/lib/esm/common/Constants.js +5 -0
  107. package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
  108. package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
  109. package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
  110. package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
  111. package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
  112. package/lib/esm/common/utils.js +88 -14
  113. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
  114. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
  115. package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
  116. package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
  117. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
  118. package/lib/esm/components/dimlayer/DimLayer.js +1 -3
  119. package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
  120. package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
  121. package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
  122. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
  123. package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
  124. package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
  125. package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
  126. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
  127. package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
  128. package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
  129. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
  130. package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
  131. package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
  132. package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
  133. package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
  134. package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
  135. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
  136. package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
  137. package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
  138. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
  139. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
  140. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
  141. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
  142. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
  143. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
  144. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
  145. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
  146. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
  147. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
  148. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
  149. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
  150. package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
  151. package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
  152. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
  153. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
  154. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
  155. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
  156. package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
  157. package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
  158. package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
  159. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
  160. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
  161. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
  162. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
  163. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
  164. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
  165. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
  166. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
  167. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
  168. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
  169. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
  170. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
  171. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
  172. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
  173. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
  174. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
  175. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
  176. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
  177. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
  178. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
  179. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
  180. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
  181. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
  182. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
  183. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
  184. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
  185. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
  186. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
  187. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
  188. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
  189. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
  190. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
  191. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
  192. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
  193. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
  194. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
  195. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
  196. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
  197. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
  198. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
  199. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
  200. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
  201. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
  202. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
  203. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
  204. package/lib/esm/contexts/createReducer.js +15 -0
  205. package/lib/esm/controller/componentController.js +13 -1
  206. package/lib/esm/hooks/useWindowDimensions.js +13 -5
  207. package/lib/esm/plugins/createChatTranscript.js +3 -4
  208. package/lib/esm/plugins/newMessageEventHandler.js +20 -3
  209. package/lib/types/common/Constants.d.ts +4 -0
  210. package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
  211. package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
  212. package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
  213. package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
  214. package/lib/types/common/utils.d.ts +3 -1
  215. package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
  216. package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
  217. package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
  218. package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
  219. package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
  220. package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
  221. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
  222. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
  223. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
  224. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
  225. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
  226. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
  227. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
  228. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
  229. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
  230. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
  231. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
  232. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
  233. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
  234. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
  235. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
  236. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
  237. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
  238. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
  239. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
  240. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
  241. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
  242. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
  243. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
  244. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
  245. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
  246. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
  247. package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
  248. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  249. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
  250. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  251. package/package.json +71 -57
@@ -8,20 +8,14 @@ import { SendingTimestamp } from "./timestamps/SendingTimestamp";
8
8
 
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, react/display-name, @typescript-eslint/no-unused-vars
10
10
  export const activityStatusMiddleware = () => next => args => {
11
- const {
12
- activity: {
13
- channelData: {
14
- tags
15
- },
16
- from: {
17
- name,
18
- role
19
- },
20
- timestamp
21
- },
22
- sendState,
23
- sameTimestampGroup
24
- } = args;
11
+ const _args$activity = args.activity,
12
+ tags = _args$activity.channelData.tags,
13
+ _args$activity$from = _args$activity.from,
14
+ name = _args$activity$from.name,
15
+ role = _args$activity$from.role,
16
+ timestamp = _args$activity.timestamp,
17
+ sendState = args.sendState,
18
+ sameTimestampGroup = args.sameTimestampGroup;
25
19
  const current_tags = tags,
26
20
  current_name = name,
27
21
  current_role = role,
@@ -33,14 +27,9 @@ export const activityStatusMiddleware = () => next => args => {
33
27
  });
34
28
  }
35
29
  if (args[WebChatMiddlewareConstants.nextVisibleActivity]) {
36
- const {
37
- nextVisibleActivity: {
38
- from: {
39
- name
40
- },
41
- timestamp
42
- }
43
- } = args;
30
+ const _args$nextVisibleActi = args.nextVisibleActivity,
31
+ name = _args$nextVisibleActi.from.name,
32
+ timestamp = _args$nextVisibleActi.timestamp;
44
33
 
45
34
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
35
  const next_name = name,
@@ -66,7 +55,7 @@ export const activityStatusMiddleware = () => next => args => {
66
55
  name: current_name
67
56
  }))
68
57
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- ;
58
+ ;
70
59
  }
71
60
  };
72
61
 
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ 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."); }
3
+ 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; } }
4
+ 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; }
5
+ 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; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
8
  /******
3
9
  * AttachmentMiddleware
@@ -8,6 +14,7 @@
8
14
  import { Constants, MimeTypes, WebChatMiddlewareConstants } from "../../../../../common/Constants";
9
15
  import React from "react";
10
16
  import { getFileAttachmentIconData, isInlineMediaSupported } from "../../../common/utils/FileAttachmentIconManager";
17
+ import AdaptiveCardAccessibilityWrapper from "./attachments/AdaptiveCardAccessibilityWrapper";
11
18
  import Attachment from "./attachments/Attachment";
12
19
  import { BroadcastEvent } from "../../../../../common/telemetry/TelemetryConstants";
13
20
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
@@ -28,10 +35,8 @@ import { useChatContextStore } from "../../../../..";
28
35
  * @param newAttachment
29
36
  */
30
37
  const patchAttachment = (card, newAttachment) => {
31
- const {
32
- activity,
33
- attachment
34
- } = card;
38
+ const activity = card.activity,
39
+ attachment = card.attachment;
35
40
  const patchedAttachment = Object.assign({}, attachment);
36
41
  patchedAttachment.contentType = newAttachment.contentType;
37
42
  patchedAttachment.thumbnailUrl = newAttachment.thumbnailUrl;
@@ -62,16 +67,12 @@ export const createAttachmentMiddleware = enableInlinePlaying => {
62
67
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
63
68
  args[_key] = arguments[_key];
64
69
  }
65
- const [card] = args;
70
+ const card = args[0];
66
71
  if (!(card !== null && card !== void 0 && card.activity)) {
67
72
  return next(...args);
68
73
  }
69
- const {
70
- activity: {
71
- attachments
72
- },
73
- attachment
74
- } = card;
74
+ const attachments = card.activity.attachments,
75
+ attachment = card.attachment;
75
76
  // No attachment
76
77
  if (!attachments || !attachments.length || !attachment) {
77
78
  return next(...args);
@@ -79,18 +80,16 @@ export const createAttachmentMiddleware = enableInlinePlaying => {
79
80
 
80
81
  // Check for Adaptive cards
81
82
  // eslint-disable-next-line prefer-const
82
- let {
83
- content,
84
- contentType
85
- } = attachment || {
86
- content: "",
87
- contentType: ""
88
- };
89
- let {
90
- type
91
- } = content || {
92
- type: ""
93
- };
83
+ let _ref = attachment || {
84
+ content: "",
85
+ contentType: ""
86
+ },
87
+ content = _ref.content,
88
+ contentType = _ref.contentType;
89
+ let _ref2 = content || {
90
+ type: ""
91
+ },
92
+ type = _ref2.type;
94
93
  if (!type && content && Constants.supportedAdaptiveCardContentTypes.indexOf(contentType) >= 0) {
95
94
  try {
96
95
  content = JSON.parse(content);
@@ -107,14 +106,16 @@ export const createAttachmentMiddleware = enableInlinePlaying => {
107
106
  });
108
107
  }
109
108
  }
110
- const [state] = useChatContextStore();
109
+ const _useChatContextStore = useChatContextStore(),
110
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
111
+ state = _useChatContextStore2[0];
111
112
  const attachmentId = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 || (_state$domainStates$r = _state$domainStates$r.attachmentProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.adaptiveCardAttachmentId) ?? defaultAttachmentProps.adaptiveCardAttachmentId;
112
113
  const atttachmentAdaptiveCardStyles = {
113
114
  ...defaultAttachmentAdaptiveCardStyles,
114
115
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.attachmentAdaptiveCardStyles)
115
116
  };
116
117
  if (type === WebChatMiddlewareConstants.adaptiveCard || Constants.supportedAdaptiveCardContentTypes.indexOf(contentType) >= 0) {
117
- return /*#__PURE__*/React.createElement("div", {
118
+ return /*#__PURE__*/React.createElement(AdaptiveCardAccessibilityWrapper, {
118
119
  id: attachmentId,
119
120
  style: atttachmentAdaptiveCardStyles
120
121
  }, next(...args));
@@ -131,13 +132,7 @@ export const createAttachmentMiddleware = enableInlinePlaying => {
131
132
  }
132
133
  if (card.activity.channelData && card.activity.channelData.fileScan) {
133
134
  const index = attachments.findIndex(attachment => attachment.name === card.attachment.name);
134
- const {
135
- activity: {
136
- channelData: {
137
- fileScan
138
- }
139
- }
140
- } = card;
135
+ const fileScan = card.activity.channelData.fileScan;
141
136
  const scanResult = fileScan[index];
142
137
  if ((scanResult === null || scanResult === void 0 ? void 0 : scanResult.status) === FileScanStatus.INPROGRESS) {
143
138
  return /*#__PURE__*/React.createElement(ScanInProgressAttachment, {
@@ -0,0 +1,193 @@
1
+ import React, { useEffect, useRef } from "react";
2
+
3
+ /******
4
+ * AdaptiveCardAccessibilityWrapper
5
+ *
6
+ * The `adaptivecards` renderer does not set `aria-setsize` or `aria-posinset`
7
+ * on radio buttons rendered by Input.ChoiceSet (style: "expanded"). Without
8
+ * these attributes, screen readers (TalkBack, VoiceOver, NVDA) cannot announce
9
+ * the correct option count (e.g. "1 of 2") and may say "1 of 1" for every item.
10
+ *
11
+ * This wrapper observes the rendered card via MutationObserver and patches each
12
+ * radio group with the correct ARIA attributes after the card finishes rendering.
13
+ ******/
14
+
15
+ const AdaptiveCardAccessibilityWrapper = _ref => {
16
+ let id = _ref.id,
17
+ style = _ref.style,
18
+ children = _ref.children;
19
+ const containerRef = useRef(null);
20
+ useEffect(() => {
21
+ if (!containerRef.current) return;
22
+ const patchRadioGroups = () => {
23
+ const container = containerRef.current;
24
+ if (!container) return;
25
+
26
+ // dropdown-double-label: compact Input.ChoiceSet renders as a native
27
+ // <select> with both aria-labelledby and a sibling visible <label for>.
28
+ // Only remove aria-labelledby when it points solely at that same visible
29
+ // label; preserve composite labels that include required/error/context text.
30
+ const compactSelects = container.querySelectorAll(".ac-input-container select.ac-input.ac-multichoiceInput[aria-labelledby]");
31
+ compactSelects.forEach(select => {
32
+ const id = select.id;
33
+ if (!id) return;
34
+ const visibleLabel = container.querySelector(`label[for="${CSS.escape(id)}"]:not([aria-hidden='true'])`);
35
+ const labelledBy = (select.getAttribute("aria-labelledby") || "").trim().split(/\s+/);
36
+ if (visibleLabel !== null && visibleLabel !== void 0 && visibleLabel.id && labelledBy.length === 1 && labelledBy[0] === visibleLabel.id) {
37
+ select.removeAttribute("aria-labelledby");
38
+ }
39
+ });
40
+
41
+ // internal tracking: non-radio inputs (Input.Text including
42
+ // isMultiline=true which renders as <textarea>, Input.Date,
43
+ // Input.Number, Input.Toggle, Input.ChoiceSet multi-select
44
+ // checkbox) rendered by adaptivecards can have THREE accessible-
45
+ // name sources resolving to the same string: a visible
46
+ // <label for>, aria-label, AND aria-labelledby. TalkBack walks
47
+ // each accessibility node independently and reads the duplicated
48
+ // name. When a visible <label for> exists and names the control,
49
+ // strip the redundant aria-label / aria-labelledby on the input
50
+ // so only one announceable source remains.
51
+ const labelledInputs = container.querySelectorAll(".ac-input-container input.ac-input[id]:not([type='radio']), .ac-input-container textarea.ac-input[id]");
52
+ labelledInputs.forEach(input => {
53
+ const id = input.id;
54
+ if (!id) return;
55
+ const visibleLabel = container.querySelector(`label[for="${CSS.escape(id)}"]:not([aria-hidden='true'])`);
56
+ if (!visibleLabel) return;
57
+ const labelText = (visibleLabel.textContent || "").trim();
58
+ if (!labelText) return;
59
+ const ariaLabel = input.getAttribute("aria-label");
60
+ if (ariaLabel && ariaLabel.trim() === labelText) {
61
+ input.removeAttribute("aria-label");
62
+ }
63
+ const labelledBy = (input.getAttribute("aria-labelledby") || "").trim();
64
+ if (labelledBy) {
65
+ const ids = labelledBy.split(/\s+/);
66
+ const resolved = ids.map(rid => {
67
+ var _document$getElementB;
68
+ return (((_document$getElementB = document.getElementById(rid)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.textContent) || "").trim();
69
+ }).filter(Boolean).join(" ");
70
+ if (resolved === labelText) {
71
+ input.removeAttribute("aria-labelledby");
72
+ }
73
+ }
74
+ });
75
+
76
+ // action-button-toggle / login-button-toggle: submit/login action buttons can be
77
+ // rendered with toggle-only ARIA that causes screen readers to announce them as
78
+ // switches instead of plain push buttons. Preserve Action.ToggleVisibility buttons,
79
+ // which own aria-controls and legitimately expose a pressed state.
80
+ const actionButtons = container.querySelectorAll(".ac-actionSet button.ac-pushButton:not([aria-controls])");
81
+ actionButtons.forEach(btn => {
82
+ if (btn.hasAttribute("aria-pressed")) {
83
+ btn.removeAttribute("aria-pressed");
84
+ }
85
+ const role = btn.getAttribute("role");
86
+ if (role === "switch") {
87
+ btn.removeAttribute("role");
88
+ }
89
+ });
90
+
91
+ // Find all radio inputs inside the adaptive card
92
+ const radios = container.querySelectorAll("input[type='radio']");
93
+ if (radios.length === 0) return;
94
+
95
+ // Group radios by their name attribute (each ChoiceSet has a unique name)
96
+ const groups = new Map();
97
+ radios.forEach(radio => {
98
+ var _groups$get;
99
+ const name = radio.getAttribute("name") || "__default";
100
+ if (!groups.has(name)) {
101
+ groups.set(name, []);
102
+ }
103
+ (_groups$get = groups.get(name)) === null || _groups$get === void 0 || _groups$get.push(radio);
104
+ });
105
+ groups.forEach(radioInputs => {
106
+ const groupSize = radioInputs.length;
107
+ radioInputs.forEach((radio, index) => {
108
+ radio.setAttribute("aria-setsize", String(groupSize));
109
+ radio.setAttribute("aria-posinset", String(index + 1));
110
+
111
+ // Ensure the parent container has radiogroup role
112
+ const parent = radio.closest("[role='radiogroup']") || radio.closest(".ac-input-container");
113
+ if (parent && !parent.getAttribute("role")) {
114
+ parent.setAttribute("role", "radiogroup");
115
+ }
116
+
117
+ // The adaptive card renders each choice as:
118
+ // <div style="display:flex"> ← flex wrapper
119
+ // <input type="radio">
120
+ // <div style="width:6px"></div> ← spacer
121
+ // <label><div><p>Text</p></div></label>
122
+ // </div>
123
+ //
124
+ // TalkBack focuses on the <label> text node (just "Standard")
125
+ // instead of the <input>, so it never announces "radio button" or count.
126
+ //
127
+ // Fix: hide the label and spacer from the accessibility tree so TalkBack
128
+ // lands directly on the <input> which already has aria-label,
129
+ // aria-setsize and aria-posinset. The input's aria-labelledby still
130
+ // resolves the accessible name from the hidden label per ARIA spec.
131
+ const flexWrapper = radio.parentElement;
132
+ if (flexWrapper) {
133
+ var _label$textContent;
134
+ // Hide label sibling — only set if not already applied to
135
+ // avoid re-triggering the attributeFilter observer in a loop
136
+ const label = flexWrapper.querySelector("label");
137
+ if (label && label.getAttribute("aria-hidden") !== "true") {
138
+ label.setAttribute("aria-hidden", "true");
139
+ }
140
+ // Hide spacer siblings (any non-input, non-label divs)
141
+ Array.from(flexWrapper.children).forEach(child => {
142
+ const tag = child.tagName.toLowerCase();
143
+ if (tag !== "input" && tag !== "label" && child.getAttribute("aria-hidden") !== "true") {
144
+ child.setAttribute("aria-hidden", "true");
145
+ }
146
+ });
147
+
148
+ // TalkBack reads content-desc from the Android accessibility node,
149
+ // which Chrome populates from aria-label. However, aria-labelledby
150
+ // (set by the adaptive card renderer) takes precedence over aria-label.
151
+ // Since we hide the label (aria-hidden=true), Chrome can no longer
152
+ // resolve aria-labelledby and returns empty content-desc.
153
+ //
154
+ // Fix: remove aria-labelledby so Chrome falls back to aria-label,
155
+ // then encode the position count into aria-label so TalkBack announces
156
+ // e.g. "Standard, 1 of 2, radio button, not checked".
157
+ if (radio.hasAttribute("aria-labelledby")) {
158
+ radio.removeAttribute("aria-labelledby");
159
+ }
160
+ const labelText = (label === null || label === void 0 || (_label$textContent = label.textContent) === null || _label$textContent === void 0 ? void 0 : _label$textContent.trim()) || radio.getAttribute("aria-label") || "";
161
+ const expectedLabel = `${labelText}, ${index + 1} of ${groupSize}`;
162
+ if (radio.getAttribute("aria-label") !== expectedLabel) {
163
+ radio.setAttribute("aria-label", expectedLabel);
164
+ }
165
+ }
166
+ });
167
+ });
168
+ };
169
+
170
+ // Use MutationObserver to patch after WebChat finishes rendering the card.
171
+ // Also watch attribute changes on aria-hidden so we can re-apply if React
172
+ // reconciliation removes it from labels.
173
+ const observer = new MutationObserver(() => {
174
+ patchRadioGroups();
175
+ });
176
+ observer.observe(containerRef.current, {
177
+ childList: true,
178
+ subtree: true,
179
+ attributes: true,
180
+ attributeFilter: ["aria-hidden"]
181
+ });
182
+
183
+ // Also run immediately in case the card is already rendered
184
+ patchRadioGroups();
185
+ return () => observer.disconnect();
186
+ }, []);
187
+ return /*#__PURE__*/React.createElement("div", {
188
+ id: id,
189
+ style: style,
190
+ ref: containerRef
191
+ }, children);
192
+ };
193
+ export default AdaptiveCardAccessibilityWrapper;
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ 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."); }
3
+ 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; } }
4
+ 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; }
5
+ 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; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React from "react";
2
8
  import useChatContextStore from "../../../../../../hooks/useChatContextStore";
3
9
  import { defaultAttachmentProps } from "../../../../common/defaultProps/defaultAttachmentProps";
@@ -13,13 +19,13 @@ import AttachmentIcon from "./AttachmentIcon";
13
19
  const Attachment = props => {
14
20
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$r5, _state$domainStates$r6, _state$domainStates$r7, _state$domainStates$r8;
15
21
  // eslint-disable-line @typescript-eslint/no-explicit-any
16
- const {
17
- iconData,
18
- imageCard,
19
- textCard,
20
- renderer
21
- } = props;
22
- const [state] = useChatContextStore();
22
+ const iconData = props.iconData,
23
+ imageCard = props.imageCard,
24
+ textCard = props.textCard,
25
+ renderer = props.renderer;
26
+ const _useChatContextStore = useChatContextStore(),
27
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
28
+ state = _useChatContextStore2[0];
23
29
  const attachmentId = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 || (_state$domainStates$r = _state$domainStates$r.attachmentProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.webChatAttachmentId) ?? defaultAttachmentProps.webChatAttachmentId;
24
30
  const attachmentDividerStyles = {
25
31
  ...defaultAttachmentDividerStyles,
@@ -37,28 +43,36 @@ const Attachment = props => {
37
43
  ...defaultAttachmentSizeStyles,
38
44
  ...((_state$domainStates$r5 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r5 === void 0 ? void 0 : _state$domainStates$r5.attachmentSizeStyles)
39
45
  }).map(_ref => {
40
- let [k, v] = _ref;
46
+ let _ref2 = _slicedToArray(_ref, 2),
47
+ k = _ref2[0],
48
+ v = _ref2[1];
41
49
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
42
50
  }).join(";");
43
51
  const attachmentContentStylesString = Object.entries({
44
52
  ...defaultAttachmentContentStyles,
45
53
  ...((_state$domainStates$r6 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r6 === void 0 ? void 0 : _state$domainStates$r6.attachmentContentStyles)
46
- }).map(_ref2 => {
47
- let [k, v] = _ref2;
54
+ }).map(_ref3 => {
55
+ let _ref4 = _slicedToArray(_ref3, 2),
56
+ k = _ref4[0],
57
+ v = _ref4[1];
48
58
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
49
59
  }).join(";");
50
60
  const attachmentFileNameStylesString = Object.entries({
51
61
  ...defaultAttachmentFileNameStyles,
52
62
  ...((_state$domainStates$r7 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r7 === void 0 ? void 0 : _state$domainStates$r7.attachmentFileNameStyles)
53
- }).map(_ref3 => {
54
- let [k, v] = _ref3;
63
+ }).map(_ref5 => {
64
+ let _ref6 = _slicedToArray(_ref5, 2),
65
+ k = _ref6[0],
66
+ v = _ref6[1];
55
67
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
56
68
  }).join(";");
57
69
  const attachmentDownloadIconStylesString = Object.entries({
58
70
  ...defaultAttachmentDownloadIconStyles,
59
71
  ...((_state$domainStates$r8 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r8 === void 0 ? void 0 : _state$domainStates$r8.attachmentDownloadIconStyles)
60
- }).map(_ref4 => {
61
- let [k, v] = _ref4;
72
+ }).map(_ref7 => {
73
+ let _ref8 = _slicedToArray(_ref7, 2),
74
+ k = _ref8[0],
75
+ v = _ref8[1];
62
76
  return `${k.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}:${v}`;
63
77
  }).join(";");
64
78
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("style", null, `
@@ -16,18 +16,11 @@ export const createAvatarMiddleware = (avatarStyleProps, avatarTextStyleProps) =
16
16
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
17
17
  args[_key] = arguments[_key];
18
18
  }
19
- const [params] = args;
20
- const {
21
- activity: {
22
- channelData: {
23
- tags
24
- },
25
- from: {
26
- name
27
- }
28
- },
29
- fromUser
30
- } = params;
19
+ const params = args[0];
20
+ const _params$activity = params.activity,
21
+ tags = _params$activity.channelData.tags,
22
+ name = _params$activity.from.name,
23
+ fromUser = params.fromUser;
31
24
  if (fromUser !== false || tags && tags.includes(Constants.systemMessageTag)) {
32
25
  return false;
33
26
  }
@@ -12,7 +12,7 @@ export const createCardActionMiddleware = botMagicCodeConfig => {
12
12
  args[_key] = arguments[_key];
13
13
  }
14
14
  // eslint-disable-line @typescript-eslint/no-explicit-any
15
- const [card] = args;
15
+ const card = args[0];
16
16
  if (card.cardAction && validCardActionTypes.indexOf(card.cardAction.type) >= 0 && card.cardAction.value) {
17
17
  // Override signin url only if fwdUrl is valid & feature is enabled
18
18
  if ((botMagicCodeConfig === null || botMagicCodeConfig === void 0 ? void 0 : botMagicCodeConfig.disabled) === true && botMagicCodeConfig !== null && botMagicCodeConfig !== void 0 && botMagicCodeConfig.fwdUrl) {
@@ -1,6 +1,6 @@
1
1
  export const defaultAvatarTextStyles = {
2
2
  margin: "0",
3
- fontFamily: "'Segoe UI', 'Apple Color Emoji', 'Noto Color Emoji', 'Segoe UI Emoji', Arial, sans-serif",
3
+ fontFamily: "'Segoe UI', Arial, sans-serif",
4
4
  fontWeight: 600,
5
5
  fontSize: "13px",
6
6
  lineHeight: "18px",
@@ -5,7 +5,12 @@ export const defaultSystemMessageStyles = {
5
5
  fontSize: "12px",
6
6
  borderRadius: 0,
7
7
  minHeight: "auto",
8
- fontFamily: "'Segoe UI', 'Apple Color Emoji', 'Noto Color Emoji', 'Segoe UI Emoji', Arial, sans-serif",
9
- lineHeight: "16px",
10
- padding: "0px 10px 0 10px"
8
+ fontFamily: "'Segoe UI', Arial, sans-serif",
9
+ lineHeight: "1.4",
10
+ padding: "0px 10px 0 10px",
11
+ // iOS Safari: position underlines below all glyphs so they do not
12
+ // intersect numbers. Also enforce lining figures for consistent baselines.
13
+ WebkitTextUnderlinePosition: "under",
14
+ textUnderlinePosition: "under",
15
+ fontVariantNumeric: "lining-nums"
11
16
  };
@@ -2,5 +2,12 @@ import { defaultTimestampContentStyles } from "./defaultTimestampContentStyles";
2
2
  export const defaultTimestampRetryStyles = {
3
3
  ...defaultTimestampContentStyles,
4
4
  color: "#0063B1",
5
- cursor: "pointer"
5
+ cursor: "pointer",
6
+ border: "none",
7
+ padding: 0,
8
+ margin: 0,
9
+ textDecoration: "none",
10
+ display: "inline",
11
+ fontWeight: "inherit",
12
+ textAlign: "inherit"
6
13
  };
@@ -26,15 +26,12 @@ function bin(items, grouping) {
26
26
 
27
27
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
28
28
  export const groupActivitiesMiddleware = () => next => args => {
29
- const {
30
- activities
31
- } = args;
29
+ const activities = args.activities;
32
30
  if (activities != null && activities.length > 0) {
33
- const {
34
- status
35
- } = next({
36
- activities
37
- });
31
+ const _next = next({
32
+ activities
33
+ }),
34
+ status = _next.status;
38
35
  return {
39
36
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
37
  sender: bin(activities, (x, y) => {
@@ -1,11 +1,13 @@
1
+ import { isWebChatAction } from "../../../interfaces/IWebChatAction";
1
2
  import { WebChatActionType } from "../../enums/WebChatActionType";
2
3
  import { Constants } from "../../../../../common/Constants";
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4
5
  export const createMessageSequenceIdOverrideMiddleware = _ref => {
5
- let {
6
- dispatch
7
- } = _ref;
6
+ let dispatch = _ref.dispatch;
8
7
  return next => action => {
8
+ if (!isWebChatAction(action)) {
9
+ return next(action);
10
+ }
9
11
  if (isApplicable(action)) {
10
12
  return next(overrideSequenceIdWithOriginalMessageId(action));
11
13
  }
@@ -1,12 +1,14 @@
1
+ import { isWebChatAction } from "../../../interfaces/IWebChatAction";
1
2
  import { WebChatActionType } from "../../enums/WebChatActionType";
2
3
  import { Constants } from "../../../../../common/Constants";
3
4
 
4
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
5
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
6
  export const createMessageTimeStampMiddleware = _ref => {
6
- let {
7
- dispatch
8
- } = _ref;
7
+ let dispatch = _ref.dispatch;
9
8
  return next => action => {
9
+ if (!isWebChatAction(action)) {
10
+ return next(action);
11
+ }
10
12
  if (isApplicable(action)) {
11
13
  return next(evaluateTagsAndOverrideTimeStamp(action));
12
14
  }
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ 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."); }
3
+ 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; } }
4
+ 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; }
5
+ 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; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React from "react";
2
8
  import { DirectLineSenderRole } from "../../../enums/DirectLineSenderRole";
3
9
  import { Stack } from "@fluentui/react";
@@ -9,22 +15,18 @@ import useChatContextStore from "../../../../../../hooks/useChatContextStore";
9
15
  /* eslint @typescript-eslint/no-explicit-any: "off" */
10
16
  export const DeliveredTimestamp = _ref => {
11
17
  var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
12
- let {
13
- args,
14
- role,
15
- name
16
- } = _ref;
17
- const [state] = useChatContextStore();
18
+ let args = _ref.args,
19
+ role = _ref.role,
20
+ name = _ref.name;
21
+ const _useChatContextStore = useChatContextStore(),
22
+ _useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
23
+ state = _useChatContextStore2[0];
18
24
  const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
19
25
  const contentStyles = {
20
26
  ...defaultTimestampContentStyles,
21
27
  ...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
22
28
  };
23
- const {
24
- activity: {
25
- timestamp
26
- }
27
- } = args;
29
+ const timestamp = args.activity.timestamp;
28
30
  const getTimeElement = timestamp => {
29
31
  const timeString = getTimestampHourMinute(timestamp);
30
32
  const isAmPmFormat = timeString.toLowerCase().includes("am") || timeString.toLowerCase().includes("pm");