voicebot-react-native-expo
Version:
This is a voicebot-react-native package of Kipps AI voice bot for React Native Expo
3 lines (2 loc) • 18.5 kB
JavaScript
;const l=require("./shared-D_Ks7MZc.js"),h=require("livekit-client"),H=require("react");function X(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,s.get?s:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const o=X(H),$=e=>{const n=o.useRef(e);return o.useEffect(()=>{n.current=e}),n};function Y(e,n){const t=Z(),s=$(n);return o.useLayoutEffect(()=>{let r=!1;const i=e.current;if(!i)return;function c(a,u){r||s.current(a,u)}return t==null||t.subscribe(i,c),()=>{r=!0,t==null||t.unsubscribe(i,c)}},[e.current,t,s]),t==null?void 0:t.observer}function K(){let e=!1,n=[];const t=new Map;if(typeof window>"u")return;const s=new ResizeObserver((r,i)=>{n=n.concat(r),e||window.requestAnimationFrame(()=>{const c=new Set;for(let a=0;a<n.length;a++){if(c.has(n[a].target))continue;c.add(n[a].target);const u=t.get(n[a].target);u==null||u.forEach(d=>d(n[a],i))}n=[],e=!1}),e=!0});return{observer:s,subscribe(r,i){s.observe(r);const c=t.get(r)??[];c.push(i),t.set(r,c)},unsubscribe(r,i){const c=t.get(r)??[];if(c.length===1){s.unobserve(r),t.delete(r);return}const a=c.indexOf(i);a!==-1&&c.splice(a,1),t.set(r,c)}}}let A;const Z=()=>A||(A=K()),_=e=>{const[n,t]=o.useState({width:0,height:0});o.useLayoutEffect(()=>{if(e.current){const{width:r,height:i}=e.current.getBoundingClientRect();t({width:r,height:i})}},[e.current]);const s=o.useCallback(r=>t(r.contentRect),[]);return Y(e,s),n};function y(e,n,t=!0){const[s,r]=o.useState(n);return o.useEffect(()=>{if(t&&r(n),typeof window>"u"||!e)return;const i=e.subscribe(r);return()=>i.unsubscribe()},[e,t]),s}function V(e,n){if(n.msg==="show_chat")return{...e,showChat:!0,unreadMessages:0};if(n.msg==="hide_chat")return{...e,showChat:!1};if(n.msg==="toggle_chat"){const t={...e,showChat:!e.showChat};return t.showChat===!0&&(t.unreadMessages=0),t}else return n.msg==="unread_msg"?{...e,unreadMessages:n.count}:n.msg==="toggle_settings"?{...e,showSettings:!e.showSettings}:{...e}}function q(e,n){return n.msg==="set_pin"?[n.trackReference]:n.msg==="clear_pin"?[]:{...e}}const D=o.createContext(void 0);function U(){const e=o.useContext(D);if(!e)throw Error("Tried to access LayoutContext context outside a LayoutContextProvider provider.");return e}function z(e){const n=L();if(e??(e=n),!e)throw Error("Tried to access LayoutContext context outside a LayoutContextProvider provider.");return e}function ee(){const[e,n]=o.useReducer(q,l.PIN_DEFAULT_STATE),[t,s]=o.useReducer(V,l.WIDGET_DEFAULT_STATE);return{pin:{dispatch:n,state:e},widget:{dispatch:s,state:t}}}function te(e){const[n,t]=o.useReducer(q,l.PIN_DEFAULT_STATE),[s,r]=o.useReducer(V,l.WIDGET_DEFAULT_STATE);return e??{pin:{dispatch:t,state:n},widget:{dispatch:r,state:s}}}function L(){return o.useContext(D)}const x=o.createContext(void 0);function ne(){const e=o.useContext(x);if(!e)throw Error("tried to access track context outside of track context provider");return e}function I(){return o.useContext(x)}function w(e){const n=I(),t=e??n;if(!t)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return t}const F=o.createContext(void 0);function se(){const e=o.useContext(F);if(!e)throw Error("tried to access participant context outside of participant context provider");return e}function B(){return o.useContext(F)}function T(e){const n=B(),t=I(),s=e??n??(t==null?void 0:t.participant);if(!s)throw new Error("No participant provided, make sure you are inside a participant context or pass the participant explicitly");return s}function W(e){var n,t,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var r=e.length;for(n=0;n<r;n++)e[n]&&(t=W(e[n]))&&(s&&(s+=" "),s+=t)}else for(t in e)e[t]&&(s&&(s+=" "),s+=t);return s}function J(){for(var e,n,t=0,s="",r=arguments.length;t<r;t++)(e=arguments[t])&&(n=W(e))&&(s&&(s+=" "),s+=n);return s}function re(...e){return(...n)=>{for(const t of e)if(typeof t=="function")try{t(...n)}catch(s){console.error(s)}}}function C(...e){const n={...e[0]};for(let t=1;t<e.length;t++){const s=e[t];for(const r in s){const i=n[r],c=s[r];typeof i=="function"&&typeof c=="function"&&r[0]==="o"&&r[1]==="n"&&r.charCodeAt(2)>=65&&r.charCodeAt(2)<=90?n[r]=re(i,c):(r==="className"||r==="UNSAFE_className")&&typeof i=="string"&&typeof c=="string"?n[r]=J(i,c):n[r]=c!==void 0?c:i}}return n}function oe(e={}){const n=T(e.participant),{className:t,connectionQualityObserver:s}=o.useMemo(()=>l.setupConnectionQualityIndicator(n),[n]),r=y(s,h.ConnectionQuality.Unknown);return{className:t,quality:r}}function N(e){const n=l.useEnsureRoom(e),t=o.useMemo(()=>l.connectionStateObserver(n),[n]);return y(t,n.state)}function ce(e){const n=l.useRoomContext(),t=N(n);return{buttonProps:o.useMemo(()=>{const{className:r,disconnect:i}=l.setupDisconnectButton(n);return C(e,{className:r,onClick:()=>i(e.stopTracks??!0),disabled:t===h.ConnectionState.Disconnected})},[n,e,t])}}function j(e){if(e.publication instanceof h.LocalTrackPublication){const n=e.publication.track;if(n){const{facingMode:t}=h.facingModeFromLocalTrack(n);return t}}return"undefined"}function ie({trackRef:e,props:n}){const t=w(e),s=L(),{className:r}=o.useMemo(()=>l.setupFocusToggle(),[]),i=o.useMemo(()=>l.isTrackReferencePinned(t,s==null?void 0:s.pin.state),[t,s==null?void 0:s.pin.state]);return{mergedProps:o.useMemo(()=>C(n,{className:r,onClick:a=>{var u,d,p,f,b;(u=n.onClick)==null||u.call(n,a),i?(p=s==null?void 0:(d=s.pin).dispatch)==null||p.call(d,{msg:"clear_pin"}):(b=s==null?void 0:(f=s.pin).dispatch)==null||b.call(f,{msg:"set_pin",trackReference:t})}}),[n,r,t,i,s==null?void 0:s.pin]),inFocus:i}}function ae(e,n,t={}){const s=t.gridLayouts??l.GRID_LAYOUTS,{width:r,height:i}=_(e),c=l.selectGridLayout(s,n,r,i);return o.useEffect(()=>{e.current&&c&&(e.current.style.setProperty("--lk-col-count",c==null?void 0:c.columns.toString()),e.current.style.setProperty("--lk-row-count",c==null?void 0:c.rows.toString()))},[e,c]),{layout:c,containerWidth:r,containerHeight:i}}function R(e,n={}){var a,u;const t=typeof e=="string"?n.participant:e.participant,s=T(t),r=typeof e=="string"?{participant:s,source:e}:e,[i,c]=o.useState(!!((a=r.publication)!=null&&a.isMuted||(u=s.getTrackPublication(r.source))!=null&&u.isMuted));return o.useEffect(()=>{const d=l.mutedObserver(r).subscribe(c);return()=>d.unsubscribe()},[l.getTrackReferenceId(r)]),i}function G(e){const n=T(e),t=o.useMemo(()=>l.createIsSpeakingObserver(n),[n]);return y(t,n.isSpeaking)}function ue(){const e=l.useRoomContext(),n=o.useMemo(()=>l.participantPermissionObserver(e.localParticipant),[e]);return y(n,e.localParticipant.permissions)}function le({kind:e,room:n,track:t,requestPermissions:s,onError:r}){const i=l.useMaybeRoomContext(),c=o.useMemo(()=>l.createMediaDeviceObserver(e,r,s),[e,s,r]),a=y(c,[]),[u,d]=o.useState(""),{className:p,activeDeviceObservable:f,setActiveMediaDevice:b}=o.useMemo(()=>l.setupDeviceSelector(e,n??i,t),[e,n,i,t]);return o.useEffect(()=>{const m=f.subscribe(g=>{l.log.info("setCurrentDeviceId",g),g&&d(g)});return()=>{m==null||m.unsubscribe()}},[f]),{devices:a,className:p,activeDeviceId:u,setActiveMediaDevice:b}}function de({kind:e,onError:n}){const t=o.useMemo(()=>l.createMediaDeviceObserver(e,n),[e,n]);return y(t,[])}function Q(e,n,t={}){const s=o.useRef([]),r=o.useRef(-1),i=n!==r.current,c=typeof t.customSortFunction=="function"?t.customSortFunction(e):l.sortTrackReferences(e);let a=[...c];if(i===!1)try{a=l.updatePages(s.current,c,n)}catch(u){l.log.error("Error while running updatePages(): ",u)}return i?s.current=c:s.current=a,r.current=n,a}function fe(e,n){const[t,s]=o.useState(1),r=Math.max(Math.ceil(n.length/e),1);t>r&&s(r);const i=t*e,c=i-e,a=f=>{s(b=>f==="next"?b===r?b:b+1:b===1?b:b-1)},u=f=>{f>r?s(r):f<1?s(1):s(f)},p=Q(n,e).slice(c,i);return{totalPageCount:r,nextPage:()=>a("next"),prevPage:()=>a("previous"),setPage:u,firstItemIndex:c,lastItemIndex:i,tracks:p,currentPage:t}}function pe({trackRef:e,onParticipantClick:n,disableSpeakingIndicator:t,htmlProps:s}){const r=w(e),i=o.useMemo(()=>{const{className:b}=l.setupParticipantTile();return C(s,{className:b,onClick:m=>{var g;if((g=s.onClick)==null||g.call(s,m),typeof n=="function"){const v=r.publication??r.participant.getTrackPublication(r.source);n({participant:r.participant,track:v})}}})},[s,n,r.publication,r.source,r.participant]),c=r.participant.getTrackPublication(h.Track.Source.Microphone),a=o.useMemo(()=>({participant:r.participant,source:h.Track.Source.Microphone,publication:c}),[c,r.participant]),u=R(r),d=R(a),p=G(r.participant),f=j(r);return{elementProps:{"data-lk-audio-muted":d,"data-lk-video-muted":u,"data-lk-speaking":t===!0?!1:p,"data-lk-local-participant":r.participant.isLocal,"data-lk-source":r.source,"data-lk-facing-mode":f,...i}}}function be(e){return e=z(e),o.useMemo(()=>(e==null?void 0:e.pin.state)!==void 0&&e.pin.state.length>=1?e.pin.state:[],[e.pin.state])}function me({room:e,props:n}){const t=l.useEnsureRoom(e),{className:s,roomAudioPlaybackAllowedObservable:r,handleStartAudioPlayback:i}=o.useMemo(()=>l.setupStartAudio(),[]),c=o.useMemo(()=>r(t),[t,r]),{canPlayAudio:a}=y(c,{canPlayAudio:t.canPlaybackAudio});return{mergedProps:o.useMemo(()=>C(n,{className:s,onClick:()=>{i(t)},style:{display:a?"none":"block"}}),[n,s,a,i,t]),canPlayAudio:a}}function ge({room:e,props:n}){const t=l.useEnsureRoom(e),{className:s,roomVideoPlaybackAllowedObservable:r,handleStartVideoPlayback:i}=o.useMemo(()=>l.setupStartVideo(),[]),c=o.useMemo(()=>r(t),[t,r]),{canPlayVideo:a}=y(c,{canPlayVideo:t.canPlaybackVideo});return{mergedProps:o.useMemo(()=>C(n,{className:s,onClick:()=>{i(t)},style:{display:a?"none":"block"}}),[n,s,a,i,t]),canPlayVideo:a}}function he(e,n={}){const t=o.useRef(null),s=o.useRef(null),r=n.minSwipeDistance??50,i=u=>{s.current=null,t.current=u.targetTouches[0].clientX},c=u=>{s.current=u.targetTouches[0].clientX},a=o.useCallback(()=>{if(!t.current||!s.current)return;const u=t.current-s.current,d=u>r,p=u<-r;d&&n.onLeftSwipe&&n.onLeftSwipe(),p&&n.onRightSwipe&&n.onRightSwipe()},[r,n]);o.useEffect(()=>{const u=e.current;return u&&(u.addEventListener("touchstart",i,{passive:!0}),u.addEventListener("touchmove",c,{passive:!0}),u.addEventListener("touchend",a,{passive:!0})),()=>{u&&(u.removeEventListener("touchstart",i),u.removeEventListener("touchmove",c),u.removeEventListener("touchend",a))}},[e,a])}function ve({props:e}){const{dispatch:n,state:t}=U().widget,{className:s}=o.useMemo(()=>l.setupChatToggle(),[]);return{mergedProps:o.useMemo(()=>C(e,{className:s,onClick:()=>{n&&n({msg:"toggle_chat"})},"aria-pressed":t!=null&&t.showChat?"true":"false","data-lk-unread-msgs":t?t.unreadMessages<10?t.unreadMessages.toFixed(0):"9+":"0"}),[e,s,n,t])}}function Se(e){var i,c;const n=w(e),{className:t,mediaMutedObserver:s}=o.useMemo(()=>l.setupTrackMutedIndicator(n),[l.getTrackReferenceId(n)]);return{isMuted:y(s,!!((i=n.publication)!=null&&i.isMuted||(c=n.participant.getTrackPublication(n.source))!=null&&c.isMuted)),className:t}}function ye({source:e,onChange:n,initialState:t,captureOptions:s,publishOptions:r,onDeviceError:i,...c}){var k;const a=l.useMaybeRoomContext(),u=(k=a==null?void 0:a.localParticipant)==null?void 0:k.getTrackPublication(e),d=o.useRef(!1),{toggle:p,className:f,pendingObserver:b,enabledObserver:m}=o.useMemo(()=>a?l.setupMediaToggle(e,a,s,r,i):l.setupManualToggle(),[a,e,JSON.stringify(s),r]),g=y(b,!1),v=y(m,t??!!(u!=null&&u.isEnabled));o.useEffect(()=>{n==null||n(v,d.current),d.current=!1},[v,n]),o.useEffect(()=>{t!==void 0&&(l.log.debug("forcing initial toggle state",e,t),p(t))},[]);const M=o.useMemo(()=>C(c,{className:f}),[c,f]),S=o.useCallback(E=>{var P;d.current=!0,p().catch(()=>d.current=!1),(P=c.onClick)==null||P.call(c,E)},[c,p]);return{toggle:p,enabled:v,pending:g,track:u,buttonProps:{...M,"aria-pressed":v,"data-lk-source":e,"data-lk-enabled":v,disabled:g,onClick:S}}}function Me(e=[h.Track.Source.Camera,h.Track.Source.Microphone,h.Track.Source.ScreenShare,h.Track.Source.ScreenShareAudio,h.Track.Source.Unknown],n={}){const t=l.useEnsureRoom(n.room),[s,r]=o.useState([]),[i,c]=o.useState([]),a=o.useMemo(()=>e.map(d=>l.isSourceWitOptions(d)?d.source:d),[JSON.stringify(e)]);return o.useEffect(()=>{const d=l.trackReferencesObservable(t,a,{additionalRoomEvents:n.updateOnlyOn,onlySubscribed:n.onlySubscribed}).subscribe(({trackReferences:p,participants:f})=>{l.log.debug("setting track bundles",p,f),r(p),c(f)});return()=>d.unsubscribe()},[t,JSON.stringify(n.onlySubscribed),JSON.stringify(n.updateOnlyOn),JSON.stringify(e)]),o.useMemo(()=>{if(l.isSourcesWithOptions(e)){const d=Ce(e,i),p=Array.from(s);return i.forEach(f=>{d.has(f.identity)&&(d.get(f.identity)??[]).forEach(m=>{if(s.find(({participant:v,publication:M})=>f.identity===v.identity&&M.source===m))return;l.log.debug(`Add ${m} placeholder for participant ${f.identity}.`);const g={participant:f,source:m};p.push(g)})}),p}else return s},[s,i,e])}function ke(e,n){const t=new Set(e);for(const s of n)t.delete(s);return t}function Ce(e,n){const t=new Map;if(l.isSourcesWithOptions(e)){const s=e.filter(r=>r.withPlaceholder).map(r=>r.source);n.forEach(r=>{const i=r.getTrackPublications().map(a=>{var u;return(u=a.track)==null?void 0:u.source}).filter(a=>a!==void 0),c=Array.from(ke(new Set(s),new Set(i)));c.length>0&&t.set(r.identity,c)})}return t}function Te(e){const n=l.useRoomContext(),t=N(n),s=o.useMemo(()=>t===h.ConnectionState.Disconnected,[t]),r=o.useMemo(()=>l.setupChat(n,e),[n,e,s]),i=y(r.isSendingObservable,!1),c=y(r.messageObservable,[]);return{send:r.send,update:r.update,chatMessages:c,isSending:i}}function Pe(e={}){const[n,t]=o.useState(l.loadUserChoices(e.defaults,e.preventLoad??!1)),s=o.useCallback(u=>{t(d=>({...d,audioEnabled:u}))},[]),r=o.useCallback(u=>{t(d=>({...d,videoEnabled:u}))},[]),i=o.useCallback(u=>{t(d=>({...d,audioDeviceId:u}))},[]),c=o.useCallback(u=>{t(d=>({...d,videoDeviceId:u}))},[]),a=o.useCallback(u=>{t(d=>({...d,username:u}))},[]);return o.useEffect(()=>{l.saveUserChoices(n,e.preventSave??!1)},[n,e.preventSave]),{userChoices:n,saveAudioInputEnabled:s,saveVideoInputEnabled:r,saveAudioInputDeviceId:i,saveVideoInputDeviceId:c,saveUsername:a}}function we(e,n={}){const t=T(e),s=l.useEnsureRoom(n.room),r=o.useMemo(()=>l.encryptionStatusObservable(s,t),[s,t]);return y(r,t instanceof h.LocalParticipant?t.isE2EEEnabled:!!(t!=null&&t.isEncrypted))}function Ee(e,n={fftSize:32,smoothingTimeConstant:0}){const t=l.isTrackReference(e)?e.publication.track:e,[s,r]=o.useState(0);return o.useEffect(()=>{if(!t||!t.mediaStream)return;const{cleanup:i,analyser:c}=h.createAudioAnalyser(t,n),a=c.frequencyBinCount,u=new Uint8Array(a),p=setInterval(()=>{c.getByteFrequencyData(u);let f=0;for(let b=0;b<u.length;b++){const m=u[b];f+=m*m}r(Math.sqrt(f/u.length)/255)},1e3/30);return()=>{i(),clearInterval(p)}},[t,t==null?void 0:t.mediaStream,JSON.stringify(n)]),s}const Ae=e=>{const n=t=>{let i=1-Math.max(-100,Math.min(-10,t))*-1/100;return i=Math.sqrt(i),i};return e.map(t=>t===-1/0?0:n(t))},Re={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function De(e,n={}){var c;const t=e instanceof h.Track?e:(c=e==null?void 0:e.publication)==null?void 0:c.track,s={...Re,...n},[r,i]=o.useState(new Array(s.bands).fill(0));return o.useEffect(()=>{if(!t||!(t!=null&&t.mediaStream))return;const{analyser:a,cleanup:u}=h.createAudioAnalyser(t,s.analyserOptions),d=a.frequencyBinCount,p=new Float32Array(d),b=setInterval(()=>{a.getFloatFrequencyData(p);let m=new Float32Array(p.length);for(let S=0;S<p.length;S++)m[S]=p[S];m=m.slice(n.loPass,n.hiPass);const g=Ae(m),v=Math.ceil(g.length/s.bands),M=[];for(let S=0;S<s.bands;S++){const k=g.slice(S*v,(S+1)*v).reduce((E,P)=>E+=P,0);M.push(k/v)}i(M)},s.updateInterval);return()=>{u(),clearInterval(b)}},[t,t==null?void 0:t.mediaStream,JSON.stringify(n)]),r}const Le={barCount:120,volMultiplier:5,updateInterval:20};function xe(e,n={}){var p;const t=e instanceof h.Track?e:(p=e==null?void 0:e.publication)==null?void 0:p.track,s={...Le,...n},r=o.useRef(new Float32Array),i=o.useRef(performance.now()),c=o.useRef(0),[a,u]=o.useState([]),d=o.useCallback(f=>{u(Array.from(Fe(f,s.barCount).map(b=>Math.sqrt(b)*s.volMultiplier)))},[]);return o.useEffect(()=>{if(!t||!(t!=null&&t.mediaStream))return;const{analyser:f,cleanup:b}=h.createAudioAnalyser(t,{fftSize:O(s.barCount)}),m=O(s.barCount),g=new Float32Array(m),v=()=>{if(M=requestAnimationFrame(v),f.getFloatTimeDomainData(g),r.current.map((S,k)=>S+g[k]),c.current+=1,performance.now()-i.current>=s.updateInterval){const S=g.map(k=>k/c.current);d(S),i.current=performance.now(),c.current=0}};let M=requestAnimationFrame(v);return()=>{b(),cancelAnimationFrame(M)}},[t,t==null?void 0:t.mediaStream,JSON.stringify(n),d]),{bars:a}}function O(e){return e<32?32:Ie(e)}function Ie(e){let n=2;for(;e>>=1;)n<<=1;return n}function Fe(e,n){const t=Math.floor(e.length/n),s=new Float32Array(n);for(let r=0;r<n;r++){const i=t*r;let c=0;for(let a=0;a<t;a++)c=c+Math.abs(e[i+a]);s[r]=c/t}return s}exports.LayoutContext=D;exports.ParticipantContext=F;exports.TrackRefContext=x;exports.clsx=J;exports.mergeProps=C;exports.useAudioWaveform=xe;exports.useChat=Te;exports.useChatToggle=ve;exports.useConnectionQualityIndicator=oe;exports.useConnectionState=N;exports.useCreateLayoutContext=ee;exports.useDisconnectButton=ce;exports.useEnsureCreateLayoutContext=te;exports.useEnsureLayoutContext=z;exports.useEnsureParticipant=T;exports.useEnsureTrackRef=w;exports.useFacingMode=j;exports.useFocusToggle=ie;exports.useGridLayout=ae;exports.useIsEncrypted=we;exports.useIsMuted=R;exports.useIsSpeaking=G;exports.useLayoutContext=U;exports.useLocalParticipantPermissions=ue;exports.useMaybeLayoutContext=L;exports.useMaybeParticipantContext=B;exports.useMaybeTrackRefContext=I;exports.useMediaDeviceSelect=le;exports.useMediaDevices=de;exports.useMultibandTrackVolume=De;exports.useObservableState=y;exports.usePagination=fe;exports.useParticipantContext=se;exports.useParticipantTile=pe;exports.usePersistentUserChoices=Pe;exports.usePinnedTracks=be;exports.useSize=_;exports.useStartAudio=me;exports.useStartVideo=ge;exports.useSwipe=he;exports.useTrackMutedIndicator=Se;exports.useTrackRefContext=ne;exports.useTrackToggle=ye;exports.useTrackVolume=Ee;exports.useTracks=Me;exports.useVisualStableUpdate=Q;
//# sourceMappingURL=shared-C9EfKMR-.js.map