botframework-webchat-api 4.18.1-main.20260511.8fcd02a → 4.18.1

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 (924) hide show
  1. package/decorator.js +1 -1
  2. package/dist/botframework-webchat-api.d.mts +1250 -173
  3. package/dist/botframework-webchat-api.decorator.d.mts +26 -71
  4. package/dist/botframework-webchat-api.decorator.mjs +2 -1
  5. package/dist/botframework-webchat-api.decorator.mjs.LEGAL.txt +0 -0
  6. package/dist/botframework-webchat-api.decorator.mjs.map +1 -1
  7. package/dist/botframework-webchat-api.internal.d.mts +1 -66
  8. package/dist/botframework-webchat-api.internal.mjs +2 -1
  9. package/dist/botframework-webchat-api.internal.mjs.LEGAL.txt +0 -0
  10. package/dist/botframework-webchat-api.internal.mjs.map +1 -1
  11. package/dist/botframework-webchat-api.mjs +139 -1
  12. package/dist/botframework-webchat-api.mjs.LEGAL.txt +27 -2
  13. package/dist/botframework-webchat-api.mjs.map +1 -1
  14. package/dist/chunk-2S76JUVM.mjs +3 -0
  15. package/dist/chunk-2S76JUVM.mjs.LEGAL.txt +0 -0
  16. package/dist/chunk-2S76JUVM.mjs.map +1 -0
  17. package/dist/{chunk-VAX7AB37.mjs → chunk-J6D5YEY6.mjs} +2 -1
  18. package/dist/chunk-J6D5YEY6.mjs.LEGAL.txt +0 -0
  19. package/dist/chunk-ZAMHKQQC.mjs +3 -0
  20. package/dist/chunk-ZAMHKQQC.mjs.LEGAL.txt +0 -0
  21. package/dist/chunk-ZAMHKQQC.mjs.map +1 -0
  22. package/dist/metafile-esm.json +1 -1
  23. package/internal.js +1 -1
  24. package/lib/StyleOptions.d.ts +697 -0
  25. package/lib/StyleOptions.d.ts.map +1 -0
  26. package/lib/StyleOptions.js +2 -0
  27. package/lib/decorator/index.d.ts +5 -0
  28. package/lib/decorator/index.d.ts.map +1 -0
  29. package/lib/decorator/index.js +28 -0
  30. package/lib/decorator/private/ActivityBorderDecoratorMiddleware.d.ts +27 -0
  31. package/lib/decorator/private/ActivityBorderDecoratorMiddleware.d.ts.map +1 -0
  32. package/lib/decorator/private/ActivityBorderDecoratorMiddleware.js +19 -0
  33. package/lib/decorator/private/ActivityDecorator.d.ts +9 -0
  34. package/lib/decorator/private/ActivityDecorator.d.ts.map +1 -0
  35. package/lib/decorator/private/ActivityDecorator.js +36 -0
  36. package/lib/decorator/private/DecoratorComposer.d.ts +3 -0
  37. package/lib/decorator/private/DecoratorComposer.d.ts.map +1 -0
  38. package/lib/decorator/private/DecoratorComposer.js +13 -0
  39. package/lib/decorator/private/activityDecoratorRequest.d.ts +6 -0
  40. package/lib/decorator/private/activityDecoratorRequest.d.ts.map +1 -0
  41. package/lib/decorator/private/activityDecoratorRequest.js +2 -0
  42. package/lib/decorator/private/createDecoratorComposer.d.ts +11 -0
  43. package/lib/decorator/private/createDecoratorComposer.d.ts.map +1 -0
  44. package/lib/decorator/private/createDecoratorComposer.js +27 -0
  45. package/lib/decorator/private/templateMiddleware.d.ts +30 -0
  46. package/lib/decorator/private/templateMiddleware.d.ts.map +1 -0
  47. package/lib/decorator/private/templateMiddleware.js +53 -0
  48. package/lib/decorator/private/templateMiddleware.test.d.ts +3 -0
  49. package/lib/decorator/private/templateMiddleware.test.d.ts.map +1 -0
  50. package/lib/defaultStyleOptions.d.ts +4 -0
  51. package/lib/defaultStyleOptions.d.ts.map +1 -0
  52. package/lib/defaultStyleOptions.js +277 -0
  53. package/lib/external/PrecompiledGlobalize.js +6361 -0
  54. package/lib/hooks/Composer.d.ts +88 -0
  55. package/lib/hooks/Composer.d.ts.map +1 -0
  56. package/lib/hooks/Composer.js +605 -0
  57. package/lib/hooks/index.d.ts +73 -0
  58. package/lib/hooks/index.d.ts.map +1 -0
  59. package/lib/hooks/index.js +504 -0
  60. package/lib/hooks/internal/ErrorBox.js +47 -0
  61. package/lib/hooks/internal/SendBoxMiddleware.d.ts +37 -0
  62. package/lib/hooks/internal/SendBoxMiddleware.d.ts.map +1 -0
  63. package/lib/hooks/internal/SendBoxMiddleware.js +17 -0
  64. package/lib/hooks/internal/SendBoxToolbarMiddleware.d.ts +37 -0
  65. package/lib/hooks/internal/SendBoxToolbarMiddleware.d.ts.map +1 -0
  66. package/lib/hooks/internal/SendBoxToolbarMiddleware.js +17 -0
  67. package/lib/hooks/internal/Tracker.d.ts +4 -0
  68. package/lib/hooks/internal/Tracker.d.ts.map +1 -0
  69. package/lib/hooks/internal/Tracker.js +15 -0
  70. package/lib/hooks/internal/WebChatAPIContext.d.ts +80 -0
  71. package/lib/hooks/internal/WebChatAPIContext.d.ts.map +1 -0
  72. package/lib/hooks/internal/WebChatAPIContext.js +12 -0
  73. package/lib/hooks/internal/WebChatReduxContext.js +17 -0
  74. package/lib/hooks/internal/defaultSelectVoice.js +28 -0
  75. package/lib/hooks/internal/private/templateMiddleware.d.ts +3 -0
  76. package/lib/hooks/internal/private/templateMiddleware.d.ts.map +1 -0
  77. package/lib/hooks/internal/private/templateMiddleware.js +12 -0
  78. package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts +4 -0
  79. package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts.map +1 -0
  80. package/lib/hooks/internal/useCreateActivityRendererInternal.js +37 -0
  81. package/lib/hooks/internal/useDebugDeps.js +39 -0
  82. package/lib/hooks/internal/useDirFromProps.js +12 -0
  83. package/lib/hooks/internal/useErrorBoxClass.js +14 -0
  84. package/lib/hooks/internal/useForceRender.js +24 -0
  85. package/lib/hooks/internal/useLocalizedGlobalize.js +12 -0
  86. package/lib/hooks/internal/useLocalizedStrings.js +14 -0
  87. package/lib/hooks/internal/useMarkActivity.js +12 -0
  88. package/lib/hooks/internal/usePrevious.d.ts +3 -0
  89. package/lib/hooks/internal/usePrevious.d.ts.map +1 -0
  90. package/lib/hooks/internal/usePrevious.js +15 -0
  91. package/lib/hooks/internal/useReadTelemetryDimensions.js +20 -0
  92. package/lib/hooks/internal/useSetDictateState.d.ts +2 -0
  93. package/lib/hooks/internal/useSetDictateState.d.ts.map +1 -0
  94. package/lib/hooks/internal/useSetDictateState.js +12 -0
  95. package/lib/hooks/internal/useTimer.d.ts +5 -0
  96. package/lib/hooks/internal/useTimer.d.ts.map +1 -0
  97. package/lib/hooks/internal/useTimer.js +43 -0
  98. package/lib/hooks/internal/useTracker.js +42 -0
  99. package/lib/hooks/internal/useValueRef.d.ts +3 -0
  100. package/lib/hooks/internal/useValueRef.d.ts.map +1 -0
  101. package/lib/hooks/internal/useValueRef.js +22 -0
  102. package/lib/hooks/internal/useWebChatAPIContext.d.ts +83 -0
  103. package/lib/hooks/internal/useWebChatAPIContext.d.ts.map +1 -0
  104. package/lib/hooks/internal/useWebChatAPIContext.js +17 -0
  105. package/lib/hooks/middleware/UserlandBoundary.js +48 -0
  106. package/lib/hooks/middleware/applyMiddleware.js +122 -0
  107. package/lib/hooks/middleware/concatMiddleware.d.ts +6 -0
  108. package/lib/hooks/middleware/concatMiddleware.d.ts.map +1 -0
  109. package/lib/hooks/middleware/concatMiddleware.js +33 -0
  110. package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts +3 -0
  111. package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts.map +1 -0
  112. package/lib/hooks/middleware/createDefaultCardActionMiddleware.js +43 -0
  113. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts +7 -0
  114. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts.map +1 -0
  115. package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.js +68 -0
  116. package/lib/hooks/private/numberWithInfinity.d.ts +3 -0
  117. package/lib/hooks/private/numberWithInfinity.d.ts.map +1 -0
  118. package/lib/hooks/private/numberWithInfinity.js +17 -0
  119. package/lib/hooks/private/numberWithInfinity.spec.d.ts +2 -0
  120. package/lib/hooks/private/numberWithInfinity.spec.d.ts.map +1 -0
  121. package/lib/hooks/private/reduceIterable.d.ts +2 -0
  122. package/lib/hooks/private/reduceIterable.d.ts.map +1 -0
  123. package/lib/hooks/private/reduceIterable.js +26 -0
  124. package/lib/hooks/private/reduceIterable.spec.d.ts +2 -0
  125. package/lib/hooks/private/reduceIterable.spec.d.ts.map +1 -0
  126. package/lib/hooks/useActiveTyping.d.ts +4 -0
  127. package/lib/hooks/useActiveTyping.d.ts.map +1 -0
  128. package/lib/hooks/useActiveTyping.js +81 -0
  129. package/lib/hooks/useActivities.d.ts +3 -0
  130. package/lib/hooks/useActivities.d.ts.map +1 -0
  131. package/lib/hooks/useActivities.js +14 -0
  132. package/lib/hooks/useActivityKeys.d.ts +3 -0
  133. package/lib/hooks/useActivityKeys.d.ts.map +1 -0
  134. package/lib/hooks/useActivityKeys.js +11 -0
  135. package/lib/hooks/useActivityKeysByRead.d.ts +3 -0
  136. package/lib/hooks/useActivityKeysByRead.d.ts.map +1 -0
  137. package/lib/hooks/useActivityKeysByRead.js +11 -0
  138. package/lib/hooks/useAvatarForBot.d.ts +5 -0
  139. package/lib/hooks/useAvatarForBot.d.ts.map +1 -0
  140. package/lib/hooks/useAvatarForBot.js +26 -0
  141. package/lib/hooks/useAvatarForUser.d.ts +5 -0
  142. package/lib/hooks/useAvatarForUser.d.ts.map +1 -0
  143. package/lib/hooks/useAvatarForUser.js +26 -0
  144. package/lib/hooks/useByteFormatter.d.ts +2 -0
  145. package/lib/hooks/useByteFormatter.d.ts.map +1 -0
  146. package/lib/hooks/useByteFormatter.js +43 -0
  147. package/lib/hooks/useConnectivityStatus.d.ts +2 -0
  148. package/lib/hooks/useConnectivityStatus.d.ts.map +1 -0
  149. package/lib/hooks/useConnectivityStatus.js +14 -0
  150. package/lib/hooks/useCreateActivityRenderer.d.ts +3 -0
  151. package/lib/hooks/useCreateActivityRenderer.d.ts.map +1 -0
  152. package/lib/hooks/useCreateActivityRenderer.js +14 -0
  153. package/lib/hooks/useCreateActivityStatusRenderer.d.ts +10 -0
  154. package/lib/hooks/useCreateActivityStatusRenderer.d.ts.map +1 -0
  155. package/lib/hooks/useCreateActivityStatusRenderer.js +72 -0
  156. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.d.ts +3 -0
  157. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.d.ts.map +1 -0
  158. package/lib/hooks/useCreateAttachmentForScreenReaderRenderer.js +12 -0
  159. package/lib/hooks/useCreateAvatarRenderer.d.ts +6 -0
  160. package/lib/hooks/useCreateAvatarRenderer.d.ts.map +1 -0
  161. package/lib/hooks/useCreateAvatarRenderer.js +44 -0
  162. package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts +3 -0
  163. package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts.map +1 -0
  164. package/lib/hooks/useCreateScrollToEndButtonRenderer.js +12 -0
  165. package/lib/hooks/useDateFormatter.d.ts +2 -0
  166. package/lib/hooks/useDateFormatter.d.ts.map +1 -0
  167. package/lib/hooks/useDateFormatter.js +35 -0
  168. package/lib/hooks/useDebouncedNotifications.d.ts +13 -0
  169. package/lib/hooks/useDebouncedNotifications.d.ts.map +1 -0
  170. package/lib/hooks/useDebouncedNotifications.js +118 -0
  171. package/lib/hooks/useDictateInterims.d.ts +2 -0
  172. package/lib/hooks/useDictateInterims.d.ts.map +1 -0
  173. package/lib/hooks/useDictateInterims.js +16 -0
  174. package/lib/hooks/useDictateState.d.ts +2 -0
  175. package/lib/hooks/useDictateState.d.ts.map +1 -0
  176. package/lib/hooks/useDictateState.js +15 -0
  177. package/lib/hooks/useDirection.d.ts +2 -0
  178. package/lib/hooks/useDirection.d.ts.map +1 -0
  179. package/lib/hooks/useDirection.js +38 -0
  180. package/lib/hooks/useDisabled.d.ts +2 -0
  181. package/lib/hooks/useDisabled.d.ts.map +1 -0
  182. package/lib/hooks/useDisabled.js +12 -0
  183. package/lib/hooks/useDismissNotification.d.ts +2 -0
  184. package/lib/hooks/useDismissNotification.d.ts.map +1 -0
  185. package/lib/hooks/useDismissNotification.js +12 -0
  186. package/lib/hooks/useEmitTypingIndicator.d.ts +2 -0
  187. package/lib/hooks/useEmitTypingIndicator.d.ts.map +1 -0
  188. package/lib/hooks/useEmitTypingIndicator.js +12 -0
  189. package/lib/hooks/useGetActivitiesByKey.d.ts +3 -0
  190. package/lib/hooks/useGetActivitiesByKey.d.ts.map +1 -0
  191. package/lib/hooks/useGetActivitiesByKey.js +11 -0
  192. package/lib/hooks/useGetActivityByKey.d.ts +3 -0
  193. package/lib/hooks/useGetActivityByKey.d.ts.map +1 -0
  194. package/lib/hooks/useGetActivityByKey.js +11 -0
  195. package/lib/hooks/useGetHasAcknowledgedByActivityKey.d.ts +3 -0
  196. package/lib/hooks/useGetHasAcknowledgedByActivityKey.d.ts.map +1 -0
  197. package/lib/hooks/useGetHasAcknowledgedByActivityKey.js +11 -0
  198. package/lib/hooks/useGetKeyByActivity.d.ts +3 -0
  199. package/lib/hooks/useGetKeyByActivity.d.ts.map +1 -0
  200. package/lib/hooks/useGetKeyByActivity.js +11 -0
  201. package/lib/hooks/useGetKeyByActivityId.d.ts +3 -0
  202. package/lib/hooks/useGetKeyByActivityId.d.ts.map +1 -0
  203. package/lib/hooks/useGetKeyByActivityId.js +11 -0
  204. package/lib/hooks/useGetSendTimeoutForActivity.d.ts +5 -0
  205. package/lib/hooks/useGetSendTimeoutForActivity.d.ts.map +1 -0
  206. package/lib/hooks/useGetSendTimeoutForActivity.js +33 -0
  207. package/lib/hooks/useGrammars.d.ts +2 -0
  208. package/lib/hooks/useGrammars.d.ts.map +1 -0
  209. package/lib/hooks/useGrammars.js +12 -0
  210. package/lib/hooks/useGroupActivities.d.ts +8 -0
  211. package/lib/hooks/useGroupActivities.d.ts.map +1 -0
  212. package/lib/hooks/useGroupActivities.js +12 -0
  213. package/lib/hooks/useGroupTimestamp.d.ts +2 -0
  214. package/lib/hooks/useGroupTimestamp.d.ts.map +1 -0
  215. package/lib/hooks/useGroupTimestamp.js +21 -0
  216. package/lib/hooks/useLanguage.d.ts +2 -0
  217. package/lib/hooks/useLanguage.d.ts.map +1 -0
  218. package/lib/hooks/useLanguage.js +19 -0
  219. package/lib/hooks/useLastAcknowledgedActivityKey.d.ts +3 -0
  220. package/lib/hooks/useLastAcknowledgedActivityKey.d.ts.map +1 -0
  221. package/lib/hooks/useLastAcknowledgedActivityKey.js +11 -0
  222. package/lib/hooks/useLastReadActivityKey.d.ts +3 -0
  223. package/lib/hooks/useLastReadActivityKey.d.ts.map +1 -0
  224. package/lib/hooks/useLastReadActivityKey.js +11 -0
  225. package/lib/hooks/useLocalizer.d.ts +13 -0
  226. package/lib/hooks/useLocalizer.d.ts.map +1 -0
  227. package/lib/hooks/useLocalizer.js +75 -0
  228. package/lib/hooks/useMarkActivityAsSpoken.d.ts +3 -0
  229. package/lib/hooks/useMarkActivityAsSpoken.d.ts.map +1 -0
  230. package/lib/hooks/useMarkActivityAsSpoken.js +16 -0
  231. package/lib/hooks/useMarkActivityKeyAsRead.d.ts +3 -0
  232. package/lib/hooks/useMarkActivityKeyAsRead.d.ts.map +1 -0
  233. package/lib/hooks/useMarkActivityKeyAsRead.js +11 -0
  234. package/lib/hooks/useMarkAllAsAcknowledged.d.ts +3 -0
  235. package/lib/hooks/useMarkAllAsAcknowledged.d.ts.map +1 -0
  236. package/lib/hooks/useMarkAllAsAcknowledged.js +11 -0
  237. package/lib/hooks/useNotifications.d.ts +3 -0
  238. package/lib/hooks/useNotifications.d.ts.map +1 -0
  239. package/lib/hooks/useNotifications.js +14 -0
  240. package/lib/hooks/usePerformCardAction.d.ts +3 -0
  241. package/lib/hooks/usePerformCardAction.d.ts.map +1 -0
  242. package/lib/hooks/usePerformCardAction.js +12 -0
  243. package/lib/hooks/usePonyfill.d.ts +3 -0
  244. package/lib/hooks/usePonyfill.d.ts.map +1 -0
  245. package/lib/hooks/usePonyfill.js +11 -0
  246. package/lib/hooks/usePostActivity.d.ts +3 -0
  247. package/lib/hooks/usePostActivity.d.ts.map +1 -0
  248. package/lib/hooks/usePostActivity.js +12 -0
  249. package/lib/hooks/useReferenceGrammarID.d.ts +2 -0
  250. package/lib/hooks/useReferenceGrammarID.d.ts.map +1 -0
  251. package/lib/hooks/useReferenceGrammarID.js +14 -0
  252. package/lib/hooks/useRelativeTimeFormatter.d.ts +2 -0
  253. package/lib/hooks/useRelativeTimeFormatter.d.ts.map +1 -0
  254. package/lib/hooks/useRelativeTimeFormatter.js +61 -0
  255. package/lib/hooks/useRenderAttachment.d.ts +3 -0
  256. package/lib/hooks/useRenderAttachment.d.ts.map +1 -0
  257. package/lib/hooks/useRenderAttachment.js +14 -0
  258. package/lib/hooks/useRenderToast.d.ts +3 -0
  259. package/lib/hooks/useRenderToast.d.ts.map +1 -0
  260. package/lib/hooks/useRenderToast.js +12 -0
  261. package/lib/hooks/useRenderTypingIndicator.d.ts +3 -0
  262. package/lib/hooks/useRenderTypingIndicator.d.ts.map +1 -0
  263. package/lib/hooks/useRenderTypingIndicator.js +12 -0
  264. package/lib/hooks/useSendBoxAttachments.d.ts +6 -0
  265. package/lib/hooks/useSendBoxAttachments.d.ts.map +1 -0
  266. package/lib/hooks/useSendBoxAttachments.js +23 -0
  267. package/lib/hooks/useSendBoxValue.d.ts +2 -0
  268. package/lib/hooks/useSendBoxValue.d.ts.map +1 -0
  269. package/lib/hooks/useSendBoxValue.js +16 -0
  270. package/lib/hooks/useSendEvent.d.ts +2 -0
  271. package/lib/hooks/useSendEvent.d.ts.map +1 -0
  272. package/lib/hooks/useSendEvent.js +12 -0
  273. package/lib/hooks/useSendFiles.d.ts +10 -0
  274. package/lib/hooks/useSendFiles.d.ts.map +1 -0
  275. package/lib/hooks/useSendFiles.js +35 -0
  276. package/lib/hooks/useSendMessage.d.ts +6 -0
  277. package/lib/hooks/useSendMessage.d.ts.map +1 -0
  278. package/lib/hooks/useSendMessage.js +33 -0
  279. package/lib/hooks/useSendMessageBack.d.ts +2 -0
  280. package/lib/hooks/useSendMessageBack.d.ts.map +1 -0
  281. package/lib/hooks/useSendMessageBack.js +12 -0
  282. package/lib/hooks/useSendPostBack.d.ts +2 -0
  283. package/lib/hooks/useSendPostBack.d.ts.map +1 -0
  284. package/lib/hooks/useSendPostBack.js +12 -0
  285. package/lib/hooks/useSendStatusByActivityKey.d.ts +22 -0
  286. package/lib/hooks/useSendStatusByActivityKey.d.ts.map +1 -0
  287. package/lib/hooks/useSendStatusByActivityKey.js +31 -0
  288. package/lib/hooks/useSendTimeoutForActivity.d.ts +4 -0
  289. package/lib/hooks/useSendTimeoutForActivity.d.ts.map +1 -0
  290. package/lib/hooks/useSendTimeoutForActivity.js +22 -0
  291. package/lib/hooks/useSendTypingIndicator.d.ts +2 -0
  292. package/lib/hooks/useSendTypingIndicator.d.ts.map +1 -0
  293. package/lib/hooks/useSendTypingIndicator.js +14 -0
  294. package/lib/hooks/useSetNotification.d.ts +3 -0
  295. package/lib/hooks/useSetNotification.d.ts.map +1 -0
  296. package/lib/hooks/useSetNotification.js +12 -0
  297. package/lib/hooks/useShouldSpeakIncomingActivity.d.ts +2 -0
  298. package/lib/hooks/useShouldSpeakIncomingActivity.d.ts.map +1 -0
  299. package/lib/hooks/useShouldSpeakIncomingActivity.js +22 -0
  300. package/lib/hooks/useStartDictate.d.ts +2 -0
  301. package/lib/hooks/useStartDictate.d.ts.map +1 -0
  302. package/lib/hooks/useStartDictate.js +12 -0
  303. package/lib/hooks/useStopDictate.d.ts +2 -0
  304. package/lib/hooks/useStopDictate.d.ts.map +1 -0
  305. package/lib/hooks/useStopDictate.js +12 -0
  306. package/lib/hooks/useStyleOptions.d.ts +3 -0
  307. package/lib/hooks/useStyleOptions.d.ts.map +1 -0
  308. package/lib/hooks/useStyleOptions.js +12 -0
  309. package/lib/hooks/useSubmitSendBox.d.ts +4 -0
  310. package/lib/hooks/useSubmitSendBox.d.ts.map +1 -0
  311. package/lib/hooks/useSubmitSendBox.js +49 -0
  312. package/lib/hooks/useSuggestedActions.d.ts +3 -0
  313. package/lib/hooks/useSuggestedActions.d.ts.map +1 -0
  314. package/lib/hooks/useSuggestedActions.js +25 -0
  315. package/lib/hooks/useTimeoutForSend.d.ts +3 -0
  316. package/lib/hooks/useTimeoutForSend.d.ts.map +1 -0
  317. package/lib/hooks/useTimeoutForSend.js +21 -0
  318. package/lib/hooks/useTrackDimension.d.ts +2 -0
  319. package/lib/hooks/useTrackDimension.d.ts.map +1 -0
  320. package/lib/hooks/useTrackDimension.js +14 -0
  321. package/lib/hooks/useTrackEvent.d.ts +10 -0
  322. package/lib/hooks/useTrackEvent.d.ts.map +1 -0
  323. package/lib/hooks/useTrackEvent.js +51 -0
  324. package/lib/hooks/useTrackException.d.ts +2 -0
  325. package/lib/hooks/useTrackException.d.ts.map +1 -0
  326. package/lib/hooks/useTrackException.js +31 -0
  327. package/lib/hooks/useTrackTiming.d.ts +2 -0
  328. package/lib/hooks/useTrackTiming.d.ts.map +1 -0
  329. package/lib/hooks/useTrackTiming.js +93 -0
  330. package/lib/hooks/useUserID.d.ts +2 -0
  331. package/lib/hooks/useUserID.d.ts.map +1 -0
  332. package/lib/hooks/useUserID.js +12 -0
  333. package/lib/hooks/useUsername.d.ts +2 -0
  334. package/lib/hooks/useUsername.d.ts.map +1 -0
  335. package/lib/hooks/useUsername.js +12 -0
  336. package/lib/hooks/useVoiceSelector.d.ts +2 -0
  337. package/lib/hooks/useVoiceSelector.d.ts.map +1 -0
  338. package/lib/hooks/useVoiceSelector.js +16 -0
  339. package/lib/hooks/utils/ErrorBoundary.js +68 -0
  340. package/lib/hooks/utils/observableToPromise.d.ts +3 -0
  341. package/lib/hooks/utils/observableToPromise.d.ts.map +1 -0
  342. package/lib/hooks/utils/observableToPromise.js +28 -0
  343. package/lib/index.d.ts +37 -0
  344. package/lib/index.d.ts.map +1 -0
  345. package/lib/index.js +88 -0
  346. package/lib/internal.d.ts +3 -0
  347. package/lib/internal.d.ts.map +1 -0
  348. package/lib/internal.js +14 -0
  349. package/lib/localization/Localize.d.ts +4 -0
  350. package/lib/localization/Localize.d.ts.map +1 -0
  351. package/lib/localization/Localize.js +50 -0
  352. package/lib/localization/ar-EG.json +42 -0
  353. package/lib/localization/ar-JO.json +45 -0
  354. package/lib/localization/ar-SA.json +112 -0
  355. package/lib/localization/bg-BG.json +112 -0
  356. package/lib/localization/ca-ES.json +112 -0
  357. package/lib/localization/cs-CZ.json +112 -0
  358. package/lib/localization/da-DK.json +112 -0
  359. package/lib/localization/de-DE.json +112 -0
  360. package/lib/localization/el-GR.json +112 -0
  361. package/lib/localization/en-US.json +183 -0
  362. package/lib/localization/es-ES.json +112 -0
  363. package/lib/localization/et-EE.json +112 -0
  364. package/lib/localization/eu-ES.json +112 -0
  365. package/lib/localization/fi-FI.json +112 -0
  366. package/lib/localization/fr-FR.json +112 -0
  367. package/lib/localization/getAllLocalizedStrings.d.ts +6 -0
  368. package/lib/localization/getAllLocalizedStrings.d.ts.map +1 -0
  369. package/lib/localization/getAllLocalizedStrings.js +117 -0
  370. package/lib/localization/getRTLList.d.ts +2 -0
  371. package/lib/localization/getRTLList.d.ts.map +1 -0
  372. package/lib/localization/getRTLList.js +46 -0
  373. package/lib/localization/gl-ES.json +112 -0
  374. package/lib/localization/he-IL.json +112 -0
  375. package/lib/localization/hi-IN.json +112 -0
  376. package/lib/localization/hr-HR.json +112 -0
  377. package/lib/localization/hu-HU.json +112 -0
  378. package/lib/localization/id-ID.json +112 -0
  379. package/lib/localization/it-IT.json +112 -0
  380. package/lib/localization/ja-JP.json +112 -0
  381. package/lib/localization/kk-KZ.json +112 -0
  382. package/lib/localization/ko-KR.json +112 -0
  383. package/lib/localization/lt-LT.json +112 -0
  384. package/lib/localization/lv-LV.json +112 -0
  385. package/lib/localization/mergeLocalizedStrings.d.ts +7 -0
  386. package/lib/localization/mergeLocalizedStrings.d.ts.map +1 -0
  387. package/lib/localization/mergeLocalizedStrings.js +49 -0
  388. package/lib/localization/ms-MY.json +112 -0
  389. package/lib/localization/nb-NO.json +112 -0
  390. package/lib/localization/nl-NL.json +112 -0
  391. package/lib/localization/overrides.json +257 -0
  392. package/lib/localization/pl-PL.json +112 -0
  393. package/lib/localization/pt-BR.json +112 -0
  394. package/lib/localization/pt-PT.json +112 -0
  395. package/lib/localization/ro-RO.json +112 -0
  396. package/lib/localization/ru-RU.json +112 -0
  397. package/lib/localization/sk-SK.json +112 -0
  398. package/lib/localization/sl-SI.json +112 -0
  399. package/lib/localization/sl-SL.json +3 -0
  400. package/lib/localization/sr-Cyrl-CS.json +112 -0
  401. package/lib/localization/sr-Cyrl.json +3 -0
  402. package/lib/localization/sr-Latn-CS.json +112 -0
  403. package/lib/localization/sr-Latn.json +3 -0
  404. package/lib/localization/sv-SE.json +112 -0
  405. package/lib/localization/th-TH.json +112 -0
  406. package/lib/localization/tr-TR.json +112 -0
  407. package/lib/localization/uk-UA.json +112 -0
  408. package/lib/localization/vi-VN.json +112 -0
  409. package/lib/localization/yue.json +115 -0
  410. package/lib/localization/zh-CN.json +112 -0
  411. package/lib/localization/zh-HK.json +112 -0
  412. package/lib/localization/zh-TW.json +112 -0
  413. package/lib/normalizeStyleOptions.d.ts +3 -0
  414. package/lib/normalizeStyleOptions.d.ts.map +1 -0
  415. package/lib/normalizeStyleOptions.js +147 -0
  416. package/lib/patchStyleOptionsFromDeprecatedProps.js +21 -0
  417. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.d.ts +6 -0
  418. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.d.ts.map +1 -0
  419. package/lib/providers/ActivityAcknowledgement/ActivityAcknowledgementComposer.js +153 -0
  420. package/lib/providers/ActivityAcknowledgement/private/Context.d.ts +13 -0
  421. package/lib/providers/ActivityAcknowledgement/private/Context.d.ts.map +1 -0
  422. package/lib/providers/ActivityAcknowledgement/private/Context.js +14 -0
  423. package/lib/providers/ActivityAcknowledgement/private/useContext.d.ts +3 -0
  424. package/lib/providers/ActivityAcknowledgement/private/useContext.d.ts.map +1 -0
  425. package/lib/providers/ActivityAcknowledgement/private/useContext.js +18 -0
  426. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.d.ts +5 -0
  427. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.d.ts.map +1 -0
  428. package/lib/providers/ActivityAcknowledgement/useActivityKeysByRead.js +15 -0
  429. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.d.ts +2 -0
  430. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.d.ts.map +1 -0
  431. package/lib/providers/ActivityAcknowledgement/useGetHasAcknowledgedByActivityKey.js +12 -0
  432. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.d.ts +2 -0
  433. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.d.ts.map +1 -0
  434. package/lib/providers/ActivityAcknowledgement/useLastAcknowledgedActivityKey.js +12 -0
  435. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.d.ts +2 -0
  436. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.d.ts.map +1 -0
  437. package/lib/providers/ActivityAcknowledgement/useLastReadActivityKey.js +12 -0
  438. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.d.ts +2 -0
  439. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.d.ts.map +1 -0
  440. package/lib/providers/ActivityAcknowledgement/useMarkActivityKeyAsRead.js +12 -0
  441. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.d.ts +2 -0
  442. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.d.ts.map +1 -0
  443. package/lib/providers/ActivityAcknowledgement/useMarkAllAsAcknowledged.js +12 -0
  444. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.d.ts +20 -0
  445. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.d.ts.map +1 -0
  446. package/lib/providers/ActivityKeyer/ActivityKeyerComposer.js +149 -0
  447. package/lib/providers/ActivityKeyer/private/Context.d.ts +13 -0
  448. package/lib/providers/ActivityKeyer/private/Context.d.ts.map +1 -0
  449. package/lib/providers/ActivityKeyer/private/Context.js +10 -0
  450. package/lib/providers/ActivityKeyer/private/getActivityId.d.ts +3 -0
  451. package/lib/providers/ActivityKeyer/private/getActivityId.d.ts.map +1 -0
  452. package/lib/providers/ActivityKeyer/private/getActivityId.js +10 -0
  453. package/lib/providers/ActivityKeyer/private/getClientActivityId.d.ts +3 -0
  454. package/lib/providers/ActivityKeyer/private/getClientActivityId.d.ts.map +1 -0
  455. package/lib/providers/ActivityKeyer/private/getClientActivityId.js +11 -0
  456. package/lib/providers/ActivityKeyer/private/lastOf.d.ts +2 -0
  457. package/lib/providers/ActivityKeyer/private/lastOf.d.ts.map +1 -0
  458. package/lib/providers/ActivityKeyer/private/lastOf.js +10 -0
  459. package/lib/providers/ActivityKeyer/private/lastOf.spec.d.ts +2 -0
  460. package/lib/providers/ActivityKeyer/private/lastOf.spec.d.ts.map +1 -0
  461. package/lib/providers/ActivityKeyer/private/someIterable.d.ts +2 -0
  462. package/lib/providers/ActivityKeyer/private/someIterable.d.ts.map +1 -0
  463. package/lib/providers/ActivityKeyer/private/someIterable.js +27 -0
  464. package/lib/providers/ActivityKeyer/private/someIterable.spec.d.ts +2 -0
  465. package/lib/providers/ActivityKeyer/private/someIterable.spec.d.ts.map +1 -0
  466. package/lib/providers/ActivityKeyer/private/uniqueId.d.ts +2 -0
  467. package/lib/providers/ActivityKeyer/private/uniqueId.d.ts.map +1 -0
  468. package/lib/providers/ActivityKeyer/private/uniqueId.js +15 -0
  469. package/lib/providers/ActivityKeyer/private/useContext.d.ts +3 -0
  470. package/lib/providers/ActivityKeyer/private/useContext.d.ts.map +1 -0
  471. package/lib/providers/ActivityKeyer/private/useContext.js +18 -0
  472. package/lib/providers/ActivityKeyer/useActivityKeys.d.ts +2 -0
  473. package/lib/providers/ActivityKeyer/useActivityKeys.d.ts.map +1 -0
  474. package/lib/providers/ActivityKeyer/useActivityKeys.js +12 -0
  475. package/lib/providers/ActivityKeyer/useGetActivitiesByKey.d.ts +3 -0
  476. package/lib/providers/ActivityKeyer/useGetActivitiesByKey.d.ts.map +1 -0
  477. package/lib/providers/ActivityKeyer/useGetActivitiesByKey.js +12 -0
  478. package/lib/providers/ActivityKeyer/useGetActivityByKey.d.ts +3 -0
  479. package/lib/providers/ActivityKeyer/useGetActivityByKey.d.ts.map +1 -0
  480. package/lib/providers/ActivityKeyer/useGetActivityByKey.js +12 -0
  481. package/lib/providers/ActivityKeyer/useGetKeyByActivity.d.ts +3 -0
  482. package/lib/providers/ActivityKeyer/useGetKeyByActivity.d.ts.map +1 -0
  483. package/lib/providers/ActivityKeyer/useGetKeyByActivity.js +12 -0
  484. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.d.ts +2 -0
  485. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.d.ts.map +1 -0
  486. package/lib/providers/ActivityKeyer/useGetKeyByActivityId.js +12 -0
  487. package/lib/providers/ActivityListener/ActivityListenerComposer.d.ts +7 -0
  488. package/lib/providers/ActivityListener/ActivityListenerComposer.d.ts.map +1 -0
  489. package/lib/providers/ActivityListener/ActivityListenerComposer.js +55 -0
  490. package/lib/providers/ActivityListener/private/Context.d.ts +8 -0
  491. package/lib/providers/ActivityListener/private/Context.d.ts.map +1 -0
  492. package/lib/providers/ActivityListener/private/Context.js +15 -0
  493. package/lib/providers/ActivityListener/private/useContext.d.ts +2 -0
  494. package/lib/providers/ActivityListener/private/useContext.d.ts.map +1 -0
  495. package/lib/providers/ActivityListener/private/useContext.js +13 -0
  496. package/lib/providers/ActivityListener/useUpsertedActivities.d.ts +3 -0
  497. package/lib/providers/ActivityListener/useUpsertedActivities.d.ts.map +1 -0
  498. package/lib/providers/ActivityListener/useUpsertedActivities.js +12 -0
  499. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.d.ts +4 -0
  500. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.d.ts.map +1 -0
  501. package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.js +149 -0
  502. package/lib/providers/ActivitySendStatus/private/Context.d.ts +9 -0
  503. package/lib/providers/ActivitySendStatus/private/Context.d.ts.map +1 -0
  504. package/lib/providers/ActivitySendStatus/private/Context.js +13 -0
  505. package/lib/providers/ActivitySendStatus/private/isMapEqual.d.ts +7 -0
  506. package/lib/providers/ActivitySendStatus/private/isMapEqual.d.ts.map +1 -0
  507. package/lib/providers/ActivitySendStatus/private/isMapEqual.js +55 -0
  508. package/lib/providers/ActivitySendStatus/private/useContext.d.ts +3 -0
  509. package/lib/providers/ActivitySendStatus/private/useContext.d.ts.map +1 -0
  510. package/lib/providers/ActivitySendStatus/private/useContext.js +18 -0
  511. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.d.ts +22 -0
  512. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.d.ts.map +1 -0
  513. package/lib/providers/ActivitySendStatus/useSendStatusByActivityKey.js +31 -0
  514. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.d.ts +3 -0
  515. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.d.ts.map +1 -0
  516. package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.js +71 -0
  517. package/lib/providers/ActivityTyping/ActivityTypingComposer.d.ts +9 -0
  518. package/lib/providers/ActivityTyping/ActivityTypingComposer.d.ts.map +1 -0
  519. package/lib/providers/ActivityTyping/ActivityTypingComposer.js +98 -0
  520. package/lib/providers/ActivityTyping/private/Context.d.ts +8 -0
  521. package/lib/providers/ActivityTyping/private/Context.d.ts.map +1 -0
  522. package/lib/providers/ActivityTyping/private/Context.js +15 -0
  523. package/lib/providers/ActivityTyping/private/useContext.d.ts +3 -0
  524. package/lib/providers/ActivityTyping/private/useContext.d.ts.map +1 -0
  525. package/lib/providers/ActivityTyping/private/useContext.js +13 -0
  526. package/lib/providers/ActivityTyping/private/useMemoWithPrevious.d.ts +3 -0
  527. package/lib/providers/ActivityTyping/private/useMemoWithPrevious.d.ts.map +1 -0
  528. package/lib/providers/ActivityTyping/private/useMemoWithPrevious.js +22 -0
  529. package/lib/providers/ActivityTyping/types/AllTyping.d.ts +9 -0
  530. package/lib/providers/ActivityTyping/types/AllTyping.d.ts.map +1 -0
  531. package/lib/providers/ActivityTyping/types/AllTyping.js +2 -0
  532. package/lib/providers/ActivityTyping/useAllTyping.d.ts +3 -0
  533. package/lib/providers/ActivityTyping/useAllTyping.d.ts.map +1 -0
  534. package/lib/providers/ActivityTyping/useAllTyping.js +12 -0
  535. package/lib/providers/Ponyfill/PonyfillComposer.d.ts +17 -0
  536. package/lib/providers/Ponyfill/PonyfillComposer.d.ts.map +1 -0
  537. package/lib/providers/Ponyfill/PonyfillComposer.js +87 -0
  538. package/lib/providers/Ponyfill/private/PonyfillContext.d.ts +8 -0
  539. package/lib/providers/Ponyfill/private/PonyfillContext.d.ts.map +1 -0
  540. package/lib/providers/Ponyfill/private/PonyfillContext.js +10 -0
  541. package/lib/providers/Ponyfill/private/useContext.d.ts +6 -0
  542. package/lib/providers/Ponyfill/private/useContext.d.ts.map +1 -0
  543. package/lib/providers/Ponyfill/private/useContext.js +17 -0
  544. package/lib/providers/Ponyfill/usePonyfill.d.ts +3 -0
  545. package/lib/providers/Ponyfill/usePonyfill.d.ts.map +1 -0
  546. package/lib/providers/Ponyfill/usePonyfill.js +12 -0
  547. package/lib/tsconfig.json +18 -0
  548. package/lib/types/ActivityMiddleware.d.ts +24 -0
  549. package/lib/types/ActivityMiddleware.d.ts.map +1 -0
  550. package/lib/types/ActivityMiddleware.js +2 -0
  551. package/lib/types/ActivityStatusMiddleware.d.ts +17 -0
  552. package/lib/types/ActivityStatusMiddleware.d.ts.map +1 -0
  553. package/lib/types/ActivityStatusMiddleware.js +2 -0
  554. package/lib/types/AttachmentForScreenReaderMiddleware.d.ts +14 -0
  555. package/lib/types/AttachmentForScreenReaderMiddleware.d.ts.map +1 -0
  556. package/lib/types/AttachmentForScreenReaderMiddleware.js +2 -0
  557. package/lib/types/AttachmentMiddleware.d.ts +12 -0
  558. package/lib/types/AttachmentMiddleware.d.ts.map +1 -0
  559. package/lib/types/AttachmentMiddleware.js +2 -0
  560. package/lib/types/AvatarMiddleware.d.ts +15 -0
  561. package/lib/types/AvatarMiddleware.d.ts.map +1 -0
  562. package/lib/types/AvatarMiddleware.js +2 -0
  563. package/lib/types/CardActionMiddleware.d.ts +19 -0
  564. package/lib/types/CardActionMiddleware.d.ts.map +1 -0
  565. package/lib/types/CardActionMiddleware.js +2 -0
  566. package/lib/types/ComponentMiddleware.d.ts +31 -0
  567. package/lib/types/ComponentMiddleware.d.ts.map +1 -0
  568. package/lib/types/ComponentMiddleware.js +2 -0
  569. package/lib/types/ContextOf.d.ts +4 -0
  570. package/lib/types/ContextOf.d.ts.map +1 -0
  571. package/lib/types/ContextOf.js +2 -0
  572. package/lib/types/FunctionMiddleware.d.ts +6 -0
  573. package/lib/types/FunctionMiddleware.d.ts.map +1 -0
  574. package/lib/types/FunctionMiddleware.js +2 -0
  575. package/lib/types/GroupActivitiesMiddleware.d.ts +22 -0
  576. package/lib/types/GroupActivitiesMiddleware.d.ts.map +1 -0
  577. package/lib/types/GroupActivitiesMiddleware.js +2 -0
  578. package/lib/types/LocalizedStrings.d.ts +5 -0
  579. package/lib/types/LocalizedStrings.d.ts.map +1 -0
  580. package/lib/types/LocalizedStrings.js +2 -0
  581. package/lib/types/Notification.d.ts +10 -0
  582. package/lib/types/Notification.d.ts.map +1 -0
  583. package/lib/types/Notification.js +2 -0
  584. package/lib/types/PrecompiledGlobalize.d.ts +13 -0
  585. package/lib/types/PrecompiledGlobalize.d.ts.map +1 -0
  586. package/lib/types/PrecompiledGlobalize.js +2 -0
  587. package/lib/types/ScrollToEndButtonMiddleware.d.ts +30 -0
  588. package/lib/types/ScrollToEndButtonMiddleware.d.ts.map +1 -0
  589. package/lib/types/ScrollToEndButtonMiddleware.js +2 -0
  590. package/lib/types/SendStatus.d.ts +3 -0
  591. package/lib/types/SendStatus.d.ts.map +1 -0
  592. package/lib/types/SendStatus.js +2 -0
  593. package/lib/types/TelemetryMeasurementEvent.d.ts +31 -0
  594. package/lib/types/TelemetryMeasurementEvent.d.ts.map +1 -0
  595. package/lib/types/TelemetryMeasurementEvent.js +2 -0
  596. package/lib/types/ToastMiddleware.d.ts +11 -0
  597. package/lib/types/ToastMiddleware.d.ts.map +1 -0
  598. package/lib/types/ToastMiddleware.js +2 -0
  599. package/lib/types/Typing.d.ts +8 -0
  600. package/lib/types/Typing.d.ts.map +1 -0
  601. package/lib/types/Typing.js +2 -0
  602. package/lib/types/TypingIndicatorMiddleware.d.ts +17 -0
  603. package/lib/types/TypingIndicatorMiddleware.d.ts.map +1 -0
  604. package/lib/types/TypingIndicatorMiddleware.js +2 -0
  605. package/lib/types/WebSpeechPonyfill.d.ts +19 -0
  606. package/lib/types/WebSpeechPonyfill.d.ts.map +1 -0
  607. package/lib/types/WebSpeechPonyfill.js +2 -0
  608. package/lib/types/WebSpeechPonyfillFactory.d.ts +6 -0
  609. package/lib/types/WebSpeechPonyfillFactory.d.ts.map +1 -0
  610. package/lib/types/WebSpeechPonyfillFactory.js +2 -0
  611. package/lib/utils/createCustomEvent.d.ts +4 -0
  612. package/lib/utils/createCustomEvent.d.ts.map +1 -0
  613. package/lib/utils/createCustomEvent.js +34 -0
  614. package/lib/utils/findLastIndex.d.ts +2 -0
  615. package/lib/utils/findLastIndex.d.ts.map +1 -0
  616. package/lib/utils/findLastIndex.js +22 -0
  617. package/lib/utils/findMin.d.ts +7 -0
  618. package/lib/utils/findMin.d.ts.map +1 -0
  619. package/lib/utils/findMin.js +46 -0
  620. package/lib/utils/freezeArray.d.ts +8 -0
  621. package/lib/utils/freezeArray.d.ts.map +1 -0
  622. package/lib/utils/freezeArray.js +19 -0
  623. package/lib/utils/isObject.js +12 -0
  624. package/lib/utils/mapMap.d.ts +6 -0
  625. package/lib/utils/mapMap.d.ts.map +1 -0
  626. package/lib/utils/mapMap.js +27 -0
  627. package/lib/utils/normalizeLanguage.d.ts +2 -0
  628. package/lib/utils/normalizeLanguage.d.ts.map +1 -0
  629. package/lib/utils/normalizeLanguage.js +115 -0
  630. package/lib/utils/randomId.d.ts +2 -0
  631. package/lib/utils/randomId.d.ts.map +1 -0
  632. package/lib/utils/randomId.js +15 -0
  633. package/lib/utils/warnOnce.d.ts +2 -0
  634. package/lib/utils/warnOnce.d.ts.map +1 -0
  635. package/lib/utils/warnOnce.js +16 -0
  636. package/package.json +90 -158
  637. package/src/StyleOptions.ts +285 -400
  638. package/src/decorator/index.ts +4 -0
  639. package/src/decorator/private/ActivityBorderDecoratorMiddleware.ts +31 -0
  640. package/src/decorator/private/ActivityDecorator.tsx +31 -0
  641. package/src/decorator/private/DecoratorComposer.tsx +6 -0
  642. package/src/decorator/private/activityDecoratorRequest.ts +6 -0
  643. package/src/decorator/private/createDecoratorComposer.tsx +36 -0
  644. package/src/{middleware → decorator}/private/templateMiddleware.test.tsx +17 -19
  645. package/src/decorator/private/templateMiddleware.ts +58 -0
  646. package/src/defaultStyleOptions.ts +23 -40
  647. package/src/hooks/Composer.tsx +142 -204
  648. package/src/hooks/index.ts +2 -19
  649. package/src/hooks/internal/ErrorBox.js +34 -0
  650. package/src/hooks/internal/SendBoxMiddleware.ts +21 -0
  651. package/src/hooks/internal/SendBoxToolbarMiddleware.ts +21 -0
  652. package/src/hooks/internal/Tracker.ts +1 -1
  653. package/src/hooks/internal/WebChatAPIContext.ts +12 -7
  654. package/src/hooks/internal/WebChatReduxContext.js +2 -3
  655. package/src/hooks/internal/private/templateMiddleware.ts +4 -0
  656. package/src/hooks/internal/useCreateActivityRendererInternal.ts +46 -0
  657. package/src/hooks/internal/useDebugDeps.js +30 -0
  658. package/src/hooks/internal/useErrorBoxClass.js +7 -0
  659. package/src/hooks/middleware/UserlandBoundary.js +2 -2
  660. package/src/hooks/middleware/applyMiddleware.js +5 -5
  661. package/src/hooks/middleware/concatMiddleware.spec.js +0 -20
  662. package/src/hooks/middleware/concatMiddleware.ts +6 -7
  663. package/src/hooks/middleware/createDefaultGroupActivitiesMiddleware.ts +75 -0
  664. package/src/hooks/private/reduceIterable.spec.ts +2 -0
  665. package/src/hooks/useActiveTyping.ts +2 -3
  666. package/src/hooks/useActivities.ts +3 -62
  667. package/src/hooks/useCreateActivityRenderer.ts +6 -27
  668. package/src/hooks/useCreateActivityStatusRenderer.tsx +33 -13
  669. package/src/hooks/useCreateAvatarRenderer.ts +33 -19
  670. package/src/hooks/useDebouncedNotifications.spec.js +0 -1
  671. package/src/hooks/useDisabled.ts +2 -8
  672. package/src/hooks/useGroupActivities.ts +10 -0
  673. package/src/hooks/useLocalizer.ts +3 -3
  674. package/src/hooks/useRenderAttachment.ts +2 -2
  675. package/src/hooks/useSendBoxAttachments.ts +0 -2
  676. package/src/hooks/useSendFiles.ts +1 -1
  677. package/src/hooks/useSendTimeoutForActivity.ts +0 -2
  678. package/src/hooks/useStyleOptions.ts +6 -1
  679. package/src/hooks/useSuggestedActions.ts +23 -9
  680. package/src/hooks/useTrackEvent.ts +3 -3
  681. package/src/index.ts +94 -52
  682. package/src/internal.ts +3 -0
  683. package/src/localization/ar-SA.json +111 -134
  684. package/src/localization/bg-BG.json +111 -134
  685. package/src/localization/ca-ES.json +111 -134
  686. package/src/localization/cs-CZ.json +111 -134
  687. package/src/localization/da-DK.json +111 -134
  688. package/src/localization/de-DE.json +111 -134
  689. package/src/localization/el-GR.json +111 -134
  690. package/src/localization/en-US.json +19 -45
  691. package/src/localization/es-ES.json +111 -134
  692. package/src/localization/et-EE.json +111 -134
  693. package/src/localization/eu-ES.json +111 -134
  694. package/src/localization/fi-FI.json +111 -134
  695. package/src/localization/fr-FR.json +111 -134
  696. package/src/localization/gl-ES.json +111 -134
  697. package/src/localization/he-IL.json +111 -134
  698. package/src/localization/hi-IN.json +111 -134
  699. package/src/localization/hr-HR.json +111 -134
  700. package/src/localization/hu-HU.json +111 -134
  701. package/src/localization/id-ID.json +111 -134
  702. package/src/localization/it-IT.json +111 -134
  703. package/src/localization/ja-JP.json +111 -134
  704. package/src/localization/kk-KZ.json +111 -134
  705. package/src/localization/ko-KR.json +111 -134
  706. package/src/localization/lt-LT.json +111 -134
  707. package/src/localization/lv-LV.json +111 -134
  708. package/src/localization/ms-MY.json +111 -134
  709. package/src/localization/nb-NO.json +111 -134
  710. package/src/localization/nl-NL.json +111 -134
  711. package/src/localization/pl-PL.json +111 -134
  712. package/src/localization/pt-BR.json +111 -134
  713. package/src/localization/pt-PT.json +111 -134
  714. package/src/localization/ro-RO.json +111 -134
  715. package/src/localization/ru-RU.json +111 -134
  716. package/src/localization/sk-SK.json +111 -134
  717. package/src/localization/sl-SI.json +111 -134
  718. package/src/localization/sr-Cyrl-CS.json +111 -134
  719. package/src/localization/sr-Latn-CS.json +111 -134
  720. package/src/localization/sv-SE.json +111 -134
  721. package/src/localization/th-TH.json +111 -134
  722. package/src/localization/tr-TR.json +111 -134
  723. package/src/localization/uk-UA.json +111 -134
  724. package/src/localization/vi-VN.json +111 -134
  725. package/src/localization/yue.json +16 -5
  726. package/src/localization/zh-CN.json +111 -134
  727. package/src/localization/zh-HK.json +111 -134
  728. package/src/localization/zh-TW.json +111 -134
  729. package/src/normalizeStyleOptions.ts +76 -51
  730. package/src/patchStyleOptionsFromDeprecatedProps.js +14 -0
  731. package/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx +40 -197
  732. package/src/providers/ActivityKeyer/private/someIterable.spec.ts +2 -0
  733. package/src/providers/ActivityListener/ActivityListenerComposer.tsx +1 -1
  734. package/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx +3 -6
  735. package/src/providers/ActivityTyping/ActivityTypingComposer.tsx +59 -145
  736. package/src/providers/ActivityTyping/private/useMemoWithPrevious.ts +17 -0
  737. package/src/tsconfig.json +14 -5
  738. package/src/types/ActivityMiddleware.ts +36 -0
  739. package/src/types/ActivityStatusMiddleware.ts +9 -1
  740. package/src/types/AttachmentForScreenReaderMiddleware.ts +2 -9
  741. package/src/types/AttachmentMiddleware.ts +16 -0
  742. package/src/types/AvatarMiddleware.ts +1 -12
  743. package/src/types/CardActionMiddleware.ts +0 -2
  744. package/src/types/ComponentMiddleware.ts +1 -1
  745. package/src/types/GroupActivitiesMiddleware.ts +11 -7
  746. package/src/utils/isObject.js +5 -0
  747. package/src/utils/warnOnce.ts +10 -0
  748. package/LICENSE +0 -21
  749. package/boot/deprecated/decorator.js +0 -7
  750. package/boot/deprecated/decorator.mjs +0 -5
  751. package/boot/deprecated/graph.js +0 -7
  752. package/boot/deprecated/graph.mjs +0 -5
  753. package/boot/deprecated/hook.js +0 -7
  754. package/boot/deprecated/hook.mjs +0 -5
  755. package/boot/deprecated/internal.js +0 -7
  756. package/boot/deprecated/internal.mjs +0 -5
  757. package/boot/deprecated/middleware.js +0 -7
  758. package/boot/deprecated/middleware.mjs +0 -5
  759. package/dist/StyleOptions-4TkRjGbQ.d.mts +0 -802
  760. package/dist/StyleOptions-4TkRjGbQ.d.ts +0 -802
  761. package/dist/_dtsroll-chunks/B1b7R2eH-avatarMiddleware-CHa011_j.d.ts +0 -109
  762. package/dist/_dtsroll-chunks/CEcj2Npa-botframework-webchat-redux-store.d.ts +0 -16
  763. package/dist/_dtsroll-chunks/CZE5KEv8-botframework-webchat-api-middleware.d.ts +0 -230
  764. package/dist/_dtsroll-chunks/Dtb0H_Ee-handler-chain.d.ts +0 -4
  765. package/dist/_dtsroll-chunks/N-ttGLxs-botframework-webchat-base.utils.d.ts +0 -4
  766. package/dist/_dtsroll-chunks/qKTV3q17-avatarMiddleware-CHa011_j.d.ts +0 -93
  767. package/dist/botframework-webchat-api.d.ts +0 -387
  768. package/dist/botframework-webchat-api.decorator.d.ts +0 -81
  769. package/dist/botframework-webchat-api.decorator.js +0 -2
  770. package/dist/botframework-webchat-api.decorator.js.map +0 -1
  771. package/dist/botframework-webchat-api.graph.d.mts +0 -5
  772. package/dist/botframework-webchat-api.graph.d.ts +0 -2
  773. package/dist/botframework-webchat-api.graph.js +0 -2
  774. package/dist/botframework-webchat-api.graph.js.map +0 -1
  775. package/dist/botframework-webchat-api.graph.mjs +0 -2
  776. package/dist/botframework-webchat-api.hook.d.mts +0 -9
  777. package/dist/botframework-webchat-api.hook.d.ts +0 -9
  778. package/dist/botframework-webchat-api.hook.js +0 -2
  779. package/dist/botframework-webchat-api.hook.js.map +0 -1
  780. package/dist/botframework-webchat-api.hook.mjs +0 -2
  781. package/dist/botframework-webchat-api.hook.mjs.map +0 -1
  782. package/dist/botframework-webchat-api.internal.d.ts +0 -68
  783. package/dist/botframework-webchat-api.internal.js +0 -2
  784. package/dist/botframework-webchat-api.internal.js.map +0 -1
  785. package/dist/botframework-webchat-api.js +0 -2
  786. package/dist/botframework-webchat-api.js.map +0 -1
  787. package/dist/botframework-webchat-api.middleware.d.mts +0 -45
  788. package/dist/botframework-webchat-api.middleware.d.ts +0 -45
  789. package/dist/botframework-webchat-api.middleware.js +0 -2
  790. package/dist/botframework-webchat-api.middleware.js.map +0 -1
  791. package/dist/botframework-webchat-api.middleware.mjs +0 -2
  792. package/dist/botframework-webchat-api.middleware.mjs.map +0 -1
  793. package/dist/chunk-3YCFZWVR.js +0 -2
  794. package/dist/chunk-3YCFZWVR.js.map +0 -1
  795. package/dist/chunk-5HALOM2E.mjs +0 -2
  796. package/dist/chunk-5HALOM2E.mjs.map +0 -1
  797. package/dist/chunk-5JETBPYY.mjs +0 -2
  798. package/dist/chunk-5JETBPYY.mjs.map +0 -1
  799. package/dist/chunk-5X4VJZOM.js +0 -2
  800. package/dist/chunk-5X4VJZOM.js.map +0 -1
  801. package/dist/chunk-7GV72C4W.js +0 -2
  802. package/dist/chunk-7GV72C4W.js.map +0 -1
  803. package/dist/chunk-A6GQOZT3.js +0 -2
  804. package/dist/chunk-A6GQOZT3.js.map +0 -1
  805. package/dist/chunk-C4R6NR53.mjs +0 -2
  806. package/dist/chunk-C4R6NR53.mjs.map +0 -1
  807. package/dist/chunk-CBZ43QWR.js +0 -2
  808. package/dist/chunk-CBZ43QWR.js.map +0 -1
  809. package/dist/chunk-CHK4LFTH.js +0 -2
  810. package/dist/chunk-CHK4LFTH.js.map +0 -1
  811. package/dist/chunk-CIL5QUZ4.js +0 -2
  812. package/dist/chunk-CIL5QUZ4.js.map +0 -1
  813. package/dist/chunk-DFT7HFE5.js +0 -2
  814. package/dist/chunk-DFT7HFE5.js.map +0 -1
  815. package/dist/chunk-FA2GLWPN.mjs +0 -2
  816. package/dist/chunk-FA2GLWPN.mjs.map +0 -1
  817. package/dist/chunk-FD7QXXVX.js +0 -2
  818. package/dist/chunk-FD7QXXVX.js.map +0 -1
  819. package/dist/chunk-G5ZR6XJL.js +0 -2
  820. package/dist/chunk-G5ZR6XJL.js.map +0 -1
  821. package/dist/chunk-HN2U3UQ3.mjs +0 -2
  822. package/dist/chunk-HN2U3UQ3.mjs.map +0 -1
  823. package/dist/chunk-JKWDQH6P.mjs +0 -2
  824. package/dist/chunk-JKWDQH6P.mjs.map +0 -1
  825. package/dist/chunk-LMAKRCAA.mjs +0 -2
  826. package/dist/chunk-LMAKRCAA.mjs.map +0 -1
  827. package/dist/chunk-NGAMGIOT.mjs +0 -2
  828. package/dist/chunk-NGAMGIOT.mjs.map +0 -1
  829. package/dist/chunk-NI6HIOVK.js +0 -2
  830. package/dist/chunk-NI6HIOVK.js.map +0 -1
  831. package/dist/chunk-RLEJOP6E.mjs +0 -2
  832. package/dist/chunk-RLEJOP6E.mjs.map +0 -1
  833. package/dist/chunk-SBCOSAZS.mjs +0 -2
  834. package/dist/chunk-SBCOSAZS.mjs.map +0 -1
  835. package/dist/chunk-VAX7AB37.mjs.map +0 -1
  836. package/dist/chunk-VNGDFILB.mjs +0 -2
  837. package/dist/chunk-VNGDFILB.mjs.map +0 -1
  838. package/dist/chunk-VUX2WFWT.js +0 -2
  839. package/dist/chunk-VUX2WFWT.js.map +0 -1
  840. package/dist/hook-BXcgekzo.d.mts +0 -536
  841. package/dist/hook-C8NHjp6P.d.ts +0 -536
  842. package/dist/metafile-cjs.json +0 -1
  843. package/dist/templateMiddleware-BEttHPJk.d.mts +0 -20
  844. package/dist/templateMiddleware-BEttHPJk.d.ts +0 -20
  845. package/dist/types-BKuj7f2p.d.ts +0 -228
  846. package/dist/types-BZzd7aAk.d.mts +0 -228
  847. package/graph.js +0 -3
  848. package/hook.js +0 -3
  849. package/middleware.js +0 -3
  850. package/src/__tests__/addMetaTag.spec.js +0 -9
  851. package/src/__tests__/addMetaTag.spec.mjs +0 -9
  852. package/src/boot/decorator.ts +0 -21
  853. package/src/boot/graph.ts +0 -1
  854. package/src/boot/hook.ts +0 -82
  855. package/src/boot/internal.ts +0 -7
  856. package/src/boot/middleware.ts +0 -60
  857. package/src/buildInfo.ts +0 -9
  858. package/src/decorator/ActivityBorder/ActivityBorderDecorator.tsx +0 -57
  859. package/src/decorator/ActivityBorder/private/ActivityBorderDecoratorMiddleware.ts +0 -34
  860. package/src/decorator/ActivityBorder/private/ActivityBorderDecoratorRequestContext.ts +0 -48
  861. package/src/decorator/ActivityGrouping/ActivityGroupingDecorator.tsx +0 -43
  862. package/src/decorator/ActivityGrouping/private/ActivityGroupingDecoratorMiddleware.ts +0 -40
  863. package/src/decorator/DecoratorComposer.tsx +0 -51
  864. package/src/decorator/internal/InternalDecoratorComposer.tsx +0 -33
  865. package/src/decorator/internal/LowPriorityDecoratorComposer.tsx +0 -19
  866. package/src/decorator/private/DecoratorComposerContext.ts +0 -16
  867. package/src/decorator/private/PassthroughFallback.tsx +0 -12
  868. package/src/decorator/private/templateDecorator.tsx +0 -113
  869. package/src/decorator/types.ts +0 -4
  870. package/src/decorator/useDecoratorRequest.ts +0 -15
  871. package/src/env.d.ts +0 -9
  872. package/src/errorBox/errorBoxTelemetryPolymiddleware.ts +0 -53
  873. package/src/hooks/internal/usePostVoiceActivity.ts +0 -18
  874. package/src/hooks/internal/useRegisterVoiceHandler.ts +0 -23
  875. package/src/hooks/internal/useShouldShowMicrophoneButton.ts +0 -22
  876. package/src/hooks/internal/useVoiceHandlers.ts +0 -11
  877. package/src/hooks/internal/useVoiceStateWritable.ts +0 -18
  878. package/src/hooks/middleware/activityFallbackPolymiddleware.ts +0 -23
  879. package/src/hooks/useStartVoice.ts +0 -9
  880. package/src/hooks/useStopVoice.ts +0 -9
  881. package/src/hooks/useUIState.ts +0 -18
  882. package/src/hooks/useVoiceRecordingMuted.ts +0 -24
  883. package/src/hooks/useVoiceState.ts +0 -15
  884. package/src/hooks/validation/uiState.parseUIState.spec.ts +0 -21
  885. package/src/hooks/validation/uiState.ts +0 -10
  886. package/src/legacy/LegacyActivityBridge.tsx +0 -77
  887. package/src/legacy/LegacyActivityBridgeContext.ts +0 -23
  888. package/src/legacy/createActivityPolymiddlewareFromLegacy.tsx +0 -123
  889. package/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx +0 -102
  890. package/src/middleware/AvatarPolymiddlewareProxy.tsx +0 -46
  891. package/src/middleware/SendBoxMiddleware.ts +0 -28
  892. package/src/middleware/SendBoxToolbarMiddleware.ts +0 -28
  893. package/src/middleware/private/templateMiddleware.check.test.tsx +0 -47
  894. package/src/middleware/private/templateMiddleware.tsx +0 -106
  895. package/src/middleware/useBuildRenderAvatarCallback.ts +0 -37
  896. package/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx +0 -236
  897. package/src/providers/ActivityTyping/private/useReduceActivities.ts +0 -49
  898. package/src/providers/Capabilities/CapabilitiesComposer.tsx +0 -53
  899. package/src/providers/Capabilities/private/Context.ts +0 -13
  900. package/src/providers/Capabilities/private/capabilityRegistry.ts +0 -45
  901. package/src/providers/Capabilities/private/fetchCapabilitiesFromAdapter.ts +0 -59
  902. package/src/providers/Capabilities/private/shallowEqual.ts +0 -18
  903. package/src/providers/Capabilities/private/useContext.ts +0 -12
  904. package/src/providers/Capabilities/types/Capabilities.ts +0 -16
  905. package/src/providers/Capabilities/useCapabilities.ts +0 -25
  906. package/src/providers/GroupActivities/GroupActivitiesComposer.tsx +0 -116
  907. package/src/providers/GroupActivities/private/GroupActivitiesContext.ts +0 -23
  908. package/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts +0 -113
  909. package/src/providers/GroupActivities/private/isGroupingValid.ts +0 -41
  910. package/src/providers/GroupActivities/private/useGroupActivitiesContext.ts +0 -6
  911. package/src/providers/GroupActivities/useGroupActivities.ts +0 -20
  912. package/src/providers/GroupActivities/useGroupActivitiesByName.ts +0 -17
  913. package/src/providers/SpeechToSpeech/SpeechToSpeechComposer.tsx +0 -20
  914. package/src/providers/SpeechToSpeech/private/VoiceHandlerBridge.tsx +0 -23
  915. package/src/providers/SpeechToSpeech/private/VoiceRecorderBridge.tsx +0 -49
  916. package/src/providers/SpeechToSpeech/private/useAudioPlayer.spec.tsx +0 -355
  917. package/src/providers/SpeechToSpeech/private/useAudioPlayer.ts +0 -92
  918. package/src/providers/SpeechToSpeech/private/useRecorder.spec.tsx +0 -344
  919. package/src/providers/SpeechToSpeech/private/useRecorder.ts +0 -220
  920. package/src/providers/StyleOptions/StyleOptionsComposer.tsx +0 -46
  921. package/src/providers/StyleOptions/private/StyleOptionsContext.ts +0 -20
  922. package/src/providers/StyleOptions/private/rectifyStyleOptions.ts +0 -6
  923. package/src/providers/StyleOptions/useStyleOptions.ts +0 -6
  924. /package/dist/{botframework-webchat-api.graph.mjs.map → chunk-J6D5YEY6.mjs.map} +0 -0
