botframework-webchat-component 4.14.1 → 4.15.2-main.20220413.af6e8a3
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/.eslintrc.yml +4 -106
- package/.prettierrc.yml +1 -1
- package/lib/Activity/CarouselFilmStrip.js +1 -1
- package/lib/Activity/CarouselFilmStripAttachment.js +1 -1
- package/lib/Activity/CarouselLayout.js +3 -3
- package/lib/Activity/Speak.d.ts +2 -2
- package/lib/Activity/Speak.d.ts.map +1 -1
- package/lib/Activity/Speak.js +15 -8
- package/lib/Activity/StackedLayout.d.ts +5 -3
- package/lib/Activity/StackedLayout.d.ts.map +1 -1
- package/lib/Activity/StackedLayout.js +16 -21
- package/lib/Attachment/FileAttachment.js +2 -2
- package/lib/Attachment/FileContent.d.ts.map +1 -1
- package/lib/Attachment/FileContent.js +11 -1
- package/lib/BasicSendBox.d.ts.map +1 -1
- package/lib/BasicSendBox.js +8 -9
- package/lib/BasicToast.js +1 -1
- package/lib/BasicToaster.js +6 -3
- package/lib/BasicTranscript.d.ts +7 -0
- package/lib/BasicTranscript.d.ts.map +1 -0
- package/lib/BasicTranscript.js +386 -728
- package/lib/BasicTypingIndicator.d.ts +2 -1
- package/lib/BasicTypingIndicator.d.ts.map +1 -1
- package/lib/BasicTypingIndicator.js +12 -4
- package/lib/Composer.d.ts.map +1 -1
- package/lib/Composer.js +37 -32
- package/lib/ConnectivityStatus/Connecting.js +1 -1
- package/lib/Dictation.js +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.js +9 -12
- package/lib/Middleware/ActivityStatus/SendStatus/SendFailedRetry.js +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.js +5 -4
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/Timestamp.js +4 -2
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +20 -17
- package/lib/Middleware/Attachment/createCoreMiddleware.js +2 -5
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +1 -1
- package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/Avatar/createCoreMiddleware.js +2 -3
- package/lib/Middleware/CardAction/createCoreMiddleware.js +10 -3
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +1 -1
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +1 -1
- package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/Toast/createCoreMiddleware.js +1 -1
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +8 -6
- package/lib/ReactWebChat.js +2 -2
- package/lib/ScreenReaderActivity.js +15 -6
- package/lib/ScreenReaderText.d.ts +9 -0
- package/lib/ScreenReaderText.d.ts.map +1 -0
- package/lib/ScreenReaderText.js +22 -8
- package/lib/SendBox/AutoResizeTextArea.js +1 -1
- package/lib/SendBox/DictationInterims.js +1 -1
- package/lib/SendBox/IconButton.d.ts +11 -0
- package/lib/SendBox/IconButton.d.ts.map +1 -0
- package/lib/SendBox/IconButton.js +26 -6
- package/lib/SendBox/MicrophoneButton.js +2 -2
- package/lib/SendBox/SendButton.js +2 -2
- package/lib/SendBox/SuggestedAction.d.ts +17 -0
- package/lib/SendBox/SuggestedAction.d.ts.map +1 -0
- package/lib/SendBox/SuggestedAction.js +26 -17
- package/lib/SendBox/SuggestedActions.d.ts.map +1 -1
- package/lib/SendBox/SuggestedActions.js +26 -9
- package/lib/SendBox/TextBox.js +4 -4
- package/lib/SendBox/UploadButton.js +4 -4
- package/lib/Styles/StyleSet/BasicTranscript.d.ts +13 -5
- package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +1 -1
- package/lib/Styles/StyleSet/BasicTranscript.js +21 -9
- package/lib/Styles/StyleSet/Bubble.d.ts.map +1 -1
- package/lib/Styles/StyleSet/Bubble.js +3 -3
- package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +1 -1
- package/lib/Styles/StyleSet/CarouselFilmStrip.js +3 -3
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +1 -1
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +3 -3
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts +123 -0
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +1 -0
- package/lib/Styles/StyleSet/KeyboardHelp.js +145 -0
- package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +1 -1
- package/lib/Styles/StyleSet/ScrollToEndButton.js +2 -2
- package/lib/Styles/StyleSet/SendBoxButton.d.ts +56 -10
- package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +1 -1
- package/lib/Styles/StyleSet/SendBoxButton.js +76 -12
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +1 -1
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +1 -1
- package/lib/Styles/StyleSet/SendBoxTextBox.js +3 -3
- package/lib/Styles/StyleSet/StackedLayout.d.ts.map +1 -1
- package/lib/Styles/StyleSet/StackedLayout.js +1 -1
- package/lib/Styles/StyleSet/SuggestedAction.d.ts +73 -28
- package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +1 -1
- package/lib/Styles/StyleSet/SuggestedAction.js +116 -41
- package/lib/Styles/StyleSet/SuggestedActions.d.ts +13 -6
- package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +1 -1
- package/lib/Styles/StyleSet/SuggestedActions.js +13 -6
- package/lib/Styles/createStyleSet.d.ts +324 -55
- package/lib/Styles/createStyleSet.d.ts.map +1 -1
- package/lib/Styles/createStyleSet.js +6 -3
- package/lib/Styles/mirrorStyle.js +12 -3
- package/lib/Toast/NotificationIcon.js +7 -3
- package/lib/Toast/createToastMiddleware.d.ts.map +1 -1
- package/lib/Toast/createToastMiddleware.js +1 -1
- package/lib/Transcript/ActivityRow.d.ts +9 -0
- package/lib/Transcript/ActivityRow.d.ts.map +1 -0
- package/lib/Transcript/ActivityRow.js +159 -0
- package/lib/Transcript/ActivityTextAlt.js +57 -0
- package/lib/Transcript/FocusTrap.d.ts +8 -0
- package/lib/Transcript/FocusTrap.d.ts.map +1 -0
- package/lib/Transcript/FocusTrap.js +74 -0
- package/lib/Transcript/KeyboardHelp.d.ts +4 -0
- package/lib/Transcript/KeyboardHelp.d.ts.map +1 -0
- package/lib/Transcript/KeyboardHelp.js +550 -0
- package/lib/Transcript/LiveRegionTranscript.d.ts +8 -0
- package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -0
- package/lib/Transcript/LiveRegionTranscript.js +229 -0
- package/lib/Transcript/types.d.ts +2 -0
- package/lib/Transcript/types.d.ts.map +1 -0
- package/lib/Transcript/types.js +2 -0
- package/lib/Transcript/useActivityAccessibleName.d.ts +4 -0
- package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -0
- package/lib/Transcript/useActivityAccessibleName.js +97 -0
- package/lib/Transcript/useTypistNames.d.ts +3 -0
- package/lib/Transcript/useTypistNames.d.ts.map +1 -0
- package/lib/Transcript/useTypistNames.js +61 -0
- package/lib/Utils/AccessKeySink/Surface.js +1 -1
- package/lib/Utils/AccessibleButton.d.ts +11 -0
- package/lib/Utils/AccessibleButton.d.ts.map +1 -0
- package/lib/Utils/AccessibleButton.js +12 -7
- package/lib/Utils/AccessibleInputText.js +1 -1
- package/lib/Utils/AccessibleTextArea.js +1 -1
- package/lib/Utils/CroppedImage.js +1 -1
- package/lib/Utils/FocusRedirector.d.ts +9 -0
- package/lib/Utils/FocusRedirector.d.ts.map +1 -0
- package/lib/Utils/FocusRedirector.js +17 -14
- package/lib/Utils/InlineMarkdown.js +15 -8
- package/lib/Utils/TypeFocusSink/FocusBox.js +1 -1
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +2 -0
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +1 -0
- package/lib/Utils/TypeFocusSink/inputtableKey.js +5 -2
- package/lib/Utils/activityAltText.d.ts +8 -0
- package/lib/Utils/activityAltText.d.ts.map +1 -0
- package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +2 -2
- package/lib/Utils/createCustomEvent.js +8 -2
- package/lib/Utils/detectBrowser.js +4 -2
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +1 -1
- package/lib/Utils/downscaleImageToDataURL/index.js +1 -1
- package/lib/Utils/findAncestor.js +17 -0
- package/lib/Utils/getActivityUniqueId.js +4 -2
- package/lib/Utils/intersectionOf.d.ts +5 -0
- package/lib/Utils/intersectionOf.d.ts.map +1 -0
- package/lib/Utils/intersectionOf.js +17 -2
- package/lib/Utils/isZeroOrPositive.d.ts +5 -0
- package/lib/Utils/isZeroOrPositive.d.ts.map +1 -0
- package/lib/Utils/isZeroOrPositive.js +4 -1
- package/lib/Utils/mapMap.js +9 -2
- package/lib/Utils/readDataURIToBlob.js +1 -1
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +7 -0
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +1 -0
- package/lib/Utils/scrollIntoViewWithBlockNearest.js +48 -0
- package/lib/Utils/shallowEquals.js +7 -3
- package/lib/Utils/supportPseudoClass.d.ts +2 -0
- package/lib/Utils/supportPseudoClass.d.ts.map +1 -0
- package/lib/Utils/supportPseudoClass.js +23 -0
- package/lib/Utils/tabbableElements.d.ts +2 -0
- package/lib/Utils/tabbableElements.d.ts.map +1 -0
- package/lib/Utils/tabbableElements.js +2 -2
- package/lib/connectToWebChat.js +15 -7
- package/lib/hooks/index.js +24 -24
- package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +8 -7
- package/lib/hooks/internal/useChanged.js +8 -1
- package/lib/hooks/internal/useDispatchScrollPosition.js +3 -7
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +2 -0
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +1 -0
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +15 -0
- package/lib/hooks/internal/useFocusVisible.d.ts +3 -0
- package/lib/hooks/internal/useFocusVisible.d.ts.map +1 -0
- package/lib/hooks/internal/useFocusVisible.js +48 -0
- package/lib/hooks/internal/useMemoWithPrevious.d.ts +3 -0
- package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +1 -0
- package/lib/hooks/internal/useMemoWithPrevious.js +22 -0
- package/lib/hooks/internal/useMemoize.d.ts +14 -0
- package/lib/hooks/internal/useMemoize.d.ts.map +1 -0
- package/lib/hooks/internal/useMemoize.js +11 -2
- package/lib/hooks/internal/useObserveFocusVisible.d.ts +3 -0
- package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +1 -0
- package/lib/hooks/internal/useObserveFocusVisible.js +208 -0
- package/lib/hooks/internal/usePrevious.d.ts +2 -0
- package/lib/hooks/internal/usePrevious.d.ts.map +1 -0
- package/lib/hooks/internal/usePrevious.js +18 -0
- package/lib/hooks/internal/useStateRef.d.ts +3 -0
- package/lib/hooks/internal/useStateRef.d.ts.map +1 -0
- package/lib/hooks/internal/useStateRef.js +40 -0
- package/lib/hooks/internal/useValueRef.d.ts +3 -0
- package/lib/hooks/internal/useValueRef.d.ts.map +1 -0
- package/lib/hooks/internal/useValueRef.js +25 -0
- package/lib/hooks/useFocus.d.ts +1 -1
- package/lib/hooks/useFocus.d.ts.map +1 -1
- package/lib/hooks/useFocus.js +1 -1
- package/lib/hooks/useObserveTranscriptFocus.d.ts +2 -2
- package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -1
- package/lib/hooks/useObserveTranscriptFocus.js +1 -1
- package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +1 -1
- package/lib/hooks/useRenderMarkdownAsHTML.js +1 -1
- package/lib/hooks/useScrollTo.d.ts.map +1 -1
- package/lib/hooks/useScrollTo.js +1 -1
- package/lib/hooks/useScrollToEnd.d.ts.map +1 -1
- package/lib/hooks/useScrollToEnd.js +1 -1
- package/lib/hooks/useSendFiles.d.ts.map +1 -1
- package/lib/hooks/useSendFiles.js +4 -4
- package/lib/index.d.ts +13 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +20 -18
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +5 -0
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/ActivityTreeComposer.js +86 -0
- package/lib/providers/ActivityTree/private/Context.d.ts +9 -0
- package/lib/providers/ActivityTree/private/Context.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/Context.js +13 -0
- package/lib/providers/ActivityTree/private/types.d.ts +10 -0
- package/lib/providers/ActivityTree/private/types.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/types.js +2 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +4 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +58 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +5 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +166 -0
- package/lib/providers/ActivityTree/private/useContext.d.ts +3 -0
- package/lib/providers/ActivityTree/private/useContext.d.ts.map +1 -0
- package/lib/providers/ActivityTree/private/useContext.js +24 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +8 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +1 -0
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +17 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +37 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +160 -0
- package/lib/providers/LiveRegionTwin/private/Context.d.ts +10 -0
- package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/Context.js +13 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +12 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +100 -0
- package/lib/providers/LiveRegionTwin/private/types.d.ts +8 -0
- package/lib/providers/LiveRegionTwin/private/types.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/types.js +2 -0
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts +3 -0
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useContext.js +24 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +2 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +24 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +3 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +15 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +8 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +1 -0
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +20 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +7 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +184 -0
- package/lib/providers/TranscriptFocus/private/Context.d.ts +12 -0
- package/lib/providers/TranscriptFocus/private/Context.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/private/Context.js +13 -0
- package/lib/providers/TranscriptFocus/private/useContext.d.ts +2 -0
- package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/private/useContext.js +24 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useActiveDescendantId.js +15 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +8 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +21 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +15 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +15 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +15 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +2 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +1 -0
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +15 -0
- package/package.json +30 -33
- package/src/Activity/CarouselFilmStripAttachment.js +0 -1
- package/src/Activity/Speak.tsx +21 -18
- package/src/Activity/StackedLayout.tsx +30 -35
- package/src/Attachment/FileAttachment.js +1 -1
- package/src/Attachment/FileContent.tsx +12 -0
- package/src/BasicSendBox.tsx +3 -2
- package/src/BasicToaster.js +5 -1
- package/src/BasicTranscript.tsx +894 -0
- package/src/BasicTypingIndicator.tsx +3 -2
- package/src/Composer.tsx +41 -29
- package/src/Middleware/Activity/createCoreMiddleware.tsx +47 -46
- package/src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx +5 -3
- package/src/Middleware/ActivityStatus/Timestamp.tsx +5 -3
- package/src/Middleware/ActivityStatus/createSendStatusMiddleware.js +2 -0
- package/src/Middleware/Attachment/createCoreMiddleware.tsx +28 -28
- package/src/Middleware/AttachmentForScreenReader/createCoreMiddleware.tsx +25 -23
- package/src/Middleware/Avatar/createCoreMiddleware.tsx +9 -8
- package/src/Middleware/CardAction/createCoreMiddleware.js +9 -2
- package/src/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.ts +11 -9
- package/src/Middleware/Toast/createCoreMiddleware.tsx +12 -10
- package/src/Middleware/TypingIndicator/createCoreMiddleware.tsx +8 -2
- package/src/ScreenReaderActivity.js +18 -3
- package/src/{ScreenReaderText.js → ScreenReaderText.tsx} +27 -9
- package/src/SendBox/{IconButton.js → IconButton.tsx} +19 -3
- package/src/SendBox/{SuggestedAction.js → SuggestedAction.tsx} +72 -35
- package/src/SendBox/SuggestedActions.tsx +48 -21
- package/src/Styles/StyleSet/BasicTranscript.ts +34 -20
- package/src/Styles/StyleSet/Bubble.ts +0 -1
- package/src/Styles/StyleSet/CarouselFilmStrip.ts +12 -10
- package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +4 -3
- package/src/Styles/StyleSet/KeyboardHelp.ts +157 -0
- package/src/Styles/StyleSet/ScrollToEndButton.ts +1 -1
- package/src/Styles/StyleSet/SendBoxButton.ts +84 -13
- package/src/Styles/StyleSet/SendBoxTextBox.ts +1 -2
- package/src/Styles/StyleSet/StackedLayout.ts +13 -11
- package/src/Styles/StyleSet/SuggestedAction.ts +129 -42
- package/src/Styles/StyleSet/SuggestedActions.ts +13 -5
- package/src/Styles/createStyleSet.ts +2 -1
- package/src/Styles/mirrorStyle.js +10 -2
- package/src/Toast/NotificationIcon.js +4 -1
- package/src/Toast/createToastMiddleware.tsx +4 -1
- package/src/Transcript/ActivityRow.tsx +123 -0
- package/src/Transcript/ActivityTextAlt.tsx +31 -0
- package/src/Transcript/FocusTrap.tsx +64 -0
- package/src/Transcript/KeyboardHelp.tsx +282 -0
- package/src/Transcript/LiveRegionTranscript.tsx +196 -0
- package/src/Transcript/types.ts +1 -0
- package/src/Transcript/useActivityAccessibleName.ts +84 -0
- package/src/Transcript/useTypistNames.ts +37 -0
- package/src/Utils/{AccessibleButton.js → AccessibleButton.tsx} +19 -4
- package/src/Utils/{FocusRedirector.js → FocusRedirector.tsx} +21 -8
- package/src/Utils/InlineMarkdown.js +18 -2
- package/src/Utils/TypeFocusSink/inputtableKey.ts +5 -1
- package/src/Utils/createCustomEvent.js +7 -1
- package/src/Utils/detectBrowser.js +2 -1
- package/src/Utils/findAncestor.ts +12 -0
- package/src/Utils/getActivityUniqueId.ts +5 -0
- package/src/Utils/intersectionOf.ts +14 -0
- package/src/Utils/isZeroOrPositive.ts +7 -0
- package/src/Utils/mapMap.js +7 -1
- package/src/Utils/scrollIntoViewWithBlockNearest.ts +20 -0
- package/src/Utils/shallowEquals.js +8 -1
- package/src/Utils/supportPseudoClass.ts +17 -0
- package/src/Utils/{tabbableElements.js → tabbableElements.ts} +6 -5
- package/src/connectToWebChat.js +11 -4
- package/src/hooks/internal/BypassSpeechSynthesisPonyfill.js +3 -1
- package/src/hooks/internal/useChanged.ts +17 -0
- package/src/hooks/internal/useDispatchScrollPosition.js +1 -3
- package/src/hooks/internal/useDispatchTranscriptFocusByActivityKey.ts +5 -0
- package/src/hooks/internal/useFocusVisible.ts +22 -0
- package/src/hooks/internal/useMemoWithPrevious.ts +16 -0
- package/src/hooks/internal/useMemoize.spec.js +1 -1
- package/src/hooks/internal/useMemoize.ts +53 -0
- package/src/hooks/internal/useObserveFocusVisible.ts +252 -0
- package/src/hooks/internal/usePrevious.ts +12 -0
- package/src/hooks/internal/useStateRef.ts +31 -0
- package/src/hooks/internal/useValueRef.ts +22 -0
- package/src/hooks/useFocus.ts +1 -1
- package/src/hooks/useObserveTranscriptFocus.ts +2 -2
- package/src/hooks/useRenderMarkdownAsHTML.ts +4 -5
- package/src/hooks/useScrollTo.ts +4 -3
- package/src/hooks/useScrollToEnd.ts +4 -3
- package/src/hooks/useSendFiles.ts +7 -5
- package/src/index.ts +0 -1
- package/src/providers/ActivityTree/ActivityTreeComposer.tsx +74 -0
- package/src/providers/ActivityTree/private/Context.ts +12 -0
- package/src/providers/ActivityTree/private/types.ts +12 -0
- package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +64 -0
- package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +135 -0
- package/src/providers/ActivityTree/private/useContext.ts +15 -0
- package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +16 -0
- package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +161 -0
- package/src/providers/LiveRegionTwin/private/Context.ts +15 -0
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +80 -0
- package/src/providers/LiveRegionTwin/private/types.ts +10 -0
- package/src/providers/LiveRegionTwin/private/useContext.ts +15 -0
- package/src/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.ts +13 -0
- package/src/providers/LiveRegionTwin/private/useStaticElementEntries.ts +7 -0
- package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +12 -0
- package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +180 -0
- package/src/providers/TranscriptFocus/private/Context.ts +16 -0
- package/src/providers/TranscriptFocus/private/useContext.ts +13 -0
- package/src/providers/TranscriptFocus/useActiveDescendantId.ts +5 -0
- package/src/providers/TranscriptFocus/useFocusByActivityKey.ts +14 -0
- package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +5 -0
- package/src/providers/TranscriptFocus/useFocusedActivityKey.ts +5 -0
- package/src/providers/TranscriptFocus/useFocusedExplicitly.ts +5 -0
- package/src/providers/TranscriptFocus/useGetDescendantIdByActivityKey.ts +5 -0
- package/.eslintignore +0 -1
- package/lib/Middleware/GroupActivities/createCoreMiddleware.js +0 -69
- package/lib/Utils/findLastIndex.js +0 -32
- package/lib/hooks/internal/useAcknowledgedActivity.js +0 -90
- package/lib/hooks/internal/useDispatchTranscriptFocus.js +0 -19
- package/src/BasicTranscript.js +0 -1139
- package/src/Middleware/GroupActivities/createCoreMiddleware.js +0 -57
- package/src/Utils/findLastIndex.js +0 -11
- package/src/Utils/findLastIndex.spec.js +0 -31
- package/src/Utils/getActivityUniqueId.js +0 -3
- package/src/Utils/intersectionOf.js +0 -11
- package/src/Utils/isZeroOrPositive.js +0 -4
- package/src/hooks/internal/useAcknowledgedActivity.js +0 -65
- package/src/hooks/internal/useChanged.js +0 -10
- package/src/hooks/internal/useDispatchTranscriptFocus.js +0 -7
- package/src/hooks/internal/useMemoize.js +0 -37
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { hooks } from 'botframework-webchat-api';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import random from 'math-random';
|
|
4
|
+
import React, { useCallback, useMemo } from 'react';
|
|
5
|
+
|
|
6
|
+
import type { FC, MutableRefObject } from 'react';
|
|
7
|
+
|
|
8
|
+
import scrollIntoViewWithBlockNearest from '../../Utils/scrollIntoViewWithBlockNearest';
|
|
9
|
+
import TranscriptFocusContext from './private/Context';
|
|
10
|
+
import useActivityTreeWithRenderer from '../ActivityTree/useActivityTreeWithRenderer';
|
|
11
|
+
import usePrevious from '../../hooks/internal/usePrevious';
|
|
12
|
+
import useStateRef from '../../hooks/internal/useStateRef';
|
|
13
|
+
import useValueRef from '../../hooks/internal/useValueRef';
|
|
14
|
+
|
|
15
|
+
import type { TranscriptFocusContextType } from './private/Context';
|
|
16
|
+
|
|
17
|
+
const { useGetKeyByActivity } = hooks;
|
|
18
|
+
|
|
19
|
+
type TranscriptFocusComposerProps = {
|
|
20
|
+
containerRef: MutableRefObject<HTMLElement>;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
function last<T>(array: ArrayLike<T>) {
|
|
24
|
+
return array[array.length - 1];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function uniqueId(count = Infinity) {
|
|
28
|
+
return (
|
|
29
|
+
random()
|
|
30
|
+
// eslint-disable-next-line no-magic-numbers
|
|
31
|
+
.toString(36)
|
|
32
|
+
// eslint-disable-next-line no-magic-numbers
|
|
33
|
+
.substring(2, 2 + count)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const TranscriptFocusComposer: FC<TranscriptFocusComposerProps> = ({ children, containerRef }) => {
|
|
38
|
+
const [flattenedActivityTree] = useActivityTreeWithRenderer({ flat: true });
|
|
39
|
+
const [_, setRawFocusedActivityKey, rawFocusedActivityKeyRef] = useStateRef<string | undefined>();
|
|
40
|
+
const getKeyByActivity = useGetKeyByActivity();
|
|
41
|
+
|
|
42
|
+
// As we need to use IDREF for `aria-activedescendant`,
|
|
43
|
+
// this prefix will differentiate multiple instances of transcript on the same page.
|
|
44
|
+
// eslint-disable-next-line no-magic-numbers
|
|
45
|
+
const prefix = useMemo<string>(() => uniqueId(3), []);
|
|
46
|
+
|
|
47
|
+
const getDescendantIdByActivityKey: (activityKey?: string) => string | undefined = useCallback(
|
|
48
|
+
(activityKey?: string) => activityKey && `webchat__transcript-focus-${prefix}__activity-${activityKey}`,
|
|
49
|
+
[prefix]
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const renderingActivityKeys = useMemo<readonly string[]>(
|
|
53
|
+
() => Object.freeze(flattenedActivityTree.map(({ activity }) => getKeyByActivity(activity))),
|
|
54
|
+
[flattenedActivityTree, getKeyByActivity]
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const renderingActivityKeysRef = useValueRef<readonly string[]>(renderingActivityKeys);
|
|
58
|
+
|
|
59
|
+
// While the transcript or any descendants are not focused, if the transcript is updated, reset the user-selected active descendant.
|
|
60
|
+
// This will assume the last activity, if any, will be the active descendant.
|
|
61
|
+
const prevRenderingActivityKeys = usePrevious(renderingActivityKeys);
|
|
62
|
+
|
|
63
|
+
if (renderingActivityKeys !== prevRenderingActivityKeys && !containerRef.current?.contains(document.activeElement)) {
|
|
64
|
+
rawFocusedActivityKeyRef.current = undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const { current: rawFocusedActivityKey } = rawFocusedActivityKeyRef;
|
|
68
|
+
|
|
69
|
+
const focusedActivityKey = useMemo<string>(
|
|
70
|
+
() => (renderingActivityKeys.includes(rawFocusedActivityKey) ? rawFocusedActivityKey : last(renderingActivityKeys)),
|
|
71
|
+
[renderingActivityKeys, rawFocusedActivityKey]
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const focusedActivityKeyRef = useValueRef(focusedActivityKey);
|
|
75
|
+
|
|
76
|
+
const activeDescendantId = useMemo<string>(
|
|
77
|
+
() => getDescendantIdByActivityKey(focusedActivityKey),
|
|
78
|
+
[getDescendantIdByActivityKey, focusedActivityKey]
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const focusByActivityKey = useCallback<
|
|
82
|
+
(activityKey: boolean | string | undefined, withFocus: boolean | undefined) => void
|
|
83
|
+
>(
|
|
84
|
+
(activityKey: boolean | string | undefined, withFocus: boolean | undefined = true) => {
|
|
85
|
+
if (activityKey === false) {
|
|
86
|
+
// `false` means set it to nothing.
|
|
87
|
+
setRawFocusedActivityKey(undefined);
|
|
88
|
+
} else if (activityKey === true) {
|
|
89
|
+
// `true` means set to something if it is not set.
|
|
90
|
+
setRawFocusedActivityKey(key => key || focusedActivityKeyRef.current);
|
|
91
|
+
} else if (activityKey) {
|
|
92
|
+
setRawFocusedActivityKey(activityKey);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (withFocus) {
|
|
96
|
+
containerRef.current?.focus();
|
|
97
|
+
|
|
98
|
+
const activeDescendantId = getDescendantIdByActivityKey(
|
|
99
|
+
activityKey === false
|
|
100
|
+
? // If "activityKey" is false, it means "focus nothing and reset it to the last activity".
|
|
101
|
+
last(renderingActivityKeysRef.current)
|
|
102
|
+
: activityKey && activityKey !== true
|
|
103
|
+
? // If "activity" is not "undefined" and not "true", it means "focus on this activity".
|
|
104
|
+
activityKey
|
|
105
|
+
: // If "activityKey" is "undefined", it means "don't modify the focus".
|
|
106
|
+
// If "activityKey" is "true", it means "try to focus on anything".
|
|
107
|
+
rawFocusedActivityKeyRef.current
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const activeDescendantElement = activeDescendantId && document.getElementById(activeDescendantId);
|
|
111
|
+
|
|
112
|
+
// Don't scroll active descendant into view if the focus is already inside it.
|
|
113
|
+
// Otherwise, given the focus is on the send box, clicking on any <input> inside the Adaptive Cards may cause the view to move.
|
|
114
|
+
// This UX is not desirable because click should not cause scroll.
|
|
115
|
+
if (activeDescendantElement && !activeDescendantElement.contains(document.activeElement)) {
|
|
116
|
+
scrollIntoViewWithBlockNearest(activeDescendantElement);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
[
|
|
121
|
+
getDescendantIdByActivityKey,
|
|
122
|
+
containerRef,
|
|
123
|
+
focusedActivityKeyRef,
|
|
124
|
+
renderingActivityKeysRef,
|
|
125
|
+
rawFocusedActivityKeyRef,
|
|
126
|
+
setRawFocusedActivityKey
|
|
127
|
+
]
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const focusRelativeActivity = useCallback(
|
|
131
|
+
(delta: number) => {
|
|
132
|
+
const { current: orderedActivityKeys } = renderingActivityKeysRef;
|
|
133
|
+
|
|
134
|
+
if (isNaN(delta) || !orderedActivityKeys.length) {
|
|
135
|
+
return focusByActivityKey(false, true);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const { current: focusedActivityKey } = focusedActivityKeyRef;
|
|
139
|
+
|
|
140
|
+
const index = orderedActivityKeys.indexOf(focusedActivityKey);
|
|
141
|
+
const nextIndex = ~index
|
|
142
|
+
? Math.max(0, Math.min(orderedActivityKeys.length - 1, index + delta))
|
|
143
|
+
: orderedActivityKeys.length - 1;
|
|
144
|
+
|
|
145
|
+
focusByActivityKey(orderedActivityKeys[+nextIndex], true);
|
|
146
|
+
},
|
|
147
|
+
[focusedActivityKeyRef, renderingActivityKeysRef, focusByActivityKey]
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
const contextValue = useMemo<TranscriptFocusContextType>(
|
|
151
|
+
() => ({
|
|
152
|
+
activeDescendantIdState: Object.freeze([activeDescendantId]) as readonly [string],
|
|
153
|
+
getDescendantIdByActivityKey,
|
|
154
|
+
focusByActivityKey,
|
|
155
|
+
focusedActivityKeyState: Object.freeze([focusedActivityKey]) as readonly [string],
|
|
156
|
+
focusedExplicitlyState: Object.freeze([!!rawFocusedActivityKey]) as readonly [boolean],
|
|
157
|
+
focusRelativeActivity
|
|
158
|
+
}),
|
|
159
|
+
[
|
|
160
|
+
activeDescendantId,
|
|
161
|
+
getDescendantIdByActivityKey,
|
|
162
|
+
focusByActivityKey,
|
|
163
|
+
focusedActivityKey,
|
|
164
|
+
focusRelativeActivity,
|
|
165
|
+
rawFocusedActivityKey
|
|
166
|
+
]
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
return <TranscriptFocusContext.Provider value={contextValue}>{children}</TranscriptFocusContext.Provider>;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
TranscriptFocusComposer.propTypes = {
|
|
173
|
+
// PropTypes is not fully compatible with TypeScript.
|
|
174
|
+
// @ts-ignore
|
|
175
|
+
containerRef: PropTypes.shape({
|
|
176
|
+
current: PropTypes.instanceOf(HTMLElement)
|
|
177
|
+
}).isRequired
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export default TranscriptFocusComposer;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
type TranscriptFocusContextType = {
|
|
4
|
+
activeDescendantIdState: readonly [string];
|
|
5
|
+
focusByActivityKey: (activityKey: boolean | string | undefined, withFocus: boolean | undefined) => void;
|
|
6
|
+
focusedActivityKeyState: readonly [string];
|
|
7
|
+
focusedExplicitlyState: readonly [boolean];
|
|
8
|
+
focusRelativeActivity: (delta: number) => void;
|
|
9
|
+
getDescendantIdByActivityKey: (activityKey?: string) => string | undefined;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const TranscriptFocusContext = createContext<TranscriptFocusContextType>(undefined);
|
|
13
|
+
|
|
14
|
+
export default TranscriptFocusContext;
|
|
15
|
+
|
|
16
|
+
export type { TranscriptFocusContextType };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
import TranscriptFocusContext from './Context';
|
|
4
|
+
|
|
5
|
+
export default function useTranscriptFocusContext(throwOnUndefined = true) {
|
|
6
|
+
const contextValue = useContext(TranscriptFocusContext);
|
|
7
|
+
|
|
8
|
+
if (throwOnUndefined && !contextValue) {
|
|
9
|
+
throw new Error('botframework-webchat internal: This hook can only be used under <TranscriptFocusComposer>.');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return contextValue;
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import useTranscriptFocusContext from './private/useContext';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Put the focus on an activity based on its activity key.
|
|
5
|
+
*
|
|
6
|
+
* @param {boolean | string | undefined} activityKey - The activity key to focus on, `false` to reset focus to most recent activity, `true` to focus on anything, `undefined` for not changing the focus.
|
|
7
|
+
* @param {boolean} withFocus - `true` if the user agent focus should be sent to the transcript, otherwise, `false`.
|
|
8
|
+
*/
|
|
9
|
+
export default function useFocusByActivityKey(): (
|
|
10
|
+
activityKey: boolean | string | undefined,
|
|
11
|
+
withFocus?: boolean
|
|
12
|
+
) => void {
|
|
13
|
+
return useTranscriptFocusContext().focusByActivityKey;
|
|
14
|
+
}
|
package/.eslintignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/src/tsconfig.json
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = createDefaultGroupActivityMiddleware;
|
|
7
|
-
|
|
8
|
-
var _botframeworkWebchatCore = require("botframework-webchat-core");
|
|
9
|
-
|
|
10
|
-
var SENT = _botframeworkWebchatCore.Constants.ActivityClientState.SENT;
|
|
11
|
-
|
|
12
|
-
function bin(items, grouping) {
|
|
13
|
-
var lastBin;
|
|
14
|
-
var bins = [];
|
|
15
|
-
var lastItem;
|
|
16
|
-
items.forEach(function (item) {
|
|
17
|
-
if (lastItem && grouping(lastItem, item)) {
|
|
18
|
-
lastBin.push(item);
|
|
19
|
-
} else {
|
|
20
|
-
lastBin = [item];
|
|
21
|
-
bins.push(lastBin);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
lastItem = item;
|
|
25
|
-
});
|
|
26
|
-
return bins;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function sending(activity) {
|
|
30
|
-
return activity.from.role === 'user' && activity.channelData && activity.channelData.state !== SENT;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function shouldGroupTimestamp(activityX, activityY, groupTimestamp) {
|
|
34
|
-
if (groupTimestamp === false) {
|
|
35
|
-
// Hide timestamp for all activities.
|
|
36
|
-
return true;
|
|
37
|
-
} else if (activityX && activityY) {
|
|
38
|
-
if (sending(activityX) !== sending(activityY)) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
groupTimestamp = typeof groupTimestamp === 'number' ? groupTimestamp : Infinity;
|
|
43
|
-
var timeX = new Date(activityX.timestamp).getTime();
|
|
44
|
-
var timeY = new Date(activityY.timestamp).getTime();
|
|
45
|
-
return Math.abs(timeX - timeY) <= groupTimestamp;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function createDefaultGroupActivityMiddleware(_ref) {
|
|
52
|
-
var groupTimestamp = _ref.groupTimestamp;
|
|
53
|
-
return function () {
|
|
54
|
-
return function () {
|
|
55
|
-
return function (_ref2) {
|
|
56
|
-
var activities = _ref2.activities;
|
|
57
|
-
return {
|
|
58
|
-
sender: bin(activities, function (x, y) {
|
|
59
|
-
return x.from.role === y.from.role;
|
|
60
|
-
}),
|
|
61
|
-
status: bin(activities, function (x, y) {
|
|
62
|
-
return shouldGroupTimestamp(x, y, groupTimestamp);
|
|
63
|
-
})
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9NaWRkbGV3YXJlL0dyb3VwQWN0aXZpdGllcy9jcmVhdGVDb3JlTWlkZGxld2FyZS5qcyJdLCJuYW1lcyI6WyJTRU5UIiwiQ29uc3RhbnRzIiwiQWN0aXZpdHlDbGllbnRTdGF0ZSIsImJpbiIsIml0ZW1zIiwiZ3JvdXBpbmciLCJsYXN0QmluIiwiYmlucyIsImxhc3RJdGVtIiwiZm9yRWFjaCIsIml0ZW0iLCJwdXNoIiwic2VuZGluZyIsImFjdGl2aXR5IiwiZnJvbSIsInJvbGUiLCJjaGFubmVsRGF0YSIsInN0YXRlIiwic2hvdWxkR3JvdXBUaW1lc3RhbXAiLCJhY3Rpdml0eVgiLCJhY3Rpdml0eVkiLCJncm91cFRpbWVzdGFtcCIsIkluZmluaXR5IiwidGltZVgiLCJEYXRlIiwidGltZXN0YW1wIiwiZ2V0VGltZSIsInRpbWVZIiwiTWF0aCIsImFicyIsImNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXR5TWlkZGxld2FyZSIsImFjdGl2aXRpZXMiLCJzZW5kZXIiLCJ4IiwieSIsInN0YXR1cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBLElBQ3lCQSxJQUR6QixHQUVJQyxrQ0FGSixDQUNFQyxtQkFERixDQUN5QkYsSUFEekI7O0FBSUEsU0FBU0csR0FBVCxDQUFhQyxLQUFiLEVBQW9CQyxRQUFwQixFQUE4QjtBQUM1QixNQUFJQyxPQUFKO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEVBQWI7QUFDQSxNQUFJQyxRQUFKO0FBRUFKLEVBQUFBLEtBQUssQ0FBQ0ssT0FBTixDQUFjLFVBQUFDLElBQUksRUFBSTtBQUNwQixRQUFJRixRQUFRLElBQUlILFFBQVEsQ0FBQ0csUUFBRCxFQUFXRSxJQUFYLENBQXhCLEVBQTBDO0FBQ3hDSixNQUFBQSxPQUFPLENBQUNLLElBQVIsQ0FBYUQsSUFBYjtBQUNELEtBRkQsTUFFTztBQUNMSixNQUFBQSxPQUFPLEdBQUcsQ0FBQ0ksSUFBRCxDQUFWO0FBQ0FILE1BQUFBLElBQUksQ0FBQ0ksSUFBTCxDQUFVTCxPQUFWO0FBQ0Q7O0FBRURFLElBQUFBLFFBQVEsR0FBR0UsSUFBWDtBQUNELEdBVEQ7QUFXQSxTQUFPSCxJQUFQO0FBQ0Q7O0FBRUQsU0FBU0ssT0FBVCxDQUFpQkMsUUFBakIsRUFBMkI7QUFDekIsU0FBT0EsUUFBUSxDQUFDQyxJQUFULENBQWNDLElBQWQsS0FBdUIsTUFBdkIsSUFBaUNGLFFBQVEsQ0FBQ0csV0FBMUMsSUFBeURILFFBQVEsQ0FBQ0csV0FBVCxDQUFxQkMsS0FBckIsS0FBK0JqQixJQUEvRjtBQUNEOztBQUVELFNBQVNrQixvQkFBVCxDQUE4QkMsU0FBOUIsRUFBeUNDLFNBQXpDLEVBQW9EQyxjQUFwRCxFQUFvRTtBQUNsRSxNQUFJQSxjQUFjLEtBQUssS0FBdkIsRUFBOEI7QUFDNUI7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhELE1BR08sSUFBSUYsU0FBUyxJQUFJQyxTQUFqQixFQUE0QjtBQUNqQyxRQUFJUixPQUFPLENBQUNPLFNBQUQsQ0FBUCxLQUF1QlAsT0FBTyxDQUFDUSxTQUFELENBQWxDLEVBQStDO0FBQzdDLGFBQU8sS0FBUDtBQUNEOztBQUVEQyxJQUFBQSxjQUFjLEdBQUcsT0FBT0EsY0FBUCxLQUEwQixRQUExQixHQUFxQ0EsY0FBckMsR0FBc0RDLFFBQXZFO0FBRUEsUUFBTUMsS0FBSyxHQUFHLElBQUlDLElBQUosQ0FBU0wsU0FBUyxDQUFDTSxTQUFuQixFQUE4QkMsT0FBOUIsRUFBZDtBQUNBLFFBQU1DLEtBQUssR0FBRyxJQUFJSCxJQUFKLENBQVNKLFNBQVMsQ0FBQ0ssU0FBbkIsRUFBOEJDLE9BQTlCLEVBQWQ7QUFFQSxXQUFPRSxJQUFJLENBQUNDLEdBQUwsQ0FBU04sS0FBSyxHQUFHSSxLQUFqQixLQUEyQk4sY0FBbEM7QUFDRDs7QUFFRCxTQUFPLEtBQVA7QUFDRDs7QUFFYyxTQUFTUyxvQ0FBVCxPQUFrRTtBQUFBLE1BQWxCVCxjQUFrQixRQUFsQkEsY0FBa0I7QUFDL0UsU0FBTztBQUFBLFdBQ0w7QUFBQSxhQUNBO0FBQUEsWUFBR1UsVUFBSCxTQUFHQSxVQUFIO0FBQUEsZUFBcUI7QUFDbkJDLFVBQUFBLE1BQU0sRUFBRTdCLEdBQUcsQ0FBQzRCLFVBQUQsRUFBYSxVQUFDRSxDQUFELEVBQUlDLENBQUo7QUFBQSxtQkFBVUQsQ0FBQyxDQUFDbkIsSUFBRixDQUFPQyxJQUFQLEtBQWdCbUIsQ0FBQyxDQUFDcEIsSUFBRixDQUFPQyxJQUFqQztBQUFBLFdBQWIsQ0FEUTtBQUVuQm9CLFVBQUFBLE1BQU0sRUFBRWhDLEdBQUcsQ0FBQzRCLFVBQUQsRUFBYSxVQUFDRSxDQUFELEVBQUlDLENBQUo7QUFBQSxtQkFBVWhCLG9CQUFvQixDQUFDZSxDQUFELEVBQUlDLENBQUosRUFBT2IsY0FBUCxDQUE5QjtBQUFBLFdBQWI7QUFGUSxTQUFyQjtBQUFBLE9BREE7QUFBQSxLQURLO0FBQUEsR0FBUDtBQU1EIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcblxuY29uc3Qge1xuICBBY3Rpdml0eUNsaWVudFN0YXRlOiB7IFNFTlQgfVxufSA9IENvbnN0YW50cztcblxuZnVuY3Rpb24gYmluKGl0ZW1zLCBncm91cGluZykge1xuICBsZXQgbGFzdEJpbjtcbiAgY29uc3QgYmlucyA9IFtdO1xuICBsZXQgbGFzdEl0ZW07XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpZiAobGFzdEl0ZW0gJiYgZ3JvdXBpbmcobGFzdEl0ZW0sIGl0ZW0pKSB7XG4gICAgICBsYXN0QmluLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCaW4gPSBbaXRlbV07XG4gICAgICBiaW5zLnB1c2gobGFzdEJpbik7XG4gICAgfVxuXG4gICAgbGFzdEl0ZW0gPSBpdGVtO1xuICB9KTtcblxuICByZXR1cm4gYmlucztcbn1cblxuZnVuY3Rpb24gc2VuZGluZyhhY3Rpdml0eSkge1xuICByZXR1cm4gYWN0aXZpdHkuZnJvbS5yb2xlID09PSAndXNlcicgJiYgYWN0aXZpdHkuY2hhbm5lbERhdGEgJiYgYWN0aXZpdHkuY2hhbm5lbERhdGEuc3RhdGUgIT09IFNFTlQ7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEdyb3VwVGltZXN0YW1wKGFjdGl2aXR5WCwgYWN0aXZpdHlZLCBncm91cFRpbWVzdGFtcCkge1xuICBpZiAoZ3JvdXBUaW1lc3RhbXAgPT09IGZhbHNlKSB7XG4gICAgLy8gSGlkZSB0aW1lc3RhbXAgZm9yIGFsbCBhY3Rpdml0aWVzLlxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGFjdGl2aXR5WCAmJiBhY3Rpdml0eVkpIHtcbiAgICBpZiAoc2VuZGluZyhhY3Rpdml0eVgpICE9PSBzZW5kaW5nKGFjdGl2aXR5WSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBncm91cFRpbWVzdGFtcCA9IHR5cGVvZiBncm91cFRpbWVzdGFtcCA9PT0gJ251bWJlcicgPyBncm91cFRpbWVzdGFtcCA6IEluZmluaXR5O1xuXG4gICAgY29uc3QgdGltZVggPSBuZXcgRGF0ZShhY3Rpdml0eVgudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdGltZVkgPSBuZXcgRGF0ZShhY3Rpdml0eVkudGltZXN0YW1wKS5nZXRUaW1lKCk7XG5cbiAgICByZXR1cm4gTWF0aC5hYnModGltZVggLSB0aW1lWSkgPD0gZ3JvdXBUaW1lc3RhbXA7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXR5TWlkZGxld2FyZSh7IGdyb3VwVGltZXN0YW1wIH0pIHtcbiAgcmV0dXJuICgpID0+XG4gICAgKCkgPT5cbiAgICAoeyBhY3Rpdml0aWVzIH0pID0+ICh7XG4gICAgICBzZW5kZXI6IGJpbihhY3Rpdml0aWVzLCAoeCwgeSkgPT4geC5mcm9tLnJvbGUgPT09IHkuZnJvbS5yb2xlKSxcbiAgICAgIHN0YXR1czogYmluKGFjdGl2aXRpZXMsICh4LCB5KSA9PiBzaG91bGRHcm91cFRpbWVzdGFtcCh4LCB5LCBncm91cFRpbWVzdGFtcCkpXG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = findLastIndex;
|
|
7
|
-
|
|
8
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
|
-
|
|
10
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
-
|
|
12
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
-
|
|
14
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
15
|
-
|
|
16
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
17
|
-
|
|
18
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
19
|
-
|
|
20
|
-
function findLastIndex(array, predicate) {
|
|
21
|
-
var index = _toConsumableArray(array).reverse().findIndex(predicate);
|
|
22
|
-
|
|
23
|
-
if (~index) {
|
|
24
|
-
var _ref = array || [],
|
|
25
|
-
length = _ref.length;
|
|
26
|
-
|
|
27
|
-
return length - index - 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return index;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9VdGlscy9maW5kTGFzdEluZGV4LmpzIl0sIm5hbWVzIjpbImZpbmRMYXN0SW5kZXgiLCJhcnJheSIsInByZWRpY2F0ZSIsImluZGV4IiwicmV2ZXJzZSIsImZpbmRJbmRleCIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFlLFNBQVNBLGFBQVQsQ0FBdUJDLEtBQXZCLEVBQThCQyxTQUE5QixFQUF5QztBQUN0RCxNQUFNQyxLQUFLLEdBQUcsbUJBQUlGLEtBQUosRUFBV0csT0FBWCxHQUFxQkMsU0FBckIsQ0FBK0JILFNBQS9CLENBQWQ7O0FBRUEsTUFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVixlQUFtQkYsS0FBSyxJQUFJLEVBQTVCO0FBQUEsUUFBUUssTUFBUixRQUFRQSxNQUFSOztBQUVBLFdBQU9BLE1BQU0sR0FBR0gsS0FBVCxHQUFpQixDQUF4QjtBQUNEOztBQUVELFNBQU9BLEtBQVA7QUFDRCIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGNvbnN0IGluZGV4ID0gWy4uLmFycmF5XS5yZXZlcnNlKCkuZmluZEluZGV4KHByZWRpY2F0ZSk7XG5cbiAgaWYgKH5pbmRleCkge1xuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBhcnJheSB8fCBbXTtcblxuICAgIHJldHVybiBsZW5ndGggLSBpbmRleCAtIDE7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG4iXX0=
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = useAcknowledgedActivity;
|
|
7
|
-
|
|
8
|
-
var _botframeworkWebchatApi = require("botframework-webchat-api");
|
|
9
|
-
|
|
10
|
-
var _react = require("react");
|
|
11
|
-
|
|
12
|
-
var _reactScrollToBottom = require("react-scroll-to-bottom");
|
|
13
|
-
|
|
14
|
-
var _findLastIndex = _interopRequireDefault(require("../../Utils/findLastIndex"));
|
|
15
|
-
|
|
16
|
-
var _getActivityUniqueId = _interopRequireDefault(require("../../Utils/getActivityUniqueId"));
|
|
17
|
-
|
|
18
|
-
var _useChanged = _interopRequireDefault(require("./useChanged"));
|
|
19
|
-
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
23
|
-
|
|
24
|
-
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."); }
|
|
25
|
-
|
|
26
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
27
|
-
|
|
28
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
29
|
-
|
|
30
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
31
|
-
|
|
32
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
33
|
-
|
|
34
|
-
var useActivities = _botframeworkWebchatApi.hooks.useActivities; // Acknowledged means either:
|
|
35
|
-
// 1. The user sent a message
|
|
36
|
-
// - We don't need a condition here. When Web Chat sends the user's message, it will scroll to bottom, and it will trigger condition 2 below.
|
|
37
|
-
// 2. The user scroll to the bottom of the transcript, from a non-bottom scroll position
|
|
38
|
-
// - If the transcript is already at the bottom, the user needs to scroll up and then go back down
|
|
39
|
-
// - What happens if we are relaxing "scrolled from a non-bottom scroll position":
|
|
40
|
-
// 1. The condition will become solely "at the bottom of the transcript"
|
|
41
|
-
// 2. Auto-scroll will always scroll the transcript to the bottom
|
|
42
|
-
// 3. Web Chat will always acknowledge all activities as it is at the bottom
|
|
43
|
-
// 4. Acknowledge flag become useless
|
|
44
|
-
// 5. Therefore, even the developer set "pause after 3 activities", if activities are coming in at a slow pace (not batched in a single render)
|
|
45
|
-
// Web Chat will keep scrolling and not snapped/paused
|
|
46
|
-
// Note: When Web Chat is loaded, there are no activities acknowledged. We need to assume all arriving activities are acknowledged until end-user sends their first activity.
|
|
47
|
-
// Activities loaded initially could be from conversation history. Without assuming acknowledgement, Web Chat will not scroll initially (as everything is not acknowledged).
|
|
48
|
-
// It would be better if the chat adapter should let Web Chat know if the activity is loaded from history or not.
|
|
49
|
-
// TODO: [P2] #3670 Move the "conversation history acknowledgement" logic mentioned above to polyfill of chat adapters.
|
|
50
|
-
// 1. Chat adapter should send "acknowledged" as part of "channelData"
|
|
51
|
-
// 2. If "acknowledged" is "undefined", we set it to:
|
|
52
|
-
// a. true, if there are no egress activities yet
|
|
53
|
-
// b. Otherwise, false
|
|
54
|
-
|
|
55
|
-
function useAcknowledgedActivity() {
|
|
56
|
-
var _useActivities = useActivities(),
|
|
57
|
-
_useActivities2 = _slicedToArray(_useActivities, 1),
|
|
58
|
-
activities = _useActivities2[0];
|
|
59
|
-
|
|
60
|
-
var _useSticky = (0, _reactScrollToBottom.useSticky)(),
|
|
61
|
-
_useSticky2 = _slicedToArray(_useSticky, 1),
|
|
62
|
-
sticky = _useSticky2[0];
|
|
63
|
-
|
|
64
|
-
var lastStickyActivityIDRef = (0, _react.useRef)();
|
|
65
|
-
var stickyChanged = (0, _useChanged.default)(sticky);
|
|
66
|
-
var stickyChangedToSticky = stickyChanged && sticky;
|
|
67
|
-
var lastStickyActivityID = (0, _react.useMemo)(function () {
|
|
68
|
-
if (stickyChangedToSticky) {
|
|
69
|
-
lastStickyActivityIDRef.current = (0, _getActivityUniqueId.default)(activities[activities.length - 1] || {});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return lastStickyActivityIDRef.current;
|
|
73
|
-
}, [activities, lastStickyActivityIDRef, stickyChangedToSticky]);
|
|
74
|
-
return (0, _react.useMemo)(function () {
|
|
75
|
-
var lastStickyActivityIndex = activities.findIndex(function (activity) {
|
|
76
|
-
return (0, _getActivityUniqueId.default)(activity) === lastStickyActivityID;
|
|
77
|
-
});
|
|
78
|
-
var lastEgressActivityIndex = (0, _findLastIndex.default)(activities, function (_ref) {
|
|
79
|
-
var _ref$from = _ref.from;
|
|
80
|
-
_ref$from = _ref$from === void 0 ? {} : _ref$from;
|
|
81
|
-
var role = _ref$from.role;
|
|
82
|
-
return role === 'user';
|
|
83
|
-
}); // As described above, if no activities were acknowledged through egress activity, we will assume everything is acknowledged.
|
|
84
|
-
|
|
85
|
-
var lastAcknowledgedActivityIndex = !~lastEgressActivityIndex ? activities.length - 1 : Math.max(lastStickyActivityIndex, lastEgressActivityIndex);
|
|
86
|
-
var lastAcknowledgedActivity = activities[lastAcknowledgedActivityIndex];
|
|
87
|
-
return [lastAcknowledgedActivity];
|
|
88
|
-
}, [activities, lastStickyActivityID]);
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VBY2tub3dsZWRnZWRBY3Rpdml0eS5qcyJdLCJuYW1lcyI6WyJ1c2VBY3Rpdml0aWVzIiwiaG9va3MiLCJ1c2VBY2tub3dsZWRnZWRBY3Rpdml0eSIsImFjdGl2aXRpZXMiLCJzdGlja3kiLCJsYXN0U3RpY2t5QWN0aXZpdHlJRFJlZiIsInN0aWNreUNoYW5nZWQiLCJzdGlja3lDaGFuZ2VkVG9TdGlja3kiLCJsYXN0U3RpY2t5QWN0aXZpdHlJRCIsImN1cnJlbnQiLCJsZW5ndGgiLCJsYXN0U3RpY2t5QWN0aXZpdHlJbmRleCIsImZpbmRJbmRleCIsImFjdGl2aXR5IiwibGFzdEVncmVzc0FjdGl2aXR5SW5kZXgiLCJmcm9tIiwicm9sZSIsImxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUluZGV4IiwiTWF0aCIsIm1heCIsImxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBUUEsYUFBUixHQUEwQkMsNkJBQTFCLENBQVFELGFBQVIsQyxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ2UsU0FBU0UsdUJBQVQsR0FBbUM7QUFDaEQsdUJBQXFCRixhQUFhLEVBQWxDO0FBQUE7QUFBQSxNQUFPRyxVQUFQOztBQUNBLG1CQUFpQixxQ0FBakI7QUFBQTtBQUFBLE1BQU9DLE1BQVA7O0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsb0JBQWhDO0FBRUEsTUFBTUMsYUFBYSxHQUFHLHlCQUFXRixNQUFYLENBQXRCO0FBQ0EsTUFBTUcscUJBQXFCLEdBQUdELGFBQWEsSUFBSUYsTUFBL0M7QUFFQSxNQUFNSSxvQkFBb0IsR0FBRyxvQkFBUSxZQUFNO0FBQ3pDLFFBQUlELHFCQUFKLEVBQTJCO0FBQ3pCRixNQUFBQSx1QkFBdUIsQ0FBQ0ksT0FBeEIsR0FBa0Msa0NBQW9CTixVQUFVLENBQUNBLFVBQVUsQ0FBQ08sTUFBWCxHQUFvQixDQUFyQixDQUFWLElBQXFDLEVBQXpELENBQWxDO0FBQ0Q7O0FBRUQsV0FBT0wsdUJBQXVCLENBQUNJLE9BQS9CO0FBQ0QsR0FONEIsRUFNMUIsQ0FBQ04sVUFBRCxFQUFhRSx1QkFBYixFQUFzQ0UscUJBQXRDLENBTjBCLENBQTdCO0FBUUEsU0FBTyxvQkFBUSxZQUFNO0FBQ25CLFFBQU1JLHVCQUF1QixHQUFHUixVQUFVLENBQUNTLFNBQVgsQ0FDOUIsVUFBQUMsUUFBUTtBQUFBLGFBQUksa0NBQW9CQSxRQUFwQixNQUFrQ0wsb0JBQXRDO0FBQUEsS0FEc0IsQ0FBaEM7QUFJQSxRQUFNTSx1QkFBdUIsR0FBRyw0QkFBY1gsVUFBZCxFQUEwQjtBQUFBLDJCQUFHWSxJQUFIO0FBQUEseUNBQW9CLEVBQXBCO0FBQUEsVUFBV0MsSUFBWCxhQUFXQSxJQUFYO0FBQUEsYUFBNkJBLElBQUksS0FBSyxNQUF0QztBQUFBLEtBQTFCLENBQWhDLENBTG1CLENBT25COztBQUNBLFFBQU1DLDZCQUE2QixHQUFHLENBQUMsQ0FBQ0gsdUJBQUYsR0FDbENYLFVBQVUsQ0FBQ08sTUFBWCxHQUFvQixDQURjLEdBRWxDUSxJQUFJLENBQUNDLEdBQUwsQ0FBU1IsdUJBQVQsRUFBa0NHLHVCQUFsQyxDQUZKO0FBSUEsUUFBTU0sd0JBQXdCLEdBQUdqQixVQUFVLENBQUNjLDZCQUFELENBQTNDO0FBRUEsV0FBTyxDQUFDRyx3QkFBRCxDQUFQO0FBQ0QsR0FmTSxFQWVKLENBQUNqQixVQUFELEVBQWFLLG9CQUFiLENBZkksQ0FBUDtBQWdCRCIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3RpY2t5IH0gZnJvbSAncmVhY3Qtc2Nyb2xsLXRvLWJvdHRvbSc7XG5cbmltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4uLy4uL1V0aWxzL2ZpbmRMYXN0SW5kZXgnO1xuaW1wb3J0IGdldEFjdGl2aXR5VW5pcXVlSWQgZnJvbSAnLi4vLi4vVXRpbHMvZ2V0QWN0aXZpdHlVbmlxdWVJZCc7XG5pbXBvcnQgdXNlQ2hhbmdlZCBmcm9tICcuL3VzZUNoYW5nZWQnO1xuXG5jb25zdCB7IHVzZUFjdGl2aXRpZXMgfSA9IGhvb2tzO1xuXG4vLyBBY2tub3dsZWRnZWQgbWVhbnMgZWl0aGVyOlxuLy8gMS4gVGhlIHVzZXIgc2VudCBhIG1lc3NhZ2Vcbi8vICAgIC0gV2UgZG9uJ3QgbmVlZCBhIGNvbmRpdGlvbiBoZXJlLiBXaGVuIFdlYiBDaGF0IHNlbmRzIHRoZSB1c2VyJ3MgbWVzc2FnZSwgaXQgd2lsbCBzY3JvbGwgdG8gYm90dG9tLCBhbmQgaXQgd2lsbCB0cmlnZ2VyIGNvbmRpdGlvbiAyIGJlbG93LlxuLy8gMi4gVGhlIHVzZXIgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHQsIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblxuLy8gICAgLSBJZiB0aGUgdHJhbnNjcmlwdCBpcyBhbHJlYWR5IGF0IHRoZSBib3R0b20sIHRoZSB1c2VyIG5lZWRzIHRvIHNjcm9sbCB1cCBhbmQgdGhlbiBnbyBiYWNrIGRvd25cbi8vICAgIC0gV2hhdCBoYXBwZW5zIGlmIHdlIGFyZSByZWxheGluZyBcInNjcm9sbGVkIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblwiOlxuLy8gICAgICAxLiBUaGUgY29uZGl0aW9uIHdpbGwgYmVjb21lIHNvbGVseSBcImF0IHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHRcIlxuLy8gICAgICAyLiBBdXRvLXNjcm9sbCB3aWxsIGFsd2F5cyBzY3JvbGwgdGhlIHRyYW5zY3JpcHQgdG8gdGhlIGJvdHRvbVxuLy8gICAgICAzLiBXZWIgQ2hhdCB3aWxsIGFsd2F5cyBhY2tub3dsZWRnZSBhbGwgYWN0aXZpdGllcyBhcyBpdCBpcyBhdCB0aGUgYm90dG9tXG4vLyAgICAgIDQuIEFja25vd2xlZGdlIGZsYWcgYmVjb21lIHVzZWxlc3Ncbi8vICAgICAgNS4gVGhlcmVmb3JlLCBldmVuIHRoZSBkZXZlbG9wZXIgc2V0IFwicGF1c2UgYWZ0ZXIgMyBhY3Rpdml0aWVzXCIsIGlmIGFjdGl2aXRpZXMgYXJlIGNvbWluZyBpbiBhdCBhIHNsb3cgcGFjZSAobm90IGJhdGNoZWQgaW4gYSBzaW5nbGUgcmVuZGVyKVxuLy8gICAgICAgICBXZWIgQ2hhdCB3aWxsIGtlZXAgc2Nyb2xsaW5nIGFuZCBub3Qgc25hcHBlZC9wYXVzZWRcblxuLy8gTm90ZTogV2hlbiBXZWIgQ2hhdCBpcyBsb2FkZWQsIHRoZXJlIGFyZSBubyBhY3Rpdml0aWVzIGFja25vd2xlZGdlZC4gV2UgbmVlZCB0byBhc3N1bWUgYWxsIGFycml2aW5nIGFjdGl2aXRpZXMgYXJlIGFja25vd2xlZGdlZCB1bnRpbCBlbmQtdXNlciBzZW5kcyB0aGVpciBmaXJzdCBhY3Rpdml0eS5cbi8vICAgICAgIEFjdGl2aXRpZXMgbG9hZGVkIGluaXRpYWxseSBjb3VsZCBiZSBmcm9tIGNvbnZlcnNhdGlvbiBoaXN0b3J5LiBXaXRob3V0IGFzc3VtaW5nIGFja25vd2xlZGdlbWVudCwgV2ViIENoYXQgd2lsbCBub3Qgc2Nyb2xsIGluaXRpYWxseSAoYXMgZXZlcnl0aGluZyBpcyBub3QgYWNrbm93bGVkZ2VkKS5cbi8vICAgICAgIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGUgY2hhdCBhZGFwdGVyIHNob3VsZCBsZXQgV2ViIENoYXQga25vdyBpZiB0aGUgYWN0aXZpdHkgaXMgbG9hZGVkIGZyb20gaGlzdG9yeSBvciBub3QuXG5cbi8vIFRPRE86IFtQMl0gIzM2NzAgTW92ZSB0aGUgXCJjb252ZXJzYXRpb24gaGlzdG9yeSBhY2tub3dsZWRnZW1lbnRcIiBsb2dpYyBtZW50aW9uZWQgYWJvdmUgdG8gcG9seWZpbGwgb2YgY2hhdCBhZGFwdGVycy5cbi8vICAgICAgIDEuIENoYXQgYWRhcHRlciBzaG91bGQgc2VuZCBcImFja25vd2xlZGdlZFwiIGFzIHBhcnQgb2YgXCJjaGFubmVsRGF0YVwiXG4vLyAgICAgICAyLiBJZiBcImFja25vd2xlZGdlZFwiIGlzIFwidW5kZWZpbmVkXCIsIHdlIHNldCBpdCB0bzpcbi8vICAgICAgICAgIGEuIHRydWUsIGlmIHRoZXJlIGFyZSBubyBlZ3Jlc3MgYWN0aXZpdGllcyB5ZXRcbi8vICAgICAgICAgIGIuIE90aGVyd2lzZSwgZmFsc2VcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFja25vd2xlZGdlZEFjdGl2aXR5KCkge1xuICBjb25zdCBbYWN0aXZpdGllc10gPSB1c2VBY3Rpdml0aWVzKCk7XG4gIGNvbnN0IFtzdGlja3ldID0gdXNlU3RpY2t5KCk7XG4gIGNvbnN0IGxhc3RTdGlja3lBY3Rpdml0eUlEUmVmID0gdXNlUmVmKCk7XG5cbiAgY29uc3Qgc3RpY2t5Q2hhbmdlZCA9IHVzZUNoYW5nZWQoc3RpY2t5KTtcbiAgY29uc3Qgc3RpY2t5Q2hhbmdlZFRvU3RpY2t5ID0gc3RpY2t5Q2hhbmdlZCAmJiBzdGlja3k7XG5cbiAgY29uc3QgbGFzdFN0aWNreUFjdGl2aXR5SUQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoc3RpY2t5Q2hhbmdlZFRvU3RpY2t5KSB7XG4gICAgICBsYXN0U3RpY2t5QWN0aXZpdHlJRFJlZi5jdXJyZW50ID0gZ2V0QWN0aXZpdHlVbmlxdWVJZChhY3Rpdml0aWVzW2FjdGl2aXRpZXMubGVuZ3RoIC0gMV0gfHwge30pO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0U3RpY2t5QWN0aXZpdHlJRFJlZi5jdXJyZW50O1xuICB9LCBbYWN0aXZpdGllcywgbGFzdFN0aWNreUFjdGl2aXR5SURSZWYsIHN0aWNreUNoYW5nZWRUb1N0aWNreV0pO1xuXG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBsYXN0U3RpY2t5QWN0aXZpdHlJbmRleCA9IGFjdGl2aXRpZXMuZmluZEluZGV4KFxuICAgICAgYWN0aXZpdHkgPT4gZ2V0QWN0aXZpdHlVbmlxdWVJZChhY3Rpdml0eSkgPT09IGxhc3RTdGlja3lBY3Rpdml0eUlEXG4gICAgKTtcblxuICAgIGNvbnN0IGxhc3RFZ3Jlc3NBY3Rpdml0eUluZGV4ID0gZmluZExhc3RJbmRleChhY3Rpdml0aWVzLCAoeyBmcm9tOiB7IHJvbGUgfSA9IHt9IH0pID0+IHJvbGUgPT09ICd1c2VyJyk7XG5cbiAgICAvLyBBcyBkZXNjcmliZWQgYWJvdmUsIGlmIG5vIGFjdGl2aXRpZXMgd2VyZSBhY2tub3dsZWRnZWQgdGhyb3VnaCBlZ3Jlc3MgYWN0aXZpdHksIHdlIHdpbGwgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgYWNrbm93bGVkZ2VkLlxuICAgIGNvbnN0IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUluZGV4ID0gIX5sYXN0RWdyZXNzQWN0aXZpdHlJbmRleFxuICAgICAgPyBhY3Rpdml0aWVzLmxlbmd0aCAtIDFcbiAgICAgIDogTWF0aC5tYXgobGFzdFN0aWNreUFjdGl2aXR5SW5kZXgsIGxhc3RFZ3Jlc3NBY3Rpdml0eUluZGV4KTtcblxuICAgIGNvbnN0IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eSA9IGFjdGl2aXRpZXNbbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5SW5kZXhdO1xuXG4gICAgcmV0dXJuIFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHldO1xuICB9LCBbYWN0aXZpdGllcywgbGFzdFN0aWNreUFjdGl2aXR5SURdKTtcbn1cbiJdfQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = useDispatchTranscriptFocus;
|
|
7
|
-
|
|
8
|
-
var _useWebChatUIContext2 = _interopRequireDefault(require("./useWebChatUIContext"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
function useDispatchTranscriptFocus() {
|
|
13
|
-
var _useWebChatUIContext = (0, _useWebChatUIContext2.default)(),
|
|
14
|
-
dispatchTranscriptFocus = _useWebChatUIContext.dispatchTranscriptFocus,
|
|
15
|
-
numTranscriptFocusObservers = _useWebChatUIContext.numTranscriptFocusObservers;
|
|
16
|
-
|
|
17
|
-
return numTranscriptFocusObservers ? dispatchTranscriptFocus : undefined;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VEaXNwYXRjaFRyYW5zY3JpcHRGb2N1cy5qcyJdLCJuYW1lcyI6WyJ1c2VEaXNwYXRjaFRyYW5zY3JpcHRGb2N1cyIsImRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzIiwibnVtVHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFFZSxTQUFTQSwwQkFBVCxHQUFzQztBQUNuRCw2QkFBaUUsb0NBQWpFO0FBQUEsTUFBUUMsdUJBQVIsd0JBQVFBLHVCQUFSO0FBQUEsTUFBaUNDLDJCQUFqQyx3QkFBaUNBLDJCQUFqQzs7QUFFQSxTQUFPQSwyQkFBMkIsR0FBR0QsdUJBQUgsR0FBNkJFLFNBQS9EO0FBQ0QiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1c2VXZWJDaGF0VUlDb250ZXh0IGZyb20gJy4vdXNlV2ViQ2hhdFVJQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzKCkge1xuICBjb25zdCB7IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzLCBudW1UcmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnMgfSA9IHVzZVdlYkNoYXRVSUNvbnRleHQoKTtcblxuICByZXR1cm4gbnVtVHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzID8gZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXMgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|