@100mslive/react-sdk 0.11.3-alpha.6 → 0.11.3-alpha.8

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.
package/dist/index.cjs.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";var ft=Object.create;var Y=Object.defineProperty,St=Object.defineProperties,pt=Object.getOwnPropertyDescriptor,ht=Object.getOwnPropertyDescriptors,gt=Object.getOwnPropertyNames,ge=Object.getOwnPropertySymbols,Mt=Object.getPrototypeOf,He=Object.prototype.hasOwnProperty,Ht=Object.prototype.propertyIsEnumerable;var Me=(t,e,r)=>e in t?Y(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,N=(t,e)=>{for(var r in e||(e={}))He.call(e,r)&&Me(t,r,e[r]);if(ge)for(var r of ge(e))Ht.call(e,r)&&Me(t,r,e[r]);return t},K=(t,e)=>St(t,ht(e));var Pt=(t,e)=>{for(var r in e)Y(t,r,{get:e[r],enumerable:!0})},re=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of gt(e))!He.call(t,o)&&o!==r&&Y(t,o,{get:()=>e[o],enumerable:!(s=pt(e,o))||s.enumerable});return t},M=(t,e,r)=>(re(t,e,"default"),r&&re(r,e,"default")),ce=(t,e,r)=>(r=t!=null?ft(Mt(t)):{},re(e||!t||!t.__esModule?Y(r,"default",{value:t,enumerable:!0}):r,t)),bt=t=>re(Y({},"__esModule",{value:!0}),t);var p=(t,e,r)=>new Promise((s,o)=>{var i=a=>{try{n(r.next(a))}catch(u){o(u)}},c=a=>{try{n(r.throw(a))}catch(u){o(u)}},n=a=>a.done?s(a.value):Promise.resolve(a.value).then(i,c);n((r=r.apply(t,e)).next())});var g={};Pt(g,{HMSRoomProvider:()=>Te,getPeersWithTiles:()=>ne,throwErrorHandler:()=>Re,useAVToggle:()=>Ie,useAudioLevelStyles:()=>ze,useAudioMode:()=>mt,useAutoplayError:()=>Xe,useAwayNotifications:()=>ct,useCustomEvent:()=>et,useDevices:()=>_e,useEmbedShare:()=>rt,useHMSActions:()=>H,useHMSNotifications:()=>oe,useHMSStatsStore:()=>ye,useHMSStore:()=>m,useHMSVanillaNotifications:()=>G,useHMSVanillaStore:()=>I,usePDFShare:()=>ot,usePaginatedParticipants:()=>it,useParticipantList:()=>Ye,useParticipants:()=>tt,usePreviewJoin:()=>ke,useRecordingStreaming:()=>Ke,useRemoteAVToggle:()=>Ne,useScreenShare:()=>z,useTranscript:()=>dt,useVideo:()=>Ce,useVideoList:()=>Ge,useWhiteboard:()=>nt});module.exports=bt(g);var w=ce(require("react")),Q=ce(require("zustand")),ve=require("@100mslive/hms-video-store");var ue=require("react"),le=ce(require("zustand/shallow"));var y=class{static v(e,...r){this.log(0,e,...r)}static d(e,...r){this.log(1,e,...r)}static i(e,...r){this.log(2,e,...r)}static w(e,...r){this.log(3,e,...r)}static e(e,...r){this.log(4,e,...r)}static log(e,r,...s){if(!(this.level.valueOf()>e.valueOf()))switch(e){case 0:{console.log("HMSui-components: ",r,...s);break}case 1:{console.debug("HMSui-components: ",r,...s);break}case 2:{console.info("HMSui-components: ",r,...s);break}case 3:{console.warn("HMSui-components: ",r,...s);break}case 4:{console.error("HMSui-components: ",r,...s);break}}}};y.level=0;var F=`It seems like you forgot to add your component within a top level HMSRoomProvider, please refer to 100ms react docs(https://www.100ms.live/docs/javascript/v2/how-to-guides/install-the-sdk/integration#react-hooks) to check on the required steps for using this hook. If the provider is present
2
- at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;function Pe(t){return(r,s=le.default)=>{r||y.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=(0,ue.useContext)(t);if(!o)throw new Error(F);let i=o.store;return i(r,s)}}function be(t){return(r,s=le.default)=>{r||y.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=(0,ue.useContext)(t);if(!o)throw new Error(F);let i=o.statsStore;return i==null?void 0:i(r,s)}}var we=typeof window!="undefined";var W=(0,w.createContext)(null),Te=({children:t,actions:e,store:r,notifications:s,stats:o,isHMSStatsOn:i=!1,leaveOnUnload:c=!0})=>{let n=(0,w.useMemo)(()=>{let a,u=()=>{throw new Error("modifying store is not allowed")};if(e&&r)a={actions:e,store:(0,Q.default)(K(N({},r),{setState:u,destroy:u}))},s&&(a.notifications=s),o&&(a.statsStore=(0,Q.default)({getState:o.getState,subscribe:o.subscribe,setState:u,destroy:u}));else{let l=new ve.HMSReactiveStore;if(a={actions:l.getActions(),store:(0,Q.default)(K(N({},l.getStore()),{setState:u,destroy:u})),notifications:l.getNotifications()},i){let d=l.getStats();a.statsStore=(0,Q.default)({getState:d.getState,subscribe:d.subscribe,setState:u,destroy:u})}}return a.actions.setFrameworkInfo({type:"react-web",version:w.default.version,sdkVersion:process.env.REACT_SDK_VERSION}),a},[e,r,s,o,i]);return(0,w.useEffect)(()=>{if(we&&c){let a=()=>n.actions.leave();return window.addEventListener("unload",a),()=>{window.removeEventListener("unload",a)}}return()=>{}},[c,n]),w.default.createElement(W.Provider,{value:n},t)},m=Pe(W),ye=be(W),I=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.store},G=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.notifications},H=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.actions},oe=t=>{let e=(0,w.useContext)(W),[r,s]=(0,w.useState)(null);if(!e)throw new Error(F);return(0,w.useEffect)(()=>e.notifications?e.notifications.onNotification(i=>{s(i)},t):void 0,[e.notifications,t]),r};var Z=require("react"),B=require("@100mslive/hms-video-store");var se=require("react"),Ee=require("@100mslive/hms-video-store");var wt="react-sdk",v=(t,e)=>y.e(wt,e,t),Re=t=>{throw t};function X(t){let e=(0,se.useRef)();return(0,se.useEffect)(()=>{e.current=t}),e.current}var vt=["blink"],U=vt.some(t=>{var e,r;return((r=(e=Ee.parsedUserAgent.getEngine())==null?void 0:e.name)==null?void 0:r.toLowerCase())===t}),xe="https://pdf-annotation.100ms.live/generic/web/viewer.html";var ke=({name:t="",token:e,metadata:r,handleError:s=v,initEndpoint:o,initialSettings:i,captureNetworkQualityInPreview:c,asRole:n,autoManageVideo:a,autoManageWakeLock:u,iceServers:l})=>{let d=H(),f=m(B.selectRoomState),S=m(B.selectIsConnectedToRoom)||!1,h=f===B.HMSRoomState.Preview,P=(0,Z.useMemo)(()=>({userName:t,authToken:e,metaData:r,rememberDeviceSelection:!0,settings:i,initEndpoint:o,asRole:n,captureNetworkQualityInPreview:c,autoManageVideo:a,autoManageWakeLock:u,iceServers:l}),[t,e,r,o,i,c,n,a,u,l]),D=(0,Z.useCallback)(()=>p(null,null,function*(){if(e)try{(S||f!==B.HMSRoomState.Disconnected)&&(yield d.leave().catch(()=>{})),yield d.preview(P)}catch(T){s(T,"preview")}}),[e,S,f,d,P,s]),x=(0,Z.useCallback)(()=>p(null,null,function*(){if(e)try{yield d.join(P)}catch(T){s(T,"join")}}),[d,P,s,e]);return{enableJoin:h,join:x,isConnected:S,preview:D}};var de=require("react"),A=require("@100mslive/hms-video-store");var Ie=(t=v)=>{let e=m(A.selectIsLocalAudioEnabled),r=m(A.selectIsLocalVideoEnabled),o=m(A.selectIsInPreview)?A.selectIsAllowedToPreviewMedia:A.selectIsAllowedToPublish,i=m(o),c=H(),n=(0,de.useCallback)(()=>p(null,null,function*(){try{yield c.setLocalAudioEnabled(!e)}catch(u){t(u,"toggleAudio")}}),[c,e,t]),a=(0,de.useCallback)(()=>p(null,null,function*(){try{yield c.setLocalVideoEnabled(!r)}catch(u){t(u,"toggleVideo")}}),[c,r,t]);return{isLocalAudioEnabled:e,isLocalVideoEnabled:r,toggleAudio:i!=null&&i.audio?n:void 0,toggleVideo:i!=null&&i.video?a:void 0}};var V=require("react"),Ae=require("@100mslive/hms-video-store");var Ce=({trackId:t,attach:e})=>{let r=H(),s=(0,V.useRef)(null),o=m((0,Ae.selectVideoTrackByID)(t)),i=(0,V.useRef)(),c=(0,V.useCallback)(n=>{n&&(s.current=n)},[]);return(0,V.useEffect)(()=>{i.current?o!=null&&o.id&&i.current!==(o==null?void 0:o.id)&&p(null,null,function*(){if(s.current)try{y.d("detaching because different track is passed"),yield r.detachVideo(i.current,s.current)}catch(n){y.w("detach video error for track",i.current,n)}i.current=o==null?void 0:o.id}):i.current=o==null?void 0:o.id},[o==null?void 0:o.id,r]),(0,V.useEffect)(()=>{p(null,null,function*(){o!=null&&o.id&&s.current&&(e!==!1?yield r.attachVideo(o.id,s.current):yield r.detachVideo(o.id,s.current))})},[o,e,r]),(0,V.useEffect)(()=>()=>{p(null,null,function*(){if(s.current&&o)try{yield r.detachVideo(o.id,s.current)}catch(n){y.w("detach video error for track",o.id,n)}})},[]),{videoRef:c}};var Ve=require("react"),q=require("@100mslive/hms-video-store");var z=(t=v)=>{var c,n;let e=H(),r=m(q.selectIsLocalScreenShared),s=m(q.selectPeerScreenSharing),o=m((0,q.selectScreenSharesByPeerId)(s==null?void 0:s.id)),i=(0,Ve.useCallback)(a=>p(null,null,function*(){try{yield e.setScreenShareEnabled(!r,a)}catch(u){t(u,"toggleScreenShare")}}),[e,r,t]);return{amIScreenSharing:r,screenSharingPeerId:s==null?void 0:s.id,screenSharingPeerName:s==null?void 0:s.name,screenShareVideoTrackId:(c=o==null?void 0:o.video)==null?void 0:c.id,screenShareAudioTrackId:(n=o==null?void 0:o.audio)==null?void 0:n.id,toggleScreenShare:i}};var ie=require("react"),L=require("@100mslive/hms-video-store");var De=(t,e,r)=>p(null,null,function*(){if(e)try{yield t.setRemoteTrackEnabled(e.id,!e.enabled)}catch(s){r(s,"remoteToggle")}}),Ne=(t,e,r=v)=>{let s=H(),o=m((0,L.selectAudioTrackByID)(t)),i=m((0,L.selectVideoTrackByID)(e)),c=m((0,L.selectAudioTrackVolume)(o==null?void 0:o.id)),n=m(L.selectPermissions),a=i!=null&&i.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,u=o!=null&&o.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,l=(0,ie.useCallback)(()=>p(null,null,function*(){yield De(s,o,r)}),[s,o,r]),d=(0,ie.useCallback)(()=>p(null,null,function*(){yield De(s,i,r)}),[s,r,i]),f=(0,ie.useCallback)(S=>{o&&s.setVolume(S,o.id)},[s,o]);return{isAudioEnabled:!!(o!=null&&o.enabled),isVideoEnabled:!!(i!=null&&i.enabled),volume:c,toggleAudio:o&&u?l:void 0,toggleVideo:(i==null?void 0:i.source)==="regular"&&a?d:void 0,setVolume:o?f:void 0}};var ae=require("react"),We=require("react-resize-detector"),Be=require("@100mslive/hms-video-store");var Tt=(t,e,r)=>t.reduce((s,o,i)=>{let c=Math.floor(i/e);return c>0&&r||(s[c]||(s[c]=[]),s[c].push(o)),s},[]),Le=({elements:t,tilesInFirstPage:e,onlyOnePage:r,isLastPageDifferentFromFirstPage:s,defaultWidth:o,defaultHeight:i,lastPageWidth:c,lastPageHeight:n})=>{let a=Tt(t,e,r);return a.map((u,l)=>u.map(d=>{let f=l===a.length-1,S=s&&f?c:o,h=s&&f?n:i;return K(N({},d),{height:h,width:S})}))};function yt(t){if(t.length===0)return null;let e={},r=t[0],s=1;for(let o=0;o<t.length;o++){let i=t[o];e[i]===null?e[i]=1:e[i]++,e[i]>s&&(r=i,s=e[i])}return r}var Oe=t=>yt(t.filter(e=>{var r,s;return((r=e.track)==null?void 0:r.width)&&((s=e.track)==null?void 0:s.height)}).map(e=>{var o,i;let r=(o=e.track)==null?void 0:o.width,s=(i=e.track)==null?void 0:i.height;return(r||1)/(s||1)})),me=(t,e,r,s,o)=>{if(t<0||e<0)throw new Error("Container must have a non-negative area");if(r<1||!Number.isInteger(r))throw new Error("Number of shapes to place must be a positive integer");let i=s&&o&&s/o;if(i!==void 0&&isNaN(i))throw new Error("Aspect ratio must be a number");let c={area:0,cols:0,rows:0,width:0,height:0},n=r,a=-1;if(i!==void 0)for(let u=n;u>0;u+=a){let l=Math.ceil(r/u),d=t/(u*i),f=e/l,S,h;d<=f?(S=t/u,h=S/i):(h=e/l,S=h*i);let P=S*h;P>c.area&&(c={area:P,width:S,height:h,rows:l,cols:u})}return c},Et=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(t/e)/(o.width/o.height))),s),S=t/f,h=S/(o.width/o.height);h>e&&(h=e,S=h/(o.height/o.width));let P=Math.floor(e/h);if(c=h,i=S,l=Math.min(r,P*f),d=r%(P*f),u=d>0&&r>P*f,u){let D=Math.min(Math.ceil(Math.sqrt(d*(t/e)/(o.width/o.height))),s),x=t/D,T=x/(o.width/o.height);T>e&&(T=e,x=T/(o.height/o.width)),a=T,n=x}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},Rt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,{width:f,height:S}=me(t,e,Math.min(r,s),o.width,o.height);if(i=f,c=S,l=Math.min(r,s),d=r%s,u=d>0&&r>s,u){let{width:h,height:P}=me(t,e,d,o.width,o.height);n=h,a=P}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},xt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(o.width/o.height)/(t/e))),s),S=e/f,h=S*(o.width/o.height),P=Math.floor(t/h);if(i=h,c=S,l=Math.min(r,f*P),d=r%(f*P),u=d>0&&r>f*P,u){let D=Math.min(Math.ceil(Math.sqrt(d*(o.width/o.height)/(t/e))),s),x=e/D,T=x*(o.width/o.height);a=x,n=T}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}};function Fe({count:t,parentWidth:e,parentHeight:r,maxTileCount:s,maxRowCount:o,maxColCount:i,aspectRatio:c}){let n=0,a=0,u=0,l=0,d=!1,f=0;if(t===0)return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d};if(s)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=Rt({parentWidth:e,parentHeight:r,count:t,maxCount:s,aspectRatio:c}));else if(o)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=xt({parentWidth:e,parentHeight:r,count:t,maxCount:o,aspectRatio:c}));else if(i)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=Et({parentWidth:e,parentHeight:r,count:t,maxCount:i,aspectRatio:c}));else{let{width:S,height:h}=me(e,r,t,c.width,c.height);n=S,a=h,f=t}return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}}var ne=(t,e,r,s=!0)=>{if(!t||!e||!r)return[];let o=[];for(let i of t)if(i.videoTrack===void 0&&i.audioTrack&&e[i.audioTrack]?o.push({peer:i}):i.videoTrack&&e[i.videoTrack]?o.push({track:e[i.videoTrack],peer:i}):s||o.push({peer:i}),i.auxiliaryTracks.length>0&&i.auxiliaryTracks.forEach(n=>{let a=e[n];(a==null?void 0:a.type)==="video"&&(a==null?void 0:a.source)==="regular"&&o.push({track:a,peer:i})}),r(i)&&i.auxiliaryTracks.length>0){let n=i.auxiliaryTracks.find(a=>{let u=e[a];return(u==null?void 0:u.type)==="video"&&(u==null?void 0:u.source)==="screen"});n&&o.push({track:e[n],peer:i})}return o};var kt={aspectRatio:{width:1,height:1}},Ge=({peers:t,maxTileCount:e,maxColCount:r,maxRowCount:s,includeScreenShareForPeer:o=()=>!1,aspectRatio:i=kt.aspectRatio,filterNonPublishingPeers:c=!0,offsetY:n=0})=>{let{width:a=0,height:u=0,ref:l}=(0,We.useResizeDetector)(),f=I().getState(Be.selectTracksMap),S=ne(t,f,o,c),h=(0,ae.useMemo)(()=>i||{width:Oe(S)||1,height:1},[i,S]),P=S.length,{tilesInFirstPage:D,defaultWidth:x,defaultHeight:T,lastPageWidth:Se,lastPageHeight:pe,isLastPageDifferentFromFirstPage:he}=(0,ae.useMemo)(()=>Fe({count:P,parentWidth:Math.floor(a),parentHeight:Math.floor(u)-Math.min(u,n),maxTileCount:e,maxRowCount:s,maxColCount:r,aspectRatio:h}),[P,a,u,e,s,r,h,n]);return{pagesWithTiles:(0,ae.useMemo)(()=>Le({elements:S,tilesInFirstPage:D,onlyOnePage:!1,isLastPageDifferentFromFirstPage:he,defaultWidth:x,defaultHeight:T,lastPageWidth:Se,lastPageHeight:pe}),[S,D,he,x,T,Se,pe]),ref:l}};var Ue=require("react"),qe=require("@100mslive/hms-video-store");function ze({trackId:t,getStyle:e,ref:r}){let s=I();(0,Ue.useEffect)(()=>s.subscribe(o=>{if(!r.current)return;let i=e(o);for(let c in i)r.current.style[c]=i[c]},(0,qe.selectTrackAudioByID)(t)),[e,r,s,t])}var je=require("react"),b=require("@100mslive/hms-video-store");var _e=(t=v)=>{let e=H(),r=m(b.selectDevices),s=m(b.selectLocalMediaSettings),i=m(b.selectIsInPreview)?b.selectIsAllowedToPreviewMedia:b.selectIsAllowedToPublish,c=m(i),n={[b.DeviceType.audioOutput]:s.audioOutputDeviceId},a={[b.DeviceType.audioOutput]:r.audioOutput};c.video&&(a[b.DeviceType.videoInput]=r.videoInput,n[b.DeviceType.videoInput]=s.videoInputDeviceId),c.audio&&(a[b.DeviceType.audioInput]=r.audioInput,n[b.DeviceType.audioInput]=s.audioInputDeviceId);let u=(0,je.useCallback)(f=>p(null,[f],function*({deviceType:l,deviceId:d}){try{switch(l){case b.DeviceType.audioInput:yield e.setAudioSettings({deviceId:d});break;case b.DeviceType.videoInput:yield e.setVideoSettings({deviceId:d});break;case b.DeviceType.audioOutput:yield e.setAudioOutputDevice(d);break}}catch(S){t(S,"updateDevices")}}),[t,e]);return{allDevices:a,selectedDeviceIDs:n,updateDevice:u}};var $e=require("react"),O=require("@100mslive/hms-video-store");var Je=t=>!t||!Array.isArray(t)||t.length===0?{}:t.reduce((e,r)=>(r.roleName&&(e[r.roleName]||(e[r.roleName]=[]),e[r.roleName].push(r)),e),{});var Ye=()=>{let t=m(O.selectIsConnectedToRoom),e=m(t?O.selectPeers:O.selectRemotePeers),r=m(O.selectPeerCount),s=(0,$e.useMemo)(()=>Je(e),[e]);return{roles:Object.keys(s),participantsByRoles:s,peerCount:r,isConnected:t}};var j=require("@100mslive/hms-video-store");var Ke=()=>{let t=m(j.selectRecordingState),e=m(j.selectRTMPState),r=m(j.selectHLSState),s=t.server.running,o=t.browser.running,i=t.hls.running,c=r.running||e.running,n=s||o||i;return{isServerRecordingOn:s,isBrowserRecordingOn:o,isHLSRecordingOn:i,isStreamingOn:c,isHLSRunning:r.running,isRTMPRunning:e.running,isRecordingOn:n}};var _=require("react"),Qe=require("@100mslive/hms-video-store");var Xe=()=>{let t=oe(Qe.HMSNotificationTypes.ERROR),[e,r]=(0,_.useState)(""),s=H(),o=(0,_.useCallback)(()=>p(null,null,function*(){yield s.unblockAudio()}),[s]);return(0,_.useEffect)(()=>{(t==null?void 0:t.data.code)===3008&&r(t==null?void 0:t.data.message)},[t]),{error:e,unblockAudio:o,resetError:()=>r("")}};var ee=require("react"),Ze=require("@100mslive/hms-video-store");var It=(t,e)=>e?JSON.stringify(t||""):t,et=({type:t,json:e=!0,onEvent:r,handleError:s=v})=>{let o=H(),i=G();return(0,ee.useEffect)(()=>{o.ignoreMessageTypes([t])},[o,t]),(0,ee.useEffect)(()=>i?i.onNotification(a=>{let u=a.data;if(u&&u.type===t)try{let l=e?JSON.parse(u.message):u.message;r==null||r(l)}catch(l){s(l,"handleCustomEvent")}},Ze.HMSNotificationTypes.NEW_MESSAGE):void 0,[i,t,e,r,s]),{sendEvent:(0,ee.useCallback)((n,a)=>p(null,null,function*(){try{let u=It(n,e);a&&Array.isArray(a==null?void 0:a.roleNames)?yield o.sendGroupMessage(u,a.roleNames,t):typeof(a==null?void 0:a.peerId)=="string"?yield o.sendDirectMessage(u,a.peerId,t):yield o.sendBroadcastMessage(u,t),r==null||r(n)}catch(u){s(u,"sendCustomEvent")}}),[o,s,r,t,e])}};var E=require("@100mslive/hms-video-store");var tt=t=>{var n;let e=m(E.selectIsConnectedToRoom),r=m(E.selectPeerCount),s=m(E.selectAvailableRoleNames),o=m(e?E.selectPeers:E.selectRemotePeers),i=Array.from(new Set(o.map(a=>a.roleName))),c=I();if((n=t==null?void 0:t.metadata)!=null&&n.isHandRaised&&(o=o.filter(a=>c.getState((0,E.selectPeerMetadata)(a.id)).isHandRaised)),t!=null&&t.role&&s.includes(t.role)&&(o=o.filter(a=>a.roleName===t.role)),t!=null&&t.search){let a=t.search.toLowerCase();o=o.filter(u=>{var l;return((l=u.roleName)==null?void 0:l.toLowerCase().includes(a))||u.name.toLowerCase().includes(a)})}return{participants:o,isConnected:e,peerCount:r,rolesWithParticipants:i}};var k=require("react");var rt=t=>{let e=(0,k.useRef)(null),[r,s]=(0,k.useState)(!1),o=(0,k.useCallback)(()=>{throw new Error("unable to start screen share")},[]),i=(0,k.useRef)(!1),{amIScreenSharing:c,toggleScreenShare:n}=z(o),a=X(c),u=(0,k.useCallback)(()=>p(null,null,function*(){c&&(yield n==null?void 0:n(),e.current=null)}),[c,n]),l=(0,k.useCallback)(d=>p(null,null,function*(){if(!i.current){if(!d)throw new Error("URL not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=d,i.current=!0,s(!0),yield n==null?void 0:n({forceCurrentTab:U,cropElement:e.current,preferCurrentTab:U})}}),[c,n]);return(0,k.useEffect)(()=>{a&&!c&&(t==null||t(),e.current&&(e.current.src=""),i.current=!1,s(!1))},[c,a,t]),{startEmbedShare:l,stopEmbedShare:u,iframeRef:e,isEmbedShareInProgress:r}};var R=require("react");var ot=t=>{let e=(0,R.useRef)(null),[r,s]=(0,R.useState)(!1),o=(0,R.useCallback)(()=>{throw new Error("unable to start screen share")},[]),i=(0,R.useRef)(!1),{amIScreenSharing:c,toggleScreenShare:n}=z(o),a=X(c),u=(0,R.useCallback)(f=>{var S;e.current&&((S=e.current.contentWindow)==null||S.postMessage({theme:2,file:f},"*"))},[]),l=(0,R.useCallback)(()=>p(null,null,function*(){c&&(yield n==null?void 0:n())}),[c,n]),d=(0,R.useCallback)(f=>p(null,null,function*(){if(i.current)return;if(!f)throw new Error("File or url not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=`${xe}${typeof f=="string"?`?file=${f}`:""}`,e.current.onload=()=>{requestAnimationFrame(()=>{f instanceof File&&u(f)})},i.current=!0,s(!0);let S=window.self!==window.top;yield n==null?void 0:n({forceCurrentTab:U&&!S,cropElement:e.current,preferCurrentTab:U&&!S})}),[c,u,n]);return(0,R.useEffect)(()=>{a&&!c&&(t==null||t(),e.current&&e.current.removeAttribute("src"),i.current=!1,s(!1))},[c,a,t]),{startPDFShare:d,stopPDFShare:l,iframeRef:e,isPDFShareInProgress:r}};var te=require("react");var st=t=>t.reduce((e,r)=>(e[r.id]=r,e),{}),it=t=>{let e=H(),r=(0,te.useRef)(e.getPeerListIterator(t)),[s,o]=(0,te.useState)({}),[i,c]=(0,te.useState)(0);return{loadPeers:()=>r.current.findPeers().then(n=>{o(st(n)),c(r.current.getTotal())}),loadMorePeers:()=>r.current.next().then(n=>{o(a=>N(N({},a),st(n))),c(r.current.getTotal())}),hasNext:()=>r.current.hasNext(),total:i,peers:Object.values(s)}};var J=require("react"),C=require("@100mslive/hms-video-store");var nt=(t=!1)=>{var S,h;let e=m(C.selectIsConnectedToRoom),r=(S=m(C.selectLocalPeer))==null?void 0:S.customerUserId,s=m(C.selectWhiteboard),o=m((0,C.selectAppData)("disableNotifications")),i=!!(s!=null&&s.open),c=(s==null?void 0:s.owner)===r,n=H(),[a,u]=(0,J.useState)(!1),l=(h=m(C.selectPermissions))==null?void 0:h.whiteboard,d=!!(l!=null&&l.includes("admin"));(0,J.useEffect)(()=>{e&&u(n.interactivityCenter.whiteboard.isEnabled)},[e,n]);let f=(0,J.useCallback)(()=>p(null,null,function*(){!e||!d||(i?c&&(yield n.interactivityCenter.whiteboard.close()):yield n.interactivityCenter.whiteboard.open())}),[n,c,d,i,e]);return{open:i,token:s==null?void 0:s.token,endpoint:s==null?void 0:s.addr,isOwner:c,isAdmin:d,zoomToContent:o||t,toggle:a&&d?f:void 0}};var fe=require("react"),at=require("@100mslive/hms-video-store");var ct=()=>{let t=I(),e=(0,fe.useCallback)(()=>p(null,null,function*(){if(!("Notification"in window)||navigator.webdriver){console.debug("Request Permsissions : Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="granted"||(Notification==null?void 0:Notification.permission)==="denied")return;let s=t.subscribe(o=>p(null,null,function*(){o&&o!=="__internal_recorder"&&(yield Notification.requestPermission(),s==null||s())}),at.selectLocalPeerRoleName)}),[t]),r=(0,fe.useCallback)((s,o)=>{if(!("Notification"in window)){console.debug("Show Notifications: Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="denied"||document.visibilityState==="visible"&&document.hasFocus())return;let i=new Notification(s,o),c=()=>{document.visibilityState==="visible"&&document.hasFocus()&&(i==null||i.close(),document.removeEventListener("visibilitychange",c))};document.addEventListener("visibilitychange",c)},[]);return{requestPermission:e,showNotification:r}};var ut=require("react"),lt=require("@100mslive/hms-video-store");var dt=({onTranscript:t,handleError:e=v})=>{let r="hms_transcript",s=G();(0,ut.useEffect)(()=>s?s.onNotification(i=>{let c=i.data;if(c&&c.type===r)try{let a=JSON.parse(c.message).results;t==null||t(a)}catch(n){e(n,"handleCaptionEvent")}},lt.HMSNotificationTypes.NEW_MESSAGE):void 0,[s,r,e,t])};var $=require("@100mslive/hms-video-store");var mt=()=>{let t=H(),{audioMode:e}=m($.selectLocalMediaSettings),r=e===$.HMSAudioMode.MUSIC;return{toggleMusicMode:()=>p(null,null,function*(){return yield t.setAudioSettings({audioMode:r?$.HMSAudioMode.VOICE:$.HMSAudioMode.MUSIC})}),isMusicModeEnabled:r}};M(g,require("@100mslive/hms-video-store"),module.exports);
2
+ at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;function Pe(t){return(r,s=le.default)=>{r||y.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=(0,ue.useContext)(t);if(!o)throw new Error(F);let i=o.store;return i(r,s)}}function be(t){return(r,s=le.default)=>{r||y.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=(0,ue.useContext)(t);if(!o)throw new Error(F);let i=o.statsStore;return i==null?void 0:i(r,s)}}var we=typeof window!="undefined";var W=(0,w.createContext)(null),Te=({children:t,actions:e,store:r,notifications:s,stats:o,isHMSStatsOn:i=!1,leaveOnUnload:c=!0})=>{let n=(0,w.useMemo)(()=>{let a,u=()=>{throw new Error("modifying store is not allowed")};if(e&&r)a={actions:e,store:(0,Q.default)(K(N({},r),{setState:u,destroy:u}))},s&&(a.notifications=s),o&&(a.statsStore=(0,Q.default)({getState:o.getState,subscribe:o.subscribe,setState:u,destroy:u}));else{let l=new ve.HMSReactiveStore;if(a={actions:l.getActions(),store:(0,Q.default)(K(N({},l.getStore()),{setState:u,destroy:u})),notifications:l.getNotifications()},i){let d=l.getStats();a.statsStore=(0,Q.default)({getState:d.getState,subscribe:d.subscribe,setState:u,destroy:u})}}return a.actions.setFrameworkInfo({type:"react-web",version:w.default.version,sdkVersion:process.env.REACT_SDK_VERSION}),a},[e,r,s,o,i]);return(0,w.useEffect)(()=>{if(we&&c){let a=()=>n.actions.leave();return window.addEventListener("unload",a),()=>{window.removeEventListener("unload",a)}}return()=>{}},[c,n]),w.default.createElement(W.Provider,{value:n},t)},m=Pe(W),ye=be(W),I=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.store},G=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.notifications},H=()=>{let t=(0,w.useContext)(W);if(!t)throw new Error(F);return t.actions},oe=t=>{let e=(0,w.useContext)(W),[r,s]=(0,w.useState)(null);if(!e)throw new Error(F);return(0,w.useEffect)(()=>e.notifications?e.notifications.onNotification(i=>{s(i)},t):void 0,[e.notifications,t]),r};var Z=require("react"),B=require("@100mslive/hms-video-store");var se=require("react"),Ee=require("@100mslive/hms-video-store");var wt="react-sdk",v=(t,e)=>y.e(wt,e,t),Re=t=>{throw t};function X(t){let e=(0,se.useRef)();return(0,se.useEffect)(()=>{e.current=t}),e.current}var vt=["blink"],U=vt.some(t=>{var e,r;return((r=(e=Ee.parsedUserAgent.getEngine())==null?void 0:e.name)==null?void 0:r.toLowerCase())===t}),xe="https://pdf-annotation.100ms.live/generic/web/viewer.html";var ke=({name:t="",token:e,metadata:r,handleError:s=v,initEndpoint:o,initialSettings:i,captureNetworkQualityInPreview:c,asRole:n,autoManageVideo:a,autoManageWakeLock:u,iceServers:l})=>{let d=H(),f=m(B.selectRoomState),S=m(B.selectIsConnectedToRoom)||!1,h=f===B.HMSRoomState.Preview,P=(0,Z.useMemo)(()=>({userName:t,authToken:e,metaData:r,rememberDeviceSelection:!0,settings:i,initEndpoint:o,asRole:n,captureNetworkQualityInPreview:c,autoManageVideo:a,autoManageWakeLock:u,iceServers:l}),[t,e,r,o,i,c,n,a,u,l]),D=(0,Z.useCallback)(()=>p(void 0,null,function*(){if(e)try{(S||f!==B.HMSRoomState.Disconnected)&&(yield d.leave().catch(()=>{})),yield d.preview(P)}catch(T){s(T,"preview")}}),[e,S,f,d,P,s]),x=(0,Z.useCallback)(()=>p(void 0,null,function*(){if(e)try{yield d.join(P)}catch(T){s(T,"join")}}),[d,P,s,e]);return{enableJoin:h,join:x,isConnected:S,preview:D}};var de=require("react"),A=require("@100mslive/hms-video-store");var Ie=(t=v)=>{let e=m(A.selectIsLocalAudioEnabled),r=m(A.selectIsLocalVideoEnabled),o=m(A.selectIsInPreview)?A.selectIsAllowedToPreviewMedia:A.selectIsAllowedToPublish,i=m(o),c=H(),n=(0,de.useCallback)(()=>p(void 0,null,function*(){try{yield c.setLocalAudioEnabled(!e)}catch(u){t(u,"toggleAudio")}}),[c,e,t]),a=(0,de.useCallback)(()=>p(void 0,null,function*(){try{yield c.setLocalVideoEnabled(!r)}catch(u){t(u,"toggleVideo")}}),[c,r,t]);return{isLocalAudioEnabled:e,isLocalVideoEnabled:r,toggleAudio:i!=null&&i.audio?n:void 0,toggleVideo:i!=null&&i.video?a:void 0}};var V=require("react"),Ae=require("@100mslive/hms-video-store");var Ce=({trackId:t,attach:e})=>{let r=H(),s=(0,V.useRef)(null),o=m((0,Ae.selectVideoTrackByID)(t)),i=(0,V.useRef)(),c=(0,V.useCallback)(n=>{n&&(s.current=n)},[]);return(0,V.useEffect)(()=>{i.current?o!=null&&o.id&&i.current!==(o==null?void 0:o.id)&&p(void 0,null,function*(){if(s.current)try{y.d("detaching because different track is passed"),yield r.detachVideo(i.current,s.current)}catch(n){y.w("detach video error for track",i.current,n)}i.current=o==null?void 0:o.id}):i.current=o==null?void 0:o.id},[o==null?void 0:o.id,r]),(0,V.useEffect)(()=>{p(void 0,null,function*(){o!=null&&o.id&&s.current&&(e!==!1?yield r.attachVideo(o.id,s.current):yield r.detachVideo(o.id,s.current))})},[o,e,r]),(0,V.useEffect)(()=>()=>{p(void 0,null,function*(){if(s.current&&o)try{yield r.detachVideo(o.id,s.current)}catch(n){y.w("detach video error for track",o.id,n)}})},[]),{videoRef:c}};var Ve=require("react"),q=require("@100mslive/hms-video-store");var z=(t=v)=>{var c,n;let e=H(),r=m(q.selectIsLocalScreenShared),s=m(q.selectPeerScreenSharing),o=m((0,q.selectScreenSharesByPeerId)(s==null?void 0:s.id)),i=(0,Ve.useCallback)(a=>p(void 0,null,function*(){try{yield e.setScreenShareEnabled(!r,a)}catch(u){t(u,"toggleScreenShare")}}),[e,r,t]);return{amIScreenSharing:r,screenSharingPeerId:s==null?void 0:s.id,screenSharingPeerName:s==null?void 0:s.name,screenShareVideoTrackId:(c=o==null?void 0:o.video)==null?void 0:c.id,screenShareAudioTrackId:(n=o==null?void 0:o.audio)==null?void 0:n.id,toggleScreenShare:i}};var ie=require("react"),L=require("@100mslive/hms-video-store");var De=(t,e,r)=>p(void 0,null,function*(){if(e)try{yield t.setRemoteTrackEnabled(e.id,!e.enabled)}catch(s){r(s,"remoteToggle")}}),Ne=(t,e,r=v)=>{let s=H(),o=m((0,L.selectAudioTrackByID)(t)),i=m((0,L.selectVideoTrackByID)(e)),c=m((0,L.selectAudioTrackVolume)(o==null?void 0:o.id)),n=m(L.selectPermissions),a=i!=null&&i.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,u=o!=null&&o.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,l=(0,ie.useCallback)(()=>p(void 0,null,function*(){yield De(s,o,r)}),[s,o,r]),d=(0,ie.useCallback)(()=>p(void 0,null,function*(){yield De(s,i,r)}),[s,r,i]),f=(0,ie.useCallback)(S=>{o&&s.setVolume(S,o.id)},[s,o]);return{isAudioEnabled:!!(o!=null&&o.enabled),isVideoEnabled:!!(i!=null&&i.enabled),volume:c,toggleAudio:o&&u?l:void 0,toggleVideo:(i==null?void 0:i.source)==="regular"&&a?d:void 0,setVolume:o?f:void 0}};var ae=require("react"),We=require("react-resize-detector"),Be=require("@100mslive/hms-video-store");var Tt=(t,e,r)=>t.reduce((s,o,i)=>{let c=Math.floor(i/e);return c>0&&r||(s[c]||(s[c]=[]),s[c].push(o)),s},[]),Le=({elements:t,tilesInFirstPage:e,onlyOnePage:r,isLastPageDifferentFromFirstPage:s,defaultWidth:o,defaultHeight:i,lastPageWidth:c,lastPageHeight:n})=>{let a=Tt(t,e,r);return a.map((u,l)=>u.map(d=>{let f=l===a.length-1,S=s&&f?c:o,h=s&&f?n:i;return K(N({},d),{height:h,width:S})}))};function yt(t){if(t.length===0)return null;let e={},r=t[0],s=1;for(let o=0;o<t.length;o++){let i=t[o];e[i]===null?e[i]=1:e[i]++,e[i]>s&&(r=i,s=e[i])}return r}var Oe=t=>yt(t.filter(e=>{var r,s;return((r=e.track)==null?void 0:r.width)&&((s=e.track)==null?void 0:s.height)}).map(e=>{var o,i;let r=(o=e.track)==null?void 0:o.width,s=(i=e.track)==null?void 0:i.height;return(r||1)/(s||1)})),me=(t,e,r,s,o)=>{if(t<0||e<0)throw new Error("Container must have a non-negative area");if(r<1||!Number.isInteger(r))throw new Error("Number of shapes to place must be a positive integer");let i=s&&o&&s/o;if(i!==void 0&&isNaN(i))throw new Error("Aspect ratio must be a number");let c={area:0,cols:0,rows:0,width:0,height:0},n=r,a=-1;if(i!==void 0)for(let u=n;u>0;u+=a){let l=Math.ceil(r/u),d=t/(u*i),f=e/l,S,h;d<=f?(S=t/u,h=S/i):(h=e/l,S=h*i);let P=S*h;P>c.area&&(c={area:P,width:S,height:h,rows:l,cols:u})}return c},Et=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(t/e)/(o.width/o.height))),s),S=t/f,h=S/(o.width/o.height);h>e&&(h=e,S=h/(o.height/o.width));let P=Math.floor(e/h);if(c=h,i=S,l=Math.min(r,P*f),d=r%(P*f),u=d>0&&r>P*f,u){let D=Math.min(Math.ceil(Math.sqrt(d*(t/e)/(o.width/o.height))),s),x=t/D,T=x/(o.width/o.height);T>e&&(T=e,x=T/(o.height/o.width)),a=T,n=x}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},Rt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,{width:f,height:S}=me(t,e,Math.min(r,s),o.width,o.height);if(i=f,c=S,l=Math.min(r,s),d=r%s,u=d>0&&r>s,u){let{width:h,height:P}=me(t,e,d,o.width,o.height);n=h,a=P}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},xt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(o.width/o.height)/(t/e))),s),S=e/f,h=S*(o.width/o.height),P=Math.floor(t/h);if(i=h,c=S,l=Math.min(r,f*P),d=r%(f*P),u=d>0&&r>f*P,u){let D=Math.min(Math.ceil(Math.sqrt(d*(o.width/o.height)/(t/e))),s),x=e/D,T=x*(o.width/o.height);a=x,n=T}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}};function Fe({count:t,parentWidth:e,parentHeight:r,maxTileCount:s,maxRowCount:o,maxColCount:i,aspectRatio:c}){let n=0,a=0,u=0,l=0,d=!1,f=0;if(t===0)return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d};if(s)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=Rt({parentWidth:e,parentHeight:r,count:t,maxCount:s,aspectRatio:c}));else if(o)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=xt({parentWidth:e,parentHeight:r,count:t,maxCount:o,aspectRatio:c}));else if(i)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=Et({parentWidth:e,parentHeight:r,count:t,maxCount:i,aspectRatio:c}));else{let{width:S,height:h}=me(e,r,t,c.width,c.height);n=S,a=h,f=t}return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}}var ne=(t,e,r,s=!0)=>{if(!t||!e||!r)return[];let o=[];for(let i of t)if(i.videoTrack===void 0&&i.audioTrack&&e[i.audioTrack]?o.push({peer:i}):i.videoTrack&&e[i.videoTrack]?o.push({track:e[i.videoTrack],peer:i}):s||o.push({peer:i}),i.auxiliaryTracks.length>0&&i.auxiliaryTracks.forEach(n=>{let a=e[n];(a==null?void 0:a.type)==="video"&&(a==null?void 0:a.source)==="regular"&&o.push({track:a,peer:i})}),r(i)&&i.auxiliaryTracks.length>0){let n=i.auxiliaryTracks.find(a=>{let u=e[a];return(u==null?void 0:u.type)==="video"&&(u==null?void 0:u.source)==="screen"});n&&o.push({track:e[n],peer:i})}return o};var kt={aspectRatio:{width:1,height:1}},Ge=({peers:t,maxTileCount:e,maxColCount:r,maxRowCount:s,includeScreenShareForPeer:o=()=>!1,aspectRatio:i=kt.aspectRatio,filterNonPublishingPeers:c=!0,offsetY:n=0})=>{let{width:a=0,height:u=0,ref:l}=(0,We.useResizeDetector)(),f=I().getState(Be.selectTracksMap),S=ne(t,f,o,c),h=(0,ae.useMemo)(()=>i||{width:Oe(S)||1,height:1},[i,S]),P=S.length,{tilesInFirstPage:D,defaultWidth:x,defaultHeight:T,lastPageWidth:Se,lastPageHeight:pe,isLastPageDifferentFromFirstPage:he}=(0,ae.useMemo)(()=>Fe({count:P,parentWidth:Math.floor(a),parentHeight:Math.floor(u)-Math.min(u,n),maxTileCount:e,maxRowCount:s,maxColCount:r,aspectRatio:h}),[P,a,u,e,s,r,h,n]);return{pagesWithTiles:(0,ae.useMemo)(()=>Le({elements:S,tilesInFirstPage:D,onlyOnePage:!1,isLastPageDifferentFromFirstPage:he,defaultWidth:x,defaultHeight:T,lastPageWidth:Se,lastPageHeight:pe}),[S,D,he,x,T,Se,pe]),ref:l}};var Ue=require("react"),qe=require("@100mslive/hms-video-store");function ze({trackId:t,getStyle:e,ref:r}){let s=I();(0,Ue.useEffect)(()=>s.subscribe(o=>{if(!r.current)return;let i=e(o);for(let c in i)r.current.style[c]=i[c]},(0,qe.selectTrackAudioByID)(t)),[e,r,s,t])}var je=require("react"),b=require("@100mslive/hms-video-store");var _e=(t=v)=>{let e=H(),r=m(b.selectDevices),s=m(b.selectLocalMediaSettings),i=m(b.selectIsInPreview)?b.selectIsAllowedToPreviewMedia:b.selectIsAllowedToPublish,c=m(i),n={[b.DeviceType.audioOutput]:s.audioOutputDeviceId},a={[b.DeviceType.audioOutput]:r.audioOutput};c.video&&(a[b.DeviceType.videoInput]=r.videoInput,n[b.DeviceType.videoInput]=s.videoInputDeviceId),c.audio&&(a[b.DeviceType.audioInput]=r.audioInput,n[b.DeviceType.audioInput]=s.audioInputDeviceId);let u=(0,je.useCallback)(f=>p(void 0,[f],function*({deviceType:l,deviceId:d}){try{switch(l){case b.DeviceType.audioInput:yield e.setAudioSettings({deviceId:d});break;case b.DeviceType.videoInput:yield e.setVideoSettings({deviceId:d});break;case b.DeviceType.audioOutput:yield e.setAudioOutputDevice(d);break}}catch(S){t(S,"updateDevices")}}),[t,e]);return{allDevices:a,selectedDeviceIDs:n,updateDevice:u}};var $e=require("react"),O=require("@100mslive/hms-video-store");var Je=t=>!t||!Array.isArray(t)||t.length===0?{}:t.reduce((e,r)=>(r.roleName&&(e[r.roleName]||(e[r.roleName]=[]),e[r.roleName].push(r)),e),{});var Ye=()=>{let t=m(O.selectIsConnectedToRoom),e=m(t?O.selectPeers:O.selectRemotePeers),r=m(O.selectPeerCount),s=(0,$e.useMemo)(()=>Je(e),[e]);return{roles:Object.keys(s),participantsByRoles:s,peerCount:r,isConnected:t}};var j=require("@100mslive/hms-video-store");var Ke=()=>{let t=m(j.selectRecordingState),e=m(j.selectRTMPState),r=m(j.selectHLSState),s=t.server.running,o=t.browser.running,i=t.hls.running,c=r.running||e.running,n=s||o||i;return{isServerRecordingOn:s,isBrowserRecordingOn:o,isHLSRecordingOn:i,isStreamingOn:c,isHLSRunning:r.running,isRTMPRunning:e.running,isRecordingOn:n}};var _=require("react"),Qe=require("@100mslive/hms-video-store");var Xe=()=>{let t=oe(Qe.HMSNotificationTypes.ERROR),[e,r]=(0,_.useState)(""),s=H(),o=(0,_.useCallback)(()=>p(void 0,null,function*(){yield s.unblockAudio()}),[s]);return(0,_.useEffect)(()=>{(t==null?void 0:t.data.code)===3008&&r(t==null?void 0:t.data.message)},[t]),{error:e,unblockAudio:o,resetError:()=>r("")}};var ee=require("react"),Ze=require("@100mslive/hms-video-store");var It=(t,e)=>e?JSON.stringify(t||""):t,et=({type:t,json:e=!0,onEvent:r,handleError:s=v})=>{let o=H(),i=G();return(0,ee.useEffect)(()=>{o.ignoreMessageTypes([t])},[o,t]),(0,ee.useEffect)(()=>i?i.onNotification(a=>{let u=a.data;if(u&&u.type===t)try{let l=e?JSON.parse(u.message):u.message;r==null||r(l)}catch(l){s(l,"handleCustomEvent")}},Ze.HMSNotificationTypes.NEW_MESSAGE):void 0,[i,t,e,r,s]),{sendEvent:(0,ee.useCallback)((n,a)=>p(void 0,null,function*(){try{let u=It(n,e);a&&Array.isArray(a==null?void 0:a.roleNames)?yield o.sendGroupMessage(u,a.roleNames,t):typeof(a==null?void 0:a.peerId)=="string"?yield o.sendDirectMessage(u,a.peerId,t):yield o.sendBroadcastMessage(u,t),r==null||r(n)}catch(u){s(u,"sendCustomEvent")}}),[o,s,r,t,e])}};var E=require("@100mslive/hms-video-store");var tt=t=>{var n;let e=m(E.selectIsConnectedToRoom),r=m(E.selectPeerCount),s=m(E.selectAvailableRoleNames),o=m(e?E.selectPeers:E.selectRemotePeers),i=Array.from(new Set(o.map(a=>a.roleName))),c=I();if((n=t==null?void 0:t.metadata)!=null&&n.isHandRaised&&(o=o.filter(a=>c.getState((0,E.selectPeerMetadata)(a.id)).isHandRaised)),t!=null&&t.role&&s.includes(t.role)&&(o=o.filter(a=>a.roleName===t.role)),t!=null&&t.search){let a=t.search.toLowerCase();o=o.filter(u=>{var l;return((l=u.roleName)==null?void 0:l.toLowerCase().includes(a))||u.name.toLowerCase().includes(a)})}return{participants:o,isConnected:e,peerCount:r,rolesWithParticipants:i}};var k=require("react");var rt=t=>{let e=(0,k.useRef)(null),[r,s]=(0,k.useState)(!1),o=(0,k.useCallback)(()=>{throw new Error("unable to start screen share")},[]),i=(0,k.useRef)(!1),{amIScreenSharing:c,toggleScreenShare:n}=z(o),a=X(c),u=(0,k.useCallback)(()=>p(void 0,null,function*(){c&&(yield n==null?void 0:n(),e.current=null)}),[c,n]),l=(0,k.useCallback)(d=>p(void 0,null,function*(){if(!i.current){if(!d)throw new Error("URL not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=d,i.current=!0,s(!0),yield n==null?void 0:n({forceCurrentTab:U,cropElement:e.current,preferCurrentTab:U})}}),[c,n]);return(0,k.useEffect)(()=>{a&&!c&&(t==null||t(),e.current&&(e.current.src=""),i.current=!1,s(!1))},[c,a,t]),{startEmbedShare:l,stopEmbedShare:u,iframeRef:e,isEmbedShareInProgress:r}};var R=require("react");var ot=t=>{let e=(0,R.useRef)(null),[r,s]=(0,R.useState)(!1),o=(0,R.useCallback)(()=>{throw new Error("unable to start screen share")},[]),i=(0,R.useRef)(!1),{amIScreenSharing:c,toggleScreenShare:n}=z(o),a=X(c),u=(0,R.useCallback)(f=>{var S;e.current&&((S=e.current.contentWindow)==null||S.postMessage({theme:2,file:f},"*"))},[]),l=(0,R.useCallback)(()=>p(void 0,null,function*(){c&&(yield n==null?void 0:n())}),[c,n]),d=(0,R.useCallback)(f=>p(void 0,null,function*(){if(i.current)return;if(!f)throw new Error("File or url not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=`${xe}${typeof f=="string"?`?file=${f}`:""}`,e.current.onload=()=>{requestAnimationFrame(()=>{f instanceof File&&u(f)})},i.current=!0,s(!0);let S=window.self!==window.top;yield n==null?void 0:n({forceCurrentTab:U&&!S,cropElement:e.current,preferCurrentTab:U&&!S})}),[c,u,n]);return(0,R.useEffect)(()=>{a&&!c&&(t==null||t(),e.current&&e.current.removeAttribute("src"),i.current=!1,s(!1))},[c,a,t]),{startPDFShare:d,stopPDFShare:l,iframeRef:e,isPDFShareInProgress:r}};var te=require("react");var st=t=>t.reduce((e,r)=>(e[r.id]=r,e),{}),it=t=>{let e=H(),r=(0,te.useRef)(e.getPeerListIterator(t)),[s,o]=(0,te.useState)({}),[i,c]=(0,te.useState)(0);return{loadPeers:()=>r.current.findPeers().then(n=>{o(st(n)),c(r.current.getTotal())}),loadMorePeers:()=>r.current.next().then(n=>{o(a=>N(N({},a),st(n))),c(r.current.getTotal())}),hasNext:()=>r.current.hasNext(),total:i,peers:Object.values(s)}};var J=require("react"),C=require("@100mslive/hms-video-store");var nt=(t=!1)=>{var S,h;let e=m(C.selectIsConnectedToRoom),r=(S=m(C.selectLocalPeer))==null?void 0:S.customerUserId,s=m(C.selectWhiteboard),o=m((0,C.selectAppData)("disableNotifications")),i=!!(s!=null&&s.open),c=(s==null?void 0:s.owner)===r,n=H(),[a,u]=(0,J.useState)(!1),l=(h=m(C.selectPermissions))==null?void 0:h.whiteboard,d=!!(l!=null&&l.includes("admin"));(0,J.useEffect)(()=>{e&&u(n.interactivityCenter.whiteboard.isEnabled)},[e,n]);let f=(0,J.useCallback)(()=>p(void 0,null,function*(){!e||!d||(i?c&&(yield n.interactivityCenter.whiteboard.close()):yield n.interactivityCenter.whiteboard.open())}),[n,c,d,i,e]);return{open:i,token:s==null?void 0:s.token,endpoint:s==null?void 0:s.addr,isOwner:c,isAdmin:d,zoomToContent:o||t,toggle:a&&d?f:void 0}};var fe=require("react"),at=require("@100mslive/hms-video-store");var ct=()=>{let t=I(),e=(0,fe.useCallback)(()=>p(void 0,null,function*(){if(!("Notification"in window)||navigator.webdriver){console.debug("Request Permsissions : Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="granted"||(Notification==null?void 0:Notification.permission)==="denied")return;let s=t.subscribe(o=>p(void 0,null,function*(){o&&o!=="__internal_recorder"&&(yield Notification.requestPermission(),s==null||s())}),at.selectLocalPeerRoleName)}),[t]),r=(0,fe.useCallback)((s,o)=>{if(!("Notification"in window)){console.debug("Show Notifications: Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="denied"||document.visibilityState==="visible"&&document.hasFocus())return;let i=new Notification(s,o),c=()=>{document.visibilityState==="visible"&&document.hasFocus()&&(i==null||i.close(),document.removeEventListener("visibilitychange",c))};document.addEventListener("visibilitychange",c)},[]);return{requestPermission:e,showNotification:r}};var ut=require("react"),lt=require("@100mslive/hms-video-store");var dt=({onTranscript:t,handleError:e=v})=>{let r="hms_transcript",s=G();(0,ut.useEffect)(()=>s?s.onNotification(i=>{let c=i.data;if(c&&c.type===r)try{let a=JSON.parse(c.message).results;t==null||t(a)}catch(n){e(n,"handleCaptionEvent")}},lt.HMSNotificationTypes.NEW_MESSAGE):void 0,[s,r,e,t])};var $=require("@100mslive/hms-video-store");var mt=()=>{let t=H(),{audioMode:e}=m($.selectLocalMediaSettings),r=e===$.HMSAudioMode.MUSIC;return{toggleMusicMode:()=>p(void 0,null,function*(){return yield t.setAudioSettings({audioMode:r?$.HMSAudioMode.VOICE:$.HMSAudioMode.MUSIC})}),isMusicModeEnabled:r}};M(g,require("@100mslive/hms-video-store"),module.exports);
3
3
  //# sourceMappingURL=index.cjs.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/primitives/HmsRoomProvider.ts", "../src/primitives/store.ts", "../src/utils/logger.ts", "../src/utils/isBrowser.ts", "../src/hooks/usePreviewJoin.ts", "../src/utils/commons.ts", "../src/hooks/useAVToggle.ts", "../src/hooks/useVideo.ts", "../src/hooks/useScreenShare.ts", "../src/hooks/useRemoteAVToggle.ts", "../src/hooks/useVideoList.ts", "../src/utils/layout.ts", "../src/hooks/useAudioLevelStyles.ts", "../src/hooks/useDevices.ts", "../src/hooks/useParticipantList.ts", "../src/utils/groupBy.ts", "../src/hooks/useRecordingStreaming.ts", "../src/hooks/useAutoplayError.ts", "../src/hooks/useCustomEvent.ts", "../src/hooks/useParticipants.ts", "../src/hooks/useEmbedShare.ts", "../src/hooks/usePDFShare.ts", "../src/hooks/usePaginatedParticipants.ts", "../src/hooks/useWhiteboard.ts", "../src/hooks/useAwayNotifications.ts", "../src/hooks/useTranscript.ts", "../src/hooks/useAudioMode.tsx"],
4
4
  "sourcesContent": ["export {\n HMSRoomProvider,\n useHMSStore,\n useHMSActions,\n useHMSNotifications,\n useHMSVanillaStore,\n useHMSVanillaNotifications,\n useHMSStatsStore,\n} from './primitives/HmsRoomProvider';\nexport { usePreviewJoin } from './hooks/usePreviewJoin';\nexport { useAVToggle } from './hooks/useAVToggle';\nexport { useVideo } from './hooks/useVideo';\nexport { useScreenShare } from './hooks/useScreenShare';\nexport { useRemoteAVToggle } from './hooks/useRemoteAVToggle';\nexport { useVideoList } from './hooks/useVideoList';\nexport { useAudioLevelStyles } from './hooks/useAudioLevelStyles';\nexport { useDevices } from './hooks/useDevices';\nexport { useParticipantList } from './hooks/useParticipantList';\nexport { useRecordingStreaming } from './hooks/useRecordingStreaming';\nexport { useAutoplayError } from './hooks/useAutoplayError';\nexport { useCustomEvent } from './hooks/useCustomEvent';\nexport { useParticipants } from './hooks/useParticipants';\nexport { useEmbedShare } from './hooks/useEmbedShare';\nexport { usePDFShare } from './hooks/usePDFShare';\nexport { usePaginatedParticipants } from './hooks/usePaginatedParticipants';\nexport { useWhiteboard } from './hooks/useWhiteboard';\nexport { useAwayNotifications } from './hooks/useAwayNotifications';\nexport { useTranscript } from './hooks/useTranscript';\nexport { useAudioMode } from './hooks/useAudioMode';\n\n// types\nexport type { hooksErrHandler } from './hooks/types';\nexport type { usePreviewInput, usePreviewResult } from './hooks/usePreviewJoin';\nexport type { useVideoListInput, useVideoResult, useVideoListTile } from './hooks/useVideoList';\nexport type { useAVToggleResult } from './hooks/useAVToggle';\nexport type { useDevicesResult } from './hooks/useDevices';\nexport type { useScreenShareResult } from './hooks/useScreenShare';\nexport type { useRemoteAVToggleResult } from './hooks/useRemoteAVToggle';\nexport type { useRecordingStreamingResult } from './hooks/useRecordingStreaming';\nexport type { useParticipantListResult } from './hooks/useParticipantList';\nexport type { useParticipantsResult, useParticipantsParams } from './hooks/useParticipants';\nexport type { useVideoInput, useVideoOutput } from './hooks/useVideo';\nexport type { useAutoplayErrorResult } from './hooks/useAutoplayError';\nexport type { useCustomEventInput, useCustomEventResult } from './hooks/useCustomEvent';\nexport type { useEmbedShareResult } from './hooks/useEmbedShare';\nexport type { usePDFShareResult } from './hooks/usePDFShare';\nexport type { TrackWithPeerAndDimensions } from './utils/layout';\nexport type { usePaginatedParticipantsResult, usePaginatedParticipantsInput } from './hooks/usePaginatedParticipants';\nexport type { HMSTranscript, useHMSTranscriptInput } from './hooks/useTranscript';\n\n// helpers\nexport { throwErrorHandler } from './utils/commons';\n\nexport { getVideoTracksFromPeers as getPeersWithTiles } from './utils/layout';\n// reexport everything from store so app can import everything directly from this\nexport * from '@100mslive/hms-video-store';\n", "import React, { createContext, PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react';\nimport create from 'zustand';\nimport {\n HMSActions,\n HMSGenericTypes,\n HMSNotificationInCallback,\n HMSNotifications,\n HMSNotificationTypeParam,\n HMSReactiveStore,\n HMSStatsStore,\n HMSStatsStoreWrapper,\n HMSStore,\n HMSStoreWrapper,\n} from '@100mslive/hms-video-store';\nimport { HMSContextProviderProps, hooksErrorMessage, makeHMSStatsStoreHook, makeHMSStoreHook } from './store';\nimport { isBrowser } from '../utils/isBrowser';\n\nexport interface HMSRoomProviderProps<T extends HMSGenericTypes> {\n actions?: HMSActions<T>;\n store?: HMSStoreWrapper<T>;\n notifications?: HMSNotifications;\n stats?: HMSStatsStoreWrapper;\n /**\n * if true this will enable webrtc stats collection\n */\n isHMSStatsOn?: boolean;\n leaveOnUnload?: boolean;\n}\n\n/**\n * only one context is being created currently. This would need to be changed if multiple\n * rooms have to be supported, where every room will have its own context, provider, store and actions.\n */\nconst HMSContext = createContext<HMSContextProviderProps | null>(null);\n\n/**\n * top level wrapper for using react sdk hooks. This doesn't have any mandatory arguments, if you are already\n * initialising the sdk on your side, you can pass in the primitives from there as well to use hooks for\n * react part of your code.\n * @constructor\n */\n// eslint-disable-next-line complexity\nexport const HMSRoomProvider = <T extends HMSGenericTypes = { sessionStore: Record<string, any> }>({\n children,\n actions,\n store,\n notifications,\n stats,\n isHMSStatsOn = false,\n leaveOnUnload = true,\n}: PropsWithChildren<HMSRoomProviderProps<T>>) => {\n const providerProps: HMSContextProviderProps = useMemo(() => {\n let providerProps: HMSContextProviderProps;\n // adding a dummy function for setstate and destroy because zustan'd create expects them\n // to be present but we don't expose them from the store.\n const errFn = () => {\n throw new Error('modifying store is not allowed');\n };\n if (actions && store) {\n providerProps = {\n actions: actions,\n store: create<HMSStore<T>>({\n ...store,\n setState: errFn,\n destroy: errFn,\n }),\n };\n if (notifications) {\n providerProps.notifications = notifications;\n }\n if (stats) {\n providerProps.statsStore = create<HMSStatsStore>({\n getState: stats.getState,\n subscribe: stats.subscribe,\n setState: errFn,\n destroy: errFn,\n });\n }\n } else {\n const hmsReactiveStore = new HMSReactiveStore<T>();\n providerProps = {\n actions: hmsReactiveStore.getActions(),\n store: create<HMSStore<T>>({\n ...hmsReactiveStore.getStore(),\n setState: errFn,\n destroy: errFn,\n }), // convert vanilla store in react hook\n notifications: hmsReactiveStore.getNotifications(),\n };\n\n if (isHMSStatsOn) {\n const stats = hmsReactiveStore.getStats();\n providerProps.statsStore = create<HMSStatsStore>({\n getState: stats.getState,\n subscribe: stats.subscribe,\n setState: errFn,\n destroy: errFn,\n });\n }\n }\n\n // @ts-ignore\n providerProps.actions.setFrameworkInfo({\n type: 'react-web',\n version: React.version,\n sdkVersion: process.env.REACT_SDK_VERSION,\n });\n\n return providerProps;\n }, [actions, store, notifications, stats, isHMSStatsOn]);\n\n useEffect(() => {\n if (isBrowser && leaveOnUnload) {\n const unloadCallback = () => providerProps.actions.leave();\n window.addEventListener('unload', unloadCallback);\n return () => {\n window.removeEventListener('unload', unloadCallback);\n };\n }\n\n return () => {};\n }, [leaveOnUnload, providerProps]);\n\n return React.createElement(HMSContext.Provider, { value: providerProps }, children);\n};\n\n/**\n * `useHMSStore` is a read only hook which can be passed a selector to read data.\n * The hook can only be used in a component if HMSRoomProvider is present in its ancestors.\n */\nexport const useHMSStore = makeHMSStoreHook(HMSContext);\n\nexport const useHMSStatsStore = makeHMSStatsStoreHook(HMSContext);\n\n/**\n * `useHMSVanillaStore` is a read only hook which returns the vanilla HMSStore.\n * Usage:\n * ```\n * const hmsStore = useHMSVanillaStore();\n * const dominantSpeaker = hmsStore.getState(selectDominantSpeaker);\n * ```\n *\n * Note: There's no need to use the vanilla hmsStore in React components.\n * This is used in rare cases where the store needs to be accessed outside a React component.\n * For almost every case, `useHMSStore` would get the job done.\n */\nexport const useHMSVanillaStore = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n\n return HMSContextConsumer.store;\n};\n\n/*\n * `useHMSVanillaNotifications` returns the vanilla HMSNotifications object. This makes it a bit easier to ensure\n * a notification is processed only once in your components. The other way is to use the hook version and put\n * the component high enough in the chain.\n * Usage:\n * ```\n * useEffect(() => {\n * const unsub = notifications.onNotification((notification) => {\n * console.log(notification);\n * }, notificationType);\n * return unsub;\n * }, [])\n * ```\n */\nexport const useHMSVanillaNotifications = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n return HMSContextConsumer.notifications;\n};\n\n/*\n * `useHMSActions` is a write only hook which can be used to dispatch actions.\n */\nexport const useHMSActions = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n return HMSContextConsumer.actions;\n};\n\n/**\n * `useHMSNotifications` is a read only hook which gives the latest notification(HMSNotification) received.\n * @param type can be a string or an array of string for the types of notifications to listen to. If an array is passed\n * either declare it outside the functional component or use a useMemo to make sure its reference stays same across\n * rerenders for performance reasons.\n */\nexport const useHMSNotifications = <T extends HMSNotificationTypeParam>(\n type?: T,\n): HMSNotificationInCallback<T> | null => {\n const HMSContextConsumer = useContext(HMSContext);\n const [notification, setNotification] = useState<HMSNotificationInCallback<T> | null>(null);\n\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n\n useEffect(() => {\n if (!HMSContextConsumer.notifications) {\n return;\n }\n const unsubscribe = HMSContextConsumer.notifications.onNotification<T>(notification => {\n setNotification(notification);\n }, type);\n return unsubscribe;\n }, [HMSContextConsumer.notifications, type]);\n\n return notification;\n};\n\nexport const useIsHMSStatsOn = () => {\n const HMSContextConsumer = useContext(HMSContext);\n return Boolean(HMSContextConsumer?.statsStore);\n};\n", "import React, { useContext } from 'react';\nimport { EqualityChecker, StateSelector } from 'zustand';\nimport shallow from 'zustand/shallow';\nimport { HMSActions, HMSNotifications, HMSStatsStore, HMSStore, IStoreReadOnly } from '@100mslive/hms-video-store';\nimport HMSLogger from '../utils/logger';\n\nexport interface IHMSReactStore<S extends HMSStore | HMSStatsStore> extends IStoreReadOnly<S> {\n <U>(selector: StateSelector<S, U>, equalityFn?: EqualityChecker<U>): U;\n}\n\nexport const hooksErrorMessage = `It seems like you forgot to add your component within a top level HMSRoomProvider, please refer to 100ms react docs(https://www.100ms.live/docs/javascript/v2/how-to-guides/install-the-sdk/integration#react-hooks) to check on the required steps for using this hook. If the provider is present\n at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;\n\nexport interface HMSContextProviderProps {\n actions: HMSActions; // for actions which may also mutate store\n store: IHMSReactStore<HMSStore>; // readonly store, don't mutate this\n notifications?: HMSNotifications;\n statsStore?: IHMSReactStore<HMSStatsStore>;\n}\n\nexport function makeHMSStoreHook(hmsContext: React.Context<HMSContextProviderProps | null>) {\n const useHMSStore = <StateSlice>(\n selector: StateSelector<HMSStore, StateSlice>,\n equalityFn: EqualityChecker<StateSlice> = shallow,\n ) => {\n if (!selector) {\n HMSLogger.w(\n 'fetching full store without passing any selector may have a heavy performance impact on your website.',\n );\n }\n const HMSContextConsumer = useContext(hmsContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n const useStore = HMSContextConsumer.store;\n return useStore(selector, equalityFn);\n };\n return useHMSStore;\n}\n\nexport function makeHMSStatsStoreHook(hmsContext: React.Context<HMSContextProviderProps | null>) {\n const useHMSStatsStore = <StateSlice>(\n selector: StateSelector<HMSStatsStore, StateSlice>,\n equalityFn: EqualityChecker<StateSlice> = shallow,\n ) => {\n if (!selector) {\n HMSLogger.w(\n 'fetching full store without passing any selector may have a heavy performance impact on your website.',\n );\n }\n const HMSContextConsumer = useContext(hmsContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n const useStore = HMSContextConsumer.statsStore;\n return useStore?.(selector, equalityFn);\n };\n return useHMSStatsStore;\n}\n", "export enum HMSLogLevel {\n VERBOSE,\n DEBUG,\n INFO,\n WARN,\n ERROR,\n NONE,\n}\n\nexport default class HMSLogger {\n static level: HMSLogLevel = HMSLogLevel.VERBOSE;\n\n static v(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.VERBOSE, tag, ...data);\n }\n\n static d(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.DEBUG, tag, ...data);\n }\n\n static i(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.INFO, tag, ...data);\n }\n\n static w(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.WARN, tag, ...data);\n }\n\n static e(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.ERROR, tag, ...data);\n }\n\n // eslint-disable-next-line complexity\n private static log(level: HMSLogLevel, tag: string, ...data: any[]) {\n if (this.level.valueOf() > level.valueOf()) {\n return;\n }\n\n switch (level) {\n case HMSLogLevel.VERBOSE: {\n console.log('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.DEBUG: {\n console.debug('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.INFO: {\n console.info('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.WARN: {\n console.warn('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.ERROR: {\n console.error('HMSui-components: ', tag, ...data);\n break;\n }\n }\n }\n}\n", "export const isBrowser = typeof window !== 'undefined';\n", "import { useCallback, useMemo } from 'react';\nimport {\n HMSConfigInitialSettings,\n HMSICEServer,\n HMSPreviewConfig,\n HMSRoomState,\n selectIsConnectedToRoom,\n selectRoomState,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface usePreviewInput {\n /**\n * name of user who is joining, this is only required if join is called\n */\n name?: string;\n /**\n * app side authentication token\n */\n token: string;\n /**\n * any extra metadata info for the peer\n */\n metadata?: string;\n /**\n * function to handle errors happening during preview\n */\n handleError?: hooksErrHandler;\n initEndpoint?: string;\n /**\n * initial settings for audio/video and device to be used.\n */\n initialSettings?: HMSConfigInitialSettings;\n /**\n * Enable to get a network quality score while in preview. The score ranges from -1 to 5.\n * -1 when we are not able to connect to 100ms servers within an expected time limit\n * 0 when there is a timeout/failure when measuring the quality\n * 1-5 ranges from poor to good quality.\n */\n captureNetworkQualityInPreview?: boolean;\n asRole?: string;\n /**\n * if this flag is enabled, the SDK takes care of unsubscribing to the video when it goes out of view.\n * Additionally if simulcast is enabled, it takes care of auto managing simulcast layers based on the\n * dimensions of the video element to conserve bandwidth.\n */\n autoManageVideo?: boolean;\n /**\n * if this flag is enabled, wake lock will be acquired automatically(if supported) when joining the room, so the device\n * will be kept awake.\n */\n autoManageWakeLock?: boolean;\n\n /**\n * use custom STUN/TURN servers for media connection (advanced)\n */\n iceServers?: HMSICEServer[];\n}\n\nexport interface usePreviewResult {\n /**\n * enable the join button for the user only when this is true\n */\n enableJoin: boolean;\n /**\n * call this function to join the room\n */\n join: () => Promise<void>;\n /**\n * once the user has joined the room, till leave happens this flag will be true. It can be used\n * to decide to show between preview form and conferencing component/video tiles.\n */\n isConnected: boolean;\n /**\n * call this function to join the room\n */\n preview: () => Promise<void>;\n}\n\n/**\n * This hook can be used to build a preview UI component, this lets you call preview every time the passed in\n * token changes. This hook is best used in combination with useDevices for changing devices, useAVToggle for\n * muting/unmuting and useAudioLevelStyles for showing mic audio level to the user.\n * Any device change or mute/unmute will be carried across to join.\n */\nexport const usePreviewJoin = ({\n name = '',\n token,\n metadata,\n handleError = logErrorHandler,\n initEndpoint,\n initialSettings,\n captureNetworkQualityInPreview,\n asRole,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n}: usePreviewInput): usePreviewResult => {\n const actions = useHMSActions();\n const roomState = useHMSStore(selectRoomState);\n const isConnected = useHMSStore(selectIsConnectedToRoom) || false;\n const enableJoin = roomState === HMSRoomState.Preview;\n\n const config: HMSPreviewConfig = useMemo(() => {\n return {\n userName: name,\n authToken: token,\n metaData: metadata,\n rememberDeviceSelection: true,\n settings: initialSettings,\n initEndpoint: initEndpoint,\n asRole,\n captureNetworkQualityInPreview,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n };\n }, [\n name,\n token,\n metadata,\n initEndpoint,\n initialSettings,\n captureNetworkQualityInPreview,\n asRole,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n ]);\n\n const preview = useCallback(async () => {\n if (!token) {\n return;\n }\n try {\n if (isConnected || roomState !== HMSRoomState.Disconnected) {\n await actions.leave().catch(() => {\n // Do nothing as this might lead to leave called before join\n });\n }\n await actions.preview(config);\n } catch (err) {\n handleError(err as Error, 'preview');\n }\n }, [token, isConnected, roomState, actions, config, handleError]);\n\n const join = useCallback(async () => {\n if (!token) {\n return;\n }\n try {\n await actions.join(config);\n } catch (err) {\n handleError(err as Error, 'join');\n }\n }, [actions, config, handleError, token]);\n\n return {\n enableJoin,\n join,\n isConnected,\n preview,\n };\n};\n", "import { useEffect, useRef } from 'react';\nimport { parsedUserAgent } from '@100mslive/hms-video-store';\nimport HMSLogger from './logger';\nimport { hooksErrHandler } from '../hooks/types';\n\nconst TAG = 'react-sdk';\n\nexport const logErrorHandler: hooksErrHandler = (err: Error, method?: string) => HMSLogger.e(TAG, method, err);\n\n/**\n * pass in this error handler to get the error thrown back to the UI for further handling, showing toast etc.\n * @param err\n */\nexport const throwErrorHandler: hooksErrHandler = (err: Error) => {\n throw err;\n};\n\nexport default function usePrevious<T>(state: T): T | undefined {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = state;\n });\n\n return ref.current;\n}\n\nconst chromiumBasedBrowsers = ['blink'];\n\nexport const isChromiumBased = chromiumBasedBrowsers.some(\n (value: string) => parsedUserAgent.getEngine()?.name?.toLowerCase() === value,\n);\n\nexport const pdfIframeURL = 'https://pdf-annotation.100ms.live/generic/web/viewer.html';\n", "import { useCallback } from 'react';\nimport {\n selectIsAllowedToPreviewMedia,\n selectIsAllowedToPublish,\n selectIsInPreview,\n selectIsLocalAudioEnabled,\n selectIsLocalVideoEnabled,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useAVToggleResult {\n /**\n * true if unmuted and vice versa\n */\n isLocalAudioEnabled: boolean;\n isLocalVideoEnabled: boolean;\n /**\n * use this function to toggle audio state, the function will only be present if the user\n * has permission to unmute audio\n */\n toggleAudio?: () => void;\n /**\n * use this function to toggle video state, the function will only be present if the user\n * has permission to unmute video\n */\n toggleVideo?: () => void;\n}\n\n/**\n * Use this hook to implement mute/unmute for audio and video.\n * isAllowedToPublish can be used to decide whether to show the toggle buttons in the UI.\n * @param handleError to handle any error during toggle of audio/video\n */\nexport const useAVToggle = (handleError: hooksErrHandler = logErrorHandler): useAVToggleResult => {\n const isLocalAudioEnabled = useHMSStore(selectIsLocalAudioEnabled);\n const isLocalVideoEnabled = useHMSStore(selectIsLocalVideoEnabled);\n const isInPreview = useHMSStore(selectIsInPreview);\n const selectAllowed = isInPreview ? selectIsAllowedToPreviewMedia : selectIsAllowedToPublish;\n const isAllowedToPublish = useHMSStore(selectAllowed);\n const actions = useHMSActions();\n\n const toggleAudio = useCallback(async () => {\n try {\n await actions.setLocalAudioEnabled(!isLocalAudioEnabled);\n } catch (err) {\n handleError(err as Error, 'toggleAudio');\n }\n }, [actions, isLocalAudioEnabled, handleError]);\n\n const toggleVideo = useCallback(async () => {\n try {\n await actions.setLocalVideoEnabled(!isLocalVideoEnabled);\n } catch (err) {\n handleError(err as Error, 'toggleVideo');\n }\n }, [actions, isLocalVideoEnabled, handleError]);\n\n return {\n isLocalAudioEnabled,\n isLocalVideoEnabled,\n toggleAudio: isAllowedToPublish?.audio ? toggleAudio : undefined,\n toggleVideo: isAllowedToPublish?.video ? toggleVideo : undefined,\n };\n};\n", "import React, { useCallback, useEffect, useRef } from 'react';\nimport { HMSTrackID, selectVideoTrackByID } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport HMSLogger from '../utils/logger';\n\nexport interface useVideoInput {\n /**\n * TrackId that is to be rendered\n */\n trackId?: HMSTrackID;\n /**\n * Boolean stating whether to override the internal behaviour.\n * when attach is false, even if tile is inView or enabled, it won't be rendered\n */\n attach?: boolean;\n}\nexport interface useVideoOutput {\n videoRef: React.RefCallback<HTMLVideoElement>;\n}\n/**\n * This hooks can be used to implement a video tile component. Given a track id it will return a ref.\n * The returned ref can be used to set on a video element meant to display the video.\n * The hook will take care of attaching and detaching video, and will automatically detach when the video\n * goes out of view to save on bandwidth.\n */\nexport const useVideo = ({ trackId, attach }: useVideoInput): useVideoOutput => {\n const actions = useHMSActions();\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const track = useHMSStore(selectVideoTrackByID(trackId));\n const prevTrackId = useRef<HMSTrackID | undefined>();\n\n const setRefs = useCallback((node: HTMLVideoElement) => {\n if (node) {\n videoRef.current = node;\n }\n }, []);\n\n useEffect(() => {\n if (!prevTrackId.current) {\n prevTrackId.current = track?.id;\n } else if (track?.id && prevTrackId.current !== track?.id) {\n // Remove video element reference from previous track by detaching\n (async () => {\n if (videoRef.current) {\n try {\n HMSLogger.d('detaching because different track is passed');\n await actions.detachVideo(prevTrackId.current!, videoRef.current);\n } catch (err) {\n HMSLogger.w('detach video error for track', prevTrackId.current, err);\n }\n }\n prevTrackId.current = track?.id;\n })();\n }\n }, [track?.id, actions]);\n\n useEffect(() => {\n (async () => {\n if (track?.id && videoRef.current) {\n if (attach !== false) {\n await actions.attachVideo(track.id, videoRef.current);\n } else {\n await actions.detachVideo(track.id, videoRef.current);\n }\n }\n })();\n }, [track, attach, actions]);\n\n // detach on unmount\n useEffect(() => {\n return () => {\n (async () => {\n if (videoRef.current && track) {\n try {\n // detach on unmount\n await actions.detachVideo(track.id, videoRef.current);\n } catch (err) {\n HMSLogger.w('detach video error for track', track.id, err);\n }\n }\n })();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { videoRef: setRefs };\n};\n", "import { useCallback } from 'react';\nimport {\n HMSPeerID,\n HMSScreenShareConfig,\n HMSTrackID,\n selectIsLocalScreenShared,\n selectPeerScreenSharing,\n selectScreenSharesByPeerId,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useScreenShareResult {\n /**\n * true if the local user is sharing screen, false otherwise\n */\n amIScreenSharing: boolean;\n /**\n * toggle screenshare for the local user, will only be present if the user has the permission to toggle\n */\n toggleScreenShare?: (config?: HMSScreenShareConfig) => Promise<void>;\n /**\n * the id of the peer who is currently sharing screen, will only be present if there is a screenshare in the room.\n * In case of multiple screenshares, the behaviour of which one is picked is not defined.\n */\n screenSharingPeerId?: HMSPeerID;\n /**\n * the name of the peer who is currently sharing screen. Will be undefined if no one is sharing the screen.\n * In case of multiple screenshares, the behavior of which one is picked is not defined.\n */\n screenSharingPeerName?: string;\n /**\n * screenShare audio track id, will only be present if there is a screenshare with video track\n */\n screenShareVideoTrackId?: HMSTrackID;\n /**\n * screenShare audio track id, will only be present if there is a screenshare with audio track\n */\n screenShareAudioTrackId?: HMSTrackID;\n}\n\n/**\n * This hook can be used to implement a screenshare toggle button as well as know about the screenshare in the room.\n * This works best if your application only needs to show one screenshare in large view at a time with other screenshares\n * similar to normal user tiles.\n * For any complicated requirement with multiple screenshares it's best to use the store directly.\n * For viewing the screenshare this hook is best used in combination with useVideo.\n * For implementing control bar for local peer, this is used based with useAVToggle.\n * @param handleError to handle any errors during screenshare toggle\n */\nexport const useScreenShare = (handleError: hooksErrHandler = logErrorHandler): useScreenShareResult => {\n const actions = useHMSActions();\n const amIScreenSharing = useHMSStore(selectIsLocalScreenShared);\n const screenSharePeer = useHMSStore(selectPeerScreenSharing);\n const screenShare = useHMSStore(selectScreenSharesByPeerId(screenSharePeer?.id));\n\n const toggleScreenShare = useCallback(\n async (config?: HMSScreenShareConfig) => {\n try {\n await actions.setScreenShareEnabled(!amIScreenSharing, config);\n } catch (err) {\n handleError(err as Error, 'toggleScreenShare');\n }\n },\n [actions, amIScreenSharing, handleError],\n );\n\n return {\n amIScreenSharing,\n screenSharingPeerId: screenSharePeer?.id,\n screenSharingPeerName: screenSharePeer?.name,\n screenShareVideoTrackId: screenShare?.video?.id,\n screenShareAudioTrackId: screenShare?.audio?.id,\n toggleScreenShare,\n };\n};\n", "/* eslint-disable complexity */\nimport { useCallback } from 'react';\nimport {\n HMSActions,\n HMSTrack,\n HMSTrackID,\n selectAudioTrackByID,\n selectAudioTrackVolume,\n selectPermissions,\n selectVideoTrackByID,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useRemoteAVToggleResult {\n /**\n * true if unmuted and vice versa\n */\n isAudioEnabled: boolean;\n isVideoEnabled: boolean;\n /**\n * current volume of the audio track\n */\n volume?: number;\n /**\n * use this function to toggle audio state, the function will only be present if the user\n * has permission to mute/unmute remote audio\n */\n toggleAudio?: () => void;\n /**\n * use this function to toggle video state, the function will only be present if the user\n * has permission to mute/unmute remote video\n */\n toggleVideo?: () => void;\n /**\n * use this function to set the volume of peer's audio track for the local user, the function will\n * only be present if the remote peer has an audio track to change volume for\n */\n setVolume?: (volume: number) => void;\n}\n\nconst toggleTrackEnabled = async (\n actions: HMSActions,\n track: HMSTrack | undefined | null,\n handleError: hooksErrHandler,\n) => {\n if (track) {\n try {\n await actions.setRemoteTrackEnabled(track.id, !track.enabled);\n } catch (err) {\n handleError(err as Error, 'remoteToggle');\n }\n }\n};\n\n/**\n * This hook can be used to implement remote mute/unmute + audio volume changer on tile level.\n * @param peerId of the peer whose tracks need to be managed\n * @param audioTrackId of the peer whose tracks need to be managed\n * @param videoTrackId of the peer whose tracks need to be managed\n * @param handleError to handle any error during toggle of audio/video\n */\nexport const useRemoteAVToggle = (\n audioTrackId: HMSTrackID,\n videoTrackId: HMSTrackID,\n handleError: hooksErrHandler = logErrorHandler,\n): useRemoteAVToggleResult => {\n const actions = useHMSActions();\n const audioTrack = useHMSStore(selectAudioTrackByID(audioTrackId));\n const videoTrack = useHMSStore(selectVideoTrackByID(videoTrackId));\n const volume = useHMSStore(selectAudioTrackVolume(audioTrack?.id));\n const permissions = useHMSStore(selectPermissions);\n const canToggleVideo = videoTrack?.enabled ? permissions?.mute : permissions?.unmute;\n const canToggleAudio = audioTrack?.enabled ? permissions?.mute : permissions?.unmute;\n\n const toggleAudio = useCallback(async () => {\n await toggleTrackEnabled(actions, audioTrack, handleError);\n }, [actions, audioTrack, handleError]);\n\n const toggleVideo = useCallback(async () => {\n await toggleTrackEnabled(actions, videoTrack, handleError);\n }, [actions, handleError, videoTrack]);\n\n const setVolume = useCallback(\n (volume: number) => {\n if (audioTrack) {\n actions.setVolume(volume, audioTrack.id);\n }\n },\n [actions, audioTrack],\n );\n\n return {\n isAudioEnabled: !!audioTrack?.enabled,\n isVideoEnabled: !!videoTrack?.enabled,\n volume,\n toggleAudio: audioTrack && canToggleAudio ? toggleAudio : undefined,\n toggleVideo: videoTrack?.source === 'regular' && canToggleVideo ? toggleVideo : undefined,\n setVolume: audioTrack ? setVolume : undefined,\n };\n};\n", "import React, { useMemo } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\nimport { HMSPeer, HMSTrack, HMSTrackID, selectTracksMap } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\nimport {\n calculateLayoutSizes,\n chunkElements,\n getModeAspectRatio,\n getVideoTracksFromPeers,\n TrackWithPeer,\n} from '../utils/layout';\n\nexport interface useVideoListInput {\n /**\n * peers is the list of all peers you need to display\n */\n peers: HMSPeer[];\n /**\n * Max tiles in a page. Overrides maxRowCount and maxColCount\n */\n maxTileCount?: number;\n /**\n * Max rows in a page. Only applied if maxTileCount is not present\n */\n maxRowCount?: number;\n /**\n * Max columns in a page. Only applied if maxTileCount and maxRowCount are not present\n */\n maxColCount?: number;\n /**\n * A function which tells whether to show the screenshare for a peer who is sharing their screen. A peer is passed\n * and a boolean value is expected.\n * This can be useful if there are multiple screenShares in the room where you may want to show the main one in the\n * center view and others in video list along side other tiles. No screenShare is included by default.\n * for example. includeScreenShare = (peer) => return peer.id !== mainScreenSharingPeer.id\n */\n includeScreenShareForPeer?: (peer: HMSPeer) => boolean;\n /**\n * Aspect ratio of VideoTiles, ideally this should be the same as the aspect ratio selected for\n * capture in the dashboard template.\n */\n aspectRatio?: { width: number; height: number };\n /**\n * By default this will be true. Only publishing(audio/video/screen) peers in the passed in peer list\n * will be filtered. If you wish to show all peers, pass false for this.\n */\n filterNonPublishingPeers?: boolean;\n /**\n * Height that would be subtracted from the parent's height to give the available height, use case: if your pagination is inside the parent component then offsetY would be the height of pagination\n */\n offsetY?: number;\n}\n\nexport interface useVideoListTile extends TrackWithPeer {\n width: number;\n height: number;\n}\n\nexport interface useVideoResult {\n /**\n * This returns a list of all pages with every page containing the list of all tiles on it.\n */\n pagesWithTiles: useVideoListTile[][];\n /**\n * add the ref to the element going to render the video list, this is used to measure the available\n * space/dimensions in order to calculate the best fit\n */\n ref: React.MutableRefObject<any>;\n}\n\nconst DEFAULTS = {\n aspectRatio: {\n width: 1,\n height: 1,\n },\n};\n\n/**\n * This hook can be used to build a paginated gallery view of video tiles. You can give the hook\n * a list of all the peers which need to be shown and it tells you how to structure the UI by giving\n * a list of pages with every page having a list of video tiles.\n * Please check the documentation of input and output types for more details.\n */\nexport const useVideoList = ({\n peers,\n maxTileCount,\n maxColCount,\n maxRowCount,\n includeScreenShareForPeer = () => false,\n aspectRatio = DEFAULTS.aspectRatio,\n filterNonPublishingPeers = true,\n offsetY = 0,\n}: useVideoListInput): useVideoResult => {\n const { width = 0, height = 0, ref } = useResizeDetector();\n const store = useHMSVanillaStore();\n // using vanilla store as we don't need re-rendering every time something in a track changes\n const tracksMap: Record<HMSTrackID, HMSTrack> = store.getState(selectTracksMap);\n const tracksWithPeer: TrackWithPeer[] = getVideoTracksFromPeers(\n peers,\n tracksMap,\n includeScreenShareForPeer,\n filterNonPublishingPeers,\n );\n const finalAspectRatio = useMemo(() => {\n if (aspectRatio) {\n return aspectRatio;\n }\n const modeAspectRatio = getModeAspectRatio(tracksWithPeer);\n // Default to 1 if there are no video tracks\n return {\n width: modeAspectRatio || 1,\n height: 1,\n };\n }, [aspectRatio, tracksWithPeer]);\n const count = tracksWithPeer.length;\n const {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = useMemo(\n () =>\n calculateLayoutSizes({\n count,\n parentWidth: Math.floor(width),\n parentHeight: Math.floor(height) - Math.min(height, offsetY),\n maxTileCount,\n maxRowCount,\n maxColCount,\n aspectRatio: finalAspectRatio,\n }),\n [count, width, height, maxTileCount, maxRowCount, maxColCount, finalAspectRatio, offsetY],\n );\n const chunkedTracksWithPeer = useMemo(\n () =>\n chunkElements<TrackWithPeer>({\n elements: tracksWithPeer,\n tilesInFirstPage,\n onlyOnePage: false,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n }),\n [\n tracksWithPeer,\n tilesInFirstPage,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n ],\n );\n return {\n pagesWithTiles: chunkedTracksWithPeer,\n ref,\n };\n};\n", "/* eslint-disable complexity */\n/* eslint-disable no-plusplus */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport { HMSPeer, HMSScreenVideoTrack, HMSTrack, HMSTrackID, HMSVideoTrack } from '@100mslive/hms-video-store';\n\nexport const chunk = <T>(elements: T[], chunkSize: number, onlyOnePage: boolean) =>\n elements.reduce((resultArray: T[][], tile: T, index: number) => {\n const chunkIndex = Math.floor(index / chunkSize);\n if (chunkIndex > 0 && onlyOnePage) {\n return resultArray;\n }\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = []; // start a new chunk\n }\n\n resultArray[chunkIndex].push(tile);\n return resultArray;\n }, []);\n\ninterface ChunkElements<T> {\n elements: T[];\n tilesInFirstPage: number;\n onlyOnePage: boolean;\n isLastPageDifferentFromFirstPage: boolean;\n defaultWidth: number;\n defaultHeight: number;\n lastPageWidth: number;\n lastPageHeight: number;\n}\n\n/**\n * Given a list of tracks/elements and some constraints, group the tracks in separate pages.\n * @return 2D list for every page which has the original element and height and width\n * for its tile.\n */\nexport const chunkElements = <T>({\n elements,\n tilesInFirstPage,\n onlyOnePage,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n}: ChunkElements<T>): (T & { width: number; height: number })[][] => {\n const chunks: T[][] = chunk<T>(elements, tilesInFirstPage, onlyOnePage);\n return chunks.map((ch, page) =>\n ch.map(element => {\n const isLastPage: boolean = page === chunks.length - 1;\n const width = isLastPageDifferentFromFirstPage && isLastPage ? lastPageWidth : defaultWidth;\n const height = isLastPageDifferentFromFirstPage && isLastPage ? lastPageHeight : defaultHeight;\n return { ...element, height, width };\n }),\n );\n};\n\n/**\n * Mathematical mode - the element with the highest occurrence in an array\n * @param array\n */\nexport function mode(array: number[]): number | null {\n if (array.length === 0) {\n return null;\n }\n const modeMap: Record<number, number> = {};\n let maxEl = array[0];\n let maxCount = 1;\n for (let i = 0; i < array.length; i++) {\n const el = array[i];\n if (modeMap[el] === null) {\n modeMap[el] = 1;\n } else {\n modeMap[el]++;\n }\n if (modeMap[el] > maxCount) {\n maxEl = el;\n maxCount = modeMap[el];\n }\n }\n return maxEl;\n}\n\nexport type TrackWithPeer = { track?: HMSVideoTrack | HMSScreenVideoTrack; peer: HMSPeer };\n\nexport type TrackWithPeerAndDimensions = {\n track?: HMSVideoTrack | HMSScreenVideoTrack;\n peer: HMSPeer;\n width?: number;\n height?: number;\n};\n\n/**\n * get the aspect ration occurring with the highest frequency\n * @param tracks - video tracks to infer aspect ratios from\n */\nexport const getModeAspectRatio = (tracks: TrackWithPeer[]): number | null =>\n mode(\n tracks\n .filter(track => track.track?.width && track.track?.height)\n .map(track => {\n const width = track.track?.width;\n const height = track.track?.height;\n // Default to 1 if there are no video tracks\n return (width || 1) / (height || 1);\n }),\n );\n\ninterface GetTileSizesInList {\n count: number;\n parentWidth: number;\n parentHeight: number;\n maxTileCount?: number;\n maxRowCount?: number;\n maxColCount?: number;\n aspectRatio: {\n width: number;\n height: number;\n };\n}\n\ninterface GetTileSizes {\n parentWidth: number;\n parentHeight: number;\n count: number;\n maxCount: number;\n aspectRatio: { width: number; height: number };\n}\n\n/**\n * Finds the largest rectangle area when trying to place N rectangle into a containing\n * rectangle without rotation.\n *\n * @param {Number} containerWidth The width of the container.\n * @param {Number} containerHeight The height of the container.\n * @param {Number} numRects How many rectangles must fit within.\n * @param {Number} width The unscaled width of the rectangles to be placed.\n * @param {Number} height The unscaled height of the rectangles to be placed.\n * @return {Object} The area and number of rows and columns that fit.\n */\nexport const largestRect = (\n containerWidth: number,\n containerHeight: number,\n numRects: number,\n width: number | undefined,\n height: number | undefined,\n) => {\n if (containerWidth < 0 || containerHeight < 0) {\n throw new Error('Container must have a non-negative area');\n }\n if (numRects < 1 || !Number.isInteger(numRects)) {\n throw new Error('Number of shapes to place must be a positive integer');\n }\n const aspectRatio = width && height && width / height;\n if (aspectRatio !== undefined && isNaN(aspectRatio)) {\n throw new Error('Aspect ratio must be a number');\n }\n\n let best = { area: 0, cols: 0, rows: 0, width: 0, height: 0 };\n\n // TODO: Don't start with obviously-`ba`d candidates.\n const startCols = numRects;\n const colDelta = -1;\n\n // For each combination of rows + cols that can fit the number of rectangles,\n // place them and see the area.\n if (aspectRatio !== undefined) {\n for (let cols = startCols; cols > 0; cols += colDelta) {\n const rows = Math.ceil(numRects / cols);\n const hScale = containerWidth / (cols * aspectRatio);\n const vScale = containerHeight / rows;\n let width;\n let height;\n // Determine which axis is the constraint.\n if (hScale <= vScale) {\n width = containerWidth / cols;\n height = width / aspectRatio;\n } else {\n height = containerHeight / rows;\n width = height * aspectRatio;\n }\n const area = width * height;\n if (area > best.area) {\n best = { area, width, height, rows, cols };\n }\n }\n }\n return best;\n};\n\nexport const getTileSizesWithColConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const cols = Math.min(\n Math.ceil(Math.sqrt((count * (parentWidth / parentHeight)) / (aspectRatio.width / aspectRatio.height))),\n maxCount,\n );\n let width = parentWidth / cols;\n let height = width / (aspectRatio.width / aspectRatio.height);\n if (height > parentHeight) {\n height = parentHeight;\n width = height / (aspectRatio.height / aspectRatio.width);\n }\n const rows = Math.floor(parentHeight / height);\n defaultHeight = height;\n defaultWidth = width;\n tilesInFirstPage = Math.min(count, rows * cols);\n tilesinLastPage = count % (rows * cols);\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > rows * cols;\n if (isLastPageDifferentFromFirstPage) {\n const cols = Math.min(\n Math.ceil(Math.sqrt((tilesinLastPage * (parentWidth / parentHeight)) / (aspectRatio.width / aspectRatio.height))),\n maxCount,\n );\n let width = parentWidth / cols;\n let height = width / (aspectRatio.width / aspectRatio.height);\n if (height > parentHeight) {\n height = parentHeight;\n width = height / (aspectRatio.height / aspectRatio.width);\n }\n lastPageHeight = height;\n lastPageWidth = width;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport const getTileSizesWithPageConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const { width: initialWidth, height: initialHeight } = largestRect(\n parentWidth,\n parentHeight,\n Math.min(count, maxCount),\n aspectRatio.width,\n aspectRatio.height,\n );\n defaultWidth = initialWidth;\n defaultHeight = initialHeight;\n tilesInFirstPage = Math.min(count, maxCount);\n tilesinLastPage = count % maxCount;\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > maxCount;\n if (isLastPageDifferentFromFirstPage) {\n const { width: remWidth, height: remHeight } = largestRect(\n parentWidth,\n parentHeight,\n tilesinLastPage,\n aspectRatio.width,\n aspectRatio.height,\n );\n lastPageWidth = remWidth;\n lastPageHeight = remHeight;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport const getTileSizesWithRowConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const rows = Math.min(\n Math.ceil(Math.sqrt((count * (aspectRatio.width / aspectRatio.height)) / (parentWidth / parentHeight))),\n maxCount,\n );\n const height = parentHeight / rows;\n const width = height * (aspectRatio.width / aspectRatio.height);\n const cols = Math.floor(parentWidth / width);\n defaultWidth = width;\n defaultHeight = height;\n tilesInFirstPage = Math.min(count, rows * cols);\n tilesinLastPage = count % (rows * cols);\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > rows * cols;\n if (isLastPageDifferentFromFirstPage) {\n const rows = Math.min(\n Math.ceil(Math.sqrt((tilesinLastPage * (aspectRatio.width / aspectRatio.height)) / (parentWidth / parentHeight))),\n maxCount,\n );\n const height = parentHeight / rows;\n const width = height * (aspectRatio.width / aspectRatio.height);\n lastPageHeight = height;\n lastPageWidth = width;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport function calculateLayoutSizes({\n count,\n parentWidth,\n parentHeight,\n maxTileCount,\n maxRowCount,\n maxColCount,\n aspectRatio,\n}: GetTileSizesInList) {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n\n if (count === 0) {\n // no tracks to show\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n }\n\n if (maxTileCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithPageConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxTileCount,\n aspectRatio,\n }));\n } else if (maxRowCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithRowConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxRowCount,\n aspectRatio,\n }));\n } else if (maxColCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithColConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxColCount,\n aspectRatio,\n }));\n } else {\n const { width, height } = largestRect(parentWidth, parentHeight, count, aspectRatio.width, aspectRatio.height);\n defaultWidth = width;\n defaultHeight = height;\n tilesInFirstPage = count;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n}\n\n/**\n * given list of peers and all tracks in the room, get a list of tile objects to show in the UI\n * @param peers\n * @param tracks\n * @param includeScreenShareForPeer - fn will be called to check whether to include screenShare for the peer in returned tiles\n * @param filterNonPublishingPeers - by default a peer with no tracks won't be counted towards final tiles\n */\nexport const getVideoTracksFromPeers = (\n peers: HMSPeer[],\n tracks: Record<HMSTrackID, HMSTrack>,\n includeScreenShareForPeer: (peer: HMSPeer) => boolean,\n filterNonPublishingPeers = true,\n) => {\n if (!peers || !tracks || !includeScreenShareForPeer) {\n return [];\n }\n const peerTiles: TrackWithPeer[] = [];\n for (const peer of peers) {\n const onlyAudioTrack = peer.videoTrack === undefined && peer.audioTrack && tracks[peer.audioTrack];\n if (onlyAudioTrack) {\n peerTiles.push({ peer: peer });\n } else if (peer.videoTrack && tracks[peer.videoTrack]) {\n peerTiles.push({ track: tracks[peer.videoTrack] as HMSVideoTrack, peer: peer });\n } else if (!filterNonPublishingPeers) {\n peerTiles.push({ peer: peer });\n }\n // Handle video tracks in auxiliary tracks as well.\n if (peer.auxiliaryTracks.length > 0) {\n peer.auxiliaryTracks.forEach(trackId => {\n const track = tracks[trackId];\n if (track?.type === 'video' && track?.source === 'regular') {\n peerTiles.push({ track, peer });\n }\n });\n }\n if (includeScreenShareForPeer(peer) && peer.auxiliaryTracks.length > 0) {\n const screenShareTrackID = peer.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return track?.type === 'video' && track?.source === 'screen';\n });\n // Don't show tile if screenshare only has audio\n if (screenShareTrackID) {\n peerTiles.push({ track: tracks[screenShareTrackID] as HMSScreenVideoTrack, peer: peer });\n }\n }\n }\n return peerTiles;\n};\n", "import React, { useEffect } from 'react';\nimport { selectTrackAudioByID } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\n/**\n * This hook can be used to apply css properties on an element based on the current audio level for the passed in track.\n * It doesn't return the audio level as it's optimised for performance. As audio level could be changing frequently we\n * want to minimise the number of components an audio level change causes to re render.\n * An e.g. use of this hook will be to apply box-shadow on parent tile based on audio level.\n * @param trackId is the audio track id for which audio level needs to be used\n * @param getStyle is a function which can take in current audio level and return the style to apply for the ref\n * @param ref is the ref of the element on which you want the css to apply\n */\nexport function useAudioLevelStyles({\n trackId,\n getStyle,\n ref,\n}: {\n trackId?: string;\n getStyle: (level: number) => Record<string, string>;\n ref: React.RefObject<any>;\n}) {\n const store = useHMSVanillaStore();\n useEffect(\n () =>\n store.subscribe(level => {\n if (!ref.current) {\n return;\n }\n const styles = getStyle(level);\n for (const key in styles) {\n ref.current.style[key] = styles[key];\n }\n }, selectTrackAudioByID(trackId)),\n [getStyle, ref, store, trackId],\n );\n}\n", "import { useCallback } from 'react';\nimport {\n DeviceType,\n selectDevices,\n selectIsAllowedToPreviewMedia,\n selectIsAllowedToPublish,\n selectIsInPreview,\n selectLocalMediaSettings,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport type DeviceTypeAndInfo<T> = {\n [key in DeviceType]?: T;\n};\n\nexport interface useDevicesResult {\n /**\n * list of all devices by type\n */\n allDevices: DeviceTypeAndInfo<MediaDeviceInfo[]>;\n /**\n * selected device ids for all types\n */\n selectedDeviceIDs: DeviceTypeAndInfo<string>;\n /**\n * function to call to update device\n */\n updateDevice: ({ deviceType, deviceId }: { deviceType: DeviceType; deviceId: string }) => Promise<void>;\n}\n\n/**\n * This hook can be used to implement a UI component which allows the user to manually change their\n * audio/video device. It returns the list of all devices as well as the currently selected one. The input\n * devices will be returned based on what the user is allowed to publish, so a audio only user won't get\n * the audioInput field. This can be used to show the UI dropdowns properly.\n *\n * Note:\n * - Browsers give access to the list of devices only if the user has given permission to access them\n * - Changing devices manually work best in combination with remembering the user's selection for the next time, do\n * pass the rememberDeviceSelection flag at time of join for this to happen.\n *\n * @param handleError error handler for any errors during device change\n */\nexport const useDevices = (handleError: hooksErrHandler = logErrorHandler): useDevicesResult => {\n const actions = useHMSActions();\n const sdkAllDevices: DeviceTypeAndInfo<MediaDeviceInfo[]> = useHMSStore(selectDevices);\n const sdkSelectedDevices = useHMSStore(selectLocalMediaSettings);\n const isInPreview = useHMSStore(selectIsInPreview);\n const selectAllowed = isInPreview ? selectIsAllowedToPreviewMedia : selectIsAllowedToPublish;\n const isAllowedToPublish = useHMSStore(selectAllowed);\n\n const selectedDeviceIDs: DeviceTypeAndInfo<string> = {\n [DeviceType.audioOutput]: sdkSelectedDevices.audioOutputDeviceId,\n };\n const allDevices: DeviceTypeAndInfo<MediaDeviceInfo[]> = {\n [DeviceType.audioOutput]: sdkAllDevices.audioOutput,\n };\n\n if (isAllowedToPublish.video) {\n allDevices[DeviceType.videoInput] = sdkAllDevices.videoInput;\n selectedDeviceIDs[DeviceType.videoInput] = sdkSelectedDevices.videoInputDeviceId;\n }\n if (isAllowedToPublish.audio) {\n allDevices[DeviceType.audioInput] = sdkAllDevices.audioInput;\n selectedDeviceIDs[DeviceType.audioInput] = sdkSelectedDevices.audioInputDeviceId;\n }\n\n const updateDevice = useCallback(\n async ({ deviceType, deviceId }: { deviceType: DeviceType; deviceId: string }) => {\n try {\n switch (deviceType) {\n case DeviceType.audioInput:\n await actions.setAudioSettings({ deviceId });\n break;\n case DeviceType.videoInput:\n await actions.setVideoSettings({ deviceId });\n break;\n case DeviceType.audioOutput:\n await actions.setAudioOutputDevice(deviceId);\n break;\n }\n } catch (err) {\n handleError(err as Error, 'updateDevices');\n }\n },\n [handleError, actions],\n );\n\n return {\n allDevices,\n selectedDeviceIDs,\n updateDevice,\n };\n};\n", "import { useMemo } from 'react';\nimport {\n HMSPeer,\n HMSRoleName,\n selectIsConnectedToRoom,\n selectPeerCount,\n selectPeers,\n selectRemotePeers,\n} from '@100mslive/hms-video-store';\nimport { useHMSStore } from '../primitives/HmsRoomProvider';\nimport { groupByRoles } from '../utils/groupBy';\n\nexport interface useParticipantListResult {\n roles: HMSRoleName[];\n participantsByRoles: Record<string, HMSPeer[]>;\n peerCount: number;\n isConnected: boolean;\n}\n\nexport const useParticipantList = () => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);\n const peerCount = useHMSStore(selectPeerCount);\n const participantsByRoles = useMemo(() => groupByRoles(participantList), [participantList]);\n const roles = Object.keys(participantsByRoles);\n return { roles, participantsByRoles, peerCount, isConnected };\n};\n", "import { HMSPeer } from '@100mslive/hms-video-store';\n/**\n * Give array like [\n * { name: 'peer1', id: 1, roleName: 'role1' },\n * { name: 'peer2', id: 2, roleName: 'role2' }\n *]\n * the output will be\n * {\n * 'role1': [{'name': 'peer1', id: 1, roleName: 'role1'}],\n * 'role2': [{ name: 'peer2', id: 2, roleName: 'role2' }]\n * }\n * @param {HMSPeer[]} peers\n * @returns\n */\nexport const groupByRoles = (peers: HMSPeer[]) => {\n if (!peers || !Array.isArray(peers) || peers.length === 0) {\n return {};\n }\n return peers.reduce((res: Record<string, HMSPeer[]>, peer) => {\n if (!peer.roleName) {\n return res;\n }\n if (!res[peer.roleName]) {\n res[peer.roleName] = [];\n }\n res[peer.roleName].push(peer);\n return res;\n }, {});\n};\n", "import { selectHLSState, selectRecordingState, selectRTMPState } from '@100mslive/hms-video-store';\nimport { useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport interface useRecordingStreamingResult {\n isServerRecordingOn: boolean;\n isBrowserRecordingOn: boolean;\n isHLSRecordingOn: boolean;\n isStreamingOn: boolean;\n isHLSRunning: boolean;\n isRTMPRunning: boolean;\n isRecordingOn: boolean;\n}\n\nexport const useRecordingStreaming = (): useRecordingStreamingResult => {\n const recording = useHMSStore(selectRecordingState);\n const rtmp = useHMSStore(selectRTMPState);\n const hls = useHMSStore(selectHLSState);\n\n const isServerRecordingOn = recording.server.running;\n const isBrowserRecordingOn = recording.browser.running;\n const isHLSRecordingOn = recording.hls.running;\n const isStreamingOn = hls.running || rtmp.running;\n const isRecordingOn = isServerRecordingOn || isBrowserRecordingOn || isHLSRecordingOn;\n\n return {\n isServerRecordingOn,\n isBrowserRecordingOn,\n isHLSRecordingOn,\n isStreamingOn,\n isHLSRunning: hls.running,\n isRTMPRunning: rtmp.running,\n isRecordingOn,\n };\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport { HMSNotificationTypes } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSNotifications } from '../primitives/HmsRoomProvider';\n\nexport interface useAutoplayErrorResult {\n /*\n * Autoplay error message\n */\n error: string;\n /**\n * call this method on a UI element click to unblock the blocked audio autoplay.\n */\n unblockAudio: () => Promise<void>;\n /**\n * Call this method to reset(hide) the UI that is rendered when there was an error\n */\n resetError: () => void;\n}\n\n/**\n * Use this hook to show a UI(modal or a toast) when autoplay is blocked by browser and allow the user to\n * unblock the browser autoplay block\n * @returns {useAutoplayErrorResult}\n */\nexport const useAutoplayError = (): useAutoplayErrorResult => {\n const notification = useHMSNotifications(HMSNotificationTypes.ERROR);\n const [error, setError] = useState('');\n const actions = useHMSActions();\n\n const unblockAudio = useCallback(async () => {\n await actions.unblockAudio();\n }, [actions]);\n\n useEffect(() => {\n if (notification?.data.code === 3008) {\n setError(notification?.data.message);\n }\n }, [notification]);\n\n return { error, unblockAudio, resetError: () => setError('') };\n};\n", "import { useCallback, useEffect } from 'react';\nimport { HMSNotificationTypes, HMSPeerID, HMSRoleName } from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSVanillaNotifications } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useCustomEventInput<T> {\n /**\n * type of the event, for example, MODERATOR_EVENT, EMOJI_REACTIONS etc.\n */\n type: string;\n /**\n * the handler function for when the custom event comes. It's recommended\n * to use `useCallback` for the function passed in here for performance\n * reasons.\n * The callback is optional in case you want to decouple sending event and\n * handling event in the UI.\n */\n onEvent?: (data: T) => void;\n /**\n * flag to treat event payload as json.\n * If true, the payload will be stringified before sending and\n * parsed before calling the onEvent handler function.\n *\n * Set it to `false` if you want to send/receive only string messages\n *\n * Set it to `true` if you want to send/receive objects\n *\n * default value is true\n */\n json?: boolean;\n /**\n * function to handle errors happening during sending the event\n */\n handleError?: hooksErrHandler;\n}\n\nexport interface EventReceiver {\n peerId?: HMSPeerID;\n roleNames?: HMSRoleName[];\n}\n\nexport interface useCustomEventResult<T> {\n /**\n * sends the event data to others in the room who will receive it in onEvent\n *\n * @example to send message to peers of specific roles\n * ```js\n * sendEvent(data, {roleNames: ['host','guest']})\n * ```\n *\n * @example to send message to single peer\n * ```js\n * sendEvent(data, {peerId})\n * ```\n */\n sendEvent: (data: T, receiver?: EventReceiver) => void;\n}\n\nconst stringifyData = <T>(data: T, json: boolean) => (json ? JSON.stringify(data || '') : (data as unknown as string));\n\n/**\n * A generic function to implement [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events) in your UI.\n * The data to be sent to remote is expected to be a serializable JSON. The serialization\n * and deserialization is taken care of by the hook.\n */\nexport const useCustomEvent = <T>({\n type,\n json = true,\n onEvent,\n handleError = logErrorHandler,\n}: useCustomEventInput<T>): useCustomEventResult<T> => {\n const actions = useHMSActions();\n const notifications = useHMSVanillaNotifications();\n\n useEffect(() => {\n // we don't want these messages to be stored in store reserving that for chat messages\n actions.ignoreMessageTypes([type]);\n }, [actions, type]);\n\n // this is to handle messages from remote peers\n useEffect(() => {\n if (!notifications) {\n return;\n }\n const unsubscribe = notifications.onNotification(notification => {\n const msg = notification.data;\n if (msg && msg.type === type) {\n try {\n const data = json ? JSON.parse(msg.message) : msg.message;\n onEvent?.(data as T);\n } catch (err) {\n handleError(err as Error, 'handleCustomEvent');\n }\n }\n }, HMSNotificationTypes.NEW_MESSAGE);\n return unsubscribe;\n }, [notifications, type, json, onEvent, handleError]);\n\n // this is to send message to remote peers, peers of specific role or single peer, and call onEvent\n const sendEvent = useCallback(\n async (data: T, receiver?: EventReceiver) => {\n try {\n const dataStr = stringifyData<T>(data, json);\n if (receiver && Array.isArray(receiver?.roleNames)) {\n await actions.sendGroupMessage(dataStr, receiver.roleNames, type);\n } else if (typeof receiver?.peerId === 'string') {\n await actions.sendDirectMessage(dataStr, receiver.peerId, type);\n } else {\n await actions.sendBroadcastMessage(dataStr, type);\n }\n onEvent?.(data);\n } catch (err) {\n handleError(err as Error, 'sendCustomEvent');\n }\n },\n [actions, handleError, onEvent, type, json],\n );\n\n return { sendEvent };\n};\n", "import {\n HMSPeer,\n HMSRoleName,\n selectAvailableRoleNames,\n selectIsConnectedToRoom,\n selectPeerCount,\n selectPeerMetadata,\n selectPeers,\n selectRemotePeers,\n} from '@100mslive/hms-video-store';\nimport { useHMSStore, useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\nexport interface useParticipantsResult {\n /**\n * list of participants that match the given filters\n */\n participants: HMSPeer[];\n /**\n * Total number of participants in the room\n */\n peerCount: number;\n /**\n * is joined in the room\n */\n isConnected: boolean;\n /**\n * role names with at least one participant present with that role\n */\n rolesWithParticipants: HMSRoleName[];\n}\n\nexport type useParticipantsParams = {\n /** To filter by particular role */\n role: HMSRoleName;\n /**\n * To filter by particular by metadata. only supports `{ isHandRaised: true }` for now\n * @beta\n */\n metadata: Record<string, any>;\n /** To filter by name/role (partial match) */\n search: string;\n};\n\n/**\n * This can be used to get the total count of participants in the room, participants\n * filtered by role or metadata with isHandRaised or the entire participants if no params are passed\n * @param {useParticipantsParams} params\n * @returns {useParticipantsResult}\n */\nexport const useParticipants = (params?: useParticipantsParams) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const peerCount = useHMSStore(selectPeerCount);\n const availableRoles = useHMSStore(selectAvailableRoleNames);\n let participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);\n const rolesWithParticipants = Array.from(new Set(participantList.map(peer => peer.roleName)));\n const vanillaStore = useHMSVanillaStore();\n if (params?.metadata?.isHandRaised) {\n participantList = participantList.filter(peer => {\n return vanillaStore.getState(selectPeerMetadata(peer.id)).isHandRaised;\n });\n }\n if (params?.role && availableRoles.includes(params.role)) {\n participantList = participantList.filter(peer => peer.roleName === params.role);\n }\n if (params?.search) {\n const search = params.search.toLowerCase();\n participantList = participantList.filter(\n peer => peer.roleName?.toLowerCase().includes(search) || peer.name.toLowerCase().includes(search),\n );\n }\n return { participants: participantList, isConnected, peerCount, rolesWithParticipants };\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useScreenShare } from './useScreenShare';\nimport usePrevious, { isChromiumBased } from '../utils/commons';\n\nexport interface useEmbedShareResult {\n /**\n * Embed and start sharing a URL.\n *\n * It will throw an error in the following scenarios:\n * - When the URL has not been passed\n * - When the reference has not been attached to an iframe\n * - When screen share cannot be started\n */\n startEmbedShare: (value: string) => Promise<void>;\n\n /**\n * Stop sharing the embed.\n */\n stopEmbedShare: () => Promise<void>;\n /**\n * Flag to check if an embed is currently being shared.\n */\n isEmbedShareInProgress: boolean;\n\n /**\n * Reference to attach to the iframe that is responsible for rendering the URL passed.\n */\n iframeRef: React.RefObject<HTMLIFrameElement | null>;\n}\n\n/**\n * @param resetConfig Callback that implements cleanup after Embed sharing stops. It is an optional parameter.\n * @returns useEmbedShareResult\n */\nexport const useEmbedShare = (resetConfig?: () => void): useEmbedShareResult => {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const [sharing, setSharing] = useState(false);\n\n const handleScreenShareError = useCallback(() => {\n throw new Error('unable to start screen share');\n }, []);\n const inProgress = useRef(false);\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(handleScreenShareError);\n // store previous state of screensharing, it will help to reset the config after screensharing stop.\n const previouslySharing = usePrevious(amIScreenSharing);\n\n const stopShare = useCallback(async () => {\n if (amIScreenSharing) {\n await toggleScreenShare?.(); // Stop screen sharing\n iframeRef.current = null;\n }\n }, [amIScreenSharing, toggleScreenShare]);\n\n const startShare = useCallback(\n async (value: string) => {\n if (inProgress.current) {\n return;\n }\n if (!value) {\n throw new Error('URL not found');\n }\n if (amIScreenSharing) {\n throw new Error('You are already sharing');\n }\n if (!iframeRef.current) {\n throw new Error('Attach a reference `iframeRef` to iframe for sharing');\n }\n iframeRef.current.src = value;\n inProgress.current = true;\n setSharing(true);\n await toggleScreenShare?.({\n forceCurrentTab: isChromiumBased,\n cropElement: iframeRef.current,\n preferCurrentTab: isChromiumBased,\n });\n },\n [amIScreenSharing, toggleScreenShare],\n );\n\n useEffect(() => {\n if (previouslySharing && !amIScreenSharing) {\n resetConfig?.();\n if (iframeRef.current) {\n iframeRef.current.src = '';\n }\n inProgress.current = false;\n setSharing(false);\n }\n }, [amIScreenSharing, previouslySharing, resetConfig]);\n\n return {\n startEmbedShare: startShare,\n stopEmbedShare: stopShare,\n iframeRef,\n isEmbedShareInProgress: sharing,\n };\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useScreenShare } from './useScreenShare';\nimport usePrevious, { isChromiumBased, pdfIframeURL } from '../utils/commons';\n\nexport interface usePDFShareResult {\n /**\n * Start sharing a PDF file or URL.\n * It will throw an error in the following scenarios:\n * - When file or URL has not been passed, or is invalid\n * - When the reference has not been attached to an iframe\n * - When screen share cannot be started\n */\n startPDFShare: (value: File | string) => Promise<void>;\n\n /**\n * Stop sharing the PDF file or URL.\n */\n stopPDFShare: () => Promise<void>;\n /**\n * Flag to check if PDF sharing is currently in progress.\n */\n isPDFShareInProgress: boolean;\n\n /**\n * Reference to attach to the iframe that is responsible for rendering the PDF.\n */\n iframeRef: React.RefObject<HTMLIFrameElement | null>;\n}\n\n/**\n * @param resetConfig Callback that implements cleanup after PDF sharing stops. Typically used to reset the currently selected PDF file or URL in your state. It is an optional parameter.\n * @returns usePDFShareResult\n */\nexport const usePDFShare = (resetConfig?: () => void): usePDFShareResult => {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const [sharing, setSharing] = useState(false);\n\n const handleScreenShareError = useCallback(() => {\n throw new Error('unable to start screen share');\n }, []);\n const inProgress = useRef(false);\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(handleScreenShareError);\n // store previous state of screensharing, it will help to reset the config after screensharing stop.\n const previouslySharing = usePrevious(amIScreenSharing);\n\n const sendDataToPDFIframe = useCallback((file?: File) => {\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage(\n {\n theme: 2, // dark theme -> 2, light theme -> 1\n file,\n },\n '*',\n );\n }\n }, []);\n\n const stopShare = useCallback(async () => {\n if (amIScreenSharing) {\n await toggleScreenShare?.(); // Stop screen sharing\n }\n }, [amIScreenSharing, toggleScreenShare]);\n\n const startShare = useCallback(\n // eslint-disable-next-line complexity\n async (value: File | string) => {\n if (inProgress.current) {\n return;\n }\n if (!value) {\n throw new Error('File or url not found');\n }\n if (amIScreenSharing) {\n throw new Error('You are already sharing');\n }\n if (!iframeRef.current) {\n throw new Error('Attach a reference `iframeRef` to iframe for sharing');\n }\n\n iframeRef.current.src = `${pdfIframeURL}${typeof value === 'string' ? `?file=${value}` : ''}`;\n iframeRef.current.onload = () => {\n requestAnimationFrame(() => {\n if (value instanceof File) {\n sendDataToPDFIframe(value);\n }\n });\n };\n inProgress.current = true;\n setSharing(true);\n const isInsideIframe = window.self !== window.top;\n await toggleScreenShare?.({\n forceCurrentTab: isChromiumBased && !isInsideIframe,\n cropElement: iframeRef.current,\n preferCurrentTab: isChromiumBased && !isInsideIframe,\n });\n },\n [amIScreenSharing, sendDataToPDFIframe, toggleScreenShare],\n );\n\n useEffect(() => {\n if (previouslySharing && !amIScreenSharing) {\n resetConfig?.();\n if (iframeRef.current) {\n iframeRef.current.removeAttribute('src');\n }\n inProgress.current = false;\n setSharing(false);\n }\n }, [amIScreenSharing, previouslySharing, resetConfig]);\n\n return {\n startPDFShare: startShare,\n stopPDFShare: stopShare,\n iframeRef,\n isPDFShareInProgress: sharing,\n };\n};\n", "import { useRef, useState } from 'react';\nimport { HMSPeer, HMSPeerListIteratorOptions } from '@100mslive/hms-video-store';\nimport { useHMSActions } from '../primitives/HmsRoomProvider';\n\nexport interface usePaginatedParticipantsResult {\n /**\n * call this function to load initial peers and also when you want to poll the peers information\n */\n loadPeers: Promise<void>;\n /**\n * this function is to be called when loadPeers is called at least once. This will fetch the next batch of peers\n */\n loadMorePeers: Promise<void>;\n hasNext: () => boolean;\n // list of peers loaded\n peers: HMSPeer[];\n // total number of peers matching the input options at the time of the request\n total: number;\n}\n\nexport type usePaginatedParticipantsInput = HMSPeerListIteratorOptions;\n\nconst processPeers = (peers: HMSPeer[]) => {\n return peers.reduce<Record<string, HMSPeer>>((acc, peer) => {\n acc[peer.id] = peer;\n return acc;\n }, {});\n};\n\nexport const usePaginatedParticipants = (options: HMSPeerListIteratorOptions) => {\n const actions = useHMSActions();\n const iterator = useRef(actions.getPeerListIterator(options));\n const [peers, setPeers] = useState<Record<string, HMSPeer>>({});\n const [total, setTotal] = useState(0);\n\n return {\n loadPeers: () =>\n iterator.current.findPeers().then(peers => {\n setPeers(processPeers(peers));\n setTotal(iterator.current.getTotal());\n }),\n loadMorePeers: () =>\n iterator.current.next().then(peers => {\n setPeers(prevPeers => {\n return {\n ...prevPeers,\n ...processPeers(peers),\n };\n });\n setTotal(iterator.current.getTotal());\n }),\n hasNext: () => iterator.current.hasNext(),\n total,\n peers: Object.values(peers),\n };\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport {\n selectAppData,\n selectIsConnectedToRoom,\n selectLocalPeer,\n selectPermissions,\n selectWhiteboard,\n} from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport const useWhiteboard = (isMobile = false) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const localPeerUserId = useHMSStore(selectLocalPeer)?.customerUserId;\n const whiteboard = useHMSStore(selectWhiteboard);\n const isHeadless = useHMSStore(selectAppData('disableNotifications'));\n const open = !!whiteboard?.open;\n const isOwner = whiteboard?.owner === localPeerUserId;\n const actions = useHMSActions();\n const [isEnabled, setIsEnabled] = useState(false);\n const permissions = useHMSStore(selectPermissions)?.whiteboard;\n const isAdmin = !!permissions?.includes('admin');\n\n useEffect(() => {\n if (isConnected) {\n setIsEnabled(actions.interactivityCenter.whiteboard.isEnabled);\n }\n }, [isConnected, actions]);\n\n const toggle = useCallback(async () => {\n if (!isConnected || !isAdmin) {\n return;\n }\n\n if (open) {\n isOwner && (await actions.interactivityCenter.whiteboard.close());\n } else {\n await actions.interactivityCenter.whiteboard.open();\n }\n }, [actions, isOwner, isAdmin, open, isConnected]);\n\n return {\n open,\n token: whiteboard?.token,\n endpoint: whiteboard?.addr,\n isOwner,\n isAdmin,\n zoomToContent: isHeadless || isMobile,\n toggle: isEnabled && isAdmin ? toggle : undefined,\n };\n};\n", "// write a hook to use the MDN notifications API to show a notification when the user is away from the page\nimport { useCallback } from 'react';\nimport { selectLocalPeerRoleName } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\n// Do not prompt if preview is not available. Skips for beam\nexport const useAwayNotifications = () => {\n const vanillaStore = useHMSVanillaStore();\n const requestPermission = useCallback(async () => {\n // Headless check for beam\n if (!('Notification' in window) || navigator.webdriver) {\n console.debug('Request Permsissions : Notifications not supported or headless browser');\n // Notifications not supported\n return;\n }\n if (Notification?.permission === 'granted' || Notification?.permission === 'denied') {\n return;\n }\n const unsubscribe = vanillaStore.subscribe(async role => {\n if (role && role !== '__internal_recorder') {\n await Notification.requestPermission();\n unsubscribe?.();\n }\n }, selectLocalPeerRoleName);\n }, [vanillaStore]);\n\n const showNotification = useCallback((title: string, options?: NotificationOptions) => {\n // Notifications not supported\n if (!('Notification' in window)) {\n console.debug('Show Notifications: Notifications not supported or headless browser');\n return;\n }\n if (\n Notification?.permission === 'denied' ||\n /**\n * document.visibilityState is still 'visible' when the tab is active but window is not open\n * document.hasFocus() is false when the window is not active\n */\n (document.visibilityState === 'visible' && document.hasFocus())\n ) {\n return;\n }\n const notification = new Notification(title, options);\n\n const closeNotification = () => {\n if (document.visibilityState === 'visible' && document.hasFocus()) {\n notification?.close();\n document.removeEventListener('visibilitychange', closeNotification);\n }\n };\n document.addEventListener('visibilitychange', closeNotification);\n }, []);\n\n return { requestPermission, showNotification };\n};\n", "import { useEffect } from 'react';\nimport { HMSNotificationTypes } from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSVanillaNotifications } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface HMSTranscript {\n start: number;\n end: number;\n peer_id: string;\n final: boolean;\n transcript: string;\n}\n\nexport interface useHMSTranscriptInput {\n onTranscript?: (data: HMSTranscript[]) => void;\n handleError?: hooksErrHandler;\n}\n\n/**\n * A generic function to implement [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events) in your UI.\n * The data to be sent to remote is expected to be a serializable JSON. The serialization\n * and deserialization is taken care of by the hook.\n */\nexport const useTranscript = ({ onTranscript, handleError = logErrorHandler }: useHMSTranscriptInput) => {\n const type = 'hms_transcript';\n const notifications = useHMSVanillaNotifications();\n\n // this is to handle messages from remote peers\n useEffect(() => {\n if (!notifications) {\n return;\n }\n const unsubscribe = notifications.onNotification(notification => {\n const msg = notification.data;\n if (msg && msg.type === type) {\n try {\n const message = JSON.parse(msg.message);\n const data = message.results as HMSTranscript[];\n onTranscript?.(data);\n } catch (err) {\n handleError(err as Error, 'handleCaptionEvent');\n }\n }\n }, HMSNotificationTypes.NEW_MESSAGE);\n return unsubscribe;\n }, [notifications, type, handleError, onTranscript]);\n\n return;\n};\n", "import { HMSAudioMode, selectLocalMediaSettings } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport const useAudioMode = () => {\n const hmsActions = useHMSActions();\n const { audioMode } = useHMSStore(selectLocalMediaSettings);\n const isMusicModeEnabled = audioMode === HMSAudioMode.MUSIC;\n const toggleMusicMode = async () =>\n await hmsActions.setAudioSettings({ audioMode: isMusicModeEnabled ? HMSAudioMode.VOICE : HMSAudioMode.MUSIC });\n return { toggleMusicMode, isMusicModeEnabled };\n};\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "HMSRoomProvider", "getVideoTracksFromPeers", "throwErrorHandler", "useAVToggle", "useAudioLevelStyles", "useAudioMode", "useAutoplayError", "useAwayNotifications", "useCustomEvent", "useDevices", "useEmbedShare", "useHMSActions", "useHMSNotifications", "useHMSStatsStore", "useHMSStore", "useHMSVanillaNotifications", "useHMSVanillaStore", "usePDFShare", "usePaginatedParticipants", "useParticipantList", "useParticipants", "usePreviewJoin", "useRecordingStreaming", "useRemoteAVToggle", "useScreenShare", "useTranscript", "useVideo", "useVideoList", "useWhiteboard", "__toCommonJS", "import_react", "import_zustand", "import_hms_video_store", "import_react", "import_shallow", "HMSLogger", "tag", "data", "level", "hooksErrorMessage", "makeHMSStoreHook", "hmsContext", "selector", "equalityFn", "shallow", "HMSLogger", "HMSContextConsumer", "useStore", "makeHMSStatsStoreHook", "isBrowser", "HMSContext", "HMSRoomProvider", "children", "actions", "store", "notifications", "stats", "isHMSStatsOn", "leaveOnUnload", "providerProps", "errFn", "create", "__spreadProps", "__spreadValues", "hmsReactiveStore", "React", "isBrowser", "unloadCallback", "useHMSStore", "makeHMSStoreHook", "useHMSStatsStore", "makeHMSStatsStoreHook", "useHMSVanillaStore", "HMSContextConsumer", "hooksErrorMessage", "useHMSVanillaNotifications", "useHMSActions", "useHMSNotifications", "type", "notification", "setNotification", "import_react", "import_hms_video_store", "import_react", "import_hms_video_store", "TAG", "logErrorHandler", "err", "method", "HMSLogger", "throwErrorHandler", "usePrevious", "state", "ref", "chromiumBasedBrowsers", "isChromiumBased", "value", "_a", "_b", "pdfIframeURL", "usePreviewJoin", "name", "token", "metadata", "handleError", "logErrorHandler", "initEndpoint", "initialSettings", "captureNetworkQualityInPreview", "asRole", "autoManageVideo", "autoManageWakeLock", "iceServers", "actions", "useHMSActions", "roomState", "useHMSStore", "isConnected", "enableJoin", "config", "preview", "__async", "err", "join", "import_react", "import_hms_video_store", "useAVToggle", "handleError", "logErrorHandler", "isLocalAudioEnabled", "useHMSStore", "isLocalVideoEnabled", "selectAllowed", "isAllowedToPublish", "actions", "useHMSActions", "toggleAudio", "__async", "err", "toggleVideo", "import_react", "import_hms_video_store", "useVideo", "trackId", "attach", "actions", "useHMSActions", "videoRef", "track", "useHMSStore", "prevTrackId", "setRefs", "node", "__async", "HMSLogger", "err", "import_react", "import_hms_video_store", "useScreenShare", "handleError", "logErrorHandler", "_a", "_b", "actions", "useHMSActions", "amIScreenSharing", "useHMSStore", "screenSharePeer", "screenShare", "toggleScreenShare", "config", "__async", "err", "import_react", "import_hms_video_store", "toggleTrackEnabled", "actions", "track", "handleError", "__async", "err", "useRemoteAVToggle", "audioTrackId", "videoTrackId", "logErrorHandler", "useHMSActions", "audioTrack", "useHMSStore", "videoTrack", "volume", "permissions", "canToggleVideo", "canToggleAudio", "toggleAudio", "toggleVideo", "setVolume", "import_react", "import_react_resize_detector", "import_hms_video_store", "chunk", "elements", "chunkSize", "onlyOnePage", "resultArray", "tile", "index", "chunkIndex", "chunkElements", "tilesInFirstPage", "isLastPageDifferentFromFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "chunks", "ch", "page", "element", "isLastPage", "width", "height", "__spreadProps", "__spreadValues", "mode", "array", "modeMap", "maxEl", "maxCount", "i", "el", "getModeAspectRatio", "tracks", "track", "_a", "_b", "largestRect", "containerWidth", "containerHeight", "numRects", "aspectRatio", "best", "startCols", "colDelta", "cols", "rows", "hScale", "vScale", "area", "getTileSizesWithColConstraint", "parentWidth", "parentHeight", "count", "tilesinLastPage", "getTileSizesWithPageConstraint", "initialWidth", "initialHeight", "remWidth", "remHeight", "getTileSizesWithRowConstraint", "calculateLayoutSizes", "maxTileCount", "maxRowCount", "maxColCount", "getVideoTracksFromPeers", "peers", "includeScreenShareForPeer", "filterNonPublishingPeers", "peerTiles", "peer", "trackId", "screenShareTrackID", "trackID", "DEFAULTS", "useVideoList", "peers", "maxTileCount", "maxColCount", "maxRowCount", "includeScreenShareForPeer", "aspectRatio", "filterNonPublishingPeers", "offsetY", "width", "height", "ref", "tracksMap", "useHMSVanillaStore", "tracksWithPeer", "getVideoTracksFromPeers", "finalAspectRatio", "getModeAspectRatio", "count", "tilesInFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "isLastPageDifferentFromFirstPage", "calculateLayoutSizes", "chunkElements", "import_react", "import_hms_video_store", "useAudioLevelStyles", "trackId", "getStyle", "ref", "store", "useHMSVanillaStore", "level", "styles", "key", "import_react", "import_hms_video_store", "useDevices", "handleError", "logErrorHandler", "actions", "useHMSActions", "sdkAllDevices", "useHMSStore", "sdkSelectedDevices", "selectAllowed", "isAllowedToPublish", "selectedDeviceIDs", "allDevices", "updateDevice", "_0", "__async", "deviceType", "deviceId", "err", "import_react", "import_hms_video_store", "groupByRoles", "peers", "res", "peer", "useParticipantList", "isConnected", "useHMSStore", "participantList", "peerCount", "participantsByRoles", "groupByRoles", "import_hms_video_store", "useRecordingStreaming", "recording", "useHMSStore", "rtmp", "hls", "isServerRecordingOn", "isBrowserRecordingOn", "isHLSRecordingOn", "isStreamingOn", "isRecordingOn", "import_react", "import_hms_video_store", "useAutoplayError", "notification", "useHMSNotifications", "error", "setError", "actions", "useHMSActions", "unblockAudio", "__async", "import_react", "import_hms_video_store", "stringifyData", "data", "json", "useCustomEvent", "type", "onEvent", "handleError", "logErrorHandler", "actions", "useHMSActions", "notifications", "useHMSVanillaNotifications", "notification", "msg", "err", "receiver", "__async", "dataStr", "import_hms_video_store", "useParticipants", "params", "_a", "isConnected", "useHMSStore", "peerCount", "availableRoles", "participantList", "rolesWithParticipants", "peer", "vanillaStore", "useHMSVanillaStore", "search", "import_react", "useEmbedShare", "resetConfig", "iframeRef", "sharing", "setSharing", "handleScreenShareError", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "stopShare", "__async", "startShare", "value", "isChromiumBased", "import_react", "usePDFShare", "resetConfig", "iframeRef", "sharing", "setSharing", "handleScreenShareError", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "sendDataToPDFIframe", "file", "_a", "stopShare", "__async", "startShare", "value", "pdfIframeURL", "isInsideIframe", "isChromiumBased", "import_react", "processPeers", "peers", "acc", "peer", "usePaginatedParticipants", "options", "actions", "useHMSActions", "iterator", "setPeers", "total", "setTotal", "prevPeers", "__spreadValues", "import_react", "import_hms_video_store", "useWhiteboard", "isMobile", "_a", "_b", "isConnected", "useHMSStore", "localPeerUserId", "whiteboard", "isHeadless", "open", "isOwner", "actions", "useHMSActions", "isEnabled", "setIsEnabled", "permissions", "isAdmin", "toggle", "__async", "import_react", "import_hms_video_store", "useAwayNotifications", "vanillaStore", "useHMSVanillaStore", "requestPermission", "__async", "unsubscribe", "role", "showNotification", "title", "options", "notification", "closeNotification", "import_react", "import_hms_video_store", "useTranscript", "onTranscript", "handleError", "logErrorHandler", "type", "notifications", "useHMSVanillaNotifications", "notification", "msg", "data", "err", "import_hms_video_store", "useAudioMode", "hmsActions", "useHMSActions", "audioMode", "useHMSStore", "isMusicModeEnabled", "__async", "__reExport", "index_exports"]
5
+ "mappings": "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",
6
+ "names": ["src_exports", "__export", "HMSRoomProvider", "getVideoTracksFromPeers", "throwErrorHandler", "useAVToggle", "useAudioLevelStyles", "useAudioMode", "useAutoplayError", "useAwayNotifications", "useCustomEvent", "useDevices", "useEmbedShare", "useHMSActions", "useHMSNotifications", "useHMSStatsStore", "useHMSStore", "useHMSVanillaNotifications", "useHMSVanillaStore", "usePDFShare", "usePaginatedParticipants", "useParticipantList", "useParticipants", "usePreviewJoin", "useRecordingStreaming", "useRemoteAVToggle", "useScreenShare", "useTranscript", "useVideo", "useVideoList", "useWhiteboard", "__toCommonJS", "import_react", "import_zustand", "import_hms_video_store", "import_react", "import_shallow", "HMSLogger", "tag", "data", "level", "hooksErrorMessage", "makeHMSStoreHook", "hmsContext", "selector", "equalityFn", "shallow", "HMSLogger", "HMSContextConsumer", "useStore", "makeHMSStatsStoreHook", "isBrowser", "HMSContext", "HMSRoomProvider", "children", "actions", "store", "notifications", "stats", "isHMSStatsOn", "leaveOnUnload", "providerProps", "errFn", "create", "__spreadProps", "__spreadValues", "hmsReactiveStore", "React", "isBrowser", "unloadCallback", "useHMSStore", "makeHMSStoreHook", "useHMSStatsStore", "makeHMSStatsStoreHook", "useHMSVanillaStore", "HMSContextConsumer", "hooksErrorMessage", "useHMSVanillaNotifications", "useHMSActions", "useHMSNotifications", "type", "notification", "setNotification", "import_react", "import_hms_video_store", "import_react", "import_hms_video_store", "TAG", "logErrorHandler", "err", "method", "HMSLogger", "throwErrorHandler", "usePrevious", "state", "ref", "chromiumBasedBrowsers", "isChromiumBased", "value", "_a", "_b", "pdfIframeURL", "usePreviewJoin", "name", "token", "metadata", "handleError", "logErrorHandler", "initEndpoint", "initialSettings", "captureNetworkQualityInPreview", "asRole", "autoManageVideo", "autoManageWakeLock", "iceServers", "actions", "useHMSActions", "roomState", "useHMSStore", "isConnected", "enableJoin", "config", "preview", "__async", "err", "join", "import_react", "import_hms_video_store", "useAVToggle", "handleError", "logErrorHandler", "isLocalAudioEnabled", "useHMSStore", "isLocalVideoEnabled", "selectAllowed", "isAllowedToPublish", "actions", "useHMSActions", "toggleAudio", "__async", "err", "toggleVideo", "import_react", "import_hms_video_store", "useVideo", "trackId", "attach", "actions", "useHMSActions", "videoRef", "track", "useHMSStore", "prevTrackId", "setRefs", "node", "__async", "HMSLogger", "err", "import_react", "import_hms_video_store", "useScreenShare", "handleError", "logErrorHandler", "_a", "_b", "actions", "useHMSActions", "amIScreenSharing", "useHMSStore", "screenSharePeer", "screenShare", "toggleScreenShare", "config", "__async", "err", "import_react", "import_hms_video_store", "toggleTrackEnabled", "actions", "track", "handleError", "__async", "err", "useRemoteAVToggle", "audioTrackId", "videoTrackId", "logErrorHandler", "useHMSActions", "audioTrack", "useHMSStore", "videoTrack", "volume", "permissions", "canToggleVideo", "canToggleAudio", "toggleAudio", "toggleVideo", "setVolume", "import_react", "import_react_resize_detector", "import_hms_video_store", "chunk", "elements", "chunkSize", "onlyOnePage", "resultArray", "tile", "index", "chunkIndex", "chunkElements", "tilesInFirstPage", "isLastPageDifferentFromFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "chunks", "ch", "page", "element", "isLastPage", "width", "height", "__spreadProps", "__spreadValues", "mode", "array", "modeMap", "maxEl", "maxCount", "i", "el", "getModeAspectRatio", "tracks", "track", "_a", "_b", "largestRect", "containerWidth", "containerHeight", "numRects", "aspectRatio", "best", "startCols", "colDelta", "cols", "rows", "hScale", "vScale", "area", "getTileSizesWithColConstraint", "parentWidth", "parentHeight", "count", "tilesinLastPage", "getTileSizesWithPageConstraint", "initialWidth", "initialHeight", "remWidth", "remHeight", "getTileSizesWithRowConstraint", "calculateLayoutSizes", "maxTileCount", "maxRowCount", "maxColCount", "getVideoTracksFromPeers", "peers", "includeScreenShareForPeer", "filterNonPublishingPeers", "peerTiles", "peer", "trackId", "screenShareTrackID", "trackID", "DEFAULTS", "useVideoList", "peers", "maxTileCount", "maxColCount", "maxRowCount", "includeScreenShareForPeer", "aspectRatio", "filterNonPublishingPeers", "offsetY", "width", "height", "ref", "tracksMap", "useHMSVanillaStore", "tracksWithPeer", "getVideoTracksFromPeers", "finalAspectRatio", "getModeAspectRatio", "count", "tilesInFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "isLastPageDifferentFromFirstPage", "calculateLayoutSizes", "chunkElements", "import_react", "import_hms_video_store", "useAudioLevelStyles", "trackId", "getStyle", "ref", "store", "useHMSVanillaStore", "level", "styles", "key", "import_react", "import_hms_video_store", "useDevices", "handleError", "logErrorHandler", "actions", "useHMSActions", "sdkAllDevices", "useHMSStore", "sdkSelectedDevices", "selectAllowed", "isAllowedToPublish", "selectedDeviceIDs", "allDevices", "updateDevice", "_0", "__async", "deviceType", "deviceId", "err", "import_react", "import_hms_video_store", "groupByRoles", "peers", "res", "peer", "useParticipantList", "isConnected", "useHMSStore", "participantList", "peerCount", "participantsByRoles", "groupByRoles", "import_hms_video_store", "useRecordingStreaming", "recording", "useHMSStore", "rtmp", "hls", "isServerRecordingOn", "isBrowserRecordingOn", "isHLSRecordingOn", "isStreamingOn", "isRecordingOn", "import_react", "import_hms_video_store", "useAutoplayError", "notification", "useHMSNotifications", "error", "setError", "actions", "useHMSActions", "unblockAudio", "__async", "import_react", "import_hms_video_store", "stringifyData", "data", "json", "useCustomEvent", "type", "onEvent", "handleError", "logErrorHandler", "actions", "useHMSActions", "notifications", "useHMSVanillaNotifications", "notification", "msg", "err", "receiver", "__async", "dataStr", "import_hms_video_store", "useParticipants", "params", "_a", "isConnected", "useHMSStore", "peerCount", "availableRoles", "participantList", "rolesWithParticipants", "peer", "vanillaStore", "useHMSVanillaStore", "search", "import_react", "useEmbedShare", "resetConfig", "iframeRef", "sharing", "setSharing", "handleScreenShareError", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "stopShare", "__async", "startShare", "value", "isChromiumBased", "import_react", "usePDFShare", "resetConfig", "iframeRef", "sharing", "setSharing", "handleScreenShareError", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "sendDataToPDFIframe", "file", "_a", "stopShare", "__async", "startShare", "value", "pdfIframeURL", "isInsideIframe", "isChromiumBased", "import_react", "processPeers", "peers", "acc", "peer", "usePaginatedParticipants", "options", "actions", "useHMSActions", "iterator", "setPeers", "total", "setTotal", "prevPeers", "__spreadValues", "import_react", "import_hms_video_store", "useWhiteboard", "isMobile", "_a", "_b", "isConnected", "useHMSStore", "localPeerUserId", "whiteboard", "isHeadless", "open", "isOwner", "actions", "useHMSActions", "isEnabled", "setIsEnabled", "permissions", "isAdmin", "toggle", "__async", "import_react", "import_hms_video_store", "useAwayNotifications", "vanillaStore", "useHMSVanillaStore", "requestPermission", "__async", "unsubscribe", "role", "showNotification", "title", "options", "notification", "closeNotification", "import_react", "import_hms_video_store", "useTranscript", "onTranscript", "handleError", "logErrorHandler", "type", "notifications", "useHMSVanillaNotifications", "notification", "msg", "data", "err", "import_hms_video_store", "useAudioMode", "hmsActions", "useHMSActions", "audioMode", "useHMSStore", "isMusicModeEnabled", "__async", "__reExport", "src_exports"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  var He=Object.defineProperty,Pe=Object.defineProperties;var be=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var we=Object.prototype.hasOwnProperty,ve=Object.prototype.propertyIsEnumerable;var Y=(t,e,r)=>e in t?He(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,E=(t,e)=>{for(var r in e||(e={}))we.call(e,r)&&Y(t,r,e[r]);if($)for(var r of $(e))ve.call(e,r)&&Y(t,r,e[r]);return t},I=(t,e)=>Pe(t,be(e));var p=(t,e,r)=>new Promise((s,o)=>{var i=a=>{try{n(r.next(a))}catch(u){o(u)}},c=a=>{try{n(r.throw(a))}catch(u){o(u)}},n=a=>a.done?s(a.value):Promise.resolve(a.value).then(i,c);n((r=r.apply(t,e)).next())});import te,{createContext as Te,useContext as N,useEffect as re,useMemo as ye,useState as Ee}from"react";import D from"zustand";import{HMSReactiveStore as Re}from"@100mslive/hms-video-store";import{useContext as K}from"react";import Q from"zustand/shallow";var b=class{static v(e,...r){this.log(0,e,...r)}static d(e,...r){this.log(1,e,...r)}static i(e,...r){this.log(2,e,...r)}static w(e,...r){this.log(3,e,...r)}static e(e,...r){this.log(4,e,...r)}static log(e,r,...s){if(!(this.level.valueOf()>e.valueOf()))switch(e){case 0:{console.log("HMSui-components: ",r,...s);break}case 1:{console.debug("HMSui-components: ",r,...s);break}case 2:{console.info("HMSui-components: ",r,...s);break}case 3:{console.warn("HMSui-components: ",r,...s);break}case 4:{console.error("HMSui-components: ",r,...s);break}}}};b.level=0;var R=`It seems like you forgot to add your component within a top level HMSRoomProvider, please refer to 100ms react docs(https://www.100ms.live/docs/javascript/v2/how-to-guides/install-the-sdk/integration#react-hooks) to check on the required steps for using this hook. If the provider is present
2
- at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;function X(t){return(r,s=Q)=>{r||b.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=K(t);if(!o)throw new Error(R);let i=o.store;return i(r,s)}}function Z(t){return(r,s=Q)=>{r||b.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=K(t);if(!o)throw new Error(R);let i=o.statsStore;return i==null?void 0:i(r,s)}}var ee=typeof window!="undefined";var x=Te(null),xe=({children:t,actions:e,store:r,notifications:s,stats:o,isHMSStatsOn:i=!1,leaveOnUnload:c=!0})=>{let n=ye(()=>{let a,u=()=>{throw new Error("modifying store is not allowed")};if(e&&r)a={actions:e,store:D(I(E({},r),{setState:u,destroy:u}))},s&&(a.notifications=s),o&&(a.statsStore=D({getState:o.getState,subscribe:o.subscribe,setState:u,destroy:u}));else{let l=new Re;if(a={actions:l.getActions(),store:D(I(E({},l.getStore()),{setState:u,destroy:u})),notifications:l.getNotifications()},i){let d=l.getStats();a.statsStore=D({getState:d.getState,subscribe:d.subscribe,setState:u,destroy:u})}}return a.actions.setFrameworkInfo({type:"react-web",version:te.version,sdkVersion:process.env.REACT_SDK_VERSION}),a},[e,r,s,o,i]);return re(()=>{if(ee&&c){let a=()=>n.actions.leave();return window.addEventListener("unload",a),()=>{window.removeEventListener("unload",a)}}return()=>{}},[c,n]),te.createElement(x.Provider,{value:n},t)},m=X(x),ke=Z(x),v=()=>{let t=N(x);if(!t)throw new Error(R);return t.store},A=()=>{let t=N(x);if(!t)throw new Error(R);return t.notifications},g=()=>{let t=N(x);if(!t)throw new Error(R);return t.actions},O=t=>{let e=N(x),[r,s]=Ee(null);if(!e)throw new Error(R);return re(()=>e.notifications?e.notifications.onNotification(i=>{s(i)},t):void 0,[e.notifications,t]),r};import{useCallback as se,useMemo as Le}from"react";import{HMSRoomState as ie,selectIsConnectedToRoom as Oe,selectRoomState as Fe}from"@100mslive/hms-video-store";import{useEffect as Ie,useRef as Ae}from"react";import{parsedUserAgent as Ce}from"@100mslive/hms-video-store";var Ve="react-sdk",H=(t,e)=>b.e(Ve,e,t),De=t=>{throw t};function C(t){let e=Ae();return Ie(()=>{e.current=t}),e.current}var Ne=["blink"],k=Ne.some(t=>{var e,r;return((r=(e=Ce.getEngine())==null?void 0:e.name)==null?void 0:r.toLowerCase())===t}),oe="https://pdf-annotation.100ms.live/generic/web/viewer.html";var We=({name:t="",token:e,metadata:r,handleError:s=H,initEndpoint:o,initialSettings:i,captureNetworkQualityInPreview:c,asRole:n,autoManageVideo:a,autoManageWakeLock:u,iceServers:l})=>{let d=g(),f=m(Fe),S=m(Oe)||!1,h=f===ie.Preview,M=Le(()=>({userName:t,authToken:e,metaData:r,rememberDeviceSelection:!0,settings:i,initEndpoint:o,asRole:n,captureNetworkQualityInPreview:c,autoManageVideo:a,autoManageWakeLock:u,iceServers:l}),[t,e,r,o,i,c,n,a,u,l]),y=se(()=>p(null,null,function*(){if(e)try{(S||f!==ie.Disconnected)&&(yield d.leave().catch(()=>{})),yield d.preview(M)}catch(P){s(P,"preview")}}),[e,S,f,d,M,s]),w=se(()=>p(null,null,function*(){if(e)try{yield d.join(M)}catch(P){s(P,"join")}}),[d,M,s,e]);return{enableJoin:h,join:w,isConnected:S,preview:y}};import{useCallback as ne}from"react";import{selectIsAllowedToPreviewMedia as Be,selectIsAllowedToPublish as Ge,selectIsInPreview as Ue,selectIsLocalAudioEnabled as qe,selectIsLocalVideoEnabled as ze}from"@100mslive/hms-video-store";var je=(t=H)=>{let e=m(qe),r=m(ze),o=m(Ue)?Be:Ge,i=m(o),c=g(),n=ne(()=>p(null,null,function*(){try{yield c.setLocalAudioEnabled(!e)}catch(u){t(u,"toggleAudio")}}),[c,e,t]),a=ne(()=>p(null,null,function*(){try{yield c.setLocalVideoEnabled(!r)}catch(u){t(u,"toggleVideo")}}),[c,r,t]);return{isLocalAudioEnabled:e,isLocalVideoEnabled:r,toggleAudio:i!=null&&i.audio?n:void 0,toggleVideo:i!=null&&i.video?a:void 0}};import{useCallback as _e,useEffect as F,useRef as ae}from"react";import{selectVideoTrackByID as Je}from"@100mslive/hms-video-store";var $e=({trackId:t,attach:e})=>{let r=g(),s=ae(null),o=m(Je(t)),i=ae(),c=_e(n=>{n&&(s.current=n)},[]);return F(()=>{i.current?o!=null&&o.id&&i.current!==(o==null?void 0:o.id)&&p(null,null,function*(){if(s.current)try{b.d("detaching because different track is passed"),yield r.detachVideo(i.current,s.current)}catch(n){b.w("detach video error for track",i.current,n)}i.current=o==null?void 0:o.id}):i.current=o==null?void 0:o.id},[o==null?void 0:o.id,r]),F(()=>{p(null,null,function*(){o!=null&&o.id&&s.current&&(e!==!1?yield r.attachVideo(o.id,s.current):yield r.detachVideo(o.id,s.current))})},[o,e,r]),F(()=>()=>{p(null,null,function*(){if(s.current&&o)try{yield r.detachVideo(o.id,s.current)}catch(n){b.w("detach video error for track",o.id,n)}})},[]),{videoRef:c}};import{useCallback as Ye}from"react";import{selectIsLocalScreenShared as Ke,selectPeerScreenSharing as Qe,selectScreenSharesByPeerId as Xe}from"@100mslive/hms-video-store";var V=(t=H)=>{var c,n;let e=g(),r=m(Ke),s=m(Qe),o=m(Xe(s==null?void 0:s.id)),i=Ye(a=>p(null,null,function*(){try{yield e.setScreenShareEnabled(!r,a)}catch(u){t(u,"toggleScreenShare")}}),[e,r,t]);return{amIScreenSharing:r,screenSharingPeerId:s==null?void 0:s.id,screenSharingPeerName:s==null?void 0:s.name,screenShareVideoTrackId:(c=o==null?void 0:o.video)==null?void 0:c.id,screenShareAudioTrackId:(n=o==null?void 0:o.audio)==null?void 0:n.id,toggleScreenShare:i}};import{useCallback as W}from"react";import{selectAudioTrackByID as Ze,selectAudioTrackVolume as et,selectPermissions as tt,selectVideoTrackByID as rt}from"@100mslive/hms-video-store";var ce=(t,e,r)=>p(null,null,function*(){if(e)try{yield t.setRemoteTrackEnabled(e.id,!e.enabled)}catch(s){r(s,"remoteToggle")}}),ot=(t,e,r=H)=>{let s=g(),o=m(Ze(t)),i=m(rt(e)),c=m(et(o==null?void 0:o.id)),n=m(tt),a=i!=null&&i.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,u=o!=null&&o.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,l=W(()=>p(null,null,function*(){yield ce(s,o,r)}),[s,o,r]),d=W(()=>p(null,null,function*(){yield ce(s,i,r)}),[s,r,i]),f=W(S=>{o&&s.setVolume(S,o.id)},[s,o]);return{isAudioEnabled:!!(o!=null&&o.enabled),isVideoEnabled:!!(i!=null&&i.enabled),volume:c,toggleAudio:o&&u?l:void 0,toggleVideo:(i==null?void 0:i.source)==="regular"&&a?d:void 0,setVolume:o?f:void 0}};import{useMemo as U}from"react";import{useResizeDetector as ut}from"react-resize-detector";import{selectTracksMap as lt}from"@100mslive/hms-video-store";var st=(t,e,r)=>t.reduce((s,o,i)=>{let c=Math.floor(i/e);return c>0&&r||(s[c]||(s[c]=[]),s[c].push(o)),s},[]),ue=({elements:t,tilesInFirstPage:e,onlyOnePage:r,isLastPageDifferentFromFirstPage:s,defaultWidth:o,defaultHeight:i,lastPageWidth:c,lastPageHeight:n})=>{let a=st(t,e,r);return a.map((u,l)=>u.map(d=>{let f=l===a.length-1,S=s&&f?c:o,h=s&&f?n:i;return I(E({},d),{height:h,width:S})}))};function it(t){if(t.length===0)return null;let e={},r=t[0],s=1;for(let o=0;o<t.length;o++){let i=t[o];e[i]===null?e[i]=1:e[i]++,e[i]>s&&(r=i,s=e[i])}return r}var le=t=>it(t.filter(e=>{var r,s;return((r=e.track)==null?void 0:r.width)&&((s=e.track)==null?void 0:s.height)}).map(e=>{var o,i;let r=(o=e.track)==null?void 0:o.width,s=(i=e.track)==null?void 0:i.height;return(r||1)/(s||1)})),B=(t,e,r,s,o)=>{if(t<0||e<0)throw new Error("Container must have a non-negative area");if(r<1||!Number.isInteger(r))throw new Error("Number of shapes to place must be a positive integer");let i=s&&o&&s/o;if(i!==void 0&&isNaN(i))throw new Error("Aspect ratio must be a number");let c={area:0,cols:0,rows:0,width:0,height:0},n=r,a=-1;if(i!==void 0)for(let u=n;u>0;u+=a){let l=Math.ceil(r/u),d=t/(u*i),f=e/l,S,h;d<=f?(S=t/u,h=S/i):(h=e/l,S=h*i);let M=S*h;M>c.area&&(c={area:M,width:S,height:h,rows:l,cols:u})}return c},nt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(t/e)/(o.width/o.height))),s),S=t/f,h=S/(o.width/o.height);h>e&&(h=e,S=h/(o.height/o.width));let M=Math.floor(e/h);if(c=h,i=S,l=Math.min(r,M*f),d=r%(M*f),u=d>0&&r>M*f,u){let y=Math.min(Math.ceil(Math.sqrt(d*(t/e)/(o.width/o.height))),s),w=t/y,P=w/(o.width/o.height);P>e&&(P=e,w=P/(o.height/o.width)),a=P,n=w}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},at=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,{width:f,height:S}=B(t,e,Math.min(r,s),o.width,o.height);if(i=f,c=S,l=Math.min(r,s),d=r%s,u=d>0&&r>s,u){let{width:h,height:M}=B(t,e,d,o.width,o.height);n=h,a=M}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},ct=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(o.width/o.height)/(t/e))),s),S=e/f,h=S*(o.width/o.height),M=Math.floor(t/h);if(i=h,c=S,l=Math.min(r,f*M),d=r%(f*M),u=d>0&&r>f*M,u){let y=Math.min(Math.ceil(Math.sqrt(d*(o.width/o.height)/(t/e))),s),w=e/y,P=w*(o.width/o.height);a=w,n=P}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}};function de({count:t,parentWidth:e,parentHeight:r,maxTileCount:s,maxRowCount:o,maxColCount:i,aspectRatio:c}){let n=0,a=0,u=0,l=0,d=!1,f=0;if(t===0)return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d};if(s)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=at({parentWidth:e,parentHeight:r,count:t,maxCount:s,aspectRatio:c}));else if(o)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=ct({parentWidth:e,parentHeight:r,count:t,maxCount:o,aspectRatio:c}));else if(i)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=nt({parentWidth:e,parentHeight:r,count:t,maxCount:i,aspectRatio:c}));else{let{width:S,height:h}=B(e,r,t,c.width,c.height);n=S,a=h,f=t}return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}}var G=(t,e,r,s=!0)=>{if(!t||!e||!r)return[];let o=[];for(let i of t)if(i.videoTrack===void 0&&i.audioTrack&&e[i.audioTrack]?o.push({peer:i}):i.videoTrack&&e[i.videoTrack]?o.push({track:e[i.videoTrack],peer:i}):s||o.push({peer:i}),i.auxiliaryTracks.length>0&&i.auxiliaryTracks.forEach(n=>{let a=e[n];(a==null?void 0:a.type)==="video"&&(a==null?void 0:a.source)==="regular"&&o.push({track:a,peer:i})}),r(i)&&i.auxiliaryTracks.length>0){let n=i.auxiliaryTracks.find(a=>{let u=e[a];return(u==null?void 0:u.type)==="video"&&(u==null?void 0:u.source)==="screen"});n&&o.push({track:e[n],peer:i})}return o};var dt={aspectRatio:{width:1,height:1}},mt=({peers:t,maxTileCount:e,maxColCount:r,maxRowCount:s,includeScreenShareForPeer:o=()=>!1,aspectRatio:i=dt.aspectRatio,filterNonPublishingPeers:c=!0,offsetY:n=0})=>{let{width:a=0,height:u=0,ref:l}=ut(),f=v().getState(lt),S=G(t,f,o,c),h=U(()=>i||{width:le(S)||1,height:1},[i,S]),M=S.length,{tilesInFirstPage:y,defaultWidth:w,defaultHeight:P,lastPageWidth:j,lastPageHeight:_,isLastPageDifferentFromFirstPage:J}=U(()=>de({count:M,parentWidth:Math.floor(a),parentHeight:Math.floor(u)-Math.min(u,n),maxTileCount:e,maxRowCount:s,maxColCount:r,aspectRatio:h}),[M,a,u,e,s,r,h,n]);return{pagesWithTiles:U(()=>ue({elements:S,tilesInFirstPage:y,onlyOnePage:!1,isLastPageDifferentFromFirstPage:J,defaultWidth:w,defaultHeight:P,lastPageWidth:j,lastPageHeight:_}),[S,y,J,w,P,j,_]),ref:l}};import{useEffect as ft}from"react";import{selectTrackAudioByID as St}from"@100mslive/hms-video-store";function pt({trackId:t,getStyle:e,ref:r}){let s=v();ft(()=>s.subscribe(o=>{if(!r.current)return;let i=e(o);for(let c in i)r.current.style[c]=i[c]},St(t)),[e,r,s,t])}import{useCallback as ht}from"react";import{DeviceType as T,selectDevices as gt,selectIsAllowedToPreviewMedia as Mt,selectIsAllowedToPublish as Ht,selectIsInPreview as Pt,selectLocalMediaSettings as bt}from"@100mslive/hms-video-store";var wt=(t=H)=>{let e=g(),r=m(gt),s=m(bt),i=m(Pt)?Mt:Ht,c=m(i),n={[T.audioOutput]:s.audioOutputDeviceId},a={[T.audioOutput]:r.audioOutput};c.video&&(a[T.videoInput]=r.videoInput,n[T.videoInput]=s.videoInputDeviceId),c.audio&&(a[T.audioInput]=r.audioInput,n[T.audioInput]=s.audioInputDeviceId);let u=ht(f=>p(null,[f],function*({deviceType:l,deviceId:d}){try{switch(l){case T.audioInput:yield e.setAudioSettings({deviceId:d});break;case T.videoInput:yield e.setVideoSettings({deviceId:d});break;case T.audioOutput:yield e.setAudioOutputDevice(d);break}}catch(S){t(S,"updateDevices")}}),[t,e]);return{allDevices:a,selectedDeviceIDs:n,updateDevice:u}};import{useMemo as vt}from"react";import{selectIsConnectedToRoom as Tt,selectPeerCount as yt,selectPeers as Et,selectRemotePeers as Rt}from"@100mslive/hms-video-store";var me=t=>!t||!Array.isArray(t)||t.length===0?{}:t.reduce((e,r)=>(r.roleName&&(e[r.roleName]||(e[r.roleName]=[]),e[r.roleName].push(r)),e),{});var xt=()=>{let t=m(Tt),e=m(t?Et:Rt),r=m(yt),s=vt(()=>me(e),[e]);return{roles:Object.keys(s),participantsByRoles:s,peerCount:r,isConnected:t}};import{selectHLSState as kt,selectRecordingState as It,selectRTMPState as At}from"@100mslive/hms-video-store";var Ct=()=>{let t=m(It),e=m(At),r=m(kt),s=t.server.running,o=t.browser.running,i=t.hls.running,c=r.running||e.running,n=s||o||i;return{isServerRecordingOn:s,isBrowserRecordingOn:o,isHLSRecordingOn:i,isStreamingOn:c,isHLSRunning:r.running,isRTMPRunning:e.running,isRecordingOn:n}};import{useCallback as Vt,useEffect as Dt,useState as Nt}from"react";import{HMSNotificationTypes as Lt}from"@100mslive/hms-video-store";var Ot=()=>{let t=O(Lt.ERROR),[e,r]=Nt(""),s=g(),o=Vt(()=>p(null,null,function*(){yield s.unblockAudio()}),[s]);return Dt(()=>{(t==null?void 0:t.data.code)===3008&&r(t==null?void 0:t.data.message)},[t]),{error:e,unblockAudio:o,resetError:()=>r("")}};import{useCallback as Ft,useEffect as fe}from"react";import{HMSNotificationTypes as Wt}from"@100mslive/hms-video-store";var Bt=(t,e)=>e?JSON.stringify(t||""):t,Gt=({type:t,json:e=!0,onEvent:r,handleError:s=H})=>{let o=g(),i=A();return fe(()=>{o.ignoreMessageTypes([t])},[o,t]),fe(()=>i?i.onNotification(a=>{let u=a.data;if(u&&u.type===t)try{let l=e?JSON.parse(u.message):u.message;r==null||r(l)}catch(l){s(l,"handleCustomEvent")}},Wt.NEW_MESSAGE):void 0,[i,t,e,r,s]),{sendEvent:Ft((n,a)=>p(null,null,function*(){try{let u=Bt(n,e);a&&Array.isArray(a==null?void 0:a.roleNames)?yield o.sendGroupMessage(u,a.roleNames,t):typeof(a==null?void 0:a.peerId)=="string"?yield o.sendDirectMessage(u,a.peerId,t):yield o.sendBroadcastMessage(u,t),r==null||r(n)}catch(u){s(u,"sendCustomEvent")}}),[o,s,r,t,e])}};import{selectAvailableRoleNames as Ut,selectIsConnectedToRoom as qt,selectPeerCount as zt,selectPeerMetadata as jt,selectPeers as _t,selectRemotePeers as Jt}from"@100mslive/hms-video-store";var $t=t=>{var n;let e=m(qt),r=m(zt),s=m(Ut),o=m(e?_t:Jt),i=Array.from(new Set(o.map(a=>a.roleName))),c=v();if((n=t==null?void 0:t.metadata)!=null&&n.isHandRaised&&(o=o.filter(a=>c.getState(jt(a.id)).isHandRaised)),t!=null&&t.role&&s.includes(t.role)&&(o=o.filter(a=>a.roleName===t.role)),t!=null&&t.search){let a=t.search.toLowerCase();o=o.filter(u=>{var l;return((l=u.roleName)==null?void 0:l.toLowerCase().includes(a))||u.name.toLowerCase().includes(a)})}return{participants:o,isConnected:e,peerCount:r,rolesWithParticipants:i}};import{useCallback as q,useEffect as Yt,useRef as Se,useState as Kt}from"react";var Qt=t=>{let e=Se(null),[r,s]=Kt(!1),o=q(()=>{throw new Error("unable to start screen share")},[]),i=Se(!1),{amIScreenSharing:c,toggleScreenShare:n}=V(o),a=C(c),u=q(()=>p(null,null,function*(){c&&(yield n==null?void 0:n(),e.current=null)}),[c,n]),l=q(d=>p(null,null,function*(){if(!i.current){if(!d)throw new Error("URL not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=d,i.current=!0,s(!0),yield n==null?void 0:n({forceCurrentTab:k,cropElement:e.current,preferCurrentTab:k})}}),[c,n]);return Yt(()=>{a&&!c&&(t==null||t(),e.current&&(e.current.src=""),i.current=!1,s(!1))},[c,a,t]),{startEmbedShare:l,stopEmbedShare:u,iframeRef:e,isEmbedShareInProgress:r}};import{useCallback as L,useEffect as Xt,useRef as pe,useState as Zt}from"react";var er=t=>{let e=pe(null),[r,s]=Zt(!1),o=L(()=>{throw new Error("unable to start screen share")},[]),i=pe(!1),{amIScreenSharing:c,toggleScreenShare:n}=V(o),a=C(c),u=L(f=>{var S;e.current&&((S=e.current.contentWindow)==null||S.postMessage({theme:2,file:f},"*"))},[]),l=L(()=>p(null,null,function*(){c&&(yield n==null?void 0:n())}),[c,n]),d=L(f=>p(null,null,function*(){if(i.current)return;if(!f)throw new Error("File or url not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=`${oe}${typeof f=="string"?`?file=${f}`:""}`,e.current.onload=()=>{requestAnimationFrame(()=>{f instanceof File&&u(f)})},i.current=!0,s(!0);let S=window.self!==window.top;yield n==null?void 0:n({forceCurrentTab:k&&!S,cropElement:e.current,preferCurrentTab:k&&!S})}),[c,u,n]);return Xt(()=>{a&&!c&&(t==null||t(),e.current&&e.current.removeAttribute("src"),i.current=!1,s(!1))},[c,a,t]),{startPDFShare:d,stopPDFShare:l,iframeRef:e,isPDFShareInProgress:r}};import{useRef as tr,useState as he}from"react";var ge=t=>t.reduce((e,r)=>(e[r.id]=r,e),{}),rr=t=>{let e=g(),r=tr(e.getPeerListIterator(t)),[s,o]=he({}),[i,c]=he(0);return{loadPeers:()=>r.current.findPeers().then(n=>{o(ge(n)),c(r.current.getTotal())}),loadMorePeers:()=>r.current.next().then(n=>{o(a=>E(E({},a),ge(n))),c(r.current.getTotal())}),hasNext:()=>r.current.hasNext(),total:i,peers:Object.values(s)}};import{useCallback as or,useEffect as sr,useState as ir}from"react";import{selectAppData as nr,selectIsConnectedToRoom as ar,selectLocalPeer as cr,selectPermissions as ur,selectWhiteboard as lr}from"@100mslive/hms-video-store";var dr=(t=!1)=>{var S,h;let e=m(ar),r=(S=m(cr))==null?void 0:S.customerUserId,s=m(lr),o=m(nr("disableNotifications")),i=!!(s!=null&&s.open),c=(s==null?void 0:s.owner)===r,n=g(),[a,u]=ir(!1),l=(h=m(ur))==null?void 0:h.whiteboard,d=!!(l!=null&&l.includes("admin"));sr(()=>{e&&u(n.interactivityCenter.whiteboard.isEnabled)},[e,n]);let f=or(()=>p(null,null,function*(){!e||!d||(i?c&&(yield n.interactivityCenter.whiteboard.close()):yield n.interactivityCenter.whiteboard.open())}),[n,c,d,i,e]);return{open:i,token:s==null?void 0:s.token,endpoint:s==null?void 0:s.addr,isOwner:c,isAdmin:d,zoomToContent:o||t,toggle:a&&d?f:void 0}};import{useCallback as Me}from"react";import{selectLocalPeerRoleName as mr}from"@100mslive/hms-video-store";var fr=()=>{let t=v(),e=Me(()=>p(null,null,function*(){if(!("Notification"in window)||navigator.webdriver){console.debug("Request Permsissions : Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="granted"||(Notification==null?void 0:Notification.permission)==="denied")return;let s=t.subscribe(o=>p(null,null,function*(){o&&o!=="__internal_recorder"&&(yield Notification.requestPermission(),s==null||s())}),mr)}),[t]),r=Me((s,o)=>{if(!("Notification"in window)){console.debug("Show Notifications: Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="denied"||document.visibilityState==="visible"&&document.hasFocus())return;let i=new Notification(s,o),c=()=>{document.visibilityState==="visible"&&document.hasFocus()&&(i==null||i.close(),document.removeEventListener("visibilitychange",c))};document.addEventListener("visibilitychange",c)},[]);return{requestPermission:e,showNotification:r}};import{useEffect as Sr}from"react";import{HMSNotificationTypes as pr}from"@100mslive/hms-video-store";var hr=({onTranscript:t,handleError:e=H})=>{let r="hms_transcript",s=A();Sr(()=>s?s.onNotification(i=>{let c=i.data;if(c&&c.type===r)try{let a=JSON.parse(c.message).results;t==null||t(a)}catch(n){e(n,"handleCaptionEvent")}},pr.NEW_MESSAGE):void 0,[s,r,e,t])};import{HMSAudioMode as z,selectLocalMediaSettings as gr}from"@100mslive/hms-video-store";var Mr=()=>{let t=g(),{audioMode:e}=m(gr),r=e===z.MUSIC;return{toggleMusicMode:()=>p(null,null,function*(){return yield t.setAudioSettings({audioMode:r?z.VOICE:z.MUSIC})}),isMusicModeEnabled:r}};export*from"@100mslive/hms-video-store";export{xe as HMSRoomProvider,G as getPeersWithTiles,De as throwErrorHandler,je as useAVToggle,pt as useAudioLevelStyles,Mr as useAudioMode,Ot as useAutoplayError,fr as useAwayNotifications,Gt as useCustomEvent,wt as useDevices,Qt as useEmbedShare,g as useHMSActions,O as useHMSNotifications,ke as useHMSStatsStore,m as useHMSStore,A as useHMSVanillaNotifications,v as useHMSVanillaStore,er as usePDFShare,rr as usePaginatedParticipants,xt as useParticipantList,$t as useParticipants,We as usePreviewJoin,Ct as useRecordingStreaming,ot as useRemoteAVToggle,V as useScreenShare,hr as useTranscript,$e as useVideo,mt as useVideoList,dr as useWhiteboard};
2
+ at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;function X(t){return(r,s=Q)=>{r||b.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=K(t);if(!o)throw new Error(R);let i=o.store;return i(r,s)}}function Z(t){return(r,s=Q)=>{r||b.w("fetching full store without passing any selector may have a heavy performance impact on your website.");let o=K(t);if(!o)throw new Error(R);let i=o.statsStore;return i==null?void 0:i(r,s)}}var ee=typeof window!="undefined";var x=Te(null),xe=({children:t,actions:e,store:r,notifications:s,stats:o,isHMSStatsOn:i=!1,leaveOnUnload:c=!0})=>{let n=ye(()=>{let a,u=()=>{throw new Error("modifying store is not allowed")};if(e&&r)a={actions:e,store:D(I(E({},r),{setState:u,destroy:u}))},s&&(a.notifications=s),o&&(a.statsStore=D({getState:o.getState,subscribe:o.subscribe,setState:u,destroy:u}));else{let l=new Re;if(a={actions:l.getActions(),store:D(I(E({},l.getStore()),{setState:u,destroy:u})),notifications:l.getNotifications()},i){let d=l.getStats();a.statsStore=D({getState:d.getState,subscribe:d.subscribe,setState:u,destroy:u})}}return a.actions.setFrameworkInfo({type:"react-web",version:te.version,sdkVersion:process.env.REACT_SDK_VERSION}),a},[e,r,s,o,i]);return re(()=>{if(ee&&c){let a=()=>n.actions.leave();return window.addEventListener("unload",a),()=>{window.removeEventListener("unload",a)}}return()=>{}},[c,n]),te.createElement(x.Provider,{value:n},t)},m=X(x),ke=Z(x),v=()=>{let t=N(x);if(!t)throw new Error(R);return t.store},A=()=>{let t=N(x);if(!t)throw new Error(R);return t.notifications},g=()=>{let t=N(x);if(!t)throw new Error(R);return t.actions},O=t=>{let e=N(x),[r,s]=Ee(null);if(!e)throw new Error(R);return re(()=>e.notifications?e.notifications.onNotification(i=>{s(i)},t):void 0,[e.notifications,t]),r};import{useCallback as se,useMemo as Le}from"react";import{HMSRoomState as ie,selectIsConnectedToRoom as Oe,selectRoomState as Fe}from"@100mslive/hms-video-store";import{useEffect as Ie,useRef as Ae}from"react";import{parsedUserAgent as Ce}from"@100mslive/hms-video-store";var Ve="react-sdk",H=(t,e)=>b.e(Ve,e,t),De=t=>{throw t};function C(t){let e=Ae();return Ie(()=>{e.current=t}),e.current}var Ne=["blink"],k=Ne.some(t=>{var e,r;return((r=(e=Ce.getEngine())==null?void 0:e.name)==null?void 0:r.toLowerCase())===t}),oe="https://pdf-annotation.100ms.live/generic/web/viewer.html";var We=({name:t="",token:e,metadata:r,handleError:s=H,initEndpoint:o,initialSettings:i,captureNetworkQualityInPreview:c,asRole:n,autoManageVideo:a,autoManageWakeLock:u,iceServers:l})=>{let d=g(),f=m(Fe),S=m(Oe)||!1,h=f===ie.Preview,M=Le(()=>({userName:t,authToken:e,metaData:r,rememberDeviceSelection:!0,settings:i,initEndpoint:o,asRole:n,captureNetworkQualityInPreview:c,autoManageVideo:a,autoManageWakeLock:u,iceServers:l}),[t,e,r,o,i,c,n,a,u,l]),y=se(()=>p(void 0,null,function*(){if(e)try{(S||f!==ie.Disconnected)&&(yield d.leave().catch(()=>{})),yield d.preview(M)}catch(P){s(P,"preview")}}),[e,S,f,d,M,s]),w=se(()=>p(void 0,null,function*(){if(e)try{yield d.join(M)}catch(P){s(P,"join")}}),[d,M,s,e]);return{enableJoin:h,join:w,isConnected:S,preview:y}};import{useCallback as ne}from"react";import{selectIsAllowedToPreviewMedia as Be,selectIsAllowedToPublish as Ge,selectIsInPreview as Ue,selectIsLocalAudioEnabled as qe,selectIsLocalVideoEnabled as ze}from"@100mslive/hms-video-store";var je=(t=H)=>{let e=m(qe),r=m(ze),o=m(Ue)?Be:Ge,i=m(o),c=g(),n=ne(()=>p(void 0,null,function*(){try{yield c.setLocalAudioEnabled(!e)}catch(u){t(u,"toggleAudio")}}),[c,e,t]),a=ne(()=>p(void 0,null,function*(){try{yield c.setLocalVideoEnabled(!r)}catch(u){t(u,"toggleVideo")}}),[c,r,t]);return{isLocalAudioEnabled:e,isLocalVideoEnabled:r,toggleAudio:i!=null&&i.audio?n:void 0,toggleVideo:i!=null&&i.video?a:void 0}};import{useCallback as _e,useEffect as F,useRef as ae}from"react";import{selectVideoTrackByID as Je}from"@100mslive/hms-video-store";var $e=({trackId:t,attach:e})=>{let r=g(),s=ae(null),o=m(Je(t)),i=ae(),c=_e(n=>{n&&(s.current=n)},[]);return F(()=>{i.current?o!=null&&o.id&&i.current!==(o==null?void 0:o.id)&&p(void 0,null,function*(){if(s.current)try{b.d("detaching because different track is passed"),yield r.detachVideo(i.current,s.current)}catch(n){b.w("detach video error for track",i.current,n)}i.current=o==null?void 0:o.id}):i.current=o==null?void 0:o.id},[o==null?void 0:o.id,r]),F(()=>{p(void 0,null,function*(){o!=null&&o.id&&s.current&&(e!==!1?yield r.attachVideo(o.id,s.current):yield r.detachVideo(o.id,s.current))})},[o,e,r]),F(()=>()=>{p(void 0,null,function*(){if(s.current&&o)try{yield r.detachVideo(o.id,s.current)}catch(n){b.w("detach video error for track",o.id,n)}})},[]),{videoRef:c}};import{useCallback as Ye}from"react";import{selectIsLocalScreenShared as Ke,selectPeerScreenSharing as Qe,selectScreenSharesByPeerId as Xe}from"@100mslive/hms-video-store";var V=(t=H)=>{var c,n;let e=g(),r=m(Ke),s=m(Qe),o=m(Xe(s==null?void 0:s.id)),i=Ye(a=>p(void 0,null,function*(){try{yield e.setScreenShareEnabled(!r,a)}catch(u){t(u,"toggleScreenShare")}}),[e,r,t]);return{amIScreenSharing:r,screenSharingPeerId:s==null?void 0:s.id,screenSharingPeerName:s==null?void 0:s.name,screenShareVideoTrackId:(c=o==null?void 0:o.video)==null?void 0:c.id,screenShareAudioTrackId:(n=o==null?void 0:o.audio)==null?void 0:n.id,toggleScreenShare:i}};import{useCallback as W}from"react";import{selectAudioTrackByID as Ze,selectAudioTrackVolume as et,selectPermissions as tt,selectVideoTrackByID as rt}from"@100mslive/hms-video-store";var ce=(t,e,r)=>p(void 0,null,function*(){if(e)try{yield t.setRemoteTrackEnabled(e.id,!e.enabled)}catch(s){r(s,"remoteToggle")}}),ot=(t,e,r=H)=>{let s=g(),o=m(Ze(t)),i=m(rt(e)),c=m(et(o==null?void 0:o.id)),n=m(tt),a=i!=null&&i.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,u=o!=null&&o.enabled?n==null?void 0:n.mute:n==null?void 0:n.unmute,l=W(()=>p(void 0,null,function*(){yield ce(s,o,r)}),[s,o,r]),d=W(()=>p(void 0,null,function*(){yield ce(s,i,r)}),[s,r,i]),f=W(S=>{o&&s.setVolume(S,o.id)},[s,o]);return{isAudioEnabled:!!(o!=null&&o.enabled),isVideoEnabled:!!(i!=null&&i.enabled),volume:c,toggleAudio:o&&u?l:void 0,toggleVideo:(i==null?void 0:i.source)==="regular"&&a?d:void 0,setVolume:o?f:void 0}};import{useMemo as U}from"react";import{useResizeDetector as ut}from"react-resize-detector";import{selectTracksMap as lt}from"@100mslive/hms-video-store";var st=(t,e,r)=>t.reduce((s,o,i)=>{let c=Math.floor(i/e);return c>0&&r||(s[c]||(s[c]=[]),s[c].push(o)),s},[]),ue=({elements:t,tilesInFirstPage:e,onlyOnePage:r,isLastPageDifferentFromFirstPage:s,defaultWidth:o,defaultHeight:i,lastPageWidth:c,lastPageHeight:n})=>{let a=st(t,e,r);return a.map((u,l)=>u.map(d=>{let f=l===a.length-1,S=s&&f?c:o,h=s&&f?n:i;return I(E({},d),{height:h,width:S})}))};function it(t){if(t.length===0)return null;let e={},r=t[0],s=1;for(let o=0;o<t.length;o++){let i=t[o];e[i]===null?e[i]=1:e[i]++,e[i]>s&&(r=i,s=e[i])}return r}var le=t=>it(t.filter(e=>{var r,s;return((r=e.track)==null?void 0:r.width)&&((s=e.track)==null?void 0:s.height)}).map(e=>{var o,i;let r=(o=e.track)==null?void 0:o.width,s=(i=e.track)==null?void 0:i.height;return(r||1)/(s||1)})),B=(t,e,r,s,o)=>{if(t<0||e<0)throw new Error("Container must have a non-negative area");if(r<1||!Number.isInteger(r))throw new Error("Number of shapes to place must be a positive integer");let i=s&&o&&s/o;if(i!==void 0&&isNaN(i))throw new Error("Aspect ratio must be a number");let c={area:0,cols:0,rows:0,width:0,height:0},n=r,a=-1;if(i!==void 0)for(let u=n;u>0;u+=a){let l=Math.ceil(r/u),d=t/(u*i),f=e/l,S,h;d<=f?(S=t/u,h=S/i):(h=e/l,S=h*i);let M=S*h;M>c.area&&(c={area:M,width:S,height:h,rows:l,cols:u})}return c},nt=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(t/e)/(o.width/o.height))),s),S=t/f,h=S/(o.width/o.height);h>e&&(h=e,S=h/(o.height/o.width));let M=Math.floor(e/h);if(c=h,i=S,l=Math.min(r,M*f),d=r%(M*f),u=d>0&&r>M*f,u){let y=Math.min(Math.ceil(Math.sqrt(d*(t/e)/(o.width/o.height))),s),w=t/y,P=w/(o.width/o.height);P>e&&(P=e,w=P/(o.height/o.width)),a=P,n=w}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},at=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,{width:f,height:S}=B(t,e,Math.min(r,s),o.width,o.height);if(i=f,c=S,l=Math.min(r,s),d=r%s,u=d>0&&r>s,u){let{width:h,height:M}=B(t,e,d,o.width,o.height);n=h,a=M}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}},ct=({parentWidth:t,parentHeight:e,count:r,maxCount:s,aspectRatio:o})=>{let i=0,c=0,n=0,a=0,u=!1,l=0,d=0,f=Math.min(Math.ceil(Math.sqrt(r*(o.width/o.height)/(t/e))),s),S=e/f,h=S*(o.width/o.height),M=Math.floor(t/h);if(i=h,c=S,l=Math.min(r,f*M),d=r%(f*M),u=d>0&&r>f*M,u){let y=Math.min(Math.ceil(Math.sqrt(d*(o.width/o.height)/(t/e))),s),w=e/y,P=w*(o.width/o.height);a=w,n=P}return{tilesInFirstPage:l,defaultWidth:i,defaultHeight:c,lastPageWidth:n,lastPageHeight:a,isLastPageDifferentFromFirstPage:u}};function de({count:t,parentWidth:e,parentHeight:r,maxTileCount:s,maxRowCount:o,maxColCount:i,aspectRatio:c}){let n=0,a=0,u=0,l=0,d=!1,f=0;if(t===0)return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d};if(s)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=at({parentWidth:e,parentHeight:r,count:t,maxCount:s,aspectRatio:c}));else if(o)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=ct({parentWidth:e,parentHeight:r,count:t,maxCount:o,aspectRatio:c}));else if(i)({tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}=nt({parentWidth:e,parentHeight:r,count:t,maxCount:i,aspectRatio:c}));else{let{width:S,height:h}=B(e,r,t,c.width,c.height);n=S,a=h,f=t}return{tilesInFirstPage:f,defaultWidth:n,defaultHeight:a,lastPageWidth:u,lastPageHeight:l,isLastPageDifferentFromFirstPage:d}}var G=(t,e,r,s=!0)=>{if(!t||!e||!r)return[];let o=[];for(let i of t)if(i.videoTrack===void 0&&i.audioTrack&&e[i.audioTrack]?o.push({peer:i}):i.videoTrack&&e[i.videoTrack]?o.push({track:e[i.videoTrack],peer:i}):s||o.push({peer:i}),i.auxiliaryTracks.length>0&&i.auxiliaryTracks.forEach(n=>{let a=e[n];(a==null?void 0:a.type)==="video"&&(a==null?void 0:a.source)==="regular"&&o.push({track:a,peer:i})}),r(i)&&i.auxiliaryTracks.length>0){let n=i.auxiliaryTracks.find(a=>{let u=e[a];return(u==null?void 0:u.type)==="video"&&(u==null?void 0:u.source)==="screen"});n&&o.push({track:e[n],peer:i})}return o};var dt={aspectRatio:{width:1,height:1}},mt=({peers:t,maxTileCount:e,maxColCount:r,maxRowCount:s,includeScreenShareForPeer:o=()=>!1,aspectRatio:i=dt.aspectRatio,filterNonPublishingPeers:c=!0,offsetY:n=0})=>{let{width:a=0,height:u=0,ref:l}=ut(),f=v().getState(lt),S=G(t,f,o,c),h=U(()=>i||{width:le(S)||1,height:1},[i,S]),M=S.length,{tilesInFirstPage:y,defaultWidth:w,defaultHeight:P,lastPageWidth:j,lastPageHeight:_,isLastPageDifferentFromFirstPage:J}=U(()=>de({count:M,parentWidth:Math.floor(a),parentHeight:Math.floor(u)-Math.min(u,n),maxTileCount:e,maxRowCount:s,maxColCount:r,aspectRatio:h}),[M,a,u,e,s,r,h,n]);return{pagesWithTiles:U(()=>ue({elements:S,tilesInFirstPage:y,onlyOnePage:!1,isLastPageDifferentFromFirstPage:J,defaultWidth:w,defaultHeight:P,lastPageWidth:j,lastPageHeight:_}),[S,y,J,w,P,j,_]),ref:l}};import{useEffect as ft}from"react";import{selectTrackAudioByID as St}from"@100mslive/hms-video-store";function pt({trackId:t,getStyle:e,ref:r}){let s=v();ft(()=>s.subscribe(o=>{if(!r.current)return;let i=e(o);for(let c in i)r.current.style[c]=i[c]},St(t)),[e,r,s,t])}import{useCallback as ht}from"react";import{DeviceType as T,selectDevices as gt,selectIsAllowedToPreviewMedia as Mt,selectIsAllowedToPublish as Ht,selectIsInPreview as Pt,selectLocalMediaSettings as bt}from"@100mslive/hms-video-store";var wt=(t=H)=>{let e=g(),r=m(gt),s=m(bt),i=m(Pt)?Mt:Ht,c=m(i),n={[T.audioOutput]:s.audioOutputDeviceId},a={[T.audioOutput]:r.audioOutput};c.video&&(a[T.videoInput]=r.videoInput,n[T.videoInput]=s.videoInputDeviceId),c.audio&&(a[T.audioInput]=r.audioInput,n[T.audioInput]=s.audioInputDeviceId);let u=ht(f=>p(void 0,[f],function*({deviceType:l,deviceId:d}){try{switch(l){case T.audioInput:yield e.setAudioSettings({deviceId:d});break;case T.videoInput:yield e.setVideoSettings({deviceId:d});break;case T.audioOutput:yield e.setAudioOutputDevice(d);break}}catch(S){t(S,"updateDevices")}}),[t,e]);return{allDevices:a,selectedDeviceIDs:n,updateDevice:u}};import{useMemo as vt}from"react";import{selectIsConnectedToRoom as Tt,selectPeerCount as yt,selectPeers as Et,selectRemotePeers as Rt}from"@100mslive/hms-video-store";var me=t=>!t||!Array.isArray(t)||t.length===0?{}:t.reduce((e,r)=>(r.roleName&&(e[r.roleName]||(e[r.roleName]=[]),e[r.roleName].push(r)),e),{});var xt=()=>{let t=m(Tt),e=m(t?Et:Rt),r=m(yt),s=vt(()=>me(e),[e]);return{roles:Object.keys(s),participantsByRoles:s,peerCount:r,isConnected:t}};import{selectHLSState as kt,selectRecordingState as It,selectRTMPState as At}from"@100mslive/hms-video-store";var Ct=()=>{let t=m(It),e=m(At),r=m(kt),s=t.server.running,o=t.browser.running,i=t.hls.running,c=r.running||e.running,n=s||o||i;return{isServerRecordingOn:s,isBrowserRecordingOn:o,isHLSRecordingOn:i,isStreamingOn:c,isHLSRunning:r.running,isRTMPRunning:e.running,isRecordingOn:n}};import{useCallback as Vt,useEffect as Dt,useState as Nt}from"react";import{HMSNotificationTypes as Lt}from"@100mslive/hms-video-store";var Ot=()=>{let t=O(Lt.ERROR),[e,r]=Nt(""),s=g(),o=Vt(()=>p(void 0,null,function*(){yield s.unblockAudio()}),[s]);return Dt(()=>{(t==null?void 0:t.data.code)===3008&&r(t==null?void 0:t.data.message)},[t]),{error:e,unblockAudio:o,resetError:()=>r("")}};import{useCallback as Ft,useEffect as fe}from"react";import{HMSNotificationTypes as Wt}from"@100mslive/hms-video-store";var Bt=(t,e)=>e?JSON.stringify(t||""):t,Gt=({type:t,json:e=!0,onEvent:r,handleError:s=H})=>{let o=g(),i=A();return fe(()=>{o.ignoreMessageTypes([t])},[o,t]),fe(()=>i?i.onNotification(a=>{let u=a.data;if(u&&u.type===t)try{let l=e?JSON.parse(u.message):u.message;r==null||r(l)}catch(l){s(l,"handleCustomEvent")}},Wt.NEW_MESSAGE):void 0,[i,t,e,r,s]),{sendEvent:Ft((n,a)=>p(void 0,null,function*(){try{let u=Bt(n,e);a&&Array.isArray(a==null?void 0:a.roleNames)?yield o.sendGroupMessage(u,a.roleNames,t):typeof(a==null?void 0:a.peerId)=="string"?yield o.sendDirectMessage(u,a.peerId,t):yield o.sendBroadcastMessage(u,t),r==null||r(n)}catch(u){s(u,"sendCustomEvent")}}),[o,s,r,t,e])}};import{selectAvailableRoleNames as Ut,selectIsConnectedToRoom as qt,selectPeerCount as zt,selectPeerMetadata as jt,selectPeers as _t,selectRemotePeers as Jt}from"@100mslive/hms-video-store";var $t=t=>{var n;let e=m(qt),r=m(zt),s=m(Ut),o=m(e?_t:Jt),i=Array.from(new Set(o.map(a=>a.roleName))),c=v();if((n=t==null?void 0:t.metadata)!=null&&n.isHandRaised&&(o=o.filter(a=>c.getState(jt(a.id)).isHandRaised)),t!=null&&t.role&&s.includes(t.role)&&(o=o.filter(a=>a.roleName===t.role)),t!=null&&t.search){let a=t.search.toLowerCase();o=o.filter(u=>{var l;return((l=u.roleName)==null?void 0:l.toLowerCase().includes(a))||u.name.toLowerCase().includes(a)})}return{participants:o,isConnected:e,peerCount:r,rolesWithParticipants:i}};import{useCallback as q,useEffect as Yt,useRef as Se,useState as Kt}from"react";var Qt=t=>{let e=Se(null),[r,s]=Kt(!1),o=q(()=>{throw new Error("unable to start screen share")},[]),i=Se(!1),{amIScreenSharing:c,toggleScreenShare:n}=V(o),a=C(c),u=q(()=>p(void 0,null,function*(){c&&(yield n==null?void 0:n(),e.current=null)}),[c,n]),l=q(d=>p(void 0,null,function*(){if(!i.current){if(!d)throw new Error("URL not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=d,i.current=!0,s(!0),yield n==null?void 0:n({forceCurrentTab:k,cropElement:e.current,preferCurrentTab:k})}}),[c,n]);return Yt(()=>{a&&!c&&(t==null||t(),e.current&&(e.current.src=""),i.current=!1,s(!1))},[c,a,t]),{startEmbedShare:l,stopEmbedShare:u,iframeRef:e,isEmbedShareInProgress:r}};import{useCallback as L,useEffect as Xt,useRef as pe,useState as Zt}from"react";var er=t=>{let e=pe(null),[r,s]=Zt(!1),o=L(()=>{throw new Error("unable to start screen share")},[]),i=pe(!1),{amIScreenSharing:c,toggleScreenShare:n}=V(o),a=C(c),u=L(f=>{var S;e.current&&((S=e.current.contentWindow)==null||S.postMessage({theme:2,file:f},"*"))},[]),l=L(()=>p(void 0,null,function*(){c&&(yield n==null?void 0:n())}),[c,n]),d=L(f=>p(void 0,null,function*(){if(i.current)return;if(!f)throw new Error("File or url not found");if(c)throw new Error("You are already sharing");if(!e.current)throw new Error("Attach a reference `iframeRef` to iframe for sharing");e.current.src=`${oe}${typeof f=="string"?`?file=${f}`:""}`,e.current.onload=()=>{requestAnimationFrame(()=>{f instanceof File&&u(f)})},i.current=!0,s(!0);let S=window.self!==window.top;yield n==null?void 0:n({forceCurrentTab:k&&!S,cropElement:e.current,preferCurrentTab:k&&!S})}),[c,u,n]);return Xt(()=>{a&&!c&&(t==null||t(),e.current&&e.current.removeAttribute("src"),i.current=!1,s(!1))},[c,a,t]),{startPDFShare:d,stopPDFShare:l,iframeRef:e,isPDFShareInProgress:r}};import{useRef as tr,useState as he}from"react";var ge=t=>t.reduce((e,r)=>(e[r.id]=r,e),{}),rr=t=>{let e=g(),r=tr(e.getPeerListIterator(t)),[s,o]=he({}),[i,c]=he(0);return{loadPeers:()=>r.current.findPeers().then(n=>{o(ge(n)),c(r.current.getTotal())}),loadMorePeers:()=>r.current.next().then(n=>{o(a=>E(E({},a),ge(n))),c(r.current.getTotal())}),hasNext:()=>r.current.hasNext(),total:i,peers:Object.values(s)}};import{useCallback as or,useEffect as sr,useState as ir}from"react";import{selectAppData as nr,selectIsConnectedToRoom as ar,selectLocalPeer as cr,selectPermissions as ur,selectWhiteboard as lr}from"@100mslive/hms-video-store";var dr=(t=!1)=>{var S,h;let e=m(ar),r=(S=m(cr))==null?void 0:S.customerUserId,s=m(lr),o=m(nr("disableNotifications")),i=!!(s!=null&&s.open),c=(s==null?void 0:s.owner)===r,n=g(),[a,u]=ir(!1),l=(h=m(ur))==null?void 0:h.whiteboard,d=!!(l!=null&&l.includes("admin"));sr(()=>{e&&u(n.interactivityCenter.whiteboard.isEnabled)},[e,n]);let f=or(()=>p(void 0,null,function*(){!e||!d||(i?c&&(yield n.interactivityCenter.whiteboard.close()):yield n.interactivityCenter.whiteboard.open())}),[n,c,d,i,e]);return{open:i,token:s==null?void 0:s.token,endpoint:s==null?void 0:s.addr,isOwner:c,isAdmin:d,zoomToContent:o||t,toggle:a&&d?f:void 0}};import{useCallback as Me}from"react";import{selectLocalPeerRoleName as mr}from"@100mslive/hms-video-store";var fr=()=>{let t=v(),e=Me(()=>p(void 0,null,function*(){if(!("Notification"in window)||navigator.webdriver){console.debug("Request Permsissions : Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="granted"||(Notification==null?void 0:Notification.permission)==="denied")return;let s=t.subscribe(o=>p(void 0,null,function*(){o&&o!=="__internal_recorder"&&(yield Notification.requestPermission(),s==null||s())}),mr)}),[t]),r=Me((s,o)=>{if(!("Notification"in window)){console.debug("Show Notifications: Notifications not supported or headless browser");return}if((Notification==null?void 0:Notification.permission)==="denied"||document.visibilityState==="visible"&&document.hasFocus())return;let i=new Notification(s,o),c=()=>{document.visibilityState==="visible"&&document.hasFocus()&&(i==null||i.close(),document.removeEventListener("visibilitychange",c))};document.addEventListener("visibilitychange",c)},[]);return{requestPermission:e,showNotification:r}};import{useEffect as Sr}from"react";import{HMSNotificationTypes as pr}from"@100mslive/hms-video-store";var hr=({onTranscript:t,handleError:e=H})=>{let r="hms_transcript",s=A();Sr(()=>s?s.onNotification(i=>{let c=i.data;if(c&&c.type===r)try{let a=JSON.parse(c.message).results;t==null||t(a)}catch(n){e(n,"handleCaptionEvent")}},pr.NEW_MESSAGE):void 0,[s,r,e,t])};import{HMSAudioMode as z,selectLocalMediaSettings as gr}from"@100mslive/hms-video-store";var Mr=()=>{let t=g(),{audioMode:e}=m(gr),r=e===z.MUSIC;return{toggleMusicMode:()=>p(void 0,null,function*(){return yield t.setAudioSettings({audioMode:r?z.VOICE:z.MUSIC})}),isMusicModeEnabled:r}};export*from"@100mslive/hms-video-store";export{xe as HMSRoomProvider,G as getPeersWithTiles,De as throwErrorHandler,je as useAVToggle,pt as useAudioLevelStyles,Mr as useAudioMode,Ot as useAutoplayError,fr as useAwayNotifications,Gt as useCustomEvent,wt as useDevices,Qt as useEmbedShare,g as useHMSActions,O as useHMSNotifications,ke as useHMSStatsStore,m as useHMSStore,A as useHMSVanillaNotifications,v as useHMSVanillaStore,er as usePDFShare,rr as usePaginatedParticipants,xt as useParticipantList,$t as useParticipants,We as usePreviewJoin,Ct as useRecordingStreaming,ot as useRemoteAVToggle,V as useScreenShare,hr as useTranscript,$e as useVideo,mt as useVideoList,dr as useWhiteboard};
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/primitives/HmsRoomProvider.ts", "../src/primitives/store.ts", "../src/utils/logger.ts", "../src/utils/isBrowser.ts", "../src/hooks/usePreviewJoin.ts", "../src/utils/commons.ts", "../src/hooks/useAVToggle.ts", "../src/hooks/useVideo.ts", "../src/hooks/useScreenShare.ts", "../src/hooks/useRemoteAVToggle.ts", "../src/hooks/useVideoList.ts", "../src/utils/layout.ts", "../src/hooks/useAudioLevelStyles.ts", "../src/hooks/useDevices.ts", "../src/hooks/useParticipantList.ts", "../src/utils/groupBy.ts", "../src/hooks/useRecordingStreaming.ts", "../src/hooks/useAutoplayError.ts", "../src/hooks/useCustomEvent.ts", "../src/hooks/useParticipants.ts", "../src/hooks/useEmbedShare.ts", "../src/hooks/usePDFShare.ts", "../src/hooks/usePaginatedParticipants.ts", "../src/hooks/useWhiteboard.ts", "../src/hooks/useAwayNotifications.ts", "../src/hooks/useTranscript.ts", "../src/hooks/useAudioMode.tsx", "../src/index.ts"],
4
4
  "sourcesContent": ["import React, { createContext, PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react';\nimport create from 'zustand';\nimport {\n HMSActions,\n HMSGenericTypes,\n HMSNotificationInCallback,\n HMSNotifications,\n HMSNotificationTypeParam,\n HMSReactiveStore,\n HMSStatsStore,\n HMSStatsStoreWrapper,\n HMSStore,\n HMSStoreWrapper,\n} from '@100mslive/hms-video-store';\nimport { HMSContextProviderProps, hooksErrorMessage, makeHMSStatsStoreHook, makeHMSStoreHook } from './store';\nimport { isBrowser } from '../utils/isBrowser';\n\nexport interface HMSRoomProviderProps<T extends HMSGenericTypes> {\n actions?: HMSActions<T>;\n store?: HMSStoreWrapper<T>;\n notifications?: HMSNotifications;\n stats?: HMSStatsStoreWrapper;\n /**\n * if true this will enable webrtc stats collection\n */\n isHMSStatsOn?: boolean;\n leaveOnUnload?: boolean;\n}\n\n/**\n * only one context is being created currently. This would need to be changed if multiple\n * rooms have to be supported, where every room will have its own context, provider, store and actions.\n */\nconst HMSContext = createContext<HMSContextProviderProps | null>(null);\n\n/**\n * top level wrapper for using react sdk hooks. This doesn't have any mandatory arguments, if you are already\n * initialising the sdk on your side, you can pass in the primitives from there as well to use hooks for\n * react part of your code.\n * @constructor\n */\n// eslint-disable-next-line complexity\nexport const HMSRoomProvider = <T extends HMSGenericTypes = { sessionStore: Record<string, any> }>({\n children,\n actions,\n store,\n notifications,\n stats,\n isHMSStatsOn = false,\n leaveOnUnload = true,\n}: PropsWithChildren<HMSRoomProviderProps<T>>) => {\n const providerProps: HMSContextProviderProps = useMemo(() => {\n let providerProps: HMSContextProviderProps;\n // adding a dummy function for setstate and destroy because zustan'd create expects them\n // to be present but we don't expose them from the store.\n const errFn = () => {\n throw new Error('modifying store is not allowed');\n };\n if (actions && store) {\n providerProps = {\n actions: actions,\n store: create<HMSStore<T>>({\n ...store,\n setState: errFn,\n destroy: errFn,\n }),\n };\n if (notifications) {\n providerProps.notifications = notifications;\n }\n if (stats) {\n providerProps.statsStore = create<HMSStatsStore>({\n getState: stats.getState,\n subscribe: stats.subscribe,\n setState: errFn,\n destroy: errFn,\n });\n }\n } else {\n const hmsReactiveStore = new HMSReactiveStore<T>();\n providerProps = {\n actions: hmsReactiveStore.getActions(),\n store: create<HMSStore<T>>({\n ...hmsReactiveStore.getStore(),\n setState: errFn,\n destroy: errFn,\n }), // convert vanilla store in react hook\n notifications: hmsReactiveStore.getNotifications(),\n };\n\n if (isHMSStatsOn) {\n const stats = hmsReactiveStore.getStats();\n providerProps.statsStore = create<HMSStatsStore>({\n getState: stats.getState,\n subscribe: stats.subscribe,\n setState: errFn,\n destroy: errFn,\n });\n }\n }\n\n // @ts-ignore\n providerProps.actions.setFrameworkInfo({\n type: 'react-web',\n version: React.version,\n sdkVersion: process.env.REACT_SDK_VERSION,\n });\n\n return providerProps;\n }, [actions, store, notifications, stats, isHMSStatsOn]);\n\n useEffect(() => {\n if (isBrowser && leaveOnUnload) {\n const unloadCallback = () => providerProps.actions.leave();\n window.addEventListener('unload', unloadCallback);\n return () => {\n window.removeEventListener('unload', unloadCallback);\n };\n }\n\n return () => {};\n }, [leaveOnUnload, providerProps]);\n\n return React.createElement(HMSContext.Provider, { value: providerProps }, children);\n};\n\n/**\n * `useHMSStore` is a read only hook which can be passed a selector to read data.\n * The hook can only be used in a component if HMSRoomProvider is present in its ancestors.\n */\nexport const useHMSStore = makeHMSStoreHook(HMSContext);\n\nexport const useHMSStatsStore = makeHMSStatsStoreHook(HMSContext);\n\n/**\n * `useHMSVanillaStore` is a read only hook which returns the vanilla HMSStore.\n * Usage:\n * ```\n * const hmsStore = useHMSVanillaStore();\n * const dominantSpeaker = hmsStore.getState(selectDominantSpeaker);\n * ```\n *\n * Note: There's no need to use the vanilla hmsStore in React components.\n * This is used in rare cases where the store needs to be accessed outside a React component.\n * For almost every case, `useHMSStore` would get the job done.\n */\nexport const useHMSVanillaStore = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n\n return HMSContextConsumer.store;\n};\n\n/*\n * `useHMSVanillaNotifications` returns the vanilla HMSNotifications object. This makes it a bit easier to ensure\n * a notification is processed only once in your components. The other way is to use the hook version and put\n * the component high enough in the chain.\n * Usage:\n * ```\n * useEffect(() => {\n * const unsub = notifications.onNotification((notification) => {\n * console.log(notification);\n * }, notificationType);\n * return unsub;\n * }, [])\n * ```\n */\nexport const useHMSVanillaNotifications = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n return HMSContextConsumer.notifications;\n};\n\n/*\n * `useHMSActions` is a write only hook which can be used to dispatch actions.\n */\nexport const useHMSActions = () => {\n const HMSContextConsumer = useContext(HMSContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n return HMSContextConsumer.actions;\n};\n\n/**\n * `useHMSNotifications` is a read only hook which gives the latest notification(HMSNotification) received.\n * @param type can be a string or an array of string for the types of notifications to listen to. If an array is passed\n * either declare it outside the functional component or use a useMemo to make sure its reference stays same across\n * rerenders for performance reasons.\n */\nexport const useHMSNotifications = <T extends HMSNotificationTypeParam>(\n type?: T,\n): HMSNotificationInCallback<T> | null => {\n const HMSContextConsumer = useContext(HMSContext);\n const [notification, setNotification] = useState<HMSNotificationInCallback<T> | null>(null);\n\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n\n useEffect(() => {\n if (!HMSContextConsumer.notifications) {\n return;\n }\n const unsubscribe = HMSContextConsumer.notifications.onNotification<T>(notification => {\n setNotification(notification);\n }, type);\n return unsubscribe;\n }, [HMSContextConsumer.notifications, type]);\n\n return notification;\n};\n\nexport const useIsHMSStatsOn = () => {\n const HMSContextConsumer = useContext(HMSContext);\n return Boolean(HMSContextConsumer?.statsStore);\n};\n", "import React, { useContext } from 'react';\nimport { EqualityChecker, StateSelector } from 'zustand';\nimport shallow from 'zustand/shallow';\nimport { HMSActions, HMSNotifications, HMSStatsStore, HMSStore, IStoreReadOnly } from '@100mslive/hms-video-store';\nimport HMSLogger from '../utils/logger';\n\nexport interface IHMSReactStore<S extends HMSStore | HMSStatsStore> extends IStoreReadOnly<S> {\n <U>(selector: StateSelector<S, U>, equalityFn?: EqualityChecker<U>): U;\n}\n\nexport const hooksErrorMessage = `It seems like you forgot to add your component within a top level HMSRoomProvider, please refer to 100ms react docs(https://www.100ms.live/docs/javascript/v2/how-to-guides/install-the-sdk/integration#react-hooks) to check on the required steps for using this hook. If the provider is present\n at the top level, check the yarn.lock/package-lock.json, if there are multiple versions of @100mslive/react-sdk. Please ensure the versions of @100mslive/react-sdk and @100mslive/roomkit-react are the same versions from the release notes(https://www.100ms.live/docs/javascript/v2/changelog/release-notes) that you are trying to update to.`;\n\nexport interface HMSContextProviderProps {\n actions: HMSActions; // for actions which may also mutate store\n store: IHMSReactStore<HMSStore>; // readonly store, don't mutate this\n notifications?: HMSNotifications;\n statsStore?: IHMSReactStore<HMSStatsStore>;\n}\n\nexport function makeHMSStoreHook(hmsContext: React.Context<HMSContextProviderProps | null>) {\n const useHMSStore = <StateSlice>(\n selector: StateSelector<HMSStore, StateSlice>,\n equalityFn: EqualityChecker<StateSlice> = shallow,\n ) => {\n if (!selector) {\n HMSLogger.w(\n 'fetching full store without passing any selector may have a heavy performance impact on your website.',\n );\n }\n const HMSContextConsumer = useContext(hmsContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n const useStore = HMSContextConsumer.store;\n return useStore(selector, equalityFn);\n };\n return useHMSStore;\n}\n\nexport function makeHMSStatsStoreHook(hmsContext: React.Context<HMSContextProviderProps | null>) {\n const useHMSStatsStore = <StateSlice>(\n selector: StateSelector<HMSStatsStore, StateSlice>,\n equalityFn: EqualityChecker<StateSlice> = shallow,\n ) => {\n if (!selector) {\n HMSLogger.w(\n 'fetching full store without passing any selector may have a heavy performance impact on your website.',\n );\n }\n const HMSContextConsumer = useContext(hmsContext);\n if (!HMSContextConsumer) {\n throw new Error(hooksErrorMessage);\n }\n const useStore = HMSContextConsumer.statsStore;\n return useStore?.(selector, equalityFn);\n };\n return useHMSStatsStore;\n}\n", "export enum HMSLogLevel {\n VERBOSE,\n DEBUG,\n INFO,\n WARN,\n ERROR,\n NONE,\n}\n\nexport default class HMSLogger {\n static level: HMSLogLevel = HMSLogLevel.VERBOSE;\n\n static v(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.VERBOSE, tag, ...data);\n }\n\n static d(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.DEBUG, tag, ...data);\n }\n\n static i(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.INFO, tag, ...data);\n }\n\n static w(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.WARN, tag, ...data);\n }\n\n static e(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.ERROR, tag, ...data);\n }\n\n // eslint-disable-next-line complexity\n private static log(level: HMSLogLevel, tag: string, ...data: any[]) {\n if (this.level.valueOf() > level.valueOf()) {\n return;\n }\n\n switch (level) {\n case HMSLogLevel.VERBOSE: {\n console.log('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.DEBUG: {\n console.debug('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.INFO: {\n console.info('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.WARN: {\n console.warn('HMSui-components: ', tag, ...data);\n break;\n }\n case HMSLogLevel.ERROR: {\n console.error('HMSui-components: ', tag, ...data);\n break;\n }\n }\n }\n}\n", "export const isBrowser = typeof window !== 'undefined';\n", "import { useCallback, useMemo } from 'react';\nimport {\n HMSConfigInitialSettings,\n HMSICEServer,\n HMSPreviewConfig,\n HMSRoomState,\n selectIsConnectedToRoom,\n selectRoomState,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface usePreviewInput {\n /**\n * name of user who is joining, this is only required if join is called\n */\n name?: string;\n /**\n * app side authentication token\n */\n token: string;\n /**\n * any extra metadata info for the peer\n */\n metadata?: string;\n /**\n * function to handle errors happening during preview\n */\n handleError?: hooksErrHandler;\n initEndpoint?: string;\n /**\n * initial settings for audio/video and device to be used.\n */\n initialSettings?: HMSConfigInitialSettings;\n /**\n * Enable to get a network quality score while in preview. The score ranges from -1 to 5.\n * -1 when we are not able to connect to 100ms servers within an expected time limit\n * 0 when there is a timeout/failure when measuring the quality\n * 1-5 ranges from poor to good quality.\n */\n captureNetworkQualityInPreview?: boolean;\n asRole?: string;\n /**\n * if this flag is enabled, the SDK takes care of unsubscribing to the video when it goes out of view.\n * Additionally if simulcast is enabled, it takes care of auto managing simulcast layers based on the\n * dimensions of the video element to conserve bandwidth.\n */\n autoManageVideo?: boolean;\n /**\n * if this flag is enabled, wake lock will be acquired automatically(if supported) when joining the room, so the device\n * will be kept awake.\n */\n autoManageWakeLock?: boolean;\n\n /**\n * use custom STUN/TURN servers for media connection (advanced)\n */\n iceServers?: HMSICEServer[];\n}\n\nexport interface usePreviewResult {\n /**\n * enable the join button for the user only when this is true\n */\n enableJoin: boolean;\n /**\n * call this function to join the room\n */\n join: () => Promise<void>;\n /**\n * once the user has joined the room, till leave happens this flag will be true. It can be used\n * to decide to show between preview form and conferencing component/video tiles.\n */\n isConnected: boolean;\n /**\n * call this function to join the room\n */\n preview: () => Promise<void>;\n}\n\n/**\n * This hook can be used to build a preview UI component, this lets you call preview every time the passed in\n * token changes. This hook is best used in combination with useDevices for changing devices, useAVToggle for\n * muting/unmuting and useAudioLevelStyles for showing mic audio level to the user.\n * Any device change or mute/unmute will be carried across to join.\n */\nexport const usePreviewJoin = ({\n name = '',\n token,\n metadata,\n handleError = logErrorHandler,\n initEndpoint,\n initialSettings,\n captureNetworkQualityInPreview,\n asRole,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n}: usePreviewInput): usePreviewResult => {\n const actions = useHMSActions();\n const roomState = useHMSStore(selectRoomState);\n const isConnected = useHMSStore(selectIsConnectedToRoom) || false;\n const enableJoin = roomState === HMSRoomState.Preview;\n\n const config: HMSPreviewConfig = useMemo(() => {\n return {\n userName: name,\n authToken: token,\n metaData: metadata,\n rememberDeviceSelection: true,\n settings: initialSettings,\n initEndpoint: initEndpoint,\n asRole,\n captureNetworkQualityInPreview,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n };\n }, [\n name,\n token,\n metadata,\n initEndpoint,\n initialSettings,\n captureNetworkQualityInPreview,\n asRole,\n autoManageVideo,\n autoManageWakeLock,\n iceServers,\n ]);\n\n const preview = useCallback(async () => {\n if (!token) {\n return;\n }\n try {\n if (isConnected || roomState !== HMSRoomState.Disconnected) {\n await actions.leave().catch(() => {\n // Do nothing as this might lead to leave called before join\n });\n }\n await actions.preview(config);\n } catch (err) {\n handleError(err as Error, 'preview');\n }\n }, [token, isConnected, roomState, actions, config, handleError]);\n\n const join = useCallback(async () => {\n if (!token) {\n return;\n }\n try {\n await actions.join(config);\n } catch (err) {\n handleError(err as Error, 'join');\n }\n }, [actions, config, handleError, token]);\n\n return {\n enableJoin,\n join,\n isConnected,\n preview,\n };\n};\n", "import { useEffect, useRef } from 'react';\nimport { parsedUserAgent } from '@100mslive/hms-video-store';\nimport HMSLogger from './logger';\nimport { hooksErrHandler } from '../hooks/types';\n\nconst TAG = 'react-sdk';\n\nexport const logErrorHandler: hooksErrHandler = (err: Error, method?: string) => HMSLogger.e(TAG, method, err);\n\n/**\n * pass in this error handler to get the error thrown back to the UI for further handling, showing toast etc.\n * @param err\n */\nexport const throwErrorHandler: hooksErrHandler = (err: Error) => {\n throw err;\n};\n\nexport default function usePrevious<T>(state: T): T | undefined {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = state;\n });\n\n return ref.current;\n}\n\nconst chromiumBasedBrowsers = ['blink'];\n\nexport const isChromiumBased = chromiumBasedBrowsers.some(\n (value: string) => parsedUserAgent.getEngine()?.name?.toLowerCase() === value,\n);\n\nexport const pdfIframeURL = 'https://pdf-annotation.100ms.live/generic/web/viewer.html';\n", "import { useCallback } from 'react';\nimport {\n selectIsAllowedToPreviewMedia,\n selectIsAllowedToPublish,\n selectIsInPreview,\n selectIsLocalAudioEnabled,\n selectIsLocalVideoEnabled,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useAVToggleResult {\n /**\n * true if unmuted and vice versa\n */\n isLocalAudioEnabled: boolean;\n isLocalVideoEnabled: boolean;\n /**\n * use this function to toggle audio state, the function will only be present if the user\n * has permission to unmute audio\n */\n toggleAudio?: () => void;\n /**\n * use this function to toggle video state, the function will only be present if the user\n * has permission to unmute video\n */\n toggleVideo?: () => void;\n}\n\n/**\n * Use this hook to implement mute/unmute for audio and video.\n * isAllowedToPublish can be used to decide whether to show the toggle buttons in the UI.\n * @param handleError to handle any error during toggle of audio/video\n */\nexport const useAVToggle = (handleError: hooksErrHandler = logErrorHandler): useAVToggleResult => {\n const isLocalAudioEnabled = useHMSStore(selectIsLocalAudioEnabled);\n const isLocalVideoEnabled = useHMSStore(selectIsLocalVideoEnabled);\n const isInPreview = useHMSStore(selectIsInPreview);\n const selectAllowed = isInPreview ? selectIsAllowedToPreviewMedia : selectIsAllowedToPublish;\n const isAllowedToPublish = useHMSStore(selectAllowed);\n const actions = useHMSActions();\n\n const toggleAudio = useCallback(async () => {\n try {\n await actions.setLocalAudioEnabled(!isLocalAudioEnabled);\n } catch (err) {\n handleError(err as Error, 'toggleAudio');\n }\n }, [actions, isLocalAudioEnabled, handleError]);\n\n const toggleVideo = useCallback(async () => {\n try {\n await actions.setLocalVideoEnabled(!isLocalVideoEnabled);\n } catch (err) {\n handleError(err as Error, 'toggleVideo');\n }\n }, [actions, isLocalVideoEnabled, handleError]);\n\n return {\n isLocalAudioEnabled,\n isLocalVideoEnabled,\n toggleAudio: isAllowedToPublish?.audio ? toggleAudio : undefined,\n toggleVideo: isAllowedToPublish?.video ? toggleVideo : undefined,\n };\n};\n", "import React, { useCallback, useEffect, useRef } from 'react';\nimport { HMSTrackID, selectVideoTrackByID } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport HMSLogger from '../utils/logger';\n\nexport interface useVideoInput {\n /**\n * TrackId that is to be rendered\n */\n trackId?: HMSTrackID;\n /**\n * Boolean stating whether to override the internal behaviour.\n * when attach is false, even if tile is inView or enabled, it won't be rendered\n */\n attach?: boolean;\n}\nexport interface useVideoOutput {\n videoRef: React.RefCallback<HTMLVideoElement>;\n}\n/**\n * This hooks can be used to implement a video tile component. Given a track id it will return a ref.\n * The returned ref can be used to set on a video element meant to display the video.\n * The hook will take care of attaching and detaching video, and will automatically detach when the video\n * goes out of view to save on bandwidth.\n */\nexport const useVideo = ({ trackId, attach }: useVideoInput): useVideoOutput => {\n const actions = useHMSActions();\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const track = useHMSStore(selectVideoTrackByID(trackId));\n const prevTrackId = useRef<HMSTrackID | undefined>();\n\n const setRefs = useCallback((node: HTMLVideoElement) => {\n if (node) {\n videoRef.current = node;\n }\n }, []);\n\n useEffect(() => {\n if (!prevTrackId.current) {\n prevTrackId.current = track?.id;\n } else if (track?.id && prevTrackId.current !== track?.id) {\n // Remove video element reference from previous track by detaching\n (async () => {\n if (videoRef.current) {\n try {\n HMSLogger.d('detaching because different track is passed');\n await actions.detachVideo(prevTrackId.current!, videoRef.current);\n } catch (err) {\n HMSLogger.w('detach video error for track', prevTrackId.current, err);\n }\n }\n prevTrackId.current = track?.id;\n })();\n }\n }, [track?.id, actions]);\n\n useEffect(() => {\n (async () => {\n if (track?.id && videoRef.current) {\n if (attach !== false) {\n await actions.attachVideo(track.id, videoRef.current);\n } else {\n await actions.detachVideo(track.id, videoRef.current);\n }\n }\n })();\n }, [track, attach, actions]);\n\n // detach on unmount\n useEffect(() => {\n return () => {\n (async () => {\n if (videoRef.current && track) {\n try {\n // detach on unmount\n await actions.detachVideo(track.id, videoRef.current);\n } catch (err) {\n HMSLogger.w('detach video error for track', track.id, err);\n }\n }\n })();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { videoRef: setRefs };\n};\n", "import { useCallback } from 'react';\nimport {\n HMSPeerID,\n HMSScreenShareConfig,\n HMSTrackID,\n selectIsLocalScreenShared,\n selectPeerScreenSharing,\n selectScreenSharesByPeerId,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useScreenShareResult {\n /**\n * true if the local user is sharing screen, false otherwise\n */\n amIScreenSharing: boolean;\n /**\n * toggle screenshare for the local user, will only be present if the user has the permission to toggle\n */\n toggleScreenShare?: (config?: HMSScreenShareConfig) => Promise<void>;\n /**\n * the id of the peer who is currently sharing screen, will only be present if there is a screenshare in the room.\n * In case of multiple screenshares, the behaviour of which one is picked is not defined.\n */\n screenSharingPeerId?: HMSPeerID;\n /**\n * the name of the peer who is currently sharing screen. Will be undefined if no one is sharing the screen.\n * In case of multiple screenshares, the behavior of which one is picked is not defined.\n */\n screenSharingPeerName?: string;\n /**\n * screenShare audio track id, will only be present if there is a screenshare with video track\n */\n screenShareVideoTrackId?: HMSTrackID;\n /**\n * screenShare audio track id, will only be present if there is a screenshare with audio track\n */\n screenShareAudioTrackId?: HMSTrackID;\n}\n\n/**\n * This hook can be used to implement a screenshare toggle button as well as know about the screenshare in the room.\n * This works best if your application only needs to show one screenshare in large view at a time with other screenshares\n * similar to normal user tiles.\n * For any complicated requirement with multiple screenshares it's best to use the store directly.\n * For viewing the screenshare this hook is best used in combination with useVideo.\n * For implementing control bar for local peer, this is used based with useAVToggle.\n * @param handleError to handle any errors during screenshare toggle\n */\nexport const useScreenShare = (handleError: hooksErrHandler = logErrorHandler): useScreenShareResult => {\n const actions = useHMSActions();\n const amIScreenSharing = useHMSStore(selectIsLocalScreenShared);\n const screenSharePeer = useHMSStore(selectPeerScreenSharing);\n const screenShare = useHMSStore(selectScreenSharesByPeerId(screenSharePeer?.id));\n\n const toggleScreenShare = useCallback(\n async (config?: HMSScreenShareConfig) => {\n try {\n await actions.setScreenShareEnabled(!amIScreenSharing, config);\n } catch (err) {\n handleError(err as Error, 'toggleScreenShare');\n }\n },\n [actions, amIScreenSharing, handleError],\n );\n\n return {\n amIScreenSharing,\n screenSharingPeerId: screenSharePeer?.id,\n screenSharingPeerName: screenSharePeer?.name,\n screenShareVideoTrackId: screenShare?.video?.id,\n screenShareAudioTrackId: screenShare?.audio?.id,\n toggleScreenShare,\n };\n};\n", "/* eslint-disable complexity */\nimport { useCallback } from 'react';\nimport {\n HMSActions,\n HMSTrack,\n HMSTrackID,\n selectAudioTrackByID,\n selectAudioTrackVolume,\n selectPermissions,\n selectVideoTrackByID,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useRemoteAVToggleResult {\n /**\n * true if unmuted and vice versa\n */\n isAudioEnabled: boolean;\n isVideoEnabled: boolean;\n /**\n * current volume of the audio track\n */\n volume?: number;\n /**\n * use this function to toggle audio state, the function will only be present if the user\n * has permission to mute/unmute remote audio\n */\n toggleAudio?: () => void;\n /**\n * use this function to toggle video state, the function will only be present if the user\n * has permission to mute/unmute remote video\n */\n toggleVideo?: () => void;\n /**\n * use this function to set the volume of peer's audio track for the local user, the function will\n * only be present if the remote peer has an audio track to change volume for\n */\n setVolume?: (volume: number) => void;\n}\n\nconst toggleTrackEnabled = async (\n actions: HMSActions,\n track: HMSTrack | undefined | null,\n handleError: hooksErrHandler,\n) => {\n if (track) {\n try {\n await actions.setRemoteTrackEnabled(track.id, !track.enabled);\n } catch (err) {\n handleError(err as Error, 'remoteToggle');\n }\n }\n};\n\n/**\n * This hook can be used to implement remote mute/unmute + audio volume changer on tile level.\n * @param peerId of the peer whose tracks need to be managed\n * @param audioTrackId of the peer whose tracks need to be managed\n * @param videoTrackId of the peer whose tracks need to be managed\n * @param handleError to handle any error during toggle of audio/video\n */\nexport const useRemoteAVToggle = (\n audioTrackId: HMSTrackID,\n videoTrackId: HMSTrackID,\n handleError: hooksErrHandler = logErrorHandler,\n): useRemoteAVToggleResult => {\n const actions = useHMSActions();\n const audioTrack = useHMSStore(selectAudioTrackByID(audioTrackId));\n const videoTrack = useHMSStore(selectVideoTrackByID(videoTrackId));\n const volume = useHMSStore(selectAudioTrackVolume(audioTrack?.id));\n const permissions = useHMSStore(selectPermissions);\n const canToggleVideo = videoTrack?.enabled ? permissions?.mute : permissions?.unmute;\n const canToggleAudio = audioTrack?.enabled ? permissions?.mute : permissions?.unmute;\n\n const toggleAudio = useCallback(async () => {\n await toggleTrackEnabled(actions, audioTrack, handleError);\n }, [actions, audioTrack, handleError]);\n\n const toggleVideo = useCallback(async () => {\n await toggleTrackEnabled(actions, videoTrack, handleError);\n }, [actions, handleError, videoTrack]);\n\n const setVolume = useCallback(\n (volume: number) => {\n if (audioTrack) {\n actions.setVolume(volume, audioTrack.id);\n }\n },\n [actions, audioTrack],\n );\n\n return {\n isAudioEnabled: !!audioTrack?.enabled,\n isVideoEnabled: !!videoTrack?.enabled,\n volume,\n toggleAudio: audioTrack && canToggleAudio ? toggleAudio : undefined,\n toggleVideo: videoTrack?.source === 'regular' && canToggleVideo ? toggleVideo : undefined,\n setVolume: audioTrack ? setVolume : undefined,\n };\n};\n", "import React, { useMemo } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\nimport { HMSPeer, HMSTrack, HMSTrackID, selectTracksMap } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\nimport {\n calculateLayoutSizes,\n chunkElements,\n getModeAspectRatio,\n getVideoTracksFromPeers,\n TrackWithPeer,\n} from '../utils/layout';\n\nexport interface useVideoListInput {\n /**\n * peers is the list of all peers you need to display\n */\n peers: HMSPeer[];\n /**\n * Max tiles in a page. Overrides maxRowCount and maxColCount\n */\n maxTileCount?: number;\n /**\n * Max rows in a page. Only applied if maxTileCount is not present\n */\n maxRowCount?: number;\n /**\n * Max columns in a page. Only applied if maxTileCount and maxRowCount are not present\n */\n maxColCount?: number;\n /**\n * A function which tells whether to show the screenshare for a peer who is sharing their screen. A peer is passed\n * and a boolean value is expected.\n * This can be useful if there are multiple screenShares in the room where you may want to show the main one in the\n * center view and others in video list along side other tiles. No screenShare is included by default.\n * for example. includeScreenShare = (peer) => return peer.id !== mainScreenSharingPeer.id\n */\n includeScreenShareForPeer?: (peer: HMSPeer) => boolean;\n /**\n * Aspect ratio of VideoTiles, ideally this should be the same as the aspect ratio selected for\n * capture in the dashboard template.\n */\n aspectRatio?: { width: number; height: number };\n /**\n * By default this will be true. Only publishing(audio/video/screen) peers in the passed in peer list\n * will be filtered. If you wish to show all peers, pass false for this.\n */\n filterNonPublishingPeers?: boolean;\n /**\n * Height that would be subtracted from the parent's height to give the available height, use case: if your pagination is inside the parent component then offsetY would be the height of pagination\n */\n offsetY?: number;\n}\n\nexport interface useVideoListTile extends TrackWithPeer {\n width: number;\n height: number;\n}\n\nexport interface useVideoResult {\n /**\n * This returns a list of all pages with every page containing the list of all tiles on it.\n */\n pagesWithTiles: useVideoListTile[][];\n /**\n * add the ref to the element going to render the video list, this is used to measure the available\n * space/dimensions in order to calculate the best fit\n */\n ref: React.MutableRefObject<any>;\n}\n\nconst DEFAULTS = {\n aspectRatio: {\n width: 1,\n height: 1,\n },\n};\n\n/**\n * This hook can be used to build a paginated gallery view of video tiles. You can give the hook\n * a list of all the peers which need to be shown and it tells you how to structure the UI by giving\n * a list of pages with every page having a list of video tiles.\n * Please check the documentation of input and output types for more details.\n */\nexport const useVideoList = ({\n peers,\n maxTileCount,\n maxColCount,\n maxRowCount,\n includeScreenShareForPeer = () => false,\n aspectRatio = DEFAULTS.aspectRatio,\n filterNonPublishingPeers = true,\n offsetY = 0,\n}: useVideoListInput): useVideoResult => {\n const { width = 0, height = 0, ref } = useResizeDetector();\n const store = useHMSVanillaStore();\n // using vanilla store as we don't need re-rendering every time something in a track changes\n const tracksMap: Record<HMSTrackID, HMSTrack> = store.getState(selectTracksMap);\n const tracksWithPeer: TrackWithPeer[] = getVideoTracksFromPeers(\n peers,\n tracksMap,\n includeScreenShareForPeer,\n filterNonPublishingPeers,\n );\n const finalAspectRatio = useMemo(() => {\n if (aspectRatio) {\n return aspectRatio;\n }\n const modeAspectRatio = getModeAspectRatio(tracksWithPeer);\n // Default to 1 if there are no video tracks\n return {\n width: modeAspectRatio || 1,\n height: 1,\n };\n }, [aspectRatio, tracksWithPeer]);\n const count = tracksWithPeer.length;\n const {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = useMemo(\n () =>\n calculateLayoutSizes({\n count,\n parentWidth: Math.floor(width),\n parentHeight: Math.floor(height) - Math.min(height, offsetY),\n maxTileCount,\n maxRowCount,\n maxColCount,\n aspectRatio: finalAspectRatio,\n }),\n [count, width, height, maxTileCount, maxRowCount, maxColCount, finalAspectRatio, offsetY],\n );\n const chunkedTracksWithPeer = useMemo(\n () =>\n chunkElements<TrackWithPeer>({\n elements: tracksWithPeer,\n tilesInFirstPage,\n onlyOnePage: false,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n }),\n [\n tracksWithPeer,\n tilesInFirstPage,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n ],\n );\n return {\n pagesWithTiles: chunkedTracksWithPeer,\n ref,\n };\n};\n", "/* eslint-disable complexity */\n/* eslint-disable no-plusplus */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport { HMSPeer, HMSScreenVideoTrack, HMSTrack, HMSTrackID, HMSVideoTrack } from '@100mslive/hms-video-store';\n\nexport const chunk = <T>(elements: T[], chunkSize: number, onlyOnePage: boolean) =>\n elements.reduce((resultArray: T[][], tile: T, index: number) => {\n const chunkIndex = Math.floor(index / chunkSize);\n if (chunkIndex > 0 && onlyOnePage) {\n return resultArray;\n }\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = []; // start a new chunk\n }\n\n resultArray[chunkIndex].push(tile);\n return resultArray;\n }, []);\n\ninterface ChunkElements<T> {\n elements: T[];\n tilesInFirstPage: number;\n onlyOnePage: boolean;\n isLastPageDifferentFromFirstPage: boolean;\n defaultWidth: number;\n defaultHeight: number;\n lastPageWidth: number;\n lastPageHeight: number;\n}\n\n/**\n * Given a list of tracks/elements and some constraints, group the tracks in separate pages.\n * @return 2D list for every page which has the original element and height and width\n * for its tile.\n */\nexport const chunkElements = <T>({\n elements,\n tilesInFirstPage,\n onlyOnePage,\n isLastPageDifferentFromFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n}: ChunkElements<T>): (T & { width: number; height: number })[][] => {\n const chunks: T[][] = chunk<T>(elements, tilesInFirstPage, onlyOnePage);\n return chunks.map((ch, page) =>\n ch.map(element => {\n const isLastPage: boolean = page === chunks.length - 1;\n const width = isLastPageDifferentFromFirstPage && isLastPage ? lastPageWidth : defaultWidth;\n const height = isLastPageDifferentFromFirstPage && isLastPage ? lastPageHeight : defaultHeight;\n return { ...element, height, width };\n }),\n );\n};\n\n/**\n * Mathematical mode - the element with the highest occurrence in an array\n * @param array\n */\nexport function mode(array: number[]): number | null {\n if (array.length === 0) {\n return null;\n }\n const modeMap: Record<number, number> = {};\n let maxEl = array[0];\n let maxCount = 1;\n for (let i = 0; i < array.length; i++) {\n const el = array[i];\n if (modeMap[el] === null) {\n modeMap[el] = 1;\n } else {\n modeMap[el]++;\n }\n if (modeMap[el] > maxCount) {\n maxEl = el;\n maxCount = modeMap[el];\n }\n }\n return maxEl;\n}\n\nexport type TrackWithPeer = { track?: HMSVideoTrack | HMSScreenVideoTrack; peer: HMSPeer };\n\nexport type TrackWithPeerAndDimensions = {\n track?: HMSVideoTrack | HMSScreenVideoTrack;\n peer: HMSPeer;\n width?: number;\n height?: number;\n};\n\n/**\n * get the aspect ration occurring with the highest frequency\n * @param tracks - video tracks to infer aspect ratios from\n */\nexport const getModeAspectRatio = (tracks: TrackWithPeer[]): number | null =>\n mode(\n tracks\n .filter(track => track.track?.width && track.track?.height)\n .map(track => {\n const width = track.track?.width;\n const height = track.track?.height;\n // Default to 1 if there are no video tracks\n return (width || 1) / (height || 1);\n }),\n );\n\ninterface GetTileSizesInList {\n count: number;\n parentWidth: number;\n parentHeight: number;\n maxTileCount?: number;\n maxRowCount?: number;\n maxColCount?: number;\n aspectRatio: {\n width: number;\n height: number;\n };\n}\n\ninterface GetTileSizes {\n parentWidth: number;\n parentHeight: number;\n count: number;\n maxCount: number;\n aspectRatio: { width: number; height: number };\n}\n\n/**\n * Finds the largest rectangle area when trying to place N rectangle into a containing\n * rectangle without rotation.\n *\n * @param {Number} containerWidth The width of the container.\n * @param {Number} containerHeight The height of the container.\n * @param {Number} numRects How many rectangles must fit within.\n * @param {Number} width The unscaled width of the rectangles to be placed.\n * @param {Number} height The unscaled height of the rectangles to be placed.\n * @return {Object} The area and number of rows and columns that fit.\n */\nexport const largestRect = (\n containerWidth: number,\n containerHeight: number,\n numRects: number,\n width: number | undefined,\n height: number | undefined,\n) => {\n if (containerWidth < 0 || containerHeight < 0) {\n throw new Error('Container must have a non-negative area');\n }\n if (numRects < 1 || !Number.isInteger(numRects)) {\n throw new Error('Number of shapes to place must be a positive integer');\n }\n const aspectRatio = width && height && width / height;\n if (aspectRatio !== undefined && isNaN(aspectRatio)) {\n throw new Error('Aspect ratio must be a number');\n }\n\n let best = { area: 0, cols: 0, rows: 0, width: 0, height: 0 };\n\n // TODO: Don't start with obviously-`ba`d candidates.\n const startCols = numRects;\n const colDelta = -1;\n\n // For each combination of rows + cols that can fit the number of rectangles,\n // place them and see the area.\n if (aspectRatio !== undefined) {\n for (let cols = startCols; cols > 0; cols += colDelta) {\n const rows = Math.ceil(numRects / cols);\n const hScale = containerWidth / (cols * aspectRatio);\n const vScale = containerHeight / rows;\n let width;\n let height;\n // Determine which axis is the constraint.\n if (hScale <= vScale) {\n width = containerWidth / cols;\n height = width / aspectRatio;\n } else {\n height = containerHeight / rows;\n width = height * aspectRatio;\n }\n const area = width * height;\n if (area > best.area) {\n best = { area, width, height, rows, cols };\n }\n }\n }\n return best;\n};\n\nexport const getTileSizesWithColConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const cols = Math.min(\n Math.ceil(Math.sqrt((count * (parentWidth / parentHeight)) / (aspectRatio.width / aspectRatio.height))),\n maxCount,\n );\n let width = parentWidth / cols;\n let height = width / (aspectRatio.width / aspectRatio.height);\n if (height > parentHeight) {\n height = parentHeight;\n width = height / (aspectRatio.height / aspectRatio.width);\n }\n const rows = Math.floor(parentHeight / height);\n defaultHeight = height;\n defaultWidth = width;\n tilesInFirstPage = Math.min(count, rows * cols);\n tilesinLastPage = count % (rows * cols);\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > rows * cols;\n if (isLastPageDifferentFromFirstPage) {\n const cols = Math.min(\n Math.ceil(Math.sqrt((tilesinLastPage * (parentWidth / parentHeight)) / (aspectRatio.width / aspectRatio.height))),\n maxCount,\n );\n let width = parentWidth / cols;\n let height = width / (aspectRatio.width / aspectRatio.height);\n if (height > parentHeight) {\n height = parentHeight;\n width = height / (aspectRatio.height / aspectRatio.width);\n }\n lastPageHeight = height;\n lastPageWidth = width;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport const getTileSizesWithPageConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const { width: initialWidth, height: initialHeight } = largestRect(\n parentWidth,\n parentHeight,\n Math.min(count, maxCount),\n aspectRatio.width,\n aspectRatio.height,\n );\n defaultWidth = initialWidth;\n defaultHeight = initialHeight;\n tilesInFirstPage = Math.min(count, maxCount);\n tilesinLastPage = count % maxCount;\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > maxCount;\n if (isLastPageDifferentFromFirstPage) {\n const { width: remWidth, height: remHeight } = largestRect(\n parentWidth,\n parentHeight,\n tilesinLastPage,\n aspectRatio.width,\n aspectRatio.height,\n );\n lastPageWidth = remWidth;\n lastPageHeight = remHeight;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport const getTileSizesWithRowConstraint = ({\n parentWidth,\n parentHeight,\n count,\n maxCount,\n aspectRatio,\n}: GetTileSizes) => {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n let tilesinLastPage = 0;\n const rows = Math.min(\n Math.ceil(Math.sqrt((count * (aspectRatio.width / aspectRatio.height)) / (parentWidth / parentHeight))),\n maxCount,\n );\n const height = parentHeight / rows;\n const width = height * (aspectRatio.width / aspectRatio.height);\n const cols = Math.floor(parentWidth / width);\n defaultWidth = width;\n defaultHeight = height;\n tilesInFirstPage = Math.min(count, rows * cols);\n tilesinLastPage = count % (rows * cols);\n isLastPageDifferentFromFirstPage = tilesinLastPage > 0 && count > rows * cols;\n if (isLastPageDifferentFromFirstPage) {\n const rows = Math.min(\n Math.ceil(Math.sqrt((tilesinLastPage * (aspectRatio.width / aspectRatio.height)) / (parentWidth / parentHeight))),\n maxCount,\n );\n const height = parentHeight / rows;\n const width = height * (aspectRatio.width / aspectRatio.height);\n lastPageHeight = height;\n lastPageWidth = width;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n};\n\nexport function calculateLayoutSizes({\n count,\n parentWidth,\n parentHeight,\n maxTileCount,\n maxRowCount,\n maxColCount,\n aspectRatio,\n}: GetTileSizesInList) {\n let defaultWidth = 0;\n let defaultHeight = 0;\n let lastPageWidth = 0;\n let lastPageHeight = 0;\n let isLastPageDifferentFromFirstPage = false;\n let tilesInFirstPage = 0;\n\n if (count === 0) {\n // no tracks to show\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n }\n\n if (maxTileCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithPageConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxTileCount,\n aspectRatio,\n }));\n } else if (maxRowCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithRowConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxRowCount,\n aspectRatio,\n }));\n } else if (maxColCount) {\n ({\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n } = getTileSizesWithColConstraint({\n parentWidth,\n parentHeight,\n count,\n maxCount: maxColCount,\n aspectRatio,\n }));\n } else {\n const { width, height } = largestRect(parentWidth, parentHeight, count, aspectRatio.width, aspectRatio.height);\n defaultWidth = width;\n defaultHeight = height;\n tilesInFirstPage = count;\n }\n return {\n tilesInFirstPage,\n defaultWidth,\n defaultHeight,\n lastPageWidth,\n lastPageHeight,\n isLastPageDifferentFromFirstPage,\n };\n}\n\n/**\n * given list of peers and all tracks in the room, get a list of tile objects to show in the UI\n * @param peers\n * @param tracks\n * @param includeScreenShareForPeer - fn will be called to check whether to include screenShare for the peer in returned tiles\n * @param filterNonPublishingPeers - by default a peer with no tracks won't be counted towards final tiles\n */\nexport const getVideoTracksFromPeers = (\n peers: HMSPeer[],\n tracks: Record<HMSTrackID, HMSTrack>,\n includeScreenShareForPeer: (peer: HMSPeer) => boolean,\n filterNonPublishingPeers = true,\n) => {\n if (!peers || !tracks || !includeScreenShareForPeer) {\n return [];\n }\n const peerTiles: TrackWithPeer[] = [];\n for (const peer of peers) {\n const onlyAudioTrack = peer.videoTrack === undefined && peer.audioTrack && tracks[peer.audioTrack];\n if (onlyAudioTrack) {\n peerTiles.push({ peer: peer });\n } else if (peer.videoTrack && tracks[peer.videoTrack]) {\n peerTiles.push({ track: tracks[peer.videoTrack] as HMSVideoTrack, peer: peer });\n } else if (!filterNonPublishingPeers) {\n peerTiles.push({ peer: peer });\n }\n // Handle video tracks in auxiliary tracks as well.\n if (peer.auxiliaryTracks.length > 0) {\n peer.auxiliaryTracks.forEach(trackId => {\n const track = tracks[trackId];\n if (track?.type === 'video' && track?.source === 'regular') {\n peerTiles.push({ track, peer });\n }\n });\n }\n if (includeScreenShareForPeer(peer) && peer.auxiliaryTracks.length > 0) {\n const screenShareTrackID = peer.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return track?.type === 'video' && track?.source === 'screen';\n });\n // Don't show tile if screenshare only has audio\n if (screenShareTrackID) {\n peerTiles.push({ track: tracks[screenShareTrackID] as HMSScreenVideoTrack, peer: peer });\n }\n }\n }\n return peerTiles;\n};\n", "import React, { useEffect } from 'react';\nimport { selectTrackAudioByID } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\n/**\n * This hook can be used to apply css properties on an element based on the current audio level for the passed in track.\n * It doesn't return the audio level as it's optimised for performance. As audio level could be changing frequently we\n * want to minimise the number of components an audio level change causes to re render.\n * An e.g. use of this hook will be to apply box-shadow on parent tile based on audio level.\n * @param trackId is the audio track id for which audio level needs to be used\n * @param getStyle is a function which can take in current audio level and return the style to apply for the ref\n * @param ref is the ref of the element on which you want the css to apply\n */\nexport function useAudioLevelStyles({\n trackId,\n getStyle,\n ref,\n}: {\n trackId?: string;\n getStyle: (level: number) => Record<string, string>;\n ref: React.RefObject<any>;\n}) {\n const store = useHMSVanillaStore();\n useEffect(\n () =>\n store.subscribe(level => {\n if (!ref.current) {\n return;\n }\n const styles = getStyle(level);\n for (const key in styles) {\n ref.current.style[key] = styles[key];\n }\n }, selectTrackAudioByID(trackId)),\n [getStyle, ref, store, trackId],\n );\n}\n", "import { useCallback } from 'react';\nimport {\n DeviceType,\n selectDevices,\n selectIsAllowedToPreviewMedia,\n selectIsAllowedToPublish,\n selectIsInPreview,\n selectLocalMediaSettings,\n} from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from '../hooks/types';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport type DeviceTypeAndInfo<T> = {\n [key in DeviceType]?: T;\n};\n\nexport interface useDevicesResult {\n /**\n * list of all devices by type\n */\n allDevices: DeviceTypeAndInfo<MediaDeviceInfo[]>;\n /**\n * selected device ids for all types\n */\n selectedDeviceIDs: DeviceTypeAndInfo<string>;\n /**\n * function to call to update device\n */\n updateDevice: ({ deviceType, deviceId }: { deviceType: DeviceType; deviceId: string }) => Promise<void>;\n}\n\n/**\n * This hook can be used to implement a UI component which allows the user to manually change their\n * audio/video device. It returns the list of all devices as well as the currently selected one. The input\n * devices will be returned based on what the user is allowed to publish, so a audio only user won't get\n * the audioInput field. This can be used to show the UI dropdowns properly.\n *\n * Note:\n * - Browsers give access to the list of devices only if the user has given permission to access them\n * - Changing devices manually work best in combination with remembering the user's selection for the next time, do\n * pass the rememberDeviceSelection flag at time of join for this to happen.\n *\n * @param handleError error handler for any errors during device change\n */\nexport const useDevices = (handleError: hooksErrHandler = logErrorHandler): useDevicesResult => {\n const actions = useHMSActions();\n const sdkAllDevices: DeviceTypeAndInfo<MediaDeviceInfo[]> = useHMSStore(selectDevices);\n const sdkSelectedDevices = useHMSStore(selectLocalMediaSettings);\n const isInPreview = useHMSStore(selectIsInPreview);\n const selectAllowed = isInPreview ? selectIsAllowedToPreviewMedia : selectIsAllowedToPublish;\n const isAllowedToPublish = useHMSStore(selectAllowed);\n\n const selectedDeviceIDs: DeviceTypeAndInfo<string> = {\n [DeviceType.audioOutput]: sdkSelectedDevices.audioOutputDeviceId,\n };\n const allDevices: DeviceTypeAndInfo<MediaDeviceInfo[]> = {\n [DeviceType.audioOutput]: sdkAllDevices.audioOutput,\n };\n\n if (isAllowedToPublish.video) {\n allDevices[DeviceType.videoInput] = sdkAllDevices.videoInput;\n selectedDeviceIDs[DeviceType.videoInput] = sdkSelectedDevices.videoInputDeviceId;\n }\n if (isAllowedToPublish.audio) {\n allDevices[DeviceType.audioInput] = sdkAllDevices.audioInput;\n selectedDeviceIDs[DeviceType.audioInput] = sdkSelectedDevices.audioInputDeviceId;\n }\n\n const updateDevice = useCallback(\n async ({ deviceType, deviceId }: { deviceType: DeviceType; deviceId: string }) => {\n try {\n switch (deviceType) {\n case DeviceType.audioInput:\n await actions.setAudioSettings({ deviceId });\n break;\n case DeviceType.videoInput:\n await actions.setVideoSettings({ deviceId });\n break;\n case DeviceType.audioOutput:\n await actions.setAudioOutputDevice(deviceId);\n break;\n }\n } catch (err) {\n handleError(err as Error, 'updateDevices');\n }\n },\n [handleError, actions],\n );\n\n return {\n allDevices,\n selectedDeviceIDs,\n updateDevice,\n };\n};\n", "import { useMemo } from 'react';\nimport {\n HMSPeer,\n HMSRoleName,\n selectIsConnectedToRoom,\n selectPeerCount,\n selectPeers,\n selectRemotePeers,\n} from '@100mslive/hms-video-store';\nimport { useHMSStore } from '../primitives/HmsRoomProvider';\nimport { groupByRoles } from '../utils/groupBy';\n\nexport interface useParticipantListResult {\n roles: HMSRoleName[];\n participantsByRoles: Record<string, HMSPeer[]>;\n peerCount: number;\n isConnected: boolean;\n}\n\nexport const useParticipantList = () => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);\n const peerCount = useHMSStore(selectPeerCount);\n const participantsByRoles = useMemo(() => groupByRoles(participantList), [participantList]);\n const roles = Object.keys(participantsByRoles);\n return { roles, participantsByRoles, peerCount, isConnected };\n};\n", "import { HMSPeer } from '@100mslive/hms-video-store';\n/**\n * Give array like [\n * { name: 'peer1', id: 1, roleName: 'role1' },\n * { name: 'peer2', id: 2, roleName: 'role2' }\n *]\n * the output will be\n * {\n * 'role1': [{'name': 'peer1', id: 1, roleName: 'role1'}],\n * 'role2': [{ name: 'peer2', id: 2, roleName: 'role2' }]\n * }\n * @param {HMSPeer[]} peers\n * @returns\n */\nexport const groupByRoles = (peers: HMSPeer[]) => {\n if (!peers || !Array.isArray(peers) || peers.length === 0) {\n return {};\n }\n return peers.reduce((res: Record<string, HMSPeer[]>, peer) => {\n if (!peer.roleName) {\n return res;\n }\n if (!res[peer.roleName]) {\n res[peer.roleName] = [];\n }\n res[peer.roleName].push(peer);\n return res;\n }, {});\n};\n", "import { selectHLSState, selectRecordingState, selectRTMPState } from '@100mslive/hms-video-store';\nimport { useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport interface useRecordingStreamingResult {\n isServerRecordingOn: boolean;\n isBrowserRecordingOn: boolean;\n isHLSRecordingOn: boolean;\n isStreamingOn: boolean;\n isHLSRunning: boolean;\n isRTMPRunning: boolean;\n isRecordingOn: boolean;\n}\n\nexport const useRecordingStreaming = (): useRecordingStreamingResult => {\n const recording = useHMSStore(selectRecordingState);\n const rtmp = useHMSStore(selectRTMPState);\n const hls = useHMSStore(selectHLSState);\n\n const isServerRecordingOn = recording.server.running;\n const isBrowserRecordingOn = recording.browser.running;\n const isHLSRecordingOn = recording.hls.running;\n const isStreamingOn = hls.running || rtmp.running;\n const isRecordingOn = isServerRecordingOn || isBrowserRecordingOn || isHLSRecordingOn;\n\n return {\n isServerRecordingOn,\n isBrowserRecordingOn,\n isHLSRecordingOn,\n isStreamingOn,\n isHLSRunning: hls.running,\n isRTMPRunning: rtmp.running,\n isRecordingOn,\n };\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport { HMSNotificationTypes } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSNotifications } from '../primitives/HmsRoomProvider';\n\nexport interface useAutoplayErrorResult {\n /*\n * Autoplay error message\n */\n error: string;\n /**\n * call this method on a UI element click to unblock the blocked audio autoplay.\n */\n unblockAudio: () => Promise<void>;\n /**\n * Call this method to reset(hide) the UI that is rendered when there was an error\n */\n resetError: () => void;\n}\n\n/**\n * Use this hook to show a UI(modal or a toast) when autoplay is blocked by browser and allow the user to\n * unblock the browser autoplay block\n * @returns {useAutoplayErrorResult}\n */\nexport const useAutoplayError = (): useAutoplayErrorResult => {\n const notification = useHMSNotifications(HMSNotificationTypes.ERROR);\n const [error, setError] = useState('');\n const actions = useHMSActions();\n\n const unblockAudio = useCallback(async () => {\n await actions.unblockAudio();\n }, [actions]);\n\n useEffect(() => {\n if (notification?.data.code === 3008) {\n setError(notification?.data.message);\n }\n }, [notification]);\n\n return { error, unblockAudio, resetError: () => setError('') };\n};\n", "import { useCallback, useEffect } from 'react';\nimport { HMSNotificationTypes, HMSPeerID, HMSRoleName } from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSActions, useHMSVanillaNotifications } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface useCustomEventInput<T> {\n /**\n * type of the event, for example, MODERATOR_EVENT, EMOJI_REACTIONS etc.\n */\n type: string;\n /**\n * the handler function for when the custom event comes. It's recommended\n * to use `useCallback` for the function passed in here for performance\n * reasons.\n * The callback is optional in case you want to decouple sending event and\n * handling event in the UI.\n */\n onEvent?: (data: T) => void;\n /**\n * flag to treat event payload as json.\n * If true, the payload will be stringified before sending and\n * parsed before calling the onEvent handler function.\n *\n * Set it to `false` if you want to send/receive only string messages\n *\n * Set it to `true` if you want to send/receive objects\n *\n * default value is true\n */\n json?: boolean;\n /**\n * function to handle errors happening during sending the event\n */\n handleError?: hooksErrHandler;\n}\n\nexport interface EventReceiver {\n peerId?: HMSPeerID;\n roleNames?: HMSRoleName[];\n}\n\nexport interface useCustomEventResult<T> {\n /**\n * sends the event data to others in the room who will receive it in onEvent\n *\n * @example to send message to peers of specific roles\n * ```js\n * sendEvent(data, {roleNames: ['host','guest']})\n * ```\n *\n * @example to send message to single peer\n * ```js\n * sendEvent(data, {peerId})\n * ```\n */\n sendEvent: (data: T, receiver?: EventReceiver) => void;\n}\n\nconst stringifyData = <T>(data: T, json: boolean) => (json ? JSON.stringify(data || '') : (data as unknown as string));\n\n/**\n * A generic function to implement [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events) in your UI.\n * The data to be sent to remote is expected to be a serializable JSON. The serialization\n * and deserialization is taken care of by the hook.\n */\nexport const useCustomEvent = <T>({\n type,\n json = true,\n onEvent,\n handleError = logErrorHandler,\n}: useCustomEventInput<T>): useCustomEventResult<T> => {\n const actions = useHMSActions();\n const notifications = useHMSVanillaNotifications();\n\n useEffect(() => {\n // we don't want these messages to be stored in store reserving that for chat messages\n actions.ignoreMessageTypes([type]);\n }, [actions, type]);\n\n // this is to handle messages from remote peers\n useEffect(() => {\n if (!notifications) {\n return;\n }\n const unsubscribe = notifications.onNotification(notification => {\n const msg = notification.data;\n if (msg && msg.type === type) {\n try {\n const data = json ? JSON.parse(msg.message) : msg.message;\n onEvent?.(data as T);\n } catch (err) {\n handleError(err as Error, 'handleCustomEvent');\n }\n }\n }, HMSNotificationTypes.NEW_MESSAGE);\n return unsubscribe;\n }, [notifications, type, json, onEvent, handleError]);\n\n // this is to send message to remote peers, peers of specific role or single peer, and call onEvent\n const sendEvent = useCallback(\n async (data: T, receiver?: EventReceiver) => {\n try {\n const dataStr = stringifyData<T>(data, json);\n if (receiver && Array.isArray(receiver?.roleNames)) {\n await actions.sendGroupMessage(dataStr, receiver.roleNames, type);\n } else if (typeof receiver?.peerId === 'string') {\n await actions.sendDirectMessage(dataStr, receiver.peerId, type);\n } else {\n await actions.sendBroadcastMessage(dataStr, type);\n }\n onEvent?.(data);\n } catch (err) {\n handleError(err as Error, 'sendCustomEvent');\n }\n },\n [actions, handleError, onEvent, type, json],\n );\n\n return { sendEvent };\n};\n", "import {\n HMSPeer,\n HMSRoleName,\n selectAvailableRoleNames,\n selectIsConnectedToRoom,\n selectPeerCount,\n selectPeerMetadata,\n selectPeers,\n selectRemotePeers,\n} from '@100mslive/hms-video-store';\nimport { useHMSStore, useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\nexport interface useParticipantsResult {\n /**\n * list of participants that match the given filters\n */\n participants: HMSPeer[];\n /**\n * Total number of participants in the room\n */\n peerCount: number;\n /**\n * is joined in the room\n */\n isConnected: boolean;\n /**\n * role names with at least one participant present with that role\n */\n rolesWithParticipants: HMSRoleName[];\n}\n\nexport type useParticipantsParams = {\n /** To filter by particular role */\n role: HMSRoleName;\n /**\n * To filter by particular by metadata. only supports `{ isHandRaised: true }` for now\n * @beta\n */\n metadata: Record<string, any>;\n /** To filter by name/role (partial match) */\n search: string;\n};\n\n/**\n * This can be used to get the total count of participants in the room, participants\n * filtered by role or metadata with isHandRaised or the entire participants if no params are passed\n * @param {useParticipantsParams} params\n * @returns {useParticipantsResult}\n */\nexport const useParticipants = (params?: useParticipantsParams) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const peerCount = useHMSStore(selectPeerCount);\n const availableRoles = useHMSStore(selectAvailableRoleNames);\n let participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);\n const rolesWithParticipants = Array.from(new Set(participantList.map(peer => peer.roleName)));\n const vanillaStore = useHMSVanillaStore();\n if (params?.metadata?.isHandRaised) {\n participantList = participantList.filter(peer => {\n return vanillaStore.getState(selectPeerMetadata(peer.id)).isHandRaised;\n });\n }\n if (params?.role && availableRoles.includes(params.role)) {\n participantList = participantList.filter(peer => peer.roleName === params.role);\n }\n if (params?.search) {\n const search = params.search.toLowerCase();\n participantList = participantList.filter(\n peer => peer.roleName?.toLowerCase().includes(search) || peer.name.toLowerCase().includes(search),\n );\n }\n return { participants: participantList, isConnected, peerCount, rolesWithParticipants };\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useScreenShare } from './useScreenShare';\nimport usePrevious, { isChromiumBased } from '../utils/commons';\n\nexport interface useEmbedShareResult {\n /**\n * Embed and start sharing a URL.\n *\n * It will throw an error in the following scenarios:\n * - When the URL has not been passed\n * - When the reference has not been attached to an iframe\n * - When screen share cannot be started\n */\n startEmbedShare: (value: string) => Promise<void>;\n\n /**\n * Stop sharing the embed.\n */\n stopEmbedShare: () => Promise<void>;\n /**\n * Flag to check if an embed is currently being shared.\n */\n isEmbedShareInProgress: boolean;\n\n /**\n * Reference to attach to the iframe that is responsible for rendering the URL passed.\n */\n iframeRef: React.RefObject<HTMLIFrameElement | null>;\n}\n\n/**\n * @param resetConfig Callback that implements cleanup after Embed sharing stops. It is an optional parameter.\n * @returns useEmbedShareResult\n */\nexport const useEmbedShare = (resetConfig?: () => void): useEmbedShareResult => {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const [sharing, setSharing] = useState(false);\n\n const handleScreenShareError = useCallback(() => {\n throw new Error('unable to start screen share');\n }, []);\n const inProgress = useRef(false);\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(handleScreenShareError);\n // store previous state of screensharing, it will help to reset the config after screensharing stop.\n const previouslySharing = usePrevious(amIScreenSharing);\n\n const stopShare = useCallback(async () => {\n if (amIScreenSharing) {\n await toggleScreenShare?.(); // Stop screen sharing\n iframeRef.current = null;\n }\n }, [amIScreenSharing, toggleScreenShare]);\n\n const startShare = useCallback(\n async (value: string) => {\n if (inProgress.current) {\n return;\n }\n if (!value) {\n throw new Error('URL not found');\n }\n if (amIScreenSharing) {\n throw new Error('You are already sharing');\n }\n if (!iframeRef.current) {\n throw new Error('Attach a reference `iframeRef` to iframe for sharing');\n }\n iframeRef.current.src = value;\n inProgress.current = true;\n setSharing(true);\n await toggleScreenShare?.({\n forceCurrentTab: isChromiumBased,\n cropElement: iframeRef.current,\n preferCurrentTab: isChromiumBased,\n });\n },\n [amIScreenSharing, toggleScreenShare],\n );\n\n useEffect(() => {\n if (previouslySharing && !amIScreenSharing) {\n resetConfig?.();\n if (iframeRef.current) {\n iframeRef.current.src = '';\n }\n inProgress.current = false;\n setSharing(false);\n }\n }, [amIScreenSharing, previouslySharing, resetConfig]);\n\n return {\n startEmbedShare: startShare,\n stopEmbedShare: stopShare,\n iframeRef,\n isEmbedShareInProgress: sharing,\n };\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useScreenShare } from './useScreenShare';\nimport usePrevious, { isChromiumBased, pdfIframeURL } from '../utils/commons';\n\nexport interface usePDFShareResult {\n /**\n * Start sharing a PDF file or URL.\n * It will throw an error in the following scenarios:\n * - When file or URL has not been passed, or is invalid\n * - When the reference has not been attached to an iframe\n * - When screen share cannot be started\n */\n startPDFShare: (value: File | string) => Promise<void>;\n\n /**\n * Stop sharing the PDF file or URL.\n */\n stopPDFShare: () => Promise<void>;\n /**\n * Flag to check if PDF sharing is currently in progress.\n */\n isPDFShareInProgress: boolean;\n\n /**\n * Reference to attach to the iframe that is responsible for rendering the PDF.\n */\n iframeRef: React.RefObject<HTMLIFrameElement | null>;\n}\n\n/**\n * @param resetConfig Callback that implements cleanup after PDF sharing stops. Typically used to reset the currently selected PDF file or URL in your state. It is an optional parameter.\n * @returns usePDFShareResult\n */\nexport const usePDFShare = (resetConfig?: () => void): usePDFShareResult => {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const [sharing, setSharing] = useState(false);\n\n const handleScreenShareError = useCallback(() => {\n throw new Error('unable to start screen share');\n }, []);\n const inProgress = useRef(false);\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(handleScreenShareError);\n // store previous state of screensharing, it will help to reset the config after screensharing stop.\n const previouslySharing = usePrevious(amIScreenSharing);\n\n const sendDataToPDFIframe = useCallback((file?: File) => {\n if (iframeRef.current) {\n iframeRef.current.contentWindow?.postMessage(\n {\n theme: 2, // dark theme -> 2, light theme -> 1\n file,\n },\n '*',\n );\n }\n }, []);\n\n const stopShare = useCallback(async () => {\n if (amIScreenSharing) {\n await toggleScreenShare?.(); // Stop screen sharing\n }\n }, [amIScreenSharing, toggleScreenShare]);\n\n const startShare = useCallback(\n // eslint-disable-next-line complexity\n async (value: File | string) => {\n if (inProgress.current) {\n return;\n }\n if (!value) {\n throw new Error('File or url not found');\n }\n if (amIScreenSharing) {\n throw new Error('You are already sharing');\n }\n if (!iframeRef.current) {\n throw new Error('Attach a reference `iframeRef` to iframe for sharing');\n }\n\n iframeRef.current.src = `${pdfIframeURL}${typeof value === 'string' ? `?file=${value}` : ''}`;\n iframeRef.current.onload = () => {\n requestAnimationFrame(() => {\n if (value instanceof File) {\n sendDataToPDFIframe(value);\n }\n });\n };\n inProgress.current = true;\n setSharing(true);\n const isInsideIframe = window.self !== window.top;\n await toggleScreenShare?.({\n forceCurrentTab: isChromiumBased && !isInsideIframe,\n cropElement: iframeRef.current,\n preferCurrentTab: isChromiumBased && !isInsideIframe,\n });\n },\n [amIScreenSharing, sendDataToPDFIframe, toggleScreenShare],\n );\n\n useEffect(() => {\n if (previouslySharing && !amIScreenSharing) {\n resetConfig?.();\n if (iframeRef.current) {\n iframeRef.current.removeAttribute('src');\n }\n inProgress.current = false;\n setSharing(false);\n }\n }, [amIScreenSharing, previouslySharing, resetConfig]);\n\n return {\n startPDFShare: startShare,\n stopPDFShare: stopShare,\n iframeRef,\n isPDFShareInProgress: sharing,\n };\n};\n", "import { useRef, useState } from 'react';\nimport { HMSPeer, HMSPeerListIteratorOptions } from '@100mslive/hms-video-store';\nimport { useHMSActions } from '../primitives/HmsRoomProvider';\n\nexport interface usePaginatedParticipantsResult {\n /**\n * call this function to load initial peers and also when you want to poll the peers information\n */\n loadPeers: Promise<void>;\n /**\n * this function is to be called when loadPeers is called at least once. This will fetch the next batch of peers\n */\n loadMorePeers: Promise<void>;\n hasNext: () => boolean;\n // list of peers loaded\n peers: HMSPeer[];\n // total number of peers matching the input options at the time of the request\n total: number;\n}\n\nexport type usePaginatedParticipantsInput = HMSPeerListIteratorOptions;\n\nconst processPeers = (peers: HMSPeer[]) => {\n return peers.reduce<Record<string, HMSPeer>>((acc, peer) => {\n acc[peer.id] = peer;\n return acc;\n }, {});\n};\n\nexport const usePaginatedParticipants = (options: HMSPeerListIteratorOptions) => {\n const actions = useHMSActions();\n const iterator = useRef(actions.getPeerListIterator(options));\n const [peers, setPeers] = useState<Record<string, HMSPeer>>({});\n const [total, setTotal] = useState(0);\n\n return {\n loadPeers: () =>\n iterator.current.findPeers().then(peers => {\n setPeers(processPeers(peers));\n setTotal(iterator.current.getTotal());\n }),\n loadMorePeers: () =>\n iterator.current.next().then(peers => {\n setPeers(prevPeers => {\n return {\n ...prevPeers,\n ...processPeers(peers),\n };\n });\n setTotal(iterator.current.getTotal());\n }),\n hasNext: () => iterator.current.hasNext(),\n total,\n peers: Object.values(peers),\n };\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport {\n selectAppData,\n selectIsConnectedToRoom,\n selectLocalPeer,\n selectPermissions,\n selectWhiteboard,\n} from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport const useWhiteboard = (isMobile = false) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const localPeerUserId = useHMSStore(selectLocalPeer)?.customerUserId;\n const whiteboard = useHMSStore(selectWhiteboard);\n const isHeadless = useHMSStore(selectAppData('disableNotifications'));\n const open = !!whiteboard?.open;\n const isOwner = whiteboard?.owner === localPeerUserId;\n const actions = useHMSActions();\n const [isEnabled, setIsEnabled] = useState(false);\n const permissions = useHMSStore(selectPermissions)?.whiteboard;\n const isAdmin = !!permissions?.includes('admin');\n\n useEffect(() => {\n if (isConnected) {\n setIsEnabled(actions.interactivityCenter.whiteboard.isEnabled);\n }\n }, [isConnected, actions]);\n\n const toggle = useCallback(async () => {\n if (!isConnected || !isAdmin) {\n return;\n }\n\n if (open) {\n isOwner && (await actions.interactivityCenter.whiteboard.close());\n } else {\n await actions.interactivityCenter.whiteboard.open();\n }\n }, [actions, isOwner, isAdmin, open, isConnected]);\n\n return {\n open,\n token: whiteboard?.token,\n endpoint: whiteboard?.addr,\n isOwner,\n isAdmin,\n zoomToContent: isHeadless || isMobile,\n toggle: isEnabled && isAdmin ? toggle : undefined,\n };\n};\n", "// write a hook to use the MDN notifications API to show a notification when the user is away from the page\nimport { useCallback } from 'react';\nimport { selectLocalPeerRoleName } from '@100mslive/hms-video-store';\nimport { useHMSVanillaStore } from '../primitives/HmsRoomProvider';\n\n// Do not prompt if preview is not available. Skips for beam\nexport const useAwayNotifications = () => {\n const vanillaStore = useHMSVanillaStore();\n const requestPermission = useCallback(async () => {\n // Headless check for beam\n if (!('Notification' in window) || navigator.webdriver) {\n console.debug('Request Permsissions : Notifications not supported or headless browser');\n // Notifications not supported\n return;\n }\n if (Notification?.permission === 'granted' || Notification?.permission === 'denied') {\n return;\n }\n const unsubscribe = vanillaStore.subscribe(async role => {\n if (role && role !== '__internal_recorder') {\n await Notification.requestPermission();\n unsubscribe?.();\n }\n }, selectLocalPeerRoleName);\n }, [vanillaStore]);\n\n const showNotification = useCallback((title: string, options?: NotificationOptions) => {\n // Notifications not supported\n if (!('Notification' in window)) {\n console.debug('Show Notifications: Notifications not supported or headless browser');\n return;\n }\n if (\n Notification?.permission === 'denied' ||\n /**\n * document.visibilityState is still 'visible' when the tab is active but window is not open\n * document.hasFocus() is false when the window is not active\n */\n (document.visibilityState === 'visible' && document.hasFocus())\n ) {\n return;\n }\n const notification = new Notification(title, options);\n\n const closeNotification = () => {\n if (document.visibilityState === 'visible' && document.hasFocus()) {\n notification?.close();\n document.removeEventListener('visibilitychange', closeNotification);\n }\n };\n document.addEventListener('visibilitychange', closeNotification);\n }, []);\n\n return { requestPermission, showNotification };\n};\n", "import { useEffect } from 'react';\nimport { HMSNotificationTypes } from '@100mslive/hms-video-store';\nimport { hooksErrHandler } from './types';\nimport { useHMSVanillaNotifications } from '../primitives/HmsRoomProvider';\nimport { logErrorHandler } from '../utils/commons';\n\nexport interface HMSTranscript {\n start: number;\n end: number;\n peer_id: string;\n final: boolean;\n transcript: string;\n}\n\nexport interface useHMSTranscriptInput {\n onTranscript?: (data: HMSTranscript[]) => void;\n handleError?: hooksErrHandler;\n}\n\n/**\n * A generic function to implement [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events) in your UI.\n * The data to be sent to remote is expected to be a serializable JSON. The serialization\n * and deserialization is taken care of by the hook.\n */\nexport const useTranscript = ({ onTranscript, handleError = logErrorHandler }: useHMSTranscriptInput) => {\n const type = 'hms_transcript';\n const notifications = useHMSVanillaNotifications();\n\n // this is to handle messages from remote peers\n useEffect(() => {\n if (!notifications) {\n return;\n }\n const unsubscribe = notifications.onNotification(notification => {\n const msg = notification.data;\n if (msg && msg.type === type) {\n try {\n const message = JSON.parse(msg.message);\n const data = message.results as HMSTranscript[];\n onTranscript?.(data);\n } catch (err) {\n handleError(err as Error, 'handleCaptionEvent');\n }\n }\n }, HMSNotificationTypes.NEW_MESSAGE);\n return unsubscribe;\n }, [notifications, type, handleError, onTranscript]);\n\n return;\n};\n", "import { HMSAudioMode, selectLocalMediaSettings } from '@100mslive/hms-video-store';\nimport { useHMSActions, useHMSStore } from '../primitives/HmsRoomProvider';\n\nexport const useAudioMode = () => {\n const hmsActions = useHMSActions();\n const { audioMode } = useHMSStore(selectLocalMediaSettings);\n const isMusicModeEnabled = audioMode === HMSAudioMode.MUSIC;\n const toggleMusicMode = async () =>\n await hmsActions.setAudioSettings({ audioMode: isMusicModeEnabled ? HMSAudioMode.VOICE : HMSAudioMode.MUSIC });\n return { toggleMusicMode, isMusicModeEnabled };\n};\n", "export {\n HMSRoomProvider,\n useHMSStore,\n useHMSActions,\n useHMSNotifications,\n useHMSVanillaStore,\n useHMSVanillaNotifications,\n useHMSStatsStore,\n} from './primitives/HmsRoomProvider';\nexport { usePreviewJoin } from './hooks/usePreviewJoin';\nexport { useAVToggle } from './hooks/useAVToggle';\nexport { useVideo } from './hooks/useVideo';\nexport { useScreenShare } from './hooks/useScreenShare';\nexport { useRemoteAVToggle } from './hooks/useRemoteAVToggle';\nexport { useVideoList } from './hooks/useVideoList';\nexport { useAudioLevelStyles } from './hooks/useAudioLevelStyles';\nexport { useDevices } from './hooks/useDevices';\nexport { useParticipantList } from './hooks/useParticipantList';\nexport { useRecordingStreaming } from './hooks/useRecordingStreaming';\nexport { useAutoplayError } from './hooks/useAutoplayError';\nexport { useCustomEvent } from './hooks/useCustomEvent';\nexport { useParticipants } from './hooks/useParticipants';\nexport { useEmbedShare } from './hooks/useEmbedShare';\nexport { usePDFShare } from './hooks/usePDFShare';\nexport { usePaginatedParticipants } from './hooks/usePaginatedParticipants';\nexport { useWhiteboard } from './hooks/useWhiteboard';\nexport { useAwayNotifications } from './hooks/useAwayNotifications';\nexport { useTranscript } from './hooks/useTranscript';\nexport { useAudioMode } from './hooks/useAudioMode';\n\n// types\nexport type { hooksErrHandler } from './hooks/types';\nexport type { usePreviewInput, usePreviewResult } from './hooks/usePreviewJoin';\nexport type { useVideoListInput, useVideoResult, useVideoListTile } from './hooks/useVideoList';\nexport type { useAVToggleResult } from './hooks/useAVToggle';\nexport type { useDevicesResult } from './hooks/useDevices';\nexport type { useScreenShareResult } from './hooks/useScreenShare';\nexport type { useRemoteAVToggleResult } from './hooks/useRemoteAVToggle';\nexport type { useRecordingStreamingResult } from './hooks/useRecordingStreaming';\nexport type { useParticipantListResult } from './hooks/useParticipantList';\nexport type { useParticipantsResult, useParticipantsParams } from './hooks/useParticipants';\nexport type { useVideoInput, useVideoOutput } from './hooks/useVideo';\nexport type { useAutoplayErrorResult } from './hooks/useAutoplayError';\nexport type { useCustomEventInput, useCustomEventResult } from './hooks/useCustomEvent';\nexport type { useEmbedShareResult } from './hooks/useEmbedShare';\nexport type { usePDFShareResult } from './hooks/usePDFShare';\nexport type { TrackWithPeerAndDimensions } from './utils/layout';\nexport type { usePaginatedParticipantsResult, usePaginatedParticipantsInput } from './hooks/usePaginatedParticipants';\nexport type { HMSTranscript, useHMSTranscriptInput } from './hooks/useTranscript';\n\n// helpers\nexport { throwErrorHandler } from './utils/commons';\n\nexport { getVideoTracksFromPeers as getPeersWithTiles } from './utils/layout';\n// reexport everything from store so app can import everything directly from this\nexport * from '@100mslive/hms-video-store';\n"],
5
- "mappings": "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",
5
+ "mappings": "ooBAAA,OAAOA,IAAS,iBAAAC,GAAkC,cAAAC,EAAY,aAAAC,GAAW,WAAAC,GAAS,YAAAC,OAAgB,QAClG,OAAOC,MAAY,UACnB,OAME,oBAAAC,OAKK,6BCbP,OAAgB,cAAAC,MAAkB,QAElC,OAAOC,MAAa,kBCOpB,IAAqBC,EAArB,KAA+B,CAG7B,OAAO,EAAEC,KAAgBC,EAAa,CACpC,KAAK,IAAI,EAAqBD,EAAK,GAAGC,CAAI,CAC5C,CAEA,OAAO,EAAED,KAAgBC,EAAa,CACpC,KAAK,IAAI,EAAmBD,EAAK,GAAGC,CAAI,CAC1C,CAEA,OAAO,EAAED,KAAgBC,EAAa,CACpC,KAAK,IAAI,EAAkBD,EAAK,GAAGC,CAAI,CACzC,CAEA,OAAO,EAAED,KAAgBC,EAAa,CACpC,KAAK,IAAI,EAAkBD,EAAK,GAAGC,CAAI,CACzC,CAEA,OAAO,EAAED,KAAgBC,EAAa,CACpC,KAAK,IAAI,EAAmBD,EAAK,GAAGC,CAAI,CAC1C,CAGA,OAAe,IAAIC,EAAoBF,KAAgBC,EAAa,CAClE,GAAI,OAAK,MAAM,QAAQ,EAAIC,EAAM,QAAQ,GAIzC,OAAQA,EAAO,CACb,IAAK,GAAqB,CACxB,QAAQ,IAAI,qBAAsBF,EAAK,GAAGC,CAAI,EAC9C,KACF,CACA,IAAK,GAAmB,CACtB,QAAQ,MAAM,qBAAsBD,EAAK,GAAGC,CAAI,EAChD,KACF,CACA,IAAK,GAAkB,CACrB,QAAQ,KAAK,qBAAsBD,EAAK,GAAGC,CAAI,EAC/C,KACF,CACA,IAAK,GAAkB,CACrB,QAAQ,KAAK,qBAAsBD,EAAK,GAAGC,CAAI,EAC/C,KACF,CACA,IAAK,GAAmB,CACtB,QAAQ,MAAM,qBAAsBD,EAAK,GAAGC,CAAI,EAChD,KACF,CACF,CACF,CACF,EApDqBF,EACZ,MAAqB,EDAvB,IAAMI,EAAoB;AAAA,sVAU1B,SAASC,EAAiBC,EAA2D,CAiB1F,MAhBoB,CAClBC,EACAC,EAA0CC,IACvC,CACEF,GACHG,EAAU,EACR,uGACF,EAEF,IAAMC,EAAqBC,EAAWN,CAAU,EAChD,GAAI,CAACK,EACH,MAAM,IAAI,MAAMP,CAAiB,EAEnC,IAAMS,EAAWF,EAAmB,MACpC,OAAOE,EAASN,EAAUC,CAAU,CACtC,CAEF,CAEO,SAASM,EAAsBR,EAA2D,CAiB/F,MAhByB,CACvBC,EACAC,EAA0CC,IACvC,CACEF,GACHG,EAAU,EACR,uGACF,EAEF,IAAMC,EAAqBC,EAAWN,CAAU,EAChD,GAAI,CAACK,EACH,MAAM,IAAI,MAAMP,CAAiB,EAEnC,IAAMS,EAAWF,EAAmB,WACpC,OAAOE,GAAA,YAAAA,EAAWN,EAAUC,EAC9B,CAEF,CE1DO,IAAMO,GAAY,OAAO,QAAW,YHiC3C,IAAMC,EAAaC,GAA8C,IAAI,EASxDC,GAAkB,CAAoE,CACjG,SAAAC,EACA,QAAAC,EACA,MAAAC,EACA,cAAAC,EACA,MAAAC,EACA,aAAAC,EAAe,GACf,cAAAC,EAAgB,EAClB,IAAkD,CAChD,IAAMC,EAAyCC,GAAQ,IAAM,CAC3D,IAAID,EAGEE,EAAQ,IAAM,CAClB,MAAM,IAAI,MAAM,gCAAgC,CAClD,EACA,GAAIR,GAAWC,EACbK,EAAgB,CACd,QAASN,EACT,MAAOS,EAAoBC,EAAAC,EAAA,GACtBV,GADsB,CAEzB,SAAUO,EACV,QAASA,CACX,EAAC,CACH,EACIN,IACFI,EAAc,cAAgBJ,GAE5BC,IACFG,EAAc,WAAaG,EAAsB,CAC/C,SAAUN,EAAM,SAChB,UAAWA,EAAM,UACjB,SAAUK,EACV,QAASA,CACX,CAAC,OAEE,CACL,IAAMI,EAAmB,IAAIC,GAW7B,GAVAP,EAAgB,CACd,QAASM,EAAiB,WAAW,EACrC,MAAOH,EAAoBC,EAAAC,EAAA,GACtBC,EAAiB,SAAS,GADJ,CAEzB,SAAUJ,EACV,QAASA,CACX,EAAC,EACD,cAAeI,EAAiB,iBAAiB,CACnD,EAEIR,EAAc,CAChB,IAAMD,EAAQS,EAAiB,SAAS,EACxCN,EAAc,WAAaG,EAAsB,CAC/C,SAAUN,EAAM,SAChB,UAAWA,EAAM,UACjB,SAAUK,EACV,QAASA,CACX,CAAC,CACH,CACF,CAGA,OAAAF,EAAc,QAAQ,iBAAiB,CACrC,KAAM,YACN,QAASQ,GAAM,QACf,WAAY,QAAQ,IAAI,iBAC1B,CAAC,EAEMR,CACT,EAAG,CAACN,EAASC,EAAOC,EAAeC,EAAOC,CAAY,CAAC,EAEvD,OAAAW,GAAU,IAAM,CACd,GAAIC,IAAaX,EAAe,CAC9B,IAAMY,EAAiB,IAAMX,EAAc,QAAQ,MAAM,EACzD,cAAO,iBAAiB,SAAUW,CAAc,EACzC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAc,CACrD,CACF,CAEA,MAAO,IAAM,CAAC,CAChB,EAAG,CAACZ,EAAeC,CAAa,CAAC,EAE1BQ,GAAM,cAAclB,EAAW,SAAU,CAAE,MAAOU,CAAc,EAAGP,CAAQ,CACpF,EAMamB,EAAcC,EAAiBvB,CAAU,EAEzCwB,GAAmBC,EAAsBzB,CAAU,EAcnD0B,EAAqB,IAAM,CACtC,IAAMC,EAAqBC,EAAW5B,CAAU,EAChD,GAAI,CAAC2B,EACH,MAAM,IAAI,MAAME,CAAiB,EAGnC,OAAOF,EAAmB,KAC5B,EAgBaG,EAA6B,IAAM,CAC9C,IAAMH,EAAqBC,EAAW5B,CAAU,EAChD,GAAI,CAAC2B,EACH,MAAM,IAAI,MAAME,CAAiB,EAEnC,OAAOF,EAAmB,aAC5B,EAKaI,EAAgB,IAAM,CACjC,IAAMJ,EAAqBC,EAAW5B,CAAU,EAChD,GAAI,CAAC2B,EACH,MAAM,IAAI,MAAME,CAAiB,EAEnC,OAAOF,EAAmB,OAC5B,EAQaK,EACXC,GACwC,CACxC,IAAMN,EAAqBC,EAAW5B,CAAU,EAC1C,CAACkC,EAAcC,CAAe,EAAIC,GAA8C,IAAI,EAE1F,GAAI,CAACT,EACH,MAAM,IAAI,MAAME,CAAiB,EAGnC,OAAAV,GAAU,IACHQ,EAAmB,cAGJA,EAAmB,cAAc,eAAkBO,GAAgB,CACrFC,EAAgBD,CAAY,CAC9B,EAAGD,CAAI,EAJL,OAMD,CAACN,EAAmB,cAAeM,CAAI,CAAC,EAEpCC,CACT,EIvNA,OAAS,eAAAG,GAAa,WAAAC,OAAe,QACrC,OAIE,gBAAAC,GACA,2BAAAC,GACA,mBAAAC,OACK,6BCRP,OAAS,aAAAC,GAAW,UAAAC,OAAc,QAClC,OAAS,mBAAAC,OAAuB,6BAIhC,IAAMC,GAAM,YAECC,EAAmC,CAACC,EAAYC,IAAoBC,EAAU,EAAEJ,GAAKG,EAAQD,CAAG,EAMhGG,GAAsCH,GAAe,CAChE,MAAMA,CACR,EAEe,SAARI,EAAgCC,EAAyB,CAC9D,IAAMC,EAAMC,GAAU,EAEtB,OAAAC,GAAU,IAAM,CACdF,EAAI,QAAUD,CAChB,CAAC,EAEMC,EAAI,OACb,CAEA,IAAMG,GAAwB,CAAC,OAAO,EAEzBC,EAAkBD,GAAsB,KAClDE,GAAe,CA9BlB,IAAAC,EAAAC,EA8BqB,QAAAA,GAAAD,EAAAE,GAAgB,UAAU,IAA1B,YAAAF,EAA6B,OAA7B,YAAAC,EAAmC,iBAAkBF,EAC1E,EAEaI,GAAe,4DDsDrB,IAAMC,GAAiB,CAAC,CAC7B,KAAAC,EAAO,GACP,MAAAC,EACA,SAAAC,EACA,YAAAC,EAAcC,EACd,aAAAC,EACA,gBAAAC,EACA,+BAAAC,EACA,OAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,WAAAC,CACF,IAAyC,CACvC,IAAMC,EAAUC,EAAc,EACxBC,EAAYC,EAAYC,EAAe,EACvCC,EAAcF,EAAYG,EAAuB,GAAK,GACtDC,EAAaL,IAAcM,GAAa,QAExCC,EAA2BC,GAAQ,KAChC,CACL,SAAUtB,EACV,UAAWC,EACX,SAAUC,EACV,wBAAyB,GACzB,SAAUI,EACV,aAAcD,EACd,OAAAG,EACA,+BAAAD,EACA,gBAAAE,EACA,mBAAAC,EACA,WAAAC,CACF,GACC,CACDX,EACAC,EACAC,EACAG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CAAC,EAEKY,EAAUC,GAAY,IAAYC,EAAA,wBACtC,GAAKxB,EAGL,GAAI,EACEgB,GAAeH,IAAcM,GAAa,gBAC5C,MAAMR,EAAQ,MAAM,EAAE,MAAM,IAAM,CAElC,CAAC,GAEH,MAAMA,EAAQ,QAAQS,CAAM,CAC9B,OAASK,EAAK,CACZvB,EAAYuB,EAAc,SAAS,CACrC,CACF,GAAG,CAACzB,EAAOgB,EAAaH,EAAWF,EAASS,EAAQlB,CAAW,CAAC,EAE1DwB,EAAOH,GAAY,IAAYC,EAAA,wBACnC,GAAKxB,EAGL,GAAI,CACF,MAAMW,EAAQ,KAAKS,CAAM,CAC3B,OAASK,EAAK,CACZvB,EAAYuB,EAAc,MAAM,CAClC,CACF,GAAG,CAACd,EAASS,EAAQlB,EAAaF,CAAK,CAAC,EAExC,MAAO,CACL,WAAAkB,EACA,KAAAQ,EACA,YAAAV,EACA,QAAAM,CACF,CACF,EErKA,OAAS,eAAAK,OAAmB,QAC5B,OACE,iCAAAC,GACA,4BAAAC,GACA,qBAAAC,GACA,6BAAAC,GACA,6BAAAC,OACK,6BA4BA,IAAMC,GAAc,CAACC,EAA+BC,IAAuC,CAChG,IAAMC,EAAsBC,EAAYC,EAAyB,EAC3DC,EAAsBF,EAAYG,EAAyB,EAE3DC,EADcJ,EAAYK,EAAiB,EACbC,GAAgCC,GAC9DC,EAAqBR,EAAYI,CAAa,EAC9CK,EAAUC,EAAc,EAExBC,EAAcC,GAAY,IAAYC,EAAA,wBAC1C,GAAI,CACF,MAAMJ,EAAQ,qBAAqB,CAACV,CAAmB,CACzD,OAASe,EAAK,CACZjB,EAAYiB,EAAc,aAAa,CACzC,CACF,GAAG,CAACL,EAASV,EAAqBF,CAAW,CAAC,EAExCkB,EAAcH,GAAY,IAAYC,EAAA,wBAC1C,GAAI,CACF,MAAMJ,EAAQ,qBAAqB,CAACP,CAAmB,CACzD,OAASY,EAAK,CACZjB,EAAYiB,EAAc,aAAa,CACzC,CACF,GAAG,CAACL,EAASP,EAAqBL,CAAW,CAAC,EAE9C,MAAO,CACL,oBAAAE,EACA,oBAAAG,EACA,YAAaM,GAAA,MAAAA,EAAoB,MAAQG,EAAc,OACvD,YAAaH,GAAA,MAAAA,EAAoB,MAAQO,EAAc,MACzD,CACF,ECjEA,OAAgB,eAAAC,GAAa,aAAAC,EAAW,UAAAC,OAAc,QACtD,OAAqB,wBAAAC,OAA4B,6BAwB1C,IAAMC,GAAW,CAAC,CAAE,QAAAC,EAAS,OAAAC,CAAO,IAAqC,CAC9E,IAAMC,EAAUC,EAAc,EACxBC,EAAWC,GAAgC,IAAI,EAC/CC,EAAQC,EAAYC,GAAqBR,CAAO,CAAC,EACjDS,EAAcJ,GAA+B,EAE7CK,EAAUC,GAAaC,GAA2B,CAClDA,IACFR,EAAS,QAAUQ,EAEvB,EAAG,CAAC,CAAC,EAEL,OAAAC,EAAU,IAAM,CACTJ,EAAY,QAENH,GAAA,MAAAA,EAAO,IAAMG,EAAY,WAAYH,GAAA,YAAAA,EAAO,KAExCQ,EAAA,wBACX,GAAIV,EAAS,QACX,GAAI,CACFW,EAAU,EAAE,6CAA6C,EACzD,MAAMb,EAAQ,YAAYO,EAAY,QAAUL,EAAS,OAAO,CAClE,OAASY,EAAK,CACZD,EAAU,EAAE,+BAAgCN,EAAY,QAASO,CAAG,CACtE,CAEFP,EAAY,QAAUH,GAAA,YAAAA,EAAO,EAC/B,GAbAG,EAAY,QAAUH,GAAA,YAAAA,EAAO,EAejC,EAAG,CAACA,GAAA,YAAAA,EAAO,GAAIJ,CAAO,CAAC,EAEvBW,EAAU,IAAM,CACDC,EAAA,wBACPR,GAAA,MAAAA,EAAO,IAAMF,EAAS,UACpBH,IAAW,GACb,MAAMC,EAAQ,YAAYI,EAAM,GAAIF,EAAS,OAAO,EAEpD,MAAMF,EAAQ,YAAYI,EAAM,GAAIF,EAAS,OAAO,EAG1D,EACF,EAAG,CAACE,EAAOL,EAAQC,CAAO,CAAC,EAG3BW,EAAU,IACD,IAAM,CACEC,EAAA,wBACX,GAAIV,EAAS,SAAWE,EACtB,GAAI,CAEF,MAAMJ,EAAQ,YAAYI,EAAM,GAAIF,EAAS,OAAO,CACtD,OAASY,EAAK,CACZD,EAAU,EAAE,+BAAgCT,EAAM,GAAIU,CAAG,CAC3D,CAEJ,EACF,EAEC,CAAC,CAAC,EAEE,CAAE,SAAUN,CAAQ,CAC7B,ECtFA,OAAS,eAAAO,OAAmB,QAC5B,OAIE,6BAAAC,GACA,2BAAAC,GACA,8BAAAC,OACK,6BA2CA,IAAMC,EAAiB,CAACC,EAA+BC,IAA0C,CAnDxG,IAAAC,EAAAC,EAoDE,IAAMC,EAAUC,EAAc,EACxBC,EAAmBC,EAAYC,EAAyB,EACxDC,EAAkBF,EAAYG,EAAuB,EACrDC,EAAcJ,EAAYK,GAA2BH,GAAA,YAAAA,EAAiB,EAAE,CAAC,EAEzEI,EAAoBC,GACjBC,GAAkCC,EAAA,wBACvC,GAAI,CACF,MAAMZ,EAAQ,sBAAsB,CAACE,EAAkBS,CAAM,CAC/D,OAASE,EAAK,CACZjB,EAAYiB,EAAc,mBAAmB,CAC/C,CACF,GACA,CAACb,EAASE,EAAkBN,CAAW,CACzC,EAEA,MAAO,CACL,iBAAAM,EACA,oBAAqBG,GAAA,YAAAA,EAAiB,GACtC,sBAAuBA,GAAA,YAAAA,EAAiB,KACxC,yBAAyBP,EAAAS,GAAA,YAAAA,EAAa,QAAb,YAAAT,EAAoB,GAC7C,yBAAyBC,EAAAQ,GAAA,YAAAA,EAAa,QAAb,YAAAR,EAAoB,GAC7C,kBAAAU,CACF,CACF,EC3EA,OAAS,eAAAK,MAAmB,QAC5B,OAIE,wBAAAC,GACA,0BAAAC,GACA,qBAAAC,GACA,wBAAAC,OACK,6BAgCP,IAAMC,GAAqB,CACzBC,EACAC,EACAC,IACGC,EAAA,wBACH,GAAIF,EACF,GAAI,CACF,MAAMD,EAAQ,sBAAsBC,EAAM,GAAI,CAACA,EAAM,OAAO,CAC9D,OAASG,EAAK,CACZF,EAAYE,EAAc,cAAc,CAC1C,CAEJ,GASaC,GAAoB,CAC/BC,EACAC,EACAL,EAA+BM,IACH,CAC5B,IAAMR,EAAUS,EAAc,EACxBC,EAAaC,EAAYC,GAAqBN,CAAY,CAAC,EAC3DO,EAAaF,EAAYG,GAAqBP,CAAY,CAAC,EAC3DQ,EAASJ,EAAYK,GAAuBN,GAAA,YAAAA,EAAY,EAAE,CAAC,EAC3DO,EAAcN,EAAYO,EAAiB,EAC3CC,EAAiBN,GAAA,MAAAA,EAAY,QAAUI,GAAA,YAAAA,EAAa,KAAOA,GAAA,YAAAA,EAAa,OACxEG,EAAiBV,GAAA,MAAAA,EAAY,QAAUO,GAAA,YAAAA,EAAa,KAAOA,GAAA,YAAAA,EAAa,OAExEI,EAAcC,EAAY,IAAYnB,EAAA,wBAC1C,MAAMJ,GAAmBC,EAASU,EAAYR,CAAW,CAC3D,GAAG,CAACF,EAASU,EAAYR,CAAW,CAAC,EAE/BqB,EAAcD,EAAY,IAAYnB,EAAA,wBAC1C,MAAMJ,GAAmBC,EAASa,EAAYX,CAAW,CAC3D,GAAG,CAACF,EAASE,EAAaW,CAAU,CAAC,EAE/BW,EAAYF,EACfP,GAAmB,CACdL,GACFV,EAAQ,UAAUe,EAAQL,EAAW,EAAE,CAE3C,EACA,CAACV,EAASU,CAAU,CACtB,EAEA,MAAO,CACL,eAAgB,CAAC,EAACA,GAAA,MAAAA,EAAY,SAC9B,eAAgB,CAAC,EAACG,GAAA,MAAAA,EAAY,SAC9B,OAAAE,EACA,YAAaL,GAAcU,EAAiBC,EAAc,OAC1D,aAAaR,GAAA,YAAAA,EAAY,UAAW,WAAaM,EAAiBI,EAAc,OAChF,UAAWb,EAAac,EAAY,MACtC,CACF,ECrGA,OAAgB,WAAAC,MAAe,QAC/B,OAAS,qBAAAC,OAAyB,wBAClC,OAAwC,mBAAAC,OAAuB,6BCGxD,IAAMC,GAAQ,CAAIC,EAAeC,EAAmBC,IACzDF,EAAS,OAAO,CAACG,EAAoBC,EAASC,IAAkB,CAC9D,IAAMC,EAAa,KAAK,MAAMD,EAAQJ,CAAS,EAC/C,OAAIK,EAAa,GAAKJ,IAGjBC,EAAYG,CAAU,IACzBH,EAAYG,CAAU,EAAI,CAAC,GAG7BH,EAAYG,CAAU,EAAE,KAAKF,CAAI,GAC1BD,CACT,EAAG,CAAC,CAAC,EAkBMI,GAAgB,CAAI,CAC/B,SAAAP,EACA,iBAAAQ,EACA,YAAAN,EACA,iCAAAO,EACA,aAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,CACF,IAAqE,CACnE,IAAMC,EAAgBf,GAASC,EAAUQ,EAAkBN,CAAW,EACtE,OAAOY,EAAO,IAAI,CAACC,EAAIC,IACrBD,EAAG,IAAIE,GAAW,CAChB,IAAMC,EAAsBF,IAASF,EAAO,OAAS,EAC/CK,EAAQV,GAAoCS,EAAaN,EAAgBF,EACzEU,EAASX,GAAoCS,EAAaL,EAAiBF,EACjF,OAAOU,EAAAC,EAAA,GAAKL,GAAL,CAAc,OAAAG,EAAQ,MAAAD,CAAM,EACrC,CAAC,CACH,CACF,EAMO,SAASI,GAAKC,EAAgC,CACnD,GAAIA,EAAM,SAAW,EACnB,OAAO,KAET,IAAMC,EAAkC,CAAC,EACrCC,EAAQF,EAAM,CAAC,EACfG,EAAW,EACf,QAASC,EAAI,EAAGA,EAAIJ,EAAM,OAAQI,IAAK,CACrC,IAAMC,EAAKL,EAAMI,CAAC,EACdH,EAAQI,CAAE,IAAM,KAClBJ,EAAQI,CAAE,EAAI,EAEdJ,EAAQI,CAAE,IAERJ,EAAQI,CAAE,EAAIF,IAChBD,EAAQG,EACRF,EAAWF,EAAQI,CAAE,EAEzB,CACA,OAAOH,CACT,CAeO,IAAMI,GAAsBC,GACjCR,GACEQ,EACG,OAAOC,GAAM,CAlGpB,IAAAC,EAAAC,EAkGuB,QAAAD,EAAAD,EAAM,QAAN,YAAAC,EAAa,UAASC,EAAAF,EAAM,QAAN,YAAAE,EAAa,QAAM,EACzD,IAAIF,GAAS,CAnGpB,IAAAC,EAAAC,EAoGQ,IAAMf,GAAQc,EAAAD,EAAM,QAAN,YAAAC,EAAa,MACrBb,GAASc,EAAAF,EAAM,QAAN,YAAAE,EAAa,OAE5B,OAAQf,GAAS,IAAMC,GAAU,EACnC,CAAC,CACL,EAkCWe,EAAc,CACzBC,EACAC,EACAC,EACAnB,EACAC,IACG,CACH,GAAIgB,EAAiB,GAAKC,EAAkB,EAC1C,MAAM,IAAI,MAAM,yCAAyC,EAE3D,GAAIC,EAAW,GAAK,CAAC,OAAO,UAAUA,CAAQ,EAC5C,MAAM,IAAI,MAAM,sDAAsD,EAExE,IAAMC,EAAcpB,GAASC,GAAUD,EAAQC,EAC/C,GAAImB,IAAgB,QAAa,MAAMA,CAAW,EAChD,MAAM,IAAI,MAAM,+BAA+B,EAGjD,IAAIC,EAAO,CAAE,KAAM,EAAG,KAAM,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,CAAE,EAGtDC,EAAYH,EACZI,EAAW,GAIjB,GAAIH,IAAgB,OAClB,QAASI,EAAOF,EAAWE,EAAO,EAAGA,GAAQD,EAAU,CACrD,IAAME,EAAO,KAAK,KAAKN,EAAWK,CAAI,EAChCE,EAAST,GAAkBO,EAAOJ,GAClCO,EAAST,EAAkBO,EAC7BzB,EACAC,EAEAyB,GAAUC,GACZ3B,EAAQiB,EAAiBO,EACzBvB,EAASD,EAAQoB,IAEjBnB,EAASiB,EAAkBO,EAC3BzB,EAAQC,EAASmB,GAEnB,IAAMQ,EAAO5B,EAAQC,EACjB2B,EAAOP,EAAK,OACdA,EAAO,CAAE,KAAAO,EAAM,MAAA5B,EAAO,OAAAC,EAAQ,KAAAwB,EAAM,KAAAD,CAAK,EAE7C,CAEF,OAAOH,CACT,EAEaQ,GAAgC,CAAC,CAC5C,YAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAxB,EACA,YAAAY,CACF,IAAoB,CAClB,IAAI7B,EAAe,EACfC,EAAgB,EAChBC,EAAgB,EAChBC,EAAiB,EACjBJ,EAAmC,GACnCD,EAAmB,EACnB4C,EAAkB,EAChBT,EAAO,KAAK,IAChB,KAAK,KAAK,KAAK,KAAMQ,GAASF,EAAcC,IAAkBX,EAAY,MAAQA,EAAY,OAAO,CAAC,EACtGZ,CACF,EACIR,EAAQ8B,EAAcN,EACtBvB,EAASD,GAASoB,EAAY,MAAQA,EAAY,QAClDnB,EAAS8B,IACX9B,EAAS8B,EACT/B,EAAQC,GAAUmB,EAAY,OAASA,EAAY,QAErD,IAAMK,EAAO,KAAK,MAAMM,EAAe9B,CAAM,EAM7C,GALAT,EAAgBS,EAChBV,EAAeS,EACfX,EAAmB,KAAK,IAAI2C,EAAOP,EAAOD,CAAI,EAC9CS,EAAkBD,GAASP,EAAOD,GAClClC,EAAmC2C,EAAkB,GAAKD,EAAQP,EAAOD,EACrElC,EAAkC,CACpC,IAAMkC,EAAO,KAAK,IAChB,KAAK,KAAK,KAAK,KAAMS,GAAmBH,EAAcC,IAAkBX,EAAY,MAAQA,EAAY,OAAO,CAAC,EAChHZ,CACF,EACIR,EAAQ8B,EAAcN,EACtBvB,EAASD,GAASoB,EAAY,MAAQA,EAAY,QAClDnB,EAAS8B,IACX9B,EAAS8B,EACT/B,EAAQC,GAAUmB,EAAY,OAASA,EAAY,QAErD1B,EAAiBO,EACjBR,EAAgBO,CAClB,CACA,MAAO,CACL,iBAAAX,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,CACF,EAEa4C,GAAiC,CAAC,CAC7C,YAAAJ,EACA,aAAAC,EACA,MAAAC,EACA,SAAAxB,EACA,YAAAY,CACF,IAAoB,CAClB,IAAI7B,EAAe,EACfC,EAAgB,EAChBC,EAAgB,EAChBC,EAAiB,EACjBJ,EAAmC,GACnCD,EAAmB,EACnB4C,EAAkB,EAChB,CAAE,MAAOE,EAAc,OAAQC,CAAc,EAAIpB,EACrDc,EACAC,EACA,KAAK,IAAIC,EAAOxB,CAAQ,EACxBY,EAAY,MACZA,EAAY,MACd,EAMA,GALA7B,EAAe4C,EACf3C,EAAgB4C,EAChB/C,EAAmB,KAAK,IAAI2C,EAAOxB,CAAQ,EAC3CyB,EAAkBD,EAAQxB,EAC1BlB,EAAmC2C,EAAkB,GAAKD,EAAQxB,EAC9DlB,EAAkC,CACpC,GAAM,CAAE,MAAO+C,EAAU,OAAQC,CAAU,EAAItB,EAC7Cc,EACAC,EACAE,EACAb,EAAY,MACZA,EAAY,MACd,EACA3B,EAAgB4C,EAChB3C,EAAiB4C,CACnB,CACA,MAAO,CACL,iBAAAjD,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,CACF,EAEaiD,GAAgC,CAAC,CAC5C,YAAAT,EACA,aAAAC,EACA,MAAAC,EACA,SAAAxB,EACA,YAAAY,CACF,IAAoB,CAClB,IAAI7B,EAAe,EACfC,EAAgB,EAChBC,EAAgB,EAChBC,EAAiB,EACjBJ,EAAmC,GACnCD,EAAmB,EACnB4C,EAAkB,EAChBR,EAAO,KAAK,IAChB,KAAK,KAAK,KAAK,KAAMO,GAASZ,EAAY,MAAQA,EAAY,SAAYU,EAAcC,EAAa,CAAC,EACtGvB,CACF,EACMP,EAAS8B,EAAeN,EACxBzB,EAAQC,GAAUmB,EAAY,MAAQA,EAAY,QAClDI,EAAO,KAAK,MAAMM,EAAc9B,CAAK,EAM3C,GALAT,EAAeS,EACfR,EAAgBS,EAChBZ,EAAmB,KAAK,IAAI2C,EAAOP,EAAOD,CAAI,EAC9CS,EAAkBD,GAASP,EAAOD,GAClClC,EAAmC2C,EAAkB,GAAKD,EAAQP,EAAOD,EACrElC,EAAkC,CACpC,IAAMmC,EAAO,KAAK,IAChB,KAAK,KAAK,KAAK,KAAMQ,GAAmBb,EAAY,MAAQA,EAAY,SAAYU,EAAcC,EAAa,CAAC,EAChHvB,CACF,EACMP,EAAS8B,EAAeN,EACxBzB,EAAQC,GAAUmB,EAAY,MAAQA,EAAY,QACxD1B,EAAiBO,EACjBR,EAAgBO,CAClB,CACA,MAAO,CACL,iBAAAX,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,CACF,EAEO,SAASkD,GAAqB,CACnC,MAAAR,EACA,YAAAF,EACA,aAAAC,EACA,aAAAU,EACA,YAAAC,EACA,YAAAC,EACA,YAAAvB,CACF,EAAuB,CACrB,IAAI7B,EAAe,EACfC,EAAgB,EAChBC,EAAgB,EAChBC,EAAiB,EACjBJ,EAAmC,GACnCD,EAAmB,EAEvB,GAAI2C,IAAU,EAEZ,MAAO,CACL,iBAAA3C,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,EAGF,GAAImD,GACD,CACC,iBAAApD,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,EAAI4C,GAA+B,CACjC,YAAAJ,EACA,aAAAC,EACA,MAAAC,EACA,SAAUS,EACV,YAAArB,CACF,CAAC,WACQsB,GACR,CACC,iBAAArD,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,EAAIiD,GAA8B,CAChC,YAAAT,EACA,aAAAC,EACA,MAAAC,EACA,SAAUU,EACV,YAAAtB,CACF,CAAC,WACQuB,GACR,CACC,iBAAAtD,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,EAAIuC,GAA8B,CAChC,YAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAUW,EACV,YAAAvB,CACF,CAAC,OACI,CACL,GAAM,CAAE,MAAApB,EAAO,OAAAC,CAAO,EAAIe,EAAYc,EAAaC,EAAcC,EAAOZ,EAAY,MAAOA,EAAY,MAAM,EAC7G7B,EAAeS,EACfR,EAAgBS,EAChBZ,EAAmB2C,CACrB,CACA,MAAO,CACL,iBAAA3C,EACA,aAAAE,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAJ,CACF,CACF,CASO,IAAMsD,EAA0B,CACrCC,EACAjC,EACAkC,EACAC,EAA2B,KACxB,CACH,GAAI,CAACF,GAAS,CAACjC,GAAU,CAACkC,EACxB,MAAO,CAAC,EAEV,IAAME,EAA6B,CAAC,EACpC,QAAWC,KAAQJ,EAkBjB,GAjBuBI,EAAK,aAAe,QAAaA,EAAK,YAAcrC,EAAOqC,EAAK,UAAU,EAE/FD,EAAU,KAAK,CAAE,KAAMC,CAAK,CAAC,EACpBA,EAAK,YAAcrC,EAAOqC,EAAK,UAAU,EAClDD,EAAU,KAAK,CAAE,MAAOpC,EAAOqC,EAAK,UAAU,EAAoB,KAAMA,CAAK,CAAC,EACpEF,GACVC,EAAU,KAAK,CAAE,KAAMC,CAAK,CAAC,EAG3BA,EAAK,gBAAgB,OAAS,GAChCA,EAAK,gBAAgB,QAAQC,GAAW,CACtC,IAAMrC,EAAQD,EAAOsC,CAAO,GACxBrC,GAAA,YAAAA,EAAO,QAAS,UAAWA,GAAA,YAAAA,EAAO,UAAW,WAC/CmC,EAAU,KAAK,CAAE,MAAAnC,EAAO,KAAAoC,CAAK,CAAC,CAElC,CAAC,EAECH,EAA0BG,CAAI,GAAKA,EAAK,gBAAgB,OAAS,EAAG,CACtE,IAAME,EAAqBF,EAAK,gBAAgB,KAAKG,GAAW,CAC9D,IAAMvC,EAAQD,EAAOwC,CAAO,EAC5B,OAAOvC,GAAA,YAAAA,EAAO,QAAS,UAAWA,GAAA,YAAAA,EAAO,UAAW,QACtD,CAAC,EAEGsC,GACFH,EAAU,KAAK,CAAE,MAAOpC,EAAOuC,CAAkB,EAA0B,KAAMF,CAAK,CAAC,CAE3F,CAEF,OAAOD,CACT,EDlZA,IAAMK,GAAW,CACf,YAAa,CACX,MAAO,EACP,OAAQ,CACV,CACF,EAQaC,GAAe,CAAC,CAC3B,MAAAC,EACA,aAAAC,EACA,YAAAC,EACA,YAAAC,EACA,0BAAAC,EAA4B,IAAM,GAClC,YAAAC,EAAcP,GAAS,YACvB,yBAAAQ,EAA2B,GAC3B,QAAAC,EAAU,CACZ,IAAyC,CACvC,GAAM,CAAE,MAAAC,EAAQ,EAAG,OAAAC,EAAS,EAAG,IAAAC,CAAI,EAAIC,GAAkB,EAGnDC,EAFQC,EAAmB,EAEqB,SAASC,EAAe,EACxEC,EAAkCC,EACtChB,EACAY,EACAR,EACAE,CACF,EACMW,EAAmBC,EAAQ,IAC3Bb,GAKG,CACL,MAHsBc,GAAmBJ,CAAc,GAG7B,EAC1B,OAAQ,CACV,EACC,CAACV,EAAaU,CAAc,CAAC,EAC1BK,EAAQL,EAAe,OACvB,CACJ,iBAAAM,EACA,aAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,iCAAAC,CACF,EAAIR,EACF,IACES,GAAqB,CACnB,MAAAP,EACA,YAAa,KAAK,MAAMZ,CAAK,EAC7B,aAAc,KAAK,MAAMC,CAAM,EAAI,KAAK,IAAIA,EAAQF,CAAO,EAC3D,aAAAN,EACA,YAAAE,EACA,YAAAD,EACA,YAAae,CACf,CAAC,EACH,CAACG,EAAOZ,EAAOC,EAAQR,EAAcE,EAAaD,EAAae,EAAkBV,CAAO,CAC1F,EAuBA,MAAO,CACL,eAvB4BW,EAC5B,IACEU,GAA6B,CAC3B,SAAUb,EACV,iBAAAM,EACA,YAAa,GACb,iCAAAK,EACA,aAAAJ,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,CACF,CAAC,EACH,CACEV,EACAM,EACAK,EACAJ,EACAC,EACAC,EACAC,CACF,CACF,EAGE,IAAAf,CACF,CACF,EEjKA,OAAgB,aAAAmB,OAAiB,QACjC,OAAS,wBAAAC,OAA4B,6BAY9B,SAASC,GAAoB,CAClC,QAAAC,EACA,SAAAC,EACA,IAAAC,CACF,EAIG,CACD,IAAMC,EAAQC,EAAmB,EACjCC,GACE,IACEF,EAAM,UAAUG,GAAS,CACvB,GAAI,CAACJ,EAAI,QACP,OAEF,IAAMK,EAASN,EAASK,CAAK,EAC7B,QAAWE,KAAOD,EAChBL,EAAI,QAAQ,MAAMM,CAAG,EAAID,EAAOC,CAAG,CAEvC,EAAGC,GAAqBT,CAAO,CAAC,EAClC,CAACC,EAAUC,EAAKC,EAAOH,CAAO,CAChC,CACF,CCpCA,OAAS,eAAAU,OAAmB,QAC5B,OACE,cAAAC,EACA,iBAAAC,GACA,iCAAAC,GACA,4BAAAC,GACA,qBAAAC,GACA,4BAAAC,OACK,6BAqCA,IAAMC,GAAa,CAACC,EAA+BC,IAAsC,CAC9F,IAAMC,EAAUC,EAAc,EACxBC,EAAsDC,EAAYC,EAAa,EAC/EC,EAAqBF,EAAYG,EAAwB,EAEzDC,EADcJ,EAAYK,EAAiB,EACbC,GAAgCC,GAC9DC,EAAqBR,EAAYI,CAAa,EAE9CK,EAA+C,CACnD,CAACC,EAAW,WAAW,EAAGR,EAAmB,mBAC/C,EACMS,EAAmD,CACvD,CAACD,EAAW,WAAW,EAAGX,EAAc,WAC1C,EAEIS,EAAmB,QACrBG,EAAWD,EAAW,UAAU,EAAIX,EAAc,WAClDU,EAAkBC,EAAW,UAAU,EAAIR,EAAmB,oBAE5DM,EAAmB,QACrBG,EAAWD,EAAW,UAAU,EAAIX,EAAc,WAClDU,EAAkBC,EAAW,UAAU,EAAIR,EAAmB,oBAGhE,IAAMU,EAAeC,GACZC,GAA2EC,EAAA,QAA3ED,GAA2E,UAA3E,CAAE,WAAAE,EAAY,SAAAC,CAAS,EAAoD,CAChF,GAAI,CACF,OAAQD,EAAY,CAClB,KAAKN,EAAW,WACd,MAAMb,EAAQ,iBAAiB,CAAE,SAAAoB,CAAS,CAAC,EAC3C,MACF,KAAKP,EAAW,WACd,MAAMb,EAAQ,iBAAiB,CAAE,SAAAoB,CAAS,CAAC,EAC3C,MACF,KAAKP,EAAW,YACd,MAAMb,EAAQ,qBAAqBoB,CAAQ,EAC3C,KACJ,CACF,OAASC,EAAK,CACZvB,EAAYuB,EAAc,eAAe,CAC3C,CACF,GACA,CAACvB,EAAaE,CAAO,CACvB,EAEA,MAAO,CACL,WAAAc,EACA,kBAAAF,EACA,aAAAG,CACF,CACF,EC/FA,OAAS,WAAAO,OAAe,QACxB,OAGE,2BAAAC,GACA,mBAAAC,GACA,eAAAC,GACA,qBAAAC,OACK,6BCMA,IAAMC,GAAgBC,GACvB,CAACA,GAAS,CAAC,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,EAC/C,CAAC,EAEHA,EAAM,OAAO,CAACC,EAAgCC,KAC9CA,EAAK,WAGLD,EAAIC,EAAK,QAAQ,IACpBD,EAAIC,EAAK,QAAQ,EAAI,CAAC,GAExBD,EAAIC,EAAK,QAAQ,EAAE,KAAKA,CAAI,GACrBD,GACN,CAAC,CAAC,EDRA,IAAME,GAAqB,IAAM,CACtC,IAAMC,EAAcC,EAAYC,EAAuB,EACjDC,EAAkBF,EAAYD,EAAcI,GAAcC,EAAiB,EAC3EC,EAAYL,EAAYM,EAAe,EACvCC,EAAsBC,GAAQ,IAAMC,GAAaP,CAAe,EAAG,CAACA,CAAe,CAAC,EAE1F,MAAO,CAAE,MADK,OAAO,KAAKK,CAAmB,EAC7B,oBAAAA,EAAqB,UAAAF,EAAW,YAAAN,CAAY,CAC9D,EE1BA,OAAS,kBAAAW,GAAgB,wBAAAC,GAAsB,mBAAAC,OAAuB,6BAa/D,IAAMC,GAAwB,IAAmC,CACtE,IAAMC,EAAYC,EAAYC,EAAoB,EAC5CC,EAAOF,EAAYG,EAAe,EAClCC,EAAMJ,EAAYK,EAAc,EAEhCC,EAAsBP,EAAU,OAAO,QACvCQ,EAAuBR,EAAU,QAAQ,QACzCS,EAAmBT,EAAU,IAAI,QACjCU,EAAgBL,EAAI,SAAWF,EAAK,QACpCQ,EAAgBJ,GAAuBC,GAAwBC,EAErE,MAAO,CACL,oBAAAF,EACA,qBAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,aAAcL,EAAI,QAClB,cAAeF,EAAK,QACpB,cAAAQ,CACF,CACF,ECjCA,OAAS,eAAAC,GAAa,aAAAC,GAAW,YAAAC,OAAgB,QACjD,OAAS,wBAAAC,OAA4B,6BAuB9B,IAAMC,GAAmB,IAA8B,CAC5D,IAAMC,EAAeC,EAAoBC,GAAqB,KAAK,EAC7D,CAACC,EAAOC,CAAQ,EAAIC,GAAS,EAAE,EAC/BC,EAAUC,EAAc,EAExBC,EAAeC,GAAY,IAAYC,EAAA,wBAC3C,MAAMJ,EAAQ,aAAa,CAC7B,GAAG,CAACA,CAAO,CAAC,EAEZ,OAAAK,GAAU,IAAM,EACVX,GAAA,YAAAA,EAAc,KAAK,QAAS,MAC9BI,EAASJ,GAAA,YAAAA,EAAc,KAAK,OAAO,CAEvC,EAAG,CAACA,CAAY,CAAC,EAEV,CAAE,MAAAG,EAAO,aAAAK,EAAc,WAAY,IAAMJ,EAAS,EAAE,CAAE,CAC/D,ECxCA,OAAS,eAAAQ,GAAa,aAAAC,OAAiB,QACvC,OAAS,wBAAAC,OAAoD,6BA0D7D,IAAMC,GAAgB,CAAIC,EAASC,IAAmBA,EAAO,KAAK,UAAUD,GAAQ,EAAE,EAAKA,EAO9EE,GAAiB,CAAI,CAChC,KAAAC,EACA,KAAAF,EAAO,GACP,QAAAG,EACA,YAAAC,EAAcC,CAChB,IAAuD,CACrD,IAAMC,EAAUC,EAAc,EACxBC,EAAgBC,EAA2B,EAEjD,OAAAC,GAAU,IAAM,CAEdJ,EAAQ,mBAAmB,CAACJ,CAAI,CAAC,CACnC,EAAG,CAACI,EAASJ,CAAI,CAAC,EAGlBQ,GAAU,IACHF,EAGeA,EAAc,eAAeG,GAAgB,CAC/D,IAAMC,EAAMD,EAAa,KACzB,GAAIC,GAAOA,EAAI,OAASV,EACtB,GAAI,CACF,IAAMH,EAAOC,EAAO,KAAK,MAAMY,EAAI,OAAO,EAAIA,EAAI,QAClDT,GAAA,MAAAA,EAAUJ,EACZ,OAASc,EAAK,CACZT,EAAYS,EAAc,mBAAmB,CAC/C,CAEJ,EAAGC,GAAqB,WAAW,EAZjC,OAcD,CAACN,EAAeN,EAAMF,EAAMG,EAASC,CAAW,CAAC,EAsB7C,CAAE,UAnBSW,GAChB,CAAOhB,EAASiB,IAA6BC,EAAA,wBAC3C,GAAI,CACF,IAAMC,EAAUpB,GAAiBC,EAAMC,CAAI,EACvCgB,GAAY,MAAM,QAAQA,GAAA,YAAAA,EAAU,SAAS,EAC/C,MAAMV,EAAQ,iBAAiBY,EAASF,EAAS,UAAWd,CAAI,EACvD,OAAOc,GAAA,YAAAA,EAAU,SAAW,SACrC,MAAMV,EAAQ,kBAAkBY,EAASF,EAAS,OAAQd,CAAI,EAE9D,MAAMI,EAAQ,qBAAqBY,EAAShB,CAAI,EAElDC,GAAA,MAAAA,EAAUJ,EACZ,OAASc,EAAK,CACZT,EAAYS,EAAc,iBAAiB,CAC7C,CACF,GACA,CAACP,EAASF,EAAaD,EAASD,EAAMF,CAAI,CAC5C,CAEmB,CACrB,ECxHA,OAGE,4BAAAmB,GACA,2BAAAC,GACA,mBAAAC,GACA,sBAAAC,GACA,eAAAC,GACA,qBAAAC,OACK,6BAwCA,IAAMC,GAAmBC,GAAmC,CAjDnE,IAAAC,EAkDE,IAAMC,EAAcC,EAAYC,EAAuB,EACjDC,EAAYF,EAAYG,EAAe,EACvCC,EAAiBJ,EAAYK,EAAwB,EACvDC,EAAkBN,EAAYD,EAAcQ,GAAcC,EAAiB,EACzEC,EAAwB,MAAM,KAAK,IAAI,IAAIH,EAAgB,IAAII,GAAQA,EAAK,QAAQ,CAAC,CAAC,EACtFC,EAAeC,EAAmB,EASxC,IARId,EAAAD,GAAA,YAAAA,EAAQ,WAAR,MAAAC,EAAkB,eACpBQ,EAAkBA,EAAgB,OAAOI,GAChCC,EAAa,SAASE,GAAmBH,EAAK,EAAE,CAAC,EAAE,YAC3D,GAECb,GAAA,MAAAA,EAAQ,MAAQO,EAAe,SAASP,EAAO,IAAI,IACrDS,EAAkBA,EAAgB,OAAOI,GAAQA,EAAK,WAAab,EAAO,IAAI,GAE5EA,GAAA,MAAAA,EAAQ,OAAQ,CAClB,IAAMiB,EAASjB,EAAO,OAAO,YAAY,EACzCS,EAAkBA,EAAgB,OAChCI,GAAK,CAnEX,IAAAZ,EAmEc,QAAAA,EAAAY,EAAK,WAAL,YAAAZ,EAAe,cAAc,SAASgB,KAAWJ,EAAK,KAAK,YAAY,EAAE,SAASI,CAAM,EAClG,CACF,CACA,MAAO,CAAE,aAAcR,EAAiB,YAAAP,EAAa,UAAAG,EAAW,sBAAAO,CAAsB,CACxF,ECvEA,OAAS,eAAAM,EAAa,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAkClD,IAAMC,GAAiBC,GAAkD,CAC9E,IAAMC,EAAYC,GAAiC,IAAI,EACjD,CAACC,EAASC,CAAU,EAAIC,GAAS,EAAK,EAEtCC,EAAyBC,EAAY,IAAM,CAC/C,MAAM,IAAI,MAAM,8BAA8B,CAChD,EAAG,CAAC,CAAC,EACCC,EAAaN,GAAO,EAAK,EACzB,CAAE,iBAAAO,EAAkB,kBAAAC,CAAkB,EAAIC,EAAeL,CAAsB,EAE/EM,EAAoBC,EAAYJ,CAAgB,EAEhDK,EAAYP,EAAY,IAAYQ,EAAA,wBACpCN,IACF,MAAMC,GAAA,YAAAA,IACNT,EAAU,QAAU,KAExB,GAAG,CAACQ,EAAkBC,CAAiB,CAAC,EAElCM,EAAaT,EACVU,GAAkBF,EAAA,wBACvB,GAAI,CAAAP,EAAW,QAGf,IAAI,CAACS,EACH,MAAM,IAAI,MAAM,eAAe,EAEjC,GAAIR,EACF,MAAM,IAAI,MAAM,yBAAyB,EAE3C,GAAI,CAACR,EAAU,QACb,MAAM,IAAI,MAAM,sDAAsD,EAExEA,EAAU,QAAQ,IAAMgB,EACxBT,EAAW,QAAU,GACrBJ,EAAW,EAAI,EACf,MAAMM,GAAA,YAAAA,EAAoB,CACxB,gBAAiBQ,EACjB,YAAajB,EAAU,QACvB,iBAAkBiB,CACpB,GACF,GACA,CAACT,EAAkBC,CAAiB,CACtC,EAEA,OAAAS,GAAU,IAAM,CACVP,GAAqB,CAACH,IACxBT,GAAA,MAAAA,IACIC,EAAU,UACZA,EAAU,QAAQ,IAAM,IAE1BO,EAAW,QAAU,GACrBJ,EAAW,EAAK,EAEpB,EAAG,CAACK,EAAkBG,EAAmBZ,CAAW,CAAC,EAE9C,CACL,gBAAiBgB,EACjB,eAAgBF,EAChB,UAAAb,EACA,uBAAwBE,CAC1B,CACF,EChGA,OAAS,eAAAiB,EAAa,aAAAC,GAAW,UAAAC,GAAQ,YAAAC,OAAgB,QAiClD,IAAMC,GAAeC,GAAgD,CAC1E,IAAMC,EAAYC,GAAiC,IAAI,EACjD,CAACC,EAASC,CAAU,EAAIC,GAAS,EAAK,EAEtCC,EAAyBC,EAAY,IAAM,CAC/C,MAAM,IAAI,MAAM,8BAA8B,CAChD,EAAG,CAAC,CAAC,EACCC,EAAaN,GAAO,EAAK,EACzB,CAAE,iBAAAO,EAAkB,kBAAAC,CAAkB,EAAIC,EAAeL,CAAsB,EAE/EM,EAAoBC,EAAYJ,CAAgB,EAEhDK,EAAsBP,EAAaQ,GAAgB,CA7C3D,IAAAC,EA8CQf,EAAU,WACZe,EAAAf,EAAU,QAAQ,gBAAlB,MAAAe,EAAiC,YAC/B,CACE,MAAO,EACP,KAAAD,CACF,EACA,KAGN,EAAG,CAAC,CAAC,EAECE,EAAYV,EAAY,IAAYW,EAAA,wBACpCT,IACF,MAAMC,GAAA,YAAAA,IAEV,GAAG,CAACD,EAAkBC,CAAiB,CAAC,EAElCS,EAAaZ,EAEVa,GAAyBF,EAAA,wBAC9B,GAAIV,EAAW,QACb,OAEF,GAAI,CAACY,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,GAAIX,EACF,MAAM,IAAI,MAAM,yBAAyB,EAE3C,GAAI,CAACR,EAAU,QACb,MAAM,IAAI,MAAM,sDAAsD,EAGxEA,EAAU,QAAQ,IAAM,GAAGoB,EAAY,GAAG,OAAOD,GAAU,SAAW,SAASA,CAAK,GAAK,EAAE,GAC3FnB,EAAU,QAAQ,OAAS,IAAM,CAC/B,sBAAsB,IAAM,CACtBmB,aAAiB,MACnBN,EAAoBM,CAAK,CAE7B,CAAC,CACH,EACAZ,EAAW,QAAU,GACrBJ,EAAW,EAAI,EACf,IAAMkB,EAAiB,OAAO,OAAS,OAAO,IAC9C,MAAMZ,GAAA,YAAAA,EAAoB,CACxB,gBAAiBa,GAAmB,CAACD,EACrC,YAAarB,EAAU,QACvB,iBAAkBsB,GAAmB,CAACD,CACxC,EACF,GACA,CAACb,EAAkBK,EAAqBJ,CAAiB,CAC3D,EAEA,OAAAc,GAAU,IAAM,CACVZ,GAAqB,CAACH,IACxBT,GAAA,MAAAA,IACIC,EAAU,SACZA,EAAU,QAAQ,gBAAgB,KAAK,EAEzCO,EAAW,QAAU,GACrBJ,EAAW,EAAK,EAEpB,EAAG,CAACK,EAAkBG,EAAmBZ,CAAW,CAAC,EAE9C,CACL,cAAemB,EACf,aAAcF,EACd,UAAAhB,EACA,qBAAsBE,CACxB,CACF,ECpHA,OAAS,UAAAsB,GAAQ,YAAAC,OAAgB,QAsBjC,IAAMC,GAAgBC,GACbA,EAAM,OAAgC,CAACC,EAAKC,KACjDD,EAAIC,EAAK,EAAE,EAAIA,EACRD,GACN,CAAC,CAAC,EAGME,GAA4BC,GAAwC,CAC/E,IAAMC,EAAUC,EAAc,EACxBC,EAAWC,GAAOH,EAAQ,oBAAoBD,CAAO,CAAC,EACtD,CAACJ,EAAOS,CAAQ,EAAIC,GAAkC,CAAC,CAAC,EACxD,CAACC,EAAOC,CAAQ,EAAIF,GAAS,CAAC,EAEpC,MAAO,CACL,UAAW,IACTH,EAAS,QAAQ,UAAU,EAAE,KAAKP,GAAS,CACzCS,EAASV,GAAaC,CAAK,CAAC,EAC5BY,EAASL,EAAS,QAAQ,SAAS,CAAC,CACtC,CAAC,EACH,cAAe,IACbA,EAAS,QAAQ,KAAK,EAAE,KAAKP,GAAS,CACpCS,EAASI,GACAC,IAAA,GACFD,GACAd,GAAaC,CAAK,EAExB,EACDY,EAASL,EAAS,QAAQ,SAAS,CAAC,CACtC,CAAC,EACH,QAAS,IAAMA,EAAS,QAAQ,QAAQ,EACxC,MAAAI,EACA,MAAO,OAAO,OAAOX,CAAK,CAC5B,CACF,ECvDA,OAAS,eAAAe,GAAa,aAAAC,GAAW,YAAAC,OAAgB,QACjD,OACE,iBAAAC,GACA,2BAAAC,GACA,mBAAAC,GACA,qBAAAC,GACA,oBAAAC,OACK,6BAGA,IAAMC,GAAgB,CAACC,EAAW,KAAU,CAVnD,IAAAC,EAAAC,EAWE,IAAMC,EAAcC,EAAYC,EAAuB,EACjDC,GAAkBL,EAAAG,EAAYG,EAAe,IAA3B,YAAAN,EAA8B,eAChDO,EAAaJ,EAAYK,EAAgB,EACzCC,EAAaN,EAAYO,GAAc,sBAAsB,CAAC,EAC9DC,EAAO,CAAC,EAACJ,GAAA,MAAAA,EAAY,MACrBK,GAAUL,GAAA,YAAAA,EAAY,SAAUF,EAChCQ,EAAUC,EAAc,EACxB,CAACC,EAAWC,CAAY,EAAIC,GAAS,EAAK,EAC1CC,GAAcjB,EAAAE,EAAYgB,EAAiB,IAA7B,YAAAlB,EAAgC,WAC9CmB,EAAU,CAAC,EAACF,GAAA,MAAAA,EAAa,SAAS,UAExCG,GAAU,IAAM,CACVnB,GACFc,EAAaH,EAAQ,oBAAoB,WAAW,SAAS,CAEjE,EAAG,CAACX,EAAaW,CAAO,CAAC,EAEzB,IAAMS,EAASC,GAAY,IAAYC,EAAA,wBACjC,CAACtB,GAAe,CAACkB,IAIjBT,EACFC,IAAY,MAAMC,EAAQ,oBAAoB,WAAW,MAAM,GAE/D,MAAMA,EAAQ,oBAAoB,WAAW,KAAK,EAEtD,GAAG,CAACA,EAASD,EAASQ,EAAST,EAAMT,CAAW,CAAC,EAEjD,MAAO,CACL,KAAAS,EACA,MAAOJ,GAAA,YAAAA,EAAY,MACnB,SAAUA,GAAA,YAAAA,EAAY,KACtB,QAAAK,EACA,QAAAQ,EACA,cAAeX,GAAcV,EAC7B,OAAQgB,GAAaK,EAAUE,EAAS,MAC1C,CACF,EChDA,OAAS,eAAAG,OAAmB,QAC5B,OAAS,2BAAAC,OAA+B,6BAIjC,IAAMC,GAAuB,IAAM,CACxC,IAAMC,EAAeC,EAAmB,EAClCC,EAAoBC,GAAY,IAAYC,EAAA,wBAEhD,GAAI,EAAE,iBAAkB,SAAW,UAAU,UAAW,CACtD,QAAQ,MAAM,wEAAwE,EAEtF,MACF,CACA,IAAI,uCAAc,cAAe,YAAa,uCAAc,cAAe,SACzE,OAEF,IAAMC,EAAcL,EAAa,UAAgBM,GAAQF,EAAA,wBACnDE,GAAQA,IAAS,wBACnB,MAAM,aAAa,kBAAkB,EACrCD,GAAA,MAAAA,IAEJ,GAAGE,EAAuB,CAC5B,GAAG,CAACP,CAAY,CAAC,EAEXQ,EAAmBL,GAAY,CAACM,EAAeC,IAAkC,CAErF,GAAI,EAAE,iBAAkB,QAAS,CAC/B,QAAQ,MAAM,qEAAqE,EACnF,MACF,CACA,IACE,uCAAc,cAAe,UAK5B,SAAS,kBAAoB,WAAa,SAAS,SAAS,EAE7D,OAEF,IAAMC,EAAe,IAAI,aAAaF,EAAOC,CAAO,EAE9CE,EAAoB,IAAM,CAC1B,SAAS,kBAAoB,WAAa,SAAS,SAAS,IAC9DD,GAAA,MAAAA,EAAc,QACd,SAAS,oBAAoB,mBAAoBC,CAAiB,EAEtE,EACA,SAAS,iBAAiB,mBAAoBA,CAAiB,CACjE,EAAG,CAAC,CAAC,EAEL,MAAO,CAAE,kBAAAV,EAAmB,iBAAAM,CAAiB,CAC/C,ECtDA,OAAS,aAAAK,OAAiB,QAC1B,OAAS,wBAAAC,OAA4B,6BAuB9B,IAAMC,GAAgB,CAAC,CAAE,aAAAC,EAAc,YAAAC,EAAcC,CAAgB,IAA6B,CACvG,IAAMC,EAAO,iBACPC,EAAgBC,EAA2B,EAGjDC,GAAU,IACHF,EAGeA,EAAc,eAAeG,GAAgB,CAC/D,IAAMC,EAAMD,EAAa,KACzB,GAAIC,GAAOA,EAAI,OAASL,EACtB,GAAI,CAEF,IAAMM,EADU,KAAK,MAAMD,EAAI,OAAO,EACjB,QACrBR,GAAA,MAAAA,EAAeS,EACjB,OAASC,EAAK,CACZT,EAAYS,EAAc,oBAAoB,CAChD,CAEJ,EAAGC,GAAqB,WAAW,EAbjC,OAeD,CAACP,EAAeD,EAAMF,EAAaD,CAAY,CAAC,CAGrD,ECjDA,OAAS,gBAAAY,EAAc,4BAAAC,OAAgC,6BAGhD,IAAMC,GAAe,IAAM,CAChC,IAAMC,EAAaC,EAAc,EAC3B,CAAE,UAAAC,CAAU,EAAIC,EAAYC,EAAwB,EACpDC,EAAqBH,IAAcI,EAAa,MAGtD,MAAO,CAAE,gBAFe,IAASC,EAAA,wBAC/B,aAAMP,EAAW,iBAAiB,CAAE,UAAWK,EAAqBC,EAAa,MAAQA,EAAa,KAAM,CAAC,IACrF,mBAAAD,CAAmB,CAC/C,EC6CA,WAAc",
6
6
  "names": ["React", "createContext", "useContext", "useEffect", "useMemo", "useState", "create", "HMSReactiveStore", "useContext", "shallow", "HMSLogger", "tag", "data", "level", "hooksErrorMessage", "makeHMSStoreHook", "hmsContext", "selector", "equalityFn", "shallow", "HMSLogger", "HMSContextConsumer", "useContext", "useStore", "makeHMSStatsStoreHook", "isBrowser", "HMSContext", "createContext", "HMSRoomProvider", "children", "actions", "store", "notifications", "stats", "isHMSStatsOn", "leaveOnUnload", "providerProps", "useMemo", "errFn", "create", "__spreadProps", "__spreadValues", "hmsReactiveStore", "HMSReactiveStore", "React", "useEffect", "isBrowser", "unloadCallback", "useHMSStore", "makeHMSStoreHook", "useHMSStatsStore", "makeHMSStatsStoreHook", "useHMSVanillaStore", "HMSContextConsumer", "useContext", "hooksErrorMessage", "useHMSVanillaNotifications", "useHMSActions", "useHMSNotifications", "type", "notification", "setNotification", "useState", "useCallback", "useMemo", "HMSRoomState", "selectIsConnectedToRoom", "selectRoomState", "useEffect", "useRef", "parsedUserAgent", "TAG", "logErrorHandler", "err", "method", "HMSLogger", "throwErrorHandler", "usePrevious", "state", "ref", "useRef", "useEffect", "chromiumBasedBrowsers", "isChromiumBased", "value", "_a", "_b", "parsedUserAgent", "pdfIframeURL", "usePreviewJoin", "name", "token", "metadata", "handleError", "logErrorHandler", "initEndpoint", "initialSettings", "captureNetworkQualityInPreview", "asRole", "autoManageVideo", "autoManageWakeLock", "iceServers", "actions", "useHMSActions", "roomState", "useHMSStore", "selectRoomState", "isConnected", "selectIsConnectedToRoom", "enableJoin", "HMSRoomState", "config", "useMemo", "preview", "useCallback", "__async", "err", "join", "useCallback", "selectIsAllowedToPreviewMedia", "selectIsAllowedToPublish", "selectIsInPreview", "selectIsLocalAudioEnabled", "selectIsLocalVideoEnabled", "useAVToggle", "handleError", "logErrorHandler", "isLocalAudioEnabled", "useHMSStore", "selectIsLocalAudioEnabled", "isLocalVideoEnabled", "selectIsLocalVideoEnabled", "selectAllowed", "selectIsInPreview", "selectIsAllowedToPreviewMedia", "selectIsAllowedToPublish", "isAllowedToPublish", "actions", "useHMSActions", "toggleAudio", "useCallback", "__async", "err", "toggleVideo", "useCallback", "useEffect", "useRef", "selectVideoTrackByID", "useVideo", "trackId", "attach", "actions", "useHMSActions", "videoRef", "useRef", "track", "useHMSStore", "selectVideoTrackByID", "prevTrackId", "setRefs", "useCallback", "node", "useEffect", "__async", "HMSLogger", "err", "useCallback", "selectIsLocalScreenShared", "selectPeerScreenSharing", "selectScreenSharesByPeerId", "useScreenShare", "handleError", "logErrorHandler", "_a", "_b", "actions", "useHMSActions", "amIScreenSharing", "useHMSStore", "selectIsLocalScreenShared", "screenSharePeer", "selectPeerScreenSharing", "screenShare", "selectScreenSharesByPeerId", "toggleScreenShare", "useCallback", "config", "__async", "err", "useCallback", "selectAudioTrackByID", "selectAudioTrackVolume", "selectPermissions", "selectVideoTrackByID", "toggleTrackEnabled", "actions", "track", "handleError", "__async", "err", "useRemoteAVToggle", "audioTrackId", "videoTrackId", "logErrorHandler", "useHMSActions", "audioTrack", "useHMSStore", "selectAudioTrackByID", "videoTrack", "selectVideoTrackByID", "volume", "selectAudioTrackVolume", "permissions", "selectPermissions", "canToggleVideo", "canToggleAudio", "toggleAudio", "useCallback", "toggleVideo", "setVolume", "useMemo", "useResizeDetector", "selectTracksMap", "chunk", "elements", "chunkSize", "onlyOnePage", "resultArray", "tile", "index", "chunkIndex", "chunkElements", "tilesInFirstPage", "isLastPageDifferentFromFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "chunks", "ch", "page", "element", "isLastPage", "width", "height", "__spreadProps", "__spreadValues", "mode", "array", "modeMap", "maxEl", "maxCount", "i", "el", "getModeAspectRatio", "tracks", "track", "_a", "_b", "largestRect", "containerWidth", "containerHeight", "numRects", "aspectRatio", "best", "startCols", "colDelta", "cols", "rows", "hScale", "vScale", "area", "getTileSizesWithColConstraint", "parentWidth", "parentHeight", "count", "tilesinLastPage", "getTileSizesWithPageConstraint", "initialWidth", "initialHeight", "remWidth", "remHeight", "getTileSizesWithRowConstraint", "calculateLayoutSizes", "maxTileCount", "maxRowCount", "maxColCount", "getVideoTracksFromPeers", "peers", "includeScreenShareForPeer", "filterNonPublishingPeers", "peerTiles", "peer", "trackId", "screenShareTrackID", "trackID", "DEFAULTS", "useVideoList", "peers", "maxTileCount", "maxColCount", "maxRowCount", "includeScreenShareForPeer", "aspectRatio", "filterNonPublishingPeers", "offsetY", "width", "height", "ref", "useResizeDetector", "tracksMap", "useHMSVanillaStore", "selectTracksMap", "tracksWithPeer", "getVideoTracksFromPeers", "finalAspectRatio", "useMemo", "getModeAspectRatio", "count", "tilesInFirstPage", "defaultWidth", "defaultHeight", "lastPageWidth", "lastPageHeight", "isLastPageDifferentFromFirstPage", "calculateLayoutSizes", "chunkElements", "useEffect", "selectTrackAudioByID", "useAudioLevelStyles", "trackId", "getStyle", "ref", "store", "useHMSVanillaStore", "useEffect", "level", "styles", "key", "selectTrackAudioByID", "useCallback", "DeviceType", "selectDevices", "selectIsAllowedToPreviewMedia", "selectIsAllowedToPublish", "selectIsInPreview", "selectLocalMediaSettings", "useDevices", "handleError", "logErrorHandler", "actions", "useHMSActions", "sdkAllDevices", "useHMSStore", "selectDevices", "sdkSelectedDevices", "selectLocalMediaSettings", "selectAllowed", "selectIsInPreview", "selectIsAllowedToPreviewMedia", "selectIsAllowedToPublish", "isAllowedToPublish", "selectedDeviceIDs", "DeviceType", "allDevices", "updateDevice", "useCallback", "_0", "__async", "deviceType", "deviceId", "err", "useMemo", "selectIsConnectedToRoom", "selectPeerCount", "selectPeers", "selectRemotePeers", "groupByRoles", "peers", "res", "peer", "useParticipantList", "isConnected", "useHMSStore", "selectIsConnectedToRoom", "participantList", "selectPeers", "selectRemotePeers", "peerCount", "selectPeerCount", "participantsByRoles", "useMemo", "groupByRoles", "selectHLSState", "selectRecordingState", "selectRTMPState", "useRecordingStreaming", "recording", "useHMSStore", "selectRecordingState", "rtmp", "selectRTMPState", "hls", "selectHLSState", "isServerRecordingOn", "isBrowserRecordingOn", "isHLSRecordingOn", "isStreamingOn", "isRecordingOn", "useCallback", "useEffect", "useState", "HMSNotificationTypes", "useAutoplayError", "notification", "useHMSNotifications", "HMSNotificationTypes", "error", "setError", "useState", "actions", "useHMSActions", "unblockAudio", "useCallback", "__async", "useEffect", "useCallback", "useEffect", "HMSNotificationTypes", "stringifyData", "data", "json", "useCustomEvent", "type", "onEvent", "handleError", "logErrorHandler", "actions", "useHMSActions", "notifications", "useHMSVanillaNotifications", "useEffect", "notification", "msg", "err", "HMSNotificationTypes", "useCallback", "receiver", "__async", "dataStr", "selectAvailableRoleNames", "selectIsConnectedToRoom", "selectPeerCount", "selectPeerMetadata", "selectPeers", "selectRemotePeers", "useParticipants", "params", "_a", "isConnected", "useHMSStore", "selectIsConnectedToRoom", "peerCount", "selectPeerCount", "availableRoles", "selectAvailableRoleNames", "participantList", "selectPeers", "selectRemotePeers", "rolesWithParticipants", "peer", "vanillaStore", "useHMSVanillaStore", "selectPeerMetadata", "search", "useCallback", "useEffect", "useRef", "useState", "useEmbedShare", "resetConfig", "iframeRef", "useRef", "sharing", "setSharing", "useState", "handleScreenShareError", "useCallback", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "stopShare", "__async", "startShare", "value", "isChromiumBased", "useEffect", "useCallback", "useEffect", "useRef", "useState", "usePDFShare", "resetConfig", "iframeRef", "useRef", "sharing", "setSharing", "useState", "handleScreenShareError", "useCallback", "inProgress", "amIScreenSharing", "toggleScreenShare", "useScreenShare", "previouslySharing", "usePrevious", "sendDataToPDFIframe", "file", "_a", "stopShare", "__async", "startShare", "value", "pdfIframeURL", "isInsideIframe", "isChromiumBased", "useEffect", "useRef", "useState", "processPeers", "peers", "acc", "peer", "usePaginatedParticipants", "options", "actions", "useHMSActions", "iterator", "useRef", "setPeers", "useState", "total", "setTotal", "prevPeers", "__spreadValues", "useCallback", "useEffect", "useState", "selectAppData", "selectIsConnectedToRoom", "selectLocalPeer", "selectPermissions", "selectWhiteboard", "useWhiteboard", "isMobile", "_a", "_b", "isConnected", "useHMSStore", "selectIsConnectedToRoom", "localPeerUserId", "selectLocalPeer", "whiteboard", "selectWhiteboard", "isHeadless", "selectAppData", "open", "isOwner", "actions", "useHMSActions", "isEnabled", "setIsEnabled", "useState", "permissions", "selectPermissions", "isAdmin", "useEffect", "toggle", "useCallback", "__async", "useCallback", "selectLocalPeerRoleName", "useAwayNotifications", "vanillaStore", "useHMSVanillaStore", "requestPermission", "useCallback", "__async", "unsubscribe", "role", "selectLocalPeerRoleName", "showNotification", "title", "options", "notification", "closeNotification", "useEffect", "HMSNotificationTypes", "useTranscript", "onTranscript", "handleError", "logErrorHandler", "type", "notifications", "useHMSVanillaNotifications", "useEffect", "notification", "msg", "data", "err", "HMSNotificationTypes", "HMSAudioMode", "selectLocalMediaSettings", "useAudioMode", "hmsActions", "useHMSActions", "audioMode", "useHMSStore", "selectLocalMediaSettings", "isMusicModeEnabled", "HMSAudioMode", "__async"]
7
7
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
7
- "version": "0.11.3-alpha.6",
7
+ "version": "0.11.3-alpha.8",
8
8
  "author": "100ms",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -41,9 +41,9 @@
41
41
  "react": ">=16.8 <19.0.0"
42
42
  },
43
43
  "dependencies": {
44
- "@100mslive/hms-video-store": "^0.13.3-alpha.6",
44
+ "@100mslive/hms-video-store": "0.13.3-alpha.8",
45
45
  "react-resize-detector": "^7.0.0",
46
46
  "zustand": "^3.6.2"
47
47
  },
48
- "gitHead": "57bd13f805356a53228e413cbb350c7e9875d0d8"
48
+ "gitHead": "ce778f84bd26fe6c451dbdde03ecffc1f3c83998"
49
49
  }