@@ -1,9 +1,8 @@
1
- import { getActivityLivestreamingMetadata, type WebChatActivity } from 'botframework-webchat-core';
2
- import React, { useCallback, useEffect, useMemo, useRef, type ReactNode } from 'react';
1
+ import type { WebChatActivity } from 'botframework-webchat-core';
2
+ import React, { useCallback, useMemo, useRef, type ReactNode } from 'react';
3
3
 
4
4
  import reduceIterable from '../../hooks/private/reduceIterable';
5
5
  import useActivities from '../../hooks/useActivities';
6
- import usePonyfill from '../Ponyfill/usePonyfill';
7
6
  import type { ActivityKeyerContextType } from './private/Context';
8
7
  import ActivityKeyerContext from './private/Context';
9
8
  import getActivityId from './private/getActivityId';
@@ -18,11 +17,19 @@ type ActivityToKeyMap = Map<WebChatActivity, string>;
18
17
  type ClientActivityIdToKeyMap = Map<string, string>;
19
18
  type KeyToActivitiesMap = Map<string, readonly WebChatActivity[]>;
20
19
 
21
- /** After this many ms of no activity changes, verify that the frozen portion was not modified. */
22
- const FROZEN_CHECK_TIMEOUT = 10_000;
20
+ function getTypingActivityId(activity: WebChatActivity): string | undefined {
21
+ const { type } = activity;
23
22
 
24
- /** Only the last N activities are compared reference-by-reference on each render. */
25
- const MUTABLE_ACTIVITY_WINDOW = 1_000;
23
+ if (
24
+ (type === 'message' || type === 'typing') &&
25
+ 'text' in activity &&
26
+ typeof activity.text === 'string' &&
27
+ 'streamId' in activity.channelData &&
28
+ activity.channelData.streamId
29
+ ) {
30
+ return activity.channelData.streamId;
31
+ }
32
+ }
26
33
 
