@werxt/livekit-components-react 2.9.20

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 (488) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +36 -0
  3. package/dist/assets/icons/CameraDisabledIcon.d.ts +11 -0
  4. package/dist/assets/icons/CameraDisabledIcon.d.ts.map +1 -0
  5. package/dist/assets/icons/CameraIcon.d.ts +11 -0
  6. package/dist/assets/icons/CameraIcon.d.ts.map +1 -0
  7. package/dist/assets/icons/ChatCloseIcon.d.ts +11 -0
  8. package/dist/assets/icons/ChatCloseIcon.d.ts.map +1 -0
  9. package/dist/assets/icons/ChatIcon.d.ts +11 -0
  10. package/dist/assets/icons/ChatIcon.d.ts.map +1 -0
  11. package/dist/assets/icons/Chevron.d.ts +11 -0
  12. package/dist/assets/icons/Chevron.d.ts.map +1 -0
  13. package/dist/assets/icons/FocusToggleIcon.d.ts +11 -0
  14. package/dist/assets/icons/FocusToggleIcon.d.ts.map +1 -0
  15. package/dist/assets/icons/GearIcon.d.ts +11 -0
  16. package/dist/assets/icons/GearIcon.d.ts.map +1 -0
  17. package/dist/assets/icons/LeaveIcon.d.ts +11 -0
  18. package/dist/assets/icons/LeaveIcon.d.ts.map +1 -0
  19. package/dist/assets/icons/LockLockedIcon.d.ts +11 -0
  20. package/dist/assets/icons/LockLockedIcon.d.ts.map +1 -0
  21. package/dist/assets/icons/MicDisabledIcon.d.ts +11 -0
  22. package/dist/assets/icons/MicDisabledIcon.d.ts.map +1 -0
  23. package/dist/assets/icons/MicIcon.d.ts +11 -0
  24. package/dist/assets/icons/MicIcon.d.ts.map +1 -0
  25. package/dist/assets/icons/QualityExcellentIcon.d.ts +11 -0
  26. package/dist/assets/icons/QualityExcellentIcon.d.ts.map +1 -0
  27. package/dist/assets/icons/QualityGoodIcon.d.ts +11 -0
  28. package/dist/assets/icons/QualityGoodIcon.d.ts.map +1 -0
  29. package/dist/assets/icons/QualityPoorIcon.d.ts +11 -0
  30. package/dist/assets/icons/QualityPoorIcon.d.ts.map +1 -0
  31. package/dist/assets/icons/QualityUnknownIcon.d.ts +11 -0
  32. package/dist/assets/icons/QualityUnknownIcon.d.ts.map +1 -0
  33. package/dist/assets/icons/ScreenShareIcon.d.ts +11 -0
  34. package/dist/assets/icons/ScreenShareIcon.d.ts.map +1 -0
  35. package/dist/assets/icons/ScreenShareStopIcon.d.ts +11 -0
  36. package/dist/assets/icons/ScreenShareStopIcon.d.ts.map +1 -0
  37. package/dist/assets/icons/SpinnerIcon.d.ts +11 -0
  38. package/dist/assets/icons/SpinnerIcon.d.ts.map +1 -0
  39. package/dist/assets/icons/UnfocusToggleIcon.d.ts +11 -0
  40. package/dist/assets/icons/UnfocusToggleIcon.d.ts.map +1 -0
  41. package/dist/assets/icons/index.d.ts +20 -0
  42. package/dist/assets/icons/index.d.ts.map +1 -0
  43. package/dist/assets/icons/util.d.ts +11 -0
  44. package/dist/assets/icons/util.d.ts.map +1 -0
  45. package/dist/assets/images/ParticipantPlaceholder.d.ts +11 -0
  46. package/dist/assets/images/ParticipantPlaceholder.d.ts.map +1 -0
  47. package/dist/assets/images/index.d.ts +2 -0
  48. package/dist/assets/images/index.d.ts.map +1 -0
  49. package/dist/components/ChatEntry.d.ts +35 -0
  50. package/dist/components/ChatEntry.d.ts.map +1 -0
  51. package/dist/components/ConnectionState.d.ts +23 -0
  52. package/dist/components/ConnectionState.d.ts.map +1 -0
  53. package/dist/components/ConnectionStateToast.d.ts +13 -0
  54. package/dist/components/ConnectionStateToast.d.ts.map +1 -0
  55. package/dist/components/LiveKitRoom.d.ts +92 -0
  56. package/dist/components/LiveKitRoom.d.ts.map +1 -0
  57. package/dist/components/ParticipantLoop.d.ts +28 -0
  58. package/dist/components/ParticipantLoop.d.ts.map +1 -0
  59. package/dist/components/RoomAudioRenderer.d.ts +29 -0
  60. package/dist/components/RoomAudioRenderer.d.ts.map +1 -0
  61. package/dist/components/RoomName.d.ts +20 -0
  62. package/dist/components/RoomName.d.ts.map +1 -0
  63. package/dist/components/SessionProvider.d.ts +13 -0
  64. package/dist/components/SessionProvider.d.ts.map +1 -0
  65. package/dist/components/Toast.d.ts +14 -0
  66. package/dist/components/Toast.d.ts.map +1 -0
  67. package/dist/components/TrackLoop.d.ts +26 -0
  68. package/dist/components/TrackLoop.d.ts.map +1 -0
  69. package/dist/components/controls/ChatToggle.d.ts +19 -0
  70. package/dist/components/controls/ChatToggle.d.ts.map +1 -0
  71. package/dist/components/controls/ClearPinButton.d.ts +20 -0
  72. package/dist/components/controls/ClearPinButton.d.ts.map +1 -0
  73. package/dist/components/controls/DisconnectButton.d.ts +19 -0
  74. package/dist/components/controls/DisconnectButton.d.ts.map +1 -0
  75. package/dist/components/controls/FocusToggle.d.ts +21 -0
  76. package/dist/components/controls/FocusToggle.d.ts.map +1 -0
  77. package/dist/components/controls/MediaDeviceSelect.d.ts +40 -0
  78. package/dist/components/controls/MediaDeviceSelect.d.ts.map +1 -0
  79. package/dist/components/controls/PaginationControl.d.ts +9 -0
  80. package/dist/components/controls/PaginationControl.d.ts.map +1 -0
  81. package/dist/components/controls/PaginationIndicator.d.ts +7 -0
  82. package/dist/components/controls/PaginationIndicator.d.ts.map +1 -0
  83. package/dist/components/controls/SettingsMenuToggle.d.ts +13 -0
  84. package/dist/components/controls/SettingsMenuToggle.d.ts.map +1 -0
  85. package/dist/components/controls/StartAudio.d.ts +24 -0
  86. package/dist/components/controls/StartAudio.d.ts.map +1 -0
  87. package/dist/components/controls/StartMediaButton.d.ts +22 -0
  88. package/dist/components/controls/StartMediaButton.d.ts.map +1 -0
  89. package/dist/components/controls/TrackToggle.d.ts +32 -0
  90. package/dist/components/controls/TrackToggle.d.ts.map +1 -0
  91. package/dist/components/index.d.ts +30 -0
  92. package/dist/components/index.d.ts.map +1 -0
  93. package/dist/components/layout/CarouselLayout.d.ts +27 -0
  94. package/dist/components/layout/CarouselLayout.d.ts.map +1 -0
  95. package/dist/components/layout/FocusLayout.d.ts +25 -0
  96. package/dist/components/layout/FocusLayout.d.ts.map +1 -0
  97. package/dist/components/layout/GridLayout.d.ts +26 -0
  98. package/dist/components/layout/GridLayout.d.ts.map +1 -0
  99. package/dist/components/layout/LayoutContextProvider.d.ts +12 -0
  100. package/dist/components/layout/LayoutContextProvider.d.ts.map +1 -0
  101. package/dist/components/layout/index.d.ts +4 -0
  102. package/dist/components/layout/index.d.ts.map +1 -0
  103. package/dist/components/participant/AudioTrack.d.ts +33 -0
  104. package/dist/components/participant/AudioTrack.d.ts.map +1 -0
  105. package/dist/components/participant/AudioVisualizer.d.ts +22 -0
  106. package/dist/components/participant/AudioVisualizer.d.ts.map +1 -0
  107. package/dist/components/participant/BarVisualizer.d.ts +77 -0
  108. package/dist/components/participant/BarVisualizer.d.ts.map +1 -0
  109. package/dist/components/participant/ConnectionQualityIndicator.d.ts +16 -0
  110. package/dist/components/participant/ConnectionQualityIndicator.d.ts.map +1 -0
  111. package/dist/components/participant/ParticipantAudioTile.d.ts +14 -0
  112. package/dist/components/participant/ParticipantAudioTile.d.ts.map +1 -0
  113. package/dist/components/participant/ParticipantName.d.ts +17 -0
  114. package/dist/components/participant/ParticipantName.d.ts.map +1 -0
  115. package/dist/components/participant/ParticipantTile.d.ts +49 -0
  116. package/dist/components/participant/ParticipantTile.d.ts.map +1 -0
  117. package/dist/components/participant/TrackMutedIndicator.d.ts +19 -0
  118. package/dist/components/participant/TrackMutedIndicator.d.ts.map +1 -0
  119. package/dist/components/participant/VideoTrack.d.ts +23 -0
  120. package/dist/components/participant/VideoTrack.d.ts.map +1 -0
  121. package/dist/components/participant/animationSequences/connectingSequence.d.ts +2 -0
  122. package/dist/components/participant/animationSequences/connectingSequence.d.ts.map +1 -0
  123. package/dist/components/participant/animationSequences/listeningSequence.d.ts +2 -0
  124. package/dist/components/participant/animationSequences/listeningSequence.d.ts.map +1 -0
  125. package/dist/components/participant/animationSequences/thinkingSequence.d.ts +2 -0
  126. package/dist/components/participant/animationSequences/thinkingSequence.d.ts.map +1 -0
  127. package/dist/components/participant/animators/useBarAnimator.d.ts +3 -0
  128. package/dist/components/participant/animators/useBarAnimator.d.ts.map +1 -0
  129. package/dist/components-lNrIMTWQ.mjs +1051 -0
  130. package/dist/components-lNrIMTWQ.mjs.map +1 -0
  131. package/dist/context/chat-context.d.ts +23 -0
  132. package/dist/context/chat-context.d.ts.map +1 -0
  133. package/dist/context/feature-context.d.ts +14 -0
  134. package/dist/context/feature-context.d.ts.map +1 -0
  135. package/dist/context/index.d.ts +10 -0
  136. package/dist/context/index.d.ts.map +1 -0
  137. package/dist/context/layout-context.d.ts +32 -0
  138. package/dist/context/layout-context.d.ts.map +1 -0
  139. package/dist/context/participant-context.d.ts +22 -0
  140. package/dist/context/participant-context.d.ts.map +1 -0
  141. package/dist/context/pin-context.d.ts +17 -0
  142. package/dist/context/pin-context.d.ts.map +1 -0
  143. package/dist/context/room-context.d.ts +22 -0
  144. package/dist/context/room-context.d.ts.map +1 -0
  145. package/dist/context/session-context.d.ts +22 -0
  146. package/dist/context/session-context.d.ts.map +1 -0
  147. package/dist/context/track-reference-context.d.ts +25 -0
  148. package/dist/context/track-reference-context.d.ts.map +1 -0
  149. package/dist/contexts-D4V9wQRc.mjs +4026 -0
  150. package/dist/contexts-D4V9wQRc.mjs.map +1 -0
  151. package/dist/hooks/cloud/krisp/useKrispNoiseFilter.d.ts +42 -0
  152. package/dist/hooks/cloud/krisp/useKrispNoiseFilter.d.ts.map +1 -0
  153. package/dist/hooks/index.d.ts +54 -0
  154. package/dist/hooks/index.d.ts.map +1 -0
  155. package/dist/hooks/internal/index.d.ts +10 -0
  156. package/dist/hooks/internal/index.d.ts.map +1 -0
  157. package/dist/hooks/internal/useMediaQuery.d.ts +7 -0
  158. package/dist/hooks/internal/useMediaQuery.d.ts.map +1 -0
  159. package/dist/hooks/internal/useObservableState.d.ts +6 -0
  160. package/dist/hooks/internal/useObservableState.d.ts.map +1 -0
  161. package/dist/hooks/internal/useResizeObserver.d.ts +14 -0
  162. package/dist/hooks/internal/useResizeObserver.d.ts.map +1 -0
  163. package/dist/hooks/useAgent.d.ts +219 -0
  164. package/dist/hooks/useAgent.d.ts.map +1 -0
  165. package/dist/hooks/useAudioPlayback.d.ts +15 -0
  166. package/dist/hooks/useAudioPlayback.d.ts.map +1 -0
  167. package/dist/hooks/useChat.d.ts +43 -0
  168. package/dist/hooks/useChat.d.ts.map +1 -0
  169. package/dist/hooks/useChatToggle.d.ts +21 -0
  170. package/dist/hooks/useChatToggle.d.ts.map +1 -0
  171. package/dist/hooks/useClearPinButton.d.ts +15 -0
  172. package/dist/hooks/useClearPinButton.d.ts.map +1 -0
  173. package/dist/hooks/useConnectionQualityIndicator.d.ts +20 -0
  174. package/dist/hooks/useConnectionQualityIndicator.d.ts.map +1 -0
  175. package/dist/hooks/useConnectionStatus.d.ts +12 -0
  176. package/dist/hooks/useConnectionStatus.d.ts.map +1 -0
  177. package/dist/hooks/useDataChannel.d.ts +38 -0
  178. package/dist/hooks/useDataChannel.d.ts.map +1 -0
  179. package/dist/hooks/useDisconnectButton.d.ts +21 -0
  180. package/dist/hooks/useDisconnectButton.d.ts.map +1 -0
  181. package/dist/hooks/useEvents.d.ts +9 -0
  182. package/dist/hooks/useEvents.d.ts.map +1 -0
  183. package/dist/hooks/useFacingMode.d.ts +10 -0
  184. package/dist/hooks/useFacingMode.d.ts.map +1 -0
  185. package/dist/hooks/useFocusToggle.d.ts +26 -0
  186. package/dist/hooks/useFocusToggle.d.ts.map +1 -0
  187. package/dist/hooks/useGridLayout.d.ts +27 -0
  188. package/dist/hooks/useGridLayout.d.ts.map +1 -0
  189. package/dist/hooks/useIsEncrypted.d.ts +12 -0
  190. package/dist/hooks/useIsEncrypted.d.ts.map +1 -0
  191. package/dist/hooks/useIsMuted.d.ts +22 -0
  192. package/dist/hooks/useIsMuted.d.ts.map +1 -0
  193. package/dist/hooks/useIsRecording.d.ts +11 -0
  194. package/dist/hooks/useIsRecording.d.ts.map +1 -0
  195. package/dist/hooks/useIsSpeaking.d.ts +11 -0
  196. package/dist/hooks/useIsSpeaking.d.ts.map +1 -0
  197. package/dist/hooks/useLiveKitRoom.d.ts +19 -0
  198. package/dist/hooks/useLiveKitRoom.d.ts.map +1 -0
  199. package/dist/hooks/useLocalParticipant.d.ts +29 -0
  200. package/dist/hooks/useLocalParticipant.d.ts.map +1 -0
  201. package/dist/hooks/useLocalParticipantPermissions.d.ts +12 -0
  202. package/dist/hooks/useLocalParticipantPermissions.d.ts.map +1 -0
  203. package/dist/hooks/useMediaDeviceSelect.d.ts +41 -0
  204. package/dist/hooks/useMediaDeviceSelect.d.ts.map +1 -0
  205. package/dist/hooks/useMediaDevices.d.ts +15 -0
  206. package/dist/hooks/useMediaDevices.d.ts.map +1 -0
  207. package/dist/hooks/useMediaTrackBySourceOrName.d.ts +18 -0
  208. package/dist/hooks/useMediaTrackBySourceOrName.d.ts.map +1 -0
  209. package/dist/hooks/usePagination.d.ts +24 -0
  210. package/dist/hooks/usePagination.d.ts.map +1 -0
  211. package/dist/hooks/useParticipantAttributes.d.ts +30 -0
  212. package/dist/hooks/useParticipantAttributes.d.ts.map +1 -0
  213. package/dist/hooks/useParticipantInfo.d.ts +21 -0
  214. package/dist/hooks/useParticipantInfo.d.ts.map +1 -0
  215. package/dist/hooks/useParticipantPermissions.d.ts +17 -0
  216. package/dist/hooks/useParticipantPermissions.d.ts.map +1 -0
  217. package/dist/hooks/useParticipantTile.d.ts +22 -0
  218. package/dist/hooks/useParticipantTile.d.ts.map +1 -0
  219. package/dist/hooks/useParticipantTracks.d.ts +14 -0
  220. package/dist/hooks/useParticipantTracks.d.ts.map +1 -0
  221. package/dist/hooks/useParticipants.d.ts +30 -0
  222. package/dist/hooks/useParticipants.d.ts.map +1 -0
  223. package/dist/hooks/usePersistentUserChoices.d.ts +35 -0
  224. package/dist/hooks/usePersistentUserChoices.d.ts.map +1 -0
  225. package/dist/hooks/usePinnedTracks.d.ts +14 -0
  226. package/dist/hooks/usePinnedTracks.d.ts.map +1 -0
  227. package/dist/hooks/useRemoteParticipant.d.ts +35 -0
  228. package/dist/hooks/useRemoteParticipant.d.ts.map +1 -0
  229. package/dist/hooks/useRemoteParticipants.d.ts +30 -0
  230. package/dist/hooks/useRemoteParticipants.d.ts.map +1 -0
  231. package/dist/hooks/useRoomInfo.d.ts +21 -0
  232. package/dist/hooks/useRoomInfo.d.ts.map +1 -0
  233. package/dist/hooks/useSequentialRoomConnectDisconnect.d.ts +27 -0
  234. package/dist/hooks/useSequentialRoomConnectDisconnect.d.ts.map +1 -0
  235. package/dist/hooks/useSession.d.ts +130 -0
  236. package/dist/hooks/useSession.d.ts.map +1 -0
  237. package/dist/hooks/useSessionMessages.d.ts +29 -0
  238. package/dist/hooks/useSessionMessages.d.ts.map +1 -0
  239. package/dist/hooks/useSettingsToggle.d.ts +20 -0
  240. package/dist/hooks/useSettingsToggle.d.ts.map +1 -0
  241. package/dist/hooks/useSortedParticipants.d.ts +7 -0
  242. package/dist/hooks/useSortedParticipants.d.ts.map +1 -0
  243. package/dist/hooks/useSpeakingParticipants.d.ts +16 -0
  244. package/dist/hooks/useSpeakingParticipants.d.ts.map +1 -0
  245. package/dist/hooks/useStartAudio.d.ts +27 -0
  246. package/dist/hooks/useStartAudio.d.ts.map +1 -0
  247. package/dist/hooks/useStartVideo.d.ts +26 -0
  248. package/dist/hooks/useStartVideo.d.ts.map +1 -0
  249. package/dist/hooks/useSwipe.d.ts +24 -0
  250. package/dist/hooks/useSwipe.d.ts.map +1 -0
  251. package/dist/hooks/useTextStream.d.ts +20 -0
  252. package/dist/hooks/useTextStream.d.ts.map +1 -0
  253. package/dist/hooks/useToken.d.ts +20 -0
  254. package/dist/hooks/useToken.d.ts.map +1 -0
  255. package/dist/hooks/useTrack.d.ts +4 -0
  256. package/dist/hooks/useTrack.d.ts.map +1 -0
  257. package/dist/hooks/useTrackByName.d.ts +10 -0
  258. package/dist/hooks/useTrackByName.d.ts.map +1 -0
  259. package/dist/hooks/useTrackMutedIndicator.d.ts +18 -0
  260. package/dist/hooks/useTrackMutedIndicator.d.ts.map +1 -0
  261. package/dist/hooks/useTrackRefBySourceOrName.d.ts +7 -0
  262. package/dist/hooks/useTrackRefBySourceOrName.d.ts.map +1 -0
  263. package/dist/hooks/useTrackSyncTime.d.ts +10 -0
  264. package/dist/hooks/useTrackSyncTime.d.ts.map +1 -0
  265. package/dist/hooks/useTrackToggle.d.ts +27 -0
  266. package/dist/hooks/useTrackToggle.d.ts.map +1 -0
  267. package/dist/hooks/useTrackTranscription.d.ts +26 -0
  268. package/dist/hooks/useTrackTranscription.d.ts.map +1 -0
  269. package/dist/hooks/useTrackVolume.d.ts +49 -0
  270. package/dist/hooks/useTrackVolume.d.ts.map +1 -0
  271. package/dist/hooks/useTracks.d.ts +29 -0
  272. package/dist/hooks/useTracks.d.ts.map +1 -0
  273. package/dist/hooks/useTranscriptions.d.ts +21 -0
  274. package/dist/hooks/useTranscriptions.d.ts.map +1 -0
  275. package/dist/hooks/useVisualStableUpdate.d.ts +27 -0
  276. package/dist/hooks/useVisualStableUpdate.d.ts.map +1 -0
  277. package/dist/hooks/useVoiceAssistant.d.ts +43 -0
  278. package/dist/hooks/useVoiceAssistant.d.ts.map +1 -0
  279. package/dist/hooks/useWarnAboutMissingStyles.d.ts +5 -0
  280. package/dist/hooks/useWarnAboutMissingStyles.d.ts.map +1 -0
  281. package/dist/hooks-hQJmeINB.mjs +1992 -0
  282. package/dist/hooks-hQJmeINB.mjs.map +1 -0
  283. package/dist/hooks.d.ts +2 -0
  284. package/dist/hooks.js +2 -0
  285. package/dist/hooks.js.map +1 -0
  286. package/dist/hooks.mjs +64 -0
  287. package/dist/hooks.mjs.map +1 -0
  288. package/dist/index.d.ts +9 -0
  289. package/dist/index.d.ts.map +1 -0
  290. package/dist/index.docs.d.ts +6 -0
  291. package/dist/index.docs.d.ts.map +1 -0
  292. package/dist/index.js +2 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/index.mjs +157 -0
  295. package/dist/index.mjs.map +1 -0
  296. package/dist/krisp.d.ts +2 -0
  297. package/dist/krisp.js +2 -0
  298. package/dist/krisp.js.map +1 -0
  299. package/dist/krisp.mjs +45 -0
  300. package/dist/krisp.mjs.map +1 -0
  301. package/dist/mergeProps.d.ts +25 -0
  302. package/dist/mergeProps.d.ts.map +1 -0
  303. package/dist/prefabs/AudioConference.d.ts +22 -0
  304. package/dist/prefabs/AudioConference.d.ts.map +1 -0
  305. package/dist/prefabs/Chat.d.ts +35 -0
  306. package/dist/prefabs/Chat.d.ts.map +1 -0
  307. package/dist/prefabs/ControlBar.d.ts +45 -0
  308. package/dist/prefabs/ControlBar.d.ts.map +1 -0
  309. package/dist/prefabs/MediaDeviceMenu.d.ts +36 -0
  310. package/dist/prefabs/MediaDeviceMenu.d.ts.map +1 -0
  311. package/dist/prefabs/PreJoin.d.ts +59 -0
  312. package/dist/prefabs/PreJoin.d.ts.map +1 -0
  313. package/dist/prefabs/VideoConference.d.ts +35 -0
  314. package/dist/prefabs/VideoConference.d.ts.map +1 -0
  315. package/dist/prefabs/VoiceAssistantControlBar.d.ts +32 -0
  316. package/dist/prefabs/VoiceAssistantControlBar.d.ts.map +1 -0
  317. package/dist/prefabs/index.d.ts +8 -0
  318. package/dist/prefabs/index.d.ts.map +1 -0
  319. package/dist/prefabs.d.ts +2 -0
  320. package/dist/prefabs.js +2 -0
  321. package/dist/prefabs.js.map +1 -0
  322. package/dist/prefabs.mjs +579 -0
  323. package/dist/prefabs.mjs.map +1 -0
  324. package/dist/room-BP3SCCCd.mjs +191 -0
  325. package/dist/room-BP3SCCCd.mjs.map +1 -0
  326. package/dist/shared-88J2fzv7.js +2 -0
  327. package/dist/shared-88J2fzv7.js.map +1 -0
  328. package/dist/shared-BDr0qLg4.js +4 -0
  329. package/dist/shared-BDr0qLg4.js.map +1 -0
  330. package/dist/shared-CjI_UuOX.js +2 -0
  331. package/dist/shared-CjI_UuOX.js.map +1 -0
  332. package/dist/shared-DTHOl3uJ.js +2 -0
  333. package/dist/shared-DTHOl3uJ.js.map +1 -0
  334. package/dist/utils.d.ts +19 -0
  335. package/dist/utils.d.ts.map +1 -0
  336. package/package.json +104 -0
  337. package/src/assets/icons/CameraDisabledIcon.tsx +15 -0
  338. package/src/assets/icons/CameraIcon.tsx +14 -0
  339. package/src/assets/icons/ChatCloseIcon.tsx +17 -0
  340. package/src/assets/icons/ChatIcon.tsx +25 -0
  341. package/src/assets/icons/Chevron.tsx +19 -0
  342. package/src/assets/icons/FocusToggleIcon.tsx +16 -0
  343. package/src/assets/icons/GearIcon.tsx +19 -0
  344. package/src/assets/icons/LeaveIcon.tsx +25 -0
  345. package/src/assets/icons/LockLockedIcon.tsx +19 -0
  346. package/src/assets/icons/MicDisabledIcon.tsx +15 -0
  347. package/src/assets/icons/MicIcon.tsx +19 -0
  348. package/src/assets/icons/QualityExcellentIcon.tsx +15 -0
  349. package/src/assets/icons/QualityGoodIcon.tsx +19 -0
  350. package/src/assets/icons/QualityPoorIcon.tsx +20 -0
  351. package/src/assets/icons/QualityUnknownIcon.tsx +17 -0
  352. package/src/assets/icons/ScreenShareIcon.tsx +25 -0
  353. package/src/assets/icons/ScreenShareStopIcon.tsx +21 -0
  354. package/src/assets/icons/SpinnerIcon.tsx +93 -0
  355. package/src/assets/icons/UnfocusToggleIcon.tsx +16 -0
  356. package/src/assets/icons/index.ts +19 -0
  357. package/src/assets/icons/util.tsx +47 -0
  358. package/src/assets/images/ParticipantPlaceholder.tsx +31 -0
  359. package/src/assets/images/index.ts +1 -0
  360. package/src/assets/template.js +21 -0
  361. package/src/components/ChatEntry.tsx +112 -0
  362. package/src/components/ConnectionState.tsx +36 -0
  363. package/src/components/ConnectionStateToast.tsx +47 -0
  364. package/src/components/LiveKitRoom.tsx +122 -0
  365. package/src/components/ParticipantLoop.tsx +41 -0
  366. package/src/components/RoomAudioRenderer.tsx +57 -0
  367. package/src/components/RoomName.tsx +36 -0
  368. package/src/components/SessionProvider.tsx +22 -0
  369. package/src/components/Toast.tsx +18 -0
  370. package/src/components/TrackLoop.tsx +45 -0
  371. package/src/components/controls/ChatToggle.tsx +32 -0
  372. package/src/components/controls/ClearPinButton.tsx +32 -0
  373. package/src/components/controls/DisconnectButton.tsx +32 -0
  374. package/src/components/controls/FocusToggle.tsx +54 -0
  375. package/src/components/controls/MediaDeviceSelect.tsx +144 -0
  376. package/src/components/controls/PaginationControl.tsx +51 -0
  377. package/src/components/controls/PaginationIndicator.tsx +26 -0
  378. package/src/components/controls/SettingsMenuToggle.tsx +26 -0
  379. package/src/components/controls/StartAudio.tsx +40 -0
  380. package/src/components/controls/StartMediaButton.tsx +41 -0
  381. package/src/components/controls/TrackToggle.tsx +54 -0
  382. package/src/components/index.ts +34 -0
  383. package/src/components/layout/CarouselLayout.tsx +80 -0
  384. package/src/components/layout/FocusLayout.tsx +37 -0
  385. package/src/components/layout/GridLayout.tsx +63 -0
  386. package/src/components/layout/LayoutContextProvider.tsx +36 -0
  387. package/src/components/layout/index.ts +3 -0
  388. package/src/components/participant/AudioTrack.tsx +89 -0
  389. package/src/components/participant/AudioVisualizer.tsx +67 -0
  390. package/src/components/participant/BarVisualizer.tsx +164 -0
  391. package/src/components/participant/ConnectionQualityIndicator.tsx +36 -0
  392. package/src/components/participant/ParticipantAudioTile.tsx +67 -0
  393. package/src/components/participant/ParticipantName.tsx +50 -0
  394. package/src/components/participant/ParticipantTile.tsx +192 -0
  395. package/src/components/participant/TrackMutedIndicator.tsx +53 -0
  396. package/src/components/participant/VideoTrack.tsx +92 -0
  397. package/src/components/participant/animationSequences/connectingSequence.ts +9 -0
  398. package/src/components/participant/animationSequences/listeningSequence.ts +6 -0
  399. package/src/components/participant/animationSequences/thinkingSequence.ts +12 -0
  400. package/src/components/participant/animators/useBarAnimator.ts +55 -0
  401. package/src/context/chat-context.ts +37 -0
  402. package/src/context/feature-context.ts +28 -0
  403. package/src/context/index.ts +27 -0
  404. package/src/context/layout-context.ts +72 -0
  405. package/src/context/participant-context.ts +44 -0
  406. package/src/context/pin-context.ts +27 -0
  407. package/src/context/room-context.ts +42 -0
  408. package/src/context/session-context.ts +43 -0
  409. package/src/context/track-reference-context.ts +47 -0
  410. package/src/hooks/cloud/krisp/useKrispNoiseFilter.ts +110 -0
  411. package/src/hooks/index.ts +72 -0
  412. package/src/hooks/internal/index.ts +10 -0
  413. package/src/hooks/internal/useMediaQuery.ts +46 -0
  414. package/src/hooks/internal/useObservableState.ts +24 -0
  415. package/src/hooks/internal/useResizeObserver.ts +124 -0
  416. package/src/hooks/useAgent.ts +945 -0
  417. package/src/hooks/useAudioPlayback.ts +34 -0
  418. package/src/hooks/useChat.ts +57 -0
  419. package/src/hooks/useChatToggle.ts +38 -0
  420. package/src/hooks/useClearPinButton.ts +29 -0
  421. package/src/hooks/useConnectionQualityIndicator.ts +33 -0
  422. package/src/hooks/useConnectionStatus.ts +22 -0
  423. package/src/hooks/useDataChannel.ts +73 -0
  424. package/src/hooks/useDisconnectButton.ts +36 -0
  425. package/src/hooks/useEvents.ts +39 -0
  426. package/src/hooks/useFacingMode.ts +22 -0
  427. package/src/hooks/useFocusToggle.ts +59 -0
  428. package/src/hooks/useGridLayout.ts +44 -0
  429. package/src/hooks/useIsEncrypted.ts +29 -0
  430. package/src/hooks/useIsMuted.ts +51 -0
  431. package/src/hooks/useIsRecording.ts +23 -0
  432. package/src/hooks/useIsSpeaking.ts +21 -0
  433. package/src/hooks/useLiveKitRoom.ts +186 -0
  434. package/src/hooks/useLocalParticipant.ts +73 -0
  435. package/src/hooks/useLocalParticipantPermissions.ts +24 -0
  436. package/src/hooks/useMediaDeviceSelect.ts +81 -0
  437. package/src/hooks/useMediaDevices.ts +28 -0
  438. package/src/hooks/useMediaTrackBySourceOrName.ts +97 -0
  439. package/src/hooks/usePagination.test.ts +77 -0
  440. package/src/hooks/usePagination.ts +67 -0
  441. package/src/hooks/useParticipantAttributes.ts +69 -0
  442. package/src/hooks/useParticipantInfo.ts +35 -0
  443. package/src/hooks/useParticipantPermissions.ts +29 -0
  444. package/src/hooks/useParticipantTile.ts +81 -0
  445. package/src/hooks/useParticipantTracks.ts +54 -0
  446. package/src/hooks/useParticipants.ts +42 -0
  447. package/src/hooks/usePersistentUserChoices.ts +64 -0
  448. package/src/hooks/usePinnedTracks.ts +24 -0
  449. package/src/hooks/useRemoteParticipant.ts +79 -0
  450. package/src/hooks/useRemoteParticipants.ts +45 -0
  451. package/src/hooks/useRoomInfo.ts +32 -0
  452. package/src/hooks/useSequentialRoomConnectDisconnect.ts +171 -0
  453. package/src/hooks/useSession.ts +642 -0
  454. package/src/hooks/useSessionMessages.ts +158 -0
  455. package/src/hooks/useSettingsToggle.ts +32 -0
  456. package/src/hooks/useSortedParticipants.ts +20 -0
  457. package/src/hooks/useSpeakingParticipants.ts +27 -0
  458. package/src/hooks/useStartAudio.ts +50 -0
  459. package/src/hooks/useStartVideo.ts +49 -0
  460. package/src/hooks/useSwipe.ts +68 -0
  461. package/src/hooks/useTextStream.ts +35 -0
  462. package/src/hooks/useToken.ts +54 -0
  463. package/src/hooks/useTrack.ts +11 -0
  464. package/src/hooks/useTrackByName.ts +15 -0
  465. package/src/hooks/useTrackMutedIndicator.ts +44 -0
  466. package/src/hooks/useTrackRefBySourceOrName.ts +30 -0
  467. package/src/hooks/useTrackSyncTime.ts +18 -0
  468. package/src/hooks/useTrackToggle.ts +93 -0
  469. package/src/hooks/useTrackTranscription.ts +75 -0
  470. package/src/hooks/useTrackVolume.ts +283 -0
  471. package/src/hooks/useTracks.test.ts +60 -0
  472. package/src/hooks/useTracks.ts +154 -0
  473. package/src/hooks/useTranscriptions.ts +48 -0
  474. package/src/hooks/useVisualStableUpdate.ts +63 -0
  475. package/src/hooks/useVoiceAssistant.ts +109 -0
  476. package/src/hooks/useWarnAboutMissingStyles.ts +11 -0
  477. package/src/index.docs.ts +12 -0
  478. package/src/index.ts +32 -0
  479. package/src/mergeProps.ts +87 -0
  480. package/src/prefabs/AudioConference.tsx +57 -0
  481. package/src/prefabs/Chat.tsx +153 -0
  482. package/src/prefabs/ControlBar.tsx +227 -0
  483. package/src/prefabs/MediaDeviceMenu.tsx +159 -0
  484. package/src/prefabs/PreJoin.tsx +439 -0
  485. package/src/prefabs/VideoConference.tsx +184 -0
  486. package/src/prefabs/VoiceAssistantControlBar.tsx +109 -0
  487. package/src/prefabs/index.ts +11 -0
  488. package/src/utils.ts +78 -0
