botframework-webchat-component 4.13.0 → 4.15.0

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 (698) hide show
  1. package/.eslintrc.yml +4 -100
  2. package/.prettierrc.yml +1 -1
  3. package/lib/Activity/Avatar.d.ts +10 -0
  4. package/lib/Activity/Avatar.d.ts.map +1 -0
  5. package/lib/Activity/Avatar.js +2 -1
  6. package/lib/Activity/Bubble.d.ts +11 -0
  7. package/lib/Activity/Bubble.d.ts.map +1 -0
  8. package/lib/Activity/Bubble.js +2 -2
  9. package/lib/Activity/CarouselFilmStrip.js +21 -31
  10. package/lib/Activity/CarouselFilmStripAttachment.js +120 -0
  11. package/lib/Activity/CarouselLayout.js +5 -5
  12. package/lib/Activity/Speak.d.ts +10 -0
  13. package/lib/Activity/Speak.d.ts.map +1 -0
  14. package/lib/Activity/Speak.js +11 -13
  15. package/lib/Activity/StackedLayout.d.ts +18 -0
  16. package/lib/Activity/StackedLayout.d.ts.map +1 -0
  17. package/lib/Activity/StackedLayout.js +19 -15
  18. package/lib/Assets/TypingAnimation.js +2 -2
  19. package/lib/Attachment/Assets/DownloadIcon.js +3 -1
  20. package/lib/Attachment/AudioAttachment.js +2 -2
  21. package/lib/Attachment/AudioContent.d.ts +11 -0
  22. package/lib/Attachment/AudioContent.d.ts.map +1 -0
  23. package/lib/Attachment/AudioContent.js +4 -4
  24. package/lib/Attachment/FileAttachment.js +2 -2
  25. package/lib/Attachment/FileContent.d.ts +10 -0
  26. package/lib/Attachment/FileContent.d.ts.map +1 -0
  27. package/lib/Attachment/FileContent.js +14 -9
  28. package/lib/Attachment/HTMLVideoContent.d.ts +11 -0
  29. package/lib/Attachment/HTMLVideoContent.d.ts.map +1 -0
  30. package/lib/Attachment/HTMLVideoContent.js +2 -2
  31. package/lib/Attachment/ImageContent.d.ts +8 -0
  32. package/lib/Attachment/ImageContent.d.ts.map +1 -0
  33. package/lib/Attachment/ImageContent.js +2 -2
  34. package/lib/Attachment/TextContent.d.ts +8 -0
  35. package/lib/Attachment/TextContent.d.ts.map +1 -0
  36. package/lib/Attachment/TextContent.js +4 -4
  37. package/lib/Attachment/VideoAttachment.js +2 -2
  38. package/lib/Attachment/VideoContent.d.ts +11 -0
  39. package/lib/Attachment/VideoContent.d.ts.map +1 -0
  40. package/lib/Attachment/VideoContent.js +1 -1
  41. package/lib/Attachment/VimeoContent.d.ts +10 -0
  42. package/lib/Attachment/VimeoContent.d.ts.map +1 -0
  43. package/lib/Attachment/VimeoContent.js +8 -8
  44. package/lib/Attachment/YouTubeContent.d.ts +10 -0
  45. package/lib/Attachment/YouTubeContent.d.ts.map +1 -0
  46. package/lib/Attachment/YouTubeContent.js +5 -5
  47. package/lib/Avatar/ImageAvatar.js +2 -2
  48. package/lib/Avatar/InitialsAvatar.js +2 -2
  49. package/lib/BasicConnectivityStatus.js +2 -2
  50. package/lib/BasicSendBox.d.ts +9 -0
  51. package/lib/BasicSendBox.d.ts.map +1 -0
  52. package/lib/BasicSendBox.js +7 -6
  53. package/lib/BasicToast.js +4 -4
  54. package/lib/BasicToaster.js +8 -5
  55. package/lib/BasicTranscript.d.ts +7 -0
  56. package/lib/BasicTranscript.d.ts.map +1 -0
  57. package/lib/BasicTranscript.js +406 -743
  58. package/lib/BasicTypingIndicator.d.ts +6 -0
  59. package/lib/BasicTypingIndicator.d.ts.map +1 -0
  60. package/lib/BasicTypingIndicator.js +13 -5
  61. package/lib/BasicWebChat.d.ts +9 -0
  62. package/lib/BasicWebChat.d.ts.map +1 -0
  63. package/lib/BasicWebChat.js +6 -4
  64. package/lib/Composer.d.ts +23 -0
  65. package/lib/Composer.d.ts.map +1 -0
  66. package/lib/Composer.js +65 -82
  67. package/lib/ConnectivityStatus/Assets/ErrorNotificationIcon.js +2 -2
  68. package/lib/ConnectivityStatus/Assets/SpinnerAnimation.js +2 -2
  69. package/lib/ConnectivityStatus/Assets/WarningNotificationIcon.js +2 -2
  70. package/lib/ConnectivityStatus/Connected.js +1 -1
  71. package/lib/ConnectivityStatus/Connecting.js +4 -4
  72. package/lib/ConnectivityStatus/FailedToConnect.js +2 -2
  73. package/lib/ConnectivityStatus/JavaScriptError.js +2 -2
  74. package/lib/Dictation.js +13 -4
  75. package/lib/ErrorBox.d.ts +8 -0
  76. package/lib/ErrorBox.d.ts.map +1 -0
  77. package/lib/ErrorBox.js +2 -2
  78. package/lib/Middleware/Activity/createCoreMiddleware.d.ts +3 -0
  79. package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -0
  80. package/lib/Middleware/Activity/createCoreMiddleware.js +1 -1
  81. package/lib/Middleware/ActivityStatus/AbsoluteTime.js +1 -1
  82. package/lib/Middleware/ActivityStatus/RelativeTime.js +1 -1
  83. package/lib/Middleware/ActivityStatus/SendStatus/SendFailedRetry.js +3 -3
  84. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts +11 -0
  85. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -0
  86. package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.js +5 -5
  87. package/lib/Middleware/ActivityStatus/Timestamp.d.ts +9 -0
  88. package/lib/Middleware/ActivityStatus/Timestamp.d.ts.map +1 -0
  89. package/lib/Middleware/ActivityStatus/Timestamp.js +2 -2
  90. package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts +3 -0
  91. package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts.map +1 -0
  92. package/lib/Middleware/ActivityStatus/createCoreMiddleware.js +1 -1
  93. package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +21 -16
  94. package/lib/Middleware/ActivityStatus/createTimestampMiddleware.js +1 -1
  95. package/lib/Middleware/Attachment/createCoreMiddleware.d.ts +3 -0
  96. package/lib/Middleware/Attachment/createCoreMiddleware.d.ts.map +1 -0
  97. package/lib/Middleware/Attachment/createCoreMiddleware.js +10 -13
  98. package/lib/Middleware/AttachmentForScreenReader/AudioAttachment.js +1 -1
  99. package/lib/Middleware/AttachmentForScreenReader/FileAttachment.js +1 -1
  100. package/lib/Middleware/AttachmentForScreenReader/ImageAttachment.js +1 -1
  101. package/lib/Middleware/AttachmentForScreenReader/TextAttachment.js +1 -1
  102. package/lib/Middleware/AttachmentForScreenReader/VideoAttachment.js +1 -1
  103. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts +3 -0
  104. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +1 -0
  105. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +9 -5
  106. package/lib/Middleware/Avatar/createCoreMiddleware.d.ts +11 -0
  107. package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +1 -0
  108. package/lib/Middleware/Avatar/createCoreMiddleware.js +3 -4
  109. package/lib/Middleware/CardAction/createCoreMiddleware.js +11 -4
  110. package/lib/Middleware/GroupActivities/createCoreMiddleware.js +1 -1
  111. package/lib/Middleware/ScrollToEndButton/ScrollToEndButton.js +71 -0
  112. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts +3 -0
  113. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +1 -0
  114. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +27 -0
  115. package/lib/Middleware/Toast/createCoreMiddleware.d.ts +4 -0
  116. package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +1 -0
  117. package/lib/Middleware/Toast/createCoreMiddleware.js +1 -1
  118. package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts +3 -0
  119. package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +1 -0
  120. package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +9 -6
  121. package/lib/ReactWebChat.d.ts +10 -0
  122. package/lib/ReactWebChat.d.ts.map +1 -0
  123. package/lib/ReactWebChat.js +19 -7
  124. package/lib/ScreenReaderActivity.js +76 -48
  125. package/lib/ScreenReaderText.d.ts +9 -0
  126. package/lib/ScreenReaderText.d.ts.map +1 -0
  127. package/lib/ScreenReaderText.js +22 -8
  128. package/lib/SendBox/Assets/AttachmentIcon.js +3 -1
  129. package/lib/SendBox/Assets/MicrophoneIcon.js +3 -1
  130. package/lib/SendBox/Assets/SendIcon.js +2 -2
  131. package/lib/SendBox/AutoResizeTextArea.d.ts +23 -0
  132. package/lib/SendBox/AutoResizeTextArea.d.ts.map +1 -0
  133. package/lib/SendBox/AutoResizeTextArea.js +6 -6
  134. package/lib/SendBox/DictationInterims.d.ts +9 -0
  135. package/lib/SendBox/DictationInterims.d.ts.map +1 -0
  136. package/lib/SendBox/DictationInterims.js +3 -3
  137. package/lib/SendBox/IconButton.d.ts +11 -0
  138. package/lib/SendBox/IconButton.d.ts.map +1 -0
  139. package/lib/SendBox/IconButton.js +27 -7
  140. package/lib/SendBox/MicrophoneButton.d.ts +11 -0
  141. package/lib/SendBox/MicrophoneButton.d.ts.map +1 -0
  142. package/lib/SendBox/MicrophoneButton.js +25 -24
  143. package/lib/SendBox/SendButton.d.ts +9 -0
  144. package/lib/SendBox/SendButton.d.ts.map +1 -0
  145. package/lib/SendBox/SendButton.js +8 -6
  146. package/lib/SendBox/SuggestedAction.d.ts +17 -0
  147. package/lib/SendBox/SuggestedAction.d.ts.map +1 -0
  148. package/lib/SendBox/SuggestedAction.js +29 -24
  149. package/lib/SendBox/SuggestedActions.d.ts +5 -0
  150. package/lib/SendBox/SuggestedActions.d.ts.map +1 -0
  151. package/lib/SendBox/SuggestedActions.js +33 -13
  152. package/lib/SendBox/TextBox.d.ts +28 -0
  153. package/lib/SendBox/TextBox.d.ts.map +1 -0
  154. package/lib/SendBox/TextBox.js +13 -8
  155. package/lib/SendBox/UploadButton.d.ts +9 -0
  156. package/lib/SendBox/UploadButton.d.ts.map +1 -0
  157. package/lib/SendBox/UploadButton.js +6 -6
  158. package/lib/Styles/StyleSet/Activities.d.ts +5 -0
  159. package/lib/Styles/StyleSet/Activities.d.ts.map +1 -0
  160. package/lib/Styles/StyleSet/AudioAttachment.d.ts +6 -0
  161. package/lib/Styles/StyleSet/AudioAttachment.d.ts.map +1 -0
  162. package/lib/Styles/StyleSet/AudioContent.d.ts +4 -0
  163. package/lib/Styles/StyleSet/AudioContent.d.ts.map +1 -0
  164. package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts +37 -0
  165. package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts.map +1 -0
  166. package/lib/Styles/StyleSet/Avatar.d.ts +9 -0
  167. package/lib/Styles/StyleSet/Avatar.d.ts.map +1 -0
  168. package/lib/Styles/StyleSet/BasicTranscript.d.ts +85 -0
  169. package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +1 -0
  170. package/lib/Styles/StyleSet/BasicTranscript.js +21 -9
  171. package/lib/Styles/StyleSet/Bubble.d.ts +5 -0
  172. package/lib/Styles/StyleSet/Bubble.d.ts.map +1 -0
  173. package/lib/Styles/StyleSet/Bubble.js +2 -2
  174. package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts +5 -0
  175. package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +1 -0
  176. package/lib/Styles/StyleSet/CarouselFilmStrip.js +2 -18
  177. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts +3 -0
  178. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +1 -0
  179. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +63 -0
  180. package/lib/Styles/StyleSet/CarouselFlipper.d.ts +27 -0
  181. package/lib/Styles/StyleSet/CarouselFlipper.d.ts.map +1 -0
  182. package/lib/Styles/StyleSet/ConnectivityNotification.d.ts +13 -0
  183. package/lib/Styles/StyleSet/ConnectivityNotification.d.ts.map +1 -0
  184. package/lib/Styles/StyleSet/DictationInterims.d.ts +13 -0
  185. package/lib/Styles/StyleSet/DictationInterims.d.ts.map +1 -0
  186. package/lib/Styles/StyleSet/ErrorBox.d.ts +33 -0
  187. package/lib/Styles/StyleSet/ErrorBox.d.ts.map +1 -0
  188. package/lib/Styles/StyleSet/ErrorNotification.d.ts +23 -0
  189. package/lib/Styles/StyleSet/ErrorNotification.d.ts.map +1 -0
  190. package/lib/Styles/StyleSet/FileContent.d.ts +32 -0
  191. package/lib/Styles/StyleSet/FileContent.d.ts.map +1 -0
  192. package/lib/Styles/StyleSet/ImageAvatar.d.ts +7 -0
  193. package/lib/Styles/StyleSet/ImageAvatar.d.ts.map +1 -0
  194. package/lib/Styles/StyleSet/InitialsAvatar.d.ts +19 -0
  195. package/lib/Styles/StyleSet/InitialsAvatar.d.ts.map +1 -0
  196. package/lib/Styles/StyleSet/KeyboardHelp.d.ts +123 -0
  197. package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +1 -0
  198. package/lib/Styles/StyleSet/KeyboardHelp.js +145 -0
  199. package/lib/Styles/StyleSet/MicrophoneButton.d.ts +13 -0
  200. package/lib/Styles/StyleSet/MicrophoneButton.d.ts.map +1 -0
  201. package/lib/Styles/StyleSet/Root.d.ts +8 -0
  202. package/lib/Styles/StyleSet/Root.d.ts.map +1 -0
  203. package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +36 -0
  204. package/lib/Styles/StyleSet/ScrollToEndButton.d.ts.map +1 -0
  205. package/lib/Styles/StyleSet/ScrollToEndButton.js +36 -34
  206. package/lib/Styles/StyleSet/SendBox.d.ts +24 -0
  207. package/lib/Styles/StyleSet/SendBox.d.ts.map +1 -0
  208. package/lib/Styles/StyleSet/SendBoxButton.d.ts +79 -0
  209. package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +1 -0
  210. package/lib/Styles/StyleSet/SendBoxButton.js +76 -12
  211. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +41 -0
  212. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +1 -0
  213. package/lib/Styles/StyleSet/SendBoxTextBox.js +3 -3
  214. package/lib/Styles/StyleSet/SendStatus.d.ts +8 -0
  215. package/lib/Styles/StyleSet/SendStatus.d.ts.map +1 -0
  216. package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts +11 -0
  217. package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts.map +1 -0
  218. package/lib/Styles/StyleSet/SpinnerAnimation.d.ts +15 -0
  219. package/lib/Styles/StyleSet/SpinnerAnimation.d.ts.map +1 -0
  220. package/lib/Styles/StyleSet/StackedLayout.d.ts +63 -0
  221. package/lib/Styles/StyleSet/StackedLayout.d.ts.map +1 -0
  222. package/lib/Styles/StyleSet/StackedLayout.js +1 -1
  223. package/lib/Styles/StyleSet/SuggestedAction.d.ts +94 -0
  224. package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +1 -0
  225. package/lib/Styles/StyleSet/SuggestedAction.js +116 -41
  226. package/lib/Styles/StyleSet/SuggestedActions.d.ts +125 -0
  227. package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +1 -0
  228. package/lib/Styles/StyleSet/SuggestedActions.js +13 -6
  229. package/lib/Styles/StyleSet/TextContent.d.ts +28 -0
  230. package/lib/Styles/StyleSet/TextContent.d.ts.map +1 -0
  231. package/lib/Styles/StyleSet/Toast.d.ts +65 -0
  232. package/lib/Styles/StyleSet/Toast.d.ts.map +1 -0
  233. package/lib/Styles/StyleSet/Toaster.d.ts +111 -0
  234. package/lib/Styles/StyleSet/Toaster.d.ts.map +1 -0
  235. package/lib/Styles/StyleSet/TypingAnimation.d.ts +8 -0
  236. package/lib/Styles/StyleSet/TypingAnimation.d.ts.map +1 -0
  237. package/lib/Styles/StyleSet/TypingIndicator.d.ts +11 -0
  238. package/lib/Styles/StyleSet/TypingIndicator.d.ts.map +1 -0
  239. package/lib/Styles/StyleSet/UploadButton.d.ts +14 -0
  240. package/lib/Styles/StyleSet/UploadButton.d.ts.map +1 -0
  241. package/lib/Styles/StyleSet/VideoAttachment.d.ts +2 -0
  242. package/lib/Styles/StyleSet/VideoAttachment.d.ts.map +1 -0
  243. package/lib/Styles/StyleSet/VideoContent.d.ts +6 -0
  244. package/lib/Styles/StyleSet/VideoContent.d.ts.map +1 -0
  245. package/lib/Styles/StyleSet/VimeoContent.d.ts +7 -0
  246. package/lib/Styles/StyleSet/VimeoContent.d.ts.map +1 -0
  247. package/lib/Styles/StyleSet/WarningNotification.d.ts +22 -0
  248. package/lib/Styles/StyleSet/WarningNotification.d.ts.map +1 -0
  249. package/lib/Styles/StyleSet/YouTubeContent.d.ts +7 -0
  250. package/lib/Styles/StyleSet/YouTubeContent.d.ts.map +1 -0
  251. package/lib/Styles/createStyleSet.d.ts +1372 -0
  252. package/lib/Styles/createStyleSet.d.ts.map +1 -0
  253. package/lib/Styles/createStyleSet.js +47 -41
  254. package/lib/Styles/mirrorStyle.js +13 -4
  255. package/lib/Toast/CollapseIcon.js +3 -1
  256. package/lib/Toast/DismissIcon.js +3 -1
  257. package/lib/Toast/ExpandIcon.js +3 -1
  258. package/lib/Toast/NotificationIcon.js +7 -3
  259. package/lib/Toast/createToastMiddleware.d.ts +4 -0
  260. package/lib/Toast/createToastMiddleware.d.ts.map +1 -0
  261. package/lib/Toast/createToastMiddleware.js +2 -2
  262. package/lib/Transcript/ActivityRow.d.ts +9 -0
  263. package/lib/Transcript/ActivityRow.d.ts.map +1 -0
  264. package/lib/Transcript/ActivityRow.js +157 -0
  265. package/lib/Transcript/ActivityTextAlt.js +57 -0
  266. package/lib/Transcript/FocusTrap.d.ts +8 -0
  267. package/lib/Transcript/FocusTrap.d.ts.map +1 -0
  268. package/lib/Transcript/FocusTrap.js +74 -0
  269. package/lib/Transcript/KeyboardHelp.d.ts +4 -0
  270. package/lib/Transcript/KeyboardHelp.d.ts.map +1 -0
  271. package/lib/Transcript/KeyboardHelp.js +550 -0
  272. package/lib/Transcript/LiveRegionTranscript.d.ts +8 -0
  273. package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -0
  274. package/lib/Transcript/LiveRegionTranscript.js +214 -0
  275. package/lib/Transcript/types.d.ts +2 -0
  276. package/lib/Transcript/types.d.ts.map +1 -0
  277. package/lib/Transcript/types.js +2 -0
  278. package/lib/Transcript/useActivityAccessibleName.d.ts +4 -0
  279. package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -0
  280. package/lib/Transcript/useActivityAccessibleName.js +97 -0
  281. package/lib/Utils/AccessKeySink/Surface.js +7 -5
  282. package/lib/Utils/AccessibleButton.d.ts +11 -0
  283. package/lib/Utils/AccessibleButton.d.ts.map +1 -0
  284. package/lib/Utils/AccessibleButton.js +15 -8
  285. package/lib/Utils/AccessibleInputText.d.ts +21 -0
  286. package/lib/Utils/AccessibleInputText.d.ts.map +1 -0
  287. package/lib/Utils/AccessibleInputText.js +29 -25
  288. package/lib/Utils/AccessibleTextArea.d.ts +20 -0
  289. package/lib/Utils/AccessibleTextArea.d.ts.map +1 -0
  290. package/lib/Utils/AccessibleTextArea.js +35 -24
  291. package/lib/Utils/CroppedImage.js +2 -2
  292. package/lib/Utils/Fade.js +2 -2
  293. package/lib/Utils/FocusRedirector.d.ts +9 -0
  294. package/lib/Utils/FocusRedirector.d.ts.map +1 -0
  295. package/lib/Utils/FocusRedirector.js +18 -15
  296. package/lib/Utils/InlineMarkdown.js +17 -10
  297. package/lib/Utils/TypeFocusSink/FocusBox.js +6 -4
  298. package/lib/Utils/TypeFocusSink/getTabIndex.d.ts +2 -0
  299. package/lib/Utils/TypeFocusSink/getTabIndex.d.ts.map +1 -0
  300. package/lib/Utils/TypeFocusSink/getTabIndex.js +1 -1
  301. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +2 -0
  302. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +1 -0
  303. package/lib/Utils/TypeFocusSink/inputtableKey.js +5 -2
  304. package/lib/Utils/TypeFocusSink/navigableEvent.js +1 -1
  305. package/lib/Utils/activityAltText.d.ts +8 -0
  306. package/lib/Utils/activityAltText.d.ts.map +1 -0
  307. package/lib/Utils/activityAltText.js +100 -0
  308. package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +1 -1
  309. package/lib/Utils/createCustomEvent.js +9 -3
  310. package/lib/Utils/debounce.js +1 -1
  311. package/lib/Utils/detectBrowser.js +4 -2
  312. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +3 -3
  313. package/lib/Utils/downscaleImageToDataURL/index.js +2 -2
  314. package/lib/Utils/filterMap.js +1 -1
  315. package/lib/Utils/findAncestor.js +17 -0
  316. package/lib/Utils/getActivityUniqueId.js +4 -2
  317. package/lib/Utils/intersectionOf.d.ts +5 -0
  318. package/lib/Utils/intersectionOf.d.ts.map +1 -0
  319. package/lib/Utils/intersectionOf.js +17 -2
  320. package/lib/Utils/isZeroOrPositive.d.ts +5 -0
  321. package/lib/Utils/isZeroOrPositive.d.ts.map +1 -0
  322. package/lib/Utils/isZeroOrPositive.js +4 -1
  323. package/lib/Utils/mapMap.js +10 -3
  324. package/lib/Utils/readDataURIToBlob.js +3 -3
  325. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +7 -0
  326. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +1 -0
  327. package/lib/Utils/scrollIntoViewWithBlockNearest.js +48 -0
  328. package/lib/Utils/shallowEquals.js +7 -3
  329. package/lib/Utils/singleToArray.js +1 -1
  330. package/lib/Utils/supportPseudoClass.d.ts +2 -0
  331. package/lib/Utils/supportPseudoClass.d.ts.map +1 -0
  332. package/lib/Utils/supportPseudoClass.js +23 -0
  333. package/lib/Utils/tabbableElements.d.ts +2 -0
  334. package/lib/Utils/tabbableElements.d.ts.map +1 -0
  335. package/lib/Utils/tabbableElements.js +2 -2
  336. package/lib/connectToWebChat.js +17 -7
  337. package/lib/hooks/index.d.ts +21 -0
  338. package/lib/hooks/index.d.ts.map +1 -0
  339. package/lib/hooks/index.js +25 -25
  340. package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +100 -41
  341. package/lib/hooks/internal/UITracker.js +2 -2
  342. package/lib/hooks/internal/useChanged.js +8 -1
  343. package/lib/hooks/internal/useDispatchScrollPosition.js +3 -7
  344. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +2 -0
  345. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +1 -0
  346. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +15 -0
  347. package/lib/hooks/internal/useEnterKeyHint.js +1 -1
  348. package/lib/hooks/internal/useFocusVisible.d.ts +3 -0
  349. package/lib/hooks/internal/useFocusVisible.d.ts.map +1 -0
  350. package/lib/hooks/internal/useFocusVisible.js +48 -0
  351. package/lib/hooks/internal/useForceRender.js +2 -2
  352. package/lib/hooks/internal/useForceRenderAtInterval.js +2 -2
  353. package/lib/hooks/internal/useInternalRenderMarkdownInline.js +1 -1
  354. package/lib/hooks/internal/useLocalizeAccessKey.js +2 -2
  355. package/lib/hooks/internal/useMemoWithPrevious.d.ts +3 -0
  356. package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +1 -0
  357. package/lib/hooks/internal/useMemoWithPrevious.js +22 -0
  358. package/lib/hooks/internal/useMemoize.d.ts +14 -0
  359. package/lib/hooks/internal/useMemoize.d.ts.map +1 -0
  360. package/lib/hooks/internal/useMemoize.js +12 -3
  361. package/lib/hooks/internal/useNavigatorPlatform.js +1 -1
  362. package/lib/hooks/internal/useNonce.js +1 -1
  363. package/lib/hooks/internal/useObserveFocusVisible.d.ts +3 -0
  364. package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +1 -0
  365. package/lib/hooks/internal/useObserveFocusVisible.js +208 -0
  366. package/lib/hooks/internal/usePrevious.d.ts +2 -0
  367. package/lib/hooks/internal/usePrevious.d.ts.map +1 -0
  368. package/lib/hooks/internal/usePrevious.js +18 -0
  369. package/lib/hooks/internal/useRegisterFocusSendBox.js +1 -1
  370. package/lib/hooks/internal/useRegisterFocusTranscript.js +1 -1
  371. package/lib/hooks/internal/useRegisterScrollRelative.js +1 -1
  372. package/lib/hooks/internal/useRegisterScrollTo.js +1 -1
  373. package/lib/hooks/internal/useRegisterScrollToEnd.js +1 -1
  374. package/lib/hooks/internal/useReplaceEmoticon.js +2 -2
  375. package/lib/hooks/internal/useResumeAudioContext.js +33 -0
  376. package/lib/hooks/internal/useScrollRelative.js +1 -1
  377. package/lib/hooks/internal/useSettableDictateAbortable.js +1 -1
  378. package/lib/hooks/internal/useStateRef.d.ts +3 -0
  379. package/lib/hooks/internal/useStateRef.d.ts.map +1 -0
  380. package/lib/hooks/internal/useStateRef.js +40 -0
  381. package/lib/hooks/internal/useSuggestedActionsAccessKey.js +1 -1
  382. package/lib/hooks/internal/useUniqueId.d.ts +2 -0
  383. package/lib/hooks/internal/useUniqueId.d.ts.map +1 -0
  384. package/lib/hooks/internal/useUniqueId.js +1 -1
  385. package/lib/hooks/internal/useValueRef.d.ts +3 -0
  386. package/lib/hooks/internal/useValueRef.d.ts.map +1 -0
  387. package/lib/hooks/internal/useValueRef.js +25 -0
  388. package/lib/hooks/useDictateAbortable.d.ts +2 -0
  389. package/lib/hooks/useDictateAbortable.d.ts.map +1 -0
  390. package/lib/hooks/useDictateAbortable.js +2 -2
  391. package/lib/hooks/useFocus.d.ts +2 -0
  392. package/lib/hooks/useFocus.d.ts.map +1 -0
  393. package/lib/hooks/useFocus.js +1 -1
  394. package/lib/hooks/useFocusSendBox.d.ts +3 -0
  395. package/lib/hooks/useFocusSendBox.d.ts.map +1 -0
  396. package/lib/hooks/useFocusSendBox.js +2 -1
  397. package/lib/hooks/useObserveScrollPosition.d.ts +3 -0
  398. package/lib/hooks/useObserveScrollPosition.d.ts.map +1 -0
  399. package/lib/hooks/useObserveScrollPosition.js +2 -2
  400. package/lib/hooks/useObserveTranscriptFocus.d.ts +5 -0
  401. package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -0
  402. package/lib/hooks/useObserveTranscriptFocus.js +2 -2
  403. package/lib/hooks/useRenderMarkdownAsHTML.d.ts +5 -0
  404. package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +1 -0
  405. package/lib/hooks/useRenderMarkdownAsHTML.js +2 -2
  406. package/lib/hooks/useScrollDown.d.ts +4 -0
  407. package/lib/hooks/useScrollDown.d.ts.map +1 -0
  408. package/lib/hooks/useScrollDown.js +1 -1
  409. package/lib/hooks/useScrollTo.d.ts +5 -0
  410. package/lib/hooks/useScrollTo.d.ts.map +1 -0
  411. package/lib/hooks/useScrollTo.js +1 -1
  412. package/lib/hooks/useScrollToEnd.d.ts +2 -0
  413. package/lib/hooks/useScrollToEnd.d.ts.map +1 -0
  414. package/lib/hooks/useScrollToEnd.js +1 -1
  415. package/lib/hooks/useScrollUp.d.ts +4 -0
  416. package/lib/hooks/useScrollUp.d.ts.map +1 -0
  417. package/lib/hooks/useScrollUp.js +1 -1
  418. package/lib/hooks/useSendFiles.d.ts +2 -0
  419. package/lib/hooks/useSendFiles.d.ts.map +1 -0
  420. package/lib/hooks/useSendFiles.js +3 -3
  421. package/lib/hooks/useStyleSet.d.ts +2 -0
  422. package/lib/hooks/useStyleSet.d.ts.map +1 -0
  423. package/lib/hooks/useStyleSet.js +1 -1
  424. package/lib/hooks/useWebSpeechPonyfill.d.ts +3 -0
  425. package/lib/hooks/useWebSpeechPonyfill.d.ts.map +1 -0
  426. package/lib/hooks/useWebSpeechPonyfill.js +1 -1
  427. package/lib/index.d.ts +219 -22
  428. package/lib/index.d.ts.map +1 -1
  429. package/lib/index.js +22 -20
  430. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +5 -0
  431. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -0
  432. package/lib/providers/ActivityTree/ActivityTreeComposer.js +86 -0
  433. package/lib/providers/ActivityTree/private/Context.d.ts +9 -0
  434. package/lib/providers/ActivityTree/private/Context.d.ts.map +1 -0
  435. package/lib/providers/ActivityTree/private/Context.js +13 -0
  436. package/lib/providers/ActivityTree/private/types.d.ts +10 -0
  437. package/lib/providers/ActivityTree/private/types.d.ts.map +1 -0
  438. package/lib/providers/ActivityTree/private/types.js +2 -0
  439. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +4 -0
  440. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -0
  441. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +58 -0
  442. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +5 -0
  443. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -0
  444. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +166 -0
  445. package/lib/providers/ActivityTree/private/useContext.d.ts +3 -0
  446. package/lib/providers/ActivityTree/private/useContext.d.ts.map +1 -0
  447. package/lib/providers/ActivityTree/private/useContext.js +24 -0
  448. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +8 -0
  449. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +1 -0
  450. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +17 -0
  451. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +35 -0
  452. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -0
  453. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +156 -0
  454. package/lib/providers/LiveRegionTwin/private/Context.d.ts +10 -0
  455. package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +1 -0
  456. package/lib/providers/LiveRegionTwin/private/Context.js +13 -0
  457. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +11 -0
  458. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -0
  459. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +86 -0
  460. package/lib/providers/LiveRegionTwin/private/types.d.ts +8 -0
  461. package/lib/providers/LiveRegionTwin/private/types.d.ts.map +1 -0
  462. package/lib/providers/LiveRegionTwin/private/types.js +2 -0
  463. package/lib/providers/LiveRegionTwin/private/useContext.d.ts +3 -0
  464. package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +1 -0
  465. package/lib/providers/LiveRegionTwin/private/useContext.js +24 -0
  466. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +2 -0
  467. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +1 -0
  468. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +24 -0
  469. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +3 -0
  470. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +1 -0
  471. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +15 -0
  472. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +8 -0
  473. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +1 -0
  474. package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +20 -0
  475. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +7 -0
  476. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +1 -0
  477. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +184 -0
  478. package/lib/providers/TranscriptFocus/private/Context.d.ts +12 -0
  479. package/lib/providers/TranscriptFocus/private/Context.d.ts.map +1 -0
  480. package/lib/providers/TranscriptFocus/private/Context.js +13 -0
  481. package/lib/providers/TranscriptFocus/private/useContext.d.ts +2 -0
  482. package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +1 -0
  483. package/lib/providers/TranscriptFocus/private/useContext.js +24 -0
  484. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +2 -0
  485. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +1 -0
  486. package/lib/providers/TranscriptFocus/useActiveDescendantId.js +15 -0
  487. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +8 -0
  488. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +1 -0
  489. package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +21 -0
  490. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +2 -0
  491. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +1 -0
  492. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +15 -0
  493. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +2 -0
  494. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +1 -0
  495. package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +15 -0
  496. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +2 -0
  497. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +1 -0
  498. package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +15 -0
  499. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +2 -0
  500. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +1 -0
  501. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +15 -0
  502. package/lib/tsconfig.json +1 -1
  503. package/lib/types/ScrollPosition.d.ts +6 -0
  504. package/lib/types/ScrollPosition.d.ts.map +1 -0
  505. package/lib/types/ScrollPosition.js +2 -0
  506. package/package.json +33 -40
  507. package/src/Activity/{Avatar.js → Avatar.tsx} +9 -2
  508. package/src/Activity/{Bubble.js → Bubble.tsx} +10 -2
  509. package/src/Activity/CarouselFilmStrip.js +20 -29
  510. package/src/Activity/CarouselFilmStripAttachment.js +91 -0
  511. package/src/Activity/{Speak.js → Speak.tsx} +12 -5
  512. package/src/Activity/{StackedLayout.js → StackedLayout.tsx} +46 -20
  513. package/src/Attachment/Assets/DownloadIcon.js +8 -1
  514. package/src/Attachment/{AudioContent.js → AudioContent.tsx} +12 -3
  515. package/src/Attachment/FileAttachment.js +1 -1
  516. package/src/Attachment/{FileContent.js → FileContent.tsx} +22 -7
  517. package/src/Attachment/{HTMLVideoContent.js → HTMLVideoContent.tsx} +10 -2
  518. package/src/Attachment/{ImageContent.js → ImageContent.tsx} +7 -2
  519. package/src/Attachment/{TextContent.js → TextContent.tsx} +14 -7
  520. package/src/Attachment/{VideoContent.js → VideoContent.tsx} +10 -2
  521. package/src/Attachment/{VimeoContent.js → VimeoContent.tsx} +15 -8
  522. package/src/Attachment/{YouTubeContent.js → YouTubeContent.tsx} +12 -5
  523. package/src/{BasicSendBox.js → BasicSendBox.tsx} +9 -5
  524. package/src/BasicToaster.js +9 -5
  525. package/src/BasicTranscript.tsx +878 -0
  526. package/src/{BasicTypingIndicator.js → BasicTypingIndicator.tsx} +4 -3
  527. package/src/{BasicWebChat.js → BasicWebChat.tsx} +13 -4
  528. package/src/{Composer.js → Composer.tsx} +82 -71
  529. package/src/Dictation.js +13 -4
  530. package/src/{ErrorBox.js → ErrorBox.tsx} +7 -2
  531. package/src/Middleware/Activity/createCoreMiddleware.tsx +78 -0
  532. package/src/Middleware/ActivityStatus/SendStatus/{SendStatus.js → SendStatus.tsx} +8 -3
  533. package/src/Middleware/ActivityStatus/{Timestamp.js → Timestamp.tsx} +8 -2
  534. package/src/Middleware/ActivityStatus/{createCoreMiddleware.js → createCoreMiddleware.tsx} +3 -1
  535. package/src/Middleware/ActivityStatus/createSendStatusMiddleware.js +10 -6
  536. package/src/Middleware/ActivityStatus/createTimestampMiddleware.js +10 -8
  537. package/src/Middleware/Attachment/createCoreMiddleware.tsx +44 -0
  538. package/src/Middleware/AttachmentForScreenReader/createCoreMiddleware.tsx +40 -0
  539. package/src/Middleware/Avatar/{createCoreMiddleware.js → createCoreMiddleware.tsx} +19 -11
  540. package/src/Middleware/CardAction/createCoreMiddleware.js +51 -42
  541. package/src/Middleware/GroupActivities/createCoreMiddleware.js +6 -4
  542. package/src/Middleware/ScrollToEndButton/ScrollToEndButton.js +45 -0
  543. package/src/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.ts +19 -0
  544. package/src/Middleware/Toast/createCoreMiddleware.tsx +24 -0
  545. package/src/Middleware/TypingIndicator/{createCoreMiddleware.js → createCoreMiddleware.tsx} +10 -5
  546. package/src/{ReactWebChat.js → ReactWebChat.tsx} +25 -7
  547. package/src/ScreenReaderActivity.js +65 -40
  548. package/src/{ScreenReaderText.js → ScreenReaderText.tsx} +27 -9
  549. package/src/SendBox/Assets/AttachmentIcon.js +1 -1
  550. package/src/SendBox/Assets/MicrophoneIcon.js +1 -1
  551. package/src/SendBox/{AutoResizeTextArea.js → AutoResizeTextArea.tsx} +30 -4
  552. package/src/SendBox/{DictationInterims.js → DictationInterims.tsx} +6 -2
  553. package/src/SendBox/{IconButton.js → IconButton.tsx} +19 -3
  554. package/src/SendBox/{MicrophoneButton.js → MicrophoneButton.tsx} +35 -25
  555. package/src/SendBox/{SendButton.js → SendButton.tsx} +8 -3
  556. package/src/SendBox/{SuggestedAction.js → SuggestedAction.tsx} +62 -39
  557. package/src/SendBox/{SuggestedActions.js → SuggestedActions.tsx} +70 -22
  558. package/src/SendBox/{TextBox.js → TextBox.tsx} +21 -7
  559. package/src/SendBox/{UploadButton.js → UploadButton.tsx} +7 -3
  560. package/src/Styles/StyleSet/BasicTranscript.ts +34 -20
  561. package/src/Styles/StyleSet/Bubble.ts +0 -1
  562. package/src/Styles/StyleSet/CarouselFilmStrip.ts +12 -30
  563. package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +57 -0
  564. package/src/Styles/StyleSet/KeyboardHelp.ts +157 -0
  565. package/src/Styles/StyleSet/ScrollToEndButton.ts +33 -31
  566. package/src/Styles/StyleSet/SendBoxButton.ts +84 -13
  567. package/src/Styles/StyleSet/SendBoxTextBox.ts +1 -2
  568. package/src/Styles/StyleSet/StackedLayout.ts +13 -11
  569. package/src/Styles/StyleSet/SuggestedAction.ts +130 -43
  570. package/src/Styles/StyleSet/SuggestedActions.ts +13 -5
  571. package/src/Styles/createStyleSet.ts +43 -40
  572. package/src/Styles/mirrorStyle.js +10 -2
  573. package/src/Toast/CollapseIcon.js +9 -1
  574. package/src/Toast/DismissIcon.js +9 -1
  575. package/src/Toast/ExpandIcon.js +9 -1
  576. package/src/Toast/NotificationIcon.js +4 -1
  577. package/src/Toast/createToastMiddleware.tsx +15 -0
  578. package/src/Transcript/ActivityRow.tsx +124 -0
  579. package/src/Transcript/ActivityTextAlt.tsx +32 -0
  580. package/src/Transcript/FocusTrap.tsx +64 -0
  581. package/src/Transcript/KeyboardHelp.tsx +282 -0
  582. package/src/Transcript/LiveRegionTranscript.tsx +181 -0
  583. package/src/Transcript/types.ts +1 -0
  584. package/src/Transcript/useActivityAccessibleName.ts +85 -0
  585. package/src/Utils/{AccessibleButton.js → AccessibleButton.tsx} +19 -4
  586. package/src/Utils/{AccessibleInputText.js → AccessibleInputText.tsx} +48 -5
  587. package/src/Utils/{AccessibleTextArea.js → AccessibleTextArea.tsx} +67 -6
  588. package/src/Utils/{FocusRedirector.js → FocusRedirector.tsx} +21 -8
  589. package/src/Utils/InlineMarkdown.js +18 -2
  590. package/src/Utils/TypeFocusSink/FocusBox.js +4 -4
  591. package/src/Utils/TypeFocusSink/getTabIndex.ts +1 -1
  592. package/src/Utils/TypeFocusSink/inputtableKey.ts +5 -1
  593. package/src/Utils/activityAltText.ts +135 -0
  594. package/src/Utils/createCustomEvent.js +7 -1
  595. package/src/Utils/detectBrowser.js +2 -1
  596. package/src/Utils/findAncestor.ts +12 -0
  597. package/src/Utils/getActivityUniqueId.ts +5 -0
  598. package/src/Utils/intersectionOf.spec.js +2 -0
  599. package/src/Utils/intersectionOf.ts +14 -0
  600. package/src/Utils/isZeroOrPositive.ts +7 -0
  601. package/src/Utils/mapMap.js +7 -1
  602. package/src/Utils/mapMap.spec.js +2 -0
  603. package/src/Utils/removeInline.spec.js +2 -0
  604. package/src/Utils/scrollIntoViewWithBlockNearest.ts +20 -0
  605. package/src/Utils/shallowEquals.js +8 -1
  606. package/src/Utils/{singleToArray.js → singleToArray.ts} +1 -1
  607. package/src/Utils/supportPseudoClass.ts +17 -0
  608. package/src/Utils/{tabbableElements.js → tabbableElements.ts} +6 -5
  609. package/src/Utils/walkMarkdownTokens.spec.js +3 -3
  610. package/src/connectToWebChat.js +11 -4
  611. package/src/hooks/{index.js → index.ts} +1 -0
  612. package/src/hooks/internal/BypassSpeechSynthesisPonyfill.js +70 -17
  613. package/src/hooks/internal/useChanged.ts +17 -0
  614. package/src/hooks/internal/useDispatchScrollPosition.js +1 -3
  615. package/src/hooks/internal/useDispatchTranscriptFocusByActivityKey.ts +5 -0
  616. package/src/hooks/internal/useFocusVisible.ts +22 -0
  617. package/src/hooks/internal/useMemoWithPrevious.ts +16 -0
  618. package/src/hooks/internal/useMemoize.spec.js +3 -1
  619. package/src/hooks/internal/useMemoize.ts +53 -0
  620. package/src/hooks/internal/useObserveFocusVisible.ts +252 -0
  621. package/src/hooks/internal/usePrevious.ts +12 -0
  622. package/src/hooks/internal/useResumeAudioContext.ts +7 -0
  623. package/src/hooks/internal/useScrollRelative.js +4 -3
  624. package/src/hooks/internal/useStateRef.ts +31 -0
  625. package/src/hooks/internal/{useUniqueId.js → useUniqueId.ts} +1 -1
  626. package/src/hooks/internal/useValueRef.ts +22 -0
  627. package/src/hooks/{useDictateAbortable.js → useDictateAbortable.ts} +1 -1
  628. package/src/hooks/{useFocus.js → useFocus.ts} +1 -1
  629. package/src/hooks/{useFocusSendBox.js → useFocusSendBox.ts} +2 -1
  630. package/src/hooks/{useObserveScrollPosition.js → useObserveScrollPosition.ts} +6 -1
  631. package/src/hooks/{useObserveTranscriptFocus.js → useObserveTranscriptFocus.ts} +6 -1
  632. package/src/hooks/useRenderMarkdownAsHTML.ts +23 -0
  633. package/src/hooks/{useScrollDown.js → useScrollDown.ts} +1 -1
  634. package/src/hooks/useScrollTo.ts +16 -0
  635. package/src/hooks/useScrollToEnd.ts +12 -0
  636. package/src/hooks/{useScrollUp.js → useScrollUp.ts} +1 -1
  637. package/src/hooks/{useSendFiles.js → useSendFiles.ts} +3 -2
  638. package/src/hooks/{useStyleSet.js → useStyleSet.ts} +1 -1
  639. package/src/hooks/useWebSpeechPonyfill.ts +7 -0
  640. package/src/index.ts +7 -12
  641. package/src/providers/ActivityTree/ActivityTreeComposer.tsx +74 -0
  642. package/src/providers/ActivityTree/private/Context.ts +12 -0
  643. package/src/providers/ActivityTree/private/types.ts +12 -0
  644. package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +66 -0
  645. package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +140 -0
  646. package/src/providers/ActivityTree/private/useContext.ts +15 -0
  647. package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +16 -0
  648. package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +154 -0
  649. package/src/providers/LiveRegionTwin/private/Context.ts +15 -0
  650. package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +64 -0
  651. package/src/providers/LiveRegionTwin/private/types.ts +10 -0
  652. package/src/providers/LiveRegionTwin/private/useContext.ts +15 -0
  653. package/src/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.ts +13 -0
  654. package/src/providers/LiveRegionTwin/private/useStaticElementEntries.ts +7 -0
  655. package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +12 -0
  656. package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +180 -0
  657. package/src/providers/TranscriptFocus/private/Context.ts +16 -0
  658. package/src/providers/TranscriptFocus/private/useContext.ts +13 -0
  659. package/src/providers/TranscriptFocus/useActiveDescendantId.ts +5 -0
  660. package/src/providers/TranscriptFocus/useFocusByActivityKey.ts +14 -0
  661. package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +5 -0
  662. package/src/providers/TranscriptFocus/useFocusedActivityKey.ts +5 -0
  663. package/src/providers/TranscriptFocus/useFocusedExplicitly.ts +5 -0
  664. package/src/providers/TranscriptFocus/useGetDescendantIdByActivityKey.ts +5 -0
  665. package/src/tsconfig.json +1 -1
  666. package/src/types/ScrollPosition.ts +6 -0
  667. package/.eslintignore +0 -9
  668. package/lib/Activity/ScrollToEndButton.js +0 -81
  669. package/lib/Attachment/Assets/ErrorIcon.js +0 -22
  670. package/lib/Utils/findLastIndex.js +0 -32
  671. package/lib/Utils/remarkStripMarkdown.js +0 -26
  672. package/lib/hooks/internal/useAcknowledgedActivity.js +0 -90
  673. package/lib/hooks/internal/useDispatchTranscriptFocus.js +0 -19
  674. package/lib/hooks/internal/useStripMarkdown.js +0 -19
  675. package/src/Activity/ScrollToEndButton.js +0 -58
  676. package/src/Attachment/Assets/ErrorIcon.js +0 -9
  677. package/src/BasicTranscript.js +0 -1123
  678. package/src/Middleware/Activity/createCoreMiddleware.js +0 -71
  679. package/src/Middleware/Attachment/createCoreMiddleware.js +0 -43
  680. package/src/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +0 -37
  681. package/src/Middleware/Toast/createCoreMiddleware.js +0 -20
  682. package/src/Toast/createToastMiddleware.js +0 -11
  683. package/src/Utils/findLastIndex.js +0 -11
  684. package/src/Utils/findLastIndex.spec.js +0 -29
  685. package/src/Utils/getActivityUniqueId.js +0 -3
  686. package/src/Utils/intersectionOf.js +0 -11
  687. package/src/Utils/isZeroOrPositive.js +0 -4
  688. package/src/Utils/remarkStripMarkdown.js +0 -13
  689. package/src/hooks/internal/useAcknowledgedActivity.js +0 -65
  690. package/src/hooks/internal/useChanged.js +0 -10
  691. package/src/hooks/internal/useDispatchTranscriptFocus.js +0 -7
  692. package/src/hooks/internal/useMemoize.js +0 -37
  693. package/src/hooks/internal/useStripMarkdown.js +0 -7
  694. package/src/hooks/useRenderMarkdownAsHTML.js +0 -20
  695. package/src/hooks/useScrollTo.js +0 -11
  696. package/src/hooks/useScrollToEnd.js +0 -11
  697. package/src/hooks/useWebSpeechPonyfill.js +0 -5
  698. package/src/index.tsx +0 -35