27
34
  /**
28
35
  * React context composer component to assign a perma-key to every activity.
@@ -39,7 +46,6 @@ const MUTABLE_ACTIVITY_WINDOW = 1_000;
39
46
  * Local key are only persisted in memory. On refresh, they will be a new random key.
40
47
  */
41
48
  const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | undefined }>) => {
42
- const [{ cancelIdleCallback, clearTimeout, requestIdleCallback, setTimeout }] = usePonyfill();
43
49
  const existingContext = useActivityKeyerContext(false);
44
50
 
45
51
  if (existingContext) {
@@ -47,118 +53,13 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u
47
53
  }
48
54
 
49
55
  const [activities] = useActivities();
56
+ const activityIdToKeyMapRef = useRef<Readonly<ActivityIdToKeyMap>>(Object.freeze(new Map()));
57
+ const activityToKeyMapRef = useRef<Readonly<ActivityToKeyMap>>(Object.freeze(new Map()));
58
+ const clientActivityIdToKeyMapRef = useRef<Readonly<ClientActivityIdToKeyMap>>(Object.freeze(new Map()));
59
+ const keyToActivitiesMapRef = useRef<Readonly<KeyToActivitiesMap>>(Object.freeze(new Map()));
50
60
 
51
- // TODO: [P0] We should remove the mapping in favor of `localId`,
52
- // the id should represent the latest available activity in the stream
53
- //
54
- // Maps are intentionally mutable so the incremental fast path can append to them in-place.
55
- const activityIdToKeyMapRef = useRef<ActivityIdToKeyMap>(new Map());
56
- const activityToKeyMapRef = useRef<ActivityToKeyMap>(new Map());
57
- const clientActivityIdToKeyMapRef = useRef<ClientActivityIdToKeyMap>(new Map());
58
- const keyToActivitiesMapRef = useRef<KeyToActivitiesMap>(new Map());
59
- const prevActivitiesRef = useRef<readonly WebChatActivity[]>(Object.freeze([]));
60
- const prevActivityKeysStateRef = useRef<readonly [readonly string[]]>(
61
- Object.freeze([Object.freeze([])]) as readonly [readonly string[]]
62
- );
63
- const pendingFrozenCheckRef = useRef<
64
- | {
65
- readonly current: readonly WebChatActivity[];
66
- readonly frozenBoundary: number;
67
- readonly prev: readonly WebChatActivity[];
68
- }
69
- | undefined
70
- >();
71
- const warnedPositionsRef = useRef<Set<number>>(new Set());
72
-
73
- // Incremental keying: the fast path only processes newly-appended activities (O(delta) per render)
74
- // instead of re-iterating all activities (O(n) per render, O(n²) total for n streaming pushes).
61
+ // TODO: [P1] `useMemoWithPrevious` to check and cache the resulting array if it hasn't changed.
75
62
  const activityKeysState = useMemo<readonly [readonly string[]]>(() => {
76
- const prevActivities = prevActivitiesRef.current;
77
-
78
- // Only the last MUTABLE_ACTIVITY_WINDOW activities are compared each render.
79
- // Activities before the frozen boundary are assumed unchanged — O(1) instead of O(n).
80
- const frozenBoundary = Math.max(0, Math.min(prevActivities.length, activities.length) - MUTABLE_ACTIVITY_WINDOW);
81
- let commonPrefixLength = frozenBoundary;
82
- const maxPrefix = Math.min(prevActivities.length, activities.length);
83
-
84
- // eslint-disable-next-line security/detect-object-injection
85
- while (commonPrefixLength < maxPrefix && prevActivities[commonPrefixLength] === activities[commonPrefixLength]) {
86
- commonPrefixLength++;
87
- }
88
-
89
- const isAppendOnly = commonPrefixLength === prevActivities.length;
90
-
91
- if (isAppendOnly) {
92
- // Fast path: only new activities were appended — process them incrementally.
93
- if (commonPrefixLength === activities.length) {
94
- // Array reference changed but content is identical.
95
- prevActivitiesRef.current = activities;
96
-
97
- return prevActivityKeysStateRef.current;
98
- }
99
-
100
- // Schedule deferred verification of the frozen portion only now that we know:
101
- // (1) the update is append-only and (2) there are actual content changes.
102
- if (frozenBoundary) {
103
- pendingFrozenCheckRef.current = Object.freeze({ current: activities, frozenBoundary, prev: prevActivities });
104
- }
105
-
106
- const { current: activityIdToKeyMap } = activityIdToKeyMapRef;
107
- const { current: activityToKeyMap } = activityToKeyMapRef;
108
- const { current: clientActivityIdToKeyMap } = clientActivityIdToKeyMapRef;
109
- const { current: keyToActivitiesMap } = keyToActivitiesMapRef;
110
-
111
- const newKeys: string[] = [];
112
-
113
- for (let i = commonPrefixLength; i < activities.length; i++) {
114
- // eslint-disable-next-line security/detect-object-injection
115
- const activity = activities[i];
116
- const activityId = getActivityId(activity);
117
- const clientActivityId = getClientActivityId(activity);
118
- const typingActivityId = getActivityLivestreamingMetadata(activity)?.sessionId;
119
-
120
- // Since we mutate maps in-place, a single lookup covers both "previous" and
121
- // "current-iteration" entries — equivalent to the slow path's dual-map check.
122
- const key =
123
- (clientActivityId && clientActivityIdToKeyMap.get(clientActivityId)) ||
124
- (typingActivityId && activityIdToKeyMap.get(typingActivityId)) ||
125
- (activityId && activityIdToKeyMap.get(activityId)) ||
126
- activityToKeyMap.get(activity) ||
127
- uniqueId();
128
-
129
- activityId && activityIdToKeyMap.set(activityId, key);
130
- typingActivityId && activityIdToKeyMap.set(typingActivityId, key);
131
- clientActivityId && clientActivityIdToKeyMap.set(clientActivityId, key);
132
- activityToKeyMap.set(activity, key);
133
-
134
- const activitiesForKey = keyToActivitiesMap.get(key);
135
-
136
- keyToActivitiesMap.set(
137
- key,
138
- activitiesForKey ? Object.freeze([...activitiesForKey, activity]) : Object.freeze([activity])
139
- );
140
-
141
- !activitiesForKey && newKeys.push(key);
142
- }
143
-
144
- prevActivitiesRef.current = activities;
145
-
146
- if (!newKeys.length) {
147
- // New activities might be added to existing keys — no new keys, but the keyToActivitiesMap
148
- // was mutated. Return a new tuple reference so context consumers re-render and see the
149
- // updated activities-per-key via getActivitiesByKey.
150
- return Object.freeze([prevActivityKeysStateRef.current[0]]) as readonly [readonly string[]];
151
- }
152
-
153
- const nextKeys = Object.freeze([...prevActivityKeysStateRef.current[0], ...newKeys]);
154
- const result = Object.freeze([nextKeys]) as readonly [readonly string[]];
155
-
156
- prevActivityKeysStateRef.current = result;
157
-
158
- return result;
159
- }
160
-
161
- // Slow path: activities were removed or reordered — full recalculation.
162
63
  const { current: activityIdToKeyMap } = activityIdToKeyMapRef;
163
64
  const { current: activityToKeyMap } = activityToKeyMapRef;
164
65
  const { current: clientActivityIdToKeyMap } = clientActivityIdToKeyMapRef;
@@ -171,98 +72,34 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u
171
72
  activities.forEach(activity => {
172
73
  const activityId = getActivityId(activity);
173
74
  const clientActivityId = getClientActivityId(activity);
174
- const typingActivityId = getActivityLivestreamingMetadata(activity)?.sessionId;
75
+ const typingActivityId = getTypingActivityId(activity);
175
76
 
176
77
  const key =
177
- (clientActivityId &&
178
- (clientActivityIdToKeyMap.get(clientActivityId) || nextClientActivityIdToKeyMap.get(clientActivityId))) ||
179
- (typingActivityId &&
180
- (activityIdToKeyMap.get(typingActivityId) || nextActivityIdToKeyMap.get(typingActivityId))) ||
181
- (activityId && (activityIdToKeyMap.get(activityId) || nextActivityIdToKeyMap.get(activityId))) ||
78
+ (clientActivityId && clientActivityIdToKeyMap.get(clientActivityId)) ||
79
+ (typingActivityId && activityIdToKeyMap.get(typingActivityId)) ||
80
+ (activityId && activityIdToKeyMap.get(activityId)) ||
182
81
  activityToKeyMap.get(activity) ||
183
- nextActivityToKeyMap.get(activity) ||
184
82
  uniqueId();
185
83
 
186
84
  activityId && nextActivityIdToKeyMap.set(activityId, key);
187
- typingActivityId && nextActivityIdToKeyMap.set(typingActivityId, key);
188
85
  clientActivityId && nextClientActivityIdToKeyMap.set(clientActivityId, key);
189
86
  nextActivityToKeyMap.set(activity, key);
190
87
  nextActivityKeys.add(key);
191
88
 
192
- const activitiesForKey = nextKeyToActivitiesMap.has(key) ? [...nextKeyToActivitiesMap.get(key)] : [];
89
+ const activities = nextKeyToActivitiesMap.has(key) ? [...nextKeyToActivitiesMap.get(key)] : [];
193
90
 
194
- activitiesForKey.push(activity);
195
- nextKeyToActivitiesMap.set(key, Object.freeze(activitiesForKey));
91
+ activities.push(activity);
92
+ nextKeyToActivitiesMap.set(key, Object.freeze(activities));
196
93
  });
197
94
 
198
- activityIdToKeyMapRef.current = nextActivityIdToKeyMap;
199
- activityToKeyMapRef.current = nextActivityToKeyMap;
200
- clientActivityIdToKeyMapRef.current = nextClientActivityIdToKeyMap;
201
- keyToActivitiesMapRef.current = nextKeyToActivitiesMap;
202
- prevActivitiesRef.current = activities;
203
-
204
- // Slow path did a full recalculation — no frozen check needed, reset warnings.
205
- pendingFrozenCheckRef.current = undefined;
206
- warnedPositionsRef.current.clear();
207
-
208
- const nextKeys = Object.freeze([...nextActivityKeys.values()]);
209
- const result = Object.freeze([nextKeys]) as readonly [readonly string[]];
210
-
211
- prevActivityKeysStateRef.current = result;
212
-
213
- return result;
214
- }, [
215
- activities,
216
- activityIdToKeyMapRef,
217
- activityToKeyMapRef,
218
- clientActivityIdToKeyMapRef,
219
- keyToActivitiesMapRef,
220
- pendingFrozenCheckRef,
221
- prevActivitiesRef,
222
- prevActivityKeysStateRef,
223
- warnedPositionsRef
224
- ]);
225
-
226
- // Deferred verification: after FROZEN_CHECK_TIMEOUT of quiet, validate that activities
227
- // inside the frozen portion have not actually changed. Warn once per position if they did.
228
- // Uses requestIdleCallback inside the timeout to avoid contending with the first post-stream repaint.
229
- useEffect(() => {
230
- const pending = pendingFrozenCheckRef.current;
231
-
232
- if (!pending) {
233
- return;
234
- }
235
-
236
- let idleHandle: ReturnType<NonNullable<typeof requestIdleCallback>> | undefined;
237
-
238
- const runCheck = () => {
239
- const { current: currentActivities, frozenBoundary, prev: prevFrozenActivities } = pending;
240
-
241
- for (let i = 0; i < frozenBoundary; i++) {
242
- // eslint-disable-next-line security/detect-object-injection
243
- if (prevFrozenActivities[i] !== currentActivities[i] && !warnedPositionsRef.current.has(i)) {
244
- warnedPositionsRef.current.add(i);
245
-
246
- console.warn(
247
- `botframework-webchat internal: change in activity at position ${i} was not applied because it is outside the mutable window of ${MUTABLE_ACTIVITY_WINDOW}.`
248
- );
249
- }
250
- }
251
- };
252
-
253
- const timer = setTimeout(() => {
254
- if (requestIdleCallback) {
255
- idleHandle = requestIdleCallback(runCheck);
256
- } else {
257
- runCheck();
258
- }
259
- }, FROZEN_CHECK_TIMEOUT);
95
+ activityIdToKeyMapRef.current = Object.freeze(nextActivityIdToKeyMap);
96
+ activityToKeyMapRef.current = Object.freeze(nextActivityToKeyMap);
97
+ clientActivityIdToKeyMapRef.current = Object.freeze(nextClientActivityIdToKeyMap);
98
+ keyToActivitiesMapRef.current = Object.freeze(nextKeyToActivitiesMap);
260
99
 
261
- return () => {
262
- clearTimeout(timer);
263
- idleHandle !== undefined && cancelIdleCallback?.(idleHandle);
264
- };
265
- }, [activities, cancelIdleCallback, clearTimeout, requestIdleCallback, setTimeout]);
100
+ // `nextActivityKeys` could potentially same as `prevActivityKeys` despite reference differences, we should memoize it.
101
+ return Object.freeze([Object.freeze([...nextActivityKeys.values()])]) as readonly [readonly string[]];
102
+ }, [activities, activityIdToKeyMapRef, activityToKeyMapRef, clientActivityIdToKeyMapRef, keyToActivitiesMapRef]);
266
103
 
