@azure/communication-react 1.5.0 → 1.5.2-alpha-202301190014.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 (839) hide show
  1. package/dist/communication-react.d.ts +1975 -28
  2. package/dist/dist-cjs/communication-react/index.js +12525 -8218
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/MessageStatus.js.map +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/areEqual.js.map +1 -1
  6. package/dist/dist-esm/acs-ui-common/src/common.js.map +1 -1
  7. package/dist/dist-esm/acs-ui-common/src/commonProperties.js.map +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/constants.js.map +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/cssUtils.js.map +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/identifier.js +3 -64
  11. package/dist/dist-esm/acs-ui-common/src/identifier.js.map +1 -1
  12. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  13. package/dist/dist-esm/acs-ui-common/src/localizationUtils.js.map +1 -1
  14. package/dist/dist-esm/acs-ui-common/src/logEvent.js.map +1 -1
  15. package/dist/dist-esm/acs-ui-common/src/memoizeFnAll.js.map +1 -1
  16. package/dist/dist-esm/acs-ui-common/src/safeStringify.js.map +1 -1
  17. package/dist/dist-esm/acs-ui-common/src/telemetry.js.map +1 -1
  18. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  19. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  20. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +11 -1
  21. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +12 -0
  22. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  23. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.d.ts +13 -0
  24. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js +20 -5
  25. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js.map +1 -1
  26. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js +20 -49
  27. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js.map +1 -1
  28. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +11 -1
  29. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js +35 -31
  30. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js.map +1 -1
  31. package/dist/dist-esm/calling-component-bindings/src/handlers/createDefaultCallingHandlersForComponent.js +11 -1
  32. package/dist/dist-esm/calling-component-bindings/src/handlers/createDefaultCallingHandlersForComponent.js.map +1 -1
  33. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js +13 -1
  34. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js.map +1 -1
  35. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.d.ts +43 -0
  36. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.js +81 -0
  37. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.js.map +1 -0
  38. package/dist/dist-esm/calling-component-bindings/src/hooks/useHandlers.d.ts +1 -1
  39. package/dist/dist-esm/calling-component-bindings/src/hooks/useHandlers.js.map +1 -1
  40. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.d.ts +4 -1
  41. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js +22 -0
  42. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js.map +1 -1
  43. package/dist/dist-esm/calling-component-bindings/src/hooks/useSelector.js.map +1 -1
  44. package/dist/dist-esm/calling-component-bindings/src/index.d.ts +6 -0
  45. package/dist/dist-esm/calling-component-bindings/src/index.js +8 -0
  46. package/dist/dist-esm/calling-component-bindings/src/index.js.map +1 -1
  47. package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js +31 -10
  48. package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js.map +1 -1
  49. package/dist/dist-esm/calling-component-bindings/src/participantsButtonSelector.js.map +1 -1
  50. package/dist/dist-esm/calling-component-bindings/src/providers/CallAgentProvider.d.ts +4 -3
  51. package/dist/dist-esm/calling-component-bindings/src/providers/CallAgentProvider.js.map +1 -1
  52. package/dist/dist-esm/calling-component-bindings/src/providers/CallClientProvider.js +6 -3
  53. package/dist/dist-esm/calling-component-bindings/src/providers/CallClientProvider.js.map +1 -1
  54. package/dist/dist-esm/calling-component-bindings/src/providers/CallProvider.d.ts +14 -2
  55. package/dist/dist-esm/calling-component-bindings/src/providers/CallProvider.js +20 -1
  56. package/dist/dist-esm/calling-component-bindings/src/providers/CallProvider.js.map +1 -1
  57. package/dist/dist-esm/calling-component-bindings/src/providers/index.js.map +1 -1
  58. package/dist/dist-esm/calling-component-bindings/src/utils/SelectorUtils.js.map +1 -1
  59. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.d.ts +14 -0
  60. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +25 -4
  61. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  62. package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.d.ts +5 -0
  63. package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.js +11 -0
  64. package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.js.map +1 -1
  65. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js +25 -9
  66. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js.map +1 -1
  67. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js +21 -5
  68. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js.map +1 -1
  69. package/dist/dist-esm/calling-stateful-client/src/BetaToStableTypes.d.ts +6 -5
  70. package/dist/dist-esm/calling-stateful-client/src/BetaToStableTypes.js.map +1 -1
  71. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.d.ts +15 -1
  72. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js.map +1 -1
  73. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.d.ts +2 -1
  74. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js +62 -67
  75. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
  76. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +27 -1
  77. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  78. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +7 -1
  79. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +56 -4
  80. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  81. package/dist/dist-esm/calling-stateful-client/src/CallDeclarative.js +7 -8
  82. package/dist/dist-esm/calling-stateful-client/src/CallDeclarative.js.map +1 -1
  83. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js +56 -64
  84. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js.map +1 -1
  85. package/dist/dist-esm/calling-stateful-client/src/CallIdHistory.js.map +1 -1
  86. package/dist/dist-esm/calling-stateful-client/src/CallIdRef.js.map +1 -1
  87. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.d.ts +1 -0
  88. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +9 -3
  89. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  90. package/dist/dist-esm/calling-stateful-client/src/Converter.js +13 -8
  91. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  92. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js +51 -57
  93. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js.map +1 -1
  94. package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js +14 -16
  95. package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js.map +1 -1
  96. package/dist/dist-esm/calling-stateful-client/src/IncomingCallSubscriber.js.map +1 -1
  97. package/dist/dist-esm/calling-stateful-client/src/InternalCallContext.js +3 -15
  98. package/dist/dist-esm/calling-stateful-client/src/InternalCallContext.js.map +1 -1
  99. package/dist/dist-esm/calling-stateful-client/src/Logger.js.map +1 -1
  100. package/dist/dist-esm/calling-stateful-client/src/ParticipantSubscriber.d.ts +1 -0
  101. package/dist/dist-esm/calling-stateful-client/src/ParticipantSubscriber.js +8 -0
  102. package/dist/dist-esm/calling-stateful-client/src/ParticipantSubscriber.js.map +1 -1
  103. package/dist/dist-esm/calling-stateful-client/src/RecordingSubscriber.js.map +1 -1
  104. package/dist/dist-esm/calling-stateful-client/src/RemoteVideoStreamSubscriber.d.ts +1 -0
  105. package/dist/dist-esm/calling-stateful-client/src/RemoteVideoStreamSubscriber.js +8 -0
  106. package/dist/dist-esm/calling-stateful-client/src/RemoteVideoStreamSubscriber.js.map +1 -1
  107. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.d.ts +25 -1
  108. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.js +69 -40
  109. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.js.map +1 -1
  110. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js +3 -13
  111. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js.map +1 -1
  112. package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.d.ts +19 -0
  113. package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js +89 -0
  114. package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js.map +1 -0
  115. package/dist/dist-esm/calling-stateful-client/src/TeamsCallDeclarative.d.ts +23 -0
  116. package/dist/dist-esm/calling-stateful-client/src/TeamsCallDeclarative.js +48 -0
  117. package/dist/dist-esm/calling-stateful-client/src/TeamsCallDeclarative.js.map +1 -0
  118. package/dist/dist-esm/calling-stateful-client/src/TranscriptionSubscriber.js.map +1 -1
  119. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +2 -2
  120. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +8 -0
  121. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
  122. package/dist/dist-esm/calling-stateful-client/src/UserFacingDiagnosticsSubscriber.js +3 -3
  123. package/dist/dist-esm/calling-stateful-client/src/UserFacingDiagnosticsSubscriber.js.map +1 -1
  124. package/dist/dist-esm/calling-stateful-client/src/VideoStreamRendererViewDeclarative.js +6 -7
  125. package/dist/dist-esm/calling-stateful-client/src/VideoStreamRendererViewDeclarative.js.map +1 -1
  126. package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +2 -0
  127. package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
  128. package/dist/dist-esm/calling-stateful-client/src/index.js.map +1 -1
  129. package/dist/dist-esm/chat-component-bindings/src/baseSelectors.js +4 -4
  130. package/dist/dist-esm/chat-component-bindings/src/baseSelectors.js.map +1 -1
  131. package/dist/dist-esm/chat-component-bindings/src/chatParticipantListSelector.js +3 -3
  132. package/dist/dist-esm/chat-component-bindings/src/chatParticipantListSelector.js.map +1 -1
  133. package/dist/dist-esm/chat-component-bindings/src/errorBarSelector.js +13 -14
  134. package/dist/dist-esm/chat-component-bindings/src/errorBarSelector.js.map +1 -1
  135. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.d.ts +4 -1
  136. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js +3 -10
  137. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js.map +1 -1
  138. package/dist/dist-esm/chat-component-bindings/src/hooks/useHandlers.js.map +1 -1
  139. package/dist/dist-esm/chat-component-bindings/src/hooks/usePropsFor.js.map +1 -1
  140. package/dist/dist-esm/chat-component-bindings/src/hooks/useSelector.js.map +1 -1
  141. package/dist/dist-esm/chat-component-bindings/src/index.js.map +1 -1
  142. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +41 -10
  143. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  144. package/dist/dist-esm/chat-component-bindings/src/providers/ChatClientProvider.js.map +1 -1
  145. package/dist/dist-esm/chat-component-bindings/src/providers/ChatThreadClientProvider.js +1 -1
  146. package/dist/dist-esm/chat-component-bindings/src/providers/ChatThreadClientProvider.js.map +1 -1
  147. package/dist/dist-esm/chat-component-bindings/src/sendBoxSelector.js.map +1 -1
  148. package/dist/dist-esm/chat-component-bindings/src/typingIndicatorSelector.js +3 -7
  149. package/dist/dist-esm/chat-component-bindings/src/typingIndicatorSelector.js.map +1 -1
  150. package/dist/dist-esm/chat-component-bindings/src/utils/compareMessages.js +3 -1
  151. package/dist/dist-esm/chat-component-bindings/src/utils/compareMessages.js.map +1 -1
  152. package/dist/dist-esm/chat-component-bindings/src/utils/constants.js.map +1 -1
  153. package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js.map +1 -1
  154. package/dist/dist-esm/chat-stateful-client/src/ChatClientState.js.map +1 -1
  155. package/dist/dist-esm/chat-stateful-client/src/ChatContext.js +5 -9
  156. package/dist/dist-esm/chat-stateful-client/src/ChatContext.js.map +1 -1
  157. package/dist/dist-esm/chat-stateful-client/src/Constants.js.map +1 -1
  158. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js +7 -12
  159. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js.map +1 -1
  160. package/dist/dist-esm/chat-stateful-client/src/Logger.js.map +1 -1
  161. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.js +57 -67
  162. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.js.map +1 -1
  163. package/dist/dist-esm/chat-stateful-client/src/StatefulChatThreadClient.js +113 -127
  164. package/dist/dist-esm/chat-stateful-client/src/StatefulChatThreadClient.js.map +1 -1
  165. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js.map +1 -1
  166. package/dist/dist-esm/chat-stateful-client/src/index.js.map +1 -1
  167. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedIterator.js.map +1 -1
  168. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListMessages.js.map +1 -1
  169. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListParticipants.js.map +1 -1
  170. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListReadReceipts.js.map +1 -1
  171. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListThreads.js.map +1 -1
  172. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.js.map +1 -1
  173. package/dist/dist-esm/communication-react/src/index.d.ts +21 -0
  174. package/dist/dist-esm/communication-react/src/index.js +14 -0
  175. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  176. package/dist/dist-esm/communication-react/src/mergedHooks.js.map +1 -1
  177. package/dist/dist-esm/react-components/src/components/Announcer.js.map +1 -1
  178. package/dist/dist-esm/react-components/src/components/CameraButton.js +6 -6
  179. package/dist/dist-esm/react-components/src/components/CameraButton.js.map +1 -1
  180. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionMenu.js +7 -8
  181. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionMenu.js.map +1 -1
  182. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionsFlyout.js +36 -17
  183. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionsFlyout.js.map +1 -1
  184. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js +8 -4
  185. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
  186. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +24 -30
  187. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  188. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +55 -24
  189. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  190. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +7 -11
  191. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  192. package/dist/dist-esm/react-components/src/components/ComplianceBanner/BannerMessage.js +18 -18
  193. package/dist/dist-esm/react-components/src/components/ComplianceBanner/BannerMessage.js.map +1 -1
  194. package/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.js +7 -4
  195. package/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.js.map +1 -1
  196. package/dist/dist-esm/react-components/src/components/ComplianceBanner/DelayedUpdateBanner.js +2 -2
  197. package/dist/dist-esm/react-components/src/components/ComplianceBanner/DelayedUpdateBanner.js.map +1 -1
  198. package/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.js.map +1 -1
  199. package/dist/dist-esm/react-components/src/components/ComplianceBanner/index.js.map +1 -1
  200. package/dist/dist-esm/react-components/src/components/ComplianceBanner/types.js.map +1 -1
  201. package/dist/dist-esm/react-components/src/components/ControlBar.js +10 -14
  202. package/dist/dist-esm/react-components/src/components/ControlBar.js.map +1 -1
  203. package/dist/dist-esm/react-components/src/components/ControlBarButton.js +14 -4
  204. package/dist/dist-esm/react-components/src/components/ControlBarButton.js.map +1 -1
  205. package/dist/dist-esm/react-components/src/components/ControlButtonTooltip.js +3 -14
  206. package/dist/dist-esm/react-components/src/components/ControlButtonTooltip.js.map +1 -1
  207. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDenied.d.ts +69 -0
  208. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDenied.js +37 -0
  209. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDenied.js.map +1 -0
  210. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDeniedIOS.d.ts +75 -0
  211. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDeniedIOS.js +58 -0
  212. package/dist/dist-esm/react-components/src/components/DevicePermissions/BrowserPermissionDeniedIOS.js.map +1 -0
  213. package/dist/dist-esm/react-components/src/components/DevicePermissions/DevicePermissionDropdown.js +5 -8
  214. package/dist/dist-esm/react-components/src/components/DevicePermissions/DevicePermissionDropdown.js.map +1 -1
  215. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissions.d.ts +105 -0
  216. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissions.js +86 -0
  217. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissions.js.map +1 -0
  218. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissionsScaffolding.d.ts +86 -0
  219. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissionsScaffolding.js +31 -0
  220. package/dist/dist-esm/react-components/src/components/DevicePermissions/SitePermissionsScaffolding.js.map +1 -0
  221. package/dist/dist-esm/react-components/src/components/DevicesButton.js +7 -30
  222. package/dist/dist-esm/react-components/src/components/DevicesButton.js.map +1 -1
  223. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +42 -44
  224. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  225. package/dist/dist-esm/react-components/src/components/Drawer/DrawerContentContainer.d.ts +1 -0
  226. package/dist/dist-esm/react-components/src/components/Drawer/DrawerContentContainer.js +18 -2
  227. package/dist/dist-esm/react-components/src/components/Drawer/DrawerContentContainer.js.map +1 -1
  228. package/dist/dist-esm/react-components/src/components/Drawer/DrawerLightDismiss.js +2 -6
  229. package/dist/dist-esm/react-components/src/components/Drawer/DrawerLightDismiss.js.map +1 -1
  230. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.d.ts +4 -0
  231. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js +6 -6
  232. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js.map +1 -1
  233. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js +11 -23
  234. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js.map +1 -1
  235. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.d.ts +4 -0
  236. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.js +3 -3
  237. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.js.map +1 -1
  238. package/dist/dist-esm/react-components/src/components/Drawer/index.js.map +1 -1
  239. package/dist/dist-esm/react-components/src/components/EndCallButton.js +3 -7
  240. package/dist/dist-esm/react-components/src/components/EndCallButton.js.map +1 -1
  241. package/dist/dist-esm/react-components/src/components/ErrorBar.js +2 -5
  242. package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
  243. package/dist/dist-esm/react-components/src/components/FileCard.js +2 -3
  244. package/dist/dist-esm/react-components/src/components/FileCard.js.map +1 -1
  245. package/dist/dist-esm/react-components/src/components/FileCardGroup.js +1 -1
  246. package/dist/dist-esm/react-components/src/components/FileCardGroup.js.map +1 -1
  247. package/dist/dist-esm/react-components/src/components/FileDownloadCards.js +12 -9
  248. package/dist/dist-esm/react-components/src/components/FileDownloadCards.js.map +1 -1
  249. package/dist/dist-esm/react-components/src/components/FileUploadCards.js +8 -7
  250. package/dist/dist-esm/react-components/src/components/FileUploadCards.js.map +1 -1
  251. package/dist/dist-esm/react-components/src/components/GridLayout.js +37 -37
  252. package/dist/dist-esm/react-components/src/components/GridLayout.js.map +1 -1
  253. package/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.js +2 -2
  254. package/dist/dist-esm/react-components/src/components/HighContrastAwareIcon.js.map +1 -1
  255. package/dist/dist-esm/react-components/src/components/HoldButton.d.ts +49 -0
  256. package/dist/dist-esm/react-components/src/components/HoldButton.js +25 -0
  257. package/dist/dist-esm/react-components/src/components/HoldButton.js.map +1 -0
  258. package/dist/dist-esm/react-components/src/components/HorizontalGallery.js +5 -7
  259. package/dist/dist-esm/react-components/src/components/HorizontalGallery.js.map +1 -1
  260. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +5 -12
  261. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
  262. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js +3 -5
  263. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js.map +1 -1
  264. package/dist/dist-esm/react-components/src/components/LocalVideoTile.js +27 -9
  265. package/dist/dist-esm/react-components/src/components/LocalVideoTile.js.map +1 -1
  266. package/dist/dist-esm/react-components/src/components/MessageStatusIndicator.js +23 -36
  267. package/dist/dist-esm/react-components/src/components/MessageStatusIndicator.js.map +1 -1
  268. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +23 -1
  269. package/dist/dist-esm/react-components/src/components/MessageThread.js +157 -97
  270. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  271. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js +9 -6
  272. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js.map +1 -1
  273. package/dist/dist-esm/react-components/src/components/ModalClone/ModalClone.js +94 -101
  274. package/dist/dist-esm/react-components/src/components/ModalClone/ModalClone.js.map +1 -1
  275. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts +13 -0
  276. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +22 -21
  277. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  278. package/dist/dist-esm/react-components/src/components/ParticipantList.js +25 -9
  279. package/dist/dist-esm/react-components/src/components/ParticipantList.js.map +1 -1
  280. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js +46 -32
  281. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js.map +1 -1
  282. package/dist/dist-esm/react-components/src/components/PictureInPictureInPicture/PictureInPictureInPicture.js +3 -3
  283. package/dist/dist-esm/react-components/src/components/PictureInPictureInPicture/PictureInPictureInPicture.js.map +1 -1
  284. package/dist/dist-esm/react-components/src/components/PictureInPictureInPicture/PictureInPictureInPictureTile.js +3 -3
  285. package/dist/dist-esm/react-components/src/components/PictureInPictureInPicture/PictureInPictureInPictureTile.js.map +1 -1
  286. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +2 -1
  287. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +68 -12
  288. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  289. package/dist/dist-esm/react-components/src/components/ResponsiveHorizontalGallery.js +2 -2
  290. package/dist/dist-esm/react-components/src/components/ResponsiveHorizontalGallery.js.map +1 -1
  291. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js +6 -12
  292. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js.map +1 -1
  293. package/dist/dist-esm/react-components/src/components/SendBox.d.ts +35 -0
  294. package/dist/dist-esm/react-components/src/components/SendBox.js +32 -8
  295. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  296. package/dist/dist-esm/react-components/src/components/SendBoxErrorBar.js +2 -2
  297. package/dist/dist-esm/react-components/src/components/SendBoxErrorBar.js.map +1 -1
  298. package/dist/dist-esm/react-components/src/components/SendBoxErrors.js.map +1 -1
  299. package/dist/dist-esm/react-components/src/components/StreamMedia.js +3 -3
  300. package/dist/dist-esm/react-components/src/components/StreamMedia.js.map +1 -1
  301. package/dist/dist-esm/react-components/src/components/SystemMessage.js +2 -4
  302. package/dist/dist-esm/react-components/src/components/SystemMessage.js.map +1 -1
  303. package/dist/dist-esm/react-components/src/components/TroubleshootingGuideErrorBar.js +10 -10
  304. package/dist/dist-esm/react-components/src/components/TroubleshootingGuideErrorBar.js.map +1 -1
  305. package/dist/dist-esm/react-components/src/components/TypingIndicator.js +9 -6
  306. package/dist/dist-esm/react-components/src/components/TypingIndicator.js.map +1 -1
  307. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.d.ts +1 -1
  308. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.js +12 -1
  309. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.js.map +1 -1
  310. package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js +13 -1
  311. package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js.map +1 -1
  312. package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js +20 -0
  313. package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js.map +1 -1
  314. package/dist/dist-esm/react-components/src/components/UnsupportedOperatingSystem.d.ts +1 -1
  315. package/dist/dist-esm/react-components/src/components/UnsupportedOperatingSystem.js +12 -1
  316. package/dist/dist-esm/react-components/src/components/UnsupportedOperatingSystem.js.map +1 -1
  317. package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js +31 -12
  318. package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js.map +1 -1
  319. package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideo.js +11 -14
  320. package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideo.js.map +1 -1
  321. package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js +39 -20
  322. package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js.map +1 -1
  323. package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.d.ts +4 -0
  324. package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js.map +1 -1
  325. package/dist/dist-esm/react-components/src/components/VideoGallery/LocalScreenShare.js +7 -7
  326. package/dist/dist-esm/react-components/src/components/VideoGallery/LocalScreenShare.js.map +1 -1
  327. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js +8 -6
  328. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js.map +1 -1
  329. package/dist/dist-esm/react-components/src/components/VideoGallery/ScrollableHorizontalGallery.d.ts +9 -0
  330. package/dist/dist-esm/react-components/src/components/VideoGallery/ScrollableHorizontalGallery.js +18 -0
  331. package/dist/dist-esm/react-components/src/components/VideoGallery/ScrollableHorizontalGallery.js.map +1 -0
  332. package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js +2 -7
  333. package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js.map +1 -1
  334. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/DefaultLayout.styles.js +1 -6
  335. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/DefaultLayout.styles.js.map +1 -1
  336. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js +8 -29
  337. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js.map +1 -1
  338. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideoLayout.styles.js +2 -11
  339. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideoLayout.styles.js.map +1 -1
  340. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/Layout.styles.d.ts +6 -0
  341. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/Layout.styles.js +9 -0
  342. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/Layout.styles.js.map +1 -0
  343. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/LocalScreenShare.styles.js.map +1 -1
  344. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/RemoteScreenShare.styles.js.map +1 -1
  345. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/RemoteVideoTile.styles.js.map +1 -1
  346. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/ScrollableHorizontalGallery.style.d.ts +10 -0
  347. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/ScrollableHorizontalGallery.style.js +29 -0
  348. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/ScrollableHorizontalGallery.style.js.map +1 -0
  349. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js +10 -10
  350. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js.map +1 -1
  351. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoStreamLifecycleMaintainer.js +10 -5
  352. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoStreamLifecycleMaintainer.js.map +1 -1
  353. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.d.ts +2 -0
  354. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js +31 -30
  355. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js.map +1 -1
  356. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.d.ts +7 -16
  357. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js +55 -26
  358. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js.map +1 -1
  359. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +66 -0
  360. package/dist/dist-esm/react-components/src/components/VideoGallery.js +140 -20
  361. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  362. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts +22 -1
  363. package/dist/dist-esm/react-components/src/components/VideoTile.js +98 -46
  364. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  365. package/dist/dist-esm/react-components/src/components/VoiceOverButton.js +3 -10
  366. package/dist/dist-esm/react-components/src/components/VoiceOverButton.js.map +1 -1
  367. package/dist/dist-esm/react-components/src/components/index.d.ts +13 -0
  368. package/dist/dist-esm/react-components/src/components/index.js +8 -0
  369. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  370. package/dist/dist-esm/react-components/src/components/styles/BrowserPermissionDenied.styles.d.ts +58 -0
  371. package/dist/dist-esm/react-components/src/components/styles/BrowserPermissionDenied.styles.js +144 -0
  372. package/dist/dist-esm/react-components/src/components/styles/BrowserPermissionDenied.styles.js.map +1 -0
  373. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js +3 -12
  374. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js.map +1 -1
  375. package/dist/dist-esm/react-components/src/components/styles/ControlBar.styles.js.map +1 -1
  376. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -1
  377. package/dist/dist-esm/react-components/src/components/styles/EditBox.styles.js.map +1 -1
  378. package/dist/dist-esm/react-components/src/components/styles/GridLayout.styles.js.map +1 -1
  379. package/dist/dist-esm/react-components/src/components/styles/HorizontalGallery.styles.js.map +1 -1
  380. package/dist/dist-esm/react-components/src/components/styles/IconButton.styles.js.map +1 -1
  381. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js +1 -4
  382. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js.map +1 -1
  383. package/dist/dist-esm/react-components/src/components/styles/MessageStatusIndicator.styles.js.map +1 -1
  384. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +2 -7
  385. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  386. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js +0 -1
  387. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js.map +1 -1
  388. package/dist/dist-esm/react-components/src/components/styles/ParticipantList.styles.js.map +1 -1
  389. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +2 -10
  390. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
  391. package/dist/dist-esm/react-components/src/components/styles/SitePermissions.styles.d.ts +38 -0
  392. package/dist/dist-esm/react-components/src/components/styles/SitePermissions.styles.js +92 -0
  393. package/dist/dist-esm/react-components/src/components/styles/SitePermissions.styles.js.map +1 -0
  394. package/dist/dist-esm/react-components/src/components/styles/StreamMedia.styles.js +0 -3
  395. package/dist/dist-esm/react-components/src/components/styles/StreamMedia.styles.js.map +1 -1
  396. package/dist/dist-esm/react-components/src/components/styles/SystemMessage.styles.js.map +1 -1
  397. package/dist/dist-esm/react-components/src/components/styles/TroubleshootingGuideErrorBar.styles.js +2 -2
  398. package/dist/dist-esm/react-components/src/components/styles/TroubleshootingGuideErrorBar.styles.js.map +1 -1
  399. package/dist/dist-esm/react-components/src/components/styles/TypingIndicator.styles.js.map +1 -1
  400. package/dist/dist-esm/react-components/src/components/styles/UnsupportedEnvironment.styles.d.ts +26 -0
  401. package/dist/dist-esm/react-components/src/components/styles/UnsupportedEnvironment.styles.js +67 -0
  402. package/dist/dist-esm/react-components/src/components/styles/UnsupportedEnvironment.styles.js.map +1 -0
  403. package/dist/dist-esm/react-components/src/components/styles/VideoGallery.styles.js +2 -13
  404. package/dist/dist-esm/react-components/src/components/styles/VideoGallery.styles.js.map +1 -1
  405. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  406. package/dist/dist-esm/react-components/src/components/styles/VoiceOverButton.style.js.map +1 -1
  407. package/dist/dist-esm/react-components/src/components/utils/Datetime.js.map +1 -1
  408. package/dist/dist-esm/react-components/src/components/utils/common.js +4 -0
  409. package/dist/dist-esm/react-components/src/components/utils/common.js.map +1 -1
  410. package/dist/dist-esm/react-components/src/components/utils/delay.js.map +1 -1
  411. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.js.map +1 -1
  412. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js +2 -5
  413. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js.map +1 -1
  414. package/dist/dist-esm/react-components/src/components/utils/keyboardNavigation.js.map +1 -1
  415. package/dist/dist-esm/react-components/src/components/utils/merge.d.ts +7 -0
  416. package/dist/dist-esm/react-components/src/components/utils/merge.js +16 -0
  417. package/dist/dist-esm/react-components/src/components/utils/merge.js.map +1 -0
  418. package/dist/dist-esm/react-components/src/components/utils/responsive.js +2 -2
  419. package/dist/dist-esm/react-components/src/components/utils/responsive.js.map +1 -1
  420. package/dist/dist-esm/react-components/src/components/utils/useLongPress.d.ts +1 -0
  421. package/dist/dist-esm/react-components/src/components/utils/useLongPress.js +15 -2
  422. package/dist/dist-esm/react-components/src/components/utils/useLongPress.js.map +1 -1
  423. package/dist/dist-esm/react-components/src/components/utils/videoTileStylesUtils.js +1 -3
  424. package/dist/dist-esm/react-components/src/components/utils/videoTileStylesUtils.js.map +1 -1
  425. package/dist/dist-esm/react-components/src/components/utils.js +9 -8
  426. package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
  427. package/dist/dist-esm/react-components/src/gallery/dominantSpeaker.js +14 -10
  428. package/dist/dist-esm/react-components/src/gallery/dominantSpeaker.js.map +1 -1
  429. package/dist/dist-esm/react-components/src/gallery/index.js.map +1 -1
  430. package/dist/dist-esm/react-components/src/identifiers/IdentifierProvider.js.map +1 -1
  431. package/dist/dist-esm/react-components/src/identifiers/index.js.map +1 -1
  432. package/dist/dist-esm/react-components/src/index.d.ts +2 -0
  433. package/dist/dist-esm/react-components/src/index.js +2 -0
  434. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  435. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +54 -0
  436. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  437. package/dist/dist-esm/react-components/src/localization/index.js.map +1 -1
  438. package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +6 -96
  439. package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +5 -95
  440. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +1 -2
  441. package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +5 -95
  442. package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +6 -96
  443. package/dist/dist-esm/react-components/src/localization/locales/index.js +14 -42
  444. package/dist/dist-esm/react-components/src/localization/locales/index.js.map +1 -1
  445. package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +5 -95
  446. package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +5 -95
  447. package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +5 -95
  448. package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +5 -95
  449. package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +6 -96
  450. package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +5 -95
  451. package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +6 -96
  452. package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +5 -95
  453. package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +5 -95
  454. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.d.ts +61 -0
  455. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js +74 -0
  456. package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js.map +1 -0
  457. package/dist/dist-esm/react-components/src/permissions/index.d.ts +2 -0
  458. package/dist/dist-esm/react-components/src/permissions/index.js +4 -0
  459. package/dist/dist-esm/react-components/src/permissions/index.js.map +1 -0
  460. package/dist/dist-esm/react-components/src/theming/FluentThemeProvider.js +3 -6
  461. package/dist/dist-esm/react-components/src/theming/FluentThemeProvider.js.map +1 -1
  462. package/dist/dist-esm/react-components/src/theming/icons.d.ts +20 -0
  463. package/dist/dist-esm/react-components/src/theming/icons.js +121 -11
  464. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  465. package/dist/dist-esm/react-components/src/theming/icons.styles.d.ts +6 -0
  466. package/dist/dist-esm/react-components/src/theming/icons.styles.js +25 -0
  467. package/dist/dist-esm/react-components/src/theming/icons.styles.js.map +1 -0
  468. package/dist/dist-esm/react-components/src/theming/index.js.map +1 -1
  469. package/dist/dist-esm/react-components/src/theming/themeUtils.js.map +1 -1
  470. package/dist/dist-esm/react-components/src/theming/themes.js.map +1 -1
  471. package/dist/dist-esm/react-components/src/types/ChatMessage.d.ts +7 -0
  472. package/dist/dist-esm/react-components/src/types/ChatMessage.js.map +1 -1
  473. package/dist/dist-esm/react-components/src/types/CommunicationParticipant.js.map +1 -1
  474. package/dist/dist-esm/react-components/src/types/CustomStylesProps.js.map +1 -1
  475. package/dist/dist-esm/react-components/src/types/OnRender.d.ts +8 -0
  476. package/dist/dist-esm/react-components/src/types/OnRender.js.map +1 -1
  477. package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.d.ts +3 -0
  478. package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.js +2 -0
  479. package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.js.map +1 -1
  480. package/dist/dist-esm/react-components/src/types/ReadReceiptsBySenderId.js.map +1 -1
  481. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.d.ts +8 -0
  482. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.js +2 -0
  483. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.js.map +1 -1
  484. package/dist/dist-esm/react-components/src/types/index.js.map +1 -1
  485. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +89 -0
  486. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +95 -17
  487. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  488. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +120 -0
  489. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  490. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +77 -6
  491. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +248 -31
  492. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  493. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +107 -1
  494. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js +9 -1
  495. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  496. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapterProvider.js.map +1 -1
  497. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/DiagnosticsForwarder.js.map +1 -1
  498. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/ParticipantSubcriber.js.map +1 -1
  499. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/createHandlers.d.ts +3 -2
  500. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/createHandlers.js +8 -2
  501. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/createHandlers.js.map +1 -1
  502. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.d.ts +5 -0
  503. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js +2 -0
  504. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js.map +1 -1
  505. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +3 -0
  506. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +76 -10
  507. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  508. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.d.ts +2 -0
  509. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +135 -13
  510. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  511. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.d.ts +24 -0
  512. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js +80 -0
  513. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js.map +1 -0
  514. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.d.ts +48 -0
  515. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js +210 -0
  516. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js.map +1 -0
  517. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageCameraDropdown.d.ts +2 -0
  518. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageCameraDropdown.js +21 -0
  519. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageCameraDropdown.js.map +1 -1
  520. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageErrorBar.js +20 -2
  521. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageErrorBar.js.map +1 -1
  522. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageMicDropdown.d.ts +2 -0
  523. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageMicDropdown.js +21 -0
  524. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationPageMicDropdown.js.map +1 -1
  525. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ExpandedLocalVideoTile.js +5 -4
  526. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ExpandedLocalVideoTile.js.map +1 -1
  527. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.d.ts +12 -0
  528. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js +93 -0
  529. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js.map +1 -0
  530. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js +2 -2
  531. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js.map +1 -1
  532. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalAndRemotePIP.js +32 -22
  533. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalAndRemotePIP.js.map +1 -1
  534. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.d.ts +1 -0
  535. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +66 -19
  536. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  537. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js +16 -21
  538. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js.map +1 -1
  539. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.d.ts +2 -0
  540. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +25 -17
  541. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  542. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MutedNotification.js +2 -2
  543. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MutedNotification.js.map +1 -1
  544. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +2 -2
  545. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
  546. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js +1 -1
  547. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js.map +1 -1
  548. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js +1 -1
  549. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js.map +1 -1
  550. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.d.ts +17 -0
  551. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.js +63 -0
  552. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.js.map +1 -0
  553. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js +44 -5
  554. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js.map +1 -1
  555. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js +5 -2
  556. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js.map +1 -1
  557. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js +8 -6
  558. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
  559. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Participants.js +5 -2
  560. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Participants.js.map +1 -1
  561. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.d.ts +8 -0
  562. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.js +26 -0
  563. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.js.map +1 -0
  564. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.js +3 -1
  565. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.js.map +1 -1
  566. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useAdaptedSelector.js +13 -9
  567. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useAdaptedSelector.js.map +1 -1
  568. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +27 -6
  569. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  570. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/usePropsFor.js.map +1 -1
  571. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useSelector.js +1 -1
  572. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useSelector.js.map +1 -1
  573. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useSidePaneState.d.ts +16 -0
  574. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useSidePaneState.js +38 -0
  575. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useSidePaneState.js.map +1 -0
  576. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +7 -0
  577. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js +2 -0
  578. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  579. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.d.ts +1 -0
  580. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +8 -2
  581. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  582. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +8 -0
  583. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +140 -12
  584. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  585. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.d.ts +15 -0
  586. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js +38 -0
  587. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js.map +1 -0
  588. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.d.ts +1 -0
  589. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js +19 -7
  590. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js.map +1 -1
  591. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js +2 -2
  592. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js.map +1 -1
  593. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.d.ts +15 -0
  594. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js +54 -0
  595. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js.map +1 -0
  596. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/LocalVideoTileSelector.d.ts +2 -2
  597. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/LocalVideoTileSelector.js +1 -1
  598. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/LocalVideoTileSelector.js.map +1 -1
  599. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +10 -0
  600. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +10 -0
  601. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  602. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/callStatusSelector.d.ts +1 -1
  603. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/callStatusSelector.js.map +1 -1
  604. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/complianceBannerSelector.d.ts +1 -1
  605. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/complianceBannerSelector.js.map +1 -1
  606. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/devicePermissionSelector.d.ts +2 -2
  607. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/devicePermissionSelector.js +1 -1
  608. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/devicePermissionSelector.js.map +1 -1
  609. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.d.ts +2 -2
  610. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.js +11 -5
  611. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.js.map +1 -1
  612. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/lobbySelector.d.ts +1 -1
  613. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/lobbySelector.js +1 -1
  614. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/lobbySelector.js.map +1 -1
  615. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localAndRemotePIPSelector.d.ts +4 -4
  616. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localAndRemotePIPSelector.js.map +1 -1
  617. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.d.ts +2 -2
  618. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.js +4 -4
  619. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.js.map +1 -1
  620. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localVideoStreamSelector.d.ts +1 -1
  621. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localVideoStreamSelector.js +1 -1
  622. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localVideoStreamSelector.js.map +1 -1
  623. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mediaGallerySelector.d.ts +5 -5
  624. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mediaGallerySelector.js +4 -4
  625. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mediaGallerySelector.js.map +1 -1
  626. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mutedNotificationSelector.d.ts +2 -2
  627. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mutedNotificationSelector.js +1 -1
  628. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mutedNotificationSelector.js.map +1 -1
  629. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/networkReconnectTileSelector.d.ts +2 -2
  630. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/networkReconnectTileSelector.js.map +1 -1
  631. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/Buttons.styles.js +1 -1
  632. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/Buttons.styles.js.map +1 -1
  633. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallComposite.styles.js +2 -6
  634. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallComposite.styles.js.map +1 -1
  635. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +2 -6
  636. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  637. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallControls.styles.js.map +1 -1
  638. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js +2 -0
  639. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js.map +1 -1
  640. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/ExpandedLocalVideoTile.styles.js +1 -4
  641. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/ExpandedLocalVideoTile.styles.js.map +1 -1
  642. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.d.ts +32 -0
  643. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js +81 -0
  644. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js.map +1 -0
  645. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LobbyTile.styles.js +1 -4
  646. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LobbyTile.styles.js.map +1 -1
  647. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.js.map +1 -1
  648. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  649. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/NetworkReconnectTile.styles.js.map +1 -1
  650. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/NoticePage.styles.js.map +1 -1
  651. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/StartCallButton.styles.js +0 -1
  652. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/StartCallButton.styles.js.map +1 -1
  653. package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.d.ts +23 -3
  654. package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.js.map +1 -1
  655. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js +9 -11
  656. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map +1 -1
  657. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +15 -3
  658. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +106 -12
  659. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  660. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/index.js.map +1 -1
  661. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +87 -4
  662. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +78 -14
  663. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  664. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.d.ts +1 -0
  665. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +41 -15
  666. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
  667. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.d.ts +2 -0
  668. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js +34 -12
  669. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js.map +1 -1
  670. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButton.js +1 -1
  671. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButton.js.map +1 -1
  672. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButtonWithUnreadMessagesBadge.js +9 -7
  673. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButtonWithUnreadMessagesBadge.js.map +1 -1
  674. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ConvertContextualMenuItemToDrawerMenuItem.js.map +1 -1
  675. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CustomButton.d.ts +67 -0
  676. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CustomButton.js +75 -0
  677. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CustomButton.js.map +1 -0
  678. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/NotificationIcon.js +3 -6
  679. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/NotificationIcon.js.map +1 -1
  680. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PeopleButton.js +1 -1
  681. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PeopleButton.js.map +1 -1
  682. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PreparedMoreDrawer.d.ts +1 -0
  683. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PreparedMoreDrawer.js.map +1 -1
  684. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +32 -0
  685. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.js.map +1 -1
  686. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +25 -4
  687. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +139 -7
  688. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  689. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +60 -0
  690. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  691. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +10 -2
  692. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +39 -1
  693. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  694. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.d.ts +9 -0
  695. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js +31 -1
  696. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js.map +1 -1
  697. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/parseTeamsUrl.js.map +1 -1
  698. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/DesktopMoreButton.d.ts +13 -0
  699. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/DesktopMoreButton.js +65 -0
  700. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/DesktopMoreButton.js.map +1 -0
  701. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js +67 -21
  702. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js.map +1 -1
  703. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/hooks/useCallWithChatCompositeStrings.js.map +1 -1
  704. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/index.d.ts +1 -0
  705. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/index.js.map +1 -1
  706. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/selectors/moreDrawerSelector.js +1 -1
  707. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/selectors/moreDrawerSelector.js.map +1 -1
  708. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts +22 -0
  709. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js +10 -2
  710. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js.map +1 -1
  711. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js.map +1 -1
  712. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.d.ts +20 -0
  713. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js +6 -2
  714. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  715. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatHeader.js +3 -5
  716. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatHeader.js.map +1 -1
  717. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +41 -9
  718. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  719. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreenPeoplePane.d.ts +18 -0
  720. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreenPeoplePane.js +18 -0
  721. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreenPeoplePane.js.map +1 -0
  722. package/dist/dist-esm/react-composites/src/composites/ChatComposite/FileDownloadErrorBar.d.ts +15 -0
  723. package/dist/dist-esm/react-composites/src/composites/ChatComposite/FileDownloadErrorBar.js +21 -0
  724. package/dist/dist-esm/react-composites/src/composites/ChatComposite/FileDownloadErrorBar.js.map +1 -0
  725. package/dist/dist-esm/react-composites/src/composites/ChatComposite/Strings.d.ts +4 -0
  726. package/dist/dist-esm/react-composites/src/composites/ChatComposite/Strings.js.map +1 -1
  727. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +9 -0
  728. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +88 -25
  729. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  730. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.d.ts +28 -0
  731. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js +154 -1
  732. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js.map +1 -1
  733. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +13 -2
  734. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  735. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js +2 -0
  736. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js.map +1 -1
  737. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUpload.js.map +1 -1
  738. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js +18 -6
  739. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js.map +1 -1
  740. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadHandler.js.map +1 -1
  741. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.js.map +1 -1
  742. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useAdaptedSelector.js +3 -5
  743. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useAdaptedSelector.js.map +1 -1
  744. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js +3 -1
  745. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js.map +1 -1
  746. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/usePropsFor.js.map +1 -1
  747. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.d.ts +6 -0
  748. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.js +11 -0
  749. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useSelector.js.map +1 -0
  750. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.d.ts +3 -0
  751. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.js.map +1 -1
  752. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.d.ts +12 -0
  753. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js +13 -0
  754. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js.map +1 -0
  755. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.d.ts +23 -0
  756. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.js +12 -0
  757. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.js.map +1 -0
  758. package/dist/dist-esm/react-composites/src/composites/ChatComposite/styles/Chat.styles.js +2 -6
  759. package/dist/dist-esm/react-composites/src/composites/ChatComposite/styles/Chat.styles.js.map +1 -1
  760. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.d.ts +5 -1
  761. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js +17 -6
  762. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js.map +1 -1
  763. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts +22 -0
  764. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +105 -0
  765. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -0
  766. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.d.ts +17 -0
  767. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.js +32 -0
  768. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.js.map +1 -0
  769. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.d.ts +5 -0
  770. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.js +10 -4
  771. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.js.map +1 -1
  772. package/dist/dist-esm/react-composites/src/composites/common/BaseComposite.js +5 -14
  773. package/dist/dist-esm/react-composites/src/composites/common/BaseComposite.js.map +1 -1
  774. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.d.ts +22 -0
  775. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js +60 -0
  776. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js.map +1 -0
  777. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.d.ts +15 -0
  778. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.js +61 -0
  779. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.js.map +1 -0
  780. package/dist/dist-esm/react-composites/src/composites/common/ContainerRectProps.js +1 -5
  781. package/dist/dist-esm/react-composites/src/composites/common/ContainerRectProps.js.map +1 -1
  782. package/dist/dist-esm/react-composites/src/composites/common/HiddenFocusStartPoint.js +1 -1
  783. package/dist/dist-esm/react-composites/src/composites/common/HiddenFocusStartPoint.js.map +1 -1
  784. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js +21 -6
  785. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
  786. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.js +1 -1
  787. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.js.map +1 -1
  788. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js +6 -8
  789. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js.map +1 -1
  790. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts +6 -1
  791. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +24 -5
  792. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  793. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.d.ts +17 -0
  794. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js +42 -0
  795. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js.map +1 -0
  796. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.d.ts +11 -0
  797. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js +40 -0
  798. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js.map +1 -0
  799. package/dist/dist-esm/react-composites/src/composites/common/SidePaneHeader.d.ts +2 -1
  800. package/dist/dist-esm/react-composites/src/composites/common/SidePaneHeader.js +6 -18
  801. package/dist/dist-esm/react-composites/src/composites/common/SidePaneHeader.js.map +1 -1
  802. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.d.ts +2 -1
  803. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js +10 -8
  804. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js.map +1 -1
  805. package/dist/dist-esm/react-composites/src/composites/common/adapters.js.map +1 -1
  806. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +33 -1
  807. package/dist/dist-esm/react-composites/src/composites/common/icons.js +19 -5
  808. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  809. package/dist/dist-esm/react-composites/src/composites/common/styles/GlobalHostLayer.styles.js.map +1 -1
  810. package/dist/dist-esm/react-composites/src/composites/common/styles/ModalLocalAndRemotePIP.styles.js +6 -16
  811. package/dist/dist-esm/react-composites/src/composites/common/styles/ModalLocalAndRemotePIP.styles.js.map +1 -1
  812. package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js +12 -51
  813. package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js.map +1 -1
  814. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js +5 -22
  815. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js.map +1 -1
  816. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.js +4 -22
  817. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.js.map +1 -1
  818. package/dist/dist-esm/react-composites/src/composites/common/utils.js +17 -12
  819. package/dist/dist-esm/react-composites/src/composites/common/utils.js.map +1 -1
  820. package/dist/dist-esm/react-composites/src/composites/index.js.map +1 -1
  821. package/dist/dist-esm/react-composites/src/composites/localization/LocalizationProvider.js +2 -2
  822. package/dist/dist-esm/react-composites/src/composites/localization/LocalizationProvider.js.map +1 -1
  823. package/dist/dist-esm/react-composites/src/composites/localization/index.js.map +1 -1
  824. package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +3 -17
  825. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +3 -17
  826. package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +3 -17
  827. package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +3 -17
  828. package/dist/dist-esm/react-composites/src/composites/localization/locales/index.js.map +1 -1
  829. package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +3 -17
  830. package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +3 -17
  831. package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +3 -17
  832. package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +3 -17
  833. package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +3 -17
  834. package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +3 -17
  835. package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +3 -17
  836. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +3 -17
  837. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +3 -17
  838. package/dist/dist-esm/react-composites/src/index-public.js.map +1 -1
  839. package/package.json +15 -14
