@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,63 @@
1
+ import * as React from 'react';
2
+ import type { UseParticipantsOptions } from '../../hooks';
3
+ import { useGridLayout, usePagination, useSwipe } from '../../hooks';
4
+ import { mergeProps } from '../../utils';
5
+ import type { TrackReferenceOrPlaceholder } from '@livekit/components-core';
6
+ import { TrackLoop } from '../TrackLoop';
7
+ import { PaginationControl } from '../controls/PaginationControl';
8
+ import { PaginationIndicator } from '../controls/PaginationIndicator';
9
+
10
+ /** @public */
11
+ export interface GridLayoutProps
12
+ extends React.HTMLAttributes<HTMLDivElement>,
13
+ Pick<UseParticipantsOptions, 'updateOnlyOn'> {
14
+ children: React.ReactNode;
15
+ tracks: TrackReferenceOrPlaceholder[];
16
+ }
17
+
18
+ /**
19
+ * The `GridLayout` component displays the nested participants in a grid where every participants has the same size.
20
+ * It also supports pagination if there are more participants than the grid can display.
21
+ * @remarks
22
+ * To ensure visual stability when tiles are reordered due to track updates,
23
+ * the component uses the `useVisualStableUpdate` hook.
24
+ * @example
25
+ * ```tsx
26
+ * <LiveKitRoom>
27
+ * <GridLayout tracks={tracks}>
28
+ * <ParticipantTile />
29
+ * </GridLayout>
30
+ * <LiveKitRoom>
31
+ * ```
32
+ * @public
33
+ */
34
+ export function GridLayout({ tracks, ...props }: GridLayoutProps) {
35
+ const gridEl = React.createRef<HTMLDivElement>();
36
+
37
+ const elementProps = React.useMemo(
38
+ () => mergeProps(props, { className: 'lk-grid-layout' }),
39
+ [props],
40
+ );
41
+ const { layout } = useGridLayout(gridEl, tracks.length);
42
+ const pagination = usePagination(layout.maxTiles, tracks);
43
+
44
+ useSwipe(gridEl, {
45
+ onLeftSwipe: pagination.nextPage,
46
+ onRightSwipe: pagination.prevPage,
47
+ });
48
+
49
+ return (
50
+ <div ref={gridEl} data-lk-pagination={pagination.totalPageCount > 1} {...elementProps}>
51
+ <TrackLoop tracks={pagination.tracks}>{props.children}</TrackLoop>
52
+ {tracks.length > layout.maxTiles && (
53
+ <>
54
+ <PaginationIndicator
55
+ totalPageCount={pagination.totalPageCount}
56
+ currentPage={pagination.currentPage}
57
+ />
58
+ <PaginationControl pagesContainer={gridEl} {...pagination} />
59
+ </>
60
+ )}
61
+ </div>
62
+ );
63
+ }
@@ -0,0 +1,36 @@
1
+ import type { PinState, WidgetState } from '@livekit/components-core';
2
+ import { log } from '@livekit/components-core';
3
+ import * as React from 'react';
4
+ import type { LayoutContextType } from '../../context';
5
+ import { LayoutContext, useEnsureCreateLayoutContext } from '../../context';
6
+
7
+ /** @alpha */
8
+ export interface LayoutContextProviderProps {
9
+ value?: LayoutContextType;
10
+ onPinChange?: (state: PinState) => void;
11
+ onWidgetChange?: (state: WidgetState) => void;
12
+ }
13
+
14
+ /** @alpha */
15
+ export function LayoutContextProvider({
16
+ value,
17
+ onPinChange,
18
+ onWidgetChange,
19
+ children,
20
+ }: React.PropsWithChildren<LayoutContextProviderProps>) {
21
+ const layoutContextValue = useEnsureCreateLayoutContext(value);
22
+
23
+ React.useEffect(() => {
24
+ log.debug('PinState Updated', { state: layoutContextValue.pin.state });
25
+ if (onPinChange && layoutContextValue.pin.state) onPinChange(layoutContextValue.pin.state);
26
+ }, [layoutContextValue.pin.state, onPinChange]);
27
+
28
+ React.useEffect(() => {
29
+ log.debug('Widget Updated', { widgetState: layoutContextValue.widget.state });
30
+ if (onWidgetChange && layoutContextValue.widget.state) {
31
+ onWidgetChange(layoutContextValue.widget.state);
32
+ }
33
+ }, [onWidgetChange, layoutContextValue.widget.state]);
34
+
35
+ return <LayoutContext.Provider value={layoutContextValue}>{children}</LayoutContext.Provider>;
36
+ }
@@ -0,0 +1,3 @@
1
+ export * from './FocusLayout';
2
+ export * from './GridLayout';
3
+ export { CarouselLayout, type CarouselLayoutProps } from './CarouselLayout';
@@ -0,0 +1,89 @@
1
+ import * as React from 'react';
2
+ import { useMediaTrackBySourceOrName } from '../../hooks/useMediaTrackBySourceOrName';
3
+ import type { TrackReference } from '@livekit/components-core';
4
+ import { log } from '@livekit/components-core';
5
+ import { RemoteAudioTrack, RemoteTrackPublication } from 'livekit-client';
6
+ import { useEnsureTrackRef } from '../../context';
7
+
8
+ /** @public */
9
+ export interface AudioTrackProps extends React.AudioHTMLAttributes<HTMLAudioElement> {
10
+ /** The track reference of the track from which the audio is to be rendered. */
11
+ trackRef?: TrackReference;
12
+
13
+ onSubscriptionStatusChanged?: (subscribed: boolean) => void;
14
+ /** Sets the volume of the audio track. By default, the range is between `0.0` and `1.0`. */
15
+ volume?: number;
16
+ /**
17
+ * Mutes the audio track if set to `true`.
18
+ * @remarks
19
+ * If set to `true`, the server will stop sending audio track data to the client.
20
+ * @alpha
21
+ */
22
+ muted?: boolean;
23
+ }
24
+
25
+ /**
26
+ * The AudioTrack component is responsible for rendering participant audio tracks.
27
+ * This component must have access to the participant's context, or alternatively pass it a `Participant` as a property.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <ParticipantTile>
32
+ * <AudioTrack trackRef={trackRef} />
33
+ * </ParticipantTile>
34
+ * ```
35
+ *
36
+ * @see `ParticipantTile` component
37
+ * @public
38
+ */
39
+ export const AudioTrack: (
40
+ props: AudioTrackProps & React.RefAttributes<HTMLAudioElement>,
41
+ ) => React.ReactNode = /* @__PURE__ */ React.forwardRef<HTMLAudioElement, AudioTrackProps>(
42
+ function AudioTrack(
43
+ { trackRef, onSubscriptionStatusChanged, volume, ...props }: AudioTrackProps,
44
+ ref,
45
+ ) {
46
+ const trackReference = useEnsureTrackRef(trackRef);
47
+
48
+ const mediaEl = React.useRef<HTMLAudioElement>(null);
49
+ React.useImperativeHandle(ref, () => mediaEl.current as HTMLAudioElement);
50
+
51
+ const {
52
+ elementProps,
53
+ isSubscribed,
54
+ track,
55
+ publication: pub,
56
+ } = useMediaTrackBySourceOrName(trackReference, {
57
+ element: mediaEl,
58
+ props,
59
+ });
60
+
61
+ React.useEffect(() => {
62
+ onSubscriptionStatusChanged?.(!!isSubscribed);
63
+ }, [isSubscribed, onSubscriptionStatusChanged]);
64
+
65
+ React.useEffect(() => {
66
+ if (track === undefined || volume === undefined) {
67
+ return;
68
+ }
69
+ if (track instanceof RemoteAudioTrack) {
70
+ track.setVolume(volume);
71
+ } else {
72
+ log.warn('Volume can only be set on remote audio tracks.');
73
+ }
74
+ }, [volume, track]);
75
+
76
+ React.useEffect(() => {
77
+ if (pub === undefined || props.muted === undefined) {
78
+ return;
79
+ }
80
+ if (pub instanceof RemoteTrackPublication) {
81
+ pub.setEnabled(!props.muted);
82
+ } else {
83
+ log.warn('Can only call setEnabled on remote track publications.');
84
+ }
85
+ }, [props.muted, pub, track]);
86
+
87
+ return <audio ref={mediaEl} {...elementProps} />;
88
+ },
89
+ );
@@ -0,0 +1,67 @@
1
+ import * as React from 'react';
2
+ import { type TrackReference } from '@livekit/components-core';
3
+ import { useEnsureTrackRef } from '../../context';
4
+ import { useMultibandTrackVolume } from '../../hooks';
5
+
6
+ /**
7
+ * @public
8
+ * @deprecated Use BarVisualizer instead
9
+ */
10
+ export interface AudioVisualizerProps extends React.HTMLAttributes<SVGElement> {
11
+ trackRef?: TrackReference;
12
+ }
13
+
14
+ /**
15
+ * The AudioVisualizer component is used to visualize the audio volume of a given audio track.
16
+ * @remarks
17
+ * Requires a `TrackReferenceOrPlaceholder` to be provided either as a property or via the `TrackRefContext`.
18
+ * @example
19
+ * ```tsx
20
+ * <AudioVisualizer />
21
+ * ```
22
+ * @public
23
+ * @deprecated Use BarVisualizer instead
24
+ */
25
+ export const AudioVisualizer: (
26
+ props: AudioVisualizerProps & React.RefAttributes<SVGSVGElement>,
27
+ ) => React.ReactNode = /* @__PURE__ */ React.forwardRef<SVGSVGElement, AudioVisualizerProps>(
28
+ function AudioVisualizer({ trackRef, ...props }: AudioVisualizerProps, ref) {
29
+ const svgWidth = 200;
30
+ const svgHeight = 90;
31
+ const barWidth = 6;
32
+ const barSpacing = 4;
33
+ const volMultiplier = 50;
34
+ const barCount = 7;
35
+ const trackReference = useEnsureTrackRef(trackRef);
36
+
37
+ const volumes = useMultibandTrackVolume(trackReference, { bands: 7, loPass: 300 });
38
+
39
+ return (
40
+ <svg
41
+ ref={ref}
42
+ width="100%"
43
+ height="100%"
44
+ viewBox={`0 0 ${svgWidth} ${svgHeight}`}
45
+ {...props}
46
+ className="lk-audio-visualizer"
47
+ >
48
+ <rect x="0" y="0" width="100%" height="100%" />
49
+ <g
50
+ style={{
51
+ transform: `translate(${(svgWidth - barCount * (barWidth + barSpacing)) / 2}px, 0)`,
52
+ }}
53
+ >
54
+ {volumes.map((vol, idx) => (
55
+ <rect
56
+ key={idx}
57
+ x={idx * (barWidth + barSpacing)}
58
+ y={svgHeight / 2 - (vol * volMultiplier) / 2}
59
+ width={barWidth}
60
+ height={vol * volMultiplier}
61
+ ></rect>
62
+ ))}
63
+ </g>
64
+ </svg>
65
+ );
66
+ },
67
+ );
@@ -0,0 +1,164 @@
1
+ import * as React from 'react';
2
+ import { useBarAnimator } from './animators/useBarAnimator';
3
+ import { useMultibandTrackVolume, type AgentState } from '../../hooks';
4
+ import { type TrackReferenceOrPlaceholder } from '@livekit/components-core';
5
+ import { useMaybeTrackRefContext } from '../../context';
6
+ import { cloneSingleChild, mergeProps } from '../../utils';
7
+ import { LocalAudioTrack, RemoteAudioTrack } from 'livekit-client';
8
+
9
+ /**
10
+ * @beta
11
+ */
12
+ export type BarVisualizerOptions = {
13
+ /** in percentage */
14
+ maxHeight?: number;
15
+ /** in percentage */
16
+ minHeight?: number;
17
+ };
18
+
19
+ /**
20
+ * @beta
21
+ */
22
+ export interface BarVisualizerProps extends React.HTMLProps<HTMLDivElement> {
23
+ /** If set, the visualizer will transition between different voice assistant states */
24
+ state?: AgentState;
25
+ /** Number of bars that show up in the visualizer */
26
+ barCount?: number;
27
+ /** @deprecated use `track` field instead */
28
+ trackRef?: TrackReferenceOrPlaceholder;
29
+ track?: TrackReferenceOrPlaceholder | LocalAudioTrack | RemoteAudioTrack;
30
+ options?: BarVisualizerOptions;
31
+ /** The template component to be used in the visualizer. */
32
+ children?: React.ReactNode;
33
+ }
34
+
35
+ const sequencerIntervals = new Map<AgentState, number>([
36
+ ['connecting', 2000],
37
+ ['initializing', 2000],
38
+ ['listening', 500],
39
+ ['thinking', 150],
40
+ ]);
41
+
42
+ const getSequencerInterval = (
43
+ state: AgentState | undefined,
44
+ barCount: number,
45
+ ): number | undefined => {
46
+ if (state === undefined) {
47
+ return 1000;
48
+ }
49
+ let interval = sequencerIntervals.get(state);
50
+ if (interval) {
51
+ switch (state) {
52
+ case 'connecting':
53
+ // case 'thinking':
54
+ interval /= barCount;
55
+ break;
56
+
57
+ default:
58
+ break;
59
+ }
60
+ }
61
+ return interval;
62
+ };
63
+ /**
64
+ * Visualizes audio signals from a TrackReference as bars.
65
+ * If the `state` prop is set, it automatically transitions between VoiceAssistant states.
66
+ * @beta
67
+ *
68
+ * @remarks For VoiceAssistant state transitions this component requires a voice assistant agent running with livekit-agents \>= 0.9.0
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * function SimpleVoiceAssistant() {
73
+ * const { state, audioTrack } = useVoiceAssistant();
74
+ * return (
75
+ * <BarVisualizer
76
+ * state={state}
77
+ * trackRef={audioTrack}
78
+ * />
79
+ * );
80
+ * }
81
+ * ```
82
+ *
83
+ * @example
84
+ * Styling the BarVisualizer using CSS classes
85
+ * ```css
86
+ * .lk-audio-bar {
87
+ * // Styles for "idle" bars
88
+ * }
89
+ * .lk-audio-bar.lk-highlighted {
90
+ * // Styles for "active" bars
91
+ * }
92
+ * ```
93
+ *
94
+ * @example
95
+ * Styling the BarVisualizer using CSS custom properties
96
+ * ```css
97
+ * --lk-fg // for the "active" colour, note that this defines the main foreground colour for the whole "theme"
98
+ * --lk-va-bg // for "idle" colour
99
+ * ```
100
+ *
101
+ * @example
102
+ * Using a custom bar template for the BarVisualizer
103
+ * ```tsx
104
+ * <BarVisualizer>
105
+ * <div className="all the classes" />
106
+ * </BarVisualizer>
107
+ * ```
108
+ * the highlighted children will get a data prop of data-lk-highlighted for them to switch between active and idle bars in their own template bar
109
+ */
110
+ export const BarVisualizer = /* @__PURE__ */ React.forwardRef<HTMLDivElement, BarVisualizerProps>(
111
+ function BarVisualizer(
112
+ { state, options, barCount = 15, trackRef, track, children, ...props }: BarVisualizerProps,
113
+ ref,
114
+ ) {
115
+ const elementProps = mergeProps(props, { className: 'lk-audio-bar-visualizer' });
116
+ let targetTrack: TrackReferenceOrPlaceholder | LocalAudioTrack | RemoteAudioTrack | undefined =
117
+ useMaybeTrackRefContext();
118
+
119
+ if (trackRef || track) {
120
+ targetTrack = trackRef || track;
121
+ }
122
+
123
+ const volumeBands = useMultibandTrackVolume(targetTrack, {
124
+ bands: barCount,
125
+ loPass: 100,
126
+ hiPass: 200,
127
+ });
128
+ const minHeight = options?.minHeight ?? 20;
129
+ const maxHeight = options?.maxHeight ?? 100;
130
+
131
+ const highlightedIndices = useBarAnimator(
132
+ state,
133
+ barCount,
134
+ getSequencerInterval(state, barCount) ?? 100,
135
+ );
136
+
137
+ return (
138
+ <div ref={ref} {...elementProps} data-lk-va-state={state}>
139
+ {volumeBands.map((volume, idx) =>
140
+ children ? (
141
+ cloneSingleChild(children, {
142
+ 'data-lk-highlighted': highlightedIndices.includes(idx),
143
+ 'data-lk-bar-index': idx,
144
+ className: 'lk-audio-bar',
145
+ style: { height: `${Math.min(maxHeight, Math.max(minHeight, volume * 100 + 5))}%` },
146
+ })
147
+ ) : (
148
+ <span
149
+ key={idx}
150
+ data-lk-highlighted={highlightedIndices.includes(idx)}
151
+ data-lk-bar-index={idx}
152
+ className={`lk-audio-bar ${highlightedIndices.includes(idx) && 'lk-highlighted'}`}
153
+ style={{
154
+ // TODO transform animations would be more performant, however the border-radius gets distorted when using scale transforms. a 9-slice approach (or 3 in this case) could work
155
+ // transform: `scale(1, ${Math.min(maxHeight, Math.max(minHeight, volume))}`,
156
+ height: `${Math.min(maxHeight, Math.max(minHeight, volume * 100 + 5))}%`,
157
+ }}
158
+ ></span>
159
+ ),
160
+ )}
161
+ </div>
162
+ );
163
+ },
164
+ );
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { mergeProps } from '../../utils';
3
+ import { getConnectionQualityIcon } from '../../assets/icons/util';
4
+ import type { ConnectionQualityIndicatorOptions } from '../../hooks';
5
+ import { useConnectionQualityIndicator } from '../../hooks';
6
+
7
+ /** @public */
8
+ export interface ConnectionQualityIndicatorProps
9
+ extends React.HTMLAttributes<HTMLDivElement>,
10
+ ConnectionQualityIndicatorOptions {}
11
+
12
+ /**
13
+ * The `ConnectionQualityIndicator` shows the individual connection quality of a participant.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <ConnectionQualityIndicator />
18
+ * ```
19
+ * @public
20
+ */
21
+ export const ConnectionQualityIndicator: (
22
+ props: ConnectionQualityIndicatorProps & React.RefAttributes<HTMLDivElement>,
23
+ ) => React.ReactNode = /* @__PURE__ */ React.forwardRef<
24
+ HTMLDivElement,
25
+ ConnectionQualityIndicatorProps
26
+ >(function ConnectionQualityIndicator(props: ConnectionQualityIndicatorProps, ref) {
27
+ const { className, quality } = useConnectionQualityIndicator(props);
28
+ const elementProps = React.useMemo(() => {
29
+ return { ...mergeProps(props, { className: className as string }), 'data-lk-quality': quality };
30
+ }, [quality, props, className]);
31
+ return (
32
+ <div ref={ref} {...elementProps}>
33
+ {props.children ?? getConnectionQualityIcon(quality)}
34
+ </div>
35
+ );
36
+ });
@@ -0,0 +1,67 @@
1
+ import * as React from 'react';
2
+
3
+ import { ConnectionQualityIndicator } from './ConnectionQualityIndicator';
4
+ import { ParticipantName } from './ParticipantName';
5
+ import { TrackMutedIndicator } from './TrackMutedIndicator';
6
+ import { TrackRefContext, useEnsureTrackRef } from '../../context';
7
+
8
+ import type { ParticipantTileProps } from './ParticipantTile';
9
+ import { AudioTrack } from './AudioTrack';
10
+ import { useParticipantTile } from '../../hooks';
11
+ import { isTrackReference } from '@livekit/components-core';
12
+ import { BarVisualizer } from './BarVisualizer';
13
+
14
+ /**
15
+ * The `ParticipantAudioTile` component is the base utility wrapper for displaying a visual representation of a participant.
16
+ * This component can be used as a child of the `TileLoop` or independently if a participant is passed as a property.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <ParticipantAudioTile />
21
+ * ```
22
+ * @public
23
+ */
24
+ export const ParticipantAudioTile: (
25
+ props: ParticipantTileProps & React.RefAttributes<HTMLDivElement>,
26
+ ) => React.ReactNode = /* @__PURE__ */ React.forwardRef<HTMLDivElement, ParticipantTileProps>(
27
+ function ParticipantAudioTile(
28
+ {
29
+ children,
30
+ disableSpeakingIndicator,
31
+ onParticipantClick,
32
+ trackRef,
33
+ ...htmlProps
34
+ }: ParticipantTileProps,
35
+ ref,
36
+ ) {
37
+ const trackReference = useEnsureTrackRef(trackRef);
38
+ const { elementProps } = useParticipantTile({
39
+ trackRef: trackReference,
40
+ htmlProps,
41
+ disableSpeakingIndicator,
42
+ onParticipantClick,
43
+ });
44
+
45
+ return (
46
+ <div ref={ref} style={{ position: 'relative', minHeight: '160px' }} {...elementProps}>
47
+ <TrackRefContext.Provider value={trackReference}>
48
+ {children ?? (
49
+ <>
50
+ {isTrackReference(trackReference) && (
51
+ <AudioTrack trackRef={trackReference}></AudioTrack>
52
+ )}
53
+ <BarVisualizer barCount={7} options={{ minHeight: 8 }} />
54
+ <div className="lk-participant-metadata">
55
+ <div className="lk-participant-metadata-item">
56
+ <TrackMutedIndicator trackRef={trackReference}></TrackMutedIndicator>
57
+ <ParticipantName />
58
+ </div>
59
+ <ConnectionQualityIndicator className="lk-participant-metadata-item" />
60
+ </div>
61
+ </>
62
+ )}
63
+ </TrackRefContext.Provider>
64
+ </div>
65
+ );
66
+ },
67
+ );
@@ -0,0 +1,50 @@
1
+ import { setupParticipantName } from '@livekit/components-core';
2
+ import * as React from 'react';
3
+ import { useEnsureParticipant } from '../../context';
4
+ import { useObservableState } from '../../hooks/internal/useObservableState';
5
+ import { mergeProps } from '../../utils';
6
+ import type { UseParticipantInfoOptions } from '../../hooks';
7
+
8
+ /** @public */
9
+ export interface ParticipantNameProps
10
+ extends React.HTMLAttributes<HTMLSpanElement>,
11
+ UseParticipantInfoOptions {}
12
+
13
+ /**
14
+ * The `ParticipantName` component displays the name of the participant as a string within an HTML span element.
15
+ * If no participant name is undefined the participant identity string is displayed.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <ParticipantName />
20
+ * ```
21
+ * @public
22
+ */
23
+ export const ParticipantName: (
24
+ props: ParticipantNameProps & React.RefAttributes<HTMLSpanElement>,
25
+ ) => React.ReactNode = /* @__PURE__ */ React.forwardRef<HTMLSpanElement, ParticipantNameProps>(
26
+ function ParticipantName({ participant, ...props }: ParticipantNameProps, ref) {
27
+ const p = useEnsureParticipant(participant);
28
+
29
+ const { className, infoObserver } = React.useMemo(() => {
30
+ return setupParticipantName(p);
31
+ }, [p]);
32
+
33
+ const { identity, name } = useObservableState(infoObserver, {
34
+ name: p.name,
35
+ identity: p.identity,
36
+ metadata: p.metadata,
37
+ });
38
+
39
+ const mergedProps = React.useMemo(() => {
40
+ return mergeProps(props, { className, 'data-lk-participant-name': name });
41
+ }, [props, className, name]);
42
+
43
+ return (
44
+ <span ref={ref} {...mergedProps}>
45
+ {name !== '' ? name : identity}
46
+ {props.children}
47
+ </span>
48
+ );
49
+ },
50
+ );