@protobase/ui 0.66.4 → 0.66.6

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.
@@ -1,2 +1,2 @@
1
- import{Yt as e}from"./app-rTGIPCgf.js";var t=class extends Error{reason;constructor(e){super(`The guest request was refused: ${e}`),this.reason=e,this.name=`GuestRefused`}},n=e=>{let n=[],r=t=>new Promise((r,i)=>{n.push({resolve:r,reject:i}),e(t)});return{guests:{link:({publish:e,expiresAt:t})=>r({type:`guest-link`,publish:e,...t&&{expires_at:t.toISOString()}}),revoke:e=>r({type:`guest-link-revoke`,link:e}),admit:e=>r({type:`guest-decide`,guest:e,admit:!0}),deny:e=>r({type:`guest-decide`,guest:e,admit:!1}),remove:e=>r({type:`guest-remove`,guest:e})},receive:e=>{if(e.type!==`guest-link`&&e.type!==`guest-done`&&e.type!==`guest-refused`)return!1;let r=n.shift();return e.type===`guest-refused`?r?.reject(new t(e.reason)):r?.resolve(e.type===`guest-link`?{link:e.link,token:e.token}:void 0),!0},lost:()=>{for(let e of n.splice(0))e.reject(Error(`The link to the call was lost before the server answered`))}}},r=class extends Error{constructor(e){super(e),this.name=`PublishRefused`}},i=e=>new RTCPeerConnection(e),a=e=>{let t=[...e],n=t.find(e=>e.type===`transport`&&typeof e.selectedCandidatePairId==`string`),r=t.find(e=>e.type===`candidate-pair`&&(e.id===n?.selectedCandidatePairId||!n&&e.selected===!0||!n&&e.nominated===!0&&e.state===`succeeded`)),i=0,a=0;for(let e of t)e.type===`inbound-rtp`&&(i+=Math.max(0,Number(e.packetsLost??0)),a+=Number(e.packetsReceived??0));let o=typeof r?.currentRoundTripTime==`number`?r.currentRoundTripTime*1e3:void 0;return{...o!==void 0&&{roundTripMs:o},...i+a>0&&{lostRatio:i/(i+a)}}},o=async(e,t)=>{let n=e.connectionState,r=n===`connected`?a((await e.getStats()).values()):{};return{...t!==void 0&&{member:t},state:n,...r}},s=e=>{let t=new Map;for(let n of e.split(/\r?\nm=/).slice(1)){let e=/^a=mid:(\S+)/m.exec(n)?.[1],r=/^a=msid:(\S+) \S+/m.exec(n)?.[1];e!==void 0&&r!==void 0&&r!==`-`&&t.set(r,e)}return t},c=e=>/^o=mozilla/m.test(e),l=typeof navigator<`u`&&/Firefox\//.test(navigator.userAgent),u=(e,t)=>l===c(t)?e.polite:l,d=(e,{iceServers:t,send:n,onTracks:a,createPeerConnection:c=i})=>{let l=new Map,d=new Map,f=[],p,m=Promise.resolve(),h=(e,{track:t,stream:n})=>e.addTransceiver(t,{direction:`sendonly`,streams:[n]}).sender,g=({member:e,sid:t})=>{let n=l.get(e)?.pc,r=n?.remoteDescription&&s(n.remoteDescription.sdp).get(t);return r===void 0?void 0:n.getTransceivers().find(e=>e.mid===r)?.receiver.track},_=()=>a(f.map(e=>({...e,...g(e)&&{track:g(e)}}))),v=(e,r)=>{let i=c({iceServers:t});r.pc=i,r.senders=new Map,i.onnegotiationneeded=async()=>{let t=i.setLocalDescription();r.makingOffer=t;try{await t,r.pc===i&&n({type:`signal`,to:e,description:i.localDescription.toJSON()})}finally{r.makingOffer===t&&(r.makingOffer=void 0)}},i.onicecandidate=t=>{t.candidate&&r.pc===i&&n({type:`signal`,to:e,candidate:t.candidate.toJSON()})},i.oniceconnectionstatechange=()=>{i.iceConnectionState===`failed`&&i.restartIce()},i.ontrack=()=>_();for(let[e,t]of d)r.senders.set(e,h(i,t))},y=t=>{let n={polite:e<t,ignoreOffer:!1};return l.set(t,n),v(t,n),n},b=async(e,t)=>{await t.makingOffer,t.pc.close(),v(e,t)},x=e=>{l.get(e)?.pc.close(),l.delete(e)},S=async(e,t,r)=>{let i=l.get(e)??y(e);if(t){let n=t.type===`offer`&&(i.makingOffer!==void 0||i.pc.signalingState!==`stable`);if(i.ignoreOffer=!u(i,t.sdp)&&n,i.ignoreOffer)return;n&&!i.pc.currentRemoteDescription&&await b(e,i)}let{pc:a}=i;t&&(await a.setRemoteDescription(t),t.type===`offer`&&(await a.setLocalDescription(),n({type:`signal`,to:e,description:a.localDescription.toJSON()})),_()),r&&await a.addIceCandidate(r).catch(e=>{if(!i.ignoreOffer)throw e})},C=async e=>{switch(e.type){case`peers`:{let t=new Set(e.members);for(let e of l.keys())t.has(e)||x(e);for(let e of t)l.has(e)||y(e);return}case`signal`:return S(e.from,e.description,e.candidate);case`tracks`:f=e.tracks,_();return;case`published`:p?.resolve();return;case`publish-refused`:p?.reject(new r(e.reason));return}},w=async e=>{let t=Object.entries(e);for(let[e]of t)if(d.has(e))throw Error(`The call already sends a ${e} track: unpublish it first`);if(t.length===0)return;let r=t.map(([e,t])=>{let n=new MediaStream([t]);return[e,{track:t,sid:n.id,stream:n}]}),i=new Promise((e,t)=>p={resolve:e,reject:t});n({type:`publish`,tracks:r.map(([e,{track:t,sid:n}])=>({cid:n,kind:t.kind,source:e}))});try{await i}finally{p=void 0}for(let[e,t]of r){d.set(e,t);for(let n of l.values())n.senders.set(e,h(n.pc,t))}};return{receive:C,publish:e=>{let t=m.then(()=>w(e));return m=t.catch(()=>{}),t},unpublish:async e=>{let t=d.get(e);if(t){d.delete(e);for(let t of l.values()){let n=t.senders.get(e);n&&t.pc.signalingState!==`closed`&&t.pc.removeTrack(n),t.senders.delete(e)}n({type:`unpublish`,sid:t.sid})}},mute:(e,t)=>{let r=d.get(e);r&&(r.track.enabled=!t,n({type:`mute`,sid:r.sid,muted:t}))},restartIce:async()=>{for(let e of l.values())e.pc.restartIce()},resumeState:async e=>({participant:e,tracks:[...d].map(([e,{track:t,sid:n}])=>({cid:n,sid:n,kind:t.kind,source:e}))}),resumed:async()=>{},sending:()=>new Map([...d].map(([e,{track:t}])=>[e,{track:t,simulcast:!1}])),connections:()=>Promise.all([...l].map(([e,t])=>o(t.pc,e))),close:()=>{p?.reject(Error(`The call ended`));for(let e of[...l.keys()])x(e)}}},f=e=>{let t=!1,n=!1,r=[],i=async()=>{t=!0,n=!1,await e()},a=()=>{for(let e of r.splice(0))e()};return{request:async()=>{if(t){n=!0;return}await i()},answered:async()=>{if(t=!1,n)return i();a()},abandon:()=>{t&&(n=!0),t=!1},get pending(){return n},settled:()=>t||n?new Promise(e=>r.push(e)):Promise.resolve(),reset:()=>{t=!1,n=!1,a()}}},p=[{rid:`q`,quality:`low`,scale:4,maxBitrate:15e4},{rid:`h`,quality:`medium`,scale:2,maxBitrate:5e5},{rid:`f`,quality:`high`,scale:1,maxBitrate:12e5}],m=12e5,h=(e,t,n)=>{if(t.kind===`audio`)return{cid:t.id,kind:`audio`,source:e};let{width:r=0,height:i=0}=t.getSettings(),a=n?p.map(e=>({quality:e.quality,width:Math.round(r/e.scale),height:Math.round(i/e.scale),bitrate:e.maxBitrate})):[];return{cid:t.id,kind:`video`,source:e,width:r,height:i,...n&&{layers:a}}},g=(e,t)=>{if(e.kind!==`audio`)return t?p.map(e=>({rid:e.rid,scaleResolutionDownBy:e.scale,maxBitrate:e.maxBitrate})):[{maxBitrate:m}]},_=({iceServers:e,send:t,onTracks:n,onUnpublished:a,createPeerConnection:s=i})=>{let c=s({iceServers:e,bundlePolicy:`max-bundle`}),l=new Map,u=[],d={},p=[],m=0,_,v=Promise.resolve(),y=f(async()=>{let e=await c.createOffer();await c.setLocalDescription(e),t({type:`offer`,sdp:e.sdp,id:++m})}),b=async()=>{c.getTransceivers().length>0&&await y.request()},x=async()=>{await b(),await y.settled()},S=e=>{let t=Object.keys(d).find(t=>d[t]===e);return t===void 0?void 0:c.getTransceivers().find(e=>e.mid===t)?.receiver.track},C=()=>n(p.map(e=>({...e,...S(e.sid)&&{track:S(e.sid)}})));c.onicecandidate=e=>{e.candidate&&t({type:`candidate`,candidate:e.candidate.toJSON()})},c.oniceconnectionstatechange=()=>{c.iceConnectionState===`failed`&&w()},c.ontrack=()=>C();let w=async()=>{c.restartIce(),await x()},T=e=>{let t=l.get(e);return t?(l.delete(e),c.signalingState!==`closed`&&c.removeTrack(t.transceiver.sender),!0):!1},E=async e=>{switch(e.type){case`answer`:if(e.id!==m)return;d={...d,...e.mids},await c.setRemoteDescription({type:`answer`,sdp:e.sdp});for(let e of u.splice(0))await c.addIceCandidate(e);C(),await y.answered();return;case`candidate`:c.remoteDescription?await c.addIceCandidate(e.candidate):u.push(e.candidate);return;case`sections`:for(let t=0;t<e.audio;t++)c.addTransceiver(`audio`,{direction:`recvonly`});for(let t=0;t<e.video;t++)c.addTransceiver(`video`,{direction:`recvonly`});await b();return;case`tracks`:p=e.tracks,C();return;case`unpublished`:{let t=[...l.values()].find(t=>t.sid===e.sid);if(!t)return;T(t.source),await b(),a(t.source);return}case`published`:_?.resolve(e.tracks);return;case`publish-refused`:_?.reject(new r(e.reason));return}},D=async(e,n)=>{let r=Object.entries(e).map(([e,t])=>{if(l.has(e))throw Error(`The call already sends a ${e} track: unpublish it first`);let r=t.kind===`video`&&!!n.simulcast,i=g(t,r);return{source:e,track:t,transceiver:c.addTransceiver(t,{direction:`sendonly`,...i&&{sendEncodings:i}}),simulcast:r}});if(r.length===0)return;let i=new Promise((e,t)=>_={resolve:e,reject:t});t({type:`publish`,tracks:r.map(e=>h(e.source,e.track,e.simulcast))});try{let e=await i;for(let t of r)l.set(t.source,{...t,sid:e.find(e=>e.cid===t.track.id).sid})}catch(e){for(let e of r)e.transceiver.stop();throw e}finally{_=void 0}await x()};return{receive:E,publish:(e,t={})=>{let n=v.then(()=>D(e,t));return v=n.catch(()=>{}),n},unpublish:async e=>{T(e)&&await x()},mute:(e,n)=>{let r=l.get(e);r?.sid&&(r.track.enabled=!n,t({type:`mute`,sid:r.sid,muted:n}))},restartIce:w,resumeState:async e=>{if(c.signalingState===`have-local-offer`&&(await c.setLocalDescription({type:`rollback`}),y.abandon()),!c.localDescription||!c.remoteDescription)return;let t=[...l.values()].flatMap(e=>e.sid?[{cid:e.track.id,sid:e.sid,kind:e.track.kind,source:e.source}]:[]);return{participant:e,offer:c.localDescription.sdp,answer:c.remoteDescription.sdp,tracks:t}},resumed:async()=>{y.pending&&await b()},sending:()=>new Map([...l.values()].map(e=>[e.source,{track:e.track,simulcast:e.simulcast}])),connections:async()=>[await o(c)],close:()=>{_?.reject(Error(`The call ended`)),y.reset(),c.close()}}},v=e=>Math.min(1e4,500*2**e),y=e=>{let t=new URL(e,globalThis.location?.href);return t.protocol=t.protocol.replace(/^http/,`ws`),t.href},b={1e3:`ended`,1008:`removed`},x=new Set([1011,1013]),S=e=>{let t=e.WebSocket??WebSocket,r=e.retryDelayMs??v,i=e.maxRetries??8,a=y(e.url),o,s,c=``,l=``,u=[],f=[],p=!1,m=!1,h=!1,g=!1,S=0,C=Promise.resolve(),w,T=new Promise((e,t)=>w={resolve:e,reject:t}),E=e=>{o.readyState===t.OPEN&&o.send(JSON.stringify(e))},D=n(E),O=e.guest===void 0?{}:{guest:e.guest},k=t=>e.onState?.(t),A=(e,n)=>{p||(p=!0,s?.close(),s=void 0,(o.readyState===t.OPEN||o.readyState===t.CONNECTING)&&o.close(1e3),w.reject(n??Error(`The call was left: ${e}`)),k({state:`left`,reason:e,...n!==void 0&&{error:n}}))},j=t=>{let n={iceServers:t.iceServers,send:E,onTracks:t=>{f=t,e.onTracks?.(t)},onUnpublished:t=>e.onUnpublished?.(t),...e.createPeerConnection&&{createPeerConnection:e.createPeerConnection}};return t.mode===`peer`?d(t.participant,n):_(n)},M=async t=>{switch(t.type){case`joined`:{let e=s?.sending();s?.close(),c=t.participant,l=t.call,s=j(t),S=0,k({state:`joined`}),w.resolve(F);for(let[t,{track:n,simulcast:r}]of e??[])F.publish({[t]:n},{simulcast:r}).catch(e=>A(`ended`,e));return}case`resumed`:g=!0,S=0,k({state:`joined`}),await s?.resumed();return;case`speakers`:e.onSpeakers?.(t.speakers);return;case`members`:u=t.members,e.onMembers?.(u);return;case`left`:t.reason===`rejoin`?m=!0:A(t.reason);return;case`lobby`:e.onLobby?.({guests:t.guests,links:t.links});return;default:if(D.receive(t))return;await s?.receive(t)}},N=e=>{h=!1,g=!1,o=new t(a),o.onopen=()=>{h=!0,C=C.then(async()=>{let t=e===`resume`&&s?await s.resumeState(c):void 0;E(t?{type:`resume`,call:l,...t,...O}:{type:`join`,...O})})},o.onmessage=e=>{let t=JSON.parse(String(e.data));C=C.then(()=>M(t)).catch(e=>A(`ended`,e))},o.onclose=t=>{D.lost(),C=C.then(()=>P(e,t.code))}},P=(e,t)=>{if(p)return;if(m)return m=!1,N(`join`);let n=b[t];if(n)return A(n);if(!c&&!x.has(t))return A(`refused`);if(S++,S>i)return A(c?`ended`:`unavailable`);k(c?{state:`resuming`}:{state:`connecting`});let a=e===`resume`&&h&&!g?`join`:`resume`;setTimeout(()=>{p||N(a)},r(S-1))},F={get id(){return l},get participant(){return c},members:()=>u,publish:async(e,t)=>{if(!s)throw Error(`The call was left`);await s.publish(e,t)},unpublish:async e=>{await s?.unpublish(e)},mute:(e,t)=>s?.mute(e,t),view:(e,t)=>E(t===`hidden`?{type:`view`,sids:e,width:0,height:0,hidden:!0}:{type:`view`,sids:e,...t}),restartIce:async()=>{await s?.restartIce()},leave:()=>{p||(E({type:`leave`}),A(`ended`))},tracks:()=>f,connections:async()=>s?s.connections():[],guests:D.guests};return k({state:`connecting`}),N(`join`),T},C=class extends Error{status;constructor(e,t){super(t),this.status=e,this.name=`LobbyRefused`}},w=({systemPath:t=`/api`,fetch:n=globalThis.fetch}={})=>{let r=e(t,`lobby`),i=async e=>{let t=await n(r,{...e,credentials:`omit`,cache:`no-store`});if(!t.ok)throw new C(t.status,(await t.json().catch(()=>void 0))?.detail??t.statusText);return t},a=e=>({authorization:`Bearer ${e}`});return{socketUrl:e(t,`socket`),enter:async(e,t)=>await(await i({method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({link:e,name:t})})).json(),wait:async e=>await(await i({method:`GET`,headers:a(e)})).json(),leave:async e=>{await i({method:`DELETE`,headers:a(e)})}}};export{t as GuestRefused,C as LobbyRefused,r as PublishRefused,w as guestLobby,S as joinCall};
2
- //# debugId=92ecfd47-67fb-4751-aaea-dabf7b012db8
1
+ import{Yt as e}from"./app-D1iOLNRp.js";var t=class extends Error{reason;constructor(e){super(`The guest request was refused: ${e}`),this.reason=e,this.name=`GuestRefused`}},n=e=>{let n=[],r=t=>new Promise((r,i)=>{n.push({resolve:r,reject:i}),e(t)});return{guests:{link:({publish:e,expiresAt:t})=>r({type:`guest-link`,publish:e,...t&&{expires_at:t.toISOString()}}),revoke:e=>r({type:`guest-link-revoke`,link:e}),admit:e=>r({type:`guest-decide`,guest:e,admit:!0}),deny:e=>r({type:`guest-decide`,guest:e,admit:!1}),remove:e=>r({type:`guest-remove`,guest:e})},receive:e=>{if(e.type!==`guest-link`&&e.type!==`guest-done`&&e.type!==`guest-refused`)return!1;let r=n.shift();return e.type===`guest-refused`?r?.reject(new t(e.reason)):r?.resolve(e.type===`guest-link`?{link:e.link,token:e.token}:void 0),!0},lost:()=>{for(let e of n.splice(0))e.reject(Error(`The link to the call was lost before the server answered`))}}},r=class extends Error{constructor(e){super(e),this.name=`PublishRefused`}},i=e=>new RTCPeerConnection(e),a=e=>{let t=[...e],n=t.find(e=>e.type===`transport`&&typeof e.selectedCandidatePairId==`string`),r=t.find(e=>e.type===`candidate-pair`&&(e.id===n?.selectedCandidatePairId||!n&&e.selected===!0||!n&&e.nominated===!0&&e.state===`succeeded`)),i=0,a=0;for(let e of t)e.type===`inbound-rtp`&&(i+=Math.max(0,Number(e.packetsLost??0)),a+=Number(e.packetsReceived??0));let o=typeof r?.currentRoundTripTime==`number`?r.currentRoundTripTime*1e3:void 0;return{...o!==void 0&&{roundTripMs:o},...i+a>0&&{lostRatio:i/(i+a)}}},o=async(e,t)=>{let n=e.connectionState,r=n===`connected`?a((await e.getStats()).values()):{};return{...t!==void 0&&{member:t},state:n,...r}},s=e=>{let t=new Map;for(let n of e.split(/\r?\nm=/).slice(1)){let e=/^a=mid:(\S+)/m.exec(n)?.[1],r=/^a=msid:(\S+) \S+/m.exec(n)?.[1];e!==void 0&&r!==void 0&&r!==`-`&&t.set(r,e)}return t},c=e=>/^o=mozilla/m.test(e),l=typeof navigator<`u`&&/Firefox\//.test(navigator.userAgent),u=(e,t)=>l===c(t)?e.polite:l,d=(e,{iceServers:t,send:n,onTracks:a,createPeerConnection:c=i})=>{let l=new Map,d=new Map,f=[],p,m=Promise.resolve(),h=(e,{track:t,stream:n})=>e.addTransceiver(t,{direction:`sendonly`,streams:[n]}).sender,g=({member:e,sid:t})=>{let n=l.get(e)?.pc,r=n?.remoteDescription&&s(n.remoteDescription.sdp).get(t);return r===void 0?void 0:n.getTransceivers().find(e=>e.mid===r)?.receiver.track},_=()=>a(f.map(e=>({...e,...g(e)&&{track:g(e)}}))),v=(e,r)=>{let i=c({iceServers:t});r.pc=i,r.senders=new Map,i.onnegotiationneeded=async()=>{let t=i.setLocalDescription();r.makingOffer=t;try{await t,r.pc===i&&n({type:`signal`,to:e,description:i.localDescription.toJSON()})}finally{r.makingOffer===t&&(r.makingOffer=void 0)}},i.onicecandidate=t=>{t.candidate&&r.pc===i&&n({type:`signal`,to:e,candidate:t.candidate.toJSON()})},i.oniceconnectionstatechange=()=>{i.iceConnectionState===`failed`&&i.restartIce()},i.ontrack=()=>_();for(let[e,t]of d)r.senders.set(e,h(i,t))},y=t=>{let n={polite:e<t,ignoreOffer:!1};return l.set(t,n),v(t,n),n},b=async(e,t)=>{await t.makingOffer,t.pc.close(),v(e,t)},x=e=>{l.get(e)?.pc.close(),l.delete(e)},S=async(e,t,r)=>{let i=l.get(e)??y(e);if(t){let n=t.type===`offer`&&(i.makingOffer!==void 0||i.pc.signalingState!==`stable`);if(i.ignoreOffer=!u(i,t.sdp)&&n,i.ignoreOffer)return;n&&!i.pc.currentRemoteDescription&&await b(e,i)}let{pc:a}=i;t&&(await a.setRemoteDescription(t),t.type===`offer`&&(await a.setLocalDescription(),n({type:`signal`,to:e,description:a.localDescription.toJSON()})),_()),r&&await a.addIceCandidate(r).catch(e=>{if(!i.ignoreOffer)throw e})},C=async e=>{switch(e.type){case`peers`:{let t=new Set(e.members);for(let e of l.keys())t.has(e)||x(e);for(let e of t)l.has(e)||y(e);return}case`signal`:return S(e.from,e.description,e.candidate);case`tracks`:f=e.tracks,_();return;case`published`:p?.resolve();return;case`publish-refused`:p?.reject(new r(e.reason));return}},w=async e=>{let t=Object.entries(e);for(let[e]of t)if(d.has(e))throw Error(`The call already sends a ${e} track: unpublish it first`);if(t.length===0)return;let r=t.map(([e,t])=>{let n=new MediaStream([t]);return[e,{track:t,sid:n.id,stream:n}]}),i=new Promise((e,t)=>p={resolve:e,reject:t});n({type:`publish`,tracks:r.map(([e,{track:t,sid:n}])=>({cid:n,kind:t.kind,source:e}))});try{await i}finally{p=void 0}for(let[e,t]of r){d.set(e,t);for(let n of l.values())n.senders.set(e,h(n.pc,t))}};return{receive:C,publish:e=>{let t=m.then(()=>w(e));return m=t.catch(()=>{}),t},unpublish:async e=>{let t=d.get(e);if(t){d.delete(e);for(let t of l.values()){let n=t.senders.get(e);n&&t.pc.signalingState!==`closed`&&t.pc.removeTrack(n),t.senders.delete(e)}n({type:`unpublish`,sid:t.sid})}},mute:(e,t)=>{let r=d.get(e);r&&(r.track.enabled=!t,n({type:`mute`,sid:r.sid,muted:t}))},restartIce:async()=>{for(let e of l.values())e.pc.restartIce()},resumeState:async e=>({participant:e,tracks:[...d].map(([e,{track:t,sid:n}])=>({cid:n,sid:n,kind:t.kind,source:e}))}),resumed:async()=>{},sending:()=>new Map([...d].map(([e,{track:t}])=>[e,{track:t,simulcast:!1}])),connections:()=>Promise.all([...l].map(([e,t])=>o(t.pc,e))),close:()=>{p?.reject(Error(`The call ended`));for(let e of[...l.keys()])x(e)}}},f=e=>{let t=!1,n=!1,r=[],i=async()=>{t=!0,n=!1,await e()},a=()=>{for(let e of r.splice(0))e()};return{request:async()=>{if(t){n=!0;return}await i()},answered:async()=>{if(t=!1,n)return i();a()},abandon:()=>{t&&(n=!0),t=!1},get pending(){return n},settled:()=>t||n?new Promise(e=>r.push(e)):Promise.resolve(),reset:()=>{t=!1,n=!1,a()}}},p=[{rid:`q`,quality:`low`,scale:4,maxBitrate:15e4},{rid:`h`,quality:`medium`,scale:2,maxBitrate:5e5},{rid:`f`,quality:`high`,scale:1,maxBitrate:12e5}],m=12e5,h=(e,t,n)=>{if(t.kind===`audio`)return{cid:t.id,kind:`audio`,source:e};let{width:r=0,height:i=0}=t.getSettings(),a=n?p.map(e=>({quality:e.quality,width:Math.round(r/e.scale),height:Math.round(i/e.scale),bitrate:e.maxBitrate})):[];return{cid:t.id,kind:`video`,source:e,width:r,height:i,...n&&{layers:a}}},g=(e,t)=>{if(e.kind!==`audio`)return t?p.map(e=>({rid:e.rid,scaleResolutionDownBy:e.scale,maxBitrate:e.maxBitrate})):[{maxBitrate:m}]},_=({iceServers:e,send:t,onTracks:n,onUnpublished:a,createPeerConnection:s=i})=>{let c=s({iceServers:e,bundlePolicy:`max-bundle`}),l=new Map,u=[],d={},p=[],m=0,_,v=Promise.resolve(),y=f(async()=>{let e=await c.createOffer();await c.setLocalDescription(e),t({type:`offer`,sdp:e.sdp,id:++m})}),b=async()=>{c.getTransceivers().length>0&&await y.request()},x=async()=>{await b(),await y.settled()},S=e=>{let t=Object.keys(d).find(t=>d[t]===e);return t===void 0?void 0:c.getTransceivers().find(e=>e.mid===t)?.receiver.track},C=()=>n(p.map(e=>({...e,...S(e.sid)&&{track:S(e.sid)}})));c.onicecandidate=e=>{e.candidate&&t({type:`candidate`,candidate:e.candidate.toJSON()})},c.oniceconnectionstatechange=()=>{c.iceConnectionState===`failed`&&w()},c.ontrack=()=>C();let w=async()=>{c.restartIce(),await x()},T=e=>{let t=l.get(e);return t?(l.delete(e),c.signalingState!==`closed`&&c.removeTrack(t.transceiver.sender),!0):!1},E=async e=>{switch(e.type){case`answer`:if(e.id!==m)return;d={...d,...e.mids},await c.setRemoteDescription({type:`answer`,sdp:e.sdp});for(let e of u.splice(0))await c.addIceCandidate(e);C(),await y.answered();return;case`candidate`:c.remoteDescription?await c.addIceCandidate(e.candidate):u.push(e.candidate);return;case`sections`:for(let t=0;t<e.audio;t++)c.addTransceiver(`audio`,{direction:`recvonly`});for(let t=0;t<e.video;t++)c.addTransceiver(`video`,{direction:`recvonly`});await b();return;case`tracks`:p=e.tracks,C();return;case`unpublished`:{let t=[...l.values()].find(t=>t.sid===e.sid);if(!t)return;T(t.source),await b(),a(t.source);return}case`published`:_?.resolve(e.tracks);return;case`publish-refused`:_?.reject(new r(e.reason));return}},D=async(e,n)=>{let r=Object.entries(e).map(([e,t])=>{if(l.has(e))throw Error(`The call already sends a ${e} track: unpublish it first`);let r=t.kind===`video`&&!!n.simulcast,i=g(t,r);return{source:e,track:t,transceiver:c.addTransceiver(t,{direction:`sendonly`,...i&&{sendEncodings:i}}),simulcast:r}});if(r.length===0)return;let i=new Promise((e,t)=>_={resolve:e,reject:t});t({type:`publish`,tracks:r.map(e=>h(e.source,e.track,e.simulcast))});try{let e=await i;for(let t of r)l.set(t.source,{...t,sid:e.find(e=>e.cid===t.track.id).sid})}catch(e){for(let e of r)e.transceiver.stop();throw e}finally{_=void 0}await x()};return{receive:E,publish:(e,t={})=>{let n=v.then(()=>D(e,t));return v=n.catch(()=>{}),n},unpublish:async e=>{T(e)&&await x()},mute:(e,n)=>{let r=l.get(e);r?.sid&&(r.track.enabled=!n,t({type:`mute`,sid:r.sid,muted:n}))},restartIce:w,resumeState:async e=>{if(c.signalingState===`have-local-offer`&&(await c.setLocalDescription({type:`rollback`}),y.abandon()),!c.localDescription||!c.remoteDescription)return;let t=[...l.values()].flatMap(e=>e.sid?[{cid:e.track.id,sid:e.sid,kind:e.track.kind,source:e.source}]:[]);return{participant:e,offer:c.localDescription.sdp,answer:c.remoteDescription.sdp,tracks:t}},resumed:async()=>{y.pending&&await b()},sending:()=>new Map([...l.values()].map(e=>[e.source,{track:e.track,simulcast:e.simulcast}])),connections:async()=>[await o(c)],close:()=>{_?.reject(Error(`The call ended`)),y.reset(),c.close()}}},v=e=>Math.min(1e4,500*2**e),y=e=>{let t=new URL(e,globalThis.location?.href);return t.protocol=t.protocol.replace(/^http/,`ws`),t.href},b={1e3:`ended`,1008:`removed`},x=new Set([1011,1013]),S=e=>{let t=e.WebSocket??WebSocket,r=e.retryDelayMs??v,i=e.maxRetries??8,a=y(e.url),o,s,c=``,l=``,u=[],f=[],p=!1,m=!1,h=!1,g=!1,S=0,C=Promise.resolve(),w,T=new Promise((e,t)=>w={resolve:e,reject:t}),E=e=>{o.readyState===t.OPEN&&o.send(JSON.stringify(e))},D=n(E),O=e.guest===void 0?{}:{guest:e.guest},k=t=>e.onState?.(t),A=(e,n)=>{p||(p=!0,s?.close(),s=void 0,(o.readyState===t.OPEN||o.readyState===t.CONNECTING)&&o.close(1e3),w.reject(n??Error(`The call was left: ${e}`)),k({state:`left`,reason:e,...n!==void 0&&{error:n}}))},j=t=>{let n={iceServers:t.iceServers,send:E,onTracks:t=>{f=t,e.onTracks?.(t)},onUnpublished:t=>e.onUnpublished?.(t),...e.createPeerConnection&&{createPeerConnection:e.createPeerConnection}};return t.mode===`peer`?d(t.participant,n):_(n)},M=async t=>{switch(t.type){case`joined`:{let e=s?.sending();s?.close(),c=t.participant,l=t.call,s=j(t),S=0,k({state:`joined`}),w.resolve(F);for(let[t,{track:n,simulcast:r}]of e??[])F.publish({[t]:n},{simulcast:r}).catch(e=>A(`ended`,e));return}case`resumed`:g=!0,S=0,k({state:`joined`}),await s?.resumed();return;case`speakers`:e.onSpeakers?.(t.speakers);return;case`members`:u=t.members,e.onMembers?.(u);return;case`left`:t.reason===`rejoin`?m=!0:A(t.reason);return;case`lobby`:e.onLobby?.({guests:t.guests,links:t.links});return;default:if(D.receive(t))return;await s?.receive(t)}},N=e=>{h=!1,g=!1,o=new t(a),o.onopen=()=>{h=!0,C=C.then(async()=>{let t=e===`resume`&&s?await s.resumeState(c):void 0;E(t?{type:`resume`,call:l,...t,...O}:{type:`join`,...O})})},o.onmessage=e=>{let t=JSON.parse(String(e.data));C=C.then(()=>M(t)).catch(e=>A(`ended`,e))},o.onclose=t=>{D.lost(),C=C.then(()=>P(e,t.code))}},P=(e,t)=>{if(p)return;if(m)return m=!1,N(`join`);let n=b[t];if(n)return A(n);if(!c&&!x.has(t))return A(`refused`);if(S++,S>i)return A(c?`ended`:`unavailable`);k(c?{state:`resuming`}:{state:`connecting`});let a=e===`resume`&&h&&!g?`join`:`resume`;setTimeout(()=>{p||N(a)},r(S-1))},F={get id(){return l},get participant(){return c},members:()=>u,publish:async(e,t)=>{if(!s)throw Error(`The call was left`);await s.publish(e,t)},unpublish:async e=>{await s?.unpublish(e)},mute:(e,t)=>s?.mute(e,t),view:(e,t)=>E(t===`hidden`?{type:`view`,sids:e,width:0,height:0,hidden:!0}:{type:`view`,sids:e,...t}),restartIce:async()=>{await s?.restartIce()},leave:()=>{p||(E({type:`leave`}),A(`ended`))},tracks:()=>f,connections:async()=>s?s.connections():[],guests:D.guests};return k({state:`connecting`}),N(`join`),T},C=class extends Error{status;constructor(e,t){super(t),this.status=e,this.name=`LobbyRefused`}},w=({systemPath:t=`/api`,fetch:n=globalThis.fetch}={})=>{let r=e(t,`lobby`),i=async e=>{let t=await n(r,{...e,credentials:`omit`,cache:`no-store`});if(!t.ok)throw new C(t.status,(await t.json().catch(()=>void 0))?.detail??t.statusText);return t},a=e=>({authorization:`Bearer ${e}`});return{socketUrl:e(t,`socket`),enter:async(e,t)=>await(await i({method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({link:e,name:t})})).json(),wait:async e=>await(await i({method:`GET`,headers:a(e)})).json(),leave:async e=>{await i({method:`DELETE`,headers:a(e)})}}};export{t as GuestRefused,C as LobbyRefused,r as PublishRefused,w as guestLobby,S as joinCall};
2
+ //# debugId=8c338eca-ec96-4550-8e62-2657243b5050
@@ -1,2 +1,2 @@
1
- import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{i as n,n as r,t as i}from"./react-CR5VJ85Q.js";import{qt as a,t as o,z as s}from"./app-rTGIPCgf.js";import{c}from"./preload-helper-DedkISGJ.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=t(n(),1),u=r(),d=e({default:()=>f}),f={},p=`protobase-api-origin`,m=async e=>{e.getPlatform()===`ios`&&e.isPluginAvailable(`Keyboard`)&&await e.nativePromise(`Keyboard`,`setAccessoryBarVisible`,{isVisible:!0})},h=e=>[...e.split(`,`).map(e=>e.trim()).filter(e=>e&&!/^maximum-scale\s*=/.test(e)),`maximum-scale=1`].join(`, `),g=e=>{let t=e.querySelector(`meta[name="viewport"]`);t&&t.setAttribute(`content`,h(t.getAttribute(`content`)??``))},_=e=>{if(e.length===0)return;if(e.length>1)throw Error(`The page has ${e.length} ${p} meta tags; it may have one`);let t=e[0],n=URL.canParse(t)?new URL(t):void 0;if(!n||n.protocol!==`http:`&&n.protocol!==`https:`||n.origin!==t)throw Error(`The page's ${p} meta tag holds "${t}", which is not an http or https origin such as https://shop.example.com`);return t},v=()=>_([...document.querySelectorAll(`meta[name="${p}"]`)].map(e=>e.content)),y=t(i(),1),b=document.getElementById(`root`);if(!b)throw Error(`index.html needs an element with id "root"`);var x=a(window);x&&(g(document),m(x)),(0,u.createRoot)(b).render((0,y.jsx)(l.StrictMode,{children:(0,y.jsx)(o,{baseUrl:`${v()??``}/api/v1`,ui:s(d),locale:c(),nativeBridge:x})}));
2
- //# debugId=adbcde29-36c1-424c-a569-c15302f0078b
1
+ import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{i as n,n as r,t as i}from"./react-CR5VJ85Q.js";import{qt as a,t as o,z as s}from"./app-D1iOLNRp.js";import{c}from"./preload-helper-DedkISGJ.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=t(n(),1),u=r(),d=e({default:()=>f}),f={},p=`protobase-api-origin`,m=async e=>{e.getPlatform()===`ios`&&e.isPluginAvailable(`Keyboard`)&&await e.nativePromise(`Keyboard`,`setAccessoryBarVisible`,{isVisible:!0})},h=e=>[...e.split(`,`).map(e=>e.trim()).filter(e=>e&&!/^maximum-scale\s*=/.test(e)),`maximum-scale=1`].join(`, `),g=e=>{let t=e.querySelector(`meta[name="viewport"]`);t&&t.setAttribute(`content`,h(t.getAttribute(`content`)??``))},_=e=>{if(e.length===0)return;if(e.length>1)throw Error(`The page has ${e.length} ${p} meta tags; it may have one`);let t=e[0],n=URL.canParse(t)?new URL(t):void 0;if(!n||n.protocol!==`http:`&&n.protocol!==`https:`||n.origin!==t)throw Error(`The page's ${p} meta tag holds "${t}", which is not an http or https origin such as https://shop.example.com`);return t},v=()=>_([...document.querySelectorAll(`meta[name="${p}"]`)].map(e=>e.content)),y=t(i(),1),b=document.getElementById(`root`);if(!b)throw Error(`index.html needs an element with id "root"`);var x=a(window);x&&(g(document),m(x)),(0,u.createRoot)(b).render((0,y.jsx)(l.StrictMode,{children:(0,y.jsx)(o,{baseUrl:`${v()??``}/api/v1`,ui:s(d),locale:c(),nativeBridge:x})}));
2
+ //# debugId=d8b81d48-a924-4e55-92f8-f349e3d504dc
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{J as r,Nt as i}from"./app-rTGIPCgf.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./maplibre-lc2A-_P4.js";import{t as p}from"./cn-Bi0ZEjD9.js";var m=e(t(),1),h=512,g=85.051129,_=16,v=Array.from({length:23},(e,t)=>t),y=e=>e.type===`LineString`?e.coordinates:e.type===`MultiPolygon`?e.coordinates.flat(2):e.coordinates.flat(),b=e=>{let t=Math.max(-85.051129,Math.min(g,e))*Math.PI/180;return .5-Math.log(Math.tan(Math.PI/4+t/2))/(2*Math.PI)},x=e=>{let t=y(e),n=t.map(([e])=>e),r=t.map(([,e])=>b(e)),i=(Math.max(...n)-Math.min(...n))/360*h,a=(Math.max(...r)-Math.min(...r))*h;return Math.max(i,a)},S=(e,t)=>{let n=e.flatMap(e=>{if(!e.area)return[];let n=e.area.type===`LineString`||e.area.type===`MultiLineString`?`line`:`polygon`;return[{type:`Feature`,geometry:e.area,properties:{key:e.key,kind:n,span:x(e.area),chosen:t?.includes(e.key)??!1}}]});return{type:`FeatureCollection`,features:[...n.filter(e=>!e.properties.chosen),...n.filter(e=>e.properties.chosen)]}},C=e=>[`interpolate`,[`linear`],[`zoom`],...v.flatMap(t=>[t,[`*`,e,[`min`,1,[`max`,0,[`/`,[`-`,[`*`,[`get`,`span`],2**t],_],32]]]]])],w=e(n(),1),T=`position-area-fills`,E=[`==`,[`get`,`kind`],`polygon`],D=[`==`,[`get`,`kind`],`line`],O=(e,t)=>[`case`,[`get`,`chosen`],e,t],k=({points:e,selected:t,colors:n})=>{let r=S(e,t);if(r.features.length===0)return null;let i=[`case`,[`get`,`chosen`],n.chosen,n.area];return(0,w.jsxs)(s,{id:`position-areas`,type:`geojson`,data:r,children:[(0,w.jsx)(u,{id:T,type:`fill`,filter:E,paint:{"fill-color":i,"fill-opacity":C(O(.15,.1))}}),(0,w.jsx)(u,{id:`position-area-outlines`,type:`line`,filter:E,paint:{"line-color":i,"line-width":1.5,"line-dasharray":[3,2],"line-opacity":C(.8)}}),(0,w.jsx)(u,{id:`position-area-lines`,type:`line`,filter:D,layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":i,"line-width":6,"line-opacity":C(O(.6,.35))}})]})},A=(e,t)=>{let n=document.createElement(`span`);n.style.color=`var(${t})`,e.append(n);let r=getComputedStyle(n).color;n.remove();let i=document.createElement(`canvas`);i.width=1,i.height=1;let a=i.getContext(`2d`,{willReadFrequently:!0});if(!a)return r;a.fillStyle=r,a.fillRect(0,0,1,1);let[o,s,c,l]=a.getImageData(0,0,1,1).data;return`rgba(${o}, ${s}, ${c}, ${l/255})`},j=28,M={padding:48,maxZoom:15,duration:0},N={padding:48,maxZoom:16,duration:300},P=32,F=()=>i(`compact`,e=>new Intl.NumberFormat(e,{notation:`compact`,maximumFractionDigits:1})),I=e=>[[e.west,e.south],[e.east,e.north]],L=({style:e,layers:t,initial:n,points:i,buckets:s,fit:u,onFitted:h,onMove:g,selected:_,covered:v,onSelect:y,onClear:b,markerLabel:x,bucketLabel:S})=>{let C=(0,m.useRef)(null),[E,D]=(0,m.useState)([]),[O,L]=(0,m.useState)(),R=new globalThis.Map(i.map(e=>[e.key,e])),z=i.map(e=>e.key).join(`,`),B=u&&JSON.stringify(u),V=()=>{let e=C.current?.getMap();e&&D(r(i.map(t=>({key:t.key,...e.project([t.longitude,t.latitude])})),j))},H=()=>{let e=C.current?.getMap();if(!e)return;let t=e.getBounds(),n=e.getCenter();g({bounds:{south:t.getSouth(),west:t.getWest(),north:t.getNorth(),east:t.getEast()},zoom:e.getZoom()},{latitude:n.lat,longitude:n.lng,zoom:e.getZoom()})},U=()=>{let e=C.current?.getMap();e&&u&&(e.fitBounds(I(u),M),h(),H())};(0,m.useEffect)(V,[z]),(0,m.useEffect)(U,[B]);let W=E.find(e=>_!==void 0&&e.keys.some(e=>_.includes(e)))?.at;return(0,m.useEffect)(()=>{let e=C.current?.getMap(),t=W===void 0?void 0:R.get(W);if(!e||!t||v===0)return;let{y:n}=e.project([t.longitude,t.latitude]),r=e.getContainer().clientHeight-v;n>P&&n<r||e.easeTo({center:[t.longitude,t.latitude],offset:[0,(P-v)/2],duration:300})},[W,v]),(0,w.jsxs)(d,{ref:C,mapLib:f,mapStyle:e,initialViewState:n??{latitude:0,longitude:0,zoom:1},style:{width:`100%`,height:`100%`},onLoad:()=>{let e=C.current.getMap().getContainer();L({area:A(e,`--primary`),chosen:A(e,`--foreground`)}),V(),u?U():H()},onZoomEnd:V,onMoveEnd:H,onClick:b,children:[(0,w.jsx)(a,{showCompass:!1}),(0,w.jsx)(c,{layers:t,below:T}),O&&(0,w.jsx)(k,{points:i,selected:_,colors:O}),s.map(e=>(0,w.jsx)(l,{latitude:e.latitude,longitude:e.longitude,anchor:`center`,children:(0,w.jsx)(`button`,{type:`button`,"aria-label":S(e.count),className:`flex size-10 cursor-pointer items-center justify-center rounded-full border-2 border-background bg-primary text-xs font-semibold text-primary-foreground tabular-nums shadow`,onClick:t=>{t.stopPropagation(),C.current?.getMap().fitBounds(I(e.bounds),N)},children:F().format(e.count)})},`${e.latitude},${e.longitude}`)),E.map(e=>{let t=R.get(e.at);if(!t)return null;let n=_!==void 0&&e.keys.some(e=>_.includes(e)),r=e.keys.every(e=>R.get(e)?.approximate);return(0,w.jsx)(l,{latitude:t.latitude,longitude:t.longitude,anchor:`bottom`,style:{zIndex:+!!n},children:(0,w.jsxs)(`button`,{type:`button`,"aria-label":x(e.keys),"aria-pressed":n,className:`relative block cursor-pointer`,onClick:t=>{t.stopPropagation(),y(e.keys)},children:[(0,w.jsx)(o,{"aria-hidden":!0,"data-approximate":r||void 0,className:p(`size-8 drop-shadow`,r?n?`fill-background text-foreground`:`fill-background text-primary`:n?`fill-foreground text-background`:`fill-primary text-primary-foreground`),strokeWidth:r?2:1.5,strokeDasharray:r?`3 2`:void 0}),e.keys.length>1&&(0,w.jsx)(`span`,{className:`absolute -right-2 -top-1 min-w-5 rounded-full border border-background bg-foreground px-1 text-center text-[11px] font-medium leading-4 text-background tabular-nums`,children:e.keys.length})]})},e.at)})]})};export{L as RecordsMap};
2
- //# debugId=b55b6488-33c4-49b2-9530-1bbd80b6dc7c
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{J as r,Nt as i}from"./app-D1iOLNRp.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./maplibre-lc2A-_P4.js";import{t as p}from"./cn-Bi0ZEjD9.js";var m=e(t(),1),h=512,g=85.051129,_=16,v=Array.from({length:23},(e,t)=>t),y=e=>e.type===`LineString`?e.coordinates:e.type===`MultiPolygon`?e.coordinates.flat(2):e.coordinates.flat(),b=e=>{let t=Math.max(-85.051129,Math.min(g,e))*Math.PI/180;return .5-Math.log(Math.tan(Math.PI/4+t/2))/(2*Math.PI)},x=e=>{let t=y(e),n=t.map(([e])=>e),r=t.map(([,e])=>b(e)),i=(Math.max(...n)-Math.min(...n))/360*h,a=(Math.max(...r)-Math.min(...r))*h;return Math.max(i,a)},S=(e,t)=>{let n=e.flatMap(e=>{if(!e.area)return[];let n=e.area.type===`LineString`||e.area.type===`MultiLineString`?`line`:`polygon`;return[{type:`Feature`,geometry:e.area,properties:{key:e.key,kind:n,span:x(e.area),chosen:t?.includes(e.key)??!1}}]});return{type:`FeatureCollection`,features:[...n.filter(e=>!e.properties.chosen),...n.filter(e=>e.properties.chosen)]}},C=e=>[`interpolate`,[`linear`],[`zoom`],...v.flatMap(t=>[t,[`*`,e,[`min`,1,[`max`,0,[`/`,[`-`,[`*`,[`get`,`span`],2**t],_],32]]]]])],w=e(n(),1),T=`position-area-fills`,E=[`==`,[`get`,`kind`],`polygon`],D=[`==`,[`get`,`kind`],`line`],O=(e,t)=>[`case`,[`get`,`chosen`],e,t],k=({points:e,selected:t,colors:n})=>{let r=S(e,t);if(r.features.length===0)return null;let i=[`case`,[`get`,`chosen`],n.chosen,n.area];return(0,w.jsxs)(s,{id:`position-areas`,type:`geojson`,data:r,children:[(0,w.jsx)(u,{id:T,type:`fill`,filter:E,paint:{"fill-color":i,"fill-opacity":C(O(.15,.1))}}),(0,w.jsx)(u,{id:`position-area-outlines`,type:`line`,filter:E,paint:{"line-color":i,"line-width":1.5,"line-dasharray":[3,2],"line-opacity":C(.8)}}),(0,w.jsx)(u,{id:`position-area-lines`,type:`line`,filter:D,layout:{"line-cap":`round`,"line-join":`round`},paint:{"line-color":i,"line-width":6,"line-opacity":C(O(.6,.35))}})]})},A=(e,t)=>{let n=document.createElement(`span`);n.style.color=`var(${t})`,e.append(n);let r=getComputedStyle(n).color;n.remove();let i=document.createElement(`canvas`);i.width=1,i.height=1;let a=i.getContext(`2d`,{willReadFrequently:!0});if(!a)return r;a.fillStyle=r,a.fillRect(0,0,1,1);let[o,s,c,l]=a.getImageData(0,0,1,1).data;return`rgba(${o}, ${s}, ${c}, ${l/255})`},j=28,M={padding:48,maxZoom:15,duration:0},N={padding:48,maxZoom:16,duration:300},P=32,F=()=>i(`compact`,e=>new Intl.NumberFormat(e,{notation:`compact`,maximumFractionDigits:1})),I=e=>[[e.west,e.south],[e.east,e.north]],L=({style:e,layers:t,initial:n,points:i,buckets:s,fit:u,onFitted:h,onMove:g,selected:_,covered:v,onSelect:y,onClear:b,markerLabel:x,bucketLabel:S})=>{let C=(0,m.useRef)(null),[E,D]=(0,m.useState)([]),[O,L]=(0,m.useState)(),R=new globalThis.Map(i.map(e=>[e.key,e])),z=i.map(e=>e.key).join(`,`),B=u&&JSON.stringify(u),V=()=>{let e=C.current?.getMap();e&&D(r(i.map(t=>({key:t.key,...e.project([t.longitude,t.latitude])})),j))},H=()=>{let e=C.current?.getMap();if(!e)return;let t=e.getBounds(),n=e.getCenter();g({bounds:{south:t.getSouth(),west:t.getWest(),north:t.getNorth(),east:t.getEast()},zoom:e.getZoom()},{latitude:n.lat,longitude:n.lng,zoom:e.getZoom()})},U=()=>{let e=C.current?.getMap();e&&u&&(e.fitBounds(I(u),M),h(),H())};(0,m.useEffect)(V,[z]),(0,m.useEffect)(U,[B]);let W=E.find(e=>_!==void 0&&e.keys.some(e=>_.includes(e)))?.at;return(0,m.useEffect)(()=>{let e=C.current?.getMap(),t=W===void 0?void 0:R.get(W);if(!e||!t||v===0)return;let{y:n}=e.project([t.longitude,t.latitude]),r=e.getContainer().clientHeight-v;n>P&&n<r||e.easeTo({center:[t.longitude,t.latitude],offset:[0,(P-v)/2],duration:300})},[W,v]),(0,w.jsxs)(d,{ref:C,mapLib:f,mapStyle:e,initialViewState:n??{latitude:0,longitude:0,zoom:1},style:{width:`100%`,height:`100%`},onLoad:()=>{let e=C.current.getMap().getContainer();L({area:A(e,`--primary`),chosen:A(e,`--foreground`)}),V(),u?U():H()},onZoomEnd:V,onMoveEnd:H,onClick:b,children:[(0,w.jsx)(a,{showCompass:!1}),(0,w.jsx)(c,{layers:t,below:T}),O&&(0,w.jsx)(k,{points:i,selected:_,colors:O}),s.map(e=>(0,w.jsx)(l,{latitude:e.latitude,longitude:e.longitude,anchor:`center`,children:(0,w.jsx)(`button`,{type:`button`,"aria-label":S(e.count),className:`flex size-10 cursor-pointer items-center justify-center rounded-full border-2 border-background bg-primary text-xs font-semibold text-primary-foreground tabular-nums shadow`,onClick:t=>{t.stopPropagation(),C.current?.getMap().fitBounds(I(e.bounds),N)},children:F().format(e.count)})},`${e.latitude},${e.longitude}`)),E.map(e=>{let t=R.get(e.at);if(!t)return null;let n=_!==void 0&&e.keys.some(e=>_.includes(e)),r=e.keys.every(e=>R.get(e)?.approximate);return(0,w.jsx)(l,{latitude:t.latitude,longitude:t.longitude,anchor:`bottom`,style:{zIndex:+!!n},children:(0,w.jsxs)(`button`,{type:`button`,"aria-label":x(e.keys),"aria-pressed":n,className:`relative block cursor-pointer`,onClick:t=>{t.stopPropagation(),y(e.keys)},children:[(0,w.jsx)(o,{"aria-hidden":!0,"data-approximate":r||void 0,className:p(`size-8 drop-shadow`,r?n?`fill-background text-foreground`:`fill-background text-primary`:n?`fill-foreground text-background`:`fill-primary text-primary-foreground`),strokeWidth:r?2:1.5,strokeDasharray:r?`3 2`:void 0}),e.keys.length>1&&(0,w.jsx)(`span`,{className:`absolute -right-2 -top-1 min-w-5 rounded-full border border-background bg-foreground px-1 text-center text-[11px] font-medium leading-4 text-background tabular-nums`,children:e.keys.length})]})},e.at)})]})};export{L as RecordsMap};
2
+ //# debugId=acdfc684-b8f6-4084-b5b5-84f89c067097
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{G as r,V as i,q as a}from"./vendor-Kvdo8Jrw.js";import{$ as o,A as s,At as c,B as l,Bt as u,C as d,Ct as f,D as ee,Dt as p,E as m,Et as h,F as te,Ft as g,G as _,Gt as v,H as ne,Ht as re,I as ie,It as ae,Jt as oe,K as se,Kt as ce,L as le,Lt as ue,M as y,Mt as b,N as de,O as fe,Ot as x,P as S,Pt as C,Q as w,R as T,Rt as E,S as D,St as O,T as k,Tt as A,U as j,Ut as M,V as N,Vt as P,W as F,Wt as I,X as L,Y as R,Z as z,_ as B,_t as V,a as pe,at as me,b as he,bt as ge,c as _e,ct as H,d as ve,dt as ye,et as be,f as xe,ft as Se,g as Ce,gt as we,h as Te,ht as Ee,i as De,it as Oe,j as U,jt as W,k as ke,kt as Ae,l as je,lt as Me,m as Ne,mt as G,n as Pe,nt as Fe,o as Ie,ot as Le,p as Re,pt as ze,q as Be,r as Ve,rt as He,s as Ue,st as We,t as Ge,tt as Ke,u as qe,ut as Je,v as Ye,vt as Xe,w as Ze,wt as Qe,x as $e,xt as et,y as tt,yt as nt,z as rt,zt as it}from"./app-rTGIPCgf.js";import{n as at,o as ot}from"./preload-helper-DedkISGJ.js";import{t as K}from"./cn-Bi0ZEjD9.js";var q={name:`phone`,size:24,node:[[`path`,{d:`M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384`,key:`9njp5v`}]]};q.node;var J=ot(q),st=e=>new Date(Date.parse(`${e}T00:00:00Z`)-864e5).toISOString().slice(0,10),ct=(e,t,n=b())=>W(Date.parse(e),n)===W(Date.parse(t),n),lt=(e,t=Date.now(),n=b())=>{let r=W(Date.parse(e),n),i=W(t,n);return r===i?s(`today`):r===st(i)?s(`yesterday`):c(Date.parse(`${r}T00:00:00Z`))},Y=e(n(),1),ut=({tone:e=`day`,label:t})=>{let n=t??s(`newMessages`),r=K(`h-px flex-1`,e===`new`?`bg-danger`:`bg-border`);return(0,Y.jsxs)(`div`,{role:`separator`,"aria-label":n,"data-tone":e,"data-chat-divider":``,className:`flex items-center gap-3 text-xs font-medium`,children:[(0,Y.jsx)(`span`,{className:r}),(0,Y.jsx)(`span`,{className:e===`new`?`text-danger`:`text-muted-foreground`,children:n}),(0,Y.jsx)(`span`,{className:r})]})},dt=({row:e,resource:t,recordKey:n,...r})=>{let i=L(),a=H(),o=t??i?.resource??a?.model.name;if(o===void 0)throw Error(`RecordLink needs a resource outside a list display or a record`);return(0,Y.jsx)(h,{to:{kind:`record`,resource:o,key:e?e.key:n},...r})},X=e(t(),1),ft=e=>{if(e?.kind!==`signed-in`)return;let{id:t,name:n}=e.user;return{id:t,...n&&{name:n}}},pt=()=>{let e=ce()?.state;return(0,X.useMemo)(()=>ft(e),[e])},Z=(e,t)=>{let{address:n,href:r,open:i}=p(),a=n?.kind===`record`&&n.resource===e&&n.key===t&&n.call===`join`,o=e=>({href:e,onFollow:()=>i(e)});return{joining:a,join:o(r({kind:`record`,resource:e,key:t,call:`join`})),leave:o(r({kind:`record`,resource:e,key:t}))}},Q=({resource:e,recordKey:t,...n})=>{let{joining:r,leave:i}=Z(e,t);return r?(0,Y.jsx)(U,{leave:i,...n},`${e}/${t}`):null},$=(e,t)=>{let n=M(),r=a(),o=v.recordCalls(e,t),s=i({queryKey:o,queryFn:()=>n.calls(e,t)});return(0,X.useEffect)(()=>{let i=v.recordCalls(e,t),a=n.channel(e,t),o=a.on(oe,e=>e.server&&r.setQueryData(i,e.payload.items)),s=a.onStatus(e=>e.state===`joined`&&void r.invalidateQueries({queryKey:i}));return()=>{o(),s(),a.leave()}},[n,r,e,t]),{...s,ongoing:s.data?.find(e=>e.ended_at===null)}},mt=({resource:e,recordKey:t,className:n})=>{let{ongoing:r,isPending:i}=$(e,t),{joining:a,join:o}=Z(e,t);if(i)return null;if(!r)return a?null:(0,Y.jsxs)(x,{to:o,className:K(E({size:`sm`}),n),children:[(0,Y.jsx)(J,{className:`size-3.5`}),y(`startCall`)]});let s=r.members.length;return(0,Y.jsxs)(`span`,{role:`status`,className:K(`inline-flex items-center gap-1.5 rounded-md bg-success-soft px-2 py-0.5 text-body text-foreground`,n),children:[(0,Y.jsx)(J,{className:`size-3.5 text-success`}),y(`inProgress`),(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,Y.jsx)(`span`,{"aria-label":y(`people`,{count:s}),children:s}),!a&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,Y.jsx)(x,{to:o,className:E({variant:`primary`,size:`sm`}),children:y(`join`)})]})]})},ht={width:640,height:480},gt=e=>e.flatMap(e=>{if(`src`in e)return[{image:{url:e.src},alt:e.alt}];let t=Ae(e,ht);return t?[{image:t,alt:e.alt??``}]:[]}),_t=({images:e,label:t,fit:n=`cover`,swipe:r=!0,className:i})=>{let a=gt(e),s=z(a.length);return(0,Y.jsxs)(`div`,{role:`group`,"aria-roledescription":`carousel`,"aria-label":t,className:K(`group/carousel relative overflow-hidden`,i),children:[(0,Y.jsx)(w,{"data-carousel-track":!0,carousel:s,swipe:r,slides:a.map(({image:e,alt:t})=>(0,Y.jsx)(Se,{image:e,alt:t,loading:`lazy`,className:K(`size-full`,n===`cover`?`object-cover`:`object-contain`)}))}),(0,Y.jsx)(o,{carousel:s,count:a.length,swipe:r,reveal:`group-hover/carousel:opacity-100`,className:`inset-0`})]})},vt=({name:e,label:t,options:n,value:r,onChange:i})=>(0,Y.jsx)(`div`,{role:`radiogroup`,"aria-label":t,className:`flex flex-col gap-2`,children:n.map(t=>(0,Y.jsxs)(`label`,{className:K(`block rounded-lg border p-3 transition-colors has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary`,t.disabled?`cursor-default bg-background opacity-60`:t.value===r?`cursor-pointer border-primary bg-primary-soft`:`cursor-pointer bg-background hover:bg-surface`),children:[(0,Y.jsx)(`input`,{type:`radio`,name:e,value:t.value,checked:t.value===r,disabled:t.disabled,onChange:()=>i(t.value),className:`sr-only`}),(0,Y.jsx)(`span`,{className:K(`block font-medium`,t.value===r&&`text-primary-text`),children:t.label}),t.description&&(0,Y.jsx)(`span`,{className:`mt-0.5 block text-xs leading-snug text-muted-foreground`,children:t.description})]},t.value))}),yt=(e,t,n)=>{let o=M(),s=a(),c=[...new Set(n)].sort();return i({queryKey:v.pickedLabels(e.name,c.join(`,`)),enabled:c.length>0,placeholderData:r,queryFn:()=>Oe(s,o,e,c,t)}).data??new Map},bt=e=>{let{resources:t,views:n}=it(),r=t[e.resource];if(!r)throw Error(`RecordPicker: the app has no resource named "${e.resource}"`);if(r.primaryKey.length!==1)throw Error(`RecordPicker: "${e.resource}" has a composite key, which a picker cannot name`);let i=n[e.resource],a=e.multiple?e.value:e.value===void 0?[]:[e.value],[o,s]=(0,X.useState)({}),c=yt(r,i,a),l=e=>o[e]??c.get(e)??e,u=(e,t)=>s(n=>({...n,[e]:t}));if(!e.multiple){let{value:t,onChange:n}=e;return(0,Y.jsx)(G,{target:r,view:i,value:t??``,label:t===void 0?void 0:l(t),invalid:e.invalid,onChange:(e,t)=>{u(e,t),n(e)}})}let{value:d,onChange:f}=e;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(G,{target:r,view:i,value:``,chosen:d,several:!0,invalid:e.invalid,onChange:(e,t)=>{u(e,t),f(d.includes(e)?d.filter(t=>t!==e):[...d,e])}}),d.length>0&&(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:d.map(e=>(0,Y.jsx)(ye,{label:l(e),onRemove:()=>f(d.filter(t=>t!==e))},e))})]})};export{$e as ActionCard,Me as ActionInputError,re as ApiProvider,Ge as App,h as AppLink,xe as AssistantDock,se as AuthLayout,Ke as AvailabilityMark,ue as Button,mt as CallMark,U as CallView,_t as Carousel,ut as ChatDivider,ke as ChatMessage,fe as ChatThread,vt as Choices,l as CodeForm,tt as CompactTable,d as Composer,ae as Dialog,Ce as DiffView,Qe as Field,he as FieldList,je as Form,f as Input,He as LogoMark,Je as Markdown,k as MentionBox,Ze as MentionedText,Be as MenuSelect,ze as OtpInput,Ne as PartView,Q as RecordCall,dt as RecordLink,bt as RecordPicker,N as ResendCodeButton,g as ResponsiveDialog,C as Section,at as Segmented,D as SidePanel,be as SignInPrompt,u as Spinner,Fe as StatusMark,Te as StepList,O as Textarea,ne as allowDelayMs,E as buttonClass,lt as chatDayLabel,Ee as definePlugin,we as defineUi,B as diffStats,m as emptyDraft,Pe as isConflict,j as isFramed,ee as mentionedIds,T as mergeUi,Ye as parseDiff,te as pluginApi,ie as protobaseVersion,ct as sameChatDay,Xe as statusRefreshMs,rt as uiFromModule,S as useApiToken,p as useAppAddress,F as useArmedAfterFocus,ve as useAssistant,qe as useAssistantClient,Re as useBackendData,M as useClient,me as useFacets,A as useFieldControl,_ as useGuardedPress,Le as useHistogram,De as useInbox,H as useLayoutRecord,et as useList,R as useListDisplay,pe as useMarkNotificationsRead,V as useMembers,P as useMeta,nt as useOwnStatus,le as usePlugin,_e as usePresence,Ue as usePushNotifications,de as useRecord,Z as useRecordCallAddress,$ as useRecordCalls,I as useResourceClient,We as useSeries,pt as useSignedInUser,ge as useStatuses,Ie as useUnreadNotifications,Ve as useUpdateRecord};
2
- //# debugId=20e6cda7-3154-46ed-ba62-6d01ee2dca95
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{G as r,V as i,q as a}from"./vendor-Kvdo8Jrw.js";import{$ as o,A as s,At as c,B as l,Bt as u,C as d,Ct as f,D as ee,Dt as p,E as m,Et as h,F as te,Ft as g,G as _,Gt as v,H as ne,Ht as re,I as ie,It as ae,Jt as oe,K as se,Kt as ce,L as le,Lt as ue,M as y,Mt as b,N as de,O as fe,Ot as x,P as S,Pt as C,Q as w,R as T,Rt as E,S as D,St as O,T as k,Tt as A,U as j,Ut as M,V as N,Vt as P,W as F,Wt as I,X as L,Y as R,Z as z,_ as B,_t as V,a as pe,at as me,b as he,bt as ge,c as _e,ct as H,d as ve,dt as ye,et as be,f as xe,ft as Se,g as Ce,gt as we,h as Te,ht as Ee,i as De,it as Oe,j as U,jt as W,k as ke,kt as Ae,l as je,lt as Me,m as Ne,mt as G,n as Pe,nt as Fe,o as Ie,ot as Le,p as Re,pt as ze,q as Be,r as Ve,rt as He,s as Ue,st as We,t as Ge,tt as Ke,u as qe,ut as Je,v as Ye,vt as Xe,w as Ze,wt as Qe,x as $e,xt as et,y as tt,yt as nt,z as rt,zt as it}from"./app-D1iOLNRp.js";import{n as at,o as ot}from"./preload-helper-DedkISGJ.js";import{t as K}from"./cn-Bi0ZEjD9.js";var q={name:`phone`,size:24,node:[[`path`,{d:`M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384`,key:`9njp5v`}]]};q.node;var J=ot(q),st=e=>new Date(Date.parse(`${e}T00:00:00Z`)-864e5).toISOString().slice(0,10),ct=(e,t,n=b())=>W(Date.parse(e),n)===W(Date.parse(t),n),lt=(e,t=Date.now(),n=b())=>{let r=W(Date.parse(e),n),i=W(t,n);return r===i?s(`today`):r===st(i)?s(`yesterday`):c(Date.parse(`${r}T00:00:00Z`))},Y=e(n(),1),ut=({tone:e=`day`,label:t})=>{let n=t??s(`newMessages`),r=K(`h-px flex-1`,e===`new`?`bg-danger`:`bg-border`);return(0,Y.jsxs)(`div`,{role:`separator`,"aria-label":n,"data-tone":e,"data-chat-divider":``,className:`flex items-center gap-3 text-xs font-medium`,children:[(0,Y.jsx)(`span`,{className:r}),(0,Y.jsx)(`span`,{className:e===`new`?`text-danger`:`text-muted-foreground`,children:n}),(0,Y.jsx)(`span`,{className:r})]})},dt=({row:e,resource:t,recordKey:n,...r})=>{let i=L(),a=H(),o=t??i?.resource??a?.model.name;if(o===void 0)throw Error(`RecordLink needs a resource outside a list display or a record`);return(0,Y.jsx)(h,{to:{kind:`record`,resource:o,key:e?e.key:n},...r})},X=e(t(),1),ft=e=>{if(e?.kind!==`signed-in`)return;let{id:t,name:n}=e.user;return{id:t,...n&&{name:n}}},pt=()=>{let e=ce()?.state;return(0,X.useMemo)(()=>ft(e),[e])},Z=(e,t)=>{let{address:n,href:r,open:i}=p(),a=n?.kind===`record`&&n.resource===e&&n.key===t&&n.call===`join`,o=e=>({href:e,onFollow:()=>i(e)});return{joining:a,join:o(r({kind:`record`,resource:e,key:t,call:`join`})),leave:o(r({kind:`record`,resource:e,key:t}))}},Q=({resource:e,recordKey:t,...n})=>{let{joining:r,leave:i}=Z(e,t);return r?(0,Y.jsx)(U,{leave:i,...n},`${e}/${t}`):null},$=(e,t)=>{let n=M(),r=a(),o=v.recordCalls(e,t),s=i({queryKey:o,queryFn:()=>n.calls(e,t)});return(0,X.useEffect)(()=>{let i=v.recordCalls(e,t),a=n.channel(e,t),o=a.on(oe,e=>e.server&&r.setQueryData(i,e.payload.items)),s=a.onStatus(e=>e.state===`joined`&&void r.invalidateQueries({queryKey:i}));return()=>{o(),s(),a.leave()}},[n,r,e,t]),{...s,ongoing:s.data?.find(e=>e.ended_at===null)}},mt=({resource:e,recordKey:t,className:n})=>{let{ongoing:r,isPending:i}=$(e,t),{joining:a,join:o}=Z(e,t);if(i)return null;if(!r)return a?null:(0,Y.jsxs)(x,{to:o,className:K(E({size:`sm`}),n),children:[(0,Y.jsx)(J,{className:`size-3.5`}),y(`startCall`)]});let s=r.members.length;return(0,Y.jsxs)(`span`,{role:`status`,className:K(`inline-flex items-center gap-1.5 rounded-md bg-success-soft px-2 py-0.5 text-body text-foreground`,n),children:[(0,Y.jsx)(J,{className:`size-3.5 text-success`}),y(`inProgress`),(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,Y.jsx)(`span`,{"aria-label":y(`people`,{count:s}),children:s}),!a&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,Y.jsx)(x,{to:o,className:E({variant:`primary`,size:`sm`}),children:y(`join`)})]})]})},ht={width:640,height:480},gt=e=>e.flatMap(e=>{if(`src`in e)return[{image:{url:e.src},alt:e.alt}];let t=Ae(e,ht);return t?[{image:t,alt:e.alt??``}]:[]}),_t=({images:e,label:t,fit:n=`cover`,swipe:r=!0,className:i})=>{let a=gt(e),s=z(a.length);return(0,Y.jsxs)(`div`,{role:`group`,"aria-roledescription":`carousel`,"aria-label":t,className:K(`group/carousel relative overflow-hidden`,i),children:[(0,Y.jsx)(w,{"data-carousel-track":!0,carousel:s,swipe:r,slides:a.map(({image:e,alt:t})=>(0,Y.jsx)(Se,{image:e,alt:t,loading:`lazy`,className:K(`size-full`,n===`cover`?`object-cover`:`object-contain`)}))}),(0,Y.jsx)(o,{carousel:s,count:a.length,swipe:r,reveal:`group-hover/carousel:opacity-100`,className:`inset-0`})]})},vt=({name:e,label:t,options:n,value:r,onChange:i})=>(0,Y.jsx)(`div`,{role:`radiogroup`,"aria-label":t,className:`flex flex-col gap-2`,children:n.map(t=>(0,Y.jsxs)(`label`,{className:K(`block rounded-lg border p-3 transition-colors has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary`,t.disabled?`cursor-default bg-background opacity-60`:t.value===r?`cursor-pointer border-primary bg-primary-soft`:`cursor-pointer bg-background hover:bg-surface`),children:[(0,Y.jsx)(`input`,{type:`radio`,name:e,value:t.value,checked:t.value===r,disabled:t.disabled,onChange:()=>i(t.value),className:`sr-only`}),(0,Y.jsx)(`span`,{className:K(`block font-medium`,t.value===r&&`text-primary-text`),children:t.label}),t.description&&(0,Y.jsx)(`span`,{className:`mt-0.5 block text-xs leading-snug text-muted-foreground`,children:t.description})]},t.value))}),yt=(e,t,n)=>{let o=M(),s=a(),c=[...new Set(n)].sort();return i({queryKey:v.pickedLabels(e.name,c.join(`,`)),enabled:c.length>0,placeholderData:r,queryFn:()=>Oe(s,o,e,c,t)}).data??new Map},bt=e=>{let{resources:t,views:n}=it(),r=t[e.resource];if(!r)throw Error(`RecordPicker: the app has no resource named "${e.resource}"`);if(r.primaryKey.length!==1)throw Error(`RecordPicker: "${e.resource}" has a composite key, which a picker cannot name`);let i=n[e.resource],a=e.multiple?e.value:e.value===void 0?[]:[e.value],[o,s]=(0,X.useState)({}),c=yt(r,i,a),l=e=>o[e]??c.get(e)??e,u=(e,t)=>s(n=>({...n,[e]:t}));if(!e.multiple){let{value:t,onChange:n}=e;return(0,Y.jsx)(G,{target:r,view:i,value:t??``,label:t===void 0?void 0:l(t),invalid:e.invalid,onChange:(e,t)=>{u(e,t),n(e)}})}let{value:d,onChange:f}=e;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(G,{target:r,view:i,value:``,chosen:d,several:!0,invalid:e.invalid,onChange:(e,t)=>{u(e,t),f(d.includes(e)?d.filter(t=>t!==e):[...d,e])}}),d.length>0&&(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:d.map(e=>(0,Y.jsx)(ye,{label:l(e),onRemove:()=>f(d.filter(t=>t!==e))},e))})]})};export{$e as ActionCard,Me as ActionInputError,re as ApiProvider,Ge as App,h as AppLink,xe as AssistantDock,se as AuthLayout,Ke as AvailabilityMark,ue as Button,mt as CallMark,U as CallView,_t as Carousel,ut as ChatDivider,ke as ChatMessage,fe as ChatThread,vt as Choices,l as CodeForm,tt as CompactTable,d as Composer,ae as Dialog,Ce as DiffView,Qe as Field,he as FieldList,je as Form,f as Input,He as LogoMark,Je as Markdown,k as MentionBox,Ze as MentionedText,Be as MenuSelect,ze as OtpInput,Ne as PartView,Q as RecordCall,dt as RecordLink,bt as RecordPicker,N as ResendCodeButton,g as ResponsiveDialog,C as Section,at as Segmented,D as SidePanel,be as SignInPrompt,u as Spinner,Fe as StatusMark,Te as StepList,O as Textarea,ne as allowDelayMs,E as buttonClass,lt as chatDayLabel,Ee as definePlugin,we as defineUi,B as diffStats,m as emptyDraft,Pe as isConflict,j as isFramed,ee as mentionedIds,T as mergeUi,Ye as parseDiff,te as pluginApi,ie as protobaseVersion,ct as sameChatDay,Xe as statusRefreshMs,rt as uiFromModule,S as useApiToken,p as useAppAddress,F as useArmedAfterFocus,ve as useAssistant,qe as useAssistantClient,Re as useBackendData,M as useClient,me as useFacets,A as useFieldControl,_ as useGuardedPress,Le as useHistogram,De as useInbox,H as useLayoutRecord,et as useList,R as useListDisplay,pe as useMarkNotificationsRead,V as useMembers,P as useMeta,nt as useOwnStatus,le as usePlugin,_e as usePresence,Ue as usePushNotifications,de as useRecord,Z as useRecordCallAddress,$ as useRecordCalls,I as useResourceClient,We as useSeries,pt as useSignedInUser,ge as useStatuses,Ie as useUnreadNotifications,Ve as useUpdateRecord};
2
+ //# debugId=8c34ff5c-0562-4f94-8f07-dbbcd08a9666
@@ -18,14 +18,14 @@
18
18
  }