@@ -4,23 +4,25 @@ import { useCallback, useRef } from 'react';
4
4
  import { smartDominantSpeakerParticipants } from '../../../gallery';
5
5
  const DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;
6
6
  const DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;
7
- /**
8
- * @private
9
- */
10
- export const useFloatingLocalVideoLayout = (props) => {
7
+ const _useOrganizedParticipants = (props) => {
11
8
  var _a, _b;
12
9
  const visibleVideoParticipants = useRef([]);
13
10
  const visibleAudioParticipants = useRef([]);
14
11
  const { remoteParticipants, dominantSpeakers, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS, maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS, isScreenShareActive = false } = props;
15
12
  visibleVideoParticipants.current = smartDominantSpeakerParticipants({
16
- participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter(p => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
13
+ participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
17
14
  dominantSpeakers,
18
15
  lastVisibleParticipants: visibleVideoParticipants.current,
19
16
  maxDominantSpeakers: maxRemoteVideoStreams
20
17
  }).slice(0, maxRemoteVideoStreams);
21
- const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map(p => p.userId));
18
+ const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
19
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
20
+ const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' || 'Ringing'));
21
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
22
+ const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));
22
23
  visibleAudioParticipants.current = smartDominantSpeakerParticipants({
23
- participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter(p => !visibleVideoParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
24
+ participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
25
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
24
26
  dominantSpeakers,
25
27
  lastVisibleParticipants: visibleAudioParticipants.current,
26
28
  maxDominantSpeakers: maxAudioDominantSpeakers
@@ -29,30 +31,44 @@ export const useFloatingLocalVideoLayout = (props) => {
29
31
  if (isScreenShareActive) {
30
32
  return [];
31
33
  }
32
- return visibleVideoParticipants.current.length > 0 ? visibleVideoParticipants.current : visibleAudioParticipants.current;
33
- }, [isScreenShareActive]);
34
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
35
+ return visibleVideoParticipants.current.length > 0
36
+ ? visibleVideoParticipants.current
37
+ : visibleAudioParticipants.current.concat(callingParticipants);
38
+ return visibleVideoParticipants.current.length > 0
39
+ ? visibleVideoParticipants.current
40
+ : visibleAudioParticipants.current;
41
+ }, [
42
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
43
+ isScreenShareActive
44
+ ]);
34
45
  const gridParticipants = getGridParticipants();