@@ -0,0 +1,69 @@
1
+ import { participantAttributesObserver } from '@livekit/components-core';
2
+ import type { Participant } from 'livekit-client';
3
+ import * as React from 'react';
4
+ import { useEnsureParticipant, useMaybeParticipantContext } from '../context';
5
+ import { useObservableState } from './internal';
6
+
7
+ /**
8
+ * The `useParticipantAttributes` hook returns the attributes of a given participant and allows to set them.
9
+ * It requires a `Participant` object passed as property or via the `ParticipantContext`.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { attributes } = useParticipantAttributes({ participant });
14
+ * ```
15
+ * @public
16
+ */
17
+ export interface UseParticipantAttributesOptions {
18
+ participant?: Participant;
19
+ }
20
+
21
+ /** @public */
22
+ export function useParticipantAttributes(props: UseParticipantAttributesOptions = {}) {
23
+ const participantContext = useMaybeParticipantContext();
24
+ const p = props.participant ?? participantContext;
25
+ const attributeObserver = React.useMemo(
26
+ // weird typescript constraint
27
+ () => (p ? participantAttributesObserver(p) : participantAttributesObserver(p)),
28
+ [p],
29
+ );
30
+ const attributeState = useObservableState(attributeObserver, {
31
+ attributes: p?.attributes,
32
+ });
33
+
34
+ return attributeState;
35
+ }
36
+
37
+ /**
38
+ * The `useParticipantAttribute` hook returns the latest value of a given attribute key of a participant.
39
+ * It requires a `Participant` object passed as property in the `UseParticipantAttributesOptions` or via the `ParticipantContext`.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * const myAttributeValue = useParticipantAttribute('targetAttributeName');
44
+ * ```
45
+ * @public
46
+ */
47
+ export function useParticipantAttribute(
48
+ attributeKey: string,
49
+ options: UseParticipantAttributesOptions = {},
50
+ ) {
51
+ const p = useEnsureParticipant(options.participant);
52
+ const [attribute, setAttribute] = React.useState(p.attributes[attributeKey]);
53
+
54
+ React.useEffect(() => {
55
+ if (!p) {
56
+ return;
57
+ }
58
+ const subscription = participantAttributesObserver(p).subscribe((val) => {
59
+ if (val.changed[attributeKey] !== undefined) {
60
+ setAttribute(val.attributes[attributeKey]);
61
+ }
62
+ });
63
+ return () => {
64
+ subscription.unsubscribe();
65
+ };
66
+ }, [p, attributeKey]);
67
+
68
+ return attribute;
69
+ }
@@ -0,0 +1,35 @@
1
+ import { participantInfoObserver } from '@livekit/components-core';
2
+ import type { Participant } from 'livekit-client';
3
+ import * as React from 'react';
4
+ import { useMaybeParticipantContext } from '../context';
5
+ import { useObservableState } from './internal';
6
+
7
+ /**
8
+ * The `useParticipantInfo` hook returns the identity, name, and metadata of a given participant.
9
+ * It requires a `Participant` object passed as property or via the `ParticipantContext`.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { identity, name, metadata } = useParticipantInfo({ participant });
14
+ * ```
15
+ * @public
16
+ */
17
+ export interface UseParticipantInfoOptions {
18
+ participant?: Participant;
19
+ }
20
+
21
+ /** @public */
22
+ export function useParticipantInfo(props: UseParticipantInfoOptions = {}) {
23
+ let p = useMaybeParticipantContext();
24
+ if (props.participant) {
25
+ p = props.participant;
26
+ }
27
+ const infoObserver = React.useMemo(() => participantInfoObserver(p), [p]);
28
+ const { identity, name, metadata } = useObservableState(infoObserver, {
29
+ name: p?.name,
30
+ identity: p?.identity,
31
+ metadata: p?.metadata,
32
+ });
33
+
34
+ return { identity, name, metadata };
35
+ }
@@ -0,0 +1,29 @@
1
+ import { participantPermissionObserver } from '@livekit/components-core';
2
+ import type { ParticipantPermission } from '@livekit/protocol';
3
+ import type { Participant } from 'livekit-client';
4
+ import * as React from 'react';
5
+ import { useEnsureParticipant } from '../context';
6
+ import { useObservableState } from './internal/useObservableState';
7
+
8
+ /**
9
+ * The `useParticipantPermissions` hook returns the permissions of a given participant.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const permissions = useParticipantPermissions({ participant });
14
+ * ```
15
+ * @public
16
+ */
17
+ export interface UseParticipantPermissionsOptions {
18
+ participant?: Participant;
19
+ }
20
+
21
+ /** @public */
22
+ export function useParticipantPermissions(
23
+ options: UseParticipantPermissionsOptions = {},
24
+ ): ParticipantPermission | undefined {
25
+ const p = useEnsureParticipant(options.participant);
26
+ const permissionObserver = React.useMemo(() => participantPermissionObserver(p), [p]);
27
+ const permissions = useObservableState(permissionObserver, p.permissions);
28
+ return permissions;
29
+ }
@@ -0,0 +1,81 @@
1
+ import type { ParticipantClickEvent, TrackReferenceOrPlaceholder } from '@livekit/components-core';
2
+ import { setupParticipantTile } from '@livekit/components-core';
3
+ import * as React from 'react';
4
+ import { useEnsureTrackRef } from '../context';
5
+ import { mergeProps } from '../mergeProps';
6
+ import { useFacingMode } from './useFacingMode';
7
+ import { useIsMuted } from './useIsMuted';
8
+ import { useIsSpeaking } from './useIsSpeaking';
9
+ import { Track } from 'livekit-client';
10
+
11
+ /** @public */
12
+ export interface UseParticipantTileProps<T extends HTMLElement> extends React.HTMLAttributes<T> {
13
+ /** The track reference to display. */
14
+ trackRef?: TrackReferenceOrPlaceholder;
15
+ disableSpeakingIndicator?: boolean;
16
+ onParticipantClick?: (event: ParticipantClickEvent) => void;
17
+ htmlProps: React.HTMLAttributes<T>;
18
+ }
19
+
20
+ /**
21
+ * The `useParticipantTile` hook is used to implement the `ParticipantTile` and returns the props needed to render the tile.
22
+ * @remarks
23
+ * The returned props include many data attributes that are useful for CSS styling purposes because they
24
+ * indicate the state of the participant and the track.
25
+ * For example: `data-lk-audio-muted`, `data-lk-video-muted`, `data-lk-speaking`, `data-lk-local-participant`, `data-lk-source`, `data-lk-facing-mode`.
26
+ * @public
27
+ */
28
+ export function useParticipantTile<T extends HTMLElement>({
29
+ trackRef,
30
+ onParticipantClick,
31
+ disableSpeakingIndicator,
32
+ htmlProps,
33
+ }: UseParticipantTileProps<T>) {
34
+ const trackReference = useEnsureTrackRef(trackRef);
35
+
36
+ const mergedProps = React.useMemo(() => {
37
+ const { className } = setupParticipantTile();
38
+ return mergeProps(htmlProps, {
39
+ className,
40
+ onClick: (event: React.MouseEvent<T, MouseEvent>) => {
41
+ htmlProps.onClick?.(event);
42
+ if (typeof onParticipantClick === 'function') {
43
+ const track =
44
+ trackReference.publication ??
45
+ trackReference.participant.getTrackPublication(trackReference.source);
46
+ onParticipantClick({ participant: trackReference.participant, track });
47
+ }
48
+ },
49
+ });
50
+ }, [
51
+ htmlProps,
52
+ onParticipantClick,
53
+ trackReference.publication,
54
+ trackReference.source,
55
+ trackReference.participant,
56
+ ]);
57
+
58
+ const micTrack = trackReference.participant.getTrackPublication(Track.Source.Microphone);
59
+ const micRef = React.useMemo(() => {
60
+ return {
61
+ participant: trackReference.participant,
62
+ source: Track.Source.Microphone,
63
+ publication: micTrack,
64
+ };
65
+ }, [micTrack, trackReference.participant]);
66
+ const isVideoMuted = useIsMuted(trackReference);
67
+ const isAudioMuted = useIsMuted(micRef);
68
+ const isSpeaking = useIsSpeaking(trackReference.participant);
69
+ const facingMode = useFacingMode(trackReference);
70
+ return {
71
+ elementProps: {
72
+ 'data-lk-audio-muted': isAudioMuted,
73
+ 'data-lk-video-muted': isVideoMuted,
74
+ 'data-lk-speaking': disableSpeakingIndicator === true ? false : isSpeaking,
75
+ 'data-lk-local-participant': trackReference.participant.isLocal,
76
+ 'data-lk-source': trackReference.source,
77
+ 'data-lk-facing-mode': facingMode,
78
+ ...mergedProps,
79
+ } as React.HTMLAttributes<T>,
80
+ };
81
+ }
@@ -0,0 +1,54 @@
1
+ import * as React from 'react';
2
+ import type { TrackReference } from '@livekit/components-core';
3
+ import { participantTracksObservable } from '@livekit/components-core';
4
+ import { useObservableState } from './internal';
5
+ import type { Room, Track } from 'livekit-client';
6
+ import { useMaybeParticipantContext } from '../context';
7
+ import { useParticipants } from './useParticipants';
8
+
9
+ type UseParticipantTracksOptions = {
10
+ participantIdentity?: string;
11
+ room?: Room;
12
+ };
13
+
14
+ /**
15
+ * `useParticipantTracks` is a custom React that allows you to get tracks of a specific participant only, by specifiying the participant's identity.
16
+ * If the participant identity is not passed the hook will try to get the participant from a participant context.
17
+ * @public
18
+ */
19
+ export function useParticipantTracks<TrackSource extends Track.Source>(
20
+ sources: Array<TrackSource>,
21
+ optionsOrParticipantIdentity:
22
+ | UseParticipantTracksOptions
23
+ | UseParticipantTracksOptions['participantIdentity'] = {},
24
+ ): Array<TrackReference> {
25
+ let participantIdentity: UseParticipantTracksOptions['participantIdentity'];
26
+ let room: UseParticipantTracksOptions['room'];
27
+ if (typeof optionsOrParticipantIdentity === 'string') {
28
+ participantIdentity = optionsOrParticipantIdentity;
29
+ } else {
30
+ participantIdentity = optionsOrParticipantIdentity?.participantIdentity;
31
+ room = optionsOrParticipantIdentity?.room;
32
+ }
33
+
34
+ const participantContext = useMaybeParticipantContext();
35
+ const participants = useParticipants({ room, updateOnlyOn: [] });
36
+
37
+ const p = React.useMemo(() => {
38
+ if (participantIdentity) {
39
+ return participants.find((p) => p.identity === participantIdentity);
40
+ }
41
+ return participantContext;
42
+ }, [participantIdentity, participants, participantContext]);
43
+
44
+ const observable = React.useMemo(() => {
45
+ if (!p) {
46
+ return undefined;
47
+ }
48
+ return participantTracksObservable(p, { sources });
49
+ }, [p, JSON.stringify(sources)]);
50
+
51
+ const trackRefs = useObservableState(observable, [] as Array<TrackReference>);
52
+
53
+ return trackRefs;
54
+ }
@@ -0,0 +1,42 @@
1
+ import type { Room, RoomEvent } from 'livekit-client';
2
+ import { useLocalParticipant } from './useLocalParticipant';
3
+ import { useRemoteParticipants } from './useRemoteParticipants';
4
+ import * as React from 'react';
5
+
6
+ /** @public */
7
+ export interface UseParticipantsOptions {
8
+ /**
9
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what RoomEvents the hook updates.
10
+ * By default it updates on all relevant RoomEvents to keep the returned participants array up to date.
11
+ * The minimal set of non-overwriteable `RoomEvents` is: `[RoomEvent.ParticipantConnected, RoomEvent.ParticipantDisconnected, RoomEvent.ConnectionStateChanged]`
12
+ */
13
+ updateOnlyOn?: RoomEvent[];
14
+ /**
15
+ * The room to use. If not provided, the hook will use the room from the context.
16
+ */
17
+ room?: Room;
18
+ }
19
+
20
+ /**
21
+ * The `useParticipants` hook returns all participants (local and remote) of the current room.
22
+ * @remarks
23
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what `RoomEvents` the hook updates.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const participants = useParticipants();
28
+ * <ParticipantLoop participants={participants}>
29
+ * <ParticipantName />
30
+ * </ParticipantLoop>
31
+ * ```
32
+ * @public
33
+ */
34
+ export function useParticipants(options: UseParticipantsOptions = {}) {
35
+ const remoteParticipants = useRemoteParticipants(options);
36
+ const { localParticipant } = useLocalParticipant(options);
37
+
38
+ return React.useMemo(
39
+ () => [localParticipant, ...remoteParticipants],
40
+ [localParticipant, remoteParticipants],
41
+ );
42
+ }
@@ -0,0 +1,64 @@
1
+ import type { LocalUserChoices } from '@livekit/components-core';
2
+ import { loadUserChoices, saveUserChoices } from '@livekit/components-core';
3
+ import * as React from 'react';
4
+
5
+ /**
6
+ * Options for the `usePersistentDeviceSettings` hook.
7
+ * @alpha
8
+ */
9
+ export interface UsePersistentUserChoicesOptions {
10
+ /**
11
+ * The default value to use if reading from local storage returns no results or fails.
12
+ */
13
+ defaults?: Partial<LocalUserChoices>;
14
+ /**
15
+ * Whether to prevent saving to persistent storage.
16
+ * @defaultValue false
17
+ */
18
+ preventSave?: boolean;
19
+ /**
20
+ * Whether to prevent loading user choices from persistent storage and use `defaults` instead.
21
+ * @defaultValue false
22
+ */
23
+ preventLoad?: boolean;
24
+ }
25
+
26
+ /**
27
+ * A hook that provides access to user choices stored in local storage, such as
28
+ * selected media devices and their current state (on or off), as well as the user name.
29
+ * @alpha
30
+ */
31
+ export function usePersistentUserChoices(options: UsePersistentUserChoicesOptions = {}) {
32
+ const [userChoices, setSettings] = React.useState<LocalUserChoices>(
33
+ loadUserChoices(options.defaults, options.preventLoad ?? false),
34
+ );
35
+
36
+ const saveAudioInputEnabled = React.useCallback((isEnabled: boolean) => {
37
+ setSettings((prev) => ({ ...prev, audioEnabled: isEnabled }));
38
+ }, []);
39
+ const saveVideoInputEnabled = React.useCallback((isEnabled: boolean) => {
40
+ setSettings((prev) => ({ ...prev, videoEnabled: isEnabled }));
41
+ }, []);
42
+ const saveAudioInputDeviceId = React.useCallback((deviceId: string) => {
43
+ setSettings((prev) => ({ ...prev, audioDeviceId: deviceId }));
44
+ }, []);
45
+ const saveVideoInputDeviceId = React.useCallback((deviceId: string) => {
46
+ setSettings((prev) => ({ ...prev, videoDeviceId: deviceId }));
47
+ }, []);
48
+ const saveUsername = React.useCallback((username: string) => {
49
+ setSettings((prev) => ({ ...prev, username: username }));
50
+ }, []);
51
+
52
+ React.useEffect(() => {
53
+ saveUserChoices(userChoices, options.preventSave ?? false);
54
+ }, [userChoices, options.preventSave]);
55
+
56
+ return {
57
+ userChoices,
58
+ saveAudioInputEnabled,
59
+ saveVideoInputEnabled,
60
+ saveAudioInputDeviceId,
61
+ saveVideoInputDeviceId,
62
+ saveUsername,
63
+ };
64
+ }
@@ -0,0 +1,24 @@
1
+ import type { TrackReferenceOrPlaceholder } from '@livekit/components-core';
2
+ import * as React from 'react';
3
+ import type { LayoutContextType } from '../context';
4
+ import { useEnsureLayoutContext } from '../context';
5
+
6
+ /**
7
+ * The `usePinnedTracks` hook returns a array of the pinned tracks of the current room.
8
+ * @remarks
9
+ * To function properly, this hook must be called within a `LayoutContext`.
10
+ * @example
11
+ * ```tsx
12
+ * const pinnedTracks = usePinnedTracks();
13
+ * ```
14
+ * @public
15
+ */
16
+ export function usePinnedTracks(layoutContext?: LayoutContextType): TrackReferenceOrPlaceholder[] {
17
+ layoutContext = useEnsureLayoutContext(layoutContext);
18
+ return React.useMemo(() => {
19
+ if (layoutContext?.pin.state !== undefined && layoutContext.pin.state.length >= 1) {
20
+ return layoutContext.pin.state;
21
+ }
22
+ return [];
23
+ }, [layoutContext.pin.state]);
24
+ }
@@ -0,0 +1,79 @@
1
+ import {
2
+ type ParticipantIdentifier,
3
+ connectedParticipantObserver,
4
+ participantByIdentifierObserver,
5
+ } from '@livekit/components-core';
6
+ import type { ParticipantEvent, RemoteParticipant } from 'livekit-client';
7
+ import * as React from 'react';
8
+ import { useRoomContext } from '../context';
9
+
10
+ /** @public */
11
+ export interface UseRemoteParticipantOptions {
12
+ /**
13
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what `ParticipantEvents` the hook updates.
14
+ * By default it updates on all relevant ParticipantEvents to keep the returned participant up to date.
15
+ */
16
+ updateOnlyOn?: ParticipantEvent[];
17
+ }
18
+
19
+ /**
20
+ * The `useRemoteParticipant` hook returns the first RemoteParticipant by either identity and/or based on the participant kind.
21
+ * @remarks
22
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what `ParticipantEvents` the hook updates.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const participant = useRemoteParticipant({kind: ParticipantKind.Agent, identity: 'myAgent'});
27
+ * ```
28
+ * @public
29
+ */
30
+ export function useRemoteParticipant(
31
+ identifier: ParticipantIdentifier,
32
+ options?: UseRemoteParticipantOptions,
33
+ ): RemoteParticipant | undefined;
34
+ /**
35
+ * The `useRemoteParticipant` hook returns the first RemoteParticipant by either identity or based on the participant kind.
36
+ * @remarks
37
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what `ParticipantEvents` the hook updates.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * const participant = useRemoteParticipant('Russ');
42
+ * ```
43
+ * @public
44
+ */
45
+ export function useRemoteParticipant(
46
+ identity: string,
47
+ options?: UseRemoteParticipantOptions,
48
+ ): RemoteParticipant | undefined;
49
+ export function useRemoteParticipant(
50
+ identityOrIdentifier: string | ParticipantIdentifier,
51
+ options: UseRemoteParticipantOptions = {},
52
+ ): RemoteParticipant | undefined {
53
+ const room = useRoomContext();
54
+ const [updateOnlyOn] = React.useState(options.updateOnlyOn);
55
+
56
+ const observable = React.useMemo(() => {
57
+ if (typeof identityOrIdentifier === 'string') {
58
+ return connectedParticipantObserver(room, identityOrIdentifier, {
59
+ additionalEvents: updateOnlyOn,
60
+ });
61
+ } else {
62
+ return participantByIdentifierObserver(room, identityOrIdentifier, {
63
+ additionalEvents: updateOnlyOn,
64
+ });
65
+ }
66
+ }, [room, JSON.stringify(identityOrIdentifier), updateOnlyOn]);
67
+
68
+ // Using `wrapperParticipant` to ensure a new object reference,
69
+ // triggering a re-render when the participant events fire.
70
+ const [participantWrapper, setParticipantWrapper] = React.useState({
71
+ p: undefined as RemoteParticipant | undefined,
72
+ });
73
+ React.useEffect(() => {
74
+ const listener = observable.subscribe((p) => setParticipantWrapper({ p }));
75
+ return () => listener.unsubscribe();
76
+ }, [observable]);
77
+
78
+ return participantWrapper.p;
79
+ }
@@ -0,0 +1,45 @@
1
+ import { connectedParticipantsObserver } from '@livekit/components-core';
2
+ import type { RoomEvent, RemoteParticipant, Room } from 'livekit-client';
3
+ import * as React from 'react';
4
+ import { useEnsureRoom } from '../context';
5
+
6
+ /** @public */
7
+ export interface UseRemoteParticipantsOptions {
8
+ /**
9
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what RoomEvents the hook updates.
10
+ * By default it updates on all relevant RoomEvents to keep the returned participants array up to date.
11
+ * The minimal set of non-overwriteable `RoomEvents` is: `[RoomEvent.ParticipantConnected, RoomEvent.ParticipantDisconnected, RoomEvent.ConnectionStateChanged]`
12
+ */
13
+ updateOnlyOn?: RoomEvent[];
14
+ /**
15
+ * The room to use. If not provided, the hook will use the room from the context.
16
+ */
17
+ room?: Room;
18
+ }
19
+
20
+ /**
21
+ * The `useRemoteParticipants` hook returns all remote participants (without the local) of the current room.
22
+ * @remarks
23
+ * To optimize performance, you can use the `updateOnlyOn` property to decide on what `RoomEvents` the hook updates.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const participants = useRemoteParticipants();
28
+ * <ParticipantLoop participants={participants}>
29
+ * <ParticipantName />
30
+ * </ParticipantLoop>
31
+ * ```
32
+ * @public
33
+ */
34
+ export function useRemoteParticipants(options: UseRemoteParticipantsOptions = {}) {
35
+ const room = useEnsureRoom(options.room);
36
+ const [participants, setParticipants] = React.useState<RemoteParticipant[]>([]);
37
+
38
+ React.useEffect(() => {
39
+ const listener = connectedParticipantsObserver(room, {
40
+ additionalRoomEvents: options.updateOnlyOn,
41
+ }).subscribe(setParticipants);
42
+ return () => listener.unsubscribe();
43
+ }, [room, JSON.stringify(options.updateOnlyOn)]);
44
+ return participants;
45
+ }
@@ -0,0 +1,32 @@
1
+ import { roomInfoObserver } from '@livekit/components-core';
2
+ import type { Room } from 'livekit-client';
3
+ import * as React from 'react';
4
+ import { useEnsureRoom } from '../context';
5
+ import { useObservableState } from './internal';
6
+
7
+ /**
8
+ * The `useRoomInfo` hook returns the name and metadata of the given `Room`.
9
+ * @remarks
10
+ * Needs to be called inside a `RoomContext` or by passing a `Room` instance.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const { name, metadata } = useRoomInfo();
15
+ * ```
16
+ * @public
17
+ */
18
+ export interface UseRoomInfoOptions {
19
+ room?: Room;
20
+ }
21
+
22
+ /** @public */
23
+ export function useRoomInfo(options: UseRoomInfoOptions = {}) {
24
+ const room = useEnsureRoom(options.room);
25
+ const infoObserver = React.useMemo(() => roomInfoObserver(room), [room]);
26
+ const { name, metadata } = useObservableState(infoObserver, {
27
+ name: room.name,
28
+ metadata: room.metadata,
29
+ });
30
+
31
+ return { name, metadata };
32
+ }