19
19
  document.documentElement.dataset.theme = stored === 'light' || stored === 'dark' ? stored : matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
20
20
  </script>
21
- <script type="importmap">{"imports":{"react":"/assets/shared-react-CuZpzdyh.js","react/jsx-runtime":"/assets/shared-react-jsx-runtime-Csr2Kx2w.js","react-dom":"/assets/shared-react-dom-BNlY7-7i.js","@protobase/ui":"/assets/shared-protobase-ui-g5s2nMVT.js"}}</script>
22
- <script type="module" crossorigin src="/assets/index-CtvN4pNs.js"></script>
21
+ <script type="importmap">{"imports":{"react":"/assets/shared-react-CuZpzdyh.js","react/jsx-runtime":"/assets/shared-react-jsx-runtime-Csr2Kx2w.js","react-dom":"/assets/shared-react-dom-BNlY7-7i.js","@protobase/ui":"/assets/shared-protobase-ui-CMNP9cBW.js"}}</script>
22
+ <script type="module" crossorigin src="/assets/index-DYuB1IqS.js"></script>
23
23
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/react-CR5VJ85Q.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/vendor-Kvdo8Jrw.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/cn-Bi0ZEjD9.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DedkISGJ.js">
28
- <link rel="modulepreload" crossorigin href="/assets/app-rTGIPCgf.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/app-D1iOLNRp.js">
29
29
  <link rel="stylesheet" crossorigin href="/assets/app-GUjJKojE.css">