35
46
  const getHorizontalGalleryRemoteParticipants = useCallback(() => {
36
47
  if (isScreenShareActive) {
37
48
  // If screen sharing is active, assign video and audio participants as horizontal gallery participants
49
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
50
+ return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));
38
51
  return visibleVideoParticipants.current.concat(visibleAudioParticipants.current);
39
52
  }
40
53
  else {
41
54
  // If screen sharing is not active, then assign all video tiles as grid tiles.
42
55
  // If there are no video tiles, then assign audio tiles as grid tiles.
56
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
57
+ return visibleVideoParticipants.current.length > 0
58
+ ? visibleAudioParticipants.current.concat(callingParticipants)
59
+ : [];
43
60
  return visibleVideoParticipants.current.length > 0 ? visibleAudioParticipants.current : [];
44
61
  }
45
- }, [isScreenShareActive]);
62
+ }, [
63
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
64
+ isScreenShareActive
65
+ ]);
46
66
  const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();
47
- return {
48
- gridParticipants,
49
- horizontalGalleryParticipants
50
- };
67
+ return { gridParticipants, horizontalGalleryParticipants };
51
68
  };
52
- /**
53
- * @private
54
- */
55
- export const usePinnedParticipantLayout = (props) => {
69
+ /* @conditional-compile-remove(pinned-participants) */
70
+ const _useOrganizedParticipantsWithPinnedParticipants = (props) => {
71
+ var _a;
56
72
  // map remote participants by userId
57
73
  const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {
58
74
  map[remoteParticipant.userId] = remoteParticipant;
@@ -62,7 +78,7 @@ export const usePinnedParticipantLayout = (props) => {
62
78
  let pinnedParticipantsWithVideoOnCount = 0;
63
79
  // get pinned participants in the same order of pinned participant user ids using remoteParticipantMap
64
80
  const pinnedParticipants = [];
65
- props.pinnedParticipantUserIds.forEach(id => {
81
+ (_a = props.pinnedParticipantUserIds) === null || _a === void 0 ? void 0 : _a.forEach((id) => {
66
82
  var _a;
67
83
  const pinnedParticipant = remoteParticipantMap[id];
68
84
  if (pinnedParticipant) {
@@ -74,19 +90,32 @@ export const usePinnedParticipantLayout = (props) => {
74
90
  });
75
91
  // get unpinned participants by filtering all remote participants using a set of pinned participant user ids
76
92
  const pinnedParticipantUserIdSet = new Set(props.pinnedParticipantUserIds);
77
- const unpinnedParticipants = props.remoteParticipants.filter(p => !pinnedParticipantUserIdSet.has(p.userId));
78
- const floatingLocalVideoLayoutProps = Object.assign(Object.assign({}, props), {
93
+ const unpinnedParticipants = props.remoteParticipants.filter((p) => !pinnedParticipantUserIdSet.has(p.userId));
94
+ const useOrganizedParticipantsProps = Object.assign(Object.assign({}, props), {
79
95
  // if there are pinned participants then we should only consider unpinned participants
80
96
  remoteParticipants: unpinnedParticipants,
81
97
  // if there is a maximum of remote video streams we need to subtract pinned participants with video
82
- maxRemoteVideoStreams: props.maxRemoteVideoStreams ? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount : undefined });
83
- const floatingLocalVideoLayout = useFloatingLocalVideoLayout(floatingLocalVideoLayoutProps);
84
- if (props.pinnedParticipantUserIds.length === 0) {
85
- return floatingLocalVideoLayout;
98
+ maxRemoteVideoStreams: props.maxRemoteVideoStreams
99
+ ? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount
100
+ : undefined });
101
+ const useOrganizedParticipantsResult = _useOrganizedParticipants(useOrganizedParticipantsProps);
102
+ if (pinnedParticipants.length === 0) {
103
+ return useOrganizedParticipantsResult;
86
104
  }
87
105
  return {
88
106
  gridParticipants: props.isScreenShareActive ? [] : pinnedParticipants,
89
- horizontalGalleryParticipants: props.isScreenShareActive ? pinnedParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants) : floatingLocalVideoLayout.gridParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)
107
+ horizontalGalleryParticipants: props.isScreenShareActive
108
+ ? pinnedParticipants.concat(useOrganizedParticipantsResult.horizontalGalleryParticipants)
109
+ : useOrganizedParticipantsResult.gridParticipants.concat(useOrganizedParticipantsResult.horizontalGalleryParticipants)
90
110
  };
91
111
  };
112
+ /**
113
+ * Hook to determine which participants should be in grid and horizontal gallery and their order respectively
114
+ * @private
115
+ */
116
+ export const useOrganizedParticipants = (args) => {
117
+ /* @conditional-compile-remove(pinned-participants) */
118
+ return _useOrganizedParticipantsWithPinnedParticipants(args);
119
+ return _useOrganizedParticipants(args);
120
+ };
92
121
  //# sourceMappingURL=videoGalleryLayoutUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"videoGalleryLayoutUtils.js","sourceRoot":"","sources":["../../../../../../../preprocess-dist/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { useCallback, useRef } from 'react';\nimport { smartDominantSpeakerParticipants } from '../../../gallery';\nimport { VideoGalleryParticipant, VideoGalleryRemoteParticipant } from '../../../types';\n\n/**\n * Arguments for {@link useFloatingLocalVideoLayout } to determine grid participants and horizontal participants\n * @private\n */\nexport interface UseFloatingLocalVideoLayoutArgs {\n remoteParticipants: VideoGalleryRemoteParticipant[];\n dominantSpeakers?: string[];\n maxRemoteVideoStreams?: number;\n maxAudioDominantSpeakers?: number;\n isScreenShareActive?: boolean;\n}\n\n/**\n * Arguments for {@link usePinnedParticipantLayout } to determine grid participants and horizontal participants\n * @private\n */\nexport interface UsePinnedParticipantLayoutArgs extends UseFloatingLocalVideoLayoutArgs {\n pinnedParticipantUserIds: string[];\n}\n\n/**\n * A layout result that defines grid participants and horizontal participants\n * @private\n */\nexport interface LayoutResult {\n gridParticipants: VideoGalleryParticipant[];\n horizontalGalleryParticipants: VideoGalleryParticipant[];\n}\nconst DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;\nconst DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;\n\n/**\n * @private\n */\nexport const useFloatingLocalVideoLayout = (props: UseFloatingLocalVideoLayoutArgs): LayoutResult => {\n const visibleVideoParticipants = useRef<VideoGalleryRemoteParticipant[]>([]);\n const visibleAudioParticipants = useRef<VideoGalleryRemoteParticipant[]>([]);\n const {\n remoteParticipants,\n dominantSpeakers,\n maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS,\n maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS,\n isScreenShareActive = false\n } = props;\n visibleVideoParticipants.current = smartDominantSpeakerParticipants({\n participants: remoteParticipants?.filter(p => p.videoStream?.isAvailable) ?? [],\n dominantSpeakers,\n lastVisibleParticipants: visibleVideoParticipants.current,\n maxDominantSpeakers: maxRemoteVideoStreams\n }).slice(0, maxRemoteVideoStreams);\n const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map(p => p.userId));\n visibleAudioParticipants.current = smartDominantSpeakerParticipants({\n participants: remoteParticipants?.filter(p => !visibleVideoParticipantsSet.has(p.userId)) ?? [],\n dominantSpeakers,\n lastVisibleParticipants: visibleAudioParticipants.current,\n maxDominantSpeakers: maxAudioDominantSpeakers\n });\n const getGridParticipants = useCallback((): VideoGalleryRemoteParticipant[] => {\n if (isScreenShareActive) {\n return [];\n }\n return visibleVideoParticipants.current.length > 0 ? visibleVideoParticipants.current : visibleAudioParticipants.current;\n }, [isScreenShareActive]);\n const gridParticipants = getGridParticipants();\n const getHorizontalGalleryRemoteParticipants = useCallback((): VideoGalleryRemoteParticipant[] => {\n if (isScreenShareActive) {\n // If screen sharing is active, assign video and audio participants as horizontal gallery participants\n return visibleVideoParticipants.current.concat(visibleAudioParticipants.current);\n } else {\n // If screen sharing is not active, then assign all video tiles as grid tiles.\n // If there are no video tiles, then assign audio tiles as grid tiles.\n return visibleVideoParticipants.current.length > 0 ? visibleAudioParticipants.current : [];\n }\n }, [isScreenShareActive]);\n const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();\n return {\n gridParticipants,\n horizontalGalleryParticipants\n };\n};\n\n/**\n * @private\n */\nexport const usePinnedParticipantLayout = (props: UsePinnedParticipantLayoutArgs): LayoutResult => {\n // map remote participants by userId\n const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {\n map[remoteParticipant.userId] = remoteParticipant;\n return map;\n }, {});\n\n // count pinned participants with video\n let pinnedParticipantsWithVideoOnCount = 0;\n\n // get pinned participants in the same order of pinned participant user ids using remoteParticipantMap\n const pinnedParticipants: VideoGalleryRemoteParticipant[] = [];\n props.pinnedParticipantUserIds.forEach(id => {\n const pinnedParticipant = remoteParticipantMap[id];\n if (pinnedParticipant) {\n pinnedParticipants.push(pinnedParticipant);\n if (pinnedParticipant.videoStream?.isAvailable) {\n pinnedParticipantsWithVideoOnCount++;\n }\n }\n });\n\n // get unpinned participants by filtering all remote participants using a set of pinned participant user ids\n const pinnedParticipantUserIdSet = new Set(props.pinnedParticipantUserIds);\n const unpinnedParticipants = props.remoteParticipants.filter(p => !pinnedParticipantUserIdSet.has(p.userId));\n const floatingLocalVideoLayoutProps = {\n ...props,\n // if there are pinned participants then we should only consider unpinned participants\n remoteParticipants: unpinnedParticipants,\n // if there is a maximum of remote video streams we need to subtract pinned participants with video\n maxRemoteVideoStreams: props.maxRemoteVideoStreams ? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount : undefined\n };\n const floatingLocalVideoLayout = useFloatingLocalVideoLayout(floatingLocalVideoLayoutProps);\n if (props.pinnedParticipantUserIds.length === 0) {\n return floatingLocalVideoLayout;\n }\n return {\n gridParticipants: props.isScreenShareActive ? [] : pinnedParticipants,\n horizontalGalleryParticipants: props.isScreenShareActive ? pinnedParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants) : floatingLocalVideoLayout.gridParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)\n };\n};"]}
1
+ {"version":3,"file":"videoGalleryLayoutUtils.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { useCallback, useRef } from 'react';\nimport { smartDominantSpeakerParticipants } from '../../../gallery';\nimport { VideoGalleryParticipant, VideoGalleryRemoteParticipant } from '../../../types';\n\n/**\n * Arguments used to determine a {@link OrganizedParticipantsResult}\n * @private\n */\nexport interface OrganizedParticipantsArgs {\n remoteParticipants: VideoGalleryRemoteParticipant[];\n dominantSpeakers?: string[];\n maxRemoteVideoStreams?: number;\n maxAudioDominantSpeakers?: number;\n isScreenShareActive?: boolean;\n /* @conditional-compile-remove(pinned-participants) */ pinnedParticipantUserIds?: string[];\n}\n\n/**\n * A result that defines grid participants and horizontal participants in the VideoGallery\n * @private\n */\nexport interface OrganizedParticipantsResult {\n gridParticipants: VideoGalleryParticipant[];\n horizontalGalleryParticipants: VideoGalleryParticipant[];\n}\n\nconst DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;\n\nconst DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;\n\nconst _useOrganizedParticipants = (props: OrganizedParticipantsArgs): OrganizedParticipantsResult => {\n const visibleVideoParticipants = useRef<VideoGalleryRemoteParticipant[]>([]);\n const visibleAudioParticipants = useRef<VideoGalleryRemoteParticipant[]>([]);\n\n const {\n remoteParticipants,\n dominantSpeakers,\n maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS,\n maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS,\n isScreenShareActive = false\n } = props;\n\n visibleVideoParticipants.current = smartDominantSpeakerParticipants({\n participants: remoteParticipants?.filter((p) => p.videoStream?.isAvailable) ?? [],\n dominantSpeakers,\n lastVisibleParticipants: visibleVideoParticipants.current,\n maxDominantSpeakers: maxRemoteVideoStreams\n }).slice(0, maxRemoteVideoStreams);\n\n const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' || 'Ringing'));\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));\n\n visibleAudioParticipants.current = smartDominantSpeakerParticipants({\n participants:\n remoteParticipants?.filter(\n (p) =>\n !visibleVideoParticipantsSet.has(p.userId) &&\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(\n p.userId\n )\n ) ?? [],\n dominantSpeakers,\n lastVisibleParticipants: visibleAudioParticipants.current,\n maxDominantSpeakers: maxAudioDominantSpeakers\n });\n\n const getGridParticipants = useCallback((): VideoGalleryRemoteParticipant[] => {\n if (isScreenShareActive) {\n return [];\n }\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n return visibleVideoParticipants.current.length > 0\n ? visibleVideoParticipants.current\n : visibleAudioParticipants.current.concat(callingParticipants);\n return visibleVideoParticipants.current.length > 0\n ? visibleVideoParticipants.current\n : visibleAudioParticipants.current;\n }, [\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,\n isScreenShareActive\n ]);\n\n const gridParticipants = getGridParticipants();\n\n const getHorizontalGalleryRemoteParticipants = useCallback((): VideoGalleryRemoteParticipant[] => {\n if (isScreenShareActive) {\n // If screen sharing is active, assign video and audio participants as horizontal gallery participants\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));\n return visibleVideoParticipants.current.concat(visibleAudioParticipants.current);\n } else {\n // If screen sharing is not active, then assign all video tiles as grid tiles.\n // If there are no video tiles, then assign audio tiles as grid tiles.\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n return visibleVideoParticipants.current.length > 0\n ? visibleAudioParticipants.current.concat(callingParticipants)\n : [];\n return visibleVideoParticipants.current.length > 0 ? visibleAudioParticipants.current : [];\n }\n }, [\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,\n isScreenShareActive\n ]);\n\n const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();\n\n return { gridParticipants, horizontalGalleryParticipants };\n};\n\n/* @conditional-compile-remove(pinned-participants) */\nconst _useOrganizedParticipantsWithPinnedParticipants = (\n props: OrganizedParticipantsArgs\n): OrganizedParticipantsResult => {\n // map remote participants by userId\n const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {\n map[remoteParticipant.userId] = remoteParticipant;\n return map;\n }, {});\n\n // count pinned participants with video\n let pinnedParticipantsWithVideoOnCount = 0;\n\n // get pinned participants in the same order of pinned participant user ids using remoteParticipantMap\n const pinnedParticipants: VideoGalleryRemoteParticipant[] = [];\n props.pinnedParticipantUserIds?.forEach((id) => {\n const pinnedParticipant = remoteParticipantMap[id];\n if (pinnedParticipant) {\n pinnedParticipants.push(pinnedParticipant);\n if (pinnedParticipant.videoStream?.isAvailable) {\n pinnedParticipantsWithVideoOnCount++;\n }\n }\n });\n\n // get unpinned participants by filtering all remote participants using a set of pinned participant user ids\n const pinnedParticipantUserIdSet = new Set(props.pinnedParticipantUserIds);\n const unpinnedParticipants = props.remoteParticipants.filter((p) => !pinnedParticipantUserIdSet.has(p.userId));\n\n const useOrganizedParticipantsProps = {\n ...props,\n // if there are pinned participants then we should only consider unpinned participants\n remoteParticipants: unpinnedParticipants,\n // if there is a maximum of remote video streams we need to subtract pinned participants with video\n maxRemoteVideoStreams: props.maxRemoteVideoStreams\n ? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount\n : undefined\n };\n\n const useOrganizedParticipantsResult = _useOrganizedParticipants(useOrganizedParticipantsProps);\n\n if (pinnedParticipants.length === 0) {\n return useOrganizedParticipantsResult;\n }\n\n return {\n gridParticipants: props.isScreenShareActive ? [] : pinnedParticipants,\n horizontalGalleryParticipants: props.isScreenShareActive\n ? pinnedParticipants.concat(useOrganizedParticipantsResult.horizontalGalleryParticipants)\n : useOrganizedParticipantsResult.gridParticipants.concat(\n useOrganizedParticipantsResult.horizontalGalleryParticipants\n )\n };\n};\n\n/**\n * Hook to determine which participants should be in grid and horizontal gallery and their order respectively\n * @private\n */\nexport const useOrganizedParticipants = (args: OrganizedParticipantsArgs): OrganizedParticipantsResult => {\n /* @conditional-compile-remove(pinned-participants) */\n return _useOrganizedParticipantsWithPinnedParticipants(args);\n return _useOrganizedParticipants(args);\n};\n"]}
@@ -14,6 +14,18 @@ export declare const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;
14
14
  * Set aside only 6 dominant speakers for remaining audio participants
15
15
  */
16
16
  export declare const MAX_AUDIO_DOMINANT_SPEAKERS = 6;
17
+ /**
18
+ * @private
19
+ * Default remote video tile menu options
20
+ */
21
+ export declare const DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS: {
22
+ kind: string;
23
+ };
24
+ /**
25
+ * @private
26
+ * Maximum number of remote video tiles that can be pinned
27
+ */
28
+ export declare const MAX_PINNED_REMOTE_VIDEO_TILES = 4;
17
29
  /**
18
30
  * All strings that may be shown on the UI in the {@link VideoGallery}.
19
31
  *
@@ -34,6 +46,14 @@ export interface VideoGalleryStrings {
34
46
  localVideoSelectedDescription: string;
35
47
  /** placeholder text for participants who does not have a display name*/
36
48
  displayNamePlaceholder: string;
49
+ /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fit in frame */
50
+ fitRemoteParticipantToFrame: string;
51
+ /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fill the frame */
52
+ fillRemoteParticipantFrame: string;
53
+ /** Menu text shown in Video Tile contextual menu for pinning a remote participant's video tile */
54
+ pinParticipantForMe: string;
55
+ /** Menu text shown in Video Tile contextual menu for setting a remote participant's video tile */
56
+ unpinParticipantForMe: string;
37
57
  }
38
58
  /**
39
59
  * @public
@@ -112,6 +132,52 @@ export interface VideoGalleryProps {
112
132
  * Camera control information for button to switch cameras.
113
133
  */
114
134
  localVideoCameraCycleButtonProps?: LocalVideoCameraCycleButtonProps;
135
+ /**
136
+ * List of pinned participant userIds.
137
+ */
138
+ pinnedParticipants?: string[];
139
+ /**
140
+ * This callback will be called when a participant video tile is pinned.
141
+ */
142
+ onPinParticipant?: (userId: string) => void;
143
+ /**
144
+ * This callback will be called when a participant video tile is un-pinned.
145
+ */
146
+ onUnpinParticipant?: (userId: string) => void;
147
+ /**
148
+ * Options for showing the remote video tile menu.
149
+ *
150
+ * @defaultValue \{ kind: 'contextual' \}
151
+ */
152
+ remoteVideoTileMenuOptions?: false | VideoTileContextualMenuProps | VideoTileDrawerMenuProps;
153
+ }
154
+ /**
155
+ * Properties for showing contextual menu for remote {@link VideoTile} components in {@link VideoGallery}.
156
+ *
157
+ * @beta
158
+ */
159
+ export interface VideoTileContextualMenuProps {
160
+ /**
161
+ * The menu property kind
162
+ */
163
+ kind: 'contextual';
164
+ }
165
+ /**
166
+ * Properties for showing drawer menu on remote {@link VideoTile} long touch in {@link VideoGallery}.
167
+ *
168
+ * @beta
169
+ */
170
+ export interface VideoTileDrawerMenuProps {
171
+ /**
172
+ * The menu property kind
173
+ */
174
+ kind: 'drawer';
175
+ /**
176
+ * The optional id property provided on an element that the drawer menu should render within when a
177
+ * remote participant video tile Drawer is shown. If an id is not provided, then a drawer menu will
178
+ * render within the VideoGallery component.
179
+ */
180
+ hostId?: string;
115
181
  }
116
182
  /**
117
183
  * VideoGallery represents a layout of video tiles for a specific call.
@@ -9,11 +9,14 @@ import { isNarrowWidth, _useContainerHeight, _useContainerWidth } from './utils/
9
9
  import { LocalScreenShare } from './VideoGallery/LocalScreenShare';
10
10
  import { RemoteScreenShare } from './VideoGallery/RemoteScreenShare';
11
11
  import { _LocalVideoTile } from './LocalVideoTile';
12
+ /* @conditional-compile-remove(rooms) */
13
+ import { _usePermissions } from '../permissions';
12
14
  import { DefaultLayout } from './VideoGallery/DefaultLayout';
13
15
  import { FloatingLocalVideoLayout } from './VideoGallery/FloatingLocalVideoLayout';
14
16
  import { useIdentifiers } from '../identifiers';
15
17
  import { videoGalleryOuterDivStyle } from './styles/VideoGallery.styles';
16
18
  import { floatingLocalVideoTileStyle } from './VideoGallery/styles/FloatingLocalVideo.styles';
19
+ /* @conditional-compile-remove(pinned-participants) */
17
20
  import { useId } from '@fluentui/react-hooks';
18
21
  /**
19
22
  * @private
@@ -25,6 +28,19 @@ export const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;
25
28
  * Set aside only 6 dominant speakers for remaining audio participants
26
29
  */
27
30
  export const MAX_AUDIO_DOMINANT_SPEAKERS = 6;
31
+ /**
32
+ * @private
33
+ * Default remote video tile menu options
34
+ */
35
+ export const DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS = {
36
+ kind: 'contextual'
37
+ };
38
+ /* @conditional-compile-remove(pinned-participants) */
39
+ /**
40
+ * @private
41
+ * Maximum number of remote video tiles that can be pinned
42
+ */
43
+ export const MAX_PINNED_REMOTE_VIDEO_TILES = 4;
28
44
  /**
29
45
  * VideoGallery represents a layout of video tiles for a specific call.
30
46
  * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.
@@ -32,45 +48,133 @@ export const MAX_AUDIO_DOMINANT_SPEAKERS = 6;
32
48
  * @public
33
49
  */
34
50
  export const VideoGallery = (props) => {
35
- var _a, _b;
36
- const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
51
+ var _a, _b, _c;
52
+ const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps,
53
+ /* @conditional-compile-remove(pinned-participants) */
54
+ onPinParticipant: onPinParticipantHandler,
55
+ /* @conditional-compile-remove(pinned-participants) */
56
+ onUnpinParticipant: onUnpinParticipantHandler,
57
+ /* @conditional-compile-remove(pinned-participants) */
58
+ remoteVideoTileMenuOptions = DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS } = props;
37
59
  const ids = useIdentifiers();
38
60
  const theme = useTheme();
39
61
  const localeStrings = useLocale().strings.videoGallery;
40
62
  const strings = useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
41
- // @TODO: Provide a default value to this hook using the `drawerMenuHostId` value in the props when VideoGallery props have been updated.
42
- // Example: `const drawerMenuHostId = useId('drawerMenuHost', props.drawerMenuHostId);`
43
- const drawerMenuHostId = useId('drawerMenuHost');
63
+ /* @conditional-compile-remove(pinned-participants) */
64
+ const drawerMenuHostIdFromProp = remoteVideoTileMenuOptions && remoteVideoTileMenuOptions.kind === 'drawer'
65
+ ? remoteVideoTileMenuOptions.hostId
66
+ : undefined;
67
+ /* @conditional-compile-remove(pinned-participants) */
68
+ const drawerMenuHostId = useId('drawerMenuHost', drawerMenuHostIdFromProp);
44
69
  const shouldFloatLocalVideo = !!(layout === 'floatingLocalVideo' && remoteParticipants.length > 0);
45
70
  const containerRef = useRef(null);
46
71
  const containerWidth = _useContainerWidth(containerRef);
47
72
  const containerHeight = _useContainerHeight(containerRef);
48
73
  const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;
74
+ /* @conditional-compile-remove(pinned-participants) */
75
+ const [pinnedParticipantsState, setPinnedParticipantsState] = React.useState([]);
76
+ /* @conditional-compile-remove(pinned-participants) */
77
+ // Use pinnedParticipants from props but if it is not defined use the maintained state of pinned participants
78
+ const pinnedParticipants = (_a = props.pinnedParticipants) !== null && _a !== void 0 ? _a : pinnedParticipantsState;
79
+ /* @conditional-compile-remove(rooms) */
80
+ const permissions = _usePermissions();
49
81
  /**
50
82
  * Utility function for memoized rendering of LocalParticipant.
51
83
  */
52
84
  const localVideoTile = useMemo(() => {
53
85
  var _a, _b;
86
+ /* @conditional-compile-remove(rooms) */
87
+ if (!permissions.cameraButton) {
88
+ return undefined;
89
+ }
54
90
  if (onRenderLocalVideoTile) {
55
91
  return onRenderLocalVideoTile(localParticipant);
56
92
  }
57
93
  const localVideoTileStyles = concatStyleSets(shouldFloatLocalVideo ? floatingLocalVideoTileStyle : {}, {
58
- root: {
59
- borderRadius: theme.effects.roundedCorner4
60
- }
94
+ root: { borderRadius: theme.effects.roundedCorner4 }
61
95
  }, styles === null || styles === void 0 ? void 0 : styles.localVideo);
62
- const initialsName = !localParticipant.displayName ? strings.displayNamePlaceholder : localParticipant.displayName;
63
- return React.createElement(Stack, { key: "local-video-tile-key", tabIndex: 0, "aria-label": strings.localVideoMovementLabel, role: 'dialog' },
64
- React.createElement(_LocalVideoTile, { userId: localParticipant.userId, onCreateLocalStreamView: onCreateLocalStreamView, onDisposeLocalStreamView: onDisposeLocalStreamView, isAvailable: (_a = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable, isMuted: localParticipant.isMuted, renderElement: (_b = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _b === void 0 ? void 0 : _b.renderElement, displayName: isNarrow ? '' : strings.localVideoLabel, initialsName: initialsName, localVideoViewOptions: localVideoViewOptions, onRenderAvatar: onRenderAvatar, showLabel: !(shouldFloatLocalVideo && isNarrow), showMuteIndicator: showMuteIndicator, showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: strings.localVideoCameraSwitcherLabel, localVideoSelectedDescription: strings.localVideoSelectedDescription, styles: localVideoTileStyles }));
65
- }, [isNarrow, localParticipant, localVideoCameraCycleButtonProps, localVideoViewOptions, onCreateLocalStreamView, onDisposeLocalStreamView, onRenderAvatar, onRenderLocalVideoTile, shouldFloatLocalVideo, showCameraSwitcherInLocalPreview, showMuteIndicator, strings.localVideoCameraSwitcherLabel, strings.localVideoLabel, strings.localVideoMovementLabel, strings.localVideoSelectedDescription, strings.displayNamePlaceholder, styles === null || styles === void 0 ? void 0 : styles.localVideo, theme.effects.roundedCorner4]);
96
+ const initialsName = !localParticipant.displayName ? '' : localParticipant.displayName;
97
+ return (React.createElement(Stack, { key: "local-video-tile-key", tabIndex: 0, "aria-label": strings.localVideoMovementLabel, role: 'dialog' },
98
+ React.createElement(_LocalVideoTile, { userId: localParticipant.userId, onCreateLocalStreamView: onCreateLocalStreamView, onDisposeLocalStreamView: onDisposeLocalStreamView, isAvailable: (_a = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable, isMuted: localParticipant.isMuted, renderElement: (_b = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _b === void 0 ? void 0 : _b.renderElement, displayName: isNarrow ? '' : strings.localVideoLabel, initialsName: initialsName, localVideoViewOptions: localVideoViewOptions, onRenderAvatar: onRenderAvatar, showLabel: !(shouldFloatLocalVideo && isNarrow), showMuteIndicator: showMuteIndicator, showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: strings.localVideoCameraSwitcherLabel, localVideoSelectedDescription: strings.localVideoSelectedDescription, styles: localVideoTileStyles })));
99
+ }, [
100
+ isNarrow,
101
+ localParticipant,
102
+ localVideoCameraCycleButtonProps,
103
+ localVideoViewOptions,
104
+ onCreateLocalStreamView,
105
+ onDisposeLocalStreamView,
106
+ onRenderAvatar,
107
+ onRenderLocalVideoTile,
108
+ shouldFloatLocalVideo,
109
+ showCameraSwitcherInLocalPreview,
110
+ showMuteIndicator,
111
+ strings.localVideoCameraSwitcherLabel,
112
+ strings.localVideoLabel,
113
+ strings.localVideoMovementLabel,
114
+ strings.localVideoSelectedDescription,
115
+ styles === null || styles === void 0 ? void 0 : styles.localVideo,
116
+ theme.effects.roundedCorner4,
117
+ /* @conditional-compile-remove(rooms) */ permissions.cameraButton
118
+ ]);
119
+ /* @conditional-compile-remove(pinned-participants) */
120
+ const onPinParticipant = useCallback((userId) => {
121
+ if (pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES) {
122
+ return;
123
+ }
124
+ if (!pinnedParticipantsState.includes(userId)) {
125
+ setPinnedParticipantsState(pinnedParticipantsState.concat(userId));
126
+ }
127
+ onPinParticipantHandler === null || onPinParticipantHandler === void 0 ? void 0 : onPinParticipantHandler(userId);
128
+ }, [pinnedParticipants.length, pinnedParticipantsState, setPinnedParticipantsState, onPinParticipantHandler]);
129
+ /* @conditional-compile-remove(pinned-participants) */
130
+ const onUnpinParticipant = useCallback((userId) => {
131
+ setPinnedParticipantsState(pinnedParticipantsState.filter((p) => p !== userId));
132
+ onUnpinParticipantHandler === null || onUnpinParticipantHandler === void 0 ? void 0 : onUnpinParticipantHandler(userId);
133
+ }, [pinnedParticipantsState, setPinnedParticipantsState, onUnpinParticipantHandler]);
66
134
  const defaultOnRenderVideoTile = useCallback((participant, isVideoParticipant) => {
67
135
  const remoteVideoStream = participant.videoStream;
68
- return React.createElement(_RemoteVideoTile, { key: participant.userId, userId: participant.userId, remoteParticipant: participant, onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: isVideoParticipant ? remoteVideoViewOptions : undefined, onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator, strings: strings, drawerMenuHostId: drawerMenuHostId });
69
- }, [onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, onRenderAvatar, showMuteIndicator, strings, drawerMenuHostId]);
70
- const screenShareParticipant = remoteParticipants.find(participant => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });
136
+ /* @conditional-compile-remove(pinned-participants) */
137
+ const isPinned = pinnedParticipants === null || pinnedParticipants === void 0 ? void 0 : pinnedParticipants.includes(participant.userId);
138
+ return (React.createElement(_RemoteVideoTile, { key: participant.userId, userId: participant.userId, remoteParticipant: participant, onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: isVideoParticipant ? remoteVideoViewOptions : undefined, onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator, strings: strings,
139
+ /* @conditional-compile-remove(PSTN-calls) */
140
+ participantState: participant.state,
141
+ /* @conditional-compile-remove(pinned-participants) */
142
+ menuKind: remoteVideoTileMenuOptions
143
+ ? remoteVideoTileMenuOptions.kind === 'drawer'
144
+ ? 'drawer'
145
+ : 'contextual'
146
+ : undefined,
147
+ /* @conditional-compile-remove(pinned-participants) */
148
+ drawerMenuHostId: drawerMenuHostId,
149
+ /* @conditional-compile-remove(pinned-participants) */
150
+ onPinParticipant: onPinParticipant,
151
+ /* @conditional-compile-remove(pinned-participants) */
152
+ onUnpinParticipant: onUnpinParticipant,
153
+ /* @conditional-compile-remove(pinned-participants) */
154
+ isPinned: isPinned,
155
+ /* @conditional-compile-remove(pinned-participants) */
156
+ disablePinMenuItem: pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES }));
157
+ }, [
158
+ onCreateRemoteStreamView,
159
+ onDisposeRemoteStreamView,
160
+ remoteVideoViewOptions,
161
+ onRenderAvatar,
162
+ showMuteIndicator,
163
+ strings,
164
+ /* @conditional-compile-remove(pinned-participants) */ drawerMenuHostId,
165
+ /* @conditional-compile-remove(pinned-participants) */ remoteVideoTileMenuOptions,
166
+ /* @conditional-compile-remove(pinned-participants) */ pinnedParticipants,
167
+ /* @conditional-compile-remove(pinned-participants) */ onPinParticipant,
168
+ /* @conditional-compile-remove(pinned-participants) */ onUnpinParticipant
169
+ ]);
170
+ const screenShareParticipant = remoteParticipants.find((participant) => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });
71
171
  const localScreenShareStreamComponent = React.createElement(LocalScreenShare, { localParticipant: localParticipant });
72
- const remoteScreenShareComponent = screenShareParticipant && React.createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_a = screenShareParticipant.screenShareStream) === null || _a === void 0 ? void 0 : _a.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_b = screenShareParticipant.screenShareStream) === null || _b === void 0 ? void 0 : _b.isReceiving }));
73
- const screenShareComponent = remoteScreenShareComponent ? remoteScreenShareComponent : localParticipant.isScreenSharingOn ? localScreenShareStreamComponent : undefined;
172
+ const remoteScreenShareComponent = screenShareParticipant && (React.createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_b = screenShareParticipant.screenShareStream) === null || _b === void 0 ? void 0 : _b.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.isReceiving })));
173
+ const screenShareComponent = remoteScreenShareComponent
174
+ ? remoteScreenShareComponent
175
+ : localParticipant.isScreenSharingOn
176
+ ? localScreenShareStreamComponent
177
+ : undefined;
74
178
  const layoutProps = useMemo(() => ({
75
179
  remoteParticipants,
76
180
  screenShareComponent,
@@ -82,14 +186,30 @@ export const VideoGallery = (props) => {
82
186
  localVideoComponent: localVideoTile,
83
187
  parentWidth: containerWidth,
84
188
  parentHeight: containerHeight,
85
- isLocalVideoFloating: layout === 'floatingLocalVideo'
86
- }), [remoteParticipants, screenShareComponent, showCameraSwitcherInLocalPreview, maxRemoteVideoStreams, dominantSpeakers, styles, localVideoTile, containerWidth, containerHeight, onRenderRemoteVideoTile, defaultOnRenderVideoTile, layout]);
189
+ /* @conditional-compile-remove(pinned-participants) */ pinnedParticipantUserIds: pinnedParticipants
190
+ }), [
191
+ remoteParticipants,
192
+ screenShareComponent,
193
+ showCameraSwitcherInLocalPreview,
194
+ maxRemoteVideoStreams,
195
+ dominantSpeakers,
196
+ styles,
197
+ localVideoTile,
198
+ containerWidth,
199
+ containerHeight,
200
+ onRenderRemoteVideoTile,
201
+ defaultOnRenderVideoTile,
202
+ /* @conditional-compile-remove(pinned-participants) */ pinnedParticipants
203
+ ]);
87
204
  const videoGalleryLayout = useMemo(() => {
88
205
  if (layout === 'floatingLocalVideo') {
89
206
  return React.createElement(FloatingLocalVideoLayout, Object.assign({}, layoutProps));
90
207
  }
91
208
  return React.createElement(DefaultLayout, Object.assign({}, layoutProps));
92
209
  }, [layout, layoutProps]);
