mediasfu-vue 1.0.1 → 1.0.2

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 (448) hide show
  1. package/README.md +362 -152
  2. package/dist/index.cjs +35561 -17132
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +36509 -18168
  5. package/dist/index.js.map +1 -1
  6. package/dist/mediasfu-vue.css +5180 -931
  7. package/package.json +21 -9
  8. package/src/@types/types.ts +3 -0
  9. package/src/App.vue +34 -56
  10. package/src/AppBroadcast.vue +6 -6
  11. package/src/AppChat.vue +6 -6
  12. package/src/AppConference.vue +6 -6
  13. package/src/AppGeneric.vue +6 -6
  14. package/src/AppUnique.vue +18 -13
  15. package/src/AppWebinar.vue +6 -6
  16. package/src/{react-legacy/src/ProducerClient → ProducerClient}/producerClientEmits/joinRoomClient.ts +1 -1
  17. package/src/{react-legacy/src/ProducerClient → ProducerClient}/producerClientEmits/updateRoomParametersClient.ts +10 -10
  18. package/src/SharedTypes/index.ts +4 -2
  19. package/src/components/backgroundComponents/BackgroundModal.vue +6 -1
  20. package/src/components/breakoutComponents/BreakoutRoomsModal.vue +12 -2
  21. package/src/components/coHostComponents/CoHostModal.vue +89 -15
  22. package/src/components/displayComponents/AudioCard.vue +65 -2
  23. package/src/components/displayComponents/AudioGrid.vue +1 -1
  24. package/src/components/displayComponents/MiniAudio.vue +1 -1
  25. package/src/components/displayComponents/MiniCard.vue +16 -4
  26. package/src/components/displayComponents/MiniCardAudio.vue +1 -1
  27. package/src/components/displayComponents/Pagination.vue +73 -19
  28. package/src/components/displayComponents/SubAspectComponent.vue +40 -14
  29. package/src/components/displayComponents/VideoCard.vue +64 -2
  30. package/src/components/displaySettingsComponents/DisplaySettingsModal.vue +29 -0
  31. package/src/components/eventSettingsComponents/EventSettingsModal.vue +7 -2
  32. package/src/components/exitComponents/ConfirmExitModal.vue +31 -14
  33. package/src/components/mediaSettingsComponents/MediaSettingsModal.vue +6 -1
  34. package/src/components/mediasfuComponents/MediasfuGeneric.vue +3215 -344
  35. package/src/components/menuComponents/MeetingIDComponent.vue +9 -6
  36. package/src/components/menuComponents/MeetingPasscodeComponent.vue +89 -12
  37. package/src/components/menuComponents/ShareButtonsComponent.vue +72 -16
  38. package/src/components/messageComponents/MessagePanel.vue +268 -52
  39. package/src/components/messageComponents/MessagesModal.vue +6 -1
  40. package/src/components/miscComponents/ConfirmHereModal.vue +6 -1
  41. package/src/components/miscComponents/PreJoinPage.vue +12 -552
  42. package/src/components/miscComponents/ShareEventModal.vue +11 -8
  43. package/src/components/miscComponents/WelcomePage.vue +12 -239
  44. package/src/components/panelistsComponents/PanelistsModal.vue +959 -0
  45. package/src/components/participantsComponents/ParticipantListOthers.vue +2 -0
  46. package/src/components/participantsComponents/ParticipantListOthersItem.vue +2 -0
  47. package/src/components/participantsComponents/ParticipantsModal.vue +7 -1
  48. package/src/components/permissionsComponents/PermissionsModal.vue +1092 -0
  49. package/src/components/pollsComponents/PollModal.vue +6 -2
  50. package/src/components/recordingComponents/RecordingModal.vue +57 -2
  51. package/src/components/requestsComponents/RenderRequestComponent.vue +24 -4
  52. package/src/components/requestsComponents/RequestsModal.vue +10 -2
  53. package/src/components/screenboardComponents/ScreenboardModal.vue +4 -4
  54. package/src/components/translationComponents/TranslationSettingsModal.vue +1639 -0
  55. package/src/components/waitingComponents/WaitingModal.vue +294 -102
  56. package/src/components/whiteboardComponents/ConfigureWhiteboardModal.vue +6 -1
  57. package/src/composables/panelistsComposables/index.ts +3 -0
  58. package/src/composables/panelistsComposables/useFocusPanelists.ts +8 -0
  59. package/src/composables/panelistsComposables/useLaunchPanelists.ts +5 -0
  60. package/src/composables/panelistsComposables/useUpdatePanelists.ts +11 -0
  61. package/src/composables/permissionsComposables/index.ts +3 -0
  62. package/src/composables/permissionsComposables/useLaunchPermissions.ts +5 -0
  63. package/src/composables/permissionsComposables/useUpdateParticipantPermission.ts +5 -0
  64. package/src/composables/permissionsComposables/useUpdatePermissionConfig.ts +6 -0
  65. package/src/composables/useMediasfuDemo.ts +6 -4
  66. package/src/composables/useUIOverrides.ts +14 -3
  67. package/src/consumers/addVideosGrid.ts +51 -33
  68. package/src/consumers/consumerResume.ts +53 -2
  69. package/src/consumers/prepopulateUserMedia.ts +35 -27
  70. package/src/docs.ts +7 -0
  71. package/src/examples/ModernUIParityAudit.vue +3290 -0
  72. package/src/index.ts +10 -0
  73. package/src/main.ts +17 -3
  74. package/src/methods/polls/pollUpdated.ts +2 -0
  75. package/src/methods/streamMethods/clickAudio.ts +2 -0
  76. package/src/methods/streamMethods/clickScreenShare.ts +6 -0
  77. package/src/methods/utils/MiniAudioPlayer/MiniAudioPlayer.vue +159 -14
  78. package/src/methods/utils/SoundPlayer.ts +5 -0
  79. package/src/methods/utils/TranslationAudioPlayer/TranslationAudioPlayer.vue +143 -0
  80. package/src/methods/utils/checkLimitsAndMakeRequest.ts +1 -0
  81. package/src/methods/utils/createResponseJoinRoom.ts +2 -0
  82. package/src/methods/utils/createRoomOnMediaSFU.ts +2 -0
  83. package/src/methods/utils/formatNumber.ts +2 -0
  84. package/src/methods/utils/joinRoomOnMediaSFU.ts +8 -0
  85. package/src/methods/utils/meetingTimer/startMeetingProgressTimer.ts +6 -0
  86. package/src/methods/utils/producer/aParams.ts +1 -0
  87. package/src/methods/utils/producer/hParams.ts +1 -0
  88. package/src/methods/utils/producer/screenParams.ts +1 -0
  89. package/src/methods/utils/producer/vParams.ts +1 -0
  90. package/src/methods/utils/producer/videoCaptureConstraints.ts +23 -0
  91. package/src/methods/utils/sleep.ts +2 -0
  92. package/src/methods/utils/validateAlphanumeric.ts +5 -0
  93. package/src/methods/whiteboardMethods/captureCanvasStream.ts +6 -0
  94. package/src/modern/display_components/ModernAlertComponent.vue +161 -0
  95. package/src/modern/display_components/ModernAudioCard.vue +653 -0
  96. package/src/modern/display_components/ModernControlButtonsComponent.vue +423 -0
  97. package/src/modern/display_components/ModernControlButtonsComponentTouch.vue +254 -0
  98. package/src/modern/display_components/ModernFlexibleGrid.vue +351 -0
  99. package/src/modern/display_components/ModernFlexibleVideo.vue +460 -0
  100. package/src/modern/display_components/ModernLoadingModal.vue +114 -0
  101. package/src/modern/display_components/ModernMainAspect.vue +29 -0
  102. package/src/modern/display_components/ModernMainContainer.vue +30 -0
  103. package/src/modern/display_components/ModernMainGrid.vue +47 -0
  104. package/src/modern/display_components/ModernMeetingProgressTimer.vue +337 -0
  105. package/src/modern/display_components/ModernMiniCard.vue +406 -0
  106. package/src/modern/display_components/ModernOtherGrid.vue +47 -0
  107. package/src/modern/display_components/ModernPagination.vue +533 -0
  108. package/src/modern/display_components/ModernParticipantsCounterBadge.vue +108 -0
  109. package/src/modern/display_components/ModernSubAspect.vue +30 -0
  110. package/src/modern/display_components/ModernVideoCard.vue +481 -0
  111. package/src/modern/display_components/index.ts +32 -0
  112. package/src/modern/display_components/styleUtils.ts +62 -0
  113. package/src/modern/index.ts +5 -0
  114. package/src/modern/mediasfu_components/ModernMediasfuGeneric.vue +218 -0
  115. package/src/modern/mediasfu_components/index.ts +3 -0
  116. package/src/modern/misc_components/ModernEntryShell.vue +182 -0
  117. package/src/modern/misc_components/ModernPreJoinPage.vue +635 -0
  118. package/src/modern/misc_components/ModernWelcomePage.vue +226 -0
  119. package/src/modern/misc_components/index.ts +7 -0
  120. package/src/modern/modal_components/ModernBackgroundModal.vue +1492 -0
  121. package/src/modern/modal_components/ModernBreakoutRoomsModal.vue +1628 -0
  122. package/src/modern/modal_components/ModernCoHostModal.vue +967 -0
  123. package/src/modern/modal_components/ModernConfigureWhiteboardModal.vue +823 -0
  124. package/src/modern/modal_components/ModernConfirmExitModal.vue +266 -0
  125. package/src/modern/modal_components/ModernConfirmHereModal.vue +666 -0
  126. package/src/modern/modal_components/ModernDisplaySettingsModal.vue +604 -0
  127. package/src/modern/modal_components/ModernEventSettingsModal.vue +560 -0
  128. package/src/modern/modal_components/ModernMediaSettingsModal.vue +826 -0
  129. package/src/modern/modal_components/ModernMenuModal.vue +698 -0
  130. package/src/modern/modal_components/ModernMessagesModal.vue +651 -0
  131. package/src/modern/modal_components/ModernPanelistsModal.vue +283 -0
  132. package/src/modern/modal_components/ModernParticipantsModal.vue +947 -0
  133. package/src/modern/modal_components/ModernPermissionsModal.vue +254 -0
  134. package/src/modern/modal_components/ModernPollModal.vue +1113 -0
  135. package/src/modern/modal_components/ModernRecordingModal.vue +775 -0
  136. package/src/modern/modal_components/ModernRequestsModal.vue +499 -0
  137. package/src/modern/modal_components/ModernScreenboardModal.vue +122 -0
  138. package/src/modern/modal_components/ModernShareEventModal.vue +295 -0
  139. package/src/modern/modal_components/ModernTranslationSettingsModal.vue +1912 -0
  140. package/src/modern/modal_components/ModernWaitingModal.vue +448 -0
  141. package/src/modern/primitives/ModernButton.vue +99 -0
  142. package/src/modern/primitives/ModernField.vue +149 -0
  143. package/src/modern/primitives/ModernSurface.vue +59 -0
  144. package/src/modern/primitives/ModernTooltip.vue +270 -0
  145. package/src/modern/primitives/index.ts +8 -0
  146. package/src/modern/recording_components/ModernAdvancedPanelComponent.vue +471 -0
  147. package/src/modern/recording_components/ModernStandardPanelComponent.vue +250 -0
  148. package/src/modern/screenboard_components/ModernScreenboard.vue +103 -0
  149. package/src/modern/theme/index.ts +4 -0
  150. package/src/modern/theme/tokens.ts +62 -0
  151. package/src/modern/theme/variables.css +49 -0
  152. package/src/modern/whiteboard_components/ModernWhiteboard.vue +156 -0
  153. package/src/{react-legacy/src/producers → producers}/producerEmits/joinLocalRoom.ts +2 -2
  154. package/src/{react-legacy/src/producers → producers}/producerEmits/joinRoom.ts +10 -0
  155. package/src/producers/socketReceiveMethods/allMembers.ts +6 -0
  156. package/src/producers/socketReceiveMethods/allMembersRest.ts +6 -0
  157. package/src/producers/socketReceiveMethods/allWaitingRoomMembers.ts +2 -0
  158. package/src/producers/socketReceiveMethods/banParticipant.ts +6 -0
  159. package/src/producers/socketReceiveMethods/controlMediaHost.ts +6 -0
  160. package/src/producers/socketReceiveMethods/disconnect.ts +5 -0
  161. package/src/producers/socketReceiveMethods/disconnectUserSelf.ts +2 -0
  162. package/src/producers/socketReceiveMethods/getDomains.ts +6 -0
  163. package/src/producers/socketReceiveMethods/hostRequestResponse.ts +2 -0
  164. package/src/producers/socketReceiveMethods/meetingEnded.ts +2 -0
  165. package/src/producers/socketReceiveMethods/meetingStillThere.ts +2 -0
  166. package/src/producers/socketReceiveMethods/meetingTimeRemaining.ts +2 -0
  167. package/src/producers/socketReceiveMethods/participantRequested.ts +2 -0
  168. package/src/producers/socketReceiveMethods/personJoined.ts +2 -0
  169. package/src/producers/socketReceiveMethods/producerMediaClosed.ts +6 -0
  170. package/src/producers/socketReceiveMethods/producerMediaPaused.ts +6 -0
  171. package/src/producers/socketReceiveMethods/producerMediaResumed.ts +6 -0
  172. package/src/producers/socketReceiveMethods/reInitiateRecording.ts +2 -0
  173. package/src/producers/socketReceiveMethods/receiveMessage.ts +2 -0
  174. package/src/producers/socketReceiveMethods/recordingNotice.ts +6 -0
  175. package/src/producers/socketReceiveMethods/roomRecordParams.ts +7 -0
  176. package/src/producers/socketReceiveMethods/screenProducerId.ts +2 -0
  177. package/src/producers/socketReceiveMethods/startRecords.ts +2 -0
  178. package/src/producers/socketReceiveMethods/stoppedRecording.ts +2 -0
  179. package/src/producers/socketReceiveMethods/timeLeftRecording.ts +2 -0
  180. package/src/producers/socketReceiveMethods/updateConsumingDomains.ts +6 -0
  181. package/src/producers/socketReceiveMethods/updateMediaSettings.ts +2 -0
  182. package/src/producers/socketReceiveMethods/updatedCoHost.ts +2 -0
  183. package/src/producers/socketReceiveMethods/userWaiting.ts +2 -0
  184. package/src/services/liveSubtitleService.ts +96 -0
  185. package/src/services/translationReceiveMethods.ts +32 -0
  186. package/src/types/custom-renderers.ts +26 -0
  187. package/src/types/ui-overrides.ts +6 -0
  188. package/src/utils/getOverlayPosition.ts +6 -0
  189. package/src/utils/mediasfuRooms.ts +28 -8
  190. package/src/utils/translationLanguages.ts +27 -0
  191. package/src/react-legacy/README.md +0 -18
  192. package/src/react-legacy/src/@types/types.ts +0 -299
  193. package/src/react-legacy/src/App.css +0 -38
  194. package/src/react-legacy/src/App.test.tsx +0 -8
  195. package/src/react-legacy/src/App.tsx +0 -770
  196. package/src/react-legacy/src/AppBroadcast.tsx +0 -488
  197. package/src/react-legacy/src/AppChat.tsx +0 -488
  198. package/src/react-legacy/src/AppConference.tsx +0 -488
  199. package/src/react-legacy/src/AppGeneric.tsx +0 -897
  200. package/src/react-legacy/src/AppWebinar.tsx +0 -488
  201. package/src/react-legacy/src/ProducerClient/producerClientEmits/createDeviceClient.ts +0 -68
  202. package/src/react-legacy/src/components/backgroundComponents/BackgroundModal.tsx +0 -1059
  203. package/src/react-legacy/src/components/breakoutComponents/BreakoutRoomsModal.tsx +0 -631
  204. package/src/react-legacy/src/components/coHostComponents/CoHostModal.css +0 -21
  205. package/src/react-legacy/src/components/coHostComponents/CoHostModal.tsx +0 -310
  206. package/src/react-legacy/src/components/displayComponents/AlertComponent.tsx +0 -132
  207. package/src/react-legacy/src/components/displayComponents/AudioCard.css +0 -0
  208. package/src/react-legacy/src/components/displayComponents/AudioCard.tsx +0 -465
  209. package/src/react-legacy/src/components/displayComponents/AudioGrid.tsx +0 -58
  210. package/src/react-legacy/src/components/displayComponents/CardVideoDisplay.tsx +0 -109
  211. package/src/react-legacy/src/components/displayComponents/ControlButtonsAltComponent.tsx +0 -218
  212. package/src/react-legacy/src/components/displayComponents/ControlButtonsComponent.css +0 -30
  213. package/src/react-legacy/src/components/displayComponents/ControlButtonsComponent.tsx +0 -196
  214. package/src/react-legacy/src/components/displayComponents/ControlButtonsComponentTouch.tsx +0 -238
  215. package/src/react-legacy/src/components/displayComponents/FlexibleGrid.tsx +0 -121
  216. package/src/react-legacy/src/components/displayComponents/FlexibleVideo.tsx +0 -196
  217. package/src/react-legacy/src/components/displayComponents/LoadingModal.tsx +0 -95
  218. package/src/react-legacy/src/components/displayComponents/MainAspectComponent.tsx +0 -154
  219. package/src/react-legacy/src/components/displayComponents/MainContainerComponent.tsx +0 -132
  220. package/src/react-legacy/src/components/displayComponents/MainGridComponent.tsx +0 -96
  221. package/src/react-legacy/src/components/displayComponents/MainScreenComponent.tsx +0 -169
  222. package/src/react-legacy/src/components/displayComponents/MeetingProgressTimer.tsx +0 -97
  223. package/src/react-legacy/src/components/displayComponents/MiniAudio.tsx +0 -292
  224. package/src/react-legacy/src/components/displayComponents/MiniCard.tsx +0 -131
  225. package/src/react-legacy/src/components/displayComponents/MiniCardAudio.tsx +0 -226
  226. package/src/react-legacy/src/components/displayComponents/OtherGridComponent.tsx +0 -100
  227. package/src/react-legacy/src/components/displayComponents/Pagination.css +0 -0
  228. package/src/react-legacy/src/components/displayComponents/Pagination.tsx +0 -307
  229. package/src/react-legacy/src/components/displayComponents/SubAspectComponent.tsx +0 -121
  230. package/src/react-legacy/src/components/displayComponents/VideoCard.tsx +0 -430
  231. package/src/react-legacy/src/components/displaySettingsComponents/DisplaySettingsModal.tsx +0 -362
  232. package/src/react-legacy/src/components/eventSettingsComponents/EventSettingsModal.tsx +0 -258
  233. package/src/react-legacy/src/components/exitComponents/ConfirmExitModal.tsx +0 -193
  234. package/src/react-legacy/src/components/mediaSettingsComponents/MediaSettingsModal.tsx +0 -225
  235. package/src/react-legacy/src/components/mediasfuComponents/MediasfuBroadcast.tsx +0 -4563
  236. package/src/react-legacy/src/components/mediasfuComponents/MediasfuCSS.css +0 -299
  237. package/src/react-legacy/src/components/mediasfuComponents/MediasfuChat.tsx +0 -4179
  238. package/src/react-legacy/src/components/mediasfuComponents/MediasfuConference.tsx +0 -5269
  239. package/src/react-legacy/src/components/mediasfuComponents/MediasfuGeneric.tsx +0 -5677
  240. package/src/react-legacy/src/components/mediasfuComponents/MediasfuWebinar.tsx +0 -5269
  241. package/src/react-legacy/src/components/menuComponents/CustomButtons.css +0 -34
  242. package/src/react-legacy/src/components/menuComponents/CustomButtons.tsx +0 -133
  243. package/src/react-legacy/src/components/menuComponents/MeetingIDComponent.tsx +0 -115
  244. package/src/react-legacy/src/components/menuComponents/MeetingPasscodeComponent.tsx +0 -77
  245. package/src/react-legacy/src/components/menuComponents/MenuItemComponent.tsx +0 -80
  246. package/src/react-legacy/src/components/menuComponents/MenuModal.tsx +0 -213
  247. package/src/react-legacy/src/components/menuComponents/ShareButtonsComponent.tsx +0 -180
  248. package/src/react-legacy/src/components/messageComponents/MessagePanel.tsx +0 -415
  249. package/src/react-legacy/src/components/messageComponents/MessagesModal.tsx +0 -394
  250. package/src/react-legacy/src/components/miscComponents/ConfirmHereModal.tsx +0 -223
  251. package/src/react-legacy/src/components/miscComponents/PreJoinPage.tsx +0 -936
  252. package/src/react-legacy/src/components/miscComponents/ShareEventModal.tsx +0 -161
  253. package/src/react-legacy/src/components/miscComponents/WelcomePage.tsx +0 -561
  254. package/src/react-legacy/src/components/participantsComponents/ParticipantList.tsx +0 -139
  255. package/src/react-legacy/src/components/participantsComponents/ParticipantListItem.tsx +0 -268
  256. package/src/react-legacy/src/components/participantsComponents/ParticipantListOthers.tsx +0 -66
  257. package/src/react-legacy/src/components/participantsComponents/ParticipantListOthersItem.tsx +0 -98
  258. package/src/react-legacy/src/components/participantsComponents/ParticipantsModal.tsx +0 -286
  259. package/src/react-legacy/src/components/pollsComponents/PollModal.tsx +0 -558
  260. package/src/react-legacy/src/components/recordingComponents/AdvancedPanelComponent.tsx +0 -397
  261. package/src/react-legacy/src/components/recordingComponents/RecordingModal.tsx +0 -321
  262. package/src/react-legacy/src/components/recordingComponents/StandardPanelComponent.tsx +0 -163
  263. package/src/react-legacy/src/components/requestsComponents/RenderRequestComponent.tsx +0 -140
  264. package/src/react-legacy/src/components/requestsComponents/RequestsModal.css +0 -1
  265. package/src/react-legacy/src/components/requestsComponents/RequestsModal.tsx +0 -229
  266. package/src/react-legacy/src/components/screenboardComponents/Screenboard.css +0 -147
  267. package/src/react-legacy/src/components/screenboardComponents/Screenboard.tsx +0 -879
  268. package/src/react-legacy/src/components/screenboardComponents/ScreenboardModal.tsx +0 -528
  269. package/src/react-legacy/src/components/waitingComponents/WaitingModal.tsx +0 -252
  270. package/src/react-legacy/src/components/waitingComponents/WaitingRoomModal.css +0 -31
  271. package/src/react-legacy/src/components/whiteboardComponents/ConfigureWhiteboardModal.tsx +0 -549
  272. package/src/react-legacy/src/components/whiteboardComponents/Whiteboard.css +0 -146
  273. package/src/react-legacy/src/components/whiteboardComponents/Whiteboard.tsx +0 -1713
  274. package/src/react-legacy/src/consumers/addVideosGrid.tsx +0 -543
  275. package/src/react-legacy/src/consumers/autoAdjust.ts +0 -100
  276. package/src/react-legacy/src/consumers/calculateRowsAndColumns.ts +0 -51
  277. package/src/react-legacy/src/consumers/changeVids.ts +0 -753
  278. package/src/react-legacy/src/consumers/checkGrid.ts +0 -100
  279. package/src/react-legacy/src/consumers/checkPermission.ts +0 -89
  280. package/src/react-legacy/src/consumers/checkScreenShare.ts +0 -114
  281. package/src/react-legacy/src/consumers/closeAndResize.ts +0 -401
  282. package/src/react-legacy/src/consumers/compareActiveNames.ts +0 -122
  283. package/src/react-legacy/src/consumers/compareScreenStates.ts +0 -117
  284. package/src/react-legacy/src/consumers/connectIps.ts +0 -175
  285. package/src/react-legacy/src/consumers/connectLocalIps.ts +0 -103
  286. package/src/react-legacy/src/consumers/connectRecvTransport.ts +0 -158
  287. package/src/react-legacy/src/consumers/connectSendTransport.ts +0 -150
  288. package/src/react-legacy/src/consumers/connectSendTransportAudio.ts +0 -161
  289. package/src/react-legacy/src/consumers/connectSendTransportScreen.ts +0 -169
  290. package/src/react-legacy/src/consumers/connectSendTransportVideo.ts +0 -149
  291. package/src/react-legacy/src/consumers/consumerResume.tsx +0 -591
  292. package/src/react-legacy/src/consumers/controlMedia.ts +0 -118
  293. package/src/react-legacy/src/consumers/createSendTransport.ts +0 -312
  294. package/src/react-legacy/src/consumers/disconnectSendTransportAudio.ts +0 -170
  295. package/src/react-legacy/src/consumers/disconnectSendTransportScreen.ts +0 -130
  296. package/src/react-legacy/src/consumers/disconnectSendTransportVideo.ts +0 -161
  297. package/src/react-legacy/src/consumers/dispStreams.ts +0 -694
  298. package/src/react-legacy/src/consumers/generatePageContent.ts +0 -118
  299. package/src/react-legacy/src/consumers/getEstimate.ts +0 -124
  300. package/src/react-legacy/src/consumers/getPipedProducersAlt.ts +0 -96
  301. package/src/react-legacy/src/consumers/getProducersPiped.ts +0 -89
  302. package/src/react-legacy/src/consumers/getVideos.ts +0 -107
  303. package/src/react-legacy/src/consumers/mixStreams.ts +0 -97
  304. package/src/react-legacy/src/consumers/onScreenChanges.ts +0 -106
  305. package/src/react-legacy/src/consumers/prepopulateUserMedia.tsx +0 -688
  306. package/src/react-legacy/src/consumers/processConsumerTransports.ts +0 -157
  307. package/src/react-legacy/src/consumers/processConsumerTransportsAudio.ts +0 -121
  308. package/src/react-legacy/src/consumers/rePort.ts +0 -123
  309. package/src/react-legacy/src/consumers/reUpdateInter.ts +0 -289
  310. package/src/react-legacy/src/consumers/readjust.ts +0 -170
  311. package/src/react-legacy/src/consumers/receiveAllPipedTransports.ts +0 -77
  312. package/src/react-legacy/src/consumers/receiveRoomMessages.ts +0 -55
  313. package/src/react-legacy/src/consumers/reorderStreams.ts +0 -246
  314. package/src/react-legacy/src/consumers/requestScreenShare.ts +0 -103
  315. package/src/react-legacy/src/consumers/resumePauseAudioStreams.ts +0 -174
  316. package/src/react-legacy/src/consumers/resumePauseStreams.ts +0 -110
  317. package/src/react-legacy/src/consumers/resumeSendTransportAudio.ts +0 -143
  318. package/src/react-legacy/src/consumers/signalNewConsumerTransport.ts +0 -179
  319. package/src/react-legacy/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +0 -130
  320. package/src/react-legacy/src/consumers/socketReceiveMethods/newPipeProducer.ts +0 -138
  321. package/src/react-legacy/src/consumers/socketReceiveMethods/producerClosed.ts +0 -102
  322. package/src/react-legacy/src/consumers/startShareScreen.ts +0 -124
  323. package/src/react-legacy/src/consumers/stopShareScreen.ts +0 -241
  324. package/src/react-legacy/src/consumers/streamSuccessAudio.ts +0 -297
  325. package/src/react-legacy/src/consumers/streamSuccessAudioSwitch.ts +0 -315
  326. package/src/react-legacy/src/consumers/streamSuccessScreen.ts +0 -255
  327. package/src/react-legacy/src/consumers/streamSuccessVideo.ts +0 -390
  328. package/src/react-legacy/src/consumers/switchUserAudio.ts +0 -145
  329. package/src/react-legacy/src/consumers/switchUserVideo.ts +0 -209
  330. package/src/react-legacy/src/consumers/switchUserVideoAlt.ts +0 -335
  331. package/src/react-legacy/src/consumers/trigger.ts +0 -250
  332. package/src/react-legacy/src/consumers/updateMiniCardsGrid.ts +0 -150
  333. package/src/react-legacy/src/consumers/updateParticipantAudioDecibels.ts +0 -56
  334. package/src/react-legacy/src/docs.tsx +0 -428
  335. package/src/react-legacy/src/examples/CustomMediaSFUExample.tsx +0 -335
  336. package/src/react-legacy/src/global.d.ts +0 -36
  337. package/src/react-legacy/src/index.css +0 -13
  338. package/src/react-legacy/src/index.tsx +0 -10
  339. package/src/react-legacy/src/logo.svg +0 -1
  340. package/src/react-legacy/src/main.tsx +0 -428
  341. package/src/react-legacy/src/methods/backgroundMethods/launchBackground.ts +0 -36
  342. package/src/react-legacy/src/methods/breakoutRoomsMethods/breakoutRoomUpdated.ts +0 -184
  343. package/src/react-legacy/src/methods/breakoutRoomsMethods/launchBreakoutRooms.ts +0 -35
  344. package/src/react-legacy/src/methods/coHostMethods/launchCoHost.ts +0 -33
  345. package/src/react-legacy/src/methods/coHostMethods/modifyCoHostSettings.ts +0 -100
  346. package/src/react-legacy/src/methods/displaySettingsMethods/launchDisplaySettings.ts +0 -34
  347. package/src/react-legacy/src/methods/displaySettingsMethods/modifyDisplaySettings.ts +0 -193
  348. package/src/react-legacy/src/methods/exitMethods/confirmExit.ts +0 -60
  349. package/src/react-legacy/src/methods/exitMethods/launchConfirmExit.ts +0 -33
  350. package/src/react-legacy/src/methods/mediaSettingsMethods/launchMediaSettings.ts +0 -70
  351. package/src/react-legacy/src/methods/menuMethods/launchMenuModal.ts +0 -31
  352. package/src/react-legacy/src/methods/messageMethods/launchMessages.ts +0 -34
  353. package/src/react-legacy/src/methods/messageMethods/sendMessage.ts +0 -133
  354. package/src/react-legacy/src/methods/participantsMethods/launchParticipants.ts +0 -34
  355. package/src/react-legacy/src/methods/participantsMethods/messageParticipants.ts +0 -83
  356. package/src/react-legacy/src/methods/participantsMethods/muteParticipants.ts +0 -83
  357. package/src/react-legacy/src/methods/participantsMethods/removeParticipants.ts +0 -103
  358. package/src/react-legacy/src/methods/pollsMethods/handleCreatePoll.ts +0 -70
  359. package/src/react-legacy/src/methods/pollsMethods/handleEndPoll.ts +0 -64
  360. package/src/react-legacy/src/methods/pollsMethods/handleVotePoll.ts +0 -79
  361. package/src/react-legacy/src/methods/pollsMethods/launchPoll.ts +0 -33
  362. package/src/react-legacy/src/methods/pollsMethods/pollUpdated.ts +0 -101
  363. package/src/react-legacy/src/methods/recordingMethods/checkPauseState.ts +0 -64
  364. package/src/react-legacy/src/methods/recordingMethods/checkResumeState.ts +0 -46
  365. package/src/react-legacy/src/methods/recordingMethods/confirmRecording.ts +0 -317
  366. package/src/react-legacy/src/methods/recordingMethods/launchRecording.ts +0 -130
  367. package/src/react-legacy/src/methods/recordingMethods/recordPauseTimer.ts +0 -55
  368. package/src/react-legacy/src/methods/recordingMethods/recordResumeTimer.ts +0 -131
  369. package/src/react-legacy/src/methods/recordingMethods/recordStartTimer.ts +0 -138
  370. package/src/react-legacy/src/methods/recordingMethods/recordUpdateTimer.ts +0 -66
  371. package/src/react-legacy/src/methods/recordingMethods/startRecording.ts +0 -263
  372. package/src/react-legacy/src/methods/recordingMethods/stopRecording.ts +0 -177
  373. package/src/react-legacy/src/methods/recordingMethods/updateRecording.ts +0 -329
  374. package/src/react-legacy/src/methods/requestsMethods/launchRequests.ts +0 -31
  375. package/src/react-legacy/src/methods/requestsMethods/respondToRequests.ts +0 -74
  376. package/src/react-legacy/src/methods/settingsMethods/launchSettings.ts +0 -29
  377. package/src/react-legacy/src/methods/settingsMethods/modifySettings.ts +0 -116
  378. package/src/react-legacy/src/methods/streamMethods/clickAudio.ts +0 -310
  379. package/src/react-legacy/src/methods/streamMethods/clickChat.ts +0 -60
  380. package/src/react-legacy/src/methods/streamMethods/clickScreenShare.ts +0 -209
  381. package/src/react-legacy/src/methods/streamMethods/clickVideo.ts +0 -340
  382. package/src/react-legacy/src/methods/streamMethods/switchAudio.ts +0 -70
  383. package/src/react-legacy/src/methods/streamMethods/switchVideo.ts +0 -143
  384. package/src/react-legacy/src/methods/streamMethods/switchVideoAlt.ts +0 -139
  385. package/src/react-legacy/src/methods/utils/MiniAudioPlayer/MiniAudioPlayer.tsx +0 -362
  386. package/src/react-legacy/src/methods/utils/SoundPlayer.ts +0 -36
  387. package/src/react-legacy/src/methods/utils/checkLimitsAndMakeRequest.ts +0 -109
  388. package/src/react-legacy/src/methods/utils/createResponseJoinRoom.ts +0 -59
  389. package/src/react-legacy/src/methods/utils/createRoomOnMediaSFU.ts +0 -163
  390. package/src/react-legacy/src/methods/utils/formatNumber.ts +0 -38
  391. package/src/react-legacy/src/methods/utils/generateRandomMessages.ts +0 -112
  392. package/src/react-legacy/src/methods/utils/generateRandomParticipants.ts +0 -139
  393. package/src/react-legacy/src/methods/utils/generateRandomPolls.ts +0 -69
  394. package/src/react-legacy/src/methods/utils/generateRandomRequestList.ts +0 -103
  395. package/src/react-legacy/src/methods/utils/generateRandomWaitingRoomList.ts +0 -47
  396. package/src/react-legacy/src/methods/utils/getModalPosition.ts +0 -42
  397. package/src/react-legacy/src/methods/utils/getOverlayPosition.ts +0 -40
  398. package/src/react-legacy/src/methods/utils/joinRoomOnMediaSFU.ts +0 -153
  399. package/src/react-legacy/src/methods/utils/meetingTimer/startMeetingProgressTimer.ts +0 -95
  400. package/src/react-legacy/src/methods/utils/producer/aParams.ts +0 -26
  401. package/src/react-legacy/src/methods/utils/producer/hParams.ts +0 -45
  402. package/src/react-legacy/src/methods/utils/producer/screenParams.ts +0 -32
  403. package/src/react-legacy/src/methods/utils/producer/vParams.ts +0 -45
  404. package/src/react-legacy/src/methods/utils/producer/videoCaptureConstraints.ts +0 -79
  405. package/src/react-legacy/src/methods/utils/sleep.ts +0 -24
  406. package/src/react-legacy/src/methods/utils/validateAlphanumeric.ts +0 -41
  407. package/src/react-legacy/src/methods/waitingMethods/launchWaiting.ts +0 -34
  408. package/src/react-legacy/src/methods/waitingMethods/respondToWaiting.ts +0 -72
  409. package/src/react-legacy/src/methods/whiteboardMethods/captureCanvasStream.ts +0 -164
  410. package/src/react-legacy/src/methods/whiteboardMethods/launchConfigureWhiteboard.ts +0 -35
  411. package/src/react-legacy/src/producers/producerEmits/joinConRoom.ts +0 -153
  412. package/src/react-legacy/src/producers/socketReceiveMethods/allMembers.ts +0 -278
  413. package/src/react-legacy/src/producers/socketReceiveMethods/allMembersRest.ts +0 -309
  414. package/src/react-legacy/src/producers/socketReceiveMethods/allWaitingRoomMembers.ts +0 -48
  415. package/src/react-legacy/src/producers/socketReceiveMethods/banParticipant.ts +0 -85
  416. package/src/react-legacy/src/producers/socketReceiveMethods/controlMediaHost.ts +0 -189
  417. package/src/react-legacy/src/producers/socketReceiveMethods/disconnect.ts +0 -53
  418. package/src/react-legacy/src/producers/socketReceiveMethods/disconnectUserSelf.ts +0 -56
  419. package/src/react-legacy/src/producers/socketReceiveMethods/getDomains.ts +0 -116
  420. package/src/react-legacy/src/producers/socketReceiveMethods/hostRequestResponse.ts +0 -198
  421. package/src/react-legacy/src/producers/socketReceiveMethods/meetingEnded.ts +0 -67
  422. package/src/react-legacy/src/producers/socketReceiveMethods/meetingStillThere.ts +0 -34
  423. package/src/react-legacy/src/producers/socketReceiveMethods/meetingTimeRemaining.ts +0 -52
  424. package/src/react-legacy/src/producers/socketReceiveMethods/participantRequested.ts +0 -58
  425. package/src/react-legacy/src/producers/socketReceiveMethods/personJoined.ts +0 -40
  426. package/src/react-legacy/src/producers/socketReceiveMethods/producerMediaClosed.ts +0 -140
  427. package/src/react-legacy/src/producers/socketReceiveMethods/producerMediaPaused.ts +0 -177
  428. package/src/react-legacy/src/producers/socketReceiveMethods/producerMediaResumed.ts +0 -106
  429. package/src/react-legacy/src/producers/socketReceiveMethods/reInitiateRecording.ts +0 -54
  430. package/src/react-legacy/src/producers/socketReceiveMethods/receiveMessage.ts +0 -144
  431. package/src/react-legacy/src/producers/socketReceiveMethods/recordingNotice.ts +0 -313
  432. package/src/react-legacy/src/producers/socketReceiveMethods/roomRecordParams.ts +0 -184
  433. package/src/react-legacy/src/producers/socketReceiveMethods/screenProducerId.ts +0 -90
  434. package/src/react-legacy/src/producers/socketReceiveMethods/startRecords.ts +0 -54
  435. package/src/react-legacy/src/producers/socketReceiveMethods/stoppedRecording.ts +0 -53
  436. package/src/react-legacy/src/producers/socketReceiveMethods/timeLeftRecording.ts +0 -46
  437. package/src/react-legacy/src/producers/socketReceiveMethods/updateConsumingDomains.ts +0 -107
  438. package/src/react-legacy/src/producers/socketReceiveMethods/updateMediaSettings.ts +0 -64
  439. package/src/react-legacy/src/producers/socketReceiveMethods/updatedCoHost.ts +0 -95
  440. package/src/react-legacy/src/producers/socketReceiveMethods/userWaiting.ts +0 -52
  441. package/src/react-legacy/src/reportWebVitals.js +0 -13
  442. package/src/react-legacy/src/setupTests.js +0 -5
  443. package/src/react-legacy/src/setupTests.ts +0 -5
  444. package/src/react-legacy/src/sockets/SocketManager.ts +0 -232
  445. package/src/types/legacy.d.ts +0 -4
  446. /package/src/{react-legacy/src/components → components}/eventSettingsComponents/EventSettingsModal.css +0 -0
  447. /package/src/{react-legacy/src/methods → methods}/utils/initialValuesState.ts +0 -0
  448. /package/src/{react-legacy/src/methods → methods}/utils/webrtc/webrtc.ts +0 -0