@@ -7,76 +7,163 @@ export default function createSuggestedActionStyle({
7
7
  paddingRegular,
8
8
  paddingWide,
9
9
  primaryFont,
10
- suggestedActionBackground,
10
+ suggestedActionBorderRadius,
11
+
12
+ suggestedActionBackgroundColor,
11
13
  suggestedActionBorderColor,
12
14
  suggestedActionBorderStyle,
13
15
  suggestedActionBorderWidth,
14
- suggestedActionBorderRadius,
15
- suggestedActionImageHeight,
16
16
  suggestedActionTextColor,
17
- suggestedActionDisabledBackground,
18
- suggestedActionDisabledBorderColor,
19
- suggestedActionDisabledBorderStyle,
20
- suggestedActionDisabledBorderWidth,
21
- suggestedActionDisabledTextColor,
17
+
18
+ suggestedActionBackgroundColorOnActive,
19
+ suggestedActionBorderColorOnActive,
20
+ suggestedActionBorderStyleOnActive,
21
+ suggestedActionBorderWidthOnActive,
22
+ suggestedActionTextColorOnActive,
23
+
24
+ suggestedActionBackgroundColorOnDisabled,
25
+ suggestedActionBorderColorOnDisabled,
26
+ suggestedActionBorderStyleOnDisabled,
27
+ suggestedActionBorderWidthOnDisabled,
28
+ suggestedActionTextColorOnDisabled,
29
+
30
+ suggestedActionBackgroundColorOnFocus,
31
+ suggestedActionBorderColorOnFocus,
32
+ suggestedActionBorderStyleOnFocus,
33
+ suggestedActionBorderWidthOnFocus,
34
+ suggestedActionTextColorOnFocus,
35
+
36
+ suggestedActionBackgroundColorOnHover,
37
+ suggestedActionBorderColorOnHover,
38
+ suggestedActionBorderStyleOnHover,
39
+ suggestedActionBorderWidthOnHover,
40
+ suggestedActionTextColorOnHover,
41
+
42
+ suggestedActionKeyboardFocusIndicatorBorderColor,
43
+ suggestedActionKeyboardFocusIndicatorBorderRadius,
44
+ suggestedActionKeyboardFocusIndicatorBorderStyle,
45
+ suggestedActionKeyboardFocusIndicatorBorderWidth,
46
+ suggestedActionKeyboardFocusIndicatorInset,
47
+
22
48
  suggestedActionHeight,
49
+ suggestedActionImageHeight,
23
50
  suggestedActionsStackedLayoutButtonMaxHeight,
24
- subtle
51
+ subtle,
52
+
53
+ // Deprecated
54
+ suggestedActionActiveBackground,
55
+ suggestedActionBackground,
56
+ suggestedActionDisabledBackground,
57
+ suggestedActionFocusBackground,
58
+ suggestedActionHoverBackground
25
59
  }: StrictStyleOptions) {
26
60
  return {
27
61
  '&.webchat__suggested-action': {
28
- display: 'flex',
62
+ alignItems: 'center',
63
+ background: suggestedActionBackground, // Deprecated as of 4.15.0. Remove on or after 2021-09-16.
64
+ backgroundColor: suggestedActionBackgroundColor,
65
+ borderColor: suggestedActionBorderColor || accent,
66
+ borderRadius: suggestedActionBorderRadius,
67
+ borderStyle: suggestedActionBorderStyle,
68
+ borderWidth: suggestedActionBorderWidth,
69
+ color: suggestedActionTextColor || accent,
70
+ fontFamily: primaryFont,
71
+ fontSize: 'inherit',
72
+ height: suggestedActionHeight,
73
+ justifyContent: 'center',
29
74
  maxWidth: '100%',
75
+ outline: 0,
76
+ paddingLeft: paddingWide,
77
+ paddingRight: paddingWide,
78
+ position: 'relative',
79
+ whiteSpace: 'nowrap',
80
+ width: '100%',
81
+
82
+ // Order of style preferences (based on effort of user gesture): disabled > active > hover > focus.
83
+ // Keyboard focus indicator styles applied by :focus-visible do not conflict with :active/:hover/:focus, so it is not included here.
84
+ '&:disabled, &[aria-disabled="true"]': {
85
+ background: suggestedActionDisabledBackground,
86
+ backgroundColor: suggestedActionBackgroundColorOnDisabled,
87
+ borderColor: suggestedActionBorderColorOnDisabled,
88
+ borderStyle: suggestedActionBorderStyleOnDisabled,
89
+ borderWidth: suggestedActionBorderWidthOnDisabled,
90
+ color: suggestedActionTextColorOnDisabled || subtle
91
+ },
30
92
 
31
- '& .webchat__suggested-action__button': {
32
- alignItems: 'center',
33
- borderRadius: suggestedActionBorderRadius,
34
- fontFamily: primaryFont,
35
- fontSize: 'inherit',
36
- height: suggestedActionHeight,
37
- justifyContent: 'center',
38
- maxWidth: '100%',
39
- paddingLeft: paddingWide,
40
- paddingRight: paddingWide,
41
- whiteSpace: 'nowrap',
42
- width: '100%',
43
-
44
- '&:disabled, &[aria-disabled="true"]': {
45
- background: suggestedActionDisabledBackground || suggestedActionBackground,
46
- borderColor: suggestedActionDisabledBorderColor,
47
- borderStyle: suggestedActionDisabledBorderStyle,
48
- borderWidth: suggestedActionDisabledBorderWidth,
49
- color: suggestedActionDisabledTextColor || subtle
93
+ '&:not(:disabled):not([aria-disabled="true"])': {
94
+ '&:active': {
95
+ background: suggestedActionActiveBackground,
96
+ backgroundColor: suggestedActionBackgroundColorOnActive,
97
+ borderColor: suggestedActionBorderColorOnActive,
98
+ borderStyle: suggestedActionBorderStyleOnActive,
99
+ borderWidth: suggestedActionBorderWidthOnActive,
100
+ color: suggestedActionTextColorOnActive
50
101
  },
51
102
 
52
- '&:not(:disabled):not([aria-disabled="true"])': {
53
- background: suggestedActionBackground,
54
- borderColor: suggestedActionBorderColor || accent,
55
- borderStyle: suggestedActionBorderStyle,
56
- borderWidth: suggestedActionBorderWidth,
57
- color: suggestedActionTextColor || accent
103
+ '&:not(:active)': {
104
+ '&:hover': {
105
+ background: suggestedActionHoverBackground,
106
+ backgroundColor: suggestedActionBackgroundColorOnHover,
107
+ borderColor: suggestedActionBorderColorOnHover,
108
+ borderStyle: suggestedActionBorderStyleOnHover,
109
+ borderWidth: suggestedActionBorderWidthOnHover,
110
+ color: suggestedActionTextColorOnHover
111
+ },
112
+
113
+ '&:not(:hover)': {
114
+ '&:focus': {
115
+ background: suggestedActionFocusBackground,
116
+ backgroundColor: suggestedActionBackgroundColorOnFocus,
117
+ borderColor: suggestedActionBorderColorOnFocus,
118
+ borderStyle: suggestedActionBorderStyleOnFocus,
119
+ borderWidth: suggestedActionBorderWidthOnFocus,
120
+ color: suggestedActionTextColorOnFocus
121
+ }
122
+ }
58
123
  }
59
124
  },
60
125
 
61
- '& .webchat__suggested-action__image': {
62
- height: suggestedActionImageHeight
126
+ // On unsupported browser, :focus-visible and :not(:focus-visible) is always false.
127
+ // And it will turn the whole CSS selector ":unsupported, .truthy" to false.
128
+ '&:not(:focus-visible) .webchat__suggested-action__keyboard-focus-indicator': {
129
+ display: 'none'
130
+ },
131
+
132
+ '&:not(.webchat__suggested-action--focus-visible) .webchat__suggested-action__keyboard-focus-indicator': {
133
+ display: 'none'
134
+ },
135
+
136
+ '&:not(.webchat__suggested-action--rtl) .webchat__suggested-action__image + .webchat__suggested-action__text': {
137
+ paddingLeft: paddingRegular
138
+ },
139
+
140
+ '&.webchat__suggested-action--rtl .webchat__suggested-action__image + .webchat__suggested-action__text': {
141
+ paddingRight: paddingRegular
63
142
  },
64
143
 
65
- '& .webchat__suggested-action--wrapping': {
144
+ '&.webchat__suggested-action--wrapping': {
66
145
  height: 'auto',
67
146
  maxHeight: suggestedActionsStackedLayoutButtonMaxHeight || '100%',
68
147
  minHeight:
69
- typeof suggestedActionsStackedLayoutButtonMaxHeight === 'number'
148
+ typeof suggestedActionsStackedLayoutButtonMaxHeight === 'number' && typeof suggestedActionHeight === 'number'
70
149
  ? Math.min(suggestedActionsStackedLayoutButtonMaxHeight, suggestedActionHeight)
71
150
  : suggestedActionHeight
72
151
  },
73
152
 
74
- '&:not(.webchat__suggested-action--rtl) .webchat__suggested-action__image + .webchat__suggested-action__text': {
75
- paddingLeft: paddingRegular
153
+ '& .webchat__suggested-action__image': {
154
+ height: suggestedActionImageHeight
76
155
  },
77
156
 
78
- '&.webchat__suggested-action--rtl .webchat__suggested-action__image + .webchat__suggested-action__text': {
79
- paddingRight: paddingRegular
157
+ '& .webchat__suggested-action__keyboard-focus-indicator': {
158
+ borderColor: suggestedActionKeyboardFocusIndicatorBorderColor,
159
+ borderRadius: suggestedActionKeyboardFocusIndicatorBorderRadius,
160
+ borderStyle: suggestedActionKeyboardFocusIndicatorBorderStyle,
161
+ borderWidth: suggestedActionKeyboardFocusIndicatorBorderWidth,
162
+ bottom: suggestedActionKeyboardFocusIndicatorInset,
163
+ left: suggestedActionKeyboardFocusIndicatorInset,
164
+ position: 'absolute',
165
+ right: suggestedActionKeyboardFocusIndicatorInset,
166
+ top: suggestedActionKeyboardFocusIndicatorInset
80
167
  }
81
168
  }
82
169
  };
@@ -25,7 +25,7 @@ export default function createSuggestedActionsStyle({
25
25
  paddingBottom: paddingRegular / 2,
26
26
  paddingTop: paddingRegular / 2,
27
27
 
28
- '& .webchat__suggested-actions__button': {
28
+ '& .webchat__suggested-actions__item-box': {
29
29
  paddingBottom: paddingRegular / 2,
30
30
  paddingLeft: paddingRegular / 2,
31
31
  paddingRight: paddingRegular / 2,
@@ -113,13 +113,16 @@ export default function createSuggestedActionsStyle({
113
113
  paddingTop: paddingRegular / 2
114
114
  },
115
115
 
116
- '& .webchat__suggested-actions__item': {
116
+ '& .webchat__suggested-actions__flow-item-box': {
117
117
  maxWidth: '100%',
118
118
  overflow: 'hidden' // This is required in IE11
119
119
  },
120
120
 
121
- '& .webchat__suggested-actions__button': {
122
- padding: paddingRegular / 2
121
+ '& .webchat__suggested-actions__item-box': {
122
+ paddingBottom: paddingRegular / 2,
123
+ paddingLeft: paddingRegular / 2,
124
+ paddingRight: paddingRegular / 2,
125
+ paddingTop: paddingRegular / 2
123
126
  }
124
127
  },
125
128
 
@@ -133,7 +136,7 @@ export default function createSuggestedActionsStyle({
133
136
  paddingTop: paddingRegular / 2
134
137
  },
135
138
 
136
- '& .webchat__suggested-actions__button': {
139
+ '& .webchat__suggested-actions__item-box': {
137
140
  paddingBottom: paddingRegular / 2,
138
141
  paddingLeft: paddingRegular / 2,
139
142
  paddingRight: paddingRegular / 2,
@@ -152,6 +155,11 @@ export default function createSuggestedActionsStyle({
152
155
  display: 'flex',
153
156
  whiteSpace: 'normal'
154
157
  }
158
+ },
159
+
160
+ '& .webchat__suggested-actions__item-box': {
161
+ display: 'flex',
162
+ maxWidth: '100%'
155
163
  }
156
164
  }
157
165
  };
@@ -1,4 +1,3 @@
1
- /* eslint-disable complexity */
2
1
  import { normalizeStyleOptions, StyleOptions } from 'botframework-webchat-api';
3
2
 
4
3
  import createActivitiesStyle from './StyleSet/Activities';
@@ -9,6 +8,7 @@ import createAvatarStyle from './StyleSet/Avatar';
9
8
  import createBasicTranscriptStyle from './StyleSet/BasicTranscript';
10
9
  import createBubbleStyle from './StyleSet/Bubble';
11
10
  import createCarouselFilmStrip from './StyleSet/CarouselFilmStrip';
11
+ import createCarouselFilmStripAttachment from './StyleSet/CarouselFilmStripAttachment';
12
12
  import createCarouselFlipper from './StyleSet/CarouselFlipper';
13
13
  import createConnectivityNotification from './StyleSet/ConnectivityNotification';
14
14
  import createDictationInterimsStyle from './StyleSet/DictationInterims';
@@ -17,6 +17,7 @@ import createErrorNotificationStyle from './StyleSet/ErrorNotification';
17
17
  import createFileContentStyle from './StyleSet/FileContent';
18
18
  import createImageAvatarStyle from './StyleSet/ImageAvatar';
19
19
  import createInitialsAvatarStyle from './StyleSet/InitialsAvatar';
20
+ import createKeyboardHelpStyle from './StyleSet/KeyboardHelp';
20
21
  import createMicrophoneButtonStyle from './StyleSet/MicrophoneButton';
21
22
  import createRootStyle from './StyleSet/Root';
22
23
  import createScrollToEndButtonStyle from './StyleSet/ScrollToEndButton';
@@ -45,49 +46,51 @@ import createYouTubeContentStyle from './StyleSet/YouTubeContent';
45
46
  // "styleSet" is actually CSS stylesheet and it is based on the DOM tree.
46
47
  // DOM tree may change from time to time, thus, maintaining "styleSet" becomes a constant effort.
47
48
 
48
- export default function createStyleSet(options: StyleOptions) {
49
- options = normalizeStyleOptions(options);
49
+ export default function createStyleSet(styleOptions: StyleOptions) {
50
+ const strictStyleOptions = normalizeStyleOptions(styleOptions);
50
51
 
51
52
  return {
52
53
  activities: createActivitiesStyle(),
53
- audioAttachment: createAudioAttachmentStyle(options),
54
+ audioAttachment: createAudioAttachmentStyle(strictStyleOptions),
54
55
  audioContent: createAudioContentStyle(),
55
- autoResizeTextArea: createAutoResizeTextAreaStyle(options),
56
- avatar: createAvatarStyle(options),
57
- basicTranscript: createBasicTranscriptStyle(options),
58
- bubble: createBubbleStyle(options),
59
- carouselFilmStrip: createCarouselFilmStrip(options),
60
- carouselFlipper: createCarouselFlipper(options),
61
- connectivityNotification: createConnectivityNotification(options),
62
- dictationInterims: createDictationInterimsStyle(options),
63
- errorBox: createErrorBoxStyle(options),
64
- errorNotification: createErrorNotificationStyle(options),
65
- fileContent: createFileContentStyle(options),
66
- imageAvatar: createImageAvatarStyle(options),
67
- initialsAvatar: createInitialsAvatarStyle(options),
68
- microphoneButton: createMicrophoneButtonStyle(options),
69
- options: { ...options }, // Cloned to make sure no additional modifications will propagate up.
70
- root: createRootStyle(options),
71
- scrollToEndButton: createScrollToEndButtonStyle(options),
72
- sendBox: createSendBoxStyle(options),
73
- sendBoxButton: createSendBoxButtonStyle(options),
74
- sendBoxTextBox: createSendBoxTextBoxStyle(options),
75
- sendStatus: createSendStatusStyle(options),
76
- singleAttachmentActivity: createSingleAttachmentActivityStyle(options),
77
- spinnerAnimation: createSpinnerAnimationStyle(options),
78
- stackedLayout: createStackedLayoutStyle(options),
79
- suggestedAction: createSuggestedActionStyle(options),
80
- suggestedActions: createSuggestedActionsStyle(options),
81
- textContent: createTextContentStyle(options),
82
- toast: createToastStyle(options),
83
- toaster: createToasterStyle(options),
84
- typingAnimation: createTypingAnimationStyle(options),
85
- typingIndicator: createTypingIndicatorStyle(options),
86
- uploadButton: createUploadButtonStyle(options),
56
+ autoResizeTextArea: createAutoResizeTextAreaStyle(strictStyleOptions),
57
+ avatar: createAvatarStyle(strictStyleOptions),
58
+ basicTranscript: createBasicTranscriptStyle(strictStyleOptions),
59
+ bubble: createBubbleStyle(strictStyleOptions),
60
+ carouselFilmStrip: createCarouselFilmStrip(strictStyleOptions),
61
+ carouselFilmStripAttachment: createCarouselFilmStripAttachment(strictStyleOptions),
62
+ carouselFlipper: createCarouselFlipper(strictStyleOptions),
63
+ connectivityNotification: createConnectivityNotification(strictStyleOptions),
64
+ dictationInterims: createDictationInterimsStyle(strictStyleOptions),
65
+ errorBox: createErrorBoxStyle(strictStyleOptions),
66
+ errorNotification: createErrorNotificationStyle(strictStyleOptions),
67
+ fileContent: createFileContentStyle(strictStyleOptions),
68
+ imageAvatar: createImageAvatarStyle(strictStyleOptions),
69
+ initialsAvatar: createInitialsAvatarStyle(strictStyleOptions),
70
+ keyboardHelp: createKeyboardHelpStyle(strictStyleOptions),
71
+ microphoneButton: createMicrophoneButtonStyle(strictStyleOptions),
72
+ options: { ...strictStyleOptions }, // Cloned to make sure no additional modifications will propagate up.
73
+ root: createRootStyle(strictStyleOptions),
74
+ scrollToEndButton: createScrollToEndButtonStyle(strictStyleOptions),
75
+ sendBox: createSendBoxStyle(strictStyleOptions),
76
+ sendBoxButton: createSendBoxButtonStyle(strictStyleOptions),
77
+ sendBoxTextBox: createSendBoxTextBoxStyle(strictStyleOptions),
78
+ sendStatus: createSendStatusStyle(strictStyleOptions),
79
+ singleAttachmentActivity: createSingleAttachmentActivityStyle(strictStyleOptions),
80
+ spinnerAnimation: createSpinnerAnimationStyle(strictStyleOptions),
81
+ stackedLayout: createStackedLayoutStyle(strictStyleOptions),
82
+ suggestedAction: createSuggestedActionStyle(strictStyleOptions),
83
+ suggestedActions: createSuggestedActionsStyle(strictStyleOptions),
84
+ textContent: createTextContentStyle(strictStyleOptions),
85
+ toast: createToastStyle(strictStyleOptions),
86
+ toaster: createToasterStyle(strictStyleOptions),
87
+ typingAnimation: createTypingAnimationStyle(strictStyleOptions),
88
+ typingIndicator: createTypingIndicatorStyle(strictStyleOptions),
89
+ uploadButton: createUploadButtonStyle(strictStyleOptions),
87
90
  videoAttachment: createVideoAttachmentStyle(),
88
- videoContent: createVideoContentStyle(options),
89
- vimeoContent: createVimeoContentStyle(options),
90
- warningNotification: createWarningNotificationStyle(options),
91
- youTubeContent: createYouTubeContentStyle(options)
91
+ videoContent: createVideoContentStyle(strictStyleOptions),
92
+ vimeoContent: createVimeoContentStyle(strictStyleOptions),
93
+ warningNotification: createWarningNotificationStyle(strictStyleOptions),
94
+ youTubeContent: createYouTubeContentStyle(strictStyleOptions)
92
95
  };
93
96
  }
@@ -1,3 +1,5 @@
1
+ import { isForbiddenPropertyName } from 'botframework-webchat-core';
2
+
1
3
  export default function mirrorStyle(mirrorSelector, styles) {
2
4
  const mirrored = {};
3
5
 
@@ -7,8 +9,14 @@ export default function mirrorStyle(mirrorSelector, styles) {
7
9
  match === 'Left' ? 'Right' : match === 'left' ? 'right' : match === 'Right' ? 'Left' : 'left'
8
10
  );
9
11
 
10
- mirrored[patchedKey] = value;
11
- } else {
12
+ if (!isForbiddenPropertyName(patchedKey)) {
13
+ // Mitigated through denylisting.
14
+ // eslint-disable-next-line security/detect-object-injection
15
+ mirrored[patchedKey] = value;
16
+ }
17
+ } else if (!isForbiddenPropertyName(key)) {
18
+ // Mitigated through denylisting.
19
+ // eslint-disable-next-line security/detect-object-injection
12
20
  mirrored[key] = mirrorStyle('', value);
13
21
  }
14
22
  }
@@ -2,7 +2,15 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
 
4
4
  const CollapseIcon = ({ className }) => (
5
- <svg className={(className || '') + ''} height="9" viewBox="0 0 16 9" width="16" xmlns="http://www.w3.org/2000/svg">
5
+ <svg
6
+ className={(className || '') + ''}
7
+ focusable={false}
8
+ height="9"
9
+ role="presentation"
10
+ viewBox="0 0 16 9"
11
+ width="16"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ >
6
14
  <path d="M15.2734 8.97656L8 1.71094L0.726563 8.97656L0.0234375 8.27344L8 0.289062L15.9766 8.27344L15.2734 8.97656Z" />
7
15
  </svg>
8
16
  );
@@ -2,7 +2,15 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
 
4
4
  const DismissIcon = ({ className }) => (
5
- <svg className={(className || '') + ''} height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg">
5
+ <svg
6
+ className={(className || '') + ''}
7
+ focusable={false}
8
+ height="14"
9
+ role="presentation"
10
+ viewBox="0 0 14 14"
11
+ width="14"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ >
6
14
  <path d="M7.71094 7L13.1016 12.3984L12.3984 13.1016L7 7.71094L1.60156 13.1016L0.898438 12.3984L6.28906 7L0.898438 1.60156L1.60156 0.898438L7 6.28906L12.3984 0.898438L13.1016 1.60156L7.71094 7Z" />
7
15
  </svg>
8
16
  );
@@ -2,7 +2,15 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
 
4
4
  const ExpandIcon = ({ className }) => (
5
- <svg className={(className || '') + ''} height="10" viewBox="0 0 16 10" width="16" xmlns="http://www.w3.org/2000/svg">
5
+ <svg
6
+ className={(className || '') + ''}
7
+ focusable={false}
8
+ height="10"
9
+ role="presentation"
10
+ viewBox="0 0 16 10"
11
+ width="16"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ >
6
14
  <path d="M15.1484 0.648437L15.8516 1.35156L8 9.20312L0.148438 1.35156L0.851563 0.648438L8 7.79687L15.1484 0.648437Z" />
7
15
  </svg>
8
16
  );
@@ -1,4 +1,5 @@
1
1
  import { hooks } from 'botframework-webchat-api';
2
+ import { isForbiddenPropertyName } from 'botframework-webchat-core';
2
3
  import PropTypes from 'prop-types';
3
4
  import React from 'react';
4
5
 
@@ -17,7 +18,9 @@ const NotificationIcon = ({ className, level }) => {
17
18
  warn: localize('TOAST_ALT_WARN')
18
19
  };
19
20
 
20
- const prefix = prefixes[level] || '';
21
+ // Mitigated through denylisting.
22
+ // eslint-disable-next-line security/detect-object-injection
23
+ const prefix = (!isForbiddenPropertyName(level) && prefixes[level]) || '';
21
24
 
22
25
  return (
23
26
  <React.Fragment>
@@ -0,0 +1,15 @@
1
+ /* eslint react/prop-types: "off" */
2
+
3
+ import { ToastMiddleware } from 'botframework-webchat-api';
4
+ import React from 'react';
5
+
6
+ import BasicToast from '../BasicToast';
7
+
8
+ function createToastMiddleware(): ToastMiddleware {
9
+ return () =>
10
+ () =>
11
+ ({ notification }) =>
12
+ <BasicToast notification={notification} />;
13
+ }
14
+
15
+ export default createToastMiddleware;
@@ -0,0 +1,124 @@
1
+ import { hooks } from 'botframework-webchat-api';
2
+ import classNames from 'classnames';
3
+ import PropTypes from 'prop-types';
4
+ import React, { forwardRef, useCallback, useRef } from 'react';
5
+
6
+ import type { DirectLineActivity } from 'botframework-webchat-core';
7
+ import type { MouseEventHandler, PropsWithChildren } from 'react';
8
+
9
+ import { android } from '../Utils/detectBrowser';
10
+ import FocusTrap from './FocusTrap';
11
+ import ScreenReaderText from '../ScreenReaderText';
12
+ import SpeakActivity from '../Activity/Speak';
13
+ import useActiveDescendantId from '../providers/TranscriptFocus/useActiveDescendantId';
14
+ import useActivityAccessibleName from './useActivityAccessibleName';
15
+ import useFocusByActivityKey from '../providers/TranscriptFocus/useFocusByActivityKey';
16
+ import useGetDescendantIdByActivityKey from '../providers/TranscriptFocus/useGetDescendantIdByActivityKey';
17
+ import useValueRef from '../hooks/internal/useValueRef';
18
+
19
+ const { useActivityKeysByRead, useGetHasAcknowledgedByActivityKey, useGetKeyByActivity } = hooks;
20
+
21
+ type ActivityRowProps = PropsWithChildren<{
22
+ activity: DirectLineActivity;
23
+ }>;
24
+
25
+ const ActivityRow = forwardRef<HTMLLIElement, ActivityRowProps>(({ activity, children }, ref) => {
26
+ const [activeDescendantId] = useActiveDescendantId();
27
+ const [readActivityKeys] = useActivityKeysByRead();
28
+ const bodyRef = useRef<HTMLDivElement>();
29
+ const focusByActivityKey = useFocusByActivityKey();
30
+ const getKeyByActivity = useGetKeyByActivity();
31
+ // TODO: [P2] #2858 We should use core/definitions/speakingActivity for this predicate instead
32
+ const shouldSpeak = activity.channelData?.speak;
33
+
34
+ const [accessibleName] = useActivityAccessibleName(activity, bodyRef);
35
+ const activityKey = getKeyByActivity(activity);
36
+
37
+ const acknowledged = useGetHasAcknowledgedByActivityKey()(activityKey);
38
+ const activityKeyRef = useValueRef<string>(activityKey);
39
+ const descendantId = useGetDescendantIdByActivityKey()(activityKey);
40
+ const descendantLabelId = `webchat__basic-transcript__active-descendant-label--${activityKey}`;
41
+
42
+ const isActiveDescendant = descendantId === activeDescendantId;
43
+ const read = readActivityKeys.includes(activityKey);
44
+
45
+ const focusSelf = useCallback<(withFocus?: boolean) => void>(
46
+ (withFocus?: boolean) => focusByActivityKey(activityKeyRef.current, withFocus),
47
+ [activityKeyRef, focusByActivityKey]
48
+ );
49
+
50
+ // When a child of the activity receives focus, notify the transcript to set the `aria-activedescendant` to this activity.
51
+ const handleDescendantFocus: () => void = useCallback(() => focusSelf(false), [focusSelf]);
52
+
53
+ // When receive Escape key from descendant, focus back to the activity.
54
+ const handleLeaveFocusTrap = useCallback(() => focusSelf(), [focusSelf]);
55
+
56
+ // When the user press UP/DOWN arrow keys, we put a visual focus indicator around the focused activity.
57
+ // We should do the same for mouse, when the user click on the activity, we should also put a visual focus indicator around the activity.
58
+ // We are doing it in event capture phase to prevent descendants from stopping event propagation to us.
59
+ const handleMouseDownCapture: MouseEventHandler = useCallback(() => focusSelf(false), [focusSelf]);
60
+
61
+ return (
62
+ // TODO: [P2] Add `aria-roledescription="message"` for better AX, need localization strings.
63
+ <article
64
+ aria-hidden={activity.channelData?.['webchat:fallback-text'] === ''}
65
+ className={classNames('webchat__basic-transcript__activity', {
66
+ 'webchat__basic-transcript__activity--acknowledged': acknowledged,
67
+ 'webchat__basic-transcript__activity--read': read
68
+ })}
69
+ // When NVDA is in browse mode, using up/down arrow key to "browse" will dispatch "click" and "mousedown" events for <article> element (inside <ScreenReaderActivity>).
70
+ onMouseDownCapture={handleMouseDownCapture}
71
+ ref={ref}
72
+ >
73
+ {/* TODO: [P1] File a crbug for TalkBack. It should not able to read the content twice when scanning. */}
74
+
75
+ {/* The following <div> is designed for active descendant only.
76
+ We want to prevent screen reader from scanning the content that is authored only for active descendant.
77
+ The specific content should only read when user press UP/DOWN arrow keys to change `aria-activedescendant`.
78
+ However, Android TalkBack 12.1 is buggy when the there is an element with ID of one of the `aria-activedescendant` potential candidates,
79
+ TalkBack will narrate the message content twice (i.e. content of `bodyRef`), regardless whether the ID is currently set as `aria-activedescendant` or not.
80
+ As Android does not support active descendant, we are hiding the whole DOM element altogether. */}
81
+
82
+ {!android && (
83
+ <div
84
+ aria-labelledby={descendantLabelId}
85
+ className="webchat__basic-transcript__activity-active-descendant"
86
+ // "id" is required for "aria-labelledby"
87
+ // eslint-disable-next-line react/forbid-dom-props
88
+ id={descendantId}
89
+ role="article"
90
+ >
91
+ <ScreenReaderText aria-hidden={true} id={descendantLabelId} text={accessibleName} />
92
+ </div>
93
+ )}
94
+ {/* Add tests for focus trap */}
95
+ <FocusTrap onFocus={handleDescendantFocus} onLeave={handleLeaveFocusTrap}>
96
+ <div className="webchat__basic-transcript__activity-body" ref={bodyRef}>
97
+ {children}
98
+ </div>
99
+ </FocusTrap>
100
+ {shouldSpeak && <SpeakActivity activity={activity} />}
101
+ <div
102
+ className={classNames('webchat__basic-transcript__activity-indicator', {
103
+ 'webchat__basic-transcript__activity-indicator--focus': isActiveDescendant
104
+ })}
105
+ />
106
+ </article>
107
+ );
108
+ });
109
+
110
+ ActivityRow.defaultProps = {
111
+ children: undefined
112
+ };
113
+
114
+ ActivityRow.propTypes = {
115
+ activity: PropTypes.shape({
116
+ channelData: PropTypes.shape({
117
+ speak: PropTypes.bool,
118
+ 'webchat:fallback-text': PropTypes.string
119
+ })
120
+ }).isRequired,
121
+ children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)])
122
+ };
123
+
124
+ export default ActivityRow;
@@ -0,0 +1,32 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+
4
+ import type { DirectLineActivity } from 'botframework-webchat-core';
5
+ import type { RefObject, VFC } from 'react';
6
+
7
+ import ScreenReaderText from '../ScreenReaderText';
8
+ import useActivityAccessibleName from './useActivityAccessibleName';
9
+
10
+ type ActivityTextAltProps = {
11
+ activity: DirectLineActivity;
12
+ bodyRef: RefObject<HTMLDivElement>;
13
+ id: string;
14
+ };
15
+
16
+ const ActivityTextAlt: VFC<ActivityTextAltProps> = ({ activity, bodyRef, id }) => {
17
+ const [accessibleName] = useActivityAccessibleName(activity, bodyRef);
18
+
19
+ return <ScreenReaderText aria-hidden={true} id={id} text={accessibleName} />;
20
+ };
21
+
22
+ ActivityTextAlt.propTypes = {
23
+ activity: PropTypes.any.isRequired,
24
+ // PropTypes is not fully compatible with TypeScript
25
+ // @ts-ignore
26
+ bodyRef: PropTypes.shape({
27
+ current: PropTypes.any
28
+ }).isRequired,
29
+ id: PropTypes.string.isRequired
30
+ };
31
+
32
+ export default ActivityTextAlt;