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.
Files changed (411) hide show
  1. package/.eslintrc.yml +4 -106
  2. package/.prettierrc.yml +1 -1
  3. package/lib/Activity/CarouselFilmStrip.js +1 -1
  4. package/lib/Activity/CarouselFilmStripAttachment.js +1 -1
  5. package/lib/Activity/CarouselLayout.js +3 -3
  6. package/lib/Activity/Speak.d.ts +2 -2
  7. package/lib/Activity/Speak.d.ts.map +1 -1
  8. package/lib/Activity/Speak.js +15 -8
  9. package/lib/Activity/StackedLayout.d.ts +5 -3
  10. package/lib/Activity/StackedLayout.d.ts.map +1 -1
  11. package/lib/Activity/StackedLayout.js +16 -21
  12. package/lib/Attachment/FileAttachment.js +2 -2
  13. package/lib/Attachment/FileContent.d.ts.map +1 -1
  14. package/lib/Attachment/FileContent.js +11 -1
  15. package/lib/BasicSendBox.d.ts.map +1 -1
  16. package/lib/BasicSendBox.js +8 -9
  17. package/lib/BasicToast.js +1 -1
  18. package/lib/BasicToaster.js +6 -3
  19. package/lib/BasicTranscript.d.ts +7 -0
  20. package/lib/BasicTranscript.d.ts.map +1 -0
  21. package/lib/BasicTranscript.js +386 -728
  22. package/lib/BasicTypingIndicator.d.ts +2 -1
  23. package/lib/BasicTypingIndicator.d.ts.map +1 -1
  24. package/lib/BasicTypingIndicator.js +12 -4
  25. package/lib/Composer.d.ts.map +1 -1
  26. package/lib/Composer.js +37 -32
  27. package/lib/ConnectivityStatus/Connecting.js +1 -1
  28. package/lib/Dictation.js +1 -1
  29. package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -1
  30. package/lib/Middleware/Activity/createCoreMiddleware.js +9 -12
  31. package/lib/Middleware/ActivityStatus/SendStatus/SendFailedRetry.js +1 -1
  32. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts +2 -2
  33. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -1
  34. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.js +5 -4
  35. package/lib/Middleware/ActivityStatus/Timestamp.d.ts +2 -2
  36. package/lib/Middleware/ActivityStatus/Timestamp.d.ts.map +1 -1
  37. package/lib/Middleware/ActivityStatus/Timestamp.js +4 -2
  38. package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +20 -17
  39. package/lib/Middleware/Attachment/createCoreMiddleware.js +2 -5
  40. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +1 -1
  41. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +1 -1
  42. package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +1 -1
  43. package/lib/Middleware/Avatar/createCoreMiddleware.js +2 -3
  44. package/lib/Middleware/CardAction/createCoreMiddleware.js +10 -3
  45. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +1 -1
  46. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +1 -1
  47. package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +1 -1
  48. package/lib/Middleware/Toast/createCoreMiddleware.js +1 -1
  49. package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +1 -1
  50. package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +8 -6
  51. package/lib/ReactWebChat.js +2 -2
  52. package/lib/ScreenReaderActivity.js +15 -6
  53. package/lib/ScreenReaderText.d.ts +9 -0
  54. package/lib/ScreenReaderText.d.ts.map +1 -0
  55. package/lib/ScreenReaderText.js +22 -8
  56. package/lib/SendBox/AutoResizeTextArea.js +1 -1
  57. package/lib/SendBox/DictationInterims.js +1 -1
  58. package/lib/SendBox/IconButton.d.ts +11 -0
  59. package/lib/SendBox/IconButton.d.ts.map +1 -0
  60. package/lib/SendBox/IconButton.js +26 -6
  61. package/lib/SendBox/MicrophoneButton.js +2 -2
  62. package/lib/SendBox/SendButton.js +2 -2
  63. package/lib/SendBox/SuggestedAction.d.ts +17 -0
  64. package/lib/SendBox/SuggestedAction.d.ts.map +1 -0
  65. package/lib/SendBox/SuggestedAction.js +26 -17
  66. package/lib/SendBox/SuggestedActions.d.ts.map +1 -1
  67. package/lib/SendBox/SuggestedActions.js +26 -9
  68. package/lib/SendBox/TextBox.js +4 -4
  69. package/lib/SendBox/UploadButton.js +4 -4
  70. package/lib/Styles/StyleSet/BasicTranscript.d.ts +13 -5
  71. package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +1 -1
  72. package/lib/Styles/StyleSet/BasicTranscript.js +21 -9
  73. package/lib/Styles/StyleSet/Bubble.d.ts.map +1 -1
  74. package/lib/Styles/StyleSet/Bubble.js +3 -3
  75. package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +1 -1
  76. package/lib/Styles/StyleSet/CarouselFilmStrip.js +3 -3
  77. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +1 -1
  78. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +3 -3
  79. package/lib/Styles/StyleSet/KeyboardHelp.d.ts +123 -0
  80. package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +1 -0
  81. package/lib/Styles/StyleSet/KeyboardHelp.js +145 -0
  82. package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +1 -1
  83. package/lib/Styles/StyleSet/ScrollToEndButton.js +2 -2
  84. package/lib/Styles/StyleSet/SendBoxButton.d.ts +56 -10
  85. package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +1 -1
  86. package/lib/Styles/StyleSet/SendBoxButton.js +76 -12
  87. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +1 -1
  88. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +1 -1
  89. package/lib/Styles/StyleSet/SendBoxTextBox.js +3 -3
  90. package/lib/Styles/StyleSet/StackedLayout.d.ts.map +1 -1
  91. package/lib/Styles/StyleSet/StackedLayout.js +1 -1
  92. package/lib/Styles/StyleSet/SuggestedAction.d.ts +73 -28
  93. package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +1 -1
  94. package/lib/Styles/StyleSet/SuggestedAction.js +116 -41
  95. package/lib/Styles/StyleSet/SuggestedActions.d.ts +13 -6
  96. package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +1 -1
  97. package/lib/Styles/StyleSet/SuggestedActions.js +13 -6
  98. package/lib/Styles/createStyleSet.d.ts +324 -55
  99. package/lib/Styles/createStyleSet.d.ts.map +1 -1
  100. package/lib/Styles/createStyleSet.js +6 -3
  101. package/lib/Styles/mirrorStyle.js +12 -3
  102. package/lib/Toast/NotificationIcon.js +7 -3
  103. package/lib/Toast/createToastMiddleware.d.ts.map +1 -1
  104. package/lib/Toast/createToastMiddleware.js +1 -1
  105. package/lib/Transcript/ActivityRow.d.ts +9 -0
  106. package/lib/Transcript/ActivityRow.d.ts.map +1 -0
  107. package/lib/Transcript/ActivityRow.js +159 -0
  108. package/lib/Transcript/ActivityTextAlt.js +57 -0
  109. package/lib/Transcript/FocusTrap.d.ts +8 -0
  110. package/lib/Transcript/FocusTrap.d.ts.map +1 -0
  111. package/lib/Transcript/FocusTrap.js +74 -0
  112. package/lib/Transcript/KeyboardHelp.d.ts +4 -0
  113. package/lib/Transcript/KeyboardHelp.d.ts.map +1 -0
  114. package/lib/Transcript/KeyboardHelp.js +550 -0
  115. package/lib/Transcript/LiveRegionTranscript.d.ts +8 -0
  116. package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -0
  117. package/lib/Transcript/LiveRegionTranscript.js +229 -0
  118. package/lib/Transcript/types.d.ts +2 -0
  119. package/lib/Transcript/types.d.ts.map +1 -0
  120. package/lib/Transcript/types.js +2 -0
  121. package/lib/Transcript/useActivityAccessibleName.d.ts +4 -0
  122. package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -0
  123. package/lib/Transcript/useActivityAccessibleName.js +97 -0
  124. package/lib/Transcript/useTypistNames.d.ts +3 -0
  125. package/lib/Transcript/useTypistNames.d.ts.map +1 -0
  126. package/lib/Transcript/useTypistNames.js +61 -0
  127. package/lib/Utils/AccessKeySink/Surface.js +1 -1
  128. package/lib/Utils/AccessibleButton.d.ts +11 -0
  129. package/lib/Utils/AccessibleButton.d.ts.map +1 -0
  130. package/lib/Utils/AccessibleButton.js +12 -7
  131. package/lib/Utils/AccessibleInputText.js +1 -1
  132. package/lib/Utils/AccessibleTextArea.js +1 -1
  133. package/lib/Utils/CroppedImage.js +1 -1
  134. package/lib/Utils/FocusRedirector.d.ts +9 -0
  135. package/lib/Utils/FocusRedirector.d.ts.map +1 -0
  136. package/lib/Utils/FocusRedirector.js +17 -14
  137. package/lib/Utils/InlineMarkdown.js +15 -8
  138. package/lib/Utils/TypeFocusSink/FocusBox.js +1 -1
  139. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +2 -0
  140. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +1 -0
  141. package/lib/Utils/TypeFocusSink/inputtableKey.js +5 -2
  142. package/lib/Utils/activityAltText.d.ts +8 -0
  143. package/lib/Utils/activityAltText.d.ts.map +1 -0
  144. package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +2 -2
  145. package/lib/Utils/createCustomEvent.js +8 -2
  146. package/lib/Utils/detectBrowser.js +4 -2
  147. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +1 -1
  148. package/lib/Utils/downscaleImageToDataURL/index.js +1 -1
  149. package/lib/Utils/findAncestor.js +17 -0
  150. package/lib/Utils/getActivityUniqueId.js +4 -2
  151. package/lib/Utils/intersectionOf.d.ts +5 -0
  152. package/lib/Utils/intersectionOf.d.ts.map +1 -0
  153. package/lib/Utils/intersectionOf.js +17 -2
  154. package/lib/Utils/isZeroOrPositive.d.ts +5 -0
  155. package/lib/Utils/isZeroOrPositive.d.ts.map +1 -0
  156. package/lib/Utils/isZeroOrPositive.js +4 -1
  157. package/lib/Utils/mapMap.js +9 -2
  158. package/lib/Utils/readDataURIToBlob.js +1 -1
  159. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +7 -0
  160. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +1 -0
  161. package/lib/Utils/scrollIntoViewWithBlockNearest.js +48 -0
  162. package/lib/Utils/shallowEquals.js +7 -3
  163. package/lib/Utils/supportPseudoClass.d.ts +2 -0
  164. package/lib/Utils/supportPseudoClass.d.ts.map +1 -0
  165. package/lib/Utils/supportPseudoClass.js +23 -0
  166. package/lib/Utils/tabbableElements.d.ts +2 -0
  167. package/lib/Utils/tabbableElements.d.ts.map +1 -0
  168. package/lib/Utils/tabbableElements.js +2 -2
  169. package/lib/connectToWebChat.js +15 -7
  170. package/lib/hooks/index.js +24 -24
  171. package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +8 -7
  172. package/lib/hooks/internal/useChanged.js +8 -1
  173. package/lib/hooks/internal/useDispatchScrollPosition.js +3 -7
  174. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +2 -0
  175. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +1 -0
  176. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +15 -0
  177. package/lib/hooks/internal/useFocusVisible.d.ts +3 -0
  178. package/lib/hooks/internal/useFocusVisible.d.ts.map +1 -0
  179. package/lib/hooks/internal/useFocusVisible.js +48 -0
  180. package/lib/hooks/internal/useMemoWithPrevious.d.ts +3 -0
  181. package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +1 -0
  182. package/lib/hooks/internal/useMemoWithPrevious.js +22 -0
  183. package/lib/hooks/internal/useMemoize.d.ts +14 -0
  184. package/lib/hooks/internal/useMemoize.d.ts.map +1 -0
  185. package/lib/hooks/internal/useMemoize.js +11 -2
  186. package/lib/hooks/internal/useObserveFocusVisible.d.ts +3 -0
  187. package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +1 -0
  188. package/lib/hooks/internal/useObserveFocusVisible.js +208 -0
  189. package/lib/hooks/internal/usePrevious.d.ts +2 -0
  190. package/lib/hooks/internal/usePrevious.d.ts.map +1 -0
  191. package/lib/hooks/internal/usePrevious.js +18 -0
  192. package/lib/hooks/internal/useStateRef.d.ts +3 -0
  193. package/lib/hooks/internal/useStateRef.d.ts.map +1 -0
  194. package/lib/hooks/internal/useStateRef.js +40 -0
  195. package/lib/hooks/internal/useValueRef.d.ts +3 -0
  196. package/lib/hooks/internal/useValueRef.d.ts.map +1 -0
  197. package/lib/hooks/internal/useValueRef.js +25 -0
  198. package/lib/hooks/useFocus.d.ts +1 -1
  199. package/lib/hooks/useFocus.d.ts.map +1 -1
  200. package/lib/hooks/useFocus.js +1 -1
  201. package/lib/hooks/useObserveTranscriptFocus.d.ts +2 -2
  202. package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -1
  203. package/lib/hooks/useObserveTranscriptFocus.js +1 -1
  204. package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +1 -1
  205. package/lib/hooks/useRenderMarkdownAsHTML.js +1 -1
  206. package/lib/hooks/useScrollTo.d.ts.map +1 -1
  207. package/lib/hooks/useScrollTo.js +1 -1
  208. package/lib/hooks/useScrollToEnd.d.ts.map +1 -1
  209. package/lib/hooks/useScrollToEnd.js +1 -1
  210. package/lib/hooks/useSendFiles.d.ts.map +1 -1
  211. package/lib/hooks/useSendFiles.js +4 -4
  212. package/lib/index.d.ts +13 -3
  213. package/lib/index.d.ts.map +1 -1
  214. package/lib/index.js +20 -18
  215. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +5 -0
  216. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -0
  217. package/lib/providers/ActivityTree/ActivityTreeComposer.js +86 -0
  218. package/lib/providers/ActivityTree/private/Context.d.ts +9 -0
  219. package/lib/providers/ActivityTree/private/Context.d.ts.map +1 -0
  220. package/lib/providers/ActivityTree/private/Context.js +13 -0
  221. package/lib/providers/ActivityTree/private/types.d.ts +10 -0
  222. package/lib/providers/ActivityTree/private/types.d.ts.map +1 -0
  223. package/lib/providers/ActivityTree/private/types.js +2 -0
  224. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +4 -0
  225. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -0
  226. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +58 -0
  227. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +5 -0
  228. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -0
  229. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +166 -0
  230. package/lib/providers/ActivityTree/private/useContext.d.ts +3 -0
  231. package/lib/providers/ActivityTree/private/useContext.d.ts.map +1 -0
  232. package/lib/providers/ActivityTree/private/useContext.js +24 -0
  233. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +8 -0
  234. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +1 -0
  235. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +17 -0
  236. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +37 -0
  237. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -0
  238. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +160 -0
  239. package/lib/providers/LiveRegionTwin/private/Context.d.ts +10 -0
  240. package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +1 -0
  241. package/lib/providers/LiveRegionTwin/private/Context.js +13 -0
  242. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +12 -0
  243. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -0
  244. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +100 -0
  245. package/lib/providers/LiveRegionTwin/private/types.d.ts +8 -0
  246. package/lib/providers/LiveRegionTwin/private/types.d.ts.map +1 -0
  247. package/lib/providers/LiveRegionTwin/private/types.js +2 -0
  248. package/lib/providers/LiveRegionTwin/private/useContext.d.ts +3 -0
  249. package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +1 -0
  250. package/lib/providers/LiveRegionTwin/private/useContext.js +24 -0
  251. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +2 -0
  252. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +1 -0
  253. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +24 -0
  254. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +3 -0
  255. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +1 -0
  256. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +15 -0
  257. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +8 -0
  258. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +1 -0
  259. package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +20 -0
  260. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +7 -0
  261. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +1 -0
  262. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +184 -0
  263. package/lib/providers/TranscriptFocus/private/Context.d.ts +12 -0
  264. package/lib/providers/TranscriptFocus/private/Context.d.ts.map +1 -0
  265. package/lib/providers/TranscriptFocus/private/Context.js +13 -0
  266. package/lib/providers/TranscriptFocus/private/useContext.d.ts +2 -0
  267. package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +1 -0
  268. package/lib/providers/TranscriptFocus/private/useContext.js +24 -0
  269. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +2 -0
  270. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +1 -0
  271. package/lib/providers/TranscriptFocus/useActiveDescendantId.js +15 -0
  272. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +8 -0
  273. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +1 -0
  274. package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +21 -0
  275. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +2 -0
  276. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +1 -0
  277. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +15 -0
  278. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +2 -0
  279. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +1 -0
  280. package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +15 -0
  281. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +2 -0
  282. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +1 -0
  283. package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +15 -0
  284. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +2 -0
  285. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +1 -0
  286. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +15 -0
  287. package/package.json +30 -33
  288. package/src/Activity/CarouselFilmStripAttachment.js +0 -1
  289. package/src/Activity/Speak.tsx +21 -18
  290. package/src/Activity/StackedLayout.tsx +30 -35
  291. package/src/Attachment/FileAttachment.js +1 -1
  292. package/src/Attachment/FileContent.tsx +12 -0
  293. package/src/BasicSendBox.tsx +3 -2
  294. package/src/BasicToaster.js +5 -1
  295. package/src/BasicTranscript.tsx +894 -0
  296. package/src/BasicTypingIndicator.tsx +3 -2
  297. package/src/Composer.tsx +41 -29
  298. package/src/Middleware/Activity/createCoreMiddleware.tsx +47 -46
  299. package/src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx +5 -3
  300. package/src/Middleware/ActivityStatus/Timestamp.tsx +5 -3
  301. package/src/Middleware/ActivityStatus/createSendStatusMiddleware.js +2 -0
  302. package/src/Middleware/Attachment/createCoreMiddleware.tsx +28 -28
  303. package/src/Middleware/AttachmentForScreenReader/createCoreMiddleware.tsx +25 -23
  304. package/src/Middleware/Avatar/createCoreMiddleware.tsx +9 -8
  305. package/src/Middleware/CardAction/createCoreMiddleware.js +9 -2
  306. package/src/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.ts +11 -9
  307. package/src/Middleware/Toast/createCoreMiddleware.tsx +12 -10
  308. package/src/Middleware/TypingIndicator/createCoreMiddleware.tsx +8 -2
  309. package/src/ScreenReaderActivity.js +18 -3
  310. package/src/{ScreenReaderText.js → ScreenReaderText.tsx} +27 -9
  311. package/src/SendBox/{IconButton.js → IconButton.tsx} +19 -3
  312. package/src/SendBox/{SuggestedAction.js → SuggestedAction.tsx} +72 -35
  313. package/src/SendBox/SuggestedActions.tsx +48 -21
  314. package/src/Styles/StyleSet/BasicTranscript.ts +34 -20
  315. package/src/Styles/StyleSet/Bubble.ts +0 -1
  316. package/src/Styles/StyleSet/CarouselFilmStrip.ts +12 -10
  317. package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +4 -3
  318. package/src/Styles/StyleSet/KeyboardHelp.ts +157 -0
  319. package/src/Styles/StyleSet/ScrollToEndButton.ts +1 -1
  320. package/src/Styles/StyleSet/SendBoxButton.ts +84 -13
  321. package/src/Styles/StyleSet/SendBoxTextBox.ts +1 -2
  322. package/src/Styles/StyleSet/StackedLayout.ts +13 -11
  323. package/src/Styles/StyleSet/SuggestedAction.ts +129 -42
  324. package/src/Styles/StyleSet/SuggestedActions.ts +13 -5
  325. package/src/Styles/createStyleSet.ts +2 -1
  326. package/src/Styles/mirrorStyle.js +10 -2
  327. package/src/Toast/NotificationIcon.js +4 -1
  328. package/src/Toast/createToastMiddleware.tsx +4 -1
  329. package/src/Transcript/ActivityRow.tsx +123 -0
  330. package/src/Transcript/ActivityTextAlt.tsx +31 -0
  331. package/src/Transcript/FocusTrap.tsx +64 -0
  332. package/src/Transcript/KeyboardHelp.tsx +282 -0
  333. package/src/Transcript/LiveRegionTranscript.tsx +196 -0
  334. package/src/Transcript/types.ts +1 -0
  335. package/src/Transcript/useActivityAccessibleName.ts +84 -0
  336. package/src/Transcript/useTypistNames.ts +37 -0
  337. package/src/Utils/{AccessibleButton.js → AccessibleButton.tsx} +19 -4
  338. package/src/Utils/{FocusRedirector.js → FocusRedirector.tsx} +21 -8
  339. package/src/Utils/InlineMarkdown.js +18 -2
  340. package/src/Utils/TypeFocusSink/inputtableKey.ts +5 -1
  341. package/src/Utils/createCustomEvent.js +7 -1
  342. package/src/Utils/detectBrowser.js +2 -1
  343. package/src/Utils/findAncestor.ts +12 -0
  344. package/src/Utils/getActivityUniqueId.ts +5 -0
  345. package/src/Utils/intersectionOf.ts +14 -0
  346. package/src/Utils/isZeroOrPositive.ts +7 -0
  347. package/src/Utils/mapMap.js +7 -1
  348. package/src/Utils/scrollIntoViewWithBlockNearest.ts +20 -0
  349. package/src/Utils/shallowEquals.js +8 -1
  350. package/src/Utils/supportPseudoClass.ts +17 -0
  351. package/src/Utils/{tabbableElements.js → tabbableElements.ts} +6 -5
  352. package/src/connectToWebChat.js +11 -4
  353. package/src/hooks/internal/BypassSpeechSynthesisPonyfill.js +3 -1
  354. package/src/hooks/internal/useChanged.ts +17 -0
  355. package/src/hooks/internal/useDispatchScrollPosition.js +1 -3
  356. package/src/hooks/internal/useDispatchTranscriptFocusByActivityKey.ts +5 -0
  357. package/src/hooks/internal/useFocusVisible.ts +22 -0
  358. package/src/hooks/internal/useMemoWithPrevious.ts +16 -0
  359. package/src/hooks/internal/useMemoize.spec.js +1 -1
  360. package/src/hooks/internal/useMemoize.ts +53 -0
  361. package/src/hooks/internal/useObserveFocusVisible.ts +252 -0
  362. package/src/hooks/internal/usePrevious.ts +12 -0
  363. package/src/hooks/internal/useStateRef.ts +31 -0
  364. package/src/hooks/internal/useValueRef.ts +22 -0
  365. package/src/hooks/useFocus.ts +1 -1
  366. package/src/hooks/useObserveTranscriptFocus.ts +2 -2
  367. package/src/hooks/useRenderMarkdownAsHTML.ts +4 -5
  368. package/src/hooks/useScrollTo.ts +4 -3
  369. package/src/hooks/useScrollToEnd.ts +4 -3
  370. package/src/hooks/useSendFiles.ts +7 -5
  371. package/src/index.ts +0 -1
  372. package/src/providers/ActivityTree/ActivityTreeComposer.tsx +74 -0
  373. package/src/providers/ActivityTree/private/Context.ts +12 -0
  374. package/src/providers/ActivityTree/private/types.ts +12 -0
  375. package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +64 -0
  376. package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +135 -0
  377. package/src/providers/ActivityTree/private/useContext.ts +15 -0
  378. package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +16 -0
  379. package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +161 -0
  380. package/src/providers/LiveRegionTwin/private/Context.ts +15 -0
  381. package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +80 -0
  382. package/src/providers/LiveRegionTwin/private/types.ts +10 -0
  383. package/src/providers/LiveRegionTwin/private/useContext.ts +15 -0
  384. package/src/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.ts +13 -0
  385. package/src/providers/LiveRegionTwin/private/useStaticElementEntries.ts +7 -0
  386. package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +12 -0
  387. package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +180 -0
  388. package/src/providers/TranscriptFocus/private/Context.ts +16 -0
  389. package/src/providers/TranscriptFocus/private/useContext.ts +13 -0
  390. package/src/providers/TranscriptFocus/useActiveDescendantId.ts +5 -0
  391. package/src/providers/TranscriptFocus/useFocusByActivityKey.ts +14 -0
  392. package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +5 -0
  393. package/src/providers/TranscriptFocus/useFocusedActivityKey.ts +5 -0
  394. package/src/providers/TranscriptFocus/useFocusedExplicitly.ts +5 -0
  395. package/src/providers/TranscriptFocus/useGetDescendantIdByActivityKey.ts +5 -0
  396. package/.eslintignore +0 -1
  397. package/lib/Middleware/GroupActivities/createCoreMiddleware.js +0 -69
  398. package/lib/Utils/findLastIndex.js +0 -32
  399. package/lib/hooks/internal/useAcknowledgedActivity.js +0 -90
  400. package/lib/hooks/internal/useDispatchTranscriptFocus.js +0 -19
  401. package/src/BasicTranscript.js +0 -1139
  402. package/src/Middleware/GroupActivities/createCoreMiddleware.js +0 -57
  403. package/src/Utils/findLastIndex.js +0 -11
  404. package/src/Utils/findLastIndex.spec.js +0 -31
  405. package/src/Utils/getActivityUniqueId.js +0 -3
  406. package/src/Utils/intersectionOf.js +0 -11
  407. package/src/Utils/isZeroOrPositive.js +0 -4
  408. package/src/hooks/internal/useAcknowledgedActivity.js +0 -65
  409. package/src/hooks/internal/useChanged.js +0 -10
  410. package/src/hooks/internal/useDispatchTranscriptFocus.js +0 -7
  411. 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,5 @@