package/README.md CHANGED
@@ -37,32 +37,118 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🚨 **BREAKING: AI Phone Agents at $0.10 per 1,000 minutes**
40
+ # MediaSFU Vue SDK
41
41
 
42
- 📞 **Call our live AI demos right now:**
43
- - 🇺🇸 **+1 (785) 369-1724** - Mixed Support Demo
44
- - 🇬🇧 **+44 7445 146575** - AI Conversation Demo
45
- - 🇨🇦 **+1 (587) 407-1990** - Technical Support Demo
46
- - 🇨🇦 **+1 (647) 558-6650** - Friendly AI Chat Demo
42
+ MediaSFU Vue is a Vue 3 WebRTC SDK for building video calling, voice calling, conferencing, webinars, live streaming, chat, recording, screen sharing, whiteboards, polls, live subtitles, translation, and collaboration workflows.
47
43
 
48
- **Traditional providers charge $0.05 per minute. We charge $0.10 per 1,000 minutes. That's 500x cheaper.**
44
+ It is designed for teams that want to start with prebuilt room UI and then progressively customize or replace that UI without rebuilding the media runtime, signaling, or room orchestration from scratch.
49
45
 
50
- **Deploy AI phone agents in 30 minutes**
51
- ✅ **Works with ANY SIP provider** (Twilio, Telnyx, Zadarma, etc.)
52
- ✅ **Seamless AI-to-human handoffs**
53
- ✅ **Real-time call analytics & transcription**
46
+ ## Why Vue teams choose MediaSFU
54
47
 