30
30
  <link rel="stylesheet" crossorigin href="/assets/index-Or2wt-ck.css">
31
31
  <link rel="stylesheet" href="/protobase.theme.css">
@@ -1,12 +1,12 @@
1
1
  {
2
- "protobase": "0.66.4",
2
+ "protobase": "0.66.6",
3
3
  "pluginApi": 1,
4
4
  "paths": [
5
5
  "/index.html",
6
6
  "/assets",
7
7
  "/protobase.sw.js"
8
8
  ],
9
- "builtAt": 1793396062215,
9
+ "builtAt": 1793562147122,
10
10
  "native": {
11
11
  "@capacitor/android": "8.5.3",
12
12
  "@capacitor/app": "8.1.2",
@@ -1,5 +1,5 @@
1
- const cacheName = "protobase-shell-1945889a1b86784a"
2
- const precache = ["/index.html","/assets/shared-react-CuZpzdyh.js","/assets/shared-react-jsx-runtime-Csr2Kx2w.js","/assets/shared-react-dom-BNlY7-7i.js","/assets/shared-protobase-ui-g5s2nMVT.js","/assets/index-CtvN4pNs.js","/assets/rolldown-runtime-hePW80VL.js","/assets/react-CR5VJ85Q.js","/assets/vendor-Kvdo8Jrw.js","/assets/cn-Bi0ZEjD9.js","/assets/preload-helper-DedkISGJ.js","/assets/app-rTGIPCgf.js","/assets/app-GUjJKojE.css","/assets/index-Or2wt-ck.css","/protobase.theme.css","/protobase.favicon.svg"]
1
+ const cacheName = "protobase-shell-db22d5edbef1ad4e"
2
+ const precache = ["/index.html","/assets/shared-react-CuZpzdyh.js","/assets/shared-react-jsx-runtime-Csr2Kx2w.js","/assets/shared-react-dom-BNlY7-7i.js","/assets/shared-protobase-ui-CMNP9cBW.js","/assets/index-DYuB1IqS.js","/assets/rolldown-runtime-hePW80VL.js","/assets/react-CR5VJ85Q.js","/assets/vendor-Kvdo8Jrw.js","/assets/cn-Bi0ZEjD9.js","/assets/preload-helper-DedkISGJ.js","/assets/app-D1iOLNRp.js","/assets/app-GUjJKojE.css","/assets/index-Or2wt-ck.css","/protobase.theme.css","/protobase.favicon.svg"]
3
3
  const revalidated = ["/protobase.theme.css","/protobase.favicon.svg"]
4
4
 
5
5
  const fromCache = (request) =>