@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,42 @@
1
+ import type { Room } from 'livekit-client';
2
+ import * as React from 'react';
3
+
4
+ /** @public */
5
+ export const RoomContext = React.createContext<Room | undefined>(undefined);
6
+
7
+ /**
8
+ * Ensures that a room is provided via context.
9
+ * If no room is provided, an error is thrown.
10
+ * @public
11
+ */
12
+ export function useRoomContext() {
13
+ const ctx = React.useContext(RoomContext);
14
+ if (!ctx) {
15
+ throw Error('tried to access room context outside of livekit room component');
16
+ }
17
+ return ctx;
18
+ }
19
+
20
+ /**
21
+ * Returns the room context if it exists, otherwise undefined.
22
+ * @public
23
+ */
24
+ export function useMaybeRoomContext() {
25
+ return React.useContext(RoomContext);
26
+ }
27
+
28
+ /**
29
+ * Ensures that a room is provided, either via context or explicitly as a parameter.
30
+ * If no room is provided, an error is thrown.
31
+ * @public
32
+ */
33
+ export function useEnsureRoom(room?: Room) {
34
+ const context = useMaybeRoomContext();
35
+ const r = room ?? context;
36
+ if (!r) {
37
+ throw new Error(
38
+ 'No room provided, make sure you are inside a Room context or pass the room explicitly',
39
+ );
40
+ }
41
+ return r;
42
+ }
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+
3
+ import { UseSessionReturn } from '../hooks/useSession';
4
+
5
+ /** @internal */
6
+ export const SessionContext = React.createContext<UseSessionReturn | undefined>(undefined);
7
+
8
+ /**
9
+ * Ensures that a session is provided via context.
10
+ * If no session is provided, an error is thrown.
11
+ * @beta
12
+ */
13
+ export function useSessionContext() {
14
+ const ctx = React.useContext(SessionContext);
15
+ if (!ctx) {
16
+ throw Error('tried to access session context outside of SessionProvider component');
17
+ }
18
+ return ctx;
19
+ }
20
+
21
+ /**
22
+ * Returns the session context if it exists, otherwise undefined.
23
+ * @beta
24
+ */
25
+ export function useMaybeSessionContext() {
26
+ return React.useContext(SessionContext);
27
+ }
28
+
29
+ /**
30
+ * Ensures that a session is provided, either via context or explicitly as a parameter.
31
+ * If no session is provided, an error is thrown.
32
+ * @beta
33
+ */
34
+ export function useEnsureSession(session?: UseSessionReturn) {
35
+ const context = useMaybeSessionContext();
36
+ const r = session ?? context;
37
+ if (!r) {
38
+ throw new Error(
39
+ 'No session provided, make sure you are inside a Session context or pass the session explicitly',
40
+ );
41
+ }
42
+ return r;
43
+ }
@@ -0,0 +1,47 @@
1
+ import type { TrackReferenceOrPlaceholder } from '@livekit/components-core';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * This context provides a `TrackReferenceOrPlaceholder` to all child components.
6
+ * @public
7
+ */
8
+ export const TrackRefContext = React.createContext<TrackReferenceOrPlaceholder | undefined>(
9
+ undefined,
10
+ );
11
+
12
+ /**
13
+ * Ensures that a track reference is provided via context.
14
+ * If not inside a `TrackRefContext`, an error is thrown.
15
+ * @public
16
+ */
17
+ export function useTrackRefContext() {
18
+ const trackReference = React.useContext(TrackRefContext);
19
+ if (!trackReference) {
20
+ throw Error('tried to access track context outside of track context provider');
21
+ }
22
+ return trackReference;
23
+ }
24
+
25
+ /**
26
+ * Returns a track reference from the `TrackRefContext` if it exists, otherwise `undefined`.
27
+ * @public
28
+ */
29
+ export function useMaybeTrackRefContext() {
30
+ return React.useContext(TrackRefContext);
31
+ }
32
+
33
+ /**
34
+ * Ensures that a track reference is provided, either via context or explicitly as a parameter.
35
+ * If not inside a `TrackRefContext` and no track reference is provided, an error is thrown.
36
+ * @public
37
+ */
38
+ export function useEnsureTrackRef(trackRef?: TrackReferenceOrPlaceholder) {
39
+ const context = useMaybeTrackRefContext();
40
+ const ref = trackRef ?? context;
41
+ if (!ref) {
42
+ throw new Error(
43
+ 'No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly',
44
+ );
45
+ }
46
+ return ref;
47
+ }
@@ -0,0 +1,110 @@
1
+ import * as React from 'react';
2
+ import { LocalAudioTrack } from 'livekit-client';
3
+ import { log } from '@livekit/components-core';
4
+ import type { KrispNoiseFilterProcessor, NoiseFilterOptions } from '@livekit/krisp-noise-filter';
5
+ import type { TrackReferenceOrPlaceholder } from '@livekit/components-core';
6
+ import { useLocalParticipant } from '../../..';
7
+
8
+ /**
9
+ * @beta
10
+ */
11
+ export interface useKrispNoiseFilterOptions {
12
+ /**
13
+ * The track reference to use for the noise filter (defaults: local microphone track)
14
+ */
15
+ trackRef?: TrackReferenceOrPlaceholder;
16
+ /**
17
+ * @internal
18
+ */
19
+ filterOptions?: NoiseFilterOptions;
20
+ }
21
+
22
+ /**
23
+ * Enable the Krisp enhanced noise cancellation feature for local audio tracks.
24
+ *
25
+ * Defaults to the localParticipant's microphone track publication, but you can override this behavior by passing in a different track reference.
26
+ *
27
+ * @package \@livekit/components-react/krisp
28
+ * @remarks This filter requires that you install the `@livekit/krisp-noise-filter` package and is supported only on {@link https://cloud.livekit.io | LiveKit Cloud}.
29
+ * @beta
30
+ * @example
31
+ * ```tsx
32
+ * const krisp = useKrispNoiseFilter();
33
+ * return <input
34
+ * type="checkbox"
35
+ * onChange={(ev) => krisp.setNoiseFilterEnabled(ev.target.checked)}
36
+ * checked={krisp.isNoiseFilterEnabled}
37
+ * disabled={krisp.isNoiseFilterPending}
38
+ * />
39
+ * ```
40
+ * @returns Use `setIsNoiseFilterEnabled` to enable/disable the noise filter.
41
+ */
42
+ export function useKrispNoiseFilter(options: useKrispNoiseFilterOptions = {}) {
43
+ const [shouldEnable, setShouldEnable] = React.useState(false);
44
+ const [isNoiseFilterPending, setIsNoiseFilterPending] = React.useState(false);
45
+ const [isNoiseFilterEnabled, setIsNoiseFilterEnabled] = React.useState(false);
46
+ let micPublication = useLocalParticipant().microphoneTrack;
47
+ const [krispProcessor, setKrispProcessor] = React.useState<
48
+ KrispNoiseFilterProcessor | undefined
49
+ >();
50
+ if (options.trackRef) {
51
+ micPublication = options.trackRef.publication;
52
+ }
53
+
54
+ const setNoiseFilterEnabled = React.useCallback(async (enable: boolean) => {
55
+ if (enable) {
56
+ const { KrispNoiseFilter, isKrispNoiseFilterSupported } = await import(
57
+ '@livekit/krisp-noise-filter'
58
+ );
59
+
60
+ if (!isKrispNoiseFilterSupported()) {
61
+ log.warn('LiveKit-Krisp noise filter is not supported in this browser');
62
+ return;
63
+ }
64
+ if (!krispProcessor) {
65
+ setKrispProcessor(KrispNoiseFilter(options.filterOptions));
66
+ }
67
+ }
68
+ setShouldEnable((prev) => {
69
+ if (prev !== enable) {
70
+ setIsNoiseFilterPending(true);
71
+ }
72
+ return enable;
73
+ });
74
+ }, []);
75
+
76
+ React.useEffect(() => {
77
+ if (micPublication && micPublication.track instanceof LocalAudioTrack && krispProcessor) {
78
+ const currentProcessor = micPublication.track.getProcessor();
79
+ if (currentProcessor && currentProcessor.name === 'livekit-noise-filter') {
80
+ setIsNoiseFilterPending(true);
81
+ (currentProcessor as KrispNoiseFilterProcessor).setEnabled(shouldEnable).finally(() => {
82
+ setIsNoiseFilterPending(false);
83
+ setIsNoiseFilterEnabled(shouldEnable);
84
+ });
85
+ } else if (!currentProcessor && shouldEnable) {
86
+ setIsNoiseFilterPending(true);
87
+ micPublication?.track
88
+ ?.setProcessor(krispProcessor)
89
+ .then(() => krispProcessor.setEnabled(shouldEnable))
90
+ .then(() => {
91
+ setIsNoiseFilterEnabled(true);
92
+ })
93
+ .catch((e: any) => {
94
+ setIsNoiseFilterEnabled(false);
95
+ log.error('Krisp hook: error enabling filter', e);
96
+ })
97
+ .finally(() => {
98
+ setIsNoiseFilterPending(false);
99
+ });
100
+ }
101
+ }
102
+ }, [shouldEnable, micPublication, krispProcessor]);
103
+
104
+ return {
105
+ setNoiseFilterEnabled,
106
+ isNoiseFilterEnabled,
107
+ isNoiseFilterPending,
108
+ processor: krispProcessor,
109
+ };
110
+ }
@@ -0,0 +1,72 @@
1
+ export { useAudioPlayback } from './useAudioPlayback';
2
+ export { useClearPinButton } from './useClearPinButton';
3
+ export {
4
+ type ConnectionQualityIndicatorOptions,
5
+ useConnectionQualityIndicator,
6
+ } from './useConnectionQualityIndicator';
7
+ export { useConnectionState } from './useConnectionStatus';
8
+ export { useDataChannel } from './useDataChannel';
9
+ export { useDisconnectButton } from './useDisconnectButton';
10
+ export { useFacingMode } from './useFacingMode';
11
+ export { type UseFocusToggleProps, useFocusToggle } from './useFocusToggle';
12
+ export { useGridLayout } from './useGridLayout';
13
+ export { type UseIsMutedOptions, useIsMuted } from './useIsMuted';
14
+ export { useIsSpeaking } from './useIsSpeaking';
15
+ export { useLiveKitRoom } from './useLiveKitRoom';
16
+ export { type UseLocalParticipantOptions, useLocalParticipant } from './useLocalParticipant';
17
+ export { useLocalParticipantPermissions } from './useLocalParticipantPermissions';
18
+ export { type UseMediaDeviceSelectProps, useMediaDeviceSelect } from './useMediaDeviceSelect';
19
+ export { useMediaDevices } from './useMediaDevices';
20
+ export { usePagination } from './usePagination';
21
+ export { type UseParticipantInfoOptions, useParticipantInfo } from './useParticipantInfo';
22
+ export {
23
+ type UseParticipantPermissionsOptions,
24
+ useParticipantPermissions,
25
+ } from './useParticipantPermissions';
26
+ export { type UseParticipantTileProps, useParticipantTile } from './useParticipantTile';
27
+ export { type UseParticipantsOptions, useParticipants } from './useParticipants';
28
+ export { usePinnedTracks } from './usePinnedTracks';
29
+ export { type UseRemoteParticipantOptions, useRemoteParticipant } from './useRemoteParticipant';
30
+ export { type UseRemoteParticipantsOptions, useRemoteParticipants } from './useRemoteParticipants';
31
+ export { type UseRoomInfoOptions, useRoomInfo } from './useRoomInfo';
32
+ export { useSortedParticipants } from './useSortedParticipants';
33
+ export {
34
+ useSpeakingParticipants,
35
+ type UseSpeakingParticipantsOptions,
36
+ } from './useSpeakingParticipants';
37
+ export { type UseStartAudioProps, useStartAudio } from './useStartAudio';
38
+ export { type UseStartVideoProps, useStartVideo } from './useStartVideo';
39
+ export { type UseSwipeOptions, useSwipe } from './useSwipe';
40
+ export { type UseChatToggleProps, useChatToggle } from './useChatToggle';
41
+ export { type UseTokenOptions, type UserInfo, useToken } from './useToken';
42
+ export { useTrackMutedIndicator } from './useTrackMutedIndicator';
43
+ export { type UseTrackToggleProps, useTrackToggle } from './useTrackToggle';
44
+ export { type UseTracksHookReturnType, type UseTracksOptions, useTracks } from './useTracks';
45
+ export { type UseVisualStableUpdateOptions, useVisualStableUpdate } from './useVisualStableUpdate';
46
+ // export { UseTrackOptions, useTrack } from './useTrack';
47
+ export { useTrackByName } from './useTrackByName';
48
+ export { useChat } from './useChat';
49
+ export {
50
+ usePersistentUserChoices,
51
+ type UsePersistentUserChoicesOptions,
52
+ } from './usePersistentUserChoices';
53
+ export { type UseIsEncryptedOptions, useIsEncrypted } from './useIsEncrypted';
54
+ export * from './useTrackVolume';
55
+ export * from './useParticipantTracks';
56
+ export * from './useTrackTranscription';
57
+ export * from './useVoiceAssistant';
58
+ export * from './useParticipantAttributes';
59
+ export * from './useIsRecording';
60
+ export * from './useTextStream';
61
+ export * from './useTranscriptions';
62
+ export * from './useSequentialRoomConnectDisconnect';
63
+ export * from './useSession';
64
+ export {
65
+ type AgentState,
66
+ AgentEvent,
67
+ type AgentCallbacks,
68
+ type UseAgentReturn,
69
+ useAgent,
70
+ } from './useAgent';
71
+ export * from './useEvents';
72
+ export * from './useSessionMessages';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A collection of internal hooks that are not part of the public API
3
+ * and therefore can be modified or removed at any time.
4
+ *
5
+ * @internal
6
+ */
7
+
8
+ export * from './useResizeObserver';
9
+ export * from './useObservableState';
10
+ export * from './useMediaQuery';
@@ -0,0 +1,46 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Implementation used from https://github.com/juliencrn/usehooks-ts
4
+ *
5
+ * @internal
6
+ */
7
+ export function useMediaQuery(query: string): boolean {
8
+ const getMatches = (query: string): boolean => {
9
+ // Prevents SSR issues
10
+ if (typeof window !== 'undefined') {
11
+ return window.matchMedia(query).matches;
12
+ }
13
+ return false;
14
+ };
15
+
16
+ const [matches, setMatches] = React.useState<boolean>(getMatches(query));
17
+
18
+ function handleChange() {
19
+ setMatches(getMatches(query));
20
+ }
21
+
22
+ React.useEffect(() => {
23
+ const matchMedia = window.matchMedia(query);
24
+
25
+ // Triggered at the first client-side load and if query changes
26
+ handleChange();
27
+
28
+ // Listen matchMedia
29
+ if (matchMedia.addListener) {
30
+ matchMedia.addListener(handleChange);
31
+ } else {
32
+ matchMedia.addEventListener('change', handleChange);
33
+ }
34
+
35
+ return () => {
36
+ if (matchMedia.removeListener) {
37
+ matchMedia.removeListener(handleChange);
38
+ } else {
39
+ matchMedia.removeEventListener('change', handleChange);
40
+ }
41
+ };
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ }, [query]);
44
+
45
+ return matches;
46
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ // @ts-ignore
3
+ import type { Observable } from 'rxjs';
4
+
5
+ /**
6
+ * @internal
7
+ */
8
+ export function useObservableState<T>(
9
+ observable: Observable<T> | undefined,
10
+ startWith: T,
11
+ resetWhenObservableChanges = true,
12
+ ) {
13
+ const [state, setState] = React.useState<T>(startWith);
14
+ React.useEffect(() => {
15
+ if (resetWhenObservableChanges) {
16
+ setState(startWith);
17
+ }
18
+ // observable state doesn't run in SSR
19
+ if (typeof window === 'undefined' || !observable) return;
20
+ const subscription = observable.subscribe(setState);
21
+ return () => subscription.unsubscribe();
22
+ }, [observable, resetWhenObservableChanges]);
23
+ return state;
24
+ }
@@ -0,0 +1,124 @@
1
+ /* eslint-disable no-return-assign */
2
+ /* eslint-disable no-underscore-dangle */
3
+ import * as React from 'react';
4
+
5
+ const useLatest = <T>(current: T) => {
6
+ const storedValue = React.useRef(current);
7
+ React.useEffect(() => {
8
+ storedValue.current = current;
9
+ });
10
+ return storedValue;
11
+ };
12
+
13
+ /**
14
+ * A React hook that fires a callback whenever ResizeObserver detects a change to its size
15
+ * code extracted from https://github.com/jaredLunde/react-hook/blob/master/packages/resize-observer/src/index.tsx in order to not include the polyfill for resize-observer
16
+ *
17
+ * @internal
18
+ */
19
+ export function useResizeObserver<T extends HTMLElement>(
20
+ target: React.RefObject<T>,
21
+ callback: UseResizeObserverCallback,
22
+ ) {
23
+ const resizeObserver = getResizeObserver();
24
+ const storedCallback = useLatest(callback);
25
+
26
+ React.useLayoutEffect(() => {
27
+ let didUnsubscribe = false;
28
+
29
+ const targetEl = target.current;
30
+ if (!targetEl) return;
31
+
32
+ function cb(entry: ResizeObserverEntry, observer: ResizeObserver) {
33
+ if (didUnsubscribe) return;
34
+ storedCallback.current(entry, observer);
35
+ }
36
+
37
+ resizeObserver?.subscribe(targetEl as HTMLElement, cb);
38
+
39
+ return () => {
40
+ didUnsubscribe = true;
41
+ resizeObserver?.unsubscribe(targetEl as HTMLElement, cb);
42
+ };
43
+ }, [target.current, resizeObserver, storedCallback]);
44
+
45
+ return resizeObserver?.observer;
46
+ }
47
+
48
+ function createResizeObserver() {
49
+ let ticking = false;
50
+ let allEntries: ResizeObserverEntry[] = [];
51
+
52
+ const callbacks: Map<unknown, Array<UseResizeObserverCallback>> = new Map();
53
+
54
+ if (typeof window === 'undefined') {
55
+ return;
56
+ }
57
+
58
+ const observer = new ResizeObserver((entries: ResizeObserverEntry[], obs: ResizeObserver) => {
59
+ allEntries = allEntries.concat(entries);
60
+ if (!ticking) {
61
+ window.requestAnimationFrame(() => {
62
+ const triggered = new Set<Element>();
63
+ for (let i = 0; i < allEntries.length; i++) {
64
+ if (triggered.has(allEntries[i].target)) continue;
65
+ triggered.add(allEntries[i].target);
66
+ const cbs = callbacks.get(allEntries[i].target);
67
+ cbs?.forEach((cb) => cb(allEntries[i], obs));
68
+ }
69
+ allEntries = [];
70
+ ticking = false;
71
+ });
72
+ }
73
+ ticking = true;
74
+ });
75
+
76
+ return {
77
+ observer,
78
+ subscribe(target: HTMLElement, callback: UseResizeObserverCallback) {
79
+ observer.observe(target);
80
+ const cbs = callbacks.get(target) ?? [];
81
+ cbs.push(callback);
82
+ callbacks.set(target, cbs);
83
+ },
84
+ unsubscribe(target: HTMLElement, callback: UseResizeObserverCallback) {
85
+ const cbs = callbacks.get(target) ?? [];
86
+ if (cbs.length === 1) {
87
+ observer.unobserve(target);
88
+ callbacks.delete(target);
89
+ return;
90
+ }
91
+ const cbIndex = cbs.indexOf(callback);
92
+ if (cbIndex !== -1) cbs.splice(cbIndex, 1);
93
+ callbacks.set(target, cbs);
94
+ },
95
+ };
96
+ }
97
+
98
+ let _resizeObserver: ReturnType<typeof createResizeObserver>;
99
+
100
+ const getResizeObserver = () =>
101
+ !_resizeObserver ? (_resizeObserver = createResizeObserver()) : _resizeObserver;
102
+
103
+ export type UseResizeObserverCallback = (
104
+ entry: ResizeObserverEntry,
105
+ observer: ResizeObserver,
106
+ ) => unknown;
107
+
108
+ export const useSize = (target: React.RefObject<HTMLDivElement>) => {
109
+ const [size, setSize] = React.useState({ width: 0, height: 0 });
110
+ React.useLayoutEffect(() => {
111
+ if (target.current) {
112
+ const { width, height } = target.current.getBoundingClientRect();
113
+ setSize({ width, height });
114
+ }
115
+ }, [target.current]);
116
+
117
+ const resizeCallback = React.useCallback(
118
+ (entry: ResizeObserverEntry) => setSize(entry.contentRect),
119
+ [],
120
+ );
121
+ // Where the magic happens
122
+ useResizeObserver(target, resizeCallback);
123
+ return size;
124
+ };