@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.
- package/README.md +52 -5
- package/lib/cjs/common/Constants.js +5 -0
- package/lib/cjs/common/facades/FacadeChatSDK.js +234 -9
- package/lib/cjs/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/cjs/common/telemetry/TelemetryManager.js +6 -1
- package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/cjs/common/telemetry/sanitizeSasInPayload.js +91 -0
- package/lib/cjs/common/utils.js +93 -17
- package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +16 -6
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -10
- package/lib/cjs/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +27 -5
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +23 -3
- package/lib/cjs/components/dimlayer/DimLayer.js +1 -3
- package/lib/cjs/components/draggable/DraggableChatWidget.js +35 -15
- package/lib/cjs/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/cjs/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/cjs/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/cjs/components/footerstateful/FooterStateful.js +18 -9
- package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/cjs/components/headerstateful/HeaderStateful.js +24 -12
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
- package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
- package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
- package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
- package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
- package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
- package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
- package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/cjs/contexts/createReducer.js +15 -0
- package/lib/cjs/controller/componentController.js +13 -1
- package/lib/cjs/hooks/useWindowDimensions.js +13 -5
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/plugins/createChatTranscript.js +3 -4
- package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
- package/lib/esm/common/Constants.js +5 -0
- package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
- package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
- package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
- package/lib/esm/common/utils.js +88 -14
- package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
- package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
- package/lib/esm/components/dimlayer/DimLayer.js +1 -3
- package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
- package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
- package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
- package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
- package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
- package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
- package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
- package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
- package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
- package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/esm/contexts/createReducer.js +15 -0
- package/lib/esm/controller/componentController.js +13 -1
- package/lib/esm/hooks/useWindowDimensions.js +13 -5
- package/lib/esm/plugins/createChatTranscript.js +3 -4
- package/lib/esm/plugins/newMessageEventHandler.js +20 -3
- package/lib/types/common/Constants.d.ts +4 -0
- package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
- package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
- package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
- package/lib/types/common/utils.d.ts +3 -1
- package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
- package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
- package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
- 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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
content
|
|
87
|
-
contentType
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
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(
|
|
47
|
-
let
|
|
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(
|
|
54
|
-
let
|
|
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(
|
|
61
|
-
let
|
|
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
|
|
20
|
-
const
|
|
21
|
-
activity
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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',
|
|
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',
|
|
9
|
-
lineHeight: "
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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");
|