livedesk 0.1.605 → 0.1.607

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,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LiveDeskApp-Bv0fQKd_.js","assets/icons-JxbtiHLQ.js","assets/supabase-C0Z0FS3K.js","assets/react-hDor0Pi9.js","assets/LiveDeskApp-ChGXEkMA.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LiveDeskApp-Dw86X0VP.js","assets/icons-JxbtiHLQ.js","assets/supabase-C0Z0FS3K.js","assets/react-hDor0Pi9.js","assets/LiveDeskApp-ChGXEkMA.css"])))=>i.map(i=>d[i]);
2
2
  import{r as Ov,a as jn,A as qe,M as Uv,C as Cd,S as _v,E as Bd,b as gf,c as Wd,L as Af,T as Mf,d as Ju,e as $d,f as Wu,W as Hv,R as Cv,g as Bv,D as Df,N as Fd,h as qv,i as Rv,j as qd,k as wv,G as Id,l as Yv}from"./icons-JxbtiHLQ.js";import{r as Gv}from"./react-hDor0Pi9.js";(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const T of document.querySelectorAll('link[rel="modulepreload"]'))s(T);new MutationObserver(T=>{for(const E of T)if(E.type==="childList")for(const A of E.addedNodes)A.tagName==="LINK"&&A.rel==="modulepreload"&&s(A)}).observe(document,{childList:!0,subtree:!0});function v(T){const E={};return T.integrity&&(E.integrity=T.integrity),T.referrerPolicy&&(E.referrerPolicy=T.referrerPolicy),T.crossOrigin==="use-credentials"?E.credentials="include":T.crossOrigin==="anonymous"?E.credentials="omit":E.credentials="same-origin",E}function s(T){if(T.ep)return;T.ep=!0;const E=v(T);fetch(T.href,E)}})();const Lv="modulepreload",Xv=function(d){return"/"+d},Rd={},Qv=function(r,v,s){let T=Promise.resolve();if(v&&v.length>0){let C=function(w){return Promise.all(w.map(ll=>Promise.resolve(ll).then(N=>({status:"fulfilled",value:N}),N=>({status:"rejected",reason:N}))))};document.getElementsByTagName("link");const A=document.querySelector("meta[property=csp-nonce]"),H=A?.nonce||A?.getAttribute("nonce");T=C(v.map(w=>{if(w=Xv(w),w in Rd)return;Rd[w]=!0;const ll=w.endsWith(".css"),N=ll?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${w}"]${N}`))return;const K=document.createElement("link");if(K.rel=ll?"stylesheet":Lv,ll||(K.as="script"),K.crossOrigin="",K.href=w,H&&K.setAttribute("nonce",H),document.head.appendChild(K),ll)return new Promise((Zl,Cl)=>{K.addEventListener("load",Zl),K.addEventListener("error",()=>Cl(new Error(`Unable to preload CSS for ${w}`)))})}))}function E(A){const H=new Event("vite:preloadError",{cancelable:!0});if(H.payload=A,window.dispatchEvent(H),!H.defaultPrevented)throw A}return T.then(A=>{for(const H of A||[])H.status==="rejected"&&E(H.reason);return r().catch(E)})};var Sf={exports:{}},gn={};var wd;function Vv(){if(wd)return gn;wd=1;var d=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function v(s,T,E){var A=null;if(E!==void 0&&(A=""+E),T.key!==void 0&&(A=""+T.key),"key"in T){E={};for(var H in T)H!=="key"&&(E[H]=T[H])}else E=T;return T=E.ref,{$$typeof:d,type:s,key:A,ref:T!==void 0?T:null,props:E}}return gn.Fragment=r,gn.jsx=v,gn.jsxs=v,gn}var Yd;function Zv(){return Yd||(Yd=1,Sf.exports=Vv()),Sf.exports}var c=Zv(),bf={exports:{}},Sn={},pf={exports:{}},jf={};var Gd;function Kv(){return Gd||(Gd=1,(function(d){function r(x,M){var B=x.length;x.push(M);l:for(;0<B;){var tl=B-1>>>1,al=x[tl];if(0<T(al,M))x[tl]=M,x[B]=al,B=tl;else break l}}function v(x){return x.length===0?null:x[0]}function s(x){if(x.length===0)return null;var M=x[0],B=x.pop();if(B!==M){x[0]=B;l:for(var tl=0,al=x.length,El=al>>>1;tl<El;){var cl=2*(tl+1)-1,k=x[cl],gl=cl+1,re=x[gl];if(0>T(k,B))gl<al&&0>T(re,k)?(x[tl]=re,x[gl]=B,tl=gl):(x[tl]=k,x[cl]=B,tl=cl);else if(gl<al&&0>T(re,B))x[tl]=re,x[gl]=B,tl=gl;else break l}}return M}function T(x,M){var B=x.sortIndex-M.sortIndex;return B!==0?B:x.id-M.id}if(d.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var E=performance;d.unstable_now=function(){return E.now()}}else{var A=Date,H=A.now();d.unstable_now=function(){return A.now()-H}}var C=[],w=[],ll=1,N=null,K=3,Zl=!1,Cl=!1,Kl=!1,_t=!1,Ht=typeof setTimeout=="function"?setTimeout:null,xa=typeof clearTimeout=="function"?clearTimeout:null,Jl=typeof setImmediate<"u"?setImmediate:null;function Re(x){for(var M=v(w);M!==null;){if(M.callback===null)s(w);else if(M.startTime<=x)s(w),M.sortIndex=M.expirationTime,r(C,M);else break;M=v(w)}}function ot(x){if(Kl=!1,Re(x),!Cl)if(v(C)!==null)Cl=!0,oe||(oe=!0,kl());else{var M=v(w);M!==null&&ge(ot,M.startTime-x)}}var oe=!1,ye=-1,ue=5,Ct=-1;function Tn(){return _t?!0:!(d.unstable_now()-Ct<ue)}function Bt(){if(_t=!1,oe){var x=d.unstable_now();Ct=x;var M=!0;try{l:{Cl=!1,Kl&&(Kl=!1,xa(ye),ye=-1),Zl=!0;var B=K;try{e:{for(Re(x),N=v(C);N!==null&&!(N.expirationTime>x&&Tn());){var tl=N.callback;if(typeof tl=="function"){N.callback=null,K=N.priorityLevel;var al=tl(N.expirationTime<=x);if(x=d.unstable_now(),typeof al=="function"){N.callback=al,Re(x),M=!0;break e}N===v(C)&&s(C),Re(x)}else s(C);N=v(C)}if(N!==null)M=!0;else{var El=v(w);El!==null&&ge(ot,El.startTime-x),M=!1}}break l}finally{N=null,K=B,Zl=!1}M=void 0}}finally{M?kl():oe=!1}}}var kl;if(typeof Jl=="function")kl=function(){Jl(Bt)};else if(typeof MessageChannel<"u"){var En=new MessageChannel,za=En.port2;En.port1.onmessage=Bt,kl=function(){za.postMessage(null)}}else kl=function(){Ht(Bt,0)};function ge(x,M){ye=Ht(function(){x(d.unstable_now())},M)}d.unstable_IdlePriority=5,d.unstable_ImmediatePriority=1,d.unstable_LowPriority=4,d.unstable_NormalPriority=3,d.unstable_Profiling=null,d.unstable_UserBlockingPriority=2,d.unstable_cancelCallback=function(x){x.callback=null},d.unstable_forceFrameRate=function(x){0>x||125<x?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ue=0<x?Math.floor(1e3/x):5},d.unstable_getCurrentPriorityLevel=function(){return K},d.unstable_next=function(x){switch(K){case 1:case 2:case 3:var M=3;break;default:M=K}var B=K;K=M;try{return x()}finally{K=B}},d.unstable_requestPaint=function(){_t=!0},d.unstable_runWithPriority=function(x,M){switch(x){case 1:case 2:case 3:case 4:case 5:break;default:x=3}var B=K;K=x;try{return M()}finally{K=B}},d.unstable_scheduleCallback=function(x,M,B){var tl=d.unstable_now();switch(typeof B=="object"&&B!==null?(B=B.delay,B=typeof B=="number"&&0<B?tl+B:tl):B=tl,x){case 1:var al=-1;break;case 2:al=250;break;case 5:al=1073741823;break;case 4:al=1e4;break;default:al=5e3}return al=B+al,x={id:ll++,callback:M,priorityLevel:x,startTime:B,expirationTime:al,sortIndex:-1},B>tl?(x.sortIndex=B,r(w,x),v(C)===null&&x===v(w)&&(Kl?(xa(ye),ye=-1):Kl=!0,ge(ot,B-tl))):(x.sortIndex=al,r(C,x),Cl||Zl||(Cl=!0,oe||(oe=!0,kl()))),x},d.unstable_shouldYield=Tn,d.unstable_wrapCallback=function(x){var M=K;return function(){var B=K;K=M;try{return x.apply(this,arguments)}finally{K=B}}}})(jf)),jf}var Ld;function Jv(){return Ld||(Ld=1,pf.exports=Kv()),pf.exports}var Xd;function kv(){if(Xd)return Sn;Xd=1;var d=Jv(),r=Ov(),v=Gv();function s(l){var e="https://react.dev/errors/"+l;if(1<arguments.length){e+="?args[]="+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)e+="&args[]="+encodeURIComponent(arguments[t])}return"Minified React error #"+l+"; visit "+e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function T(l){return!(!l||l.nodeType!==1&&l.nodeType!==9&&l.nodeType!==11)}function E(l){var e=l,t=l;if(l.alternate)for(;e.return;)e=e.return;else{l=e;do e=l,(e.flags&4098)!==0&&(t=e.return),l=e.return;while(l)}return e.tag===3?t:null}function A(l){if(l.tag===13){var e=l.memoizedState;if(e===null&&(l=l.alternate,l!==null&&(e=l.memoizedState)),e!==null)return e.dehydrated}return null}function H(l){if(l.tag===31){var e=l.memoizedState;if(e===null&&(l=l.alternate,l!==null&&(e=l.memoizedState)),e!==null)return e.dehydrated}return null}function C(l){if(E(l)!==l)throw Error(s(188))}function w(l){var e=l.alternate;if(!e){if(e=E(l),e===null)throw Error(s(188));return e!==l?null:l}for(var t=l,a=e;;){var n=t.return;if(n===null)break;var u=n.alternate;if(u===null){if(a=n.return,a!==null){t=a;continue}break}if(n.child===u.child){for(u=n.child;u;){if(u===t)return C(n),l;if(u===a)return C(n),e;u=u.sibling}throw Error(s(188))}if(t.return!==a.return)t=n,a=u;else{for(var i=!1,f=n.child;f;){if(f===t){i=!0,t=n,a=u;break}if(f===a){i=!0,a=n,t=u;break}f=f.sibling}if(!i){for(f=u.child;f;){if(f===t){i=!0,t=u,a=n;break}if(f===a){i=!0,a=u,t=n;break}f=f.sibling}if(!i)throw Error(s(189))}}if(t.alternate!==a)throw Error(s(190))}if(t.tag!==3)throw Error(s(188));return t.stateNode.current===t?l:e}function ll(l){var e=l.tag;if(e===5||e===26||e===27||e===6)return l;for(l=l.child;l!==null;){if(e=ll(l),e!==null)return e;l=l.sibling}return null}var N=Object.assign,K=Symbol.for("react.element"),Zl=Symbol.for("react.transitional.element"),Cl=Symbol.for("react.portal"),Kl=Symbol.for("react.fragment"),_t=Symbol.for("react.strict_mode"),Ht=Symbol.for("react.profiler"),xa=Symbol.for("react.consumer"),Jl=Symbol.for("react.context"),Re=Symbol.for("react.forward_ref"),ot=Symbol.for("react.suspense"),oe=Symbol.for("react.suspense_list"),ye=Symbol.for("react.memo"),ue=Symbol.for("react.lazy"),Ct=Symbol.for("react.activity"),Tn=Symbol.for("react.memo_cache_sentinel"),Bt=Symbol.iterator;function kl(l){return l===null||typeof l!="object"?null:(l=Bt&&l[Bt]||l["@@iterator"],typeof l=="function"?l:null)}var En=Symbol.for("react.client.reference");function za(l){if(l==null)return null;if(typeof l=="function")return l.$$typeof===En?null:l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case Kl:return"Fragment";case Ht:return"Profiler";case _t:return"StrictMode";case ot:return"Suspense";case oe:return"SuspenseList";case Ct:return"Activity"}if(typeof l=="object")switch(l.$$typeof){case Cl:return"Portal";case Jl:return l.displayName||"Context";case xa:return(l._context.displayName||"Context")+".Consumer";case Re:var e=l.render;return l=l.displayName,l||(l=e.displayName||e.name||"",l=l!==""?"ForwardRef("+l+")":"ForwardRef"),l;case ye:return e=l.displayName||null,e!==null?e:za(l.type)||"Memo";case ue:e=l._payload,l=l._init;try{return za(l(e))}catch{}}return null}var ge=Array.isArray,x=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,M=v.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,B={pending:!1,data:null,method:null,action:null},tl=[],al=-1;function El(l){return{current:l}}function cl(l){0>al||(l.current=tl[al],tl[al]=null,al--)}function k(l,e){al++,tl[al]=l.current,l.current=e}var gl=El(null),re=El(null),we=El(null),An=El(null);function Mn(l,e){switch(k(we,e),k(re,l),k(gl,null),e.nodeType){case 9:case 11:l=(l=e.documentElement)&&(l=l.namespaceURI)?ad(l):0;break;default:if(l=e.tagName,e=e.namespaceURI)e=ad(e),l=nd(e,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}cl(gl),k(gl,l)}function qt(){cl(gl),cl(re),cl(we)}function Fu(l){l.memoizedState!==null&&k(An,l);var e=gl.current,t=nd(e,l.type);e!==t&&(k(re,l),k(gl,t))}function Dn(l){re.current===l&&(cl(gl),cl(re)),An.current===l&&(cl(An),hn._currentValue=B)}var Iu,_f;function rt(l){if(Iu===void 0)try{throw Error()}catch(t){var e=t.stack.trim().match(/\n( *(at )?)/);Iu=e&&e[1]||"",_f=-1<t.stack.indexOf(`
3
3
  at`)?" (<anonymous>)":-1<t.stack.indexOf("@")?"@unknown:0:0":""}return`
4
4
  `+Iu+l+_f}var Pu=!1;function li(l,e){if(!l||Pu)return"";Pu=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(e){var z=function(){throw Error()};if(Object.defineProperty(z.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(z,[])}catch(b){var S=b}Reflect.construct(l,[],z)}else{try{z.call()}catch(b){S=b}l.call(z.prototype)}}else{try{throw Error()}catch(b){S=b}(z=l())&&typeof z.catch=="function"&&z.catch(function(){})}}catch(b){if(b&&S&&typeof b.stack=="string")return[b.stack,S.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var n=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");n&&n.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var u=a.DetermineComponentFrameRoot(),i=u[0],f=u[1];if(i&&f){var o=i.split(`
@@ -11,4 +11,4 @@ Error generating stack: `+a.message+`
11
11
  ${this.session.accessToken}`:"",s=r?`${r.user.id}
12
12
  ${r.accessToken}`:"";this.session=r,v!==s&&this.disconnect("console-session-replaced")}preferRelay(){this.relayPreferred=!0}markDirectReachable(){this.relayPreferred=!1}resume(){this.session&&this.disconnect("console-resume")}shouldUseRelay(){return this.relayPreferred&&!!this.session?.accessToken}disconnect(r){const v=this.connectOwner;this.connectOwner=null,this.connectGeneration+=1,this.ready=!1,this.connectPromise=null;const s=this.socket;this.socket=null,v?.reject(new Error(r));try{s?.close(1e3,r)}catch{}this.failPending(new Error(r)),this.closeChannels(1006,r)}failPending(r){for(const[v,s]of this.pendingHttp)window.clearTimeout(s.timeout),s.detachAbort(),s.reject(r),this.pendingHttp.delete(v)}closeChannels(r,v){for(const s of[...this.channels.values()])s.relayClosed(r,v);this.channels.clear()}handleTextMessage(r){let v;try{v=JSON.parse(r)}catch{return}if(v.type==="relay-ready"&&v.role==="console"){this.ready=!0;return}if(v.type==="hub-offline"){this.closeChannels(1012,"hub-offline");return}const s=String(v.channelId||"");if(!s)return;const T=this.pendingHttp.get(s);if(v.type==="http-response"&&T){this.pendingHttp.delete(s),window.clearTimeout(T.timeout),T.detachAbort();const E=Number(v.status||502),A=v.bodyBase64?u0(v.bodyBase64):new TextEncoder().encode(JSON.stringify({ok:!1,error:v.error||"console-relay-failed"}));T.resolve(new Response(A,{status:E,statusText:String(v.statusText||""),headers:v.headers||{"content-type":"application/json"}}));return}if(v.type==="relay-error"&&T){this.pendingHttp.delete(s),window.clearTimeout(T.timeout),T.detachAbort(),T.reject(new Error(v.error||"console-relay-failed"));return}this.channels.get(s)?.relayMessage(v)}handleBinaryMessage(r){if(r.byteLength<xf)return;const v=new TextDecoder().decode(new Uint8Array(r,0,xf));if(v[0]!=="B")return;const s=v.slice(37,73);this.channels.get(s)?.relayBinary(r.slice(xf))}async connect(){if(this.socket?.readyState===WebSocket.OPEN&&this.ready)return;if(this.connectPromise)return this.connectPromise;const r=String(this.session?.accessToken||"");if(!r)throw new Error("Sign in before using the mobile Console relay.");const v=++this.connectGeneration,s=Pv();this.connectOwner=s,this.connectPromise=s.promise.finally(()=>{this.connectOwner===s&&(this.connectOwner=null),v===this.connectGeneration&&(this.connectPromise=null)});try{const T=new WebSocket(a0(),[Pd,`${e0}${r}`]);T.binaryType="arraybuffer",this.socket=T;const E=window.setTimeout(()=>{if(!s.settled){try{T.close(1e3,"console-relay-connect-timeout")}catch{}s.reject(new Error("Mobile Console relay connection timed out."))}},t0);s.bindTimeout(E),T.addEventListener("message",A=>{if(!(v!==this.connectGeneration||this.socket!==T))if(typeof A.data=="string"){this.handleTextMessage(A.data);let H=null;try{H=JSON.parse(A.data)}catch{H=null}!s.settled&&H?.type==="relay-ready"&&H.role==="console"&&s.resolve()}else A.data instanceof ArrayBuffer&&this.handleBinaryMessage(A.data)}),T.addEventListener("error",()=>{s.reject(new Error("Mobile Console relay connection failed."))}),T.addEventListener("close",A=>{v!==this.connectGeneration||this.socket!==T||(this.socket=null,this.ready=!1,this.connectPromise=null,this.failPending(new Error(`Mobile Console relay closed (${A.code}).`)),this.closeChannels(A.code||1006,A.reason||"console-relay-closed"),s.reject(new Error(`Mobile Console relay closed (${A.code}).`)))})}catch(T){s.reject(T)}return this.connectPromise}send(r){if(!this.socket||this.socket.readyState!==WebSocket.OPEN||!this.ready)throw new Error("Mobile Console relay is not connected.");this.socket.send(JSON.stringify(r))}async fetch(r,v,s){await this.connect();const T=crypto.randomUUID(),E=await i0(v?.body),A=new Promise((H,C)=>{const w=()=>{const N=this.pendingHttp.get(T);N&&(this.pendingHttp.delete(T),window.clearTimeout(N.timeout),C(v?.signal?.reason instanceof Error?v.signal.reason:new Error("Mobile Console request cancelled.")))};v?.signal?.addEventListener("abort",w,{once:!0});const ll=window.setTimeout(()=>{const N=this.pendingHttp.get(T);N&&(this.pendingHttp.delete(T),N.detachAbort(),C(new Error("Mobile Console request timed out.")))},s);this.pendingHttp.set(T,{resolve:H,reject:C,timeout:ll,detachAbort:()=>v?.signal?.removeEventListener("abort",w)})});try{this.send({type:"http-request",channelId:T,method:String(v?.method||"GET").toUpperCase(),path:r,headers:c0(v),bodyBase64:E.byteLength>0?n0(E):""})}catch(H){const C=this.pendingHttp.get(T);C&&(this.pendingHttp.delete(T),window.clearTimeout(C.timeout),C.detachAbort(),C.reject(H instanceof Error?H:new Error(String(H))))}return A}openWebSocket(r){const v=new s0(this,r);return this.channels.set(v.channelId,v),this.connect().then(()=>{this.channels.get(v.channelId)===v&&this.send({type:"ws-open",channelId:v.channelId,path:r})}).catch(s=>v.relayError(s instanceof Error?s.message:String(s))),v}removeChannel(r){this.channels.delete(r)}bufferedAmount(){return Number(this.socket?.bufferedAmount||0)}}class s0 extends EventTarget{constructor(r,v){super(),this.relay=r,this.url=v}relay;channelId=crypto.randomUUID();url;protocol=Pd;extensions="";binaryType="blob";readyState=WebSocket.CONNECTING;onopen=null;onmessage=null;onerror=null;onclose=null;get bufferedAmount(){return this.relay.bufferedAmount()}emit(r,v){(r==="open"?this.onopen:this.onerror)?.call(this,v),this.dispatchEvent(v)}emitMessage(r){const v=new MessageEvent("message",{data:r});this.onmessage?.call(this,v),this.dispatchEvent(v)}emitClose(r,v){if(this.readyState===WebSocket.CLOSED)return;this.readyState=WebSocket.CLOSED,this.relay.removeChannel(this.channelId);const s=new CloseEvent("close",{code:r,reason:v,wasClean:r===1e3});this.onclose?.call(this,s),this.dispatchEvent(s)}send(r){if(this.readyState!==WebSocket.OPEN)throw new DOMException("WebSocket is not open.","InvalidStateError");if(typeof r!="string")throw new DOMException("Mobile Console input messages must be text.","NotSupportedError");this.relay.send({type:"ws-send",channelId:this.channelId,data:r})}close(r=1e3,v=""){if(this.readyState===WebSocket.CLOSED||this.readyState===WebSocket.CLOSING)return;const s=this.readyState===WebSocket.OPEN;if(this.readyState=WebSocket.CLOSING,s)try{this.relay.send({type:"ws-close",channelId:this.channelId,code:r,reason:v})}catch{}this.emitClose(r,v)}relayMessage(r){if(r.type==="ws-opened"){if(this.readyState!==WebSocket.CONNECTING)return;this.readyState=WebSocket.OPEN,this.emit("open",new Event("open"))}else r.type==="ws-message"?this.emitMessage(String(r.data||"")):r.type==="ws-error"||r.type==="relay-error"?this.relayError(r.error||"console-websocket-error"):r.type==="ws-closed"&&this.emitClose(Number(r.code||1e3),String(r.reason||""))}relayBinary(r){this.emitMessage(this.binaryType==="arraybuffer"?r:new Blob([r]))}relayError(r){this.readyState!==WebSocket.CLOSED&&(this.emit("error",new Event("error")),this.emitClose(1011,"console-websocket-error"))}relayClosed(r,v){this.emitClose(r,v)}}const Ut=new f0;function o0(d){Ut.configure(d)}function r0(){Ut.markDirectReachable()}function L0(){Ut.resume()}function Zd(d,r,v){return Ut.preferRelay(),Ut.fetch(d,r,v)}function X0(d,r){return Ut.shouldUseRelay()?Ut.openWebSocket(r):new WebSocket(d)}const bn=5179,xn=zn(`http://127.0.0.1:${bn}`);function d0(d){const r=d.split(".").map(v=>Number(v));return r.length===4&&r.every(v=>Number.isInteger(v)&&v>=0&&v<=255)?r:[]}function lh(d){const r=d.trim().toLowerCase();return r==="localhost"||r==="127.0.0.1"||r==="::1"||r==="[::1]"}function h0(d){const r=d.trim().toLowerCase();return!r||r==="0.0.0.0"||r==="::"||r==="[::]"}function eh(d){const r=d0(d);return r.length===0?!1:r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}function m0(d){return d.includes(":")&&!d.startsWith("[")?`[${d}]`:d}function v0(d){const r=String(d||"").trim();if(!r)return null;const v=/^[a-z][a-z\d+.-]*:\/\//i.test(r)?r:`tcp://${r}`;try{const s=new URL(v),T=s.hostname.replace(/^\[|\]$/g,""),E=Number(s.port);return!T||!Number.isInteger(E)||E<1||E>65535||h0(T)?null:{host:T,port:E}}catch{return null}}function zn(d){const r=String(d||"").trim()||`http://127.0.0.1:${bn}`,v=/^[a-z][a-z\d+.-]*:\/\//i.test(r)?r:`http://${r}`;try{const s=new URL(v);return s.port||(s.port=String(bn)),s.hash="",s.search="",s.toString().replace(/\/+$/,"")}catch{return`http://127.0.0.1:${bn}`}}function y0(d){const r=v0(d);return r?zn(`http://${m0(r.host)}:${bn}`):""}function Q0(d){const v=[d?.endpoint,...Array.isArray(d?.endpoint_candidates)?d.endpoint_candidates:[]].map(s=>y0(String(s||""))).filter(Boolean);return[...new Set(v)]}function g0(d=xn){if(!(typeof window>"u"||window.location.protocol!=="https:"))try{const r=new URL(d);if(r.protocol!=="http:")return;if(lh(r.hostname))return"loopback";if(eh(r.hostname))return"local"}catch{return}}function V0(d,r=xn){const v=new URL(d,zn(r));return v.protocol=v.protocol==="https:"?"wss:":"ws:",v.toString()}let pn=null,Kd="";const ja=new Map,ku=new Map;function Z0(d){const r=d?.accessToken&&d?.refreshToken&&d?.user?.id?d:null,v=r?`${r.user.id}
13
13
  ${r.accessToken}
14
- ${r.expiresAt||0}`:"";v!==Kd&&(ja.clear(),ku.clear(),Kd=v),pn=r,o0(r?{accessToken:r.accessToken,user:{id:r.user.id}}:null)}function S0(){if(typeof window>"u"||window.location.protocol!=="https:")return!1;const d=window.location.hostname.replace(/^\[|\]$/g,"");return!lh(d)&&!eh(d)}function zf(d){const r=d.split("?")[0];return r==="/api/health"||r==="/api/runtime/status"||r==="/api/auth/status"||r==="/api/auth/session"}async function Nf(d,r,v,s,T){const E=g0(v);return E&&(r.targetAddressSpace=E),Iv(T,s,async A=>{r.signal=A;try{return await fetch(`${v}${d}`,r)}catch(H){throw!A.aborted&&E?new Error("VuvoDesk Hub is not reachable at this local network address. If Chrome shows a local network prompt, allow it; otherwise restart the Hub so port 5179 is open on the network."):H}})}async function Jd(d,r=!1){const v=ja.get(d);if(!r&&v&&v.expiresAt>Date.now()+3e4)return;r&&ja.delete(d);const s=ku.get(d);if(s)return s;const T=pn;if(!T)return;const E=(async()=>{const A=await Nf("/api/auth/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:T.accessToken,refreshToken:T.refreshToken,expiresAt:T.expiresAt,user:T.user}),credentials:"include",cache:"no-store"},d,$u),H=await A.json().catch(()=>null);if(!A.ok)throw new Error(`${A.status} ${H?.error||A.statusText}`);const C=String(H?.uiSession?.csrfToken||"").trim(),w=Number(H?.uiSession?.expiresAt||0);if(!C||!Number.isFinite(w)||w<=Date.now())throw new Error("VuvoDesk Hub did not issue a valid UI session.");ja.set(d,{csrfToken:C,expiresAt:w})})().finally(()=>{ku.delete(d)});return ku.set(d,E),E}async function b0(d,r,v=xn){const s=zn(v),{timeoutMs:T=$u,signal:E,transport:A="auto",...H}=r||{},C=!zf(d),w=()=>{const ll=String(H.method||"GET").toUpperCase(),N=ja.get(s)?.csrfToken||"";return{...H,headers:{...H.headers||{},...!["GET","HEAD","OPTIONS"].includes(ll)&&N?{"X-LiveDesk-CSRF":N}:{}},credentials:"include",cache:"no-store"}};if(A==="relay"){if(E?.aborted)throw E.reason||new Error("VuvoDesk Hub request cancelled.");if(!pn||zf(d))throw new Error("Mobile Console relay requires an authenticated management request.");return Zd(d,w(),T)}try{C&&await Jd(s);let ll=await Nf(d,w(),s,T,E);if(r0(),C&&ll.status===401&&pn){const N=await ll.clone().json().catch(()=>null);/^hub-ui-session-(required|expired)$/.test(String(N?.error||""))&&(await Jd(s,!0),ll=await Nf(d,w(),s,T,E))}return ll}catch(ll){if(E?.aborted||!pn||zf(d))throw ll;return Zd(d,w(),T)}}async function p0(d,r,v=xn){const s=zn(v),T=await b0(d,{...r||{},headers:{"Content-Type":"application/json",...r?.headers||{}}},v);let E=null;try{E=await T.json()}catch(A){if(r?.signal?.aborted)throw A;E=null}if(T.ok&&d.split("?")[0]==="/api/auth/session"&&E&&typeof E=="object"){const A=E.uiSession,H=String(A?.csrfToken||"").trim(),C=Number(A?.expiresAt||0);H&&Number.isFinite(C)&&C>Date.now()&&ja.set(s,{csrfToken:H,expiresAt:C})}if(!T.ok){const A=E&&typeof E=="object"&&"error"in E?String(E.error||""):"";throw new Error(`${T.status} ${A||T.statusText}`)}return E}async function K0({baseUrl:d=xn,targetRole:r,previousRuntimePid:v=0,allowedStates:s=["running","waiting-auth"],timeoutMs:T=3e4}){const E=Date.now()+T;let A=null;for(;Date.now()<E;){try{const C=await p0("/api/runtime/status",void 0,d),w=String(C.role||"").toLowerCase(),ll=String(C.state||"").toLowerCase(),N=Number(C.runtimePid||0),K=v>1?N>1&&N!==v:N>1;if(w===r&&s.map(Zl=>Zl.toLowerCase()).includes(ll)&&K)return C}catch(C){A=C}await new Promise(C=>setTimeout(C,300))}const H=A instanceof Error?` ${A.message}`:"";throw new Error(`VuvoDesk runtime did not become ${r} with a new process.${H}`)}function J0(d,r=120){if(typeof window>"u")return;const v=new URL(window.location.href);v.port=String(d),v.pathname="/",v.search="",v.hash="";const s=v.toString();let T=0;const E=()=>{fetch(s,{cache:"no-store",mode:"no-cors"}).then(()=>window.location.replace(s)).catch(()=>{if(T+=1,T>=r){window.location.replace(s);return}window.setTimeout(E,250)})};E()}function k0(d){if(!d)return"-";const r=Date.now()-Date.parse(d);return Number.isFinite(r)?r<1e3?"now":r<6e4?`${Math.round(r/1e3)}s`:r<36e5?`${Math.round(r/6e4)}m`:`${Math.round(r/36e5)}h`:"-"}async function W0(d){await navigator.clipboard.writeText(d)}const th=5,Of=30,j0=Number.POSITIVE_INFINITY,se={free:{name:"Free",price:"$0",limit:th,audience:"Personal, ad-supported",note:"Up to 5 personal devices supported by a standard banner."},ltd:{name:"Plus",price:"$5",ltd:"$79 LTD",limit:Of,audience:"Creators and homelabs",note:"30 devices, no ads, personal use."},pro:{name:"Pro",price:"$15",ltd:"$199 LTD",limit:j0,audience:"Business and studios",note:"Commercial use and larger Client walls."}},x0="0.1.605",z0={version:x0},Ku=String(z0.version).trim();function ah({size:d=22}){return c.jsxs("svg",{width:d,height:d,viewBox:"0 0 28 28",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[c.jsx("rect",{x:"2.5",y:"4",width:"14",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7",opacity:"0.42"}),c.jsx("path",{d:"M7 16v1.5h5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",opacity:"0.42"}),c.jsx("rect",{x:"10.5",y:"2.5",width:"14",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7",opacity:"0.62"}),c.jsx("path",{d:"M15 14.5V16h5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",opacity:"0.62"}),c.jsx("rect",{x:"6.5",y:"8.5",width:"15",height:"10",rx:"1.7",fill:"currentColor",fillOpacity:"0.12",stroke:"currentColor",strokeWidth:"1.9"}),c.jsx("path",{d:"M12 21v1.5H9.5M16 21v1.5h2.5M9.5 22.5h9",stroke:"currentColor",strokeWidth:"1.9",strokeLinecap:"round"})]})}const kd="npx -y --prefer-online livedesk@latest",T0="https://livedesk-desktop-updates.lovecrdm.workers.dev/download/dev/windows/x64";function E0(){if(typeof window>"u")return"home";const d=window.location.pathname.replace(/\/+$/,"")||"/";return d==="/"?"home":d==="/download"?"download":d==="/pricing"?"pricing":"not-found"}function nh(){return c.jsxs("a",{className:"site-brand",href:"/","aria-label":"VuvoDesk home",children:[c.jsx("span",{className:"site-brand-mark",children:c.jsx(ah,{size:25})}),c.jsx("span",{children:"VuvoDesk"})]})}function A0({page:d}){const r=[{label:"Product",href:"/#product",active:d==="home"},{label:"Pricing",href:"/pricing",active:d==="pricing"},{label:"Download",href:"/download",active:d==="download"},{label:"Support",href:"/support",active:!1}];return c.jsx("header",{className:"site-header",children:c.jsxs("div",{className:"site-header-inner",children:[c.jsx(nh,{}),c.jsx("nav",{className:"site-nav","aria-label":"Main navigation",children:r.map(v=>c.jsx("a",{className:v.active?"active":"",href:v.href,children:v.label},v.label))}),c.jsxs("div",{className:"site-header-actions",children:[c.jsx("a",{className:"site-text-link",href:"/app",children:"Open web console"}),c.jsxs("a",{className:"site-button site-button-small",href:"/download",children:["Get VuvoDesk ",c.jsx(qe,{size:15})]})]}),c.jsxs("details",{className:"site-mobile-menu",children:[c.jsx("summary",{"aria-label":"Open navigation",children:c.jsx(Uv,{size:22})}),c.jsxs("nav",{"aria-label":"Mobile navigation",children:[r.map(v=>c.jsxs("a",{href:v.href,children:[v.label,c.jsx(Cd,{size:15})]},v.label)),c.jsxs("a",{href:"/app",children:["Open web console",c.jsx(Cd,{size:15})]})]})]})]})})}function M0(){return c.jsxs("footer",{className:"site-footer",children:[c.jsxs("div",{className:"site-footer-main",children:[c.jsxs("div",{children:[c.jsx(nh,{}),c.jsx("p",{children:"One calm command center for every computer you manage."})]}),c.jsxs("div",{className:"site-footer-links",children:[c.jsxs("div",{children:[c.jsx("strong",{children:"Product"}),c.jsx("a",{href:"/#product",children:"Overview"}),c.jsx("a",{href:"/pricing",children:"Pricing"}),c.jsx("a",{href:"/download",children:"Download"})]}),c.jsxs("div",{children:[c.jsx("strong",{children:"Use VuvoDesk"}),c.jsx("a",{href:"/app",children:"Web console"}),c.jsx("a",{href:"/support",children:"Support"})]}),c.jsxs("div",{children:[c.jsx("strong",{children:"Platforms"}),c.jsx("span",{children:"Windows"}),c.jsx("span",{children:"macOS"}),c.jsx("span",{children:"Linux"}),c.jsx("span",{children:"Mobile PWA"})]})]})]}),c.jsxs("div",{className:"site-footer-bottom",children:[c.jsx("span",{children:"© 2026 VuvoDesk"}),c.jsx("span",{children:"Built for people who run real work across many screens."})]})]})}function D0(){const d=[{name:"Studio-01",status:"Online",className:"screen-blue",cpu:"42%",ram:"61%"},{name:"Render-Mac",status:"Online",className:"screen-purple",cpu:"67%",ram:"74%"},{name:"Linux-Build",status:"Online",className:"screen-green",cpu:"29%",ram:"48%"},{name:"Office-PC",status:"Idle",className:"screen-orange",cpu:"18%",ram:"37%"}];return c.jsxs("div",{className:"product-mockup","aria-label":"VuvoDesk screen wall preview",children:[c.jsxs("div",{className:"mockup-window-bar",children:[c.jsxs("div",{children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]}),c.jsx("span",{children:"VuvoDesk · Wall"}),c.jsxs("span",{className:"mockup-online",children:[c.jsx("i",{})," 4 online"]})]}),c.jsxs("div",{className:"mockup-body",children:[c.jsxs("aside",{className:"mockup-rail","aria-hidden":"true",children:[c.jsx("span",{className:"active",children:c.jsx($d,{size:17})}),c.jsx("span",{children:c.jsx(Wu,{size:17})}),c.jsx("span",{children:c.jsx(Fd,{size:17})}),c.jsx("span",{children:c.jsx(Id,{size:17})})]}),c.jsx("div",{className:"mockup-wall",children:d.map(r=>c.jsxs("article",{className:"mockup-screen",children:[c.jsxs("div",{className:`mockup-screen-image ${r.className}`,children:[c.jsx("span",{className:"mockup-code-line wide"}),c.jsx("span",{className:"mockup-code-line"}),c.jsx("span",{className:"mockup-code-line short"}),c.jsx("span",{className:"mockup-panel-block"})]}),c.jsxs("div",{className:"mockup-screen-title",children:[c.jsx("strong",{children:r.name}),c.jsxs("span",{children:[c.jsx("i",{})," ",r.status]})]}),c.jsxs("div",{className:"mockup-metrics",children:[c.jsxs("span",{children:["CPU ",c.jsx("b",{children:r.cpu})]}),c.jsxs("span",{children:["RAM ",c.jsx("b",{children:r.ram})]})]})]},r.name))})]}),c.jsxs("div",{className:"mockup-control-card",children:[c.jsx(Wu,{size:18}),c.jsxs("span",{children:[c.jsx("small",{children:"Selected computer"}),c.jsx("strong",{children:"Render-Mac"})]}),c.jsx("button",{type:"button",children:"Control"})]})]})}function uh({compact:d=!1}){const r=[{key:"free",name:se.free.name,price:se.free.price,suffix:"forever",audience:se.free.audience,description:"A practical personal wall, supported by a standard banner.",features:[`Up to ${th} devices`,"Live wall and focused control","Standard banner"],action:"Start free",href:"/app"},{key:"plus",name:se.ltd.name,price:se.ltd.price,suffix:"/ month",audience:se.ltd.audience,description:"A clean personal command center for creators and homelabs.",features:[`Up to ${Of} devices`,"No standard banner","Personal use"],ltd:se.ltd.ltd,action:"Choose Plus",href:"/app?view=pricing"},{key:"pro",name:se.pro.name,price:se.pro.price,suffix:"/ month",audience:se.pro.audience,description:"Commercial monitoring for studios, offices, and growing fleets.",features:[`More than ${Of} Clients`,"Ad-free commercial use","Large screen walls"],ltd:se.pro.ltd,action:"Choose Pro",href:"/app?view=pricing"}];return c.jsx("div",{className:`site-pricing-grid ${d?"compact":""}`,children:r.map(v=>c.jsxs("article",{className:`site-price-card ${v.key==="plus"?"featured":""}`,children:[c.jsxs("div",{className:"site-price-heading",children:[c.jsx("span",{children:v.name}),v.key==="plus"&&c.jsx("em",{children:"Most popular"})]}),c.jsx("p",{className:"site-price-audience",children:v.audience}),c.jsxs("div",{className:"site-price",children:[c.jsx("strong",{children:v.price}),c.jsx("small",{children:v.suffix})]}),c.jsx("p",{children:v.description}),c.jsx("ul",{children:v.features.map(s=>c.jsxs("li",{children:[c.jsx(Yv,{size:16})," ",s]},s))}),v.ltd&&c.jsxs("div",{className:"site-ltd",children:[c.jsxs("span",{children:[v.name," LTD"]}),c.jsx("strong",{children:v.ltd.replace(" LTD","")}),c.jsx("small",{children:"one-time · available now"})]}),c.jsxs("a",{className:`site-price-action ${v.key==="plus"?"primary":""}`,href:v.href,children:[v.action,c.jsx(qe,{size:15})]})]},v.key))})}function N0(){return c.jsx(c.Fragment,{children:c.jsxs("main",{children:[c.jsxs("section",{className:"site-hero",children:[c.jsxs("div",{className:"site-hero-copy",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(_v,{size:15})," The screen wall for real work"]}),c.jsxs("h1",{children:["Every computer.",c.jsx("br",{}),c.jsx("span",{children:"One calm command center."})]}),c.jsx("p",{children:"See every screen, focus the computer that needs you, and keep work moving from your desk or phone."}),c.jsxs("div",{className:"site-hero-actions",children:[c.jsxs("a",{className:"site-button",href:"/download",children:["Download VuvoDesk ",c.jsx(qe,{size:17})]}),c.jsxs("a",{className:"site-button site-button-secondary",href:"/app",children:["Open web console ",c.jsx(Bd,{size:17})]})]}),c.jsxs("div",{className:"site-hero-notes",children:[c.jsxs("span",{children:[c.jsx(gf,{size:15})," Free for 5 devices"]}),c.jsxs("span",{children:[c.jsx(gf,{size:15})," No credit card"]}),c.jsxs("span",{children:[c.jsx(gf,{size:15})," Windows · macOS · Linux"]})]})]}),c.jsxs("div",{className:"site-hero-visual",children:[c.jsx("div",{className:"site-orbit site-orbit-one"}),c.jsx("div",{className:"site-orbit site-orbit-two"}),c.jsx(D0,{})]})]}),c.jsxs("section",{className:"platform-strip","aria-label":"Supported platforms",children:[c.jsx("span",{children:"Built for the computers you already run"}),c.jsxs("div",{children:[c.jsxs("strong",{children:[c.jsx(Wd,{size:18})," Windows"]}),c.jsxs("strong",{children:[c.jsx(Af,{size:18})," macOS"]}),c.jsxs("strong",{children:[c.jsx(Mf,{size:18})," Linux"]}),c.jsxs("strong",{children:[c.jsx(Ju,{size:18})," iPhone & Android"]}),c.jsxs("strong",{children:[c.jsx(Bd,{size:18})," Any browser"]})]})]}),c.jsxs("section",{className:"site-section site-value-section",id:"product",children:[c.jsxs("div",{className:"site-section-heading",children:[c.jsx("span",{children:"Why VuvoDesk"}),c.jsxs("h2",{children:["Spend less time finding the problem.",c.jsx("br",{}),"Spend more time fixing it."]}),c.jsx("p",{children:"VuvoDesk keeps the fleet visible without turning your desktop into a pile of remote windows."})]}),c.jsxs("div",{className:"site-value-grid",children:[c.jsxs("article",{className:"site-value-card large blue",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx($d,{size:23})}),c.jsx("h3",{children:"A wall that stays readable"}),c.jsx("p",{children:"Move from a compact list to large live previews. Keep the signal you need and hide the noise you do not."}),c.jsxs("div",{className:"feature-wall-demo",children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]})]}),c.jsxs("article",{className:"site-value-card mint",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx(Wu,{size:23})}),c.jsx("h3",{children:"Control without losing context"}),c.jsx("p",{children:"Jump from Wall to focused Control, then return to the same fleet view."}),c.jsxs("div",{className:"feature-cursor-demo",children:[c.jsx(Wu,{size:31}),c.jsx("span",{children:"Direct control"})]})]}),c.jsxs("article",{className:"site-value-card violet",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx(Hv,{size:23})}),c.jsx("h3",{children:"Your fleet in your pocket"}),c.jsx("p",{children:"Install the PWA on iPhone or Android and check the room before you walk back to it."}),c.jsxs("div",{className:"feature-phone-demo",children:[c.jsx("span",{}),c.jsxs("div",{children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]})]})]}),c.jsxs("article",{className:"site-value-card wide dark",children:[c.jsxs("div",{children:[c.jsxs("span",{className:"site-kicker dark",children:[c.jsx(Cv,{size:14})," Local-first when possible"]}),c.jsx("h3",{children:"Fast where you work. Reachable when you leave."}),c.jsx("p",{children:"VuvoDesk prefers the shortest useful route and keeps the current screen moving instead of building a stale queue."})]}),c.jsxs("div",{className:"feature-route",children:[c.jsxs("span",{children:[c.jsx(Af,{size:19})," Hub"]}),c.jsx("i",{}),c.jsxs("span",{children:[c.jsx(Bv,{size:19})," Clients"]}),c.jsx("i",{}),c.jsxs("span",{children:[c.jsx(Ju,{size:19})," PWA"]})]})]})]})]}),c.jsxs("section",{className:"site-section site-workflow",children:[c.jsxs("div",{className:"site-section-heading centered",children:[c.jsx("span",{children:"Start in three steps"}),c.jsx("h2",{children:"From zero to a live wall in minutes."})]}),c.jsxs("div",{className:"workflow-grid",children:[c.jsxs("article",{children:[c.jsx("b",{children:"01"}),c.jsx("span",{children:c.jsx(Df,{size:21})}),c.jsx("h3",{children:"Install the Hub"}),c.jsx("p",{children:"Choose the computer that will organize your VuvoDesk fleet."})]}),c.jsxs("article",{children:[c.jsx("b",{children:"02"}),c.jsx("span",{children:c.jsx(Fd,{size:21})}),c.jsx("h3",{children:"Connect Clients"}),c.jsx("p",{children:"Use one PIN to add the Windows, Mac, and Linux computers you manage."})]}),c.jsxs("article",{children:[c.jsx("b",{children:"03"}),c.jsx("span",{children:c.jsx(Ju,{size:21})}),c.jsx("h3",{children:"Manage from anywhere"}),c.jsx("p",{children:"Open the web console or install the mobile PWA and keep every screen close."})]})]})]}),c.jsxs("section",{className:"site-section site-pricing-section",children:[c.jsxs("div",{className:"site-section-heading centered",children:[c.jsx("span",{children:"Simple pricing"}),c.jsx("h2",{children:"Start free. Upgrade when the wall earns its place."}),c.jsx("p",{children:"Monthly prices stay easy to understand. Lifetime offers are available separately below each paid plan."})]}),c.jsx(uh,{compact:!0}),c.jsxs("a",{className:"site-inline-link",href:"/pricing",children:["Compare every plan ",c.jsx(qe,{size:15})]})]}),c.jsxs("section",{className:"site-final-cta",children:[c.jsxs("div",{children:[c.jsxs("span",{className:"site-kicker dark",children:[c.jsx(qv,{size:14})," Your fleet, one glance away"]}),c.jsxs("h2",{children:["Give every computer",c.jsx("br",{}),"one clear place to report."]})]}),c.jsxs("div",{children:[c.jsx("p",{children:"Start with five devices for free. Install the Hub, connect a Client, and open your first live wall."}),c.jsxs("div",{children:[c.jsxs("a",{className:"site-button light",href:"/download",children:["Get VuvoDesk ",c.jsx(qe,{size:17})]}),c.jsx("a",{className:"site-button ghost",href:"/app",children:"Open console"})]})]})]})]})})}function O0(){const[d,r]=jn.useState(!1),v=async()=>{try{await navigator.clipboard.writeText(kd),r(!0),window.setTimeout(()=>r(!1),1800)}catch{r(!1)}};return c.jsxs("main",{className:"site-subpage",children:[c.jsxs("section",{className:"site-subpage-hero download-hero",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(Df,{size:15})," Download VuvoDesk"]}),c.jsxs("h1",{children:["Turn one computer into",c.jsx("br",{}),c.jsx("span",{children:"your command center."})]}),c.jsx("p",{children:"Download the Windows Electron installer directly. macOS and Linux currently use the same npm package while signed desktop installers are prepared."})]}),c.jsxs("section",{className:"download-grid",children:[c.jsxs("article",{id:"windows",children:[c.jsx("span",{className:"download-platform-icon windows",children:c.jsx(Wd,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"Windows"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · x64 Electron"]}),c.jsx("span",{className:"download-preview-note",children:"Preview installer · unsigned"}),c.jsx("h2",{children:"Install VuvoDesk for Windows"}),c.jsx("p",{children:"Download the normal Electron setup program. Windows SmartScreen may warn about this preview until code signing is ready."})]}),c.jsxs("a",{className:"download-installer-link",href:T0,children:["Download Windows installer ",c.jsx(Df,{size:16})]})]}),c.jsxs("article",{id:"macos",children:[c.jsx("span",{className:"download-platform-icon mac",children:c.jsx(Af,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"macOS"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · Intel & Apple silicon"]}),c.jsx("h2",{children:"Run VuvoDesk on macOS"}),c.jsx("p",{children:"Use Terminal on Apple silicon or Intel. Keep the Terminal window open while this early release is running."})]}),c.jsxs("a",{href:"#install-command",children:["Install with one command ",c.jsx(qe,{size:16})]})]}),c.jsxs("article",{id:"linux",children:[c.jsx("span",{className:"download-platform-icon linux",children:c.jsx(Mf,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"Linux"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · x64 · X11"]}),c.jsx("h2",{children:"Run VuvoDesk on Linux"}),c.jsx("p",{children:"Use a current Node.js release and launch VuvoDesk from your preferred terminal."})]}),c.jsxs("a",{href:"#install-command",children:["Install with one command ",c.jsx(qe,{size:16})]})]})]}),c.jsxs("section",{className:"install-command-card",id:"install-command",children:[c.jsxs("div",{children:[c.jsxs("span",{children:[c.jsx(Mf,{size:18})," One command install"]}),c.jsx("h2",{children:"macOS, Linux, and advanced setup"}),c.jsx("p",{children:"Node.js and npm are required for the current command-line release."})]}),c.jsxs("div",{className:"install-command",children:[c.jsx("code",{children:kd}),c.jsxs("button",{type:"button",onClick:()=>{v()},children:[c.jsx(Rv,{size:17})," ",d?"Copied":"Copy"]})]}),c.jsxs("ol",{children:[c.jsxs("li",{children:[c.jsx("b",{children:"1"}),c.jsx("span",{children:"Run the command on the computer that will be your Hub."})]}),c.jsxs("li",{children:[c.jsx("b",{children:"2"}),c.jsx("span",{children:"Open Settings and create a Hub PIN."})]}),c.jsxs("li",{children:[c.jsx("b",{children:"3"}),c.jsx("span",{children:"Run the same package as a Client on the other computers."})]})]})]}),c.jsxs("section",{className:"mobile-install-section",id:"mobile",children:[c.jsxs("div",{className:"mobile-install-heading",children:[c.jsx("span",{children:c.jsx(Ju,{size:26})}),c.jsxs("div",{children:[c.jsxs("small",{children:["iPhone & Android · PWA ",Ku]}),c.jsx("h2",{children:"No app store required."}),c.jsx("p",{children:"Open the public web address, sign in, then install VuvoDesk on the Home Screen. The PWA always starts directly in the console."})]})]}),c.jsxs("div",{className:"mobile-web-address",children:[c.jsx("span",{children:"Mobile web address"}),c.jsx("a",{href:"https://vuvodesk.com/app",children:"https://vuvodesk.com/app"}),c.jsxs("a",{className:"site-button",href:"/app",children:["Open mobile console ",c.jsx(qe,{size:16})]})]}),c.jsxs("div",{className:"pwa-guide-grid",children:[c.jsxs("article",{children:[c.jsx("strong",{children:"iPhone & iPad"}),c.jsxs("ol",{children:[c.jsx("li",{children:"Open the address in Safari."}),c.jsx("li",{children:"Tap Share, then Add to Home Screen."}),c.jsx("li",{children:"Choose Open as Web App and add VuvoDesk."})]})]}),c.jsxs("article",{children:[c.jsx("strong",{children:"Android"}),c.jsxs("ol",{children:[c.jsx("li",{children:"Open the address in Chrome."}),c.jsx("li",{children:"Open the browser menu and tap Install app."}),c.jsx("li",{children:"Launch VuvoDesk from the Home Screen."})]})]})]})]})]})}function U0(){return c.jsxs("main",{className:"site-subpage pricing-subpage",children:[c.jsxs("section",{className:"site-subpage-hero",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(qd,{size:15})," VuvoDesk pricing"]}),c.jsxs("h1",{children:["Clear plans for",c.jsx("br",{}),c.jsx("span",{children:"growing screen walls."})]}),c.jsx("p",{children:"Use VuvoDesk free on five personal computers. Choose Plus for a larger ad-free personal wall, or Pro for commercial work."})]}),c.jsx(uh,{}),c.jsxs("section",{className:"pricing-explainer",children:[c.jsxs("article",{children:[c.jsx(wv,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Free stays useful"}),c.jsx("p",{children:"The standard banner helps keep a five-device personal wall available without a subscription."})]})]}),c.jsxs("article",{children:[c.jsx(qd,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Monthly and lifetime are separate"}),c.jsx("p",{children:"$5 and $15 are monthly plan prices. Plus LTD $79 and Pro LTD $199 are one-time offers shown separately."})]})]}),c.jsxs("article",{children:[c.jsx(Id,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Upgrade inside VuvoDesk"}),c.jsx("p",{children:"Sign in to the console, open Pricing, and choose the plan that matches the way you use the fleet."})]})]})]}),c.jsxs("section",{className:"pricing-bottom-cta",children:[c.jsxs("div",{children:[c.jsx("h2",{children:"Start with the computers you have today."}),c.jsx("p",{children:"No credit card is needed for Free."})]}),c.jsxs("a",{className:"site-button",href:"/app",children:["Start free ",c.jsx(qe,{size:16})]})]})]})}function _0(){return c.jsxs("main",{className:"site-not-found",children:[c.jsx("span",{className:"site-brand-mark",children:c.jsx(ah,{size:25})}),c.jsx("small",{children:"404"}),c.jsx("h1",{children:"This screen is not on the wall."}),c.jsx("p",{children:"The page may have moved, but your VuvoDesk console is still here."}),c.jsxs("div",{children:[c.jsx("a",{className:"site-button",href:"/",children:"VuvoDesk home"}),c.jsx("a",{className:"site-button site-button-secondary",href:"/app",children:"Open console"})]})]})}function H0(){const d=E0();return jn.useEffect(()=>{const r={home:"VuvoDesk — Every computer. One calm command center.",download:"Download VuvoDesk — Windows, macOS, and Linux",pricing:"VuvoDesk Pricing — Free, Plus, and Pro","not-found":"Page not found — VuvoDesk"};return document.title=r[d],document.documentElement.classList.add("livedesk-marketing-active"),()=>document.documentElement.classList.remove("livedesk-marketing-active")},[d]),c.jsxs("div",{className:"marketing-site",children:[c.jsx(A0,{page:d}),d==="home"?c.jsx(N0,{}):d==="download"?c.jsx(O0,{}):d==="pricing"?c.jsx(U0,{}):c.jsx(_0,{}),c.jsx(M0,{})]})}function C0(d){return!!d.navigatorStandalone||!!d.displayModeStandalone||!!d.displayModeFullscreen}function B0({publicOrigin:d,electron:r,pathname:v,search:s="",navigatorStandalone:T=!1,displayModeStandalone:E=!1,displayModeFullscreen:A=!1,marketingPreview:H=!1}){if(r||!d&&!H)return{kind:"app",redirectPath:""};const C=new URLSearchParams(s),w=C.has("pwa")||C0({navigatorStandalone:T,displayModeStandalone:E,displayModeFullscreen:A}),ll=v==="/app"||v.startsWith("/app/"),N=v==="/support"||v.startsWith("/support/"),K=C.has("checkout");return w||K?{kind:"app",redirectPath:ll?"":"/app"}:ll||N?{kind:"app",redirectPath:""}:{kind:"site",redirectPath:""}}const q0=jn.lazy(()=>Qv(()=>import("./LiveDeskApp-Bv0fQKd_.js"),__vite__mapDeps([0,1,2,3,4])).then(d=>({default:d.LiveDeskApp})));window.liveDesk&&document.documentElement.classList.add("livedesk-electron-desktop");const Ot=new URL(window.location.href),R0=!!window.navigator.standalone,Uf=B0({publicOrigin:S0(),electron:!!window.liveDesk,pathname:Ot.pathname,search:Ot.search,navigatorStandalone:R0,displayModeStandalone:window.matchMedia("(display-mode: standalone)").matches,displayModeFullscreen:window.matchMedia("(display-mode: fullscreen)").matches,marketingPreview:Ot.searchParams.get("site")==="1"});Uf.redirectPath&&(Ot.pathname=Uf.redirectPath,window.history.replaceState({},"",`${Ot.pathname}${Ot.search}${Ot.hash}`));$v.createRoot(document.getElementById("root")).render(c.jsx(jn.StrictMode,{children:Uf.kind==="site"?c.jsx(H0,{}):c.jsx(jn.Suspense,{fallback:c.jsx("main",{className:"runtime-role-boot","aria-label":"Starting VuvoDesk",children:c.jsx("strong",{children:"Starting VuvoDesk"})}),children:c.jsx(q0,{})})}));const ih="serviceWorker"in navigator&&window.isSecureContext&&window.location.protocol==="https:";let Tf=null;function Ef(){!ih||Tf||(Tf=(async()=>{await(await navigator.serviceWorker.register("/sw.js",{updateViaCache:"none"})).update();const r=await fetch(`/sw.js?pwa-release-check=${Date.now()}`,{cache:"no-store"});if(!r.ok)return;const s=(await r.text()).match(/const PWA_RELEASE = ['"](\d+\.\d+\.\d+)['"];/)?.[1],T=new URL(window.location.href);if(!s||!T.searchParams.has("pwa"))return;const E=T.pathname!=="/app",A=T.searchParams.get("pwa")!==s;!E&&!A||(T.pathname="/app",T.searchParams.set("pwa",s),window.location.replace(T.toString()))})().catch(d=>{console.warn("[VuvoDesk] PWA update check failed.",d)}).finally(()=>{Tf=null}))}ih&&(Ef(),window.addEventListener("pageshow",Ef),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&Ef()}));export{xn as D,th as F,ah as M,Of as P,V0 as a,L0 as b,X0 as c,J0 as d,W0 as e,k0 as f,g0 as g,p0 as h,S0 as i,c as j,b0 as k,Z0 as l,Q0 as m,zn as n,se as p,G0 as r,K0 as w};
14
+ ${r.expiresAt||0}`:"";v!==Kd&&(ja.clear(),ku.clear(),Kd=v),pn=r,o0(r?{accessToken:r.accessToken,user:{id:r.user.id}}:null)}function S0(){if(typeof window>"u"||window.location.protocol!=="https:")return!1;const d=window.location.hostname.replace(/^\[|\]$/g,"");return!lh(d)&&!eh(d)}function zf(d){const r=d.split("?")[0];return r==="/api/health"||r==="/api/runtime/status"||r==="/api/auth/status"||r==="/api/auth/session"}async function Nf(d,r,v,s,T){const E=g0(v);return E&&(r.targetAddressSpace=E),Iv(T,s,async A=>{r.signal=A;try{return await fetch(`${v}${d}`,r)}catch(H){throw!A.aborted&&E?new Error("VuvoDesk Hub is not reachable at this local network address. If Chrome shows a local network prompt, allow it; otherwise restart the Hub so port 5179 is open on the network."):H}})}async function Jd(d,r=!1){const v=ja.get(d);if(!r&&v&&v.expiresAt>Date.now()+3e4)return;r&&ja.delete(d);const s=ku.get(d);if(s)return s;const T=pn;if(!T)return;const E=(async()=>{const A=await Nf("/api/auth/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:T.accessToken,refreshToken:T.refreshToken,expiresAt:T.expiresAt,user:T.user}),credentials:"include",cache:"no-store"},d,$u),H=await A.json().catch(()=>null);if(!A.ok)throw new Error(`${A.status} ${H?.error||A.statusText}`);const C=String(H?.uiSession?.csrfToken||"").trim(),w=Number(H?.uiSession?.expiresAt||0);if(!C||!Number.isFinite(w)||w<=Date.now())throw new Error("VuvoDesk Hub did not issue a valid UI session.");ja.set(d,{csrfToken:C,expiresAt:w})})().finally(()=>{ku.delete(d)});return ku.set(d,E),E}async function b0(d,r,v=xn){const s=zn(v),{timeoutMs:T=$u,signal:E,transport:A="auto",...H}=r||{},C=!zf(d),w=()=>{const ll=String(H.method||"GET").toUpperCase(),N=ja.get(s)?.csrfToken||"";return{...H,headers:{...H.headers||{},...!["GET","HEAD","OPTIONS"].includes(ll)&&N?{"X-LiveDesk-CSRF":N}:{}},credentials:"include",cache:"no-store"}};if(A==="relay"){if(E?.aborted)throw E.reason||new Error("VuvoDesk Hub request cancelled.");if(!pn||zf(d))throw new Error("Mobile Console relay requires an authenticated management request.");return Zd(d,w(),T)}try{C&&await Jd(s);let ll=await Nf(d,w(),s,T,E);if(r0(),C&&ll.status===401&&pn){const N=await ll.clone().json().catch(()=>null);/^hub-ui-session-(required|expired)$/.test(String(N?.error||""))&&(await Jd(s,!0),ll=await Nf(d,w(),s,T,E))}return ll}catch(ll){if(E?.aborted||!pn||zf(d))throw ll;return Zd(d,w(),T)}}async function p0(d,r,v=xn){const s=zn(v),T=await b0(d,{...r||{},headers:{"Content-Type":"application/json",...r?.headers||{}}},v);let E=null;try{E=await T.json()}catch(A){if(r?.signal?.aborted)throw A;E=null}if(T.ok&&d.split("?")[0]==="/api/auth/session"&&E&&typeof E=="object"){const A=E.uiSession,H=String(A?.csrfToken||"").trim(),C=Number(A?.expiresAt||0);H&&Number.isFinite(C)&&C>Date.now()&&ja.set(s,{csrfToken:H,expiresAt:C})}if(!T.ok){const A=E&&typeof E=="object"&&"error"in E?String(E.error||""):"";throw new Error(`${T.status} ${A||T.statusText}`)}return E}async function K0({baseUrl:d=xn,targetRole:r,previousRuntimePid:v=0,allowedStates:s=["running","waiting-auth"],timeoutMs:T=3e4}){const E=Date.now()+T;let A=null;for(;Date.now()<E;){try{const C=await p0("/api/runtime/status",void 0,d),w=String(C.role||"").toLowerCase(),ll=String(C.state||"").toLowerCase(),N=Number(C.runtimePid||0),K=v>1?N>1&&N!==v:N>1;if(w===r&&s.map(Zl=>Zl.toLowerCase()).includes(ll)&&K)return C}catch(C){A=C}await new Promise(C=>setTimeout(C,300))}const H=A instanceof Error?` ${A.message}`:"";throw new Error(`VuvoDesk runtime did not become ${r} with a new process.${H}`)}function J0(d,r=120){if(typeof window>"u")return;const v=new URL(window.location.href);v.port=String(d),v.pathname="/",v.search="",v.hash="";const s=v.toString();let T=0;const E=()=>{fetch(s,{cache:"no-store",mode:"no-cors"}).then(()=>window.location.replace(s)).catch(()=>{if(T+=1,T>=r){window.location.replace(s);return}window.setTimeout(E,250)})};E()}function k0(d){if(!d)return"-";const r=Date.now()-Date.parse(d);return Number.isFinite(r)?r<1e3?"now":r<6e4?`${Math.round(r/1e3)}s`:r<36e5?`${Math.round(r/6e4)}m`:`${Math.round(r/36e5)}h`:"-"}async function W0(d){await navigator.clipboard.writeText(d)}const th=5,Of=30,j0=Number.POSITIVE_INFINITY,se={free:{name:"Free",price:"$0",limit:th,audience:"Personal, ad-supported",note:"Up to 5 personal devices supported by a standard banner."},ltd:{name:"Plus",price:"$5",ltd:"$79 LTD",limit:Of,audience:"Creators and homelabs",note:"30 devices, no ads, personal use."},pro:{name:"Pro",price:"$15",ltd:"$199 LTD",limit:j0,audience:"Business and studios",note:"Commercial use and larger Client walls."}},x0="0.1.607",z0={version:x0},Ku=String(z0.version).trim();function ah({size:d=22}){return c.jsxs("svg",{width:d,height:d,viewBox:"0 0 28 28",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[c.jsx("rect",{x:"2.5",y:"4",width:"14",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7",opacity:"0.42"}),c.jsx("path",{d:"M7 16v1.5h5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",opacity:"0.42"}),c.jsx("rect",{x:"10.5",y:"2.5",width:"14",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.7",opacity:"0.62"}),c.jsx("path",{d:"M15 14.5V16h5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",opacity:"0.62"}),c.jsx("rect",{x:"6.5",y:"8.5",width:"15",height:"10",rx:"1.7",fill:"currentColor",fillOpacity:"0.12",stroke:"currentColor",strokeWidth:"1.9"}),c.jsx("path",{d:"M12 21v1.5H9.5M16 21v1.5h2.5M9.5 22.5h9",stroke:"currentColor",strokeWidth:"1.9",strokeLinecap:"round"})]})}const kd="npx -y --prefer-online livedesk@latest",T0="https://livedesk-desktop-updates.lovecrdm.workers.dev/download/dev/windows/x64";function E0(){if(typeof window>"u")return"home";const d=window.location.pathname.replace(/\/+$/,"")||"/";return d==="/"?"home":d==="/download"?"download":d==="/pricing"?"pricing":"not-found"}function nh(){return c.jsxs("a",{className:"site-brand",href:"/","aria-label":"VuvoDesk home",children:[c.jsx("span",{className:"site-brand-mark",children:c.jsx(ah,{size:25})}),c.jsx("span",{children:"VuvoDesk"})]})}function A0({page:d}){const r=[{label:"Product",href:"/#product",active:d==="home"},{label:"Pricing",href:"/pricing",active:d==="pricing"},{label:"Download",href:"/download",active:d==="download"},{label:"Support",href:"/support",active:!1}];return c.jsx("header",{className:"site-header",children:c.jsxs("div",{className:"site-header-inner",children:[c.jsx(nh,{}),c.jsx("nav",{className:"site-nav","aria-label":"Main navigation",children:r.map(v=>c.jsx("a",{className:v.active?"active":"",href:v.href,children:v.label},v.label))}),c.jsxs("div",{className:"site-header-actions",children:[c.jsx("a",{className:"site-text-link",href:"/app",children:"Open web console"}),c.jsxs("a",{className:"site-button site-button-small",href:"/download",children:["Get VuvoDesk ",c.jsx(qe,{size:15})]})]}),c.jsxs("details",{className:"site-mobile-menu",children:[c.jsx("summary",{"aria-label":"Open navigation",children:c.jsx(Uv,{size:22})}),c.jsxs("nav",{"aria-label":"Mobile navigation",children:[r.map(v=>c.jsxs("a",{href:v.href,children:[v.label,c.jsx(Cd,{size:15})]},v.label)),c.jsxs("a",{href:"/app",children:["Open web console",c.jsx(Cd,{size:15})]})]})]})]})})}function M0(){return c.jsxs("footer",{className:"site-footer",children:[c.jsxs("div",{className:"site-footer-main",children:[c.jsxs("div",{children:[c.jsx(nh,{}),c.jsx("p",{children:"One calm command center for every computer you manage."})]}),c.jsxs("div",{className:"site-footer-links",children:[c.jsxs("div",{children:[c.jsx("strong",{children:"Product"}),c.jsx("a",{href:"/#product",children:"Overview"}),c.jsx("a",{href:"/pricing",children:"Pricing"}),c.jsx("a",{href:"/download",children:"Download"})]}),c.jsxs("div",{children:[c.jsx("strong",{children:"Use VuvoDesk"}),c.jsx("a",{href:"/app",children:"Web console"}),c.jsx("a",{href:"/support",children:"Support"})]}),c.jsxs("div",{children:[c.jsx("strong",{children:"Platforms"}),c.jsx("span",{children:"Windows"}),c.jsx("span",{children:"macOS"}),c.jsx("span",{children:"Linux"}),c.jsx("span",{children:"Mobile PWA"})]})]})]}),c.jsxs("div",{className:"site-footer-bottom",children:[c.jsx("span",{children:"© 2026 VuvoDesk"}),c.jsx("span",{children:"Built for people who run real work across many screens."})]})]})}function D0(){const d=[{name:"Studio-01",status:"Online",className:"screen-blue",cpu:"42%",ram:"61%"},{name:"Render-Mac",status:"Online",className:"screen-purple",cpu:"67%",ram:"74%"},{name:"Linux-Build",status:"Online",className:"screen-green",cpu:"29%",ram:"48%"},{name:"Office-PC",status:"Idle",className:"screen-orange",cpu:"18%",ram:"37%"}];return c.jsxs("div",{className:"product-mockup","aria-label":"VuvoDesk screen wall preview",children:[c.jsxs("div",{className:"mockup-window-bar",children:[c.jsxs("div",{children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]}),c.jsx("span",{children:"VuvoDesk · Wall"}),c.jsxs("span",{className:"mockup-online",children:[c.jsx("i",{})," 4 online"]})]}),c.jsxs("div",{className:"mockup-body",children:[c.jsxs("aside",{className:"mockup-rail","aria-hidden":"true",children:[c.jsx("span",{className:"active",children:c.jsx($d,{size:17})}),c.jsx("span",{children:c.jsx(Wu,{size:17})}),c.jsx("span",{children:c.jsx(Fd,{size:17})}),c.jsx("span",{children:c.jsx(Id,{size:17})})]}),c.jsx("div",{className:"mockup-wall",children:d.map(r=>c.jsxs("article",{className:"mockup-screen",children:[c.jsxs("div",{className:`mockup-screen-image ${r.className}`,children:[c.jsx("span",{className:"mockup-code-line wide"}),c.jsx("span",{className:"mockup-code-line"}),c.jsx("span",{className:"mockup-code-line short"}),c.jsx("span",{className:"mockup-panel-block"})]}),c.jsxs("div",{className:"mockup-screen-title",children:[c.jsx("strong",{children:r.name}),c.jsxs("span",{children:[c.jsx("i",{})," ",r.status]})]}),c.jsxs("div",{className:"mockup-metrics",children:[c.jsxs("span",{children:["CPU ",c.jsx("b",{children:r.cpu})]}),c.jsxs("span",{children:["RAM ",c.jsx("b",{children:r.ram})]})]})]},r.name))})]}),c.jsxs("div",{className:"mockup-control-card",children:[c.jsx(Wu,{size:18}),c.jsxs("span",{children:[c.jsx("small",{children:"Selected computer"}),c.jsx("strong",{children:"Render-Mac"})]}),c.jsx("button",{type:"button",children:"Control"})]})]})}function uh({compact:d=!1}){const r=[{key:"free",name:se.free.name,price:se.free.price,suffix:"forever",audience:se.free.audience,description:"A practical personal wall, supported by a standard banner.",features:[`Up to ${th} devices`,"Live wall and focused control","Standard banner"],action:"Start free",href:"/app"},{key:"plus",name:se.ltd.name,price:se.ltd.price,suffix:"/ month",audience:se.ltd.audience,description:"A clean personal command center for creators and homelabs.",features:[`Up to ${Of} devices`,"No standard banner","Personal use"],ltd:se.ltd.ltd,action:"Choose Plus",href:"/app?view=pricing"},{key:"pro",name:se.pro.name,price:se.pro.price,suffix:"/ month",audience:se.pro.audience,description:"Commercial monitoring for studios, offices, and growing fleets.",features:[`More than ${Of} Clients`,"Ad-free commercial use","Large screen walls"],ltd:se.pro.ltd,action:"Choose Pro",href:"/app?view=pricing"}];return c.jsx("div",{className:`site-pricing-grid ${d?"compact":""}`,children:r.map(v=>c.jsxs("article",{className:`site-price-card ${v.key==="plus"?"featured":""}`,children:[c.jsxs("div",{className:"site-price-heading",children:[c.jsx("span",{children:v.name}),v.key==="plus"&&c.jsx("em",{children:"Most popular"})]}),c.jsx("p",{className:"site-price-audience",children:v.audience}),c.jsxs("div",{className:"site-price",children:[c.jsx("strong",{children:v.price}),c.jsx("small",{children:v.suffix})]}),c.jsx("p",{children:v.description}),c.jsx("ul",{children:v.features.map(s=>c.jsxs("li",{children:[c.jsx(Yv,{size:16})," ",s]},s))}),v.ltd&&c.jsxs("div",{className:"site-ltd",children:[c.jsxs("span",{children:[v.name," LTD"]}),c.jsx("strong",{children:v.ltd.replace(" LTD","")}),c.jsx("small",{children:"one-time · available now"})]}),c.jsxs("a",{className:`site-price-action ${v.key==="plus"?"primary":""}`,href:v.href,children:[v.action,c.jsx(qe,{size:15})]})]},v.key))})}function N0(){return c.jsx(c.Fragment,{children:c.jsxs("main",{children:[c.jsxs("section",{className:"site-hero",children:[c.jsxs("div",{className:"site-hero-copy",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(_v,{size:15})," The screen wall for real work"]}),c.jsxs("h1",{children:["Every computer.",c.jsx("br",{}),c.jsx("span",{children:"One calm command center."})]}),c.jsx("p",{children:"See every screen, focus the computer that needs you, and keep work moving from your desk or phone."}),c.jsxs("div",{className:"site-hero-actions",children:[c.jsxs("a",{className:"site-button",href:"/download",children:["Download VuvoDesk ",c.jsx(qe,{size:17})]}),c.jsxs("a",{className:"site-button site-button-secondary",href:"/app",children:["Open web console ",c.jsx(Bd,{size:17})]})]}),c.jsxs("div",{className:"site-hero-notes",children:[c.jsxs("span",{children:[c.jsx(gf,{size:15})," Free for 5 devices"]}),c.jsxs("span",{children:[c.jsx(gf,{size:15})," No credit card"]}),c.jsxs("span",{children:[c.jsx(gf,{size:15})," Windows · macOS · Linux"]})]})]}),c.jsxs("div",{className:"site-hero-visual",children:[c.jsx("div",{className:"site-orbit site-orbit-one"}),c.jsx("div",{className:"site-orbit site-orbit-two"}),c.jsx(D0,{})]})]}),c.jsxs("section",{className:"platform-strip","aria-label":"Supported platforms",children:[c.jsx("span",{children:"Built for the computers you already run"}),c.jsxs("div",{children:[c.jsxs("strong",{children:[c.jsx(Wd,{size:18})," Windows"]}),c.jsxs("strong",{children:[c.jsx(Af,{size:18})," macOS"]}),c.jsxs("strong",{children:[c.jsx(Mf,{size:18})," Linux"]}),c.jsxs("strong",{children:[c.jsx(Ju,{size:18})," iPhone & Android"]}),c.jsxs("strong",{children:[c.jsx(Bd,{size:18})," Any browser"]})]})]}),c.jsxs("section",{className:"site-section site-value-section",id:"product",children:[c.jsxs("div",{className:"site-section-heading",children:[c.jsx("span",{children:"Why VuvoDesk"}),c.jsxs("h2",{children:["Spend less time finding the problem.",c.jsx("br",{}),"Spend more time fixing it."]}),c.jsx("p",{children:"VuvoDesk keeps the fleet visible without turning your desktop into a pile of remote windows."})]}),c.jsxs("div",{className:"site-value-grid",children:[c.jsxs("article",{className:"site-value-card large blue",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx($d,{size:23})}),c.jsx("h3",{children:"A wall that stays readable"}),c.jsx("p",{children:"Move from a compact list to large live previews. Keep the signal you need and hide the noise you do not."}),c.jsxs("div",{className:"feature-wall-demo",children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]})]}),c.jsxs("article",{className:"site-value-card mint",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx(Wu,{size:23})}),c.jsx("h3",{children:"Control without losing context"}),c.jsx("p",{children:"Jump from Wall to focused Control, then return to the same fleet view."}),c.jsxs("div",{className:"feature-cursor-demo",children:[c.jsx(Wu,{size:31}),c.jsx("span",{children:"Direct control"})]})]}),c.jsxs("article",{className:"site-value-card violet",children:[c.jsx("span",{className:"site-feature-icon",children:c.jsx(Hv,{size:23})}),c.jsx("h3",{children:"Your fleet in your pocket"}),c.jsx("p",{children:"Install the PWA on iPhone or Android and check the room before you walk back to it."}),c.jsxs("div",{className:"feature-phone-demo",children:[c.jsx("span",{}),c.jsxs("div",{children:[c.jsx("i",{}),c.jsx("i",{}),c.jsx("i",{})]})]})]}),c.jsxs("article",{className:"site-value-card wide dark",children:[c.jsxs("div",{children:[c.jsxs("span",{className:"site-kicker dark",children:[c.jsx(Cv,{size:14})," Local-first when possible"]}),c.jsx("h3",{children:"Fast where you work. Reachable when you leave."}),c.jsx("p",{children:"VuvoDesk prefers the shortest useful route and keeps the current screen moving instead of building a stale queue."})]}),c.jsxs("div",{className:"feature-route",children:[c.jsxs("span",{children:[c.jsx(Af,{size:19})," Hub"]}),c.jsx("i",{}),c.jsxs("span",{children:[c.jsx(Bv,{size:19})," Clients"]}),c.jsx("i",{}),c.jsxs("span",{children:[c.jsx(Ju,{size:19})," PWA"]})]})]})]})]}),c.jsxs("section",{className:"site-section site-workflow",children:[c.jsxs("div",{className:"site-section-heading centered",children:[c.jsx("span",{children:"Start in three steps"}),c.jsx("h2",{children:"From zero to a live wall in minutes."})]}),c.jsxs("div",{className:"workflow-grid",children:[c.jsxs("article",{children:[c.jsx("b",{children:"01"}),c.jsx("span",{children:c.jsx(Df,{size:21})}),c.jsx("h3",{children:"Install the Hub"}),c.jsx("p",{children:"Choose the computer that will organize your VuvoDesk fleet."})]}),c.jsxs("article",{children:[c.jsx("b",{children:"02"}),c.jsx("span",{children:c.jsx(Fd,{size:21})}),c.jsx("h3",{children:"Connect Clients"}),c.jsx("p",{children:"Use one PIN to add the Windows, Mac, and Linux computers you manage."})]}),c.jsxs("article",{children:[c.jsx("b",{children:"03"}),c.jsx("span",{children:c.jsx(Ju,{size:21})}),c.jsx("h3",{children:"Manage from anywhere"}),c.jsx("p",{children:"Open the web console or install the mobile PWA and keep every screen close."})]})]})]}),c.jsxs("section",{className:"site-section site-pricing-section",children:[c.jsxs("div",{className:"site-section-heading centered",children:[c.jsx("span",{children:"Simple pricing"}),c.jsx("h2",{children:"Start free. Upgrade when the wall earns its place."}),c.jsx("p",{children:"Monthly prices stay easy to understand. Lifetime offers are available separately below each paid plan."})]}),c.jsx(uh,{compact:!0}),c.jsxs("a",{className:"site-inline-link",href:"/pricing",children:["Compare every plan ",c.jsx(qe,{size:15})]})]}),c.jsxs("section",{className:"site-final-cta",children:[c.jsxs("div",{children:[c.jsxs("span",{className:"site-kicker dark",children:[c.jsx(qv,{size:14})," Your fleet, one glance away"]}),c.jsxs("h2",{children:["Give every computer",c.jsx("br",{}),"one clear place to report."]})]}),c.jsxs("div",{children:[c.jsx("p",{children:"Start with five devices for free. Install the Hub, connect a Client, and open your first live wall."}),c.jsxs("div",{children:[c.jsxs("a",{className:"site-button light",href:"/download",children:["Get VuvoDesk ",c.jsx(qe,{size:17})]}),c.jsx("a",{className:"site-button ghost",href:"/app",children:"Open console"})]})]})]})]})})}function O0(){const[d,r]=jn.useState(!1),v=async()=>{try{await navigator.clipboard.writeText(kd),r(!0),window.setTimeout(()=>r(!1),1800)}catch{r(!1)}};return c.jsxs("main",{className:"site-subpage",children:[c.jsxs("section",{className:"site-subpage-hero download-hero",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(Df,{size:15})," Download VuvoDesk"]}),c.jsxs("h1",{children:["Turn one computer into",c.jsx("br",{}),c.jsx("span",{children:"your command center."})]}),c.jsx("p",{children:"Download the Windows Electron installer directly. macOS and Linux currently use the same npm package while signed desktop installers are prepared."})]}),c.jsxs("section",{className:"download-grid",children:[c.jsxs("article",{id:"windows",children:[c.jsx("span",{className:"download-platform-icon windows",children:c.jsx(Wd,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"Windows"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · x64 Electron"]}),c.jsx("span",{className:"download-preview-note",children:"Preview installer · unsigned"}),c.jsx("h2",{children:"Install VuvoDesk for Windows"}),c.jsx("p",{children:"Download the normal Electron setup program. Windows SmartScreen may warn about this preview until code signing is ready."})]}),c.jsxs("a",{className:"download-installer-link",href:T0,children:["Download Windows installer ",c.jsx(Df,{size:16})]})]}),c.jsxs("article",{id:"macos",children:[c.jsx("span",{className:"download-platform-icon mac",children:c.jsx(Af,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"macOS"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · Intel & Apple silicon"]}),c.jsx("h2",{children:"Run VuvoDesk on macOS"}),c.jsx("p",{children:"Use Terminal on Apple silicon or Intel. Keep the Terminal window open while this early release is running."})]}),c.jsxs("a",{href:"#install-command",children:["Install with one command ",c.jsx(qe,{size:16})]})]}),c.jsxs("article",{id:"linux",children:[c.jsx("span",{className:"download-platform-icon linux",children:c.jsx(Mf,{size:27})}),c.jsxs("div",{children:[c.jsx("small",{children:"Linux"}),c.jsxs("span",{className:"download-version",children:["VuvoDesk ",Ku," · x64 · X11"]}),c.jsx("h2",{children:"Run VuvoDesk on Linux"}),c.jsx("p",{children:"Use a current Node.js release and launch VuvoDesk from your preferred terminal."})]}),c.jsxs("a",{href:"#install-command",children:["Install with one command ",c.jsx(qe,{size:16})]})]})]}),c.jsxs("section",{className:"install-command-card",id:"install-command",children:[c.jsxs("div",{children:[c.jsxs("span",{children:[c.jsx(Mf,{size:18})," One command install"]}),c.jsx("h2",{children:"macOS, Linux, and advanced setup"}),c.jsx("p",{children:"Node.js and npm are required for the current command-line release."})]}),c.jsxs("div",{className:"install-command",children:[c.jsx("code",{children:kd}),c.jsxs("button",{type:"button",onClick:()=>{v()},children:[c.jsx(Rv,{size:17})," ",d?"Copied":"Copy"]})]}),c.jsxs("ol",{children:[c.jsxs("li",{children:[c.jsx("b",{children:"1"}),c.jsx("span",{children:"Run the command on the computer that will be your Hub."})]}),c.jsxs("li",{children:[c.jsx("b",{children:"2"}),c.jsx("span",{children:"Open Settings and create a Hub PIN."})]}),c.jsxs("li",{children:[c.jsx("b",{children:"3"}),c.jsx("span",{children:"Run the same package as a Client on the other computers."})]})]})]}),c.jsxs("section",{className:"mobile-install-section",id:"mobile",children:[c.jsxs("div",{className:"mobile-install-heading",children:[c.jsx("span",{children:c.jsx(Ju,{size:26})}),c.jsxs("div",{children:[c.jsxs("small",{children:["iPhone & Android · PWA ",Ku]}),c.jsx("h2",{children:"No app store required."}),c.jsx("p",{children:"Open the public web address, sign in, then install VuvoDesk on the Home Screen. The PWA always starts directly in the console."})]})]}),c.jsxs("div",{className:"mobile-web-address",children:[c.jsx("span",{children:"Mobile web address"}),c.jsx("a",{href:"https://vuvodesk.com/app",children:"https://vuvodesk.com/app"}),c.jsxs("a",{className:"site-button",href:"/app",children:["Open mobile console ",c.jsx(qe,{size:16})]})]}),c.jsxs("div",{className:"pwa-guide-grid",children:[c.jsxs("article",{children:[c.jsx("strong",{children:"iPhone & iPad"}),c.jsxs("ol",{children:[c.jsx("li",{children:"Open the address in Safari."}),c.jsx("li",{children:"Tap Share, then Add to Home Screen."}),c.jsx("li",{children:"Choose Open as Web App and add VuvoDesk."})]})]}),c.jsxs("article",{children:[c.jsx("strong",{children:"Android"}),c.jsxs("ol",{children:[c.jsx("li",{children:"Open the address in Chrome."}),c.jsx("li",{children:"Open the browser menu and tap Install app."}),c.jsx("li",{children:"Launch VuvoDesk from the Home Screen."})]})]})]})]})]})}function U0(){return c.jsxs("main",{className:"site-subpage pricing-subpage",children:[c.jsxs("section",{className:"site-subpage-hero",children:[c.jsxs("span",{className:"site-kicker",children:[c.jsx(qd,{size:15})," VuvoDesk pricing"]}),c.jsxs("h1",{children:["Clear plans for",c.jsx("br",{}),c.jsx("span",{children:"growing screen walls."})]}),c.jsx("p",{children:"Use VuvoDesk free on five personal computers. Choose Plus for a larger ad-free personal wall, or Pro for commercial work."})]}),c.jsx(uh,{}),c.jsxs("section",{className:"pricing-explainer",children:[c.jsxs("article",{children:[c.jsx(wv,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Free stays useful"}),c.jsx("p",{children:"The standard banner helps keep a five-device personal wall available without a subscription."})]})]}),c.jsxs("article",{children:[c.jsx(qd,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Monthly and lifetime are separate"}),c.jsx("p",{children:"$5 and $15 are monthly plan prices. Plus LTD $79 and Pro LTD $199 are one-time offers shown separately."})]})]}),c.jsxs("article",{children:[c.jsx(Id,{size:21}),c.jsxs("div",{children:[c.jsx("h3",{children:"Upgrade inside VuvoDesk"}),c.jsx("p",{children:"Sign in to the console, open Pricing, and choose the plan that matches the way you use the fleet."})]})]})]}),c.jsxs("section",{className:"pricing-bottom-cta",children:[c.jsxs("div",{children:[c.jsx("h2",{children:"Start with the computers you have today."}),c.jsx("p",{children:"No credit card is needed for Free."})]}),c.jsxs("a",{className:"site-button",href:"/app",children:["Start free ",c.jsx(qe,{size:16})]})]})]})}function _0(){return c.jsxs("main",{className:"site-not-found",children:[c.jsx("span",{className:"site-brand-mark",children:c.jsx(ah,{size:25})}),c.jsx("small",{children:"404"}),c.jsx("h1",{children:"This screen is not on the wall."}),c.jsx("p",{children:"The page may have moved, but your VuvoDesk console is still here."}),c.jsxs("div",{children:[c.jsx("a",{className:"site-button",href:"/",children:"VuvoDesk home"}),c.jsx("a",{className:"site-button site-button-secondary",href:"/app",children:"Open console"})]})]})}function H0(){const d=E0();return jn.useEffect(()=>{const r={home:"VuvoDesk — Every computer. One calm command center.",download:"Download VuvoDesk — Windows, macOS, and Linux",pricing:"VuvoDesk Pricing — Free, Plus, and Pro","not-found":"Page not found — VuvoDesk"};return document.title=r[d],document.documentElement.classList.add("livedesk-marketing-active"),()=>document.documentElement.classList.remove("livedesk-marketing-active")},[d]),c.jsxs("div",{className:"marketing-site",children:[c.jsx(A0,{page:d}),d==="home"?c.jsx(N0,{}):d==="download"?c.jsx(O0,{}):d==="pricing"?c.jsx(U0,{}):c.jsx(_0,{}),c.jsx(M0,{})]})}function C0(d){return!!d.navigatorStandalone||!!d.displayModeStandalone||!!d.displayModeFullscreen}function B0({publicOrigin:d,electron:r,pathname:v,search:s="",navigatorStandalone:T=!1,displayModeStandalone:E=!1,displayModeFullscreen:A=!1,marketingPreview:H=!1}){if(r||!d&&!H)return{kind:"app",redirectPath:""};const C=new URLSearchParams(s),w=C.has("pwa")||C0({navigatorStandalone:T,displayModeStandalone:E,displayModeFullscreen:A}),ll=v==="/app"||v.startsWith("/app/"),N=v==="/support"||v.startsWith("/support/"),K=C.has("checkout");return w||K?{kind:"app",redirectPath:ll?"":"/app"}:ll||N?{kind:"app",redirectPath:""}:{kind:"site",redirectPath:""}}const q0=jn.lazy(()=>Qv(()=>import("./LiveDeskApp-Dw86X0VP.js"),__vite__mapDeps([0,1,2,3,4])).then(d=>({default:d.LiveDeskApp})));window.liveDesk&&document.documentElement.classList.add("livedesk-electron-desktop");const Ot=new URL(window.location.href),R0=!!window.navigator.standalone,Uf=B0({publicOrigin:S0(),electron:!!window.liveDesk,pathname:Ot.pathname,search:Ot.search,navigatorStandalone:R0,displayModeStandalone:window.matchMedia("(display-mode: standalone)").matches,displayModeFullscreen:window.matchMedia("(display-mode: fullscreen)").matches,marketingPreview:Ot.searchParams.get("site")==="1"});Uf.redirectPath&&(Ot.pathname=Uf.redirectPath,window.history.replaceState({},"",`${Ot.pathname}${Ot.search}${Ot.hash}`));$v.createRoot(document.getElementById("root")).render(c.jsx(jn.StrictMode,{children:Uf.kind==="site"?c.jsx(H0,{}):c.jsx(jn.Suspense,{fallback:c.jsx("main",{className:"runtime-role-boot","aria-label":"Starting VuvoDesk",children:c.jsx("strong",{children:"Starting VuvoDesk"})}),children:c.jsx(q0,{})})}));const ih="serviceWorker"in navigator&&window.isSecureContext&&window.location.protocol==="https:";let Tf=null;function Ef(){!ih||Tf||(Tf=(async()=>{await(await navigator.serviceWorker.register("/sw.js",{updateViaCache:"none"})).update();const r=await fetch(`/sw.js?pwa-release-check=${Date.now()}`,{cache:"no-store"});if(!r.ok)return;const s=(await r.text()).match(/const PWA_RELEASE = ['"](\d+\.\d+\.\d+)['"];/)?.[1],T=new URL(window.location.href);if(!s||!T.searchParams.has("pwa"))return;const E=T.pathname!=="/app",A=T.searchParams.get("pwa")!==s;!E&&!A||(T.pathname="/app",T.searchParams.set("pwa",s),window.location.replace(T.toString()))})().catch(d=>{console.warn("[VuvoDesk] PWA update check failed.",d)}).finally(()=>{Tf=null}))}ih&&(Ef(),window.addEventListener("pageshow",Ef),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&Ef()}));export{xn as D,th as F,ah as M,Of as P,V0 as a,L0 as b,X0 as c,J0 as d,W0 as e,k0 as f,g0 as g,p0 as h,S0 as i,c as j,b0 as k,Z0 as l,Q0 as m,zn as n,se as p,G0 as r,K0 as w};
@@ -18,7 +18,7 @@
18
18
  <link rel="icon" href="/favicon.ico" sizes="any" />
19
19
  <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
20
20
  <title>VuvoDesk — Every computer. One calm command center.</title>
21
- <script type="module" crossorigin src="/assets/index-DRenaErr.js"></script>
21
+ <script type="module" crossorigin src="/assets/index-C4QRbhif.js"></script>
22
22
  <link rel="modulepreload" crossorigin href="/assets/icons-JxbtiHLQ.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/react-hDor0Pi9.js">
24
24
  <link rel="stylesheet" crossorigin href="/assets/index-CpHNEjHy.css">
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "kind": "livedesk-production-web-source-evidence",
4
- "generatedAt": "2026-08-23T09:25:04.593Z",
5
- "pwaRelease": "0.1.605",
6
- "sourceHash": "0aa8d365e93cf06d2f25b504804fd2ea8e10d93568098ea031b01ae3e86bd23d",
4
+ "generatedAt": "2026-08-23T13:26:18.105Z",
5
+ "pwaRelease": "0.1.607",
6
+ "sourceHash": "e1193ba7d257f6cd344382453c06d0325c0199ecae91fb57a00c5324e78ab7c6",
7
7
  "sourceFileCount": 163,
8
- "sourceBytes": 2388162,
8
+ "sourceBytes": 2388196,
9
9
  "viteEnvironmentHash": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
10
- "outputHash": "1fbafdc720c63a1e21c0d1255163de0972c8d6dd117f81f615975eae7c99fe37",
10
+ "outputHash": "e63b6ddce4fc173170b1b24f58bf6e7b5a05ca9900f47233c304f3537d380be4",
11
11
  "outputFileCount": 20,
12
- "outputBytes": 1710885,
12
+ "outputBytes": 1710915,
13
13
  "outputManifest": [
14
14
  {
15
15
  "path": "_headers",
@@ -19,7 +19,7 @@
19
19
  {
20
20
  "path": "app.webmanifest",
21
21
  "bytes": 841,
22
- "sha256": "3342bea256c493e6a59eed4dff65e1d4717f2cbf1baa4c81494a04dda4543813"
22
+ "sha256": "9fe2ed005f882bb1598a32441e8da5a49de4157a51d2d6fbcde6c066e0ec6768"
23
23
  },
24
24
  {
25
25
  "path": "apple-touch-icon.png",
@@ -32,25 +32,25 @@
32
32
  "sha256": "23068eca5024042f76bce74f86a04f9ef7696baae83349814d7fbe1db902a7e4"
33
33
  },
34
34
  {
35
- "path": "assets/index-CpHNEjHy.css",
36
- "bytes": 149602,
37
- "sha256": "c1a77acb40e700f25beb200775bbd91c0662e97243724e7cdda099c675634ea4"
38
- },
39
- {
40
- "path": "assets/index-DRenaErr.js",
35
+ "path": "assets/index-C4QRbhif.js",
41
36
  "bytes": 223995,
42
- "sha256": "a895d731eec1adc513237a7febd393fa15db917aec01768ebffda684aba3a4f2"
37
+ "sha256": "da1cc406c355a40c0a088fad45d924374d8850ca13ad958651714221125136b6"
43
38
  },
44
39
  {
45
- "path": "assets/LiveDeskApp-Bv0fQKd_.js",
46
- "bytes": 816566,
47
- "sha256": "bd9ae2a059f3def8484841a541b4fd2f4745661231d13236a6394879671967e9"
40
+ "path": "assets/index-CpHNEjHy.css",
41
+ "bytes": 149602,
42
+ "sha256": "c1a77acb40e700f25beb200775bbd91c0662e97243724e7cdda099c675634ea4"
48
43
  },
49
44
  {
50
45
  "path": "assets/LiveDeskApp-ChGXEkMA.css",
51
46
  "bytes": 212493,
52
47
  "sha256": "7a0fd24bdd85c2df6493ef78c5fb3dc92a1b32bb4adaf1092728c11fc9420163"
53
48
  },
49
+ {
50
+ "path": "assets/LiveDeskApp-Dw86X0VP.js",
51
+ "bytes": 816596,
52
+ "sha256": "3a4faea5d77bc8e8e68abe7f14fcbf644f32404cba86aaabd23933b6f76e77a5"
53
+ },
54
54
  {
55
55
  "path": "assets/react-hDor0Pi9.js",
56
56
  "bytes": 3654,
@@ -84,7 +84,7 @@
84
84
  {
85
85
  "path": "index.html",
86
86
  "bytes": 1684,
87
- "sha256": "1f3337f8516e8ef43e3d29a97453f4adc9475435218e1edc3e2bb40564d94a24"
87
+ "sha256": "d20e8280237d2ad5b57a0f1d120f1fc593fb277058a8cfd582c84e346c052d99"
88
88
  },
89
89
  {
90
90
  "path": "offline.html",
@@ -109,7 +109,7 @@
109
109
  {
110
110
  "path": "sw.js",
111
111
  "bytes": 1460,
112
- "sha256": "c1b57fdb2aa391c76991875cf4aebe2e9c40938e52cadd030bcd5aa81ba47390"
112
+ "sha256": "8144db35f66336e53ea1515ac64f584f297f25bb454ebbcafc992590babf2161"
113
113
  }
114
114
  ]
115
115
  }
package/web/dist/sw.js CHANGED
@@ -1,4 +1,4 @@
1
- const PWA_RELEASE = '0.1.605';
1
+ const PWA_RELEASE = '0.1.607';
2
2
  const OFFLINE_CACHE = `livedesk-pwa-offline-${PWA_RELEASE}`;
3
3
  const OFFLINE_URL = '/offline.html';
4
4