267
104
  const getActivitiesByKey: (key?: string | undefined) => readonly WebChatActivity[] | undefined = useCallback(
268
105
  (key?: string | undefined): readonly WebChatActivity[] | undefined => key && keyToActivitiesMapRef.current.get(key),
@@ -285,7 +122,13 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u
285
122
  );
286
123
 
287
124
  const contextValue = useMemo<ActivityKeyerContextType>(
288
- () => ({ activityKeysState, getActivityByKey, getActivitiesByKey, getKeyByActivity, getKeyByActivityId }),
125
+ () => ({
126
+ activityKeysState,
127
+ getActivityByKey,
128
+ getActivitiesByKey,
129
+ getKeyByActivity,
130
+ getKeyByActivityId
131
+ }),
289
132
  [activityKeysState, getActivitiesByKey, getActivityByKey, getKeyByActivity, getKeyByActivityId]
290
133
  );
291
134
 
@@ -1,3 +1,5 @@
1
+ /* eslint-disable no-magic-numbers */
2
+
1
3
  import someIterable from './someIterable';
2
4
 
3
5
  describe('when predicate return true should return true', () => {
@@ -8,7 +8,7 @@ type Props = Readonly<{ children?: ReactNode | undefined }>;
8
8
 
9
9
  const ActivityListenerComposer = memo(({ children }: Props) => {
10
10
  const [activities] = useActivities();
11
- const prevActivities = usePrevious<readonly WebChatActivity[]>(activities, Object.freeze([]));
11
+ const prevActivities = usePrevious<WebChatActivity[]>(activities, []);
12
12
 
13
13
  const upsertedActivitiesState = useMemo<readonly [readonly WebChatActivity[]]>(() => {
14
14
  const upserts: WebChatActivity[] = [];
@@ -1,5 +1,4 @@
1
- import React, { useEffect, useMemo, useRef, type ReactNode } from 'react';
2
- import { querySendStatusFromOutgoingActivity } from 'botframework-webchat-core/activity.js';
1
+ import React, { useEffect, useMemo, useRef, type FC, type PropsWithChildren } from 'react';
3
2
 
4
3
  import { useActivities, usePonyfill } from '../../hooks/index';
5
4
  import useForceRender from '../../hooks/internal/useForceRender';
@@ -15,7 +14,7 @@ import isMapEqual from './private/isMapEqual';
15
14
  const EXPIRY_SEND_FAILED = -Infinity;
16
15
  const EXPIRY_SENT = Infinity;
17
16
 
18
- const ActivitySendStatusComposer = ({ children }: Readonly<{ children?: ReactNode | undefined }>) => {
17
+ const ActivitySendStatusComposer: FC<PropsWithChildren<{}>> = ({ children }) => {
19
18
  const [activities] = useActivities();
20
19
  const [{ clearTimeout, Date, setTimeout }] = usePonyfill();
21
20
  const forceRender = useForceRender();
@@ -44,11 +43,9 @@ const ActivitySendStatusComposer = ({ children }: Readonly<{ children?: ReactNod
44
43
 
45
44
  if (key) {
46
45
  const {
47
- channelData: { state }
46
+ channelData: { state, 'webchat:send-status': sendStatus }
48
47
  } = activity;
49
48
 
50
- const sendStatus = querySendStatusFromOutgoingActivity(activity);
51
-
52
49
  // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.
53
50
  // Please refer to #4362 for details. Remove on or after 2024-07-31.
54
51
  const rectifiedSendStatus = sendStatus || (state === 'sent' ? 'sent' : 'sending');
@@ -1,166 +1,80 @@
1
- import { getActivityLivestreamingMetadata, type WebChatActivity } from 'botframework-webchat-core';
2
- import { queryReceivedAtFromActivity } from 'botframework-webchat-core/activity.js';
3
- import { iteratorFind } from 'iter-fest';
4
- import React, { memo, useCallback, useMemo, type ReactNode } from 'react';
1
+ import type { WebChatActivity } from 'botframework-webchat-core';
2
+ import React, { memo, useMemo, type ReactNode } from 'react';
3
+ import { useRefFrom } from 'use-ref-from';
5
4
 
6
5
  import numberWithInfinity from '../../hooks/private/numberWithInfinity';
6
+ import useActivities from '../../hooks/useActivities';
7
7
  import usePonyfill from '../../hooks/usePonyfill';
8
+ import useUpsertedActivities from '../../providers/ActivityListener/useUpsertedActivities';
8
9
  import ActivityTypingContext, { ActivityTypingContextType } from './private/Context';
9
- import useReduceActivities from './private/useReduceActivities';
10
+ import useMemoWithPrevious from './private/useMemoWithPrevious';
10
11
  import { type AllTyping } from './types/AllTyping';
11
12
 
12
- type Entry = {
13
- livestreamActivities: Map<
14
- string,
15
- {
16
- activity: WebChatActivity;
17
- contentful: boolean;
18
- firstReceivedAt: number;
19
- lastReceivedAt: number;
20
- }
21
- >;
22
- name: string | undefined;
23
- role: 'bot' | 'user';
24
- typingIndicator:
25
- | {
26
- activity: WebChatActivity;
27
- duration: number;
28
- firstReceivedAt: number;
29
- lastReceivedAt: number;
30
- }
31
- | undefined;
32
- };
13
+ const INITIAL_ALL_TYPING_STATE = Object.freeze([Object.freeze(new Map())] as const);
33
14
 
34
15
  type Props = Readonly<{ children?: ReactNode | undefined }>;
35
16
 
17
+ function isLivestreamChunk(activity: WebChatActivity): boolean {
18
+ return (
19
+ activity.type === 'typing' &&
20
+ 'text' in activity &&
21
+ typeof activity.text === 'string' &&
22
+ activity.channelData.streamType !== 'informative'
23
+ );
24
+ }
25
+
36
26
  const ActivityTypingComposer = ({ children }: Props) => {
37
27
  const [{ Date }] = usePonyfill();
28
+ const [activities] = useActivities();
29
+ const [upsertedActivities] = useUpsertedActivities();
30
+ const activitiesRef = useRefFrom(activities);
31
+
32
+ const allTypingState = useMemoWithPrevious<readonly [ReadonlyMap<string, AllTyping>]>(
33
+ (prevAllTypingState = INITIAL_ALL_TYPING_STATE) => {
34
+ const { current: activities } = activitiesRef;
35
+ const nextTyping = new Map(prevAllTypingState[0]);
36
+ let changed = false;
37
+
38
+ const firstIndex = upsertedActivities.reduce(
39
+ (firstIndex, upsertedActivity) => Math.min(firstIndex, activities.indexOf(upsertedActivity)),
40
+ Infinity
41
+ );
38
42
 
39
- const reducer = useCallback(
40
- (
41
- prevTypingState: ReadonlyMap<string, Readonly<Entry>> | undefined,
42
- activity: WebChatActivity
43
- ): ReadonlyMap<string, Readonly<Entry>> | undefined => {
44
- const {
45
- from: { id, name, role },
46
- type
47
- } = activity;
48
-
49
- if (role === 'channel') {
50
- return prevTypingState;
51
- }
52
-
53
- // A normal message activity, or final activity (which could be "message" or "typing"), will remove the typing indicator.
54
- const receivedAt = queryReceivedAtFromActivity(activity) ?? Date.now();
55
-
56
- const livestreamingMetadata = getActivityLivestreamingMetadata(activity);
57
- const typingState = new Map(prevTypingState);
58
- const existingEntry = typingState.get(id);
59
- const mutableEntry: Entry = {
60
- typingIndicator: undefined,
61
- ...existingEntry,
62
- livestreamActivities: new Map(existingEntry?.livestreamActivities),
63
- name,
64
- role
65
- };
66
-
67
- if (livestreamingMetadata) {
68
- mutableEntry.typingIndicator = undefined;
69
-
70
- const { sessionId } = livestreamingMetadata;
71
-
72
- if (livestreamingMetadata.type === 'final activity') {
73
- mutableEntry.livestreamActivities.delete(sessionId);
74
- } else {
75
- mutableEntry.livestreamActivities.set(
76
- sessionId,
77
- Object.freeze({
78
- firstReceivedAt: mutableEntry.livestreamActivities.get(sessionId)?.firstReceivedAt ?? receivedAt,
79
- ...mutableEntry.livestreamActivities.get(sessionId),
80
- activity,
81
- contentful: livestreamingMetadata.type !== 'contentless',
82
- lastReceivedAt: receivedAt
83
- })
84
- );
43
+ for (const activity of activities.slice(firstIndex)) {
44
+ const {
45
+ from,
46
+ from: { id, role },
47
+ type
48
+ } = activity;
49
+
50
+ if (type === 'typing' && (role === 'bot' || role === 'user')) {
51
+ const currentTyping = nextTyping.get(id);
52
+ // TODO: When we rework on types of DLActivity, we will make sure all activities has "webChat.receivedAt", this coalesces can be removed.
53
+ const receivedAt = activity.channelData.webChat?.receivedAt || Date.now();
54
+
55
+ nextTyping.set(id, {
56
+ firstReceivedAt: currentTyping?.firstReceivedAt || receivedAt,
57
+ lastActivityDuration: numberWithInfinity(
58
+ activity.channelData.webChat?.styleOptions?.typingAnimationDuration
59
+ ),
60
+ lastReceivedAt: receivedAt,
61
+ name: from.name,
62
+ role,
63
+ type: isLivestreamChunk(activity) ? 'livestream' : 'busy' // Informative message means the bot is busy.
64
+ });
65
+
66
+ changed = true;
67
+ } else if (type === 'message') {
68
+ nextTyping.delete(id);
69
+ changed = true;
85
70
  }
86
- } else if (type === 'message') {
87
- mutableEntry.typingIndicator = undefined;
88
- } else if (type === 'typing') {
89
- mutableEntry.typingIndicator = Object.freeze({
90
- activity,
91
- duration: numberWithInfinity(activity.channelData.webChat?.styleOptions?.typingAnimationDuration),
92
- firstReceivedAt: mutableEntry.typingIndicator?.firstReceivedAt ?? receivedAt,
93
- lastReceivedAt: receivedAt
94
- });
95
71
  }
96
72
 
97
- typingState.set(id, Object.freeze(mutableEntry));
98
-
99
- return Object.freeze(typingState);
73
+ return changed ? Object.freeze([nextTyping]) : prevAllTypingState;
100
74
  },
101
- [Date]
75
+ [activitiesRef, upsertedActivities]
102
76
  );
103
77
 
104
- const state: ReadonlyMap<string, Entry> = useReduceActivities(reducer) || Object.freeze(new Map());
105
-
106
- const allTyping = useMemo(() => {
107
- const map = new Map<string, AllTyping>();
108
-
109
- for (const [id, entry] of state.entries()) {
110
- const firstContentfulLivestream = iteratorFind(
111
- entry.livestreamActivities.values(),
112
- ({ contentful }) => contentful
113
- );
114
-
115
- const firstContentlessLivestream = iteratorFind(
116
- entry.livestreamActivities.values(),
117
- ({ contentful }) => !contentful
118
- );
119
-
120
- if (firstContentfulLivestream) {
121
- map.set(
122
- id,
123
- Object.freeze({
124
- firstReceivedAt: firstContentfulLivestream.firstReceivedAt,
125
- lastActivityDuration: Infinity,
126
- lastReceivedAt: firstContentfulLivestream.lastReceivedAt,
127
- name: entry.name,
128
- role: entry.role,
129
- type: 'livestream'
130
- } satisfies AllTyping)
131
- );
132
- } else if (firstContentlessLivestream) {
133
- map.set(
134
- id,
135
- Object.freeze({
136
- firstReceivedAt: firstContentlessLivestream.firstReceivedAt,
137
- lastActivityDuration: Infinity,
138
- lastReceivedAt: firstContentlessLivestream.lastReceivedAt,
139
- name: entry.name,
140
- role: entry.role,
141
- type: 'busy'
142
- } satisfies AllTyping)
143
- );
144
- } else if (entry.typingIndicator) {
145
- map.set(
146
- id,
147
- Object.freeze({
148
- firstReceivedAt: entry.typingIndicator.firstReceivedAt,
149
- lastActivityDuration: entry.typingIndicator.duration,
150
- lastReceivedAt: entry.typingIndicator.lastReceivedAt,
151
- name: entry.name,
152
- role: entry.role,
153
- type: 'busy'
154
- } satisfies AllTyping)
155
- );
156
- }
157
- }
158
-
159
- return map;
160
- }, [state]);
161
-
162
- const allTypingState = useMemo(() => Object.freeze([allTyping] as const), [allTyping]);
163
-
164
78
  const context = useMemo<ActivityTypingContextType>(() => ({ allTypingState }), [allTypingState]);
165
79
 
166
80
  return <ActivityTypingContext.Provider value={context}>{children}</ActivityTypingContext.Provider>;
@@ -0,0 +1,17 @@
1
+ // TODO: [P1] Dedupe.
2
+ import { useEffect, useMemo, useRef } from 'react';
3
+
4
+ import type { DependencyList } from 'react';
5
+
6
+ export default function useMemoWithPrevious<T>(factory: (prevValue: T | undefined) => T, deps: DependencyList): T {
7
+ const prevValueRef = useRef<T | undefined>(undefined);
8
+ // We are building a `useMemo`-like hook, `deps` is passed as-is and `factory` is not one fo the dependencies.
9
+ // eslint-disable-next-line react-hooks/exhaustive-deps
10
+ const value = useMemo<T>(() => factory(prevValueRef.current), deps);
11
+
12
+ useEffect(() => {
13
+ prevValueRef.current = value;
14
+ });
15
+
16
+ return value;
17
+ }
package/src/tsconfig.json CHANGED
@@ -1,9 +1,18 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "allowSyntheticDefaultImports": true,
4
+ "declaration": true,
5
+ "declarationDir": "../lib",
6
+ "declarationMap": true,
3
7
  "downlevelIteration": true,
4
- "resolveJsonModule": true, // Required for localization files.
5
- "strict": false, // We should flip this occasionally and fix all typing issues.
6
- "types": ["dom-speech-recognition"]
7
- },
8
- "extends": "@msinternal/botframework-webchat-tsconfig/legacy"
8
+ "emitDeclarationOnly": true,
9
+ "jsx": "react",
10
+ "module": "ESNext",
11
+ "moduleResolution": "Bundler",
12
+ "preserveWatchOutput": true,
13
+ "pretty": true,
14
+ "resolveJsonModule": true, // Required for localization files
15
+ "skipLibCheck": true,
16
+ "sourceMap": true
17
+ }
9
18
  }
@@ -0,0 +1,36 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { RenderAttachment } from './AttachmentMiddleware';
3
+ import type { WebChatActivity } from 'botframework-webchat-core';
4
+
5
+ type ActivityProps = {
6
+ hideTimestamp: boolean;
7
+ renderActivityStatus: (options: { hideTimestamp: boolean }) => ReactNode;
8
+ renderAvatar: false | (() => Exclude<ReactNode, boolean | null | undefined>);
9
+ showCallout: boolean;
10
+ };
11
+
12
+ type ActivityComponent = (props: ActivityProps) => Exclude<ReactNode, boolean | null | undefined>;
13
+
14
+ type ActivityComponentFactoryOptions = {
15
+ activity: WebChatActivity;
16
+ nextVisibleActivity: WebChatActivity;
17
+ };
18
+
19
+ type ActivityComponentFactory = (options: ActivityComponentFactoryOptions) => ActivityComponent | false;
20
+
21
+ // TODO: [P2] This is inherited from our older signature (pre-hook) which requires passing "renderAttachment" argument.
22
+ // With hooks, the middleware should not need "renderAttachment", they can grab it from "useCreateAttachmentRenderer" hook.
23
+ type LegacyRenderActivity = (
24
+ renderAttachment: RenderAttachment,
25
+ { hideTimestamp, renderActivityStatus, renderAvatar, showCallout }: ActivityProps
26
+ ) => Exclude<ReactNode, boolean>;
27
+
28
+ type LegacyActivityRenderer = (options: ActivityComponentFactoryOptions) => LegacyRenderActivity | false;
29
+
30
+ // The middleware created by the web developer, are using the legacy signature (with "renderAttachment" argument).
31
+ type ActivityEnhancer = (next: LegacyActivityRenderer) => LegacyActivityRenderer;
32
+ type ActivityMiddleware = () => ActivityEnhancer;
33
+
34
+ export default ActivityMiddleware;
35
+
36
+ export type { ActivityComponentFactory, LegacyActivityRenderer };
@@ -1,5 +1,5 @@
1
- import type { WebChatActivity } from 'botframework-webchat-core';
2
1
  import type { ReactElement } from 'react';
2
+ import type { WebChatActivity } from 'botframework-webchat-core';
3
3
 
4
4
  import type { SendStatus } from '../types/SendStatus';
5
5
 
@@ -8,6 +8,14 @@ type RenderActivityStatusOptions = {
8
8
  activity: WebChatActivity;
9
9
  hideTimestamp: boolean;
10
10
  sendState: SendStatus;
11
+
12
+ // "nextVisibleActivity" is for backward compatibility, please remove this line on or after 2022-07-22.
13
+ /** @deprecated */
14
+ nextVisibleActivity: WebChatActivity;
15
+
16
+ // "sameTimestampGroup" is for backward compatibility, please remove this line on or after 2022-07-22.
17
+ /** @deprecated */
18
+ sameTimestampGroup: boolean;
11
19
  };
12
20
 
13
21
  type RenderActivityStatus = (options: RenderActivityStatusOptions) => ReactElement;