55
- 📖 **[Complete SIP/PSTN Documentation →](https://mediasfu.com/telephony)**
48
+ - Start fast with `MediasfuGeneric` or the themed `ModernMediasfuGeneric`, plus `MediasfuConference`, `MediasfuWebinar`, `MediasfuBroadcast`, and `MediasfuChat`.
49
+ - Keep the bundled UI, override targeted surfaces with `uiOverrides`, or run the runtime headless with `returnUI={false}`.
50
+ - Connect to MediaSFU Cloud or your self-hosted MediaSFU Open deployment.
51
+ - Use Vue 3 and Composition API-friendly wrappers without losing access to the broader MediaSFU product model.
56
52
 
57
- ---
53
+ ## Quick Start: First Working Room
58
54
 
59
- # MediaSFU Vue SDK
55
+ ```bash
56
+ npm install mediasfu-vue
57
+ ```
58
+
59
+ Import the package stylesheet once in your app entry, usually `main.ts`:
60
+
61
+ ```ts
62
+ import 'mediasfu-vue/dist/mediasfu-vue.css';
63
+ ```
64
+
65
+ Then render one of the prebuilt room components. Keep real production credentials on your server. For local development, copy `.env.example` to `.env` and use Vite variables, or pass values from your own secure backend flow.
66
+
67
+ ```vue
68
+ <script setup lang="ts">
69
+ import { MediasfuGeneric } from 'mediasfu-vue';
70
+
71
+ const credentials = {
72
+ apiUserName: import.meta.env.VITE_MEDIASFU_API_USERNAME ?? '',
73
+ apiKey: import.meta.env.VITE_MEDIASFU_API_KEY ?? '',
74
+ };
60
75
 
61
- > **🎉 Welcome to MediaSFU Vue!** This is the official Vue 3 SDK for MediaSFU. While most code examples have been adapted from React to Vue's Composition API, some sections may still show React-style JSX. Please adapt these examples to Vue template syntax as needed. We're actively updating all examples.
76
+ const localLink = import.meta.env.VITE_MEDIASFU_LOCAL_LINK ?? '';
77
+ const connectMediaSFU = localLink !== '' || Boolean(credentials.apiUserName && credentials.apiKey);
78
+ </script>
79
+
80
+ <template>
81
+ <MediasfuGeneric
82
+ :credentials="credentials"
83
+ :local-link="localLink"
84
+ :connectMediaSFU="connectMediaSFU"
85
+ />
86
+ </template>
87
+ ```
88
+
89
+ You still need a MediaSFU-compatible backend for room lifecycle, signaling, and media routing. Use MediaSFU Cloud for managed infrastructure, or pass `localLink` to point at your self-hosted MediaSFU Open / Community Edition server.
90
+
91
+ If you want the same room runtime with the modern themed shell, import `ModernMediasfuGeneric` from the package root:
92
+
93
+ ```vue
94
+ <script setup lang="ts">
95
+ import { ModernMediasfuGeneric } from 'mediasfu-vue';
96
+
97
+ const credentials = {
98
+ apiUserName: import.meta.env.VITE_MEDIASFU_API_USERNAME ?? '',
99
+ apiKey: import.meta.env.VITE_MEDIASFU_API_KEY ?? '',
100
+ };
101
+ </script>
102
+
103
+ <template>
104
+ <ModernMediasfuGeneric
105
+ :credentials="credentials"
106
+ :container-style="{
107
+ minHeight: '100vh',
108
+ background: 'linear-gradient(135deg, #0f172a, #1e3a8a)'
109
+ }"
110
+ />
111
+ </template>
112
+ ```
113
+
114
+ Use `MediasfuGeneric` when you want the classic entry flow and broadest parity with older examples. Use `ModernMediasfuGeneric` when you want the newer themed shell, modern modal system, and glassmorphism layout from the start.
115
+
116
+ ### Choose an integration path
117
+
118
+ | Path | Best for | What you pass |
119
+ | --- | --- | --- |
120
+ | MediaSFU Cloud | Managed rooms, signaling, and media routing | `credentials` and `connectMediaSFU` |
121
+ | MediaSFU Open / CE | Self-hosted infrastructure | `localLink` and your CE server settings |
122
+ | Modern themed UI | New Vue apps that want the polished glassmorphism shell | `ModernMediasfuGeneric` with the same core room props |
123
+ | Secure production proxy | Public apps that must keep keys off the client | custom `createMediaSFURoom` and `joinMediaSFURoom` functions |
124
+ | Local UI mode | Storybook, demos, tests, and screenshots | `useLocalUIMode`, `useSeed`, and `seedData` |
125
+
126
+ Use the generic component when users choose the event type on a welcome screen. Use the named components when your product already knows the experience type.
127
+
128
+ ```vue
129
+ <template>
130
+ <MediasfuConference :credentials="credentials" />
131
+ <MediasfuWebinar :credentials="credentials" />
132
+ <MediasfuBroadcast :credentials="credentials" />
133
+ <MediasfuChat :credentials="credentials" />
134
+ </template>
135
+ ```
136
+
137
+ For demos without a backend connection, seed the UI locally:
138
+
139
+ ```vue
140
+ <template>
141
+ <MediasfuGeneric
142
+ :useLocalUIMode="true"
143
+ :useSeed="true"
144
+ :seedData="{ member: 'DemoUser', eventType: 'conference' }"
145
+ />
146
+ </template>
147
+ ```
62
148
 
63
149
  ---
64
150
 
65
- ## ⚠️ REQUIRED: Import CSS Styles
151
+ ## Required: Import CSS Styles
66
152
 
67
153
  **MediaSFU UI will NOT display correctly without importing the CSS file!**
68
154
 
@@ -76,11 +162,32 @@ This is required for all MediaSFU components to render with proper styling. With
76
162
 
77
163
  ---
78
164
 
165
+ ## Also available: AI phone agents, SIP, and PSTN flows
166
+
167
+ MediaSFU also supports AI phone agents and telephony workflows on top of the same broader communications platform.
168
+
169
+ Call the live demos:
170
+
171
+ - 🇺🇸 **+1 (785) 369-1724** - Mixed Support Demo
172
+ - 🇬🇧 **+44 7445 146575** - AI Conversation Demo
173
+ - 🇨🇦 **+1 (587) 407-1990** - Technical Support Demo
174
+ - 🇨🇦 **+1 (647) 558-6650** - Friendly AI Chat Demo
175
+
176
+ Why teams evaluate the telephony side:
177
+
178
+ - Deploy AI phone agents in about 30 minutes
179
+ - Works with SIP providers such as Twilio, Telnyx, and Zadarma
180
+ - Supports AI-to-human handoffs, analytics, and transcription
181
+
182
+ 📖 **[Complete SIP/PSTN Documentation →](https://mediasfu.com/telephony)**
183
+
184
+ ---
185
+
79
186
  ## Quick Reference: Component Props & UI Overrides
80
187
 
81
188
  > **New:** UI override parity now extends across Webinar and Chat layouts, unifying customization for every MediaSFU interface.
82
189
 
83
- Every primary MediaSFU UI export—`MediasfuGeneric`, `MediasfuBroadcast`, `MediasfuConference`, `MediasfuWebinar`, and `MediasfuChat`—now ships with a consistent prop surface and a powerful `uiOverrides` map, so you can bend the bundled experience to match your product without losing MediaSFU’s hardened real-time logic.
190
+ Every primary MediaSFU UI export—`MediasfuGeneric`, `ModernMediasfuGeneric`, `MediasfuBroadcast`, `MediasfuConference`, `MediasfuWebinar`, and `MediasfuChat`—now ships with a consistent core prop surface and a powerful `uiOverrides` map, so you can bend the bundled experience to match your product without losing MediaSFU’s hardened real-time logic.
84
191
 
85
192
  ### Shared component props (applies to every MediaSFU UI component)
86
193
 
@@ -103,7 +210,23 @@ Every primary MediaSFU UI export—`MediasfuGeneric`, `MediasfuBroadcast`, `Medi
103
210
  | `containerStyle` | `StyleValue` | `undefined` | Apply inline styles to the root wrapper (dashboards, split views, etc.). |
104
211
  | `uiOverrides` | `MediasfuUICustomOverrides` | `undefined` | Targeted component/function overrides described below. |
105
212
 
106
- > **Power combo:** Set `returnUI={false}` to run MediaSFU logic headless, capture helpers via `updateSourceParameters`, and selectively bring UI pieces back with `uiOverrides`. That gives you progressive migration with minimal code churn.
213
+ > **Power combo:** Set `:returnUI="false"` to run MediaSFU logic headless, capture helpers via `updateSourceParameters`, and selectively bring UI pieces back with `uiOverrides`. That gives you progressive migration with minimal code churn.
214
+
215
+ ### Launch contract for custom UI and sidebar panels
216
+
217
+ When you build on top of `sourceParameters`, `customComponent`, or `uiOverrides`, treat the raw `updateIs...Visible(true)` helpers as low-level state setters, not the preferred integration surface.
218
+
219
+ 1. Use the SDK's sidebar-aware open helpers for desktop menu and side-panel flows whenever they are available. They preserve sidebar navigation history and choose the correct render mode for the current viewport.
220
+ 2. `launchMediaSettings` and the recording launch path do setup work before the panel is shown. Media settings refreshes the latest camera and microphone lists, while recording re-checks permission and recording state. A direct visibility toggle can skip that setup.
221
+ 3. If you wrap a modal or embedded sidebar body, resolve live params from `parameters.getUpdatedAllParams?.()` when it exists instead of caching the first `parameters` snapshot. That keeps device lists, recording state, and other mutable room data current.
222
+
223
+ ```ts
224
+ const liveParameters = computed(
225
+ () => parameters.getUpdatedAllParams?.() ?? parameters
226
+ );
227
+ ```
228
+
229
+ This is especially important for custom media-settings, recording, and other sidebar-rendered panels that depend on fresh runtime state.
107
230
 
108
231
  ```ts
109
232
  import type { MediasfuUICustomOverrides } from "mediasfu-vue";
@@ -113,142 +236,217 @@ const overrides: MediasfuUICustomOverrides = { /* ... */ };
113
236
 
114
237
  Bring the types into your project to unlock full IntelliSense for every override slot.
115
238
 
116
- ### Custom UI Playbook
239
+ ### Vue Customization Playbook
117
240
 
118
- Use a toggle-driven "playbook" component to experiment with MediaSFU’s customization layers. Flip a couple of booleans and you can watch the SDK jump between prebuilt layouts, headless logic, or a fully bespoke workspace driven by `customComponent`.
241
+ Use this progression when moving from a stock MediaSFU room to a product-specific Vue experience. Start with the prebuilt UI, add targeted overrides, then move to `customComponent` or `returnUI` only when your app needs full ownership of the interface.
119
242
 
120
- #### What the playbook demonstrates
243
+ #### 1. Switch event types and connection modes
121
244
 
122
- - **Connection presets**: toggle `connectionScenario` between `cloud`, `hybrid`, or `ce` to swap credentials, local links, and connection modes in one place.
123
- - **Experience selector**: the `selectedExperience` switch renders `MediasfuGeneric`, `MediasfuBroadcast`, `MediasfuWebinar`, `MediasfuConference`, or `MediasfuChat` without touching the rest of your stack.
124
- - **UI strategy flags**: booleans like `showPrebuiltUI`, `enableFullCustomUI`, and `enableNoUIPreJoin` demonstrate how to run the MediaSFU logic with or without the bundled UI.
125
- - **Layered overrides**: toggles enable the custom video/audio/mini cards, drop-in `uiOverrides` for layout and modal surfaces, container styling, and backend proxy helpers.
126
- - **Custom workspace demo**: a `customComponent` receives live MediaSFU helpers so you can build dashboards, CRM surfaces, or any bespoke host interface.
127
- - **Debug panel & helpers**: optional JSON panel exposes the `updateSourceParameters` payload so you can see exactly what to wire into your own components.
245
+ ```vue
246
+ <script setup lang="ts">
247
+ import { computed, ref } from 'vue';
248
+ import {
249
+ MediasfuBroadcast,
250
+ MediasfuChat,
251
+ MediasfuConference,
252
+ MediasfuGeneric,
253
+ MediasfuWebinar,
254
+ } from 'mediasfu-vue';
255
+ import type { MediasfuUICustomOverrides } from 'mediasfu-vue';
128
256
 
129
- #### Try it quickly
257
+ type ConnectionScenario = 'cloud' | 'hybrid' | 'ce';
258
+ type ExperienceKey = 'generic' | 'broadcast' | 'webinar' | 'conference' | 'chat';
130
259
 
131
- ```tsx
132
- const connectionScenario: "cloud" | "hybrid" | "ce" = "cloud";
133
- const selectedExperience = "generic" as const;
134
- const showPrebuiltUI = true;
135
- const enableFullCustomUI = false;
260
+ const connectionScenario = ref<ConnectionScenario>('cloud');
261
+ const selectedExperience = ref<ExperienceKey>('generic');
136
262
 
137
- const connectionPresets = {
138
- cloud: { credentials: { apiUserName: "demo", apiKey: "demo" }, localLink: "", connectMediaSFU: true },
139
- hybrid: { credentials: { apiUserName: "demo", apiKey: "demo" }, localLink: "http://localhost:3000", connectMediaSFU: true },
140
- ce: { credentials: undefined, localLink: "http://localhost:3000", connectMediaSFU: false },
263
+ const credentials = {
264
+ apiUserName: import.meta.env.VITE_MEDIASFU_API_USERNAME ?? '',
265
+ apiKey: import.meta.env.VITE_MEDIASFU_API_KEY ?? '',
141
266
  };
142
267
 
143
- const Experience = {
268
+ const hasCloudCredentials = computed(
269
+ () => credentials.apiUserName.trim() !== '' && credentials.apiKey.trim() !== '',
270
+ );
271
+
272
+ const connectionPresets = computed(() => ({
273
+ cloud: {
274
+ credentials,
275
+ localLink: '',
276
+ connectMediaSFU: hasCloudCredentials.value,
277
+ },
278
+ hybrid: {
279
+ credentials,
280
+ localLink: 'http://localhost:3000',
281
+ connectMediaSFU: true,
282
+ },
283
+ ce: {
284
+ credentials: undefined,
285
+ localLink: 'http://localhost:3000',
286
+ connectMediaSFU: false,
287
+ },
288
+ }));
289
+
290
+ const experiences = {
144
291
  generic: MediasfuGeneric,
145
292
  broadcast: MediasfuBroadcast,
146
293
  webinar: MediasfuWebinar,
147
294
  conference: MediasfuConference,
148
295
  chat: MediasfuChat,
149
- }[selectedExperience];
150
-
151
- export const CustomUIPlaybook = () => {
152
- const overrides = useMemo(() => ({
153
- mainContainer: enableFullCustomUI
154
- ? {
155
- render: (props) => (
156
- <div style={{ border: "4px dashed purple", borderRadius: 24, padding: 16 }}>
157
- <MainContainerComponent {...props} />
158
- </div>
159
- ),
160
- }
161
- : undefined,
162
- }), [enableFullCustomUI]);
163
-
164
- const current = connectionPresets[connectionScenario];
165
-
166
- return (
167
- <Experience
168
- {...current}
169
- showPrebuiltUI={showPrebuiltUI}
170
- uiOverrides={overrides}
171
- containerStyle={{ background: "linear-gradient(135deg, #0f172a, #1e3a8a)", minHeight: "100vh" }}
172
- />
173
- );
174
296
  };
175
- ```
176
-
177
- Toggle the configuration values at the top of the playbook and watch the UI reconfigure instantly. It’s the fastest path to understand MediaSFU’s override surface before you fold the patterns into your production entrypoint.
178
297
 
179
- #### Passing custom props and UI overrides
298
+ const Experience = computed(() => experiences[selectedExperience.value]);
299
+ const currentConnection = computed(() => connectionPresets.value[connectionScenario.value]);
180
300
 
181
- Use the same playbook to validate bespoke cards, override bundles, and fully custom workspaces before you move them into production code:
301
+ const uiOverrides = computed<MediasfuUICustomOverrides>(() => ({}));
302
+ </script>
182
303
 
183
- ```tsx
184
- const videoCard: CustomVideoCardType = (props) => (
185
- <VideoCard
186
- {...props}
187
- customStyle={{
188
- borderRadius: 20,
189
- border: "3px solid #4c1d95",
190
- boxShadow: "0 28px 65px rgba(76,29,149,0.35)",
191
- background: "linear-gradient(140deg, rgba(15,23,42,0.78), rgba(30,64,175,0.45))",
192
- ...(props.customStyle ?? {}),
193
- }}
304
+ <template>
305
+ <component
306
+ :is="Experience"
307
+ v-bind="currentConnection"
308
+ :ui-overrides="uiOverrides"
309
+ :container-style="{ minHeight: '100vh' }"
194
310
  />
195
- );
311
+ </template>
312
+ ```
196
313
 
197
- const audioCard: CustomAudioCardType = (props) => (
198
- <AudioCard
199
- {...props}
200
- barColor="#22c55e"
201
- customStyle={{ borderRadius: 22, background: "rgba(34,197,94,0.1)" }}
202
- />
203
- );
314
+ #### 2. Replace cards, controls, or modals
204
315
 
205
- const miniCard: CustomMiniCardType = (props) => (
206
- <MiniCard
207
- {...props}
208
- renderContainer={({ defaultContainer }) => (
209
- <div style={{ display: "grid", placeItems: "center", height: "100%" }}>{defaultContainer}</div>
210
- )}
211
- />
212
- );
316
+ Create normal Vue components for the parts your product owns, then wire them through `uiOverrides`.
213
317
 
214
- const uiOverrides = useMemo<MediasfuUICustomOverrides>(() => ({
215
- mainContainer: {
216
- render: (props) => (
217
- <div style={{ border: "4px dashed rgba(139,92,246,0.8)", borderRadius: 28, padding: 16 }}>
218
- <MainContainerComponent {...props} />
219
- </div>
220
- ),
221
- },
222
- menuModal: {
223
- component: (modalProps) => <MenuModal {...modalProps} variant="glass" />,
224
- },
318
+ ```vue
319
+ <script setup lang="ts">
320
+ import { computed } from 'vue';
321
+ import { MediasfuConference } from 'mediasfu-vue';
322
+ import type { MediasfuUICustomOverrides } from 'mediasfu-vue';
323
+ import BrandedVideoCard from './BrandedVideoCard.vue';
324
+ import ProductControls from './ProductControls.vue';
325
+ import TeamMessagesModal from './TeamMessagesModal.vue';
326
+
327
+ const uiOverrides = computed<MediasfuUICustomOverrides>(() => ({
328
+ videoCard: { component: BrandedVideoCard },
329
+ controlButtons: { component: ProductControls },
330
+ messagesModal: { component: TeamMessagesModal },
225
331
  consumerResume: {
226
332
  wrap: (original) => async (params) => {
227
333
  const startedAt = performance.now();
228
334
  const result = await original(params);
229
- analytics.track("consumer_resume", {
230
- durationMs: performance.now() - startedAt,
335
+
336
+ console.info('consumer_resume', {
337
+ durationMs: Math.round(performance.now() - startedAt),
231
338
  consumerId: params?.consumer?.id,
232
339
  });
340
+
233
341
  return result;
234
342
  },
235
343
  },
236
- }), []);
237
-
238
- return (
239
- <Experience
240
- {...current}
241
- customVideoCard={videoCard}
242
- customAudioCard={audioCard}
243
- customMiniCard={miniCard}
244
- customComponent={enableFullCustomUI ? CustomWorkspace : undefined}
245
- containerStyle={{ background: "#0f172a", borderRadius: 32, overflow: "hidden" }}
246
- uiOverrides={uiOverrides}
344
+ }));
345
+ </script>
346
+
347
+ <template>
348
+ <MediasfuConference :credentials="credentials" :ui-overrides="uiOverrides" />
349
+ </template>
350
+ ```
351
+
352
+ #### 3. Own the whole shell with `customComponent`
353
+
354
+ Use `customComponent` when your app needs a branded workspace but still wants MediaSFU to manage room state, media transports, socket events, and helpers.
355
+
356
+ ```vue
357
+ <script setup lang="ts">
358
+ import { computed, markRaw, ref } from 'vue';
359
+ import { MediasfuGeneric } from 'mediasfu-vue';
360
+ import ProductRoomShell from './ProductRoomShell.vue';
361
+
362
+ const enableProductShell = ref(true);
363
+ const customComponent = computed(() => (
364
+ enableProductShell.value ? markRaw(ProductRoomShell) : undefined
365
+ ));
366
+ </script>
367
+
368
+ <template>
369
+ <MediasfuGeneric
370
+ :credentials="credentials"
371
+ :custom-component="customComponent"
247
372
  />
248
- );
373
+ </template>
249
374
  ```
250
375
 
251
- Because the playbook surfaces `updateSourceParameters`, you can also log or snapshot the helper bundle (`getParticipantMedia`, `toggleMenuModal`, `showAlert`, and more) to ensure your custom UI always receives the hooks it expects.
376
+ #### 4. Go headless with `returnUI=false`
377
+
378
+ Use headless mode when your app supplies every visible surface. MediaSFU still creates or joins the room and gives you helpers through `updateSourceParameters`.
379
+
380
+ ```vue
381
+ <script setup lang="ts">
382
+ import { shallowRef } from 'vue';
383
+ import { MediasfuGeneric } from 'mediasfu-vue';
384
+
385
+ const sourceParameters = shallowRef<Record<string, unknown>>({});
386
+
387
+ const updateSourceParameters = (helpers: Record<string, unknown>) => {
388
+ sourceParameters.value = helpers;
389
+ };
390
+
391
+ const noUIPreJoinOptions = {
392
+ action: 'create',
393
+ eventType: 'conference',
394
+ userName: 'Host',
395
+ duration: 60,
396
+ capacity: 25,
397
+ };
398
+ </script>
399
+
400
+ <template>
401
+ <MediasfuGeneric
402
+ :credentials="credentials"
403
+ :returnUI="false"
404
+ :noUIPreJoinOptions="noUIPreJoinOptions"
405
+ :sourceParameters="sourceParameters"
406
+ :updateSourceParameters="updateSourceParameters"
407
+ />
408
+ </template>
409
+ ```
410
+
411
+ #### 5. Keep production credentials server-side
412
+
413
+ For public applications, proxy room creation and join calls through your own backend. The browser sends ordinary user/session data to your server, and your server calls MediaSFU Cloud with real credentials.
414
+
415
+ ```vue
416
+ <script setup lang="ts">
417
+ import { MediasfuGeneric } from 'mediasfu-vue';
418
+
419
+ const createMediaSFURoom = async (options: unknown) => {
420
+ const response = await fetch('/api/mediasfu/create-room', {
421
+ method: 'POST',
422
+ headers: { 'Content-Type': 'application/json' },
423
+ body: JSON.stringify(options),
424
+ });
425
+
426
+ return response.json();
427
+ };
428
+
429
+ const joinMediaSFURoom = async (options: unknown) => {
430
+ const response = await fetch('/api/mediasfu/join-room', {
431
+ method: 'POST',
432
+ headers: { 'Content-Type': 'application/json' },
433
+ body: JSON.stringify(options),
434
+ });
435
+
436
+ return response.json();
437
+ };
438
+ </script>
439
+
440
+ <template>
441
+ <MediasfuGeneric
442
+ :createMediaSFURoom="createMediaSFURoom"
443
+ :joinMediaSFURoom="joinMediaSFURoom"
444
+ :connectMediaSFU="true"
445
+ />
446
+ </template>
447
+ ```
448
+
449
+ Because these patterns all work through Vue components, refs, computed values, and normal template bindings, they are easier to lift into Nuxt, dashboards, learning platforms, telehealth apps, livestream studios, and collaboration tools.
252
450
 
253
451
  ### `uiOverrides` map — override keys at a glance
254
452
 
@@ -276,7 +474,7 @@ Each key accepts a `CustomComponentOverride<Props>` object with optional `compon
276
474
 
277
475
  | Key | Default component | Typical use |
278
476
  | --- | --- | --- |
279
- | `videoCard` | `VideoCard` | Add host badges, vueions, or CRM overlays. |
477
+ | `videoCard` | `VideoCard` | Add host badges, captions, or CRM overlays. |
280
478
  | `audioCard` | `AudioCard` | Swap avatars or expose spoken-language info. |
281
479
  | `miniCard` | `MiniCard` | Customize thumbnails in picture-in-picture modes. |
282
480
  | `miniAudio` | `MiniAudio` | Re-style the audio-only mini indicators. |
@@ -329,47 +527,59 @@ Each key accepts a `CustomComponentOverride<Props>` object with optional `compon
329
527
 
330
528
  ### Example: swap the chat modal and theme the controls
331
529
 
332
- ```tsx
333
- import { MediasfuGeneric } from "mediasfu-vue";
334
- import { MyChatModal } from "./ui/MyChatModal";
335
- import { MyControls } from "./ui/MyControls";
336
-
337
- const uiOverrides = {
338
- messagesModal: {
339
- component: MyChatModal,
340
- },
341
- controlButtons: {
342
- render: (props) => <MyControls {...props} variant="glass" />,
343
- },
344
- };
345
-
346
- export const MyMeeting = () => (
347
- <MediasfuGeneric credentials={credentials} uiOverrides={uiOverrides} />
348
- );
530
+ ```vue
531
+ <script setup lang="ts">
532
+ import { computed } from 'vue';
533
+ import { MediasfuGeneric } from 'mediasfu-vue';
534
+ import type { MediasfuUICustomOverrides } from 'mediasfu-vue';
535
+ import MyChatModal from './ui/MyChatModal.vue';
536
+ import MyControls from './ui/MyControls.vue';
537
+
538
+ const uiOverrides = computed<MediasfuUICustomOverrides>(() => ({
539
+ messagesModal: { component: MyChatModal },
540
+ controlButtons: { component: MyControls },
541
+ }));
542
+ </script>
543
+
544
+ <template>
545
+ <MediasfuGeneric :credentials="credentials" :ui-overrides="uiOverrides" />
546
+ </template>
349
547
  ```
350
548
 
351
549
  ### Example: wrap a MediaSFU helper instead of replacing it
352
550
 
353
- ```tsx
354
- const uiOverrides = {
551
+ ```vue
552
+ <script setup lang="ts">
553
+ import { computed } from 'vue';
554
+ import { MediasfuConference } from 'mediasfu-vue';
555
+ import type { MediasfuUICustomOverrides } from 'mediasfu-vue';
556
+
557
+ const uiOverrides = computed<MediasfuUICustomOverrides>(() => ({
355
558
  consumerResume: {
356
559
  wrap: (original) => async (params) => {
357
560
  const startedAt = performance.now();
358
561
  const result = await original(params);
359
- analytics.track("consumer_resume", {
360
- durationMs: performance.now() - startedAt,
562
+
563
+ console.info('consumer_resume', {
564
+ durationMs: Math.round(performance.now() - startedAt),
361
565
  consumerId: params?.consumer?.id,
362
566
  });
567
+
363
568
  return result;
364
569
  },
365
570
  },
366
- };
571
+ }));
572
+ </script>
367
573
 
368
- <MediasfuConference uiOverrides={uiOverrides} />;
574
+ <template>
575
+ <MediasfuConference :credentials="credentials" :ui-overrides="uiOverrides" />
576
+ </template>
369
577
  ```
370
578
 
371
579
  The same override hooks power the newly refreshed `MediasfuWebinar` and `MediasfuChat` layouts, so you can guarantee a unified experience across events, webinars, or chat-first rooms.
372
580
 
581
+ The sections below keep the broader API reference and migration history. For new Vue 3 apps, prefer the Vue Composition API examples above whenever syntax differs.
582
+
373
583
  ---
374
584
 
375
585
  MediaSFU offers a cutting-edge streaming experience that empowers users to customize their recordings and engage their audience with high-quality streams. Whether you're a content creator, educator, or business professional, MediaSFU provides the tools you need to elevate your streaming game.
@@ -3460,7 +3670,7 @@ export default App;
3460
3670
  * return res.status(401).json({ error: "Invalid or expired credentials" });
3461
3671
  * }
3462
3672
  *
3463
- * const response = await fetch("https://mediasfu.com/v1/rooms", {
3673
+ * const response = await fetch("https://mediasfu.com/v1/rooms/", {
3464
3674
  * method: "POST",
3465
3675
  * headers: {
3466
3676
  * "Content-Type": "application/json",
@@ -3548,7 +3758,7 @@ export default App;
3548
3758
  * localLink = '',
3549
3759
  * }) => {
3550
3760
  * try {
3551
- * let finalLink = 'https://mediasfu.com/v1/rooms/join';
3761
+ * let finalLink = 'https://mediasfu.com/v1/rooms/';
3552
3762
  *
3553
3763
  * // Update finalLink if using a local server
3554
3764
  * if (localLink) {
@@ -4755,16 +4965,16 @@ To implement your custom UI for media display:
4755
4965
 
4756
4966
  1. **Custom MainGrid (Host's Video)**:
4757
4967
  - Modify the UI in the `prepopulateUserMedia` function.
4758
- - Example link to MediaSFU's default implementation: [`prepopulateUserMedia`](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/consumers/prepopulateUserMedia.tsx).
4968
+ - Example link to MediaSFU's default implementation: [`prepopulateUserMedia`](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/consumers/prepopulateUserMedia.ts).
4759
4969
 
4760
4970
  2. **Custom MiniGrid (Participants' Media)**:
4761
4971
  - Modify the UI in the `addVideosGrid` function.
4762
- - Example link to MediaSFU's default implementation: [`addVideosGrid`](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/consumers/addVideosGrid.tsx).
4972
+ - Example link to MediaSFU's default implementation: [`addVideosGrid`](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/consumers/addVideosGrid.ts).
4763
4973
 
4764
4974
  To create a custom UI, you can refer to existing MediaSFU implementations like:
4765
4975
 
4766
- - [MediasfuGeneric](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/components/mediasfuComponents/MediasfuGeneric.tsx)
4767
- - [MediasfuBroadcast](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/components/mediasfuComponents/MediasfuBroadcast.tsx)
4976
+ - [MediasfuGeneric](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/components/mediasfuComponents/MediasfuGeneric.vue)
4977
+ - [MediasfuBroadcast](https://github.com/MediaSFU/MediaSFU-Vue/blob/main/src/components/mediasfuComponents/MediasfuBroadcast.vue)
4768
4978
 
4769
4979
  Once your custom components are built, modify the imports of `prepopulateUserMedia` and `addVideosGrid` to point to your custom implementations instead of the default MediaSFU ones.
4770
4980
 
@@ -5004,7 +5214,7 @@ https://github.com/user-attachments/assets/310cb87c-dade-445d-aee7-dea1889d6dc4
5004
5214
 
5005
5215
  # Contributing <a name="contributing"></a>
5006
5216
 
5007
- We welcome contributions from the community to improve the project! If you'd like to contribute, please check out our [GitHub repository](https://github.com/MediaSFU-Vue) and follow the guidelines outlined in the README.
5217
+ We welcome contributions from the community to improve the project! If you'd like to contribute, please check out our [GitHub repository](https://github.com/MediaSFU/MediaSFU-Vue) and follow the guidelines outlined in the README.
5008
5218
 
5009
5219
  If you encounter any issues or have suggestions for improvement, please feel free to open an issue on GitHub.
5010
5220