93
- return React.createElement("div", { id: drawerMenuHostId, "data-ui-id": ids.videoGallery, ref: containerRef, className: mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) }, videoGalleryLayout);
210
+ return (React.createElement("div", {
211
+ /* @conditional-compile-remove(pinned-participants) */
212
+ // We don't assign an drawer menu host id to the VideoGallery when a drawerMenuHostId is assigned from props
213
+ id: drawerMenuHostIdFromProp ? undefined : drawerMenuHostId, "data-ui-id": ids.videoGallery, ref: containerRef, className: mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) }, videoGalleryLayout));
94
214
  };
95
215
  //# sourceMappingURL=VideoGallery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VideoGallery.js","sourceRoot":"","sources":["../../../../../preprocess-dist/react-components/src/components/VideoGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { concatStyleSets, IStyle, mergeStyles, Stack } from '@fluentui/react';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { GridLayoutStyles } from '.';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { BaseCustomStyles, OnRenderAvatarCallback, VideoGalleryLocalParticipant, VideoGalleryRemoteParticipant, VideoStreamOptions, CreateVideoStreamViewResult } from '../types';\nimport { HorizontalGalleryStyles } from './HorizontalGallery';\nimport { _RemoteVideoTile } from './RemoteVideoTile';\nimport { isNarrowWidth, _useContainerHeight, _useContainerWidth } from './utils/responsive';\nimport { LocalScreenShare } from './VideoGallery/LocalScreenShare';\nimport { RemoteScreenShare } from './VideoGallery/RemoteScreenShare';\nimport { LocalVideoCameraCycleButtonProps } from './LocalVideoCameraButton';\nimport { _ICoordinates, _ModalClone } from './ModalClone/ModalClone';\nimport { _formatString } from '@internal/acs-ui-common';\nimport { _LocalVideoTile } from './LocalVideoTile';\nimport { DefaultLayout } from './VideoGallery/DefaultLayout';\nimport { FloatingLocalVideoLayout } from './VideoGallery/FloatingLocalVideoLayout';\nimport { useIdentifiers } from '../identifiers';\nimport { videoGalleryOuterDivStyle } from './styles/VideoGallery.styles';\nimport { floatingLocalVideoTileStyle } from './VideoGallery/styles/FloatingLocalVideo.styles';\nimport { useId } from '@fluentui/react-hooks';\n/**\n * @private\n * Currently the Calling JS SDK supports up to 4 remote video streams\n */\nexport const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;\n/**\n * @private\n * Set aside only 6 dominant speakers for remaining audio participants\n */\nexport const MAX_AUDIO_DOMINANT_SPEAKERS = 6;\n\n/**\n * All strings that may be shown on the UI in the {@link VideoGallery}.\n *\n * @public\n */\nexport interface VideoGalleryStrings {\n /** String to notify that local user is sharing their screen */\n screenIsBeingSharedMessage: string;\n /** String to show when remote screen share stream is loading */\n screenShareLoadingMessage: string;\n /** String for local video label. Default is \"You\" */\n localVideoLabel: string;\n /** String for local video camera switcher */\n localVideoCameraSwitcherLabel: string;\n /** String for announcing the local video tile can be moved by keyboard controls */\n localVideoMovementLabel: string;\n /** String for announcing the selected camera */\n localVideoSelectedDescription: string;\n /** placeholder text for participants who does not have a display name*/\n displayNamePlaceholder: string;\n}\n\n/**\n * @public\n */\nexport type VideoGalleryLayout = 'default' | 'floatingLocalVideo';\n\n/**\n * {@link VideoGallery} Component Styles.\n * @public\n */\nexport interface VideoGalleryStyles extends BaseCustomStyles {\n /** Styles for the grid layout */\n gridLayout?: GridLayoutStyles;\n /** Styles for the horizontal gallery */\n horizontalGallery?: HorizontalGalleryStyles;\n /** Styles for the local video */\n localVideo?: IStyle;\n}\n\n/**\n * Props for {@link VideoGallery}.\n *\n * @public\n */\nexport interface VideoGalleryProps {\n /**\n * Allows users to pass an object containing custom CSS styles for the gallery container.\n *\n * @Example\n * ```\n * <VideoGallery styles={{ root: { border: 'solid 1px red' } }} />\n * ```\n */\n styles?: VideoGalleryStyles;\n /** Layout of the video tiles. */\n layout?: VideoGalleryLayout;\n /** Local video particpant */\n localParticipant: VideoGalleryLocalParticipant;\n /** List of remote video particpants */\n remoteParticipants?: VideoGalleryRemoteParticipant[];\n /** List of dominant speaker userIds in the order of their dominance. 0th index is the most dominant. */\n dominantSpeakers?: string[];\n /** Local video view options */\n localVideoViewOptions?: VideoStreamOptions;\n /** Remote videos view options */\n remoteVideoViewOptions?: VideoStreamOptions;\n /** Callback to create the local video stream view */\n onCreateLocalStreamView?: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;\n /** Callback to dispose of the local video stream view */\n onDisposeLocalStreamView?: () => void;\n /** Callback to render the local video tile*/\n onRenderLocalVideoTile?: (localParticipant: VideoGalleryLocalParticipant) => JSX.Element;\n /** Callback to create a remote video stream view */\n onCreateRemoteStreamView?: (userId: string, options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;\n /** Callback to render a remote video tile */\n onRenderRemoteVideoTile?: (remoteParticipant: VideoGalleryRemoteParticipant) => JSX.Element;\n /** Callback to dispose a remote video stream view */\n onDisposeRemoteStreamView?: (userId: string) => Promise<void>;\n /** Callback to render a particpant avatar */\n onRenderAvatar?: OnRenderAvatarCallback;\n /**\n * Whether to display the local video camera switcher button\n */\n showCameraSwitcherInLocalPreview?: boolean;\n /**\n * Whether to display a mute icon beside the user's display name.\n * @defaultValue `true`\n */\n showMuteIndicator?: boolean;\n /** Optional strings to override in component */\n strings?: Partial<VideoGalleryStrings>;\n /**\n * Maximum number of participant remote video streams that is rendered.\n * @defaultValue 4\n */\n maxRemoteVideoStreams?: number;\n /**\n * Camera control information for button to switch cameras.\n */\n localVideoCameraCycleButtonProps?: LocalVideoCameraCycleButtonProps;\n}\n\n/**\n * VideoGallery represents a layout of video tiles for a specific call.\n * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.\n *\n * @public\n */\nexport const VideoGallery = (props: VideoGalleryProps): JSX.Element => {\n const {\n localParticipant,\n remoteParticipants = [],\n localVideoViewOptions,\n remoteVideoViewOptions,\n dominantSpeakers,\n onRenderLocalVideoTile,\n onRenderRemoteVideoTile,\n onCreateLocalStreamView,\n onDisposeLocalStreamView,\n onCreateRemoteStreamView,\n onDisposeRemoteStreamView,\n styles,\n layout,\n onRenderAvatar,\n showMuteIndicator,\n maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS,\n showCameraSwitcherInLocalPreview,\n localVideoCameraCycleButtonProps\n } = props;\n const ids = useIdentifiers();\n const theme = useTheme();\n const localeStrings = useLocale().strings.videoGallery;\n const strings = useMemo(() => ({\n ...localeStrings,\n ...props.strings\n }), [localeStrings, props.strings]);\n\n // @TODO: Provide a default value to this hook using the `drawerMenuHostId` value in the props when VideoGallery props have been updated.\n // Example: `const drawerMenuHostId = useId('drawerMenuHost', props.drawerMenuHostId);`\n const drawerMenuHostId = useId('drawerMenuHost');\n const shouldFloatLocalVideo = !!(layout === 'floatingLocalVideo' && remoteParticipants.length > 0);\n const containerRef = useRef<HTMLDivElement>(null);\n const containerWidth = _useContainerWidth(containerRef);\n const containerHeight = _useContainerHeight(containerRef);\n const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;\n /**\n * Utility function for memoized rendering of LocalParticipant.\n */\n const localVideoTile = useMemo((): JSX.Element /* @conditional-compile-remove(rooms) */ | undefined => {\n if (onRenderLocalVideoTile) {\n return onRenderLocalVideoTile(localParticipant);\n }\n const localVideoTileStyles = concatStyleSets(shouldFloatLocalVideo ? floatingLocalVideoTileStyle : {}, {\n root: {\n borderRadius: theme.effects.roundedCorner4\n }\n }, styles?.localVideo);\n const initialsName = !localParticipant.displayName ? strings.displayNamePlaceholder : localParticipant.displayName;\n return <Stack key=\"local-video-tile-key\" tabIndex={0} aria-label={strings.localVideoMovementLabel} role={'dialog'}>\n <_LocalVideoTile userId={localParticipant.userId} onCreateLocalStreamView={onCreateLocalStreamView} onDisposeLocalStreamView={onDisposeLocalStreamView} isAvailable={localParticipant?.videoStream?.isAvailable} isMuted={localParticipant.isMuted} renderElement={localParticipant?.videoStream?.renderElement} displayName={isNarrow ? '' : strings.localVideoLabel} initialsName={initialsName} localVideoViewOptions={localVideoViewOptions} onRenderAvatar={onRenderAvatar} showLabel={!(shouldFloatLocalVideo && isNarrow)} showMuteIndicator={showMuteIndicator} showCameraSwitcherInLocalPreview={showCameraSwitcherInLocalPreview} localVideoCameraCycleButtonProps={localVideoCameraCycleButtonProps} localVideoCameraSwitcherLabel={strings.localVideoCameraSwitcherLabel} localVideoSelectedDescription={strings.localVideoSelectedDescription} styles={localVideoTileStyles} />\n </Stack>;\n }, [isNarrow, localParticipant, localVideoCameraCycleButtonProps, localVideoViewOptions, onCreateLocalStreamView, onDisposeLocalStreamView, onRenderAvatar, onRenderLocalVideoTile, shouldFloatLocalVideo, showCameraSwitcherInLocalPreview, showMuteIndicator, strings.localVideoCameraSwitcherLabel, strings.localVideoLabel, strings.localVideoMovementLabel, strings.localVideoSelectedDescription, strings.displayNamePlaceholder, styles?.localVideo, theme.effects.roundedCorner4]);\n const defaultOnRenderVideoTile = useCallback((participant: VideoGalleryRemoteParticipant, isVideoParticipant?: boolean) => {\n const remoteVideoStream = participant.videoStream;\n return <_RemoteVideoTile key={participant.userId} userId={participant.userId} remoteParticipant={participant} onCreateRemoteStreamView={isVideoParticipant ? onCreateRemoteStreamView : undefined} onDisposeRemoteStreamView={isVideoParticipant ? onDisposeRemoteStreamView : undefined} isAvailable={isVideoParticipant ? remoteVideoStream?.isAvailable : false} isReceiving={isVideoParticipant ? remoteVideoStream?.isReceiving : false} renderElement={isVideoParticipant ? remoteVideoStream?.renderElement : undefined} remoteVideoViewOptions={isVideoParticipant ? remoteVideoViewOptions : undefined} onRenderAvatar={onRenderAvatar} showMuteIndicator={showMuteIndicator} strings={strings} drawerMenuHostId={drawerMenuHostId} />;\n }, [onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, onRenderAvatar, showMuteIndicator, strings, drawerMenuHostId]);\n const screenShareParticipant = remoteParticipants.find(participant => participant.screenShareStream?.isAvailable);\n const localScreenShareStreamComponent = <LocalScreenShare localParticipant={localParticipant} />;\n const remoteScreenShareComponent = screenShareParticipant && <RemoteScreenShare {...screenShareParticipant} renderElement={screenShareParticipant.screenShareStream?.renderElement} onCreateRemoteStreamView={onCreateRemoteStreamView} onDisposeRemoteStreamView={onDisposeRemoteStreamView} isReceiving={screenShareParticipant.screenShareStream?.isReceiving} />;\n const screenShareComponent = remoteScreenShareComponent ? remoteScreenShareComponent : localParticipant.isScreenSharingOn ? localScreenShareStreamComponent : undefined;\n const layoutProps = useMemo(() => ({\n remoteParticipants,\n screenShareComponent,\n showCameraSwitcherInLocalPreview,\n maxRemoteVideoStreams,\n dominantSpeakers,\n styles,\n onRenderRemoteParticipant: onRenderRemoteVideoTile ?? defaultOnRenderVideoTile,\n localVideoComponent: localVideoTile,\n parentWidth: containerWidth,\n parentHeight: containerHeight,\n isLocalVideoFloating: layout === 'floatingLocalVideo'\n }), [remoteParticipants, screenShareComponent, showCameraSwitcherInLocalPreview, maxRemoteVideoStreams, dominantSpeakers, styles, localVideoTile, containerWidth, containerHeight, onRenderRemoteVideoTile, defaultOnRenderVideoTile, layout]);\n const videoGalleryLayout = useMemo(() => {\n if (layout === 'floatingLocalVideo') {\n return <FloatingLocalVideoLayout {...layoutProps} />;\n }\n return <DefaultLayout {...layoutProps} />;\n }, [layout, layoutProps]);\n return <div id={drawerMenuHostId} data-ui-id={ids.videoGallery} ref={containerRef} className={mergeStyles(videoGalleryOuterDivStyle, styles?.root)}>\n {videoGalleryLayout}\n </div>;\n};\"../../../acs-ui-common/src\""]}