1
+ import useTranscriptFocusContext from './private/useContext';
2
+
3
+ export default function useActiveDescendantId(): readonly [string] {
4
+ return useTranscriptFocusContext().activeDescendantIdState;
5
+ }
@@ -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
+ }
@@ -0,0 +1,5 @@
1
+ import useTranscriptFocusContext from './private/useContext';
2
+
3
+ export default function useFocusByActivityKey(): (delta: number) => void {
4
+ return useTranscriptFocusContext().focusRelativeActivity;
5
+ }
@@ -0,0 +1,5 @@
1
+ import useTranscriptFocusContext from './private/useContext';
2
+
3
+ export default function useFocusedActivityKey(): readonly [string] {
4
+ return useTranscriptFocusContext().focusedActivityKeyState;
5
+ }
@@ -0,0 +1,5 @@
1
+ import useTranscriptFocusContext from './private/useContext';
2
+
3
+ export default function useFocusedExplicitly(): readonly [boolean] {
4
+ return useTranscriptFocusContext().focusedExplicitlyState;
5
+ }
@@ -0,0 +1,5 @@
1
+ import useTranscriptFocusContext from './private/useContext';
2
+
3
+ export default function useGetDescendantIdByActivityKey(): (activityKey?: string) => string | undefined {
4
+ return useTranscriptFocusContext().getDescendantIdByActivityKey;
5
+ }
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=