1
+ {"version":3,"file":"VideoGallery.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/VideoGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { concatStyleSets, IStyle, mergeStyles, Stack } from '@fluentui/react';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { GridLayoutStyles } from '.';\nimport { useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport {\n BaseCustomStyles,\n OnRenderAvatarCallback,\n VideoGalleryLocalParticipant,\n VideoGalleryRemoteParticipant,\n VideoStreamOptions,\n CreateVideoStreamViewResult\n} from '../types';\nimport { HorizontalGalleryStyles } from './HorizontalGallery';\nimport { _RemoteVideoTile } from './RemoteVideoTile';\nimport { isNarrowWidth, _useContainerHeight, _useContainerWidth } from './utils/responsive';\nimport { LocalScreenShare } from './VideoGallery/LocalScreenShare';\nimport { RemoteScreenShare } from './VideoGallery/RemoteScreenShare';\nimport { LocalVideoCameraCycleButtonProps } from './LocalVideoCameraButton';\nimport { _ICoordinates, _ModalClone } from './ModalClone/ModalClone';\nimport { _formatString } from '@internal/acs-ui-common';\nimport { _LocalVideoTile } from './LocalVideoTile';\n/* @conditional-compile-remove(rooms) */\nimport { _usePermissions } from '../permissions';\nimport { DefaultLayout } from './VideoGallery/DefaultLayout';\nimport { FloatingLocalVideoLayout } from './VideoGallery/FloatingLocalVideoLayout';\nimport { useIdentifiers } from '../identifiers';\nimport { videoGalleryOuterDivStyle } from './styles/VideoGallery.styles';\nimport { floatingLocalVideoTileStyle } from './VideoGallery/styles/FloatingLocalVideo.styles';\n/* @conditional-compile-remove(pinned-participants) */\nimport { useId } from '@fluentui/react-hooks';\n\n/**\n * @private\n * Currently the Calling JS SDK supports up to 4 remote video streams\n */\nexport const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;\n/**\n * @private\n * Set aside only 6 dominant speakers for remaining audio participants\n */\nexport const MAX_AUDIO_DOMINANT_SPEAKERS = 6;\n/**\n * @private\n * Default remote video tile menu options\n */\nexport const DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS = {\n kind: 'contextual'\n};\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * @private\n * Maximum number of remote video tiles that can be pinned\n */\nexport const MAX_PINNED_REMOTE_VIDEO_TILES = 4;\n\n/**\n * All strings that may be shown on the UI in the {@link VideoGallery}.\n *\n * @public\n */\nexport interface VideoGalleryStrings {\n /** String to notify that local user is sharing their screen */\n screenIsBeingSharedMessage: string;\n /** String to show when remote screen share stream is loading */\n screenShareLoadingMessage: string;\n /** String for local video label. Default is \"You\" */\n localVideoLabel: string;\n /** String for local video camera switcher */\n localVideoCameraSwitcherLabel: string;\n /** String for announcing the local video tile can be moved by keyboard controls */\n localVideoMovementLabel: string;\n /** String for announcing the selected camera */\n localVideoSelectedDescription: string;\n /** placeholder text for participants who does not have a display name*/\n displayNamePlaceholder: string;\n /* @conditional-compile-remove(pinned-participants) */\n /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fit in frame */\n fitRemoteParticipantToFrame: string;\n /* @conditional-compile-remove(pinned-participants) */\n /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fill the frame */\n fillRemoteParticipantFrame: string;\n /* @conditional-compile-remove(pinned-participants) */\n /** Menu text shown in Video Tile contextual menu for pinning a remote participant's video tile */\n pinParticipantForMe: string;\n /* @conditional-compile-remove(pinned-participants) */\n /** Menu text shown in Video Tile contextual menu for setting a remote participant's video tile */\n unpinParticipantForMe: string;\n}\n\n/**\n * @public\n */\nexport type VideoGalleryLayout = 'default' | 'floatingLocalVideo';\n\n/**\n * {@link VideoGallery} Component Styles.\n * @public\n */\nexport interface VideoGalleryStyles extends BaseCustomStyles {\n /** Styles for the grid layout */\n gridLayout?: GridLayoutStyles;\n /** Styles for the horizontal gallery */\n horizontalGallery?: HorizontalGalleryStyles;\n /** Styles for the local video */\n localVideo?: IStyle;\n}\n\n/**\n * Props for {@link VideoGallery}.\n *\n * @public\n */\nexport interface VideoGalleryProps {\n /**\n * Allows users to pass an object containing custom CSS styles for the gallery container.\n *\n * @Example\n * ```\n * <VideoGallery styles={{ root: { border: 'solid 1px red' } }} />\n * ```\n */\n styles?: VideoGalleryStyles;\n /** Layout of the video tiles. */\n layout?: VideoGalleryLayout;\n /** Local video particpant */\n localParticipant: VideoGalleryLocalParticipant;\n /** List of remote video particpants */\n remoteParticipants?: VideoGalleryRemoteParticipant[];\n /** List of dominant speaker userIds in the order of their dominance. 0th index is the most dominant. */\n dominantSpeakers?: string[];\n /** Local video view options */\n localVideoViewOptions?: VideoStreamOptions;\n /** Remote videos view options */\n remoteVideoViewOptions?: VideoStreamOptions;\n /** Callback to create the local video stream view */\n onCreateLocalStreamView?: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;\n /** Callback to dispose of the local video stream view */\n onDisposeLocalStreamView?: () => void;\n /** Callback to render the local video tile*/\n onRenderLocalVideoTile?: (localParticipant: VideoGalleryLocalParticipant) => JSX.Element;\n /** Callback to create a remote video stream view */\n onCreateRemoteStreamView?: (\n userId: string,\n options?: VideoStreamOptions\n ) => Promise<void | CreateVideoStreamViewResult>;\n /** Callback to render a remote video tile */\n onRenderRemoteVideoTile?: (remoteParticipant: VideoGalleryRemoteParticipant) => JSX.Element;\n /** Callback to dispose a remote video stream view */\n onDisposeRemoteStreamView?: (userId: string) => Promise<void>;\n /** Callback to render a particpant avatar */\n onRenderAvatar?: OnRenderAvatarCallback;\n /**\n * Whether to display the local video camera switcher button\n */\n showCameraSwitcherInLocalPreview?: boolean;\n /**\n * Whether to display a mute icon beside the user's display name.\n * @defaultValue `true`\n */\n showMuteIndicator?: boolean;\n /** Optional strings to override in component */\n strings?: Partial<VideoGalleryStrings>;\n /**\n * Maximum number of participant remote video streams that is rendered.\n * @defaultValue 4\n */\n maxRemoteVideoStreams?: number;\n /**\n * Camera control information for button to switch cameras.\n */\n localVideoCameraCycleButtonProps?: LocalVideoCameraCycleButtonProps;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * List of pinned participant userIds.\n */\n pinnedParticipants?: string[];\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * This callback will be called when a participant video tile is pinned.\n */\n onPinParticipant?: (userId: string) => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * This callback will be called when a participant video tile is un-pinned.\n */\n onUnpinParticipant?: (userId: string) => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Options for showing the remote video tile menu.\n *\n * @defaultValue \\{ kind: 'contextual' \\}\n */\n remoteVideoTileMenuOptions?: false | VideoTileContextualMenuProps | VideoTileDrawerMenuProps;\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Properties for showing contextual menu for remote {@link VideoTile} components in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface VideoTileContextualMenuProps {\n /**\n * The menu property kind\n */\n kind: 'contextual';\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Properties for showing drawer menu on remote {@link VideoTile} long touch in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface VideoTileDrawerMenuProps {\n /**\n * The menu property kind\n */\n kind: 'drawer';\n /**\n * The optional id property provided on an element that the drawer menu should render within when a\n * remote participant video tile Drawer is shown. If an id is not provided, then a drawer menu will\n * render within the VideoGallery component.\n */\n hostId?: string;\n}\n/**\n * VideoGallery represents a layout of video tiles for a specific call.\n * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.\n *\n * @public\n */\nexport const VideoGallery = (props: VideoGalleryProps): JSX.Element => {\n const {\n localParticipant,\n remoteParticipants = [],\n localVideoViewOptions,\n remoteVideoViewOptions,\n dominantSpeakers,\n onRenderLocalVideoTile,\n onRenderRemoteVideoTile,\n onCreateLocalStreamView,\n onDisposeLocalStreamView,\n onCreateRemoteStreamView,\n onDisposeRemoteStreamView,\n styles,\n layout,\n onRenderAvatar,\n showMuteIndicator,\n maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS,\n showCameraSwitcherInLocalPreview,\n localVideoCameraCycleButtonProps,\n /* @conditional-compile-remove(pinned-participants) */\n onPinParticipant: onPinParticipantHandler,\n /* @conditional-compile-remove(pinned-participants) */\n onUnpinParticipant: onUnpinParticipantHandler,\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions = DEFAULT_REMOTE_VIDEO_TILE_MENU_OPTIONS\n } = props;\n\n const ids = useIdentifiers();\n const theme = useTheme();\n const localeStrings = useLocale().strings.videoGallery;\n const strings = useMemo(() => ({ ...localeStrings, ...props.strings }), [localeStrings, props.strings]);\n\n /* @conditional-compile-remove(pinned-participants) */\n const drawerMenuHostIdFromProp =\n remoteVideoTileMenuOptions && remoteVideoTileMenuOptions.kind === 'drawer'\n ? (remoteVideoTileMenuOptions as VideoTileDrawerMenuProps).hostId\n : undefined;\n /* @conditional-compile-remove(pinned-participants) */\n const drawerMenuHostId = useId('drawerMenuHost', drawerMenuHostIdFromProp);\n\n const shouldFloatLocalVideo = !!(layout === 'floatingLocalVideo' && remoteParticipants.length > 0);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const containerWidth = _useContainerWidth(containerRef);\n const containerHeight = _useContainerHeight(containerRef);\n const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;\n\n /* @conditional-compile-remove(pinned-participants) */\n const [pinnedParticipantsState, setPinnedParticipantsState] = React.useState<string[]>([]);\n /* @conditional-compile-remove(pinned-participants) */\n // Use pinnedParticipants from props but if it is not defined use the maintained state of pinned participants\n const pinnedParticipants = props.pinnedParticipants ?? pinnedParticipantsState;\n\n /* @conditional-compile-remove(rooms) */\n const permissions = _usePermissions();\n\n /**\n * Utility function for memoized rendering of LocalParticipant.\n */\n const localVideoTile = useMemo((): JSX.Element /* @conditional-compile-remove(rooms) */ | undefined => {\n /* @conditional-compile-remove(rooms) */\n if (!permissions.cameraButton) {\n return undefined;\n }\n if (onRenderLocalVideoTile) {\n return onRenderLocalVideoTile(localParticipant);\n }\n\n const localVideoTileStyles = concatStyleSets(\n shouldFloatLocalVideo ? floatingLocalVideoTileStyle : {},\n {\n root: { borderRadius: theme.effects.roundedCorner4 }\n },\n styles?.localVideo\n );\n\n const initialsName = !localParticipant.displayName ? '' : localParticipant.displayName;\n\n return (\n <Stack key=\"local-video-tile-key\" tabIndex={0} aria-label={strings.localVideoMovementLabel} role={'dialog'}>\n <_LocalVideoTile\n userId={localParticipant.userId}\n onCreateLocalStreamView={onCreateLocalStreamView}\n onDisposeLocalStreamView={onDisposeLocalStreamView}\n isAvailable={localParticipant?.videoStream?.isAvailable}\n isMuted={localParticipant.isMuted}\n renderElement={localParticipant?.videoStream?.renderElement}\n displayName={isNarrow ? '' : strings.localVideoLabel}\n initialsName={initialsName}\n localVideoViewOptions={localVideoViewOptions}\n onRenderAvatar={onRenderAvatar}\n showLabel={!(shouldFloatLocalVideo && isNarrow)}\n showMuteIndicator={showMuteIndicator}\n showCameraSwitcherInLocalPreview={showCameraSwitcherInLocalPreview}\n localVideoCameraCycleButtonProps={localVideoCameraCycleButtonProps}\n localVideoCameraSwitcherLabel={strings.localVideoCameraSwitcherLabel}\n localVideoSelectedDescription={strings.localVideoSelectedDescription}\n styles={localVideoTileStyles}\n />\n </Stack>\n );\n }, [\n isNarrow,\n localParticipant,\n localVideoCameraCycleButtonProps,\n localVideoViewOptions,\n onCreateLocalStreamView,\n onDisposeLocalStreamView,\n onRenderAvatar,\n onRenderLocalVideoTile,\n shouldFloatLocalVideo,\n showCameraSwitcherInLocalPreview,\n showMuteIndicator,\n strings.localVideoCameraSwitcherLabel,\n strings.localVideoLabel,\n strings.localVideoMovementLabel,\n strings.localVideoSelectedDescription,\n styles?.localVideo,\n theme.effects.roundedCorner4,\n /* @conditional-compile-remove(rooms) */ permissions.cameraButton\n ]);\n\n /* @conditional-compile-remove(pinned-participants) */\n const onPinParticipant = useCallback(\n (userId: string) => {\n if (pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES) {\n return;\n }\n if (!pinnedParticipantsState.includes(userId)) {\n setPinnedParticipantsState(pinnedParticipantsState.concat(userId));\n }\n onPinParticipantHandler?.(userId);\n },\n [pinnedParticipants.length, pinnedParticipantsState, setPinnedParticipantsState, onPinParticipantHandler]\n );\n /* @conditional-compile-remove(pinned-participants) */\n const onUnpinParticipant = useCallback(\n (userId: string) => {\n setPinnedParticipantsState(pinnedParticipantsState.filter((p) => p !== userId));\n onUnpinParticipantHandler?.(userId);\n },\n [pinnedParticipantsState, setPinnedParticipantsState, onUnpinParticipantHandler]\n );\n\n const defaultOnRenderVideoTile = useCallback(\n (participant: VideoGalleryRemoteParticipant, isVideoParticipant?: boolean) => {\n const remoteVideoStream = participant.videoStream;\n\n /* @conditional-compile-remove(pinned-participants) */\n const isPinned = pinnedParticipants?.includes(participant.userId);\n\n return (\n <_RemoteVideoTile\n key={participant.userId}\n userId={participant.userId}\n remoteParticipant={participant}\n onCreateRemoteStreamView={isVideoParticipant ? onCreateRemoteStreamView : undefined}\n onDisposeRemoteStreamView={isVideoParticipant ? onDisposeRemoteStreamView : undefined}\n isAvailable={isVideoParticipant ? remoteVideoStream?.isAvailable : false}\n isReceiving={isVideoParticipant ? remoteVideoStream?.isReceiving : false}\n renderElement={isVideoParticipant ? remoteVideoStream?.renderElement : undefined}\n remoteVideoViewOptions={isVideoParticipant ? remoteVideoViewOptions : undefined}\n onRenderAvatar={onRenderAvatar}\n showMuteIndicator={showMuteIndicator}\n strings={strings}\n /* @conditional-compile-remove(PSTN-calls) */\n participantState={participant.state}\n /* @conditional-compile-remove(pinned-participants) */\n menuKind={\n remoteVideoTileMenuOptions\n ? remoteVideoTileMenuOptions.kind === 'drawer'\n ? 'drawer'\n : 'contextual'\n : undefined\n }\n /* @conditional-compile-remove(pinned-participants) */\n drawerMenuHostId={drawerMenuHostId}\n /* @conditional-compile-remove(pinned-participants) */\n onPinParticipant={onPinParticipant}\n /* @conditional-compile-remove(pinned-participants) */\n onUnpinParticipant={onUnpinParticipant}\n /* @conditional-compile-remove(pinned-participants) */\n isPinned={isPinned}\n /* @conditional-compile-remove(pinned-participants) */\n disablePinMenuItem={pinnedParticipants.length >= MAX_PINNED_REMOTE_VIDEO_TILES}\n />\n );\n },\n [\n onCreateRemoteStreamView,\n onDisposeRemoteStreamView,\n remoteVideoViewOptions,\n onRenderAvatar,\n showMuteIndicator,\n strings,\n /* @conditional-compile-remove(pinned-participants) */ drawerMenuHostId,\n /* @conditional-compile-remove(pinned-participants) */ remoteVideoTileMenuOptions,\n /* @conditional-compile-remove(pinned-participants) */ pinnedParticipants,\n /* @conditional-compile-remove(pinned-participants) */ onPinParticipant,\n /* @conditional-compile-remove(pinned-participants) */ onUnpinParticipant\n ]\n );\n\n const screenShareParticipant = remoteParticipants.find((participant) => participant.screenShareStream?.isAvailable);\n\n const localScreenShareStreamComponent = <LocalScreenShare localParticipant={localParticipant} />;\n\n const remoteScreenShareComponent = screenShareParticipant && (\n <RemoteScreenShare\n {...screenShareParticipant}\n renderElement={screenShareParticipant.screenShareStream?.renderElement}\n onCreateRemoteStreamView={onCreateRemoteStreamView}\n onDisposeRemoteStreamView={onDisposeRemoteStreamView}\n isReceiving={screenShareParticipant.screenShareStream?.isReceiving}\n />\n );\n\n const screenShareComponent = remoteScreenShareComponent\n ? remoteScreenShareComponent\n : localParticipant.isScreenSharingOn\n ? localScreenShareStreamComponent\n : undefined;\n\n const layoutProps = useMemo(\n () => ({\n remoteParticipants,\n screenShareComponent,\n showCameraSwitcherInLocalPreview,\n maxRemoteVideoStreams,\n dominantSpeakers,\n styles,\n onRenderRemoteParticipant: onRenderRemoteVideoTile ?? defaultOnRenderVideoTile,\n localVideoComponent: localVideoTile,\n parentWidth: containerWidth,\n parentHeight: containerHeight,\n /* @conditional-compile-remove(pinned-participants) */ pinnedParticipantUserIds: pinnedParticipants\n }),\n [\n remoteParticipants,\n screenShareComponent,\n showCameraSwitcherInLocalPreview,\n maxRemoteVideoStreams,\n dominantSpeakers,\n styles,\n localVideoTile,\n containerWidth,\n containerHeight,\n onRenderRemoteVideoTile,\n defaultOnRenderVideoTile,\n /* @conditional-compile-remove(pinned-participants) */ pinnedParticipants\n ]\n );\n\n const videoGalleryLayout = useMemo(() => {\n if (layout === 'floatingLocalVideo') {\n return <FloatingLocalVideoLayout {...layoutProps} />;\n }\n return <DefaultLayout {...layoutProps} />;\n }, [layout, layoutProps]);\n\n return (\n <div\n /* @conditional-compile-remove(pinned-participants) */\n // We don't assign an drawer menu host id to the VideoGallery when a drawerMenuHostId is assigned from props\n id={drawerMenuHostIdFromProp ? undefined : drawerMenuHostId}\n data-ui-id={ids.videoGallery}\n ref={containerRef}\n className={mergeStyles(videoGalleryOuterDivStyle, styles?.root)}\n >\n {videoGalleryLayout}\n </div>\n );\n};\n\"../../../acs-ui-common/src\""]}