palmier 0.9.5 → 0.9.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.
- package/README.md +4 -2
- package/dist/commands/init.js +2 -2
- package/dist/pwa/apple-touch-icon.png +0 -0
- package/dist/pwa/assets/index-D1bIhEbd.css +1 -0
- package/dist/pwa/assets/{index-Cvffaohh.js → index-MLEFUP3r.js} +3 -3
- package/dist/pwa/assets/{web-qdLcAD7T.js → web-B1sKCc7e.js} +1 -1
- package/dist/pwa/assets/{web-hExASsqW.js → web-B4xEa6WO.js} +1 -1
- package/dist/pwa/assets/{web-ChtbM4nv.js → web-ETD-8ZHd.js} +1 -1
- package/dist/pwa/favicon.ico +0 -0
- package/dist/pwa/index.html +3 -3
- package/dist/pwa/manifest.webmanifest +1 -1
- package/dist/pwa/pwa-192x192.png +0 -0
- package/dist/pwa/pwa-512x512.png +0 -0
- package/dist/pwa/service-worker.js +1 -1
- package/dist/rpc-handler.js +3 -9
- package/dist/task.d.ts +1 -0
- package/dist/task.js +14 -0
- package/package.json +1 -1
- package/palmier-server/pwa/index.html +1 -1
- package/palmier-server/pwa/logo/logo_20260421.png +0 -0
- package/palmier-server/pwa/public/apple-touch-icon.png +0 -0
- package/palmier-server/pwa/public/favicon.ico +0 -0
- package/palmier-server/pwa/public/pwa-192x192.png +0 -0
- package/palmier-server/pwa/public/pwa-512x512.png +0 -0
- package/palmier-server/pwa/src/App.css +8 -0
- package/palmier-server/pwa/src/components/CapabilityToggles.tsx +1 -1
- package/palmier-server/pwa/src/components/ConnectionStatusIcon.tsx +5 -6
- package/palmier-server/pwa/src/components/HostMenu.tsx +1 -1
- package/palmier-server/pwa/src/components/TaskForm.tsx +3 -1
- package/palmier-server/pwa/vite.config.ts +1 -1
- package/src/commands/init.ts +2 -2
- package/src/rpc-handler.ts +3 -6
- package/src/task.ts +13 -0
- package/dist/pwa/assets/index-DBgOYBrB.css +0 -1
- package/palmier-server/pwa/logo/logo-prompt.md +0 -28
- package/palmier-server/pwa/logo/logo_20260330.png +0 -0
|
@@ -84,10 +84,10 @@ ${d}`),g(S);return}f(null,T),s.strategy===xr.Count&&(m--,m===0&&g()),s.strategy=
|
|
|
84
84
|
|
|
85
85
|
${f.stack}`),d.unsubscribe(),c.reject(m)):(m=hx(y),m?(f&&(m.stack+=`
|
|
86
86
|
|
|
87
|
-
${f.stack}`),c.reject(m)):c.resolve(y))}});return d.requestSubject=t,this.protocol.publish(t,r,{reply:u,headers:s.headers}),c}else{const u=new px(this.protocol.muxSubscriptions,t,s,l);this.protocol.request(u);try{this.publish(t,r,{reply:`${this.protocol.muxSubscriptions.baseInbox}${u.token}`,headers:s.headers})}catch(f){u.cancel(f)}const c=Promise.race([u.timer,u.deferred]);return c.catch(()=>{u.cancel()}),c}}flush(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.protocol.flush()}drain(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.isDraining()?Promise.reject(Te.errorForCode(Se.ConnectionDraining)):(this.draining=!0,this.protocol.drain())}isClosed(){return this.protocol.isClosed()}isDraining(){return this.draining}getServer(){const t=this.protocol.getServer();return t?t.listen:""}status(){const t=new an;return t.iterClosed.then(()=>{const r=this.listeners.indexOf(t);this.listeners.splice(r,1)}),this.listeners.push(t),t}get info(){return this.protocol.isClosed()?void 0:this.protocol.info}async context(){return(await this.request("$SYS.REQ.USER.INFO")).json((r,s)=>r==="time"?new Date(Date.parse(s)):s)}stats(){return{inBytes:this.protocol.inBytes,outBytes:this.protocol.outBytes,inMsgs:this.protocol.inMsgs,outMsgs:this.protocol.outMsgs}}async jetstreamManager(t={}){const r=new Dk(this,t);if(t.checkAPI!==!1)try{await r.getAccountInfo()}catch(s){const l=s;throw l.code===Se.NoResponders&&(l.code=Se.JetStreamNotEnabled),l}return r}jetstream(t={}){return new Bd(this,t)}getServerVersion(){const t=this.info;return t?ms(t.version):void 0}async rtt(){if(!this.protocol._closed&&!this.protocol.connected)throw Te.errorForCode(Se.Disconnect);const t=Date.now();return await this.flush(),Date.now()-t}get features(){return this.protocol.features}get services(){return this._services||(this._services=new Bk(this)),this._services}reconnect(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.isDraining()?Promise.reject(Te.errorForCode(Se.ConnectionDraining)):this.protocol.reconnect()}}class Bk{constructor(t){C(this,"nc");this.nc=t}add(t){try{return new Yl(this.nc,t).start()}catch(r){return Promise.reject(r)}}client(t,r){return new yk(this.nc,t,r)}}class Pk{constructor(t,r,s){C(this,"bucket");C(this,"sm");C(this,"prefixLen");this.bucket=t,this.prefixLen=r,this.sm=s}get key(){return this.sm.subject.substring(this.prefixLen)}get value(){return this.sm.data}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){return this.sm.header.get(zu)||"PUT"}get length(){const t=this.sm.header.get(En.MessageSizeHdr)||"";return t!==""?parseInt(t,10):this.sm.data.length}json(){return this.sm.json()}string(){return this.sm.string()}}class qk{constructor(t,r,s){C(this,"bucket");C(this,"key");C(this,"sm");this.bucket=t,this.key=r,this.sm=s}get value(){return this.sm.data}get created(){return new Date(Md(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){var t;return((t=this.sm.headers)==null?void 0:t.get(zu))||"PUT"}get delta(){return this.sm.info.pending}get length(){var r;const t=((r=this.sm.headers)==null?void 0:r.get(En.MessageSizeHdr))||"";return t!==""?parseInt(t,10):this.sm.data.length}json(){return this.sm.json()}string(){return this.sm.string()}}class jx extends y2{constructor(r,s,l){super(r.nc,s,l);C(this,"js");C(this,"monitor");this.js=r,this.monitor=null,this.sub.closed.then(()=>{this.monitor&&this.monitor.cancel()})}set info(r){this.sub.info=r}get info(){return this.sub.info}_resetOrderedConsumer(r){if(this.info===null||this.sub.isClosed())return;const s=ni(this.js.nc.options.inboxPrefix);this.js.nc._resub(this.sub,s);const u=this.info;u.config.name=Pi.next(),u.ordered_consumer_sequence.delivery_seq=0,u.flow_control.heartbeat_count=0,u.flow_control.fc_count=0,u.flow_control.consumer_restarts++,u.deliver=s,u.config.deliver_subject=s,u.config.deliver_policy=Vt.StartSequence,u.config.opt_start_seq=r;const c={};c.stream_name=this.info.stream,c.config=u.config;const f=`${u.api.prefix}.CONSUMER.CREATE.${u.stream}`;this.js._request(f,c,{retries:-1}).then(d=>{const m=d,y=this.sub.info;y.last=m,this.info.config=m.config,this.info.name=m.name}).catch(d=>{const m=new Te(`unable to recreate ordered consumer ${u.stream} at seq ${r}`,Se.RequestError,d);this.sub.callback(m,{})})}_maybeSetupHbMonitoring(){var s,l;const r=((l=(s=this.info)==null?void 0:s.config)==null?void 0:l.idle_heartbeat)||0;r&&this._setupHbMonitoring(Md(r))}_setupHbMonitoring(r,s=0){const l={cancelAfter:0,maxOut:2};s&&(l.cancelAfter=s);const u=this.sub,c=f=>{var y,g,x,w;const d=Q_(409,`${or.IdleHeartbeatMissed}: ${f}`,this.sub.subject);if(!((y=this.info)==null?void 0:y.ordered))this.sub.callback(null,d);else{if(!this.js.nc.protocol.connected)return!1;const S=((x=(g=this.info)==null?void 0:g.ordered_consumer_sequence)==null?void 0:x.stream_seq)||0;return this._resetOrderedConsumer(S+1),(w=this.monitor)==null||w.restart(),!1}return!u.noIterator};this.monitor=new Ld(r,c,l)}_checkHbOrderConsumer(r){const s=r.headers.get(En.ConsumerStalledHdr);s!==""&&this.js.nc.publish(s);const l=parseInt(r.headers.get(En.LastConsumerSeqHdr),10),u=this.info.ordered_consumer_sequence;return this.info.flow_control.heartbeat_count++,l!==u.delivery_seq&&this._resetOrderedConsumer(u.stream_seq+1),!1}_checkOrderedConsumer(r){const s=this.info.ordered_consumer_sequence,l=r.info.streamSequence,u=r.info.deliverySequence;return u!=s.delivery_seq+1?(this._resetOrderedConsumer(s.stream_seq+1),!1):(s.delivery_seq=u,s.stream_seq=l,!0)}async destroy(){this.isClosed()||await this.drain();const r=this.sub.info,s=r.config.durable_name||r.name,l=`${r.api.prefix}.CONSUMER.DELETE.${r.stream}.${s}`;await r.api._request(l)}async consumerInfo(){const r=this.sub.info,s=r.config.durable_name||r.name,l=`${r.api.prefix}.CONSUMER.INFO.${r.stream}.${s}`,u=await r.api._request(l);return r.last=u,u}}class Hk extends jx{constructor(t,r,s){super(t,r,s)}pull(t={batch:1}){const{stream:r,config:s,name:l}=this.sub.info,u=s.durable_name??l,c={};if(c.batch=t.batch||1,c.no_wait=t.no_wait||!1,(t.max_bytes??0)>0){const m=this.js.nc.features.get(mt.JS_PULL_MAX_BYTES);if(!m.ok)throw new Error(`max_bytes is only supported on servers ${m.min} or better`);c.max_bytes=t.max_bytes}let f=0;t.expires&&t.expires>0&&(f=t.expires,c.expires=Ut(f));let d=0;if(t.idle_heartbeat&&t.idle_heartbeat>0&&(d=t.idle_heartbeat,c.idle_heartbeat=Ut(d)),d&&f===0)throw new Error("idle_heartbeat requires expires");if(d>f)throw new Error("expires must be greater than idle_heartbeat");if(this.info){this.monitor&&this.monitor.cancel(),f&&d&&(this.monitor?this.monitor._change(d,f):this._setupHbMonitoring(d,f));const m=this.info.api,y=`${m.prefix}.CONSUMER.MSG.NEXT.${r}.${u}`,g=this.sub.subject;m.nc.publish(y,m.jc.encode(c),{reply:g})}}}function Ik(e,t){return e?$k(t):Fk(t)}function Fk(e){return(t,r)=>t?[t,null]:(t=ua(r),t?[t,null]:[null,Pl(r,e)])}function $k(e){return(t,r)=>{if(t)return[t,null];const s=ua(r);return s!==null?[Tx(s),null]:[null,Pl(r,e)]}}function Tx(e){if(e!==null)switch(e.code){case Se.JetStream404NoMessages:case Se.JetStream408RequestTimeout:return null;case Se.JetStream409:return Z_(e)?e:null;default:return e}return null}function Yk(e){e&&e.ack()}function Gk(e){const t=e.split(".");if(t.length===9&&t.splice(2,0,"_",""),t.length<11||t[0]!=="$JS"||t[1]!=="ACK")throw new Error("not js message");const r={};return r.domain=t[2]==="_"?"":t[2],r.account_hash=t[3],r.stream=t[4],r.consumer=t[5],r.deliveryCount=parseInt(t[6],10),r.redeliveryCount=r.deliveryCount,r.redelivered=r.deliveryCount>1,r.streamSequence=parseInt(t[7],10),r.deliverySequence=parseInt(t[8],10),r.timestampNanos=parseInt(t[9],10),r.pending=parseInt(t[10],10),r}class Vk{constructor(t,r){C(this,"msg");C(this,"di");C(this,"didAck");C(this,"timeout");this.msg=t,this.didAck=!1,this.timeout=r}get subject(){return this.msg.subject}get sid(){return this.msg.sid}get data(){return this.msg.data}get headers(){return this.msg.headers}get info(){return this.di||(this.di=Gk(this.reply)),this.di}get redelivered(){return this.info.deliveryCount>1}get reply(){return this.msg.reply||""}get seq(){return this.info.streamSequence}doAck(t){this.didAck||(this.didAck=!this.isWIP(t),this.msg.respond(t))}isWIP(t){return t.length===4&&t[0]===xl[0]&&t[1]===xl[1]&&t[2]===xl[2]&&t[3]===xl[3]}async ackAck(t){var s;t=t||{},t.timeout=t.timeout||this.timeout;const r=Bt();if(this.didAck)r.resolve(!1);else if(this.didAck=!0,this.msg.reply){const u=this.msg.publisher,c=!((s=u.options)!=null&&s.noAsyncTraces),f=new px(u.muxSubscriptions,this.msg.reply,{timeout:t.timeout},c);u.request(f);try{u.publish(this.msg.reply,M0,{reply:`${u.muxSubscriptions.baseInbox}${f.token}`})}catch(d){f.cancel(d)}try{await Promise.race([f.timer,f.deferred]),r.resolve(!0)}catch(d){f.cancel(d),r.reject(d)}}else r.resolve(!1);return r}ack(){this.doAck(M0)}nak(t){let r=Ak;t&&(r=Nu().encode(`-NAK ${JSON.stringify({delay:Ut(t)})}`)),this.doAck(r)}working(){this.doAck(xl)}next(t,r={batch:1}){const s={};s.batch=r.batch||1,s.no_wait=r.no_wait||!1,r.expires&&r.expires>0&&(s.expires=Ut(r.expires));const l=vr().encode(s),u=ga.concat(jk,Nk,l),c=t?{reply:t}:void 0;this.msg.respond(u,c)}term(t=""){let r=Tk;(t==null?void 0:t.length)>0&&(r=Nu().encode(`+TERM ${t}`)),this.doAck(r)}json(){return this.msg.json()}string(){return this.msg.string()}}const Jk="1.30.3",Xk="nats.ws";class Kk{constructor(){C(this,"version");C(this,"lang");C(this,"closeError");C(this,"connected");C(this,"done");C(this,"socket");C(this,"options");C(this,"socketClosed");C(this,"encrypted");C(this,"peeked");C(this,"yields");C(this,"signal");C(this,"closedNotification");this.version=Jk,this.lang=Xk,this.connected=!1,this.done=!1,this.socketClosed=!1,this.encrypted=!1,this.peeked=!1,this.yields=[],this.signal=Bt(),this.closedNotification=Bt()}async connect(t,r){const s=Bt();if(r.tls)return s.reject(new Te("tls",Se.InvalidOption)),s;this.options=r;const l=t.src;if(r.wsFactory){const{socket:u,encrypted:c}=await r.wsFactory(t.src,r);this.socket=u,this.encrypted=c}else this.encrypted=l.indexOf("wss://")===0,this.socket=new WebSocket(l);return this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{this.isDiscarded()},this.socket.onmessage=u=>{if(this.isDiscarded())return;if(this.yields.push(new Uint8Array(u.data)),this.peeked){this.signal.resolve();return}const c=ga.concat(...this.yields),f=_2(c);if(f!==""){const d=uk.exec(f);if(!d){r.debug&&console.error("!!!",cu(c)),s.reject(new Error("unexpected response from server"));return}try{const m=JSON.parse(d[1]);lk(m,this.options),this.peeked=!0,this.connected=!0,this.signal.resolve(),s.resolve()}catch(m){s.reject(m);return}}},this.socket.onclose=u=>{if(this.isDiscarded())return;this.socketClosed=!0;let c;this.done||(u.wasClean||(c=new Error(u.reason)),this._closed(c))},this.socket.onerror=u=>{if(this.isDiscarded())return;const c=u,f=new Te(c.message,Se.Unknown,new Error(c.error));s.reject(f)},s}disconnect(){this._closed(void 0,!0)}async _closed(t,r=!0){if(!this.isDiscarded()&&this.connected&&!this.done){if(this.closeError=t,!t)for(;!this.socketClosed&&this.socket.bufferedAmount>0;)await Sa(100);this.done=!0;try{this.socket.close(t?1002:1e3,t?t.message:void 0)}catch{}r&&this.closedNotification.resolve(t)}}get isClosed(){return this.done}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){for(;;){if(this.isDiscarded())return;this.yields.length===0&&await this.signal;const t=this.yields;this.yields=[];for(let r=0;r<t.length;r++)this.options.debug&&console.info(`> ${cu(t[r])}`),yield t[r];if(this.done)break;this.yields.length===0&&(t.length=0,this.yields=t,this.signal=Bt())}}isEncrypted(){return this.connected&&this.encrypted}send(t){if(!this.isDiscarded())try{this.socket.send(t.buffer),this.options.debug&&console.info(`< ${cu(t)}`);return}catch(r){this.options.debug&&console.error(`!!! ${cu(t)}: ${r}`)}}close(t){return this._closed(t,!1)}closed(){return this.closedNotification}isDiscarded(){return this.done?(this.discard(),!0):!1}discard(){var t;this.done=!0;try{(t=this.socket)==null||t.close()}catch{}}}function Qk(e,t){/^(.*:\/\/)(.*)/.test(e)||(typeof t=="boolean"?e=`${t===!0?"https":"http"}://${e}`:e=`https://${e}`);let s=new URL(e);const l=s.protocol.toLowerCase();l==="ws:"&&(t=!1),l==="wss:"&&(t=!0),l!=="https:"&&l!=="http"&&(e=e.replace(/^(.*:\/\/)(.*)/gm,"$2"),s=new URL(`http://${e}`));let u,c;const f=s.hostname,d=s.pathname,m=s.search||"";switch(l){case"http:":case"ws:":case"nats:":c=s.port||"80",u="ws:";break;case"https:":case"wss:":case"tls:":c=s.port||"443",u="wss:";break;default:c=s.port||t===!0?"443":"80",u=t===!0?"wss:":"ws:";break}return`${u}//${f}:${c}${d}${m}`}function Nx(e={}){return b2({defaultPort:443,urlParseFn:Qk,factory:()=>new Kk}),Pd.connect(e)}/*! Capacitor: https://capacitorjs.com/ - MIT License */var ya;(function(e){e.Unimplemented="UNIMPLEMENTED",e.Unavailable="UNAVAILABLE"})(ya||(ya={}));class Ah extends Error{constructor(t,r,s){super(t),this.message=t,this.code=r,this.data=s}}const Zk=e=>{var t,r;return e!=null&&e.androidBridge?"android":!((r=(t=e==null?void 0:e.webkit)===null||t===void 0?void 0:t.messageHandlers)===null||r===void 0)&&r.bridge?"ios":"web"},Wk=e=>{const t=e.CapacitorCustomPlatform||null,r=e.Capacitor||{},s=r.Plugins=r.Plugins||{},l=()=>t!==null?t.name:Zk(e),u=()=>l()!=="web",c=g=>{const x=m.get(g);return!!(x!=null&&x.platforms.has(l())||f(g))},f=g=>{var x;return(x=r.PluginHeaders)===null||x===void 0?void 0:x.find(w=>w.name===g)},d=g=>e.console.error(g),m=new Map,y=(g,x={})=>{const w=m.get(g);if(w)return console.warn(`Capacitor plugin "${g}" already registered. Cannot register plugins twice.`),w.proxy;const S=l(),T=f(g);let z;const D=async()=>(!z&&S in x?z=typeof x[S]=="function"?z=await x[S]():z=x[S]:t!==null&&!z&&"web"in x&&(z=typeof x.web=="function"?z=await x.web():z=x.web),z),q=($,H)=>{var R,G;if(T){const J=T==null?void 0:T.methods.find(fe=>H===fe.name);if(J)return J.rtype==="promise"?fe=>r.nativePromise(g,H.toString(),fe):(fe,ie)=>r.nativeCallback(g,H.toString(),fe,ie);if($)return(R=$[H])===null||R===void 0?void 0:R.bind($)}else{if($)return(G=$[H])===null||G===void 0?void 0:G.bind($);throw new Ah(`"${g}" plugin is not implemented on ${S}`,ya.Unimplemented)}},F=$=>{let H;const R=(...G)=>{const J=D().then(fe=>{const ie=q(fe,$);if(ie){const ee=ie(...G);return H=ee==null?void 0:ee.remove,ee}else throw new Ah(`"${g}.${$}()" is not implemented on ${S}`,ya.Unimplemented)});return $==="addListener"&&(J.remove=async()=>H()),J};return R.toString=()=>`${$.toString()}() { [capacitor code] }`,Object.defineProperty(R,"name",{value:$,writable:!1,configurable:!1}),R},oe=F("addListener"),B=F("removeListener"),L=($,H)=>{const R=oe({eventName:$},H),G=async()=>{const fe=await R;B({eventName:$,callbackId:fe},H)},J=new Promise(fe=>R.then(()=>fe({remove:G})));return J.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await G()},J},W=new Proxy({},{get($,H){switch(H){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return T?L:oe;case"removeListener":return B;default:return F(H)}}});return s[g]=W,m.set(g,{name:g,proxy:W,platforms:new Set([...Object.keys(x),...T?[S]:[]])}),W};return r.convertFileSrc||(r.convertFileSrc=g=>g),r.getPlatform=l,r.handleError=d,r.isNativePlatform=u,r.isPluginAvailable=c,r.registerPlugin=y,r.Exception=Ah,r.DEBUG=!!r.DEBUG,r.isLoggingEnabled=!!r.isLoggingEnabled,r},eE=e=>e.Capacitor=Wk(e),Xn=eE(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),ys=Xn.registerPlugin;class qd{constructor(){this.listeners={},this.retainedEventArguments={},this.windowListeners={}}addListener(t,r){let s=!1;this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(r);const u=this.windowListeners[t];u&&!u.registered&&this.addWindowListener(u),s&&this.sendRetainedArgumentsForEvent(t);const c=async()=>this.removeListener(t,r);return Promise.resolve({remove:c})}async removeAllListeners(){this.listeners={};for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);this.windowListeners={}}notifyListeners(t,r,s){const l=this.listeners[t];if(!l){if(s){let u=this.retainedEventArguments[t];u||(u=[]),u.push(r),this.retainedEventArguments[t]=u}return}l.forEach(u=>u(r))}hasListeners(t){var r;return!!(!((r=this.listeners[t])===null||r===void 0)&&r.length)}registerWindowListener(t,r){this.windowListeners[r]={registered:!1,windowEventName:t,pluginEventName:r,handler:s=>{this.notifyListeners(r,s)}}}unimplemented(t="not implemented"){return new Xn.Exception(t,ya.Unimplemented)}unavailable(t="not available"){return new Xn.Exception(t,ya.Unavailable)}async removeListener(t,r){const s=this.listeners[t];if(!s)return;const l=s.indexOf(r);this.listeners[t].splice(l,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}addWindowListener(t){window.addEventListener(t.windowEventName,t.handler),t.registered=!0}removeWindowListener(t){t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}sendRetainedArgumentsForEvent(t){const r=this.retainedEventArguments[t];r&&(delete this.retainedEventArguments[t],r.forEach(s=>{this.notifyListeners(t,s)}))}}const L0=e=>encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),z0=e=>e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class tE extends qd{async getCookies(){const t=document.cookie,r={};return t.split(";").forEach(s=>{if(s.length<=0)return;let[l,u]=s.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");l=z0(l).trim(),u=z0(u).trim(),r[l]=u}),r}async setCookie(t){try{const r=L0(t.key),s=L0(t.value),l=t.expires?`; expires=${t.expires.replace("expires=","")}`:"",u=(t.path||"/").replace("path=",""),c=t.url!=null&&t.url.length>0?`domain=${t.url}`:"";document.cookie=`${r}=${s||""}${l}; path=${u}; ${c};`}catch(r){return Promise.reject(r)}}async deleteCookie(t){try{document.cookie=`${t.key}=; Max-Age=0`}catch(r){return Promise.reject(r)}}async clearCookies(){try{const t=document.cookie.split(";")||[];for(const r of t)document.cookie=r.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(t){return Promise.reject(t)}}async clearAllCookies(){try{await this.clearCookies()}catch(t){return Promise.reject(t)}}}ys("CapacitorCookies",{web:()=>new tE});const nE=async e=>new Promise((t,r)=>{const s=new FileReader;s.onload=()=>{const l=s.result;t(l.indexOf(",")>=0?l.split(",")[1]:l)},s.onerror=l=>r(l),s.readAsDataURL(e)}),rE=(e={})=>{const t=Object.keys(e);return Object.keys(e).map(l=>l.toLocaleLowerCase()).reduce((l,u,c)=>(l[u]=e[t[c]],l),{})},iE=(e,t=!0)=>e?Object.entries(e).reduce((s,l)=>{const[u,c]=l;let f,d;return Array.isArray(c)?(d="",c.forEach(m=>{f=t?encodeURIComponent(m):m,d+=`${u}=${f}&`}),d.slice(0,-1)):(f=t?encodeURIComponent(c):c,d=`${u}=${f}`),`${s}&${d}`},"").substr(1):null,sE=(e,t={})=>{const r=Object.assign({method:e.method||"GET",headers:e.headers},t),l=rE(e.headers)["content-type"]||"";if(typeof e.data=="string")r.body=e.data;else if(l.includes("application/x-www-form-urlencoded")){const u=new URLSearchParams;for(const[c,f]of Object.entries(e.data||{}))u.set(c,f);r.body=u.toString()}else if(l.includes("multipart/form-data")||e.data instanceof FormData){const u=new FormData;if(e.data instanceof FormData)e.data.forEach((f,d)=>{u.append(d,f)});else for(const f of Object.keys(e.data))u.append(f,e.data[f]);r.body=u;const c=new Headers(r.headers);c.delete("content-type"),r.headers=c}else(l.includes("application/json")||typeof e.data=="object")&&(r.body=JSON.stringify(e.data));return r};class aE extends qd{async request(t){const r=sE(t,t.webFetchExtra),s=iE(t.params,t.shouldEncodeUrlParams),l=s?`${t.url}?${s}`:t.url,u=await fetch(l,r),c=u.headers.get("content-type")||"";let{responseType:f="text"}=u.ok?t:{};c.includes("application/json")&&(f="json");let d,m;switch(f){case"arraybuffer":case"blob":m=await u.blob(),d=await nE(m);break;case"json":d=await u.json();break;case"document":case"text":default:d=await u.text()}const y={};return u.headers.forEach((g,x)=>{y[x]=g}),{data:d,headers:y,status:u.status,url:u.url}}async get(t){return this.request(Object.assign(Object.assign({},t),{method:"GET"}))}async post(t){return this.request(Object.assign(Object.assign({},t),{method:"POST"}))}async put(t){return this.request(Object.assign(Object.assign({},t),{method:"PUT"}))}async patch(t){return this.request(Object.assign(Object.assign({},t),{method:"PATCH"}))}async delete(t){return this.request(Object.assign(Object.assign({},t),{method:"DELETE"}))}}ys("CapacitorHttp",{web:()=>new aE});var U0;(function(e){e.Dark="DARK",e.Light="LIGHT",e.Default="DEFAULT"})(U0||(U0={}));var B0;(function(e){e.StatusBar="StatusBar",e.NavigationBar="NavigationBar"})(B0||(B0={}));class lE extends qd{async setStyle(){this.unavailable("not available for web")}async setAnimation(){this.unavailable("not available for web")}async show(){this.unavailable("not available for web")}async hide(){this.unavailable("not available for web")}}ys("SystemBars",{web:()=>new lE});const oE="modulepreload",uE=function(e){return"/"+e},P0={},Hd=function(t,r,s){let l=Promise.resolve();if(r&&r.length>0){let c=function(m){return Promise.all(m.map(y=>Promise.resolve(y).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),d=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));l=c(r.map(m=>{if(m=uE(m),m in P0)return;P0[m]=!0;const y=m.endsWith(".css"),g=y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${m}"]${g}`))return;const x=document.createElement("link");if(x.rel=y?"stylesheet":oE,y||(x.as="script"),x.crossOrigin="",x.href=m,d&&x.setAttribute("nonce",d),document.head.appendChild(x),y)return new Promise((w,S)=>{x.addEventListener("load",w),x.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${m}`)))})}))}function u(c){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=c,window.dispatchEvent(f),!f.defaultPrevented)throw c}return l.then(c=>{for(const f of c||[])f.status==="rejected"&&u(f.reason);return t().catch(u)})},fd=ys("App",{web:()=>Hd(()=>import("./web-qdLcAD7T.js"),[]).then(e=>new e.AppWeb)}),cE=ys("Network",{web:()=>Hd(()=>import("./web-ChtbM4nv.js"),[]).then(e=>new e.NetworkWeb)}),Uu=Xn.isNativePlatform()?"https://app.palmier.me":"";async function Ox(e,t,r,s){const l=`${Uu}${t}`;console.log(`[API] ${e} ${l}`);const c=await fetch(l,{method:e,headers:{"Content-Type":"application/json"},body:r!=null?JSON.stringify(r):void 0});if(!c.ok){const f=await c.text();let d;try{const m=JSON.parse(f);d=m.error??m.message??f}catch{d=f}throw console.error(`[API] ${e} ${t} failed:`,c.status,d),new Error(d||`Request failed with status ${c.status}`)}return console.log(`[API] ${e} ${t} ->`,c.status),c.json()}function fE(e,t,r){return Ox("POST",e,t)}function hE(e,t){return Ox("GET",e,void 0)}const q0=Xn.isNativePlatform(),Rx=j.createContext(null),dE=2e3,jh=6e3,mE=1500,pE=6e4;function gE({children:e,activeHost:t}){const[r,s]=j.useState(null),[l,u]=j.useState(!1),c=j.useRef(null),[f,d]=j.useState(!1),[m,y]=j.useState(!1),[g,x]=j.useState(!1),[w,S]=j.useState(!1),T=j.useRef(Nu()),z=j.useRef(new Set),D=j.useRef(0),q=!!t.directUrl,F=q0&&!q&&!!t.lanUrl&&w,oe=m||g?"disconnected":q?f?"direct":"connecting":l?F?"lan":"nats":"connecting",B=oe!=="connecting"&&oe!=="disconnected";j.useEffect(()=>{y(!1),x(!1)},[t.hostId,t.clientToken]),j.useEffect(()=>{if(!q0||q||!t.lanUrl){S(!1);return}let $=!1;const H=t.lanUrl,R=t.hostId;async function G(){console.log("[HOST/LAN] probing",H);try{const ee=await fetch(`${H}/health`,{signal:AbortSignal.timeout(mE)});if($)return;if(!ee.ok){console.log("[HOST/LAN] probe got non-ok:",ee.status),S(!1);return}const P=await ee.json(),X=P.hostId===R;X?console.log("[HOST/LAN] reachable"):console.log("[HOST/LAN] hostId mismatch — got:",P.hostId,"expected:",R),S(X)}catch(ee){$||(console.log("[HOST/LAN] probe failed:",ee instanceof Error?ee.message:ee),S(!1))}}G();const J=window.setInterval(G,pE),fe=fd.addListener("appStateChange",ee=>{ee.isActive&&G()}),ie=cE.addListener("networkStatusChange",()=>G());return()=>{$=!0,clearInterval(J),fe.then(ee=>ee.remove()),ie.then(ee=>ee.remove())}},[t.hostId,t.lanUrl,q]),j.useEffect(()=>{if(q){c.current&&(c.current.close().catch(()=>{}),c.current=null,s(null),u(!1));return}let $=!1,H=1e3;const R=3e4;async function G(){for(;!$;)try{const J=await fetch(`${Uu}/api/nats-credentials/${t.hostId}`);if($)return;if(J.status===401||J.status===403||J.status===404){console.error("[NATS] Host not found or rejected by relay:",J.status),x(!0);return}if(!J.ok)throw new Error(`credentials fetch ${J.status}`);const fe=await J.json();if(!fe.natsWsUrl){console.error("[NATS] Relay returned empty natsWsUrl — treating as terminal"),x(!0);return}if($)return;console.log("[NATS] Connecting to",fe.natsWsUrl);const ie=await Nx({servers:fe.natsWsUrl,authenticator:wx(fe.natsJwt,new TextEncoder().encode(fe.natsNkeySeed)),pingInterval:3e4,maxPingOut:2});if($){ie.close().catch(()=>{});return}if(console.log("[NATS] Connected"),c.current=ie,s(ie),u(!0),H=1e3,await ie.closed(),$)return;console.log("[NATS] Connection closed, will reconnect"),c.current=null,s(null),u(!1)}catch(J){if($)return;console.warn(`[NATS] Connect failed, retrying in ${H}ms:`,J),u(!1),await new Promise(fe=>setTimeout(fe,H)),H=Math.min(H*2,R)}}return G(),()=>{$=!0,c.current&&(c.current.close().catch(()=>{}),c.current=null,s(null),u(!1))}},[q,t]),j.useEffect(()=>{if(q)return;const $=fd.addListener("appStateChange",H=>{if(!H.isActive||!c.current)return;const R=c.current;Promise.race([R.flush(),new Promise((G,J)=>setTimeout(()=>J(new Error("ping timeout")),2e3))]).catch(()=>{console.log("[NATS] Resume probe failed — cycling conn"),R.close().catch(()=>{})})});return()=>{$.then(H=>H.remove())}},[q]),j.useEffect(()=>{if(!q){d(!1);return}const $=new AbortController;async function H(){var fe;const G=new AbortController,J=setTimeout(()=>G.abort(),dE);$.signal.addEventListener("abort",()=>G.abort());try{const ie=await fetch(`${t.directUrl}/events`,{headers:{Authorization:`Bearer ${t.clientToken}`},signal:G.signal});return clearTimeout(J),ie.ok?((fe=ie.body)==null?void 0:fe.getReader())??null:null}catch{return clearTimeout(J),null}}async function R(G){d(!0),console.log("[HOST] SSE connected to",t.directUrl),D.current=Date.now();function J(){setTimeout(()=>{$.signal.aborted||Date.now()-D.current<jh||(console.log("[HOST] Heartbeat timeout — no data for",jh/1e3,"s"),$.abort(),d(!1),console.log("[HOST] Direct host unreachable"))},jh)}J();const fe=new TextDecoder;let ie="";try{for(;;){const{done:ee,value:P}=await G.read();if(ee)break;ie+=fe.decode(P,{stream:!0}),D.current=Date.now(),J();const X=ie.split(`
|
|
87
|
+
${f.stack}`),c.reject(m)):c.resolve(y))}});return d.requestSubject=t,this.protocol.publish(t,r,{reply:u,headers:s.headers}),c}else{const u=new px(this.protocol.muxSubscriptions,t,s,l);this.protocol.request(u);try{this.publish(t,r,{reply:`${this.protocol.muxSubscriptions.baseInbox}${u.token}`,headers:s.headers})}catch(f){u.cancel(f)}const c=Promise.race([u.timer,u.deferred]);return c.catch(()=>{u.cancel()}),c}}flush(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.protocol.flush()}drain(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.isDraining()?Promise.reject(Te.errorForCode(Se.ConnectionDraining)):(this.draining=!0,this.protocol.drain())}isClosed(){return this.protocol.isClosed()}isDraining(){return this.draining}getServer(){const t=this.protocol.getServer();return t?t.listen:""}status(){const t=new an;return t.iterClosed.then(()=>{const r=this.listeners.indexOf(t);this.listeners.splice(r,1)}),this.listeners.push(t),t}get info(){return this.protocol.isClosed()?void 0:this.protocol.info}async context(){return(await this.request("$SYS.REQ.USER.INFO")).json((r,s)=>r==="time"?new Date(Date.parse(s)):s)}stats(){return{inBytes:this.protocol.inBytes,outBytes:this.protocol.outBytes,inMsgs:this.protocol.inMsgs,outMsgs:this.protocol.outMsgs}}async jetstreamManager(t={}){const r=new Dk(this,t);if(t.checkAPI!==!1)try{await r.getAccountInfo()}catch(s){const l=s;throw l.code===Se.NoResponders&&(l.code=Se.JetStreamNotEnabled),l}return r}jetstream(t={}){return new Bd(this,t)}getServerVersion(){const t=this.info;return t?ms(t.version):void 0}async rtt(){if(!this.protocol._closed&&!this.protocol.connected)throw Te.errorForCode(Se.Disconnect);const t=Date.now();return await this.flush(),Date.now()-t}get features(){return this.protocol.features}get services(){return this._services||(this._services=new Bk(this)),this._services}reconnect(){return this.isClosed()?Promise.reject(Te.errorForCode(Se.ConnectionClosed)):this.isDraining()?Promise.reject(Te.errorForCode(Se.ConnectionDraining)):this.protocol.reconnect()}}class Bk{constructor(t){C(this,"nc");this.nc=t}add(t){try{return new Yl(this.nc,t).start()}catch(r){return Promise.reject(r)}}client(t,r){return new yk(this.nc,t,r)}}class Pk{constructor(t,r,s){C(this,"bucket");C(this,"sm");C(this,"prefixLen");this.bucket=t,this.prefixLen=r,this.sm=s}get key(){return this.sm.subject.substring(this.prefixLen)}get value(){return this.sm.data}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){return this.sm.header.get(zu)||"PUT"}get length(){const t=this.sm.header.get(En.MessageSizeHdr)||"";return t!==""?parseInt(t,10):this.sm.data.length}json(){return this.sm.json()}string(){return this.sm.string()}}class qk{constructor(t,r,s){C(this,"bucket");C(this,"key");C(this,"sm");this.bucket=t,this.key=r,this.sm=s}get value(){return this.sm.data}get created(){return new Date(Md(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){var t;return((t=this.sm.headers)==null?void 0:t.get(zu))||"PUT"}get delta(){return this.sm.info.pending}get length(){var r;const t=((r=this.sm.headers)==null?void 0:r.get(En.MessageSizeHdr))||"";return t!==""?parseInt(t,10):this.sm.data.length}json(){return this.sm.json()}string(){return this.sm.string()}}class jx extends y2{constructor(r,s,l){super(r.nc,s,l);C(this,"js");C(this,"monitor");this.js=r,this.monitor=null,this.sub.closed.then(()=>{this.monitor&&this.monitor.cancel()})}set info(r){this.sub.info=r}get info(){return this.sub.info}_resetOrderedConsumer(r){if(this.info===null||this.sub.isClosed())return;const s=ni(this.js.nc.options.inboxPrefix);this.js.nc._resub(this.sub,s);const u=this.info;u.config.name=Pi.next(),u.ordered_consumer_sequence.delivery_seq=0,u.flow_control.heartbeat_count=0,u.flow_control.fc_count=0,u.flow_control.consumer_restarts++,u.deliver=s,u.config.deliver_subject=s,u.config.deliver_policy=Vt.StartSequence,u.config.opt_start_seq=r;const c={};c.stream_name=this.info.stream,c.config=u.config;const f=`${u.api.prefix}.CONSUMER.CREATE.${u.stream}`;this.js._request(f,c,{retries:-1}).then(d=>{const m=d,y=this.sub.info;y.last=m,this.info.config=m.config,this.info.name=m.name}).catch(d=>{const m=new Te(`unable to recreate ordered consumer ${u.stream} at seq ${r}`,Se.RequestError,d);this.sub.callback(m,{})})}_maybeSetupHbMonitoring(){var s,l;const r=((l=(s=this.info)==null?void 0:s.config)==null?void 0:l.idle_heartbeat)||0;r&&this._setupHbMonitoring(Md(r))}_setupHbMonitoring(r,s=0){const l={cancelAfter:0,maxOut:2};s&&(l.cancelAfter=s);const u=this.sub,c=f=>{var y,g,x,w;const d=Q_(409,`${or.IdleHeartbeatMissed}: ${f}`,this.sub.subject);if(!((y=this.info)==null?void 0:y.ordered))this.sub.callback(null,d);else{if(!this.js.nc.protocol.connected)return!1;const S=((x=(g=this.info)==null?void 0:g.ordered_consumer_sequence)==null?void 0:x.stream_seq)||0;return this._resetOrderedConsumer(S+1),(w=this.monitor)==null||w.restart(),!1}return!u.noIterator};this.monitor=new Ld(r,c,l)}_checkHbOrderConsumer(r){const s=r.headers.get(En.ConsumerStalledHdr);s!==""&&this.js.nc.publish(s);const l=parseInt(r.headers.get(En.LastConsumerSeqHdr),10),u=this.info.ordered_consumer_sequence;return this.info.flow_control.heartbeat_count++,l!==u.delivery_seq&&this._resetOrderedConsumer(u.stream_seq+1),!1}_checkOrderedConsumer(r){const s=this.info.ordered_consumer_sequence,l=r.info.streamSequence,u=r.info.deliverySequence;return u!=s.delivery_seq+1?(this._resetOrderedConsumer(s.stream_seq+1),!1):(s.delivery_seq=u,s.stream_seq=l,!0)}async destroy(){this.isClosed()||await this.drain();const r=this.sub.info,s=r.config.durable_name||r.name,l=`${r.api.prefix}.CONSUMER.DELETE.${r.stream}.${s}`;await r.api._request(l)}async consumerInfo(){const r=this.sub.info,s=r.config.durable_name||r.name,l=`${r.api.prefix}.CONSUMER.INFO.${r.stream}.${s}`,u=await r.api._request(l);return r.last=u,u}}class Hk extends jx{constructor(t,r,s){super(t,r,s)}pull(t={batch:1}){const{stream:r,config:s,name:l}=this.sub.info,u=s.durable_name??l,c={};if(c.batch=t.batch||1,c.no_wait=t.no_wait||!1,(t.max_bytes??0)>0){const m=this.js.nc.features.get(mt.JS_PULL_MAX_BYTES);if(!m.ok)throw new Error(`max_bytes is only supported on servers ${m.min} or better`);c.max_bytes=t.max_bytes}let f=0;t.expires&&t.expires>0&&(f=t.expires,c.expires=Ut(f));let d=0;if(t.idle_heartbeat&&t.idle_heartbeat>0&&(d=t.idle_heartbeat,c.idle_heartbeat=Ut(d)),d&&f===0)throw new Error("idle_heartbeat requires expires");if(d>f)throw new Error("expires must be greater than idle_heartbeat");if(this.info){this.monitor&&this.monitor.cancel(),f&&d&&(this.monitor?this.monitor._change(d,f):this._setupHbMonitoring(d,f));const m=this.info.api,y=`${m.prefix}.CONSUMER.MSG.NEXT.${r}.${u}`,g=this.sub.subject;m.nc.publish(y,m.jc.encode(c),{reply:g})}}}function Ik(e,t){return e?$k(t):Fk(t)}function Fk(e){return(t,r)=>t?[t,null]:(t=ua(r),t?[t,null]:[null,Pl(r,e)])}function $k(e){return(t,r)=>{if(t)return[t,null];const s=ua(r);return s!==null?[Tx(s),null]:[null,Pl(r,e)]}}function Tx(e){if(e!==null)switch(e.code){case Se.JetStream404NoMessages:case Se.JetStream408RequestTimeout:return null;case Se.JetStream409:return Z_(e)?e:null;default:return e}return null}function Yk(e){e&&e.ack()}function Gk(e){const t=e.split(".");if(t.length===9&&t.splice(2,0,"_",""),t.length<11||t[0]!=="$JS"||t[1]!=="ACK")throw new Error("not js message");const r={};return r.domain=t[2]==="_"?"":t[2],r.account_hash=t[3],r.stream=t[4],r.consumer=t[5],r.deliveryCount=parseInt(t[6],10),r.redeliveryCount=r.deliveryCount,r.redelivered=r.deliveryCount>1,r.streamSequence=parseInt(t[7],10),r.deliverySequence=parseInt(t[8],10),r.timestampNanos=parseInt(t[9],10),r.pending=parseInt(t[10],10),r}class Vk{constructor(t,r){C(this,"msg");C(this,"di");C(this,"didAck");C(this,"timeout");this.msg=t,this.didAck=!1,this.timeout=r}get subject(){return this.msg.subject}get sid(){return this.msg.sid}get data(){return this.msg.data}get headers(){return this.msg.headers}get info(){return this.di||(this.di=Gk(this.reply)),this.di}get redelivered(){return this.info.deliveryCount>1}get reply(){return this.msg.reply||""}get seq(){return this.info.streamSequence}doAck(t){this.didAck||(this.didAck=!this.isWIP(t),this.msg.respond(t))}isWIP(t){return t.length===4&&t[0]===xl[0]&&t[1]===xl[1]&&t[2]===xl[2]&&t[3]===xl[3]}async ackAck(t){var s;t=t||{},t.timeout=t.timeout||this.timeout;const r=Bt();if(this.didAck)r.resolve(!1);else if(this.didAck=!0,this.msg.reply){const u=this.msg.publisher,c=!((s=u.options)!=null&&s.noAsyncTraces),f=new px(u.muxSubscriptions,this.msg.reply,{timeout:t.timeout},c);u.request(f);try{u.publish(this.msg.reply,M0,{reply:`${u.muxSubscriptions.baseInbox}${f.token}`})}catch(d){f.cancel(d)}try{await Promise.race([f.timer,f.deferred]),r.resolve(!0)}catch(d){f.cancel(d),r.reject(d)}}else r.resolve(!1);return r}ack(){this.doAck(M0)}nak(t){let r=Ak;t&&(r=Nu().encode(`-NAK ${JSON.stringify({delay:Ut(t)})}`)),this.doAck(r)}working(){this.doAck(xl)}next(t,r={batch:1}){const s={};s.batch=r.batch||1,s.no_wait=r.no_wait||!1,r.expires&&r.expires>0&&(s.expires=Ut(r.expires));const l=vr().encode(s),u=ga.concat(jk,Nk,l),c=t?{reply:t}:void 0;this.msg.respond(u,c)}term(t=""){let r=Tk;(t==null?void 0:t.length)>0&&(r=Nu().encode(`+TERM ${t}`)),this.doAck(r)}json(){return this.msg.json()}string(){return this.msg.string()}}const Jk="1.30.3",Xk="nats.ws";class Kk{constructor(){C(this,"version");C(this,"lang");C(this,"closeError");C(this,"connected");C(this,"done");C(this,"socket");C(this,"options");C(this,"socketClosed");C(this,"encrypted");C(this,"peeked");C(this,"yields");C(this,"signal");C(this,"closedNotification");this.version=Jk,this.lang=Xk,this.connected=!1,this.done=!1,this.socketClosed=!1,this.encrypted=!1,this.peeked=!1,this.yields=[],this.signal=Bt(),this.closedNotification=Bt()}async connect(t,r){const s=Bt();if(r.tls)return s.reject(new Te("tls",Se.InvalidOption)),s;this.options=r;const l=t.src;if(r.wsFactory){const{socket:u,encrypted:c}=await r.wsFactory(t.src,r);this.socket=u,this.encrypted=c}else this.encrypted=l.indexOf("wss://")===0,this.socket=new WebSocket(l);return this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{this.isDiscarded()},this.socket.onmessage=u=>{if(this.isDiscarded())return;if(this.yields.push(new Uint8Array(u.data)),this.peeked){this.signal.resolve();return}const c=ga.concat(...this.yields),f=_2(c);if(f!==""){const d=uk.exec(f);if(!d){r.debug&&console.error("!!!",cu(c)),s.reject(new Error("unexpected response from server"));return}try{const m=JSON.parse(d[1]);lk(m,this.options),this.peeked=!0,this.connected=!0,this.signal.resolve(),s.resolve()}catch(m){s.reject(m);return}}},this.socket.onclose=u=>{if(this.isDiscarded())return;this.socketClosed=!0;let c;this.done||(u.wasClean||(c=new Error(u.reason)),this._closed(c))},this.socket.onerror=u=>{if(this.isDiscarded())return;const c=u,f=new Te(c.message,Se.Unknown,new Error(c.error));s.reject(f)},s}disconnect(){this._closed(void 0,!0)}async _closed(t,r=!0){if(!this.isDiscarded()&&this.connected&&!this.done){if(this.closeError=t,!t)for(;!this.socketClosed&&this.socket.bufferedAmount>0;)await Sa(100);this.done=!0;try{this.socket.close(t?1002:1e3,t?t.message:void 0)}catch{}r&&this.closedNotification.resolve(t)}}get isClosed(){return this.done}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){for(;;){if(this.isDiscarded())return;this.yields.length===0&&await this.signal;const t=this.yields;this.yields=[];for(let r=0;r<t.length;r++)this.options.debug&&console.info(`> ${cu(t[r])}`),yield t[r];if(this.done)break;this.yields.length===0&&(t.length=0,this.yields=t,this.signal=Bt())}}isEncrypted(){return this.connected&&this.encrypted}send(t){if(!this.isDiscarded())try{this.socket.send(t.buffer),this.options.debug&&console.info(`< ${cu(t)}`);return}catch(r){this.options.debug&&console.error(`!!! ${cu(t)}: ${r}`)}}close(t){return this._closed(t,!1)}closed(){return this.closedNotification}isDiscarded(){return this.done?(this.discard(),!0):!1}discard(){var t;this.done=!0;try{(t=this.socket)==null||t.close()}catch{}}}function Qk(e,t){/^(.*:\/\/)(.*)/.test(e)||(typeof t=="boolean"?e=`${t===!0?"https":"http"}://${e}`:e=`https://${e}`);let s=new URL(e);const l=s.protocol.toLowerCase();l==="ws:"&&(t=!1),l==="wss:"&&(t=!0),l!=="https:"&&l!=="http"&&(e=e.replace(/^(.*:\/\/)(.*)/gm,"$2"),s=new URL(`http://${e}`));let u,c;const f=s.hostname,d=s.pathname,m=s.search||"";switch(l){case"http:":case"ws:":case"nats:":c=s.port||"80",u="ws:";break;case"https:":case"wss:":case"tls:":c=s.port||"443",u="wss:";break;default:c=s.port||t===!0?"443":"80",u=t===!0?"wss:":"ws:";break}return`${u}//${f}:${c}${d}${m}`}function Nx(e={}){return b2({defaultPort:443,urlParseFn:Qk,factory:()=>new Kk}),Pd.connect(e)}/*! Capacitor: https://capacitorjs.com/ - MIT License */var ya;(function(e){e.Unimplemented="UNIMPLEMENTED",e.Unavailable="UNAVAILABLE"})(ya||(ya={}));class Ah extends Error{constructor(t,r,s){super(t),this.message=t,this.code=r,this.data=s}}const Zk=e=>{var t,r;return e!=null&&e.androidBridge?"android":!((r=(t=e==null?void 0:e.webkit)===null||t===void 0?void 0:t.messageHandlers)===null||r===void 0)&&r.bridge?"ios":"web"},Wk=e=>{const t=e.CapacitorCustomPlatform||null,r=e.Capacitor||{},s=r.Plugins=r.Plugins||{},l=()=>t!==null?t.name:Zk(e),u=()=>l()!=="web",c=g=>{const x=m.get(g);return!!(x!=null&&x.platforms.has(l())||f(g))},f=g=>{var x;return(x=r.PluginHeaders)===null||x===void 0?void 0:x.find(w=>w.name===g)},d=g=>e.console.error(g),m=new Map,y=(g,x={})=>{const w=m.get(g);if(w)return console.warn(`Capacitor plugin "${g}" already registered. Cannot register plugins twice.`),w.proxy;const S=l(),T=f(g);let z;const D=async()=>(!z&&S in x?z=typeof x[S]=="function"?z=await x[S]():z=x[S]:t!==null&&!z&&"web"in x&&(z=typeof x.web=="function"?z=await x.web():z=x.web),z),q=($,H)=>{var R,G;if(T){const J=T==null?void 0:T.methods.find(fe=>H===fe.name);if(J)return J.rtype==="promise"?fe=>r.nativePromise(g,H.toString(),fe):(fe,ie)=>r.nativeCallback(g,H.toString(),fe,ie);if($)return(R=$[H])===null||R===void 0?void 0:R.bind($)}else{if($)return(G=$[H])===null||G===void 0?void 0:G.bind($);throw new Ah(`"${g}" plugin is not implemented on ${S}`,ya.Unimplemented)}},F=$=>{let H;const R=(...G)=>{const J=D().then(fe=>{const ie=q(fe,$);if(ie){const ee=ie(...G);return H=ee==null?void 0:ee.remove,ee}else throw new Ah(`"${g}.${$}()" is not implemented on ${S}`,ya.Unimplemented)});return $==="addListener"&&(J.remove=async()=>H()),J};return R.toString=()=>`${$.toString()}() { [capacitor code] }`,Object.defineProperty(R,"name",{value:$,writable:!1,configurable:!1}),R},oe=F("addListener"),B=F("removeListener"),L=($,H)=>{const R=oe({eventName:$},H),G=async()=>{const fe=await R;B({eventName:$,callbackId:fe},H)},J=new Promise(fe=>R.then(()=>fe({remove:G})));return J.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await G()},J},W=new Proxy({},{get($,H){switch(H){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return T?L:oe;case"removeListener":return B;default:return F(H)}}});return s[g]=W,m.set(g,{name:g,proxy:W,platforms:new Set([...Object.keys(x),...T?[S]:[]])}),W};return r.convertFileSrc||(r.convertFileSrc=g=>g),r.getPlatform=l,r.handleError=d,r.isNativePlatform=u,r.isPluginAvailable=c,r.registerPlugin=y,r.Exception=Ah,r.DEBUG=!!r.DEBUG,r.isLoggingEnabled=!!r.isLoggingEnabled,r},eE=e=>e.Capacitor=Wk(e),Xn=eE(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),ys=Xn.registerPlugin;class qd{constructor(){this.listeners={},this.retainedEventArguments={},this.windowListeners={}}addListener(t,r){let s=!1;this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(r);const u=this.windowListeners[t];u&&!u.registered&&this.addWindowListener(u),s&&this.sendRetainedArgumentsForEvent(t);const c=async()=>this.removeListener(t,r);return Promise.resolve({remove:c})}async removeAllListeners(){this.listeners={};for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);this.windowListeners={}}notifyListeners(t,r,s){const l=this.listeners[t];if(!l){if(s){let u=this.retainedEventArguments[t];u||(u=[]),u.push(r),this.retainedEventArguments[t]=u}return}l.forEach(u=>u(r))}hasListeners(t){var r;return!!(!((r=this.listeners[t])===null||r===void 0)&&r.length)}registerWindowListener(t,r){this.windowListeners[r]={registered:!1,windowEventName:t,pluginEventName:r,handler:s=>{this.notifyListeners(r,s)}}}unimplemented(t="not implemented"){return new Xn.Exception(t,ya.Unimplemented)}unavailable(t="not available"){return new Xn.Exception(t,ya.Unavailable)}async removeListener(t,r){const s=this.listeners[t];if(!s)return;const l=s.indexOf(r);this.listeners[t].splice(l,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}addWindowListener(t){window.addEventListener(t.windowEventName,t.handler),t.registered=!0}removeWindowListener(t){t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}sendRetainedArgumentsForEvent(t){const r=this.retainedEventArguments[t];r&&(delete this.retainedEventArguments[t],r.forEach(s=>{this.notifyListeners(t,s)}))}}const L0=e=>encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),z0=e=>e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class tE extends qd{async getCookies(){const t=document.cookie,r={};return t.split(";").forEach(s=>{if(s.length<=0)return;let[l,u]=s.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");l=z0(l).trim(),u=z0(u).trim(),r[l]=u}),r}async setCookie(t){try{const r=L0(t.key),s=L0(t.value),l=t.expires?`; expires=${t.expires.replace("expires=","")}`:"",u=(t.path||"/").replace("path=",""),c=t.url!=null&&t.url.length>0?`domain=${t.url}`:"";document.cookie=`${r}=${s||""}${l}; path=${u}; ${c};`}catch(r){return Promise.reject(r)}}async deleteCookie(t){try{document.cookie=`${t.key}=; Max-Age=0`}catch(r){return Promise.reject(r)}}async clearCookies(){try{const t=document.cookie.split(";")||[];for(const r of t)document.cookie=r.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(t){return Promise.reject(t)}}async clearAllCookies(){try{await this.clearCookies()}catch(t){return Promise.reject(t)}}}ys("CapacitorCookies",{web:()=>new tE});const nE=async e=>new Promise((t,r)=>{const s=new FileReader;s.onload=()=>{const l=s.result;t(l.indexOf(",")>=0?l.split(",")[1]:l)},s.onerror=l=>r(l),s.readAsDataURL(e)}),rE=(e={})=>{const t=Object.keys(e);return Object.keys(e).map(l=>l.toLocaleLowerCase()).reduce((l,u,c)=>(l[u]=e[t[c]],l),{})},iE=(e,t=!0)=>e?Object.entries(e).reduce((s,l)=>{const[u,c]=l;let f,d;return Array.isArray(c)?(d="",c.forEach(m=>{f=t?encodeURIComponent(m):m,d+=`${u}=${f}&`}),d.slice(0,-1)):(f=t?encodeURIComponent(c):c,d=`${u}=${f}`),`${s}&${d}`},"").substr(1):null,sE=(e,t={})=>{const r=Object.assign({method:e.method||"GET",headers:e.headers},t),l=rE(e.headers)["content-type"]||"";if(typeof e.data=="string")r.body=e.data;else if(l.includes("application/x-www-form-urlencoded")){const u=new URLSearchParams;for(const[c,f]of Object.entries(e.data||{}))u.set(c,f);r.body=u.toString()}else if(l.includes("multipart/form-data")||e.data instanceof FormData){const u=new FormData;if(e.data instanceof FormData)e.data.forEach((f,d)=>{u.append(d,f)});else for(const f of Object.keys(e.data))u.append(f,e.data[f]);r.body=u;const c=new Headers(r.headers);c.delete("content-type"),r.headers=c}else(l.includes("application/json")||typeof e.data=="object")&&(r.body=JSON.stringify(e.data));return r};class aE extends qd{async request(t){const r=sE(t,t.webFetchExtra),s=iE(t.params,t.shouldEncodeUrlParams),l=s?`${t.url}?${s}`:t.url,u=await fetch(l,r),c=u.headers.get("content-type")||"";let{responseType:f="text"}=u.ok?t:{};c.includes("application/json")&&(f="json");let d,m;switch(f){case"arraybuffer":case"blob":m=await u.blob(),d=await nE(m);break;case"json":d=await u.json();break;case"document":case"text":default:d=await u.text()}const y={};return u.headers.forEach((g,x)=>{y[x]=g}),{data:d,headers:y,status:u.status,url:u.url}}async get(t){return this.request(Object.assign(Object.assign({},t),{method:"GET"}))}async post(t){return this.request(Object.assign(Object.assign({},t),{method:"POST"}))}async put(t){return this.request(Object.assign(Object.assign({},t),{method:"PUT"}))}async patch(t){return this.request(Object.assign(Object.assign({},t),{method:"PATCH"}))}async delete(t){return this.request(Object.assign(Object.assign({},t),{method:"DELETE"}))}}ys("CapacitorHttp",{web:()=>new aE});var U0;(function(e){e.Dark="DARK",e.Light="LIGHT",e.Default="DEFAULT"})(U0||(U0={}));var B0;(function(e){e.StatusBar="StatusBar",e.NavigationBar="NavigationBar"})(B0||(B0={}));class lE extends qd{async setStyle(){this.unavailable("not available for web")}async setAnimation(){this.unavailable("not available for web")}async show(){this.unavailable("not available for web")}async hide(){this.unavailable("not available for web")}}ys("SystemBars",{web:()=>new lE});const oE="modulepreload",uE=function(e){return"/"+e},P0={},Hd=function(t,r,s){let l=Promise.resolve();if(r&&r.length>0){let c=function(m){return Promise.all(m.map(y=>Promise.resolve(y).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),d=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));l=c(r.map(m=>{if(m=uE(m),m in P0)return;P0[m]=!0;const y=m.endsWith(".css"),g=y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${m}"]${g}`))return;const x=document.createElement("link");if(x.rel=y?"stylesheet":oE,y||(x.as="script"),x.crossOrigin="",x.href=m,d&&x.setAttribute("nonce",d),document.head.appendChild(x),y)return new Promise((w,S)=>{x.addEventListener("load",w),x.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${m}`)))})}))}function u(c){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=c,window.dispatchEvent(f),!f.defaultPrevented)throw c}return l.then(c=>{for(const f of c||[])f.status==="rejected"&&u(f.reason);return t().catch(u)})},fd=ys("App",{web:()=>Hd(()=>import("./web-B1sKCc7e.js"),[]).then(e=>new e.AppWeb)}),cE=ys("Network",{web:()=>Hd(()=>import("./web-ETD-8ZHd.js"),[]).then(e=>new e.NetworkWeb)}),Uu=Xn.isNativePlatform()?"https://app.palmier.me":"";async function Ox(e,t,r,s){const l=`${Uu}${t}`;console.log(`[API] ${e} ${l}`);const c=await fetch(l,{method:e,headers:{"Content-Type":"application/json"},body:r!=null?JSON.stringify(r):void 0});if(!c.ok){const f=await c.text();let d;try{const m=JSON.parse(f);d=m.error??m.message??f}catch{d=f}throw console.error(`[API] ${e} ${t} failed:`,c.status,d),new Error(d||`Request failed with status ${c.status}`)}return console.log(`[API] ${e} ${t} ->`,c.status),c.json()}function fE(e,t,r){return Ox("POST",e,t)}function hE(e,t){return Ox("GET",e,void 0)}const q0=Xn.isNativePlatform(),Rx=j.createContext(null),dE=2e3,jh=6e3,mE=1500,pE=6e4;function gE({children:e,activeHost:t}){const[r,s]=j.useState(null),[l,u]=j.useState(!1),c=j.useRef(null),[f,d]=j.useState(!1),[m,y]=j.useState(!1),[g,x]=j.useState(!1),[w,S]=j.useState(!1),T=j.useRef(Nu()),z=j.useRef(new Set),D=j.useRef(0),q=!!t.directUrl,F=q0&&!q&&!!t.lanUrl&&w,oe=m||g?"disconnected":q?f?"direct":"connecting":l?F?"lan":"nats":"connecting",B=oe!=="connecting"&&oe!=="disconnected";j.useEffect(()=>{y(!1),x(!1)},[t.hostId,t.clientToken]),j.useEffect(()=>{if(!q0||q||!t.lanUrl){S(!1);return}let $=!1;const H=t.lanUrl,R=t.hostId;async function G(){console.log("[HOST/LAN] probing",H);try{const ee=await fetch(`${H}/health`,{signal:AbortSignal.timeout(mE)});if($)return;if(!ee.ok){console.log("[HOST/LAN] probe got non-ok:",ee.status),S(!1);return}const P=await ee.json(),X=P.hostId===R;X?console.log("[HOST/LAN] reachable"):console.log("[HOST/LAN] hostId mismatch — got:",P.hostId,"expected:",R),S(X)}catch(ee){$||(console.log("[HOST/LAN] probe failed:",ee instanceof Error?ee.message:ee),S(!1))}}G();const J=window.setInterval(G,pE),fe=fd.addListener("appStateChange",ee=>{ee.isActive&&G()}),ie=cE.addListener("networkStatusChange",()=>G());return()=>{$=!0,clearInterval(J),fe.then(ee=>ee.remove()),ie.then(ee=>ee.remove())}},[t.hostId,t.lanUrl,q]),j.useEffect(()=>{if(q){c.current&&(c.current.close().catch(()=>{}),c.current=null,s(null),u(!1));return}let $=!1,H=1e3;const R=3e4;async function G(){for(;!$;)try{const J=await fetch(`${Uu}/api/nats-credentials/${t.hostId}`);if($)return;if(J.status===401||J.status===403||J.status===404){console.error("[NATS] Host not found or rejected by relay:",J.status),x(!0);return}if(!J.ok)throw new Error(`credentials fetch ${J.status}`);const fe=await J.json();if(!fe.natsWsUrl){console.error("[NATS] Relay returned empty natsWsUrl — treating as terminal"),x(!0);return}if($)return;console.log("[NATS] Connecting to",fe.natsWsUrl);const ie=await Nx({servers:fe.natsWsUrl,authenticator:wx(fe.natsJwt,new TextEncoder().encode(fe.natsNkeySeed)),pingInterval:3e4,maxPingOut:2});if($){ie.close().catch(()=>{});return}if(console.log("[NATS] Connected"),c.current=ie,s(ie),u(!0),H=1e3,await ie.closed(),$)return;console.log("[NATS] Connection closed, will reconnect"),c.current=null,s(null),u(!1)}catch(J){if($)return;console.warn(`[NATS] Connect failed, retrying in ${H}ms:`,J),u(!1),await new Promise(fe=>setTimeout(fe,H)),H=Math.min(H*2,R)}}return G(),()=>{$=!0,c.current&&(c.current.close().catch(()=>{}),c.current=null,s(null),u(!1))}},[q,t]),j.useEffect(()=>{if(q)return;const $=fd.addListener("appStateChange",H=>{if(!H.isActive||!c.current)return;const R=c.current;Promise.race([R.flush(),new Promise((G,J)=>setTimeout(()=>J(new Error("ping timeout")),2e3))]).catch(()=>{console.log("[NATS] Resume probe failed — cycling conn"),R.close().catch(()=>{})})});return()=>{$.then(H=>H.remove())}},[q]),j.useEffect(()=>{if(!q){d(!1);return}const $=new AbortController;async function H(){var fe;const G=new AbortController,J=setTimeout(()=>G.abort(),dE);$.signal.addEventListener("abort",()=>G.abort());try{const ie=await fetch(`${t.directUrl}/events`,{headers:{Authorization:`Bearer ${t.clientToken}`},signal:G.signal});return clearTimeout(J),ie.ok?((fe=ie.body)==null?void 0:fe.getReader())??null:null}catch{return clearTimeout(J),null}}async function R(G){d(!0),console.log("[HOST] SSE connected to",t.directUrl),D.current=Date.now();function J(){setTimeout(()=>{$.signal.aborted||Date.now()-D.current<jh||(console.log("[HOST] Heartbeat timeout — no data for",jh/1e3,"s"),$.abort(),d(!1),console.log("[HOST] Direct host unreachable"))},jh)}J();const fe=new TextDecoder;let ie="";try{for(;;){const{done:ee,value:P}=await G.read();if(ee)break;ie+=fe.decode(P,{stream:!0}),D.current=Date.now(),J();const X=ie.split(`
|
|
88
88
|
`);ie=X.pop()??"";for(const ae of X)if(ae.startsWith("data: ")){const pe=ae.slice(6);try{const M=JSON.parse(pe);if(M.task_id&&M.event_type){const E=`host-event.${t.hostId}.${M.task_id}`;for(const K of z.current)K({subject:E,data:T.current.encode(pe)})}}catch{}}}}catch{}}return(async()=>{const G=await H();G&&await R(G)})(),()=>{$.abort(),d(!1)}},[t,q]);const L=j.useCallback(async($,H,R)=>{function G(ie){ie&&typeof ie=="object"&&ie.error==="Unauthorized"&&y(!0)}async function J(ie,ee){console.log(`[HOST/${ee}] → ${$}`,H??"");const P=await fetch(`${ie}/rpc/${$}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.clientToken}`},body:H!=null?JSON.stringify(H):void 0,signal:R!=null&&R.timeout?AbortSignal.timeout(R.timeout):void 0});if(P.status===401)throw y(!0),new Error("Unauthorized");const X=await P.json();return G(X),console.log(`[HOST/${ee}] ← ${$}`,X),X}async function fe(){if(!c.current)throw new Error("Not connected");const ie=`host.${t.hostId}.rpc.${$}`,ee={...H??{},clientToken:t.clientToken},P=T.current.encode(JSON.stringify(ee));console.log(`[HOST/NATS] → ${$}`,H??"");const X=await c.current.request(ie,P,{timeout:(R==null?void 0:R.timeout)??1e4}),ae=JSON.parse(T.current.decode(X.data));return G(ae),console.log(`[HOST/NATS] ← ${$}`,ae),ae}if(q)return J(t.directUrl,"HTTP");if(F&&t.lanUrl)try{return await J(t.lanUrl,"LAN")}catch(ie){if(ie instanceof Error&&ie.message==="Unauthorized")throw ie;console.log("[HOST/LAN] failed, falling back to NATS:",ie),S(!1)}return fe()},[t,q,F]),W=j.useCallback(($,H)=>{if(q)return z.current.add(H),()=>{z.current.delete(H)};if(c.current){const R=c.current.subscribe(`host-event.${$}.>`);let G=!1;return(async()=>{try{for await(const J of R){if(G)break;H({subject:J.subject,data:J.data})}}catch{}})(),()=>{G=!0,R.unsubscribe()}}return()=>{}},[t,q]);return b.jsx(Rx.Provider,{value:{connected:B,mode:oe,nc:r,request:L,subscribeEvents:W,activeHost:t,unauthorized:m},children:e})}function si(){const e=j.useContext(Rx);if(!e)throw new Error("useHostConnection must be used within HostConnectionProvider");return e}const mn=Xn.isNativePlatform()?ys("Device"):null;function yE(e,t){const r=new Date(e),s=new Date,l=r.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",timeZone:t}),u={year:"numeric",month:"2-digit",day:"2-digit",timeZone:t};return r.toLocaleDateString(void 0,u)===s.toLocaleDateString(void 0,u)?l:`${r.toLocaleDateString(void 0,{month:"short",day:"numeric",timeZone:t})} ${l}`}function Id(){const{activeHost:e}=si(),t=e.timezone;return j.useCallback(r=>yE(r,t),[t])}function bE(e){const t=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(new Date),r=s=>{var l;return((l=t.find(u=>u.type===s))==null?void 0:l.value)??""};return{date:`${r("year")}-${r("month")}-${r("day")}`,time:`${r("hour")}:${r("minute")}`}}const Mx={};function xE(e){for(const t of e)Mx[t.key]=t.label}function hd(e){return Mx[e]??e}const vE=()=>window.matchMedia("(max-width: 600px)").matches;function wE({task:e,lastEvent:t,onEdit:r,onDelete:s,onViewRun:l}){var P;const{request:u,activeHost:c}=si(),f=Id(),d=c.timezone,[m,y]=j.useState(!1),[g,x]=j.useState(!1),[w,S]=j.useState(!1),T=j.useRef(null),z=(t==null?void 0:t.running_state)==="started",D=(((P=e.schedule_values)==null?void 0:P.length)??0)>0,q=e.schedule_type==="on_new_notification"||e.schedule_type==="on_new_sms",oe=!!e.schedule_enabled&&!!e.schedule_type&&(D||q)?z?"var(--color-success)":(t==null?void 0:t.running_state)==="failed"?"var(--color-error)":"var(--color-success)":"var(--color-text-secondary)";j.useEffect(()=>{if(!g)return;function X(ae){T.current&&!T.current.contains(ae.target)&&x(!1)}return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[g]);function B(){vE()?S(!0):x(X=>!X)}function L(){x(!1),S(!1)}async function W(){if(L(),!!confirm("Abort this task?")){y(!0);try{await u("task.abort",{id:e.id})}catch(X){console.error("Abort failed:",X)}finally{y(!1)}}}async function $(){L();try{const X=await u("task.run",{id:e.id});l(e.id,X.run_id)}catch(X){console.error("Run failed:",X)}}async function H(){if(L(),!!confirm("Delete this task? Results and reports will be kept."))try{await u("task.delete",{id:e.id}),s(e.id)}catch(X){console.error("Delete failed:",X)}}const R={started:"Started",finished:"Finished",aborted:"Aborted",failed:"Failed"};function G(X,ae){if(X==="specific_times"){const Ge=new Date(ae);return{kind:"specific_times",detail:isNaN(Ge.getTime())?ae:`${Ge.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric",timeZone:d})} at ${Ge.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",timeZone:d})}`}}const pe=ae.split(" ");if(pe.length!==5)return{kind:"unknown",detail:ae};const[M,E,K,,A]=pe,be=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];if(E==="*")return{kind:"hourly",detail:""};const je=Number(E),_e=Number(M),Me=je===0?12:je>12?je-12:je,Ie=je>=12?"PM":"AM",ke=`${Me}:${String(_e).padStart(2,"0")} ${Ie}`;return A!=="*"?{kind:"weekly",detail:`${be[Number(A)]??A} at ${ke}`}:K!=="*"?{kind:"monthly",detail:`day ${K} at ${ke}`}:{kind:"daily",detail:ke}}function J(X,ae){const pe=G(X,ae);return pe.kind==="hourly"?"Every hour":pe.kind==="specific_times"?`Once on ${pe.detail}`:`${pe.kind.charAt(0).toUpperCase()+pe.kind.slice(1)}: ${pe.detail}`}function fe(X,ae){if(!X)return"";if(X==="on_new_notification")return"On new notification";if(X==="on_new_sms")return"On new SMS";if(!ae||ae.length===0)return"";if(ae.length===1)return J(X,ae[0]);const pe=ae.map(E=>G(X,E));if(new Set(pe.map(E=>E.kind)).size===1){const E=pe[0].kind;if(E==="hourly")return"Every hour";const K=pe.map(A=>A.detail);return`${E.charAt(0).toUpperCase()+E.slice(1)}: ${K.join(", ")}`}return ae.map(E=>J(X,E)).join(", ")}const ie=fe(e.schedule_type,e.schedule_values),ee=b.jsxs(b.Fragment,{children:[b.jsxs("button",{onClick:()=>{L(),r(e)},children:[b.jsx("span",{className:"menu-icon",children:"✎"}),"Edit"]}),b.jsxs("button",{onClick:()=>{L(),l(e.id)},children:[b.jsx("span",{className:"menu-icon",children:"📄"}),"View All Runs"]}),z?b.jsxs("button",{className:"menu-item-danger",onClick:W,disabled:m,children:[b.jsx("span",{className:"menu-icon",children:"◼"}),"Abort"]}):b.jsxs(b.Fragment,{children:[b.jsxs("button",{onClick:$,children:[b.jsx("span",{className:"menu-icon",children:"▶"}),"Run Now"]}),b.jsxs("button",{className:"menu-item-danger",onClick:H,children:[b.jsx("span",{className:"menu-icon",children:"🗑"}),"Delete"]})]})]});return b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"task-card",onClick:()=>l(e.id,"latest"),children:[b.jsxs("div",{className:"task-card-header",children:[b.jsxs("div",{className:"task-card-title-row",children:[z?b.jsx("span",{className:"status-spinner",children:b.jsx("span",{})}):b.jsx("span",{className:"status-dot",style:{backgroundColor:oe}}),b.jsx("h3",{className:"task-card-name",children:e.name||e.user_prompt})]}),b.jsx("div",{className:"task-card-actions",onClick:X=>X.stopPropagation(),children:b.jsxs("div",{className:"task-card-menu",ref:T,children:[b.jsx("button",{className:"task-card-menu-btn",onClick:B,"aria-label":"Task actions",children:"⋮"}),g&&b.jsx("div",{className:"task-card-menu-dropdown",children:ee})]})})]}),b.jsxs("div",{className:"task-card-meta",children:[e.agent&&b.jsx("span",{className:"task-card-agent",children:hd(e.agent)}),t&&R[t.running_state]&&b.jsxs("span",{className:"task-card-last-event",children:[R[t.running_state]," ",f(t.time_stamp)]}),e.schedule_type&&(D||q)&&b.jsx("span",{className:"task-card-triggers",children:e.schedule_enabled?ie:"Schedule disabled"})]})]}),w&&ds.createPortal(b.jsx("div",{className:"bottom-sheet-overlay",onClick:()=>S(!1),children:b.jsxs("div",{className:"bottom-sheet",onClick:X=>X.stopPropagation(),children:[b.jsx("div",{className:"bottom-sheet-handle"}),b.jsx("div",{className:"bottom-sheet-title",children:e.name||e.user_prompt}),b.jsx("div",{className:"bottom-sheet-actions",children:ee})]})}),document.body)]})}function SE({permissions:e}){return b.jsxs("div",{className:"permissions-dialog",children:[b.jsx("h2",{children:"Granted Permissions"}),b.jsx("div",{className:"permissions-dialog-scroll",children:e&&e.length>0?b.jsx("div",{className:"permissions-section",children:b.jsx("ul",{className:"permissions-list",children:e.map((t,r)=>b.jsxs("li",{className:"permission-item",children:[b.jsx("span",{className:"permission-tool",children:t.name}),b.jsx("span",{className:"permission-desc",children:t.description})]},r))})}):b.jsx("p",{className:"permissions-empty",children:"No permissions have been granted for this task."})}),b.jsx("div",{className:"permissions-dialog-actions",children:b.jsx("button",{className:"btn btn-secondary",onClick:()=>history.back(),children:"Back"})})]})}const ra=[];function _E(){const e=ra.pop();e&&(e.pushed.current=!1,e.close())}let H0=!1;function kE(){H0||(H0=!0,window.addEventListener("popstate",_E))}function dd(e,t){const r=j.useRef(!1),s=j.useRef(t);s.current=t;const l=j.useCallback(()=>s.current(),[]),u=j.useRef({close:l,pushed:r});u.current.close=l,j.useEffect(()=>{if(e&&!r.current)kE(),history.pushState({modal:!0},""),ra.push(u.current),r.current=!0;else if(!e&&r.current){r.current=!1;const c=ra.indexOf(u.current);c!==-1&&ra.splice(c,1),history.back()}},[e,l]),j.useEffect(()=>{const c=u.current;return()=>{if(r.current){r.current=!1;const f=ra.indexOf(c);f!==-1&&ra.splice(f,1),history.back()}}},[])}const EE=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],CE=["specific_times","hourly","daily","weekly","monthly"];function mu(e){return CE.includes(e)}function AE(e){return e==="on_new_notification"||e==="on_new_sms"}function ti(e="daily"){return{schedule:e,time:"00:00",dayOfWeek:"1",dayOfMonth:"1",onceDate:"",onceTime:"00:00"}}function jE(e){const t=e.split(" ");if(t.length!==5)return ti();const[r,s,l,,u]=t;if(s==="*")return ti("hourly");const c=`${s.padStart(2,"0")}:${r.padStart(2,"0")}`;return u!=="*"?{...ti("weekly"),time:c,dayOfWeek:u}:l!=="*"?{...ti("monthly"),time:c,dayOfMonth:l}:{...ti("daily"),time:c}}function Dx(e,t){if(e==="specific_times"){const[r,s]=t.split("T");return{...ti("specific_times"),onceDate:r??"",onceTime:(s??"09:00").slice(0,5)}}return jE(t)}function TE(e){const[t,r]=e.time.split(":").map(Number);switch(e.schedule){case"hourly":return"0 * * * *";case"daily":return`${r} ${t} * * *`;case"weekly":return`${r} ${t} * * ${e.dayOfWeek}`;case"monthly":return`${r} ${t} ${e.dayOfMonth} * *`;default:return"0 * * * *"}}function NE(e){return e.schedule==="specific_times"?e.onceDate?`${e.onceDate}T${e.onceTime}`:null:TE(e)}function Th(e){return e==="specific_times"?"specific_times":e==="on_new_notification"?"on_new_notification":e==="on_new_sms"?"on_new_sms":"crons"}function Nh(e){var s;if(!e)return"daily";if(e.command)return"command";const t=e.schedule_type;if(t==="on_new_notification"||t==="on_new_sms")return t;if(t!=="crons"&&t!=="specific_times")return"ondemand";const r=(s=e.schedule_values)==null?void 0:s[0];return r?Dx(t,r).schedule:"ondemand"}function OE({initial:e,agents:t,hostPlatform:r,isNotificationListener:s,onSaved:l,onRun:u,onCancel:c}){var dt;const{request:f,activeHost:d}=si(),{setHostLastAgent:m}=Hi(),y=()=>{var Re;const xe=d.lastAgent,He=t.map(At=>At.key);return xe&&He.includes(xe)?xe:((Re=t[0])==null?void 0:Re.key)??""},[g,x]=j.useState((e==null?void 0:e.user_prompt)??""),[w,S]=j.useState((e==null?void 0:e.agent)??y()),T=!!((dt=e==null?void 0:e.permissions)!=null&&dt.length),[z,D]=j.useState(!1),q=j.useCallback(()=>D(!1),[]);dd(z,q);const[F,oe]=j.useState(null),[B,L]=j.useState(()=>Nh(e)),[W,$]=j.useState(()=>{const xe=e==null?void 0:e.schedule_type,He=e==null?void 0:e.schedule_values;if(He&&(xe==="crons"||xe==="specific_times"))return He.map(At=>Dx(xe,At));const Re=Nh(e);return mu(Re)?[ti(Re)]:[]}),[H,R]=j.useState((e==null?void 0:e.requires_confirmation)??!1),[G,J]=j.useState(e!=null&&e.schedule_type?e.schedule_enabled??!0:!0),[fe,ie]=j.useState((e==null?void 0:e.yolo_mode)??!1),[ee,P]=j.useState((e==null?void 0:e.foreground_mode)??!1),[X,ae]=j.useState((e==null?void 0:e.command)??""),[pe,M]=j.useState(!1),E=(e==null?void 0:e.schedule_type)==="on_new_notification"&&e.schedule_values&&e.schedule_values.length>0?e.schedule_values[0]:"",[K,A]=j.useState(E),[be,je]=j.useState([]),[_e,Me]=j.useState(!1),[Ie,ke]=j.useState(!1),[Ge,Ft]=j.useState(""),ze=j.useCallback(()=>ke(!1),[]);dd(Ie,ze),j.useEffect(()=>{if(B!=="on_new_notification"||!s||!Xn.isNativePlatform()||!mn)return;let xe=!1;return Me(!0),mn.getInstalledApps().then(({apps:He})=>{if(xe)return;const Re="com.palmier.app",At=He.filter(Lt=>Lt.packageName!==Re).sort((Lt,xn)=>(Lt.appName||Lt.packageName).localeCompare(xn.appName||xn.packageName));je(At)}).catch(()=>{}).finally(()=>{xe||Me(!1)}),()=>{xe=!0}},[B,s]);const Ae=(e==null?void 0:e.schedule_type)==="on_new_sms"&&e.schedule_values&&e.schedule_values.length>0?e.schedule_values[0]:"",[Le,nt]=j.useState(Ae),Ve=j.useRef(null),Je=mu(B),We=B==="command",Fe=AE(B),et=t.find(xe=>xe.key===w),ft=!!(et!=null&&et.supportsYolo);j.useEffect(()=>{!ft&&fe&&ie(!1)},[ft,fe]);const ht=!!e,Wt=Nh(e),$e=!ht||g!==((e==null?void 0:e.user_prompt)??"")||w!==((e==null?void 0:e.agent)??"")||B!==Wt||H!==((e==null?void 0:e.requires_confirmation)??!1)||G!==(e!=null&&e.schedule_type?e.schedule_enabled??!0:!0)||fe!==((e==null?void 0:e.yolo_mode)??!1)||ee!==((e==null?void 0:e.foreground_mode)??!1)||We&&X!==((e==null?void 0:e.command)??"")||Je&&(JSON.stringify(bn())!==JSON.stringify((e==null?void 0:e.schedule_values)??[])||Th(B)!==((e==null?void 0:e.schedule_type)??void 0))||Fe&&B!==(e==null?void 0:e.schedule_type)||B==="on_new_notification"&&K.trim()!==E.trim()||B==="on_new_sms"&&Le.trim()!==Ae.trim(),yn=bE(d.timezone),ce=Je&&W.some(xe=>xe.schedule==="specific_times"&&(!xe.onceDate||xe.onceDate<yn.date||xe.onceDate===yn.date&&(xe.onceTime??"")<=yn.time)),we=$e&&!!g.trim()&&!ce&&(!We||!!X.trim())&&(!Je||W.length>0);function Ue(xe,He){$(Re=>Re.map((At,Lt)=>Lt===xe?{...At,...He}:At))}function Ke(xe){$(He=>He.filter((Re,At)=>At!==xe))}function ut(){mu(B)&&$(xe=>[...xe,xe.length>0?{...xe[xe.length-1]}:ti(B)])}function ln(xe){L(xe),mu(xe)?$([ti(xe)]):($([]),R(!1)),xe==="command"?setTimeout(()=>{var He;return(He=Ve.current)==null?void 0:He.focus()},0):ae(""),xe!=="on_new_notification"&&A(E),xe!=="on_new_sms"&&nt(Ae)}function bn(){return W.flatMap(xe=>{const He=NE(xe);return He?[He]:[]})}function en(){return fe?confirm(`Yolo mode is enabled. The agent will auto-approve all tool calls — it can read, write, delete files, run arbitrary commands, and access the network without asking for permission.
|
|
89
89
|
|
|
90
|
-
Are you sure you want to continue?`):!0}async function xt(){M(!0),oe(null);try{const xe=Je?bn():B==="on_new_notification"&&K.trim()?[K.trim()]:B==="on_new_sms"&&Le.trim()?[Le.trim()]:[],He=Je||Fe?Th(B):null,Re={user_prompt:g,agent:w,schedule_type:He,schedule_values:xe.length>0?xe:null,schedule_enabled:B==="ondemand"?!0:G,requires_confirmation:Je?H:!1,yolo_mode:fe,foreground_mode:ee,command:We?X:""};ht&&(Re.id=e.id);const Lt=await f(ht?"task.update":"task.create",Re,{timeout:45e3});if(Lt.error){oe(Lt.error);return}if(ht||m(d.hostId,w),We&&!ht){l(Lt);try{const xn=await f("task.run",{id:Lt.id});xn.run_id?u(Lt.id,xn.run_id):xn.error||u(Lt.id)}catch{}return}l(Lt)}catch(xe){oe(xe instanceof Error?xe.message:String(xe))}finally{M(!1)}}const $t=ht?"Save":We?"Run":(Je||Fe)&&G?"Schedule":"Save";return b.jsxs("div",{className:"task-form-overlay",children:[b.jsx("div",{className:"task-form",children:z?b.jsx(SE,{permissions:e==null?void 0:e.permissions}):b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"task-form-header",children:b.jsx("h2",{children:e?"Edit Task":"New Task"})}),F&&b.jsx("div",{className:"form-error",children:F}),b.jsx("textarea",{autoFocus:!e,className:"form-textarea",value:g,onChange:xe=>x(xe.target.value),placeholder:We?"If the input email contains an event, create a calendar entry for it.":"Research today's top AI news and write a summary.",rows:4,disabled:pe}),b.jsxs("div",{className:"plan-actions",children:[b.jsxs("div",{className:"agent-picker-section-inline",children:[b.jsx("span",{className:"agent-picker-label",children:"Run with"}),b.jsx("select",{className:"form-select form-select-sm",value:w,onChange:xe=>S(xe.target.value),disabled:pe,children:t.map(xe=>b.jsx("option",{value:xe.key,children:xe.label},xe.key))})]}),ft&&b.jsxs("label",{className:"yolo-inline",style:{marginLeft:"auto"},children:[b.jsx("input",{type:"checkbox",checked:fe,onChange:xe=>ie(xe.target.checked),disabled:pe}),"Yolo"]}),ft&&fe&&b.jsx("p",{className:"yolo-warning",children:"The agent will auto-approve all tool calls without asking for permission."}),T&&b.jsx("div",{className:"granted-permissions-row",children:b.jsx("button",{className:"btn btn-link",onClick:()=>D(!0),children:"Granted Permissions"})})]}),b.jsx("div",{className:"toggles-group",children:b.jsxs("div",{className:"schedule-section",children:[b.jsx("h3",{className:"schedule-section-title",children:"Schedule"}),b.jsxs("select",{className:"form-select",value:B,onChange:xe=>ln(xe.target.value),disabled:pe,children:[b.jsx("option",{value:"ondemand",children:"On Demand"}),b.jsx("option",{value:"specific_times",children:"Specific Times"}),b.jsx("option",{value:"hourly",children:"Hourly"}),b.jsx("option",{value:"daily",children:"Daily"}),b.jsx("option",{value:"weekly",children:"Weekly"}),b.jsx("option",{value:"monthly",children:"Monthly"}),b.jsx("option",{value:"on_new_notification",children:"On New Notification"}),b.jsx("option",{value:"on_new_sms",children:"On New SMS"}),b.jsx("option",{value:"command",children:"Command-triggered"})]}),Fe&&b.jsxs("div",{className:"schedule-reactive",children:[b.jsxs("p",{className:"command-help-text",children:[B==="on_new_notification"?"Runs each time a new push notification arrives on the paired Android device.":"Runs each time a new SMS arrives on the paired Android device."," ","The triggering payload is spliced into your task prompt — reference it as “the new ",B==="on_new_notification"?"notification":"SMS","”."]}),B==="on_new_notification"&&(()=>{const xe=be.find(Re=>Re.packageName===K),He=(xe==null?void 0:xe.appName)||K;return b.jsxs(b.Fragment,{children:[s?K.trim()?b.jsxs("div",{className:"app-filter-selected",children:[b.jsx("span",{className:"app-filter-selected-name",children:He}),(xe==null?void 0:xe.appName)&&b.jsx("span",{className:"app-filter-selected-pkg",children:xe.packageName}),b.jsx("button",{type:"button",className:"app-filter-selected-clear",onClick:()=>A(""),"aria-label":"Clear app filter",disabled:pe,children:"✕"})]}):b.jsx("button",{type:"button",className:"btn btn-link app-filter-trigger",onClick:()=>{Ft(""),ke(!0)},disabled:pe,children:"Select app"}):b.jsx("input",{className:"form-input",type:"text",value:K,onChange:Re=>A(Re.target.value),placeholder:"App (optional), e.g. com.google.android.gm",disabled:pe}),b.jsx("p",{className:"command-help-text app-filter-help",children:K.trim()?`Only notifications from ${He} will trigger this task.`:"Every notification from your device triggers this task."})]})})(),B==="on_new_sms"&&b.jsxs(b.Fragment,{children:[b.jsx("input",{className:"form-input",type:"text",value:Le,onChange:xe=>nt(xe.target.value),placeholder:"From (optional), e.g. +1 555-1234)",disabled:pe}),b.jsx("p",{className:"command-help-text app-filter-help",children:Le.trim()?`Only SMS from ${Le.trim()} will trigger this task. Formatting (spaces, dashes, parens) is ignored.`:"Every SMS that arrives on your device triggers this task."})]})]}),We&&b.jsxs("div",{className:"schedule-reactive",children:[b.jsx("p",{className:"command-help-text",children:"Runs a command and invokes the task for each line of output. Use “the input” in your task description to reference each line."}),b.jsx("input",{ref:Ve,className:"form-input form-input-mono",type:"text",value:X,onChange:xe=>ae(xe.target.value),placeholder:"gws gmail +watch --project my-project",disabled:pe})]}),Je&&B!=="hourly"&&b.jsxs(b.Fragment,{children:[W.map((xe,He)=>b.jsxs("div",{className:"trigger-row-card",children:[b.jsxs("div",{className:"trigger-row-content",children:[B==="daily"&&b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})}),B==="weekly"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("select",{className:"form-select",value:xe.dayOfWeek,onChange:Re=>Ue(He,{dayOfWeek:Re.target.value}),children:EE.map((Re,At)=>b.jsx("option",{value:String(At),children:Re},At))}),b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})})]}),B==="monthly"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("select",{className:"form-select",value:xe.dayOfMonth,onChange:Re=>Ue(He,{dayOfMonth:Re.target.value}),children:Array.from({length:28},(Re,At)=>At+1).map(Re=>b.jsxs("option",{value:String(Re),children:["Day ",Re]},Re))}),b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})})]}),B==="specific_times"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("input",{className:"form-input",type:"date",value:xe.onceDate,min:yn.date,onChange:Re=>Ue(He,{onceDate:Re.target.value})}),b.jsx("input",{className:"form-input",type:"time",value:xe.onceTime,min:xe.onceDate===yn.date?yn.time:void 0,onChange:Re=>Ue(He,{onceTime:Re.target.value})})]})]}),W.length>1&&b.jsx("button",{className:"trigger-remove-btn",onClick:()=>Ke(He),title:"Remove trigger",children:"×"})]},He)),b.jsx("button",{className:"trigger-add-btn",onClick:ut,children:"+ Add"})]}),r==="win32"&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:ee,onChange:xe=>P(xe.target.checked),disabled:pe}),"Run in the foreground (host must login to Windows)"]}),Je&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:H,onChange:xe=>R(xe.target.checked),disabled:pe}),"Confirm before each run"]}),B!=="ondemand"&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:G,onChange:xe=>J(xe.target.checked),disabled:pe}),"Enabled"]})]})}),!fe&&et&&!et.supportsPermissions&&b.jsxs("div",{className:"form-warning",children:["Palmier does not support runtime permission granting for ",et.label,". The task may fail if required permissions are not pre-configured."]}),b.jsxs("div",{className:"form-actions",children:[b.jsxs("button",{className:"btn btn-primary",onClick:()=>en()&&xt(),disabled:!we||pe,children:[pe&&b.jsx("span",{className:"btn-spinner"}),$t]}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>{$e&&g.trim()&&!confirm("You have unsaved changes. Discard?")||c()},style:{marginLeft:"auto"},children:"Cancel"})]})]})}),Ie&&(()=>{const xe=Ge.trim().toLowerCase(),He=xe?be.filter(Re=>Re.packageName.toLowerCase().includes(xe)||Re.appName.toLowerCase().includes(xe)):be;return b.jsx("div",{className:"app-filter-overlay",onClick:ze,children:b.jsxs("div",{className:"app-filter-dialog",onClick:Re=>Re.stopPropagation(),children:[b.jsxs("div",{className:"app-filter-header",children:[b.jsx("h2",{children:"Select app"}),b.jsx("button",{className:"app-filter-close",onClick:ze,"aria-label":"Close",children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:b.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),b.jsx("input",{className:"form-input app-filter-search",type:"text",value:Ge,onChange:Re=>Ft(Re.target.value),onKeyDown:Re=>{Re.key==="Enter"&&Ge.trim()&&(A(Ge.trim()),ze())},placeholder:"Search or type a package name",autoFocus:!0}),b.jsxs("ul",{className:"app-filter-list",children:[_e&&be.length===0?Array.from({length:6}).map((Re,At)=>b.jsx("li",{className:"app-filter-row app-filter-skeleton",children:b.jsx("div",{className:"app-filter-skeleton-bar"})},`sk-${At}`)):He.length===0&&!Ge.trim()?b.jsx("li",{className:"app-filter-empty",children:"No apps"}):He.map(Re=>b.jsx("li",{className:"app-filter-row",onClick:()=>{A(Re.packageName),ze()},children:b.jsxs("div",{className:"app-filter-row-labels",children:[b.jsx("div",{className:"app-filter-row-name",children:Re.appName||Re.packageName}),Re.appName&&b.jsx("div",{className:"app-filter-row-pkg",children:Re.packageName})]})},Re.packageName)),Ge.trim()&&b.jsx("li",{className:"app-filter-row",onClick:()=>{A(Ge.trim()),ze()},children:b.jsx("div",{className:"app-filter-row-labels",children:b.jsx("div",{className:"app-filter-row-name",children:Ge.trim()})})})]})]})})})()]})}function Lx({pullDistance:e,refreshing:t,threshold:r}){const s=e>0||t,l=e>=r;return b.jsx("div",{className:"pull-to-refresh",style:{transform:`translateY(${e}px)`,opacity:s?Math.min(1,e/30):0},"aria-hidden":!s,children:b.jsx("div",{className:"pull-to-refresh-badge",children:t?b.jsx("div",{className:"spinner"}):b.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.25",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:l?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"},children:[b.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),b.jsx("polyline",{points:"19 12 12 19 5 12"})]})})})}function zx({onRefresh:e,threshold:t=70,maxPull:r=110,enabled:s=!0}){const[l,u]=j.useState(0),[c,f]=j.useState(!1),d=j.useRef(null),m=j.useRef(!1),y=j.useRef(0),g=j.useRef(!1),x=j.useRef(e);return j.useEffect(()=>{x.current=e}),j.useEffect(()=>{if(!s)return;const w=z=>{if(g.current||window.scrollY>0){d.current=null;return}d.current=z.touches[0].clientY,m.current=!1,y.current=0},S=z=>{if(g.current||d.current==null)return;const D=z.touches[0].clientY-d.current;if(D<=0){m.current=!1,y.current=0,u(0);return}m.current=!0;const q=Math.min(r,D*.5);y.current=q,u(q),z.cancelable&&z.preventDefault()},T=()=>{if(!m.current){d.current=null,u(0);return}const z=y.current;d.current=null,m.current=!1,y.current=0,z>=t?(g.current=!0,f(!0),u(t),Promise.resolve(x.current()).catch(()=>{}).finally(()=>{g.current=!1,f(!1),u(0)})):u(0)};return window.addEventListener("touchstart",w,{passive:!0}),window.addEventListener("touchmove",S,{passive:!1}),window.addEventListener("touchend",T,{passive:!0}),window.addEventListener("touchcancel",T,{passive:!0}),()=>{window.removeEventListener("touchstart",w),window.removeEventListener("touchmove",S),window.removeEventListener("touchend",T),window.removeEventListener("touchcancel",T)}},[s,t,r]),{pullDistance:l,refreshing:c,threshold:t}}function RE({connected:e,hostId:t,request:r,subscribeEvents:s,agents:l,hostPlatform:u,isNotificationListener:c,onViewRun:f}){const[d,m]=j.useState([]),[y,g]=j.useState(!1),[x,w]=j.useState(null),[S,T]=j.useState(new Map),[z,D]=j.useState(!1),[q,F]=j.useState(void 0),oe=j.useCallback(()=>{D(!1),F(void 0)},[]),B=j.useCallback(async()=>{if(e){g(!0),w(null);try{const R=(await r("task.list")).tasks??[],G=new Map;for(const J of R)J.status&&G.set(J.id,J.status);T(G),m(R)}catch(H){const R=H instanceof Error?H.message:String(H);R==="Not connected"||R.includes("503")||R.toLowerCase().includes("no responders")?w(null):w(R),m([])}finally{g(!1)}}},[e,t,r]);j.useEffect(()=>{e?B():(m([]),g(!1))},[e,t,B]);const L=zx({onRefresh:B,enabled:e});j.useEffect(()=>!e||!t?void 0:s(t,async R=>{const G=R.subject.split(".");if(G.length<3)return;const J=G.slice(2).join(".");let fe={};try{fe=JSON.parse(new TextDecoder().decode(R.data))}catch{return}const ie=fe.event_type;if(!(ie!=="running-state"&&ie!=="permission-resolved"))try{const ee=await r("task.status",{id:J},{timeout:5e3});if(ee.error)return;T(P=>{const X=new Map(P);return X.set(J,ee),X})}catch{}}),[e,t,s,r]);function W(H){m(R=>{const G=R.findIndex(J=>J.id===H.id);if(G>=0){const J=[...R];return J[G]=H,J}return[H,...R]}),D(!1),F(void 0)}function $(H){m(R=>R.filter(G=>G.id!==H)),T(R=>{const G=new Map(R);return G.delete(H),G})}return b.jsxs(b.Fragment,{children:[b.jsx(Lx,{pullDistance:L.pullDistance,refreshing:L.refreshing,threshold:L.threshold}),x&&b.jsxs("div",{className:"form-error",children:[x,x.toLowerCase().includes("failed to fetch")&&b.jsxs(b.Fragment,{children:[" ",b.jsx("a",{href:"#",onClick:H=>{H.preventDefault(),window.location.reload()},children:"Reload"})]})]}),y&&!d.length?b.jsx("div",{className:"task-list",children:[0,1,2].map(H=>b.jsxs("div",{className:"task-card",style:{pointerEvents:"none"},children:[b.jsx("div",{className:"task-card-header",children:b.jsxs("div",{className:"task-card-title-row",children:[b.jsx("div",{className:"skeleton-line",style:{width:10,height:10,borderRadius:"50%"}}),b.jsx("div",{className:"skeleton-line",style:{width:`${60+H*12}%`}})]})}),b.jsxs("div",{className:"task-card-meta",children:[b.jsx("div",{className:"skeleton-line",style:{width:"30%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"25%"}})]})]},H))}):d.length===0?b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"No tasks yet"}),b.jsx("p",{className:"empty-state-hint",children:"Tap the + button to create your first task."})]}):b.jsx("div",{className:"task-list",children:d.map(H=>b.jsx(wE,{task:H,lastEvent:S.get(H.id),onEdit:async R=>{try{const G=await r("task.get",{id:R.id});F(G.error?R:G)}catch{F(R)}D(!0)},onDelete:$,onViewRun:f},H.id))}),b.jsx("button",{className:"fab",onClick:()=>{F(void 0),D(!0)},"aria-label":"New task",title:"New task",children:b.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),b.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),z&&b.jsx(OE,{initial:q,agents:l,hostPlatform:u,isNotificationListener:c,onSaved:W,onRun:f,onCancel:oe})]})}let ha=null;function I0(e){ha&&(e.preventDefault(),e.returnValue="")}function Oh(e){const t=!!ha;ha=e;const r=!!ha;r&&!t?window.addEventListener("beforeunload",I0):!r&&t&&window.removeEventListener("beforeunload",I0)}function ps(){return ha?window.confirm(ha):!0}function ME(){const e=Mr(),t=cr(),{hostId:r}=$u(),s=t.pathname.endsWith("/tasks"),l=!s;function u(c){ps()&&r&&e(`/hosts/${encodeURIComponent(r)}${c}`)}return b.jsxs(b.Fragment,{children:[b.jsxs("button",{className:`tab-btn ${l?"tab-btn-active":""}`,onClick:()=>u(""),children:[b.jsx("svg",{className:"tab-icon",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:b.jsx("path",{d:"M2 8H4.5L6 4L8 12L10 6L11.5 8H14"})}),"Sessions"]}),b.jsxs("button",{className:`tab-btn ${s?"tab-btn-active":""}`,onClick:()=>u("/tasks"),children:[b.jsxs("svg",{className:"tab-icon",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),b.jsx("path",{d:"M5.5 8L7 9.5L10.5 6"})]}),"Tasks"]})]})}function Ux(e){const[t,r]=j.useState(()=>window.matchMedia(e).matches);return j.useEffect(()=>{const s=window.matchMedia(e),l=u=>r(u.matches);return s.addEventListener("change",l),r(s.matches),()=>s.removeEventListener("change",l)},[e]),t}const ku=Xn.isNativePlatform(),DE=["Device","Data","Messaging"],LE=[{capability:"sms-read",label:"Read SMS",group:"Messaging"},{capability:"sms-send",label:"Send SMS",group:"Messaging"},{capability:"send-email",label:"Send Email",group:"Messaging"},{capability:"notifications",label:"Notifications from Other Apps",group:"Data"},{capability:"contacts",label:"Manage Contacts",group:"Data"},{capability:"calendar",label:"Manage Calendar",group:"Data"},{capability:"location",label:"Get Location",group:"Device"},{capability:"dnd",label:"Set Ringer Mode",group:"Device"},{capability:"alarm",label:"Trigger Alarms",group:"Device"}];async function zE(){if(!ku||!mn)return new Set;try{const{capabilities:e}=await mn.getCapabilityStatus();return new Set(e.filter(t=>t.enabled).map(t=>t.name))}catch{return new Set}}function Bx({onChange:e,confirmDisable:t=!1}){const[r,s]=j.useState(new Map),[l,u]=j.useState(null),[c,f]=j.useState(null),d=j.useCallback(async()=>{if(!(!ku||!mn))try{const{capabilities:S}=await mn.getCapabilityStatus(),T=new Map;for(const z of S)T.set(z.name,z);s(T),e==null||e(new Set(S.filter(z=>z.enabled).map(z=>z.name)))}catch(S){console.error("Failed to read capability status:",S)}},[e]);j.useEffect(()=>{d()},[d]),j.useEffect(()=>{if(!ku)return;const S=fd.addListener("resume",d);return()=>{S.then(T=>T.remove())}},[d]);async function m(S,T){if(mn){u(S.capability);try{const z=await mn.setCapabilityEnabled({capability:S.capability,enabled:T});!z.enabled&&z.reason==="no-email-client"&&alert("No email app is installed on this device. Install one (e.g. Gmail) before enabling Send Email."),await d()}catch(z){console.error(`Failed to toggle ${S.capability}:`,z)}finally{u(null)}}}function y(S){const T=r.get(S.capability);if(T){if(T.enabled&&t){f(S);return}m(S,!T.enabled)}}function g(){const S=c;S&&(f(null),m(S,!1))}if(!ku)return null;const x=DE.map(S=>({group:S,items:LE.filter(T=>{const z=r.get(T.capability);return T.group===S&&(z==null?void 0:z.supported)})})).filter(S=>S.items.length>0);if(x.length===0)return b.jsx("div",{className:"capability-toggles-loading",children:b.jsx("span",{className:"spinner"})});const w=c&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>f(null),children:b.jsxs("div",{className:"confirm-modal",onClick:S=>S.stopPropagation(),children:[b.jsxs("h2",{className:"confirm-modal-title",children:["Disable ",c.label,"?"]}),b.jsxs("p",{className:"confirm-modal-message",children:["All hosts linked to this device will no longer be able to use ",c.label,"."]}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>f(null),children:"Cancel"}),b.jsx("button",{className:"btn btn-danger",onClick:g,children:"Disable"})]})]})}),document.body);return b.jsxs(b.Fragment,{children:[x.map(({group:S,items:T},z)=>b.jsx("div",{className:z>0?"drawer-toggle-group drawer-toggle-group-divided":"drawer-toggle-group",children:T.map(D=>{const q=r.get(D.capability),F=!!(q!=null&&q.enabled);return b.jsxs("label",{className:"drawer-toggle",children:[b.jsx("span",{className:"drawer-toggle-label",children:D.label}),b.jsx("button",{className:`toggle-switch ${F?"toggle-switch-on":""}`,onClick:()=>y(D),disabled:l===D.capability,role:"switch","aria-checked":F,children:b.jsx("span",{className:"toggle-switch-thumb"})})]},D.capability)})},S)),w]})}const F0=!!window.__PALMIER_SERVE__&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),UE=Xn.isNativePlatform();function $0({daemonVersion:e,linkedClientToken:t,request:r,onEnabledCapabilitiesChange:s,onLinkedClientTokenChange:l}){var ze;const{pairedHosts:u,removePairedHost:c,renamePairedHost:f}=Hi(),{activeHost:d}=si(),m=Mr(),y=cr(),x=$u().hostId??null,w=d.clientToken||null,S=!!w&&t===w,T=Ux("(min-width: 768px)"),[z,D]=j.useState(!1),[q,F]=j.useState(()=>Date.now());j.useEffect(()=>{const Ae=()=>F(Date.now()),Le=6e4-Date.now()%6e4,nt=setTimeout(()=>{Ae();const Ve=setInterval(Ae,6e4);nt._iv=Ve},Le);return()=>{const Ve=nt._iv;Ve&&clearInterval(Ve),clearTimeout(nt)}},[]);const oe=d.timezone?new Date(q).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",timeZone:d.timezone}):"";async function B(){if(!(!mn||!r||!w)){D(!0);try{const{token:Ae}=await mn.getFcmToken();if(!Ae)return;await r("device.link",{fcmToken:Ae}),l==null||l(w)}catch(Ae){console.error("Failed to make this the linked device:",Ae)}finally{D(!1)}}}async function L(Ae){const Le=Ae===x;if(Le&&r)try{await r("clients.revoke_self")}catch{}c(Ae),X(null),Le&&m("/",{replace:!0})}function W(Ae){const nt=y.pathname.endsWith("/tasks")?"/tasks":"";m(`/hosts/${encodeURIComponent(Ae)}${nt}`)}const[$,H]=j.useState(!1),[R,G]=j.useState(!1),[J,fe]=j.useState(null),[ie,ee]=j.useState(""),[P,X]=j.useState(null),[ae,pe]=j.useState(!1),M=j.useRef(null),E=j.useRef(null),K=j.useCallback(()=>{G(!0)},[]);function A(){R&&(H(!1),G(!1))}function be(){G(!1),H(!0)}function je(Ae,Le){fe(Ae),ee(Le)}function _e(){J&&ie.trim()&&f(J,ie.trim()),fe(null),ee("")}function Me(){fe(null),ee("")}j.useEffect(()=>{J&&E.current&&(E.current.focus(),E.current.select())},[J]),j.useEffect(()=>{if(!$||R)return;function Ae(Le){Le.key==="Escape"&&K()}return document.addEventListener("keydown",Ae),()=>{document.removeEventListener("keydown",Ae)}},[$,R,K]);const Ie=b.jsxs(b.Fragment,{children:[!T&&b.jsx("button",{className:"drawer-close-btn",onClick:K,"aria-label":"Close menu",children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:b.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),!F0&&u.length>0&&b.jsxs("div",{className:"drawer-section",children:[b.jsx("h3",{className:"drawer-section-label",children:"Hosts"}),b.jsx("div",{className:"host-picker-inline",children:b.jsx("div",{className:"host-picker-list",role:"listbox",children:u.map(Ae=>{const Le=Ae.hostId===x,nt=J===Ae.hostId,Ve=Ae.name||Ae.hostId.slice(0,8);return b.jsx("div",{className:"host-picker-item-wrapper",children:b.jsxs("div",{className:`host-picker-item ${Le?"host-picker-item-active":""}`,onClick:()=>{if(!nt&&!Le){if(!ps())return;W(Ae.hostId),T||K()}},role:"option","aria-selected":Le,children:[nt?b.jsx("input",{ref:E,className:"form-input host-picker-rename-input",type:"text",value:ie,onChange:Je=>ee(Je.target.value),onKeyDown:Je=>{Je.key==="Enter"&&_e(),Je.key==="Escape"&&Me()},onBlur:_e,onClick:Je=>Je.stopPropagation()}):b.jsx("span",{className:"host-picker-item-name",children:Ve}),b.jsxs("div",{className:"host-picker-item-actions",children:[Le&&!nt&&b.jsx("button",{className:"host-picker-edit-btn",onClick:Je=>{Je.stopPropagation(),je(Ae.hostId,Ve)},"aria-label":"Rename host",children:b.jsx("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",children:b.jsx("path",{d:"M9.5 1.5L11.5 3.5M1.5 11.5L2 9L9 2L11 4L4 11L1.5 11.5Z",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})}),!Le&&b.jsx("button",{className:"host-picker-delete-btn",onClick:Je=>{Je.stopPropagation(),X(Ae.hostId)},"aria-label":`Unpair ${Ve}`,children:b.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:b.jsx("path",{d:"M4 5.5V11C4 11.2761 4.22386 11.5 4.5 11.5H9.5C9.77614 11.5 10 11.2761 10 11V5.5M3 4H11M5.5 4V3C5.5 2.72386 5.72386 2.5 6 2.5H8C8.27614 2.5 8.5 2.72386 8.5 3V4M6.5 6.5V9.5M7.5 6.5V9.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]})},Ae.hostId)})})})]}),!F0&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-divider"}),b.jsx("div",{className:"drawer-section",children:b.jsx("button",{className:"btn btn-primary btn-full",onClick:()=>{ps()&&(m("/pair"),T||K())},children:"Add New Host"})})]}),UE&&r&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-divider"}),b.jsxs("div",{className:"drawer-section",children:[b.jsx("h3",{className:"drawer-section-label",children:"Device Capabilities"}),S?b.jsx(Bx,{onChange:s,confirmDisable:!0}):b.jsxs(b.Fragment,{children:[b.jsx("p",{className:"drawer-section-hint",children:"This device isn't the linked device for the host, so it can't provide capabilities (SMS, contacts, location, etc.)."}),b.jsx("button",{className:"btn btn-secondary btn-full",onClick:()=>{t&&t!==w?pe(!0):B()},disabled:z,children:z?"Linking…":"Link the host to this device"})]})]})]}),b.jsxs("div",{className:"drawer-footer",children:[d.timezone&&b.jsxs("div",{className:"drawer-host-time",children:["Host time: ",oe," · ",d.timezone]}),e&&b.jsxs("div",{className:"drawer-version",children:["Palmier v",e]}),b.jsxs("div",{className:"drawer-legal",children:[b.jsx("a",{href:"https://www.palmier.me/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms"}),b.jsx("span",{className:"drawer-legal-sep",children:"·"}),b.jsx("a",{href:"https://www.palmier.me/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy"})]})]})]}),ke=!!P&&P===x&&S,Ge=P&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>X(null),children:b.jsxs("div",{className:"confirm-modal",onClick:Ae=>Ae.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Remove host?"}),b.jsxs("p",{className:"confirm-modal-message",children:['"',((ze=u.find(Ae=>Ae.hostId===P))==null?void 0:ze.name)||P.slice(0,8),'" will be ',ke?"removed and unlinked":"removed",".",ke&&b.jsx(b.Fragment,{children:" This device is currently linked to the host — unlinking will revoke its access to all device capabilities (SMS, contacts, location, etc.) until another device is linked."})]}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>X(null),children:"Cancel"}),b.jsx("button",{className:"btn btn-danger",onClick:()=>L(P),children:"Remove"})]})]})}),document.body),Ft=ae&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>pe(!1),children:b.jsxs("div",{className:"confirm-modal",onClick:Ae=>Ae.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Link the host to this device?"}),b.jsx("p",{className:"confirm-modal-message",children:"Another device is already linked to this host. Only one device can be linked to the host — switching will disable those capabilities on the currently linked device."}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>pe(!1),children:"Cancel"}),b.jsx("button",{className:"btn btn-primary",onClick:()=>{pe(!1),B()},children:"Link"})]})]})}),document.body);return T?b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-panel drawer-panel-desktop",ref:M,children:Ie}),Ge,Ft]}):b.jsxs(b.Fragment,{children:[b.jsx("button",{className:"hamburger-btn",onClick:be,"aria-label":"Open menu",children:b.jsx("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:b.jsx("path",{d:"M3 5H17M3 10H17M3 15H17",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),$&&ds.createPortal(b.jsx("div",{className:`drawer-overlay ${R?"drawer-overlay-closing":""}`,onClick:K,onAnimationEnd:A,children:b.jsx("div",{className:`drawer-panel ${R?"drawer-panel-closing":""}`,ref:M,onClick:Ae=>Ae.stopPropagation(),children:Ie})}),document.body),Ge,Ft]})}const BE=Xn.isNativePlatform(),Fd={width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};function PE(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("path",{d:"M5 12.55a11 11 0 0 1 14.08 0"}),b.jsx("path",{d:"M1.42 9a16 16 0 0 1 21.16 0"}),b.jsx("path",{d:"M8.53 16.11a6 6 0 0 1 6.95 0"}),b.jsx("line",{x1:"12",y1:"20",x2:"12.01",y2:"20"})]})}function Y0(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("circle",{cx:"12",cy:"12",r:"10"}),b.jsx("line",{x1:"2",y1:"12",x2:"22",y2:"12"}),b.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"})]})}function qE(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("path",{d:"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),b.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),b.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]})}function HE(){const{mode:e}=si(),[t,r]=j.useState(!1),s=j.useRef(null);if(j.useEffect(()=>{if(!t)return;function f(m){var y;(y=s.current)!=null&&y.contains(m.target)||r(!1)}document.addEventListener("pointerdown",f);const d=window.setTimeout(()=>r(!1),3e3);return()=>{document.removeEventListener("pointerdown",f),clearTimeout(d)}},[t]),e==="direct")return null;let l,u,c;switch(e){case"lan":l=b.jsx(PE,{}),u="Connected via LAN",c="lan";break;case"nats":l=b.jsx(Y0,{}),u=BE?"Connected via relay":"Connected",c="relay";break;case"disconnected":l=b.jsx(qE,{}),u="Disconnected",c="disconnected";break;case"connecting":default:l=b.jsx(Y0,{}),u="Connecting…",c="connecting";break}return b.jsxs("div",{ref:s,className:`conn-status conn-status--${c}`,children:[b.jsx("button",{type:"button",className:"conn-status-btn","aria-label":u,onClick:()=>r(f=>!f),children:l}),b.jsx("div",{className:`conn-status-popover ${t?"conn-status-popover--open":""}`,role:"tooltip",children:u})]})}function G0(e,t){var s;const r=e.map(l=>l.key);return t&&r.includes(t)?t:((s=e[0])==null?void 0:s.key)??""}function IE({agents:e,hostPlatform:t,onStarted:r}){const{request:s,activeHost:l}=si(),{setHostLastAgent:u}=Hi(),[c,f]=j.useState(""),[d,m]=j.useState(()=>G0(e,l.lastAgent)),[y,g]=j.useState(!1),[x,w]=j.useState(!1),[S,T]=j.useState(null);j.useEffect(()=>{e.length&&(e.find(L=>L.key===d)||m(G0(e,l.lastAgent)))},[e,d,l.lastAgent]),j.useEffect(()=>{const L=c.trim().length>0;return Oh(L?"Your session draft will be lost. Continue?":null),()=>Oh(null)},[c]);const z=e.find(L=>L.key===d),D=!!(z!=null&&z.supportsYolo);j.useEffect(()=>{!D&&y&&g(!1)},[D,y]);const q=!!c.trim()&&!!d&&!x;function F(){return y?confirm(`Yolo mode is enabled. The agent will auto-approve all tool calls — it can read, write, delete files, run arbitrary commands, and access the network without asking for permission.
|
|
90
|
+
Are you sure you want to continue?`):!0}async function xt(){M(!0),oe(null);try{const xe=Je?bn():B==="on_new_notification"&&K.trim()?[K.trim()]:B==="on_new_sms"&&Le.trim()?[Le.trim()]:[],He=Je||Fe?Th(B):null,Re={user_prompt:g,agent:w,schedule_type:He,schedule_values:xe.length>0?xe:null,schedule_enabled:B==="ondemand"?!0:G,requires_confirmation:Je?H:!1,yolo_mode:fe,foreground_mode:ee,command:We?X:""};ht&&(Re.id=e.id);const Lt=await f(ht?"task.update":"task.create",Re,{timeout:45e3});if(Lt.error){oe(Lt.error);return}if(ht||m(d.hostId,w),We&&!ht){l(Lt);try{const xn=await f("task.run",{id:Lt.id});xn.run_id?u(Lt.id,xn.run_id):xn.error||u(Lt.id)}catch{}return}l(Lt)}catch(xe){oe(xe instanceof Error?xe.message:String(xe))}finally{M(!1)}}const $t=ht?"Save":We?"Run":(Je||Fe)&&G?"Schedule":"Save";return b.jsxs("div",{className:"task-form-overlay",children:[b.jsx("div",{className:"task-form",children:z?b.jsx(SE,{permissions:e==null?void 0:e.permissions}):b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"task-form-header",children:b.jsx("h2",{children:e?"Edit Task":"New Task"})}),F&&b.jsx("div",{className:"form-error",children:F}),b.jsx("textarea",{autoFocus:!e,className:"form-textarea",value:g,onChange:xe=>x(xe.target.value),placeholder:We?"If the input email contains an event, create a calendar entry for it.":"Research today's top AI news and write a summary.",rows:4,disabled:pe}),b.jsxs("div",{className:"plan-actions",children:[b.jsxs("div",{className:"agent-picker-section-inline",children:[b.jsx("span",{className:"agent-picker-label",children:"Run with"}),b.jsx("select",{className:"form-select form-select-sm",value:w,onChange:xe=>S(xe.target.value),disabled:pe,children:t.map(xe=>b.jsx("option",{value:xe.key,children:xe.label},xe.key))})]}),ft&&b.jsxs("label",{className:"yolo-inline",style:{marginLeft:"auto"},children:[b.jsx("input",{type:"checkbox",checked:fe,onChange:xe=>ie(xe.target.checked),disabled:pe}),"Yolo"]}),ft&&fe&&b.jsx("p",{className:"yolo-warning",children:"The agent will auto-approve all tool calls without asking for permission."}),T&&b.jsx("div",{className:"granted-permissions-row",children:b.jsx("button",{className:"btn btn-link",onClick:()=>D(!0),children:"Granted Permissions"})})]}),b.jsx("div",{className:"toggles-group",children:b.jsxs("div",{className:"schedule-section",children:[b.jsxs("h3",{className:"schedule-section-title",children:["Schedule ",b.jsx("span",{className:"schedule-section-hint",children:"based on host time"})]}),b.jsxs("select",{className:"form-select",value:B,onChange:xe=>ln(xe.target.value),disabled:pe,children:[b.jsx("option",{value:"ondemand",children:"On Demand"}),b.jsx("option",{value:"specific_times",children:"Specific Times"}),b.jsx("option",{value:"hourly",children:"Hourly"}),b.jsx("option",{value:"daily",children:"Daily"}),b.jsx("option",{value:"weekly",children:"Weekly"}),b.jsx("option",{value:"monthly",children:"Monthly"}),b.jsx("option",{value:"on_new_notification",children:"On New Notification"}),b.jsx("option",{value:"on_new_sms",children:"On New SMS"}),b.jsx("option",{value:"command",children:"Command-triggered"})]}),Fe&&b.jsxs("div",{className:"schedule-reactive",children:[b.jsxs("p",{className:"command-help-text",children:[B==="on_new_notification"?"Runs each time a new push notification arrives on the paired Android device.":"Runs each time a new SMS arrives on the paired Android device."," ","The triggering payload is spliced into your task prompt — reference it as “the new ",B==="on_new_notification"?"notification":"SMS","”."]}),B==="on_new_notification"&&(()=>{const xe=be.find(Re=>Re.packageName===K),He=(xe==null?void 0:xe.appName)||K;return b.jsxs(b.Fragment,{children:[s?K.trim()?b.jsxs("div",{className:"app-filter-selected",children:[b.jsx("span",{className:"app-filter-selected-name",children:He}),(xe==null?void 0:xe.appName)&&b.jsx("span",{className:"app-filter-selected-pkg",children:xe.packageName}),b.jsx("button",{type:"button",className:"app-filter-selected-clear",onClick:()=>A(""),"aria-label":"Clear app filter",disabled:pe,children:"✕"})]}):b.jsx("button",{type:"button",className:"btn btn-link app-filter-trigger",onClick:()=>{Ft(""),ke(!0)},disabled:pe,children:"Select app"}):b.jsx("input",{className:"form-input",type:"text",value:K,onChange:Re=>A(Re.target.value),placeholder:"App (optional), e.g. com.google.android.gm",disabled:pe}),b.jsx("p",{className:"command-help-text app-filter-help",children:K.trim()?`Only notifications from ${He} will trigger this task.`:"Every notification from your device triggers this task."})]})})(),B==="on_new_sms"&&b.jsxs(b.Fragment,{children:[b.jsx("input",{className:"form-input",type:"text",value:Le,onChange:xe=>nt(xe.target.value),placeholder:"From (optional), e.g. +1 555-1234)",disabled:pe}),b.jsx("p",{className:"command-help-text app-filter-help",children:Le.trim()?`Only SMS from ${Le.trim()} will trigger this task. Formatting (spaces, dashes, parens) is ignored.`:"Every SMS that arrives on your device triggers this task."})]})]}),We&&b.jsxs("div",{className:"schedule-reactive",children:[b.jsx("p",{className:"command-help-text",children:"Runs a command and invokes the task for each line of output. Use “the input” in your task description to reference each line."}),b.jsx("input",{ref:Ve,className:"form-input form-input-mono",type:"text",value:X,onChange:xe=>ae(xe.target.value),placeholder:"gws gmail +watch --project my-project",disabled:pe})]}),Je&&B!=="hourly"&&b.jsxs(b.Fragment,{children:[W.map((xe,He)=>b.jsxs("div",{className:"trigger-row-card",children:[b.jsxs("div",{className:"trigger-row-content",children:[B==="daily"&&b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})}),B==="weekly"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("select",{className:"form-select",value:xe.dayOfWeek,onChange:Re=>Ue(He,{dayOfWeek:Re.target.value}),children:EE.map((Re,At)=>b.jsx("option",{value:String(At),children:Re},At))}),b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})})]}),B==="monthly"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("select",{className:"form-select",value:xe.dayOfMonth,onChange:Re=>Ue(He,{dayOfMonth:Re.target.value}),children:Array.from({length:28},(Re,At)=>At+1).map(Re=>b.jsxs("option",{value:String(Re),children:["Day ",Re]},Re))}),b.jsx("input",{className:"form-input",type:"time",value:xe.time,onChange:Re=>Ue(He,{time:Re.target.value})})]}),B==="specific_times"&&b.jsxs("div",{className:"trigger-row-top",children:[b.jsx("input",{className:"form-input",type:"date",value:xe.onceDate,min:yn.date,onChange:Re=>Ue(He,{onceDate:Re.target.value})}),b.jsx("input",{className:"form-input",type:"time",value:xe.onceTime,min:xe.onceDate===yn.date?yn.time:void 0,onChange:Re=>Ue(He,{onceTime:Re.target.value})})]})]}),W.length>1&&b.jsx("button",{className:"trigger-remove-btn",onClick:()=>Ke(He),title:"Remove trigger",children:"×"})]},He)),b.jsx("button",{className:"trigger-add-btn",onClick:ut,children:"+ Add"})]}),r==="win32"&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:ee,onChange:xe=>P(xe.target.checked),disabled:pe}),"Run in the foreground (host must login to Windows)"]}),Je&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:H,onChange:xe=>R(xe.target.checked),disabled:pe}),"Confirm before each run"]}),B!=="ondemand"&&b.jsxs("label",{className:"toggle-label",children:[b.jsx("input",{type:"checkbox",checked:G,onChange:xe=>J(xe.target.checked),disabled:pe}),"Enabled"]})]})}),!fe&&et&&!et.supportsPermissions&&b.jsxs("div",{className:"form-warning",children:["Palmier does not support runtime permission granting for ",et.label,". The task may fail if required permissions are not pre-configured."]}),b.jsxs("div",{className:"form-actions",children:[b.jsxs("button",{className:"btn btn-primary",onClick:()=>en()&&xt(),disabled:!we||pe,children:[pe&&b.jsx("span",{className:"btn-spinner"}),$t]}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>{$e&&g.trim()&&!confirm("You have unsaved changes. Discard?")||c()},style:{marginLeft:"auto"},children:"Cancel"})]})]})}),Ie&&(()=>{const xe=Ge.trim().toLowerCase(),He=xe?be.filter(Re=>Re.packageName.toLowerCase().includes(xe)||Re.appName.toLowerCase().includes(xe)):be;return b.jsx("div",{className:"app-filter-overlay",onClick:ze,children:b.jsxs("div",{className:"app-filter-dialog",onClick:Re=>Re.stopPropagation(),children:[b.jsxs("div",{className:"app-filter-header",children:[b.jsx("h2",{children:"Select app"}),b.jsx("button",{className:"app-filter-close",onClick:ze,"aria-label":"Close",children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:b.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),b.jsx("input",{className:"form-input app-filter-search",type:"text",value:Ge,onChange:Re=>Ft(Re.target.value),onKeyDown:Re=>{Re.key==="Enter"&&Ge.trim()&&(A(Ge.trim()),ze())},placeholder:"Search or type a package name",autoFocus:!0}),b.jsxs("ul",{className:"app-filter-list",children:[_e&&be.length===0?Array.from({length:6}).map((Re,At)=>b.jsx("li",{className:"app-filter-row app-filter-skeleton",children:b.jsx("div",{className:"app-filter-skeleton-bar"})},`sk-${At}`)):He.length===0&&!Ge.trim()?b.jsx("li",{className:"app-filter-empty",children:"No apps"}):He.map(Re=>b.jsx("li",{className:"app-filter-row",onClick:()=>{A(Re.packageName),ze()},children:b.jsxs("div",{className:"app-filter-row-labels",children:[b.jsx("div",{className:"app-filter-row-name",children:Re.appName||Re.packageName}),Re.appName&&b.jsx("div",{className:"app-filter-row-pkg",children:Re.packageName})]})},Re.packageName)),Ge.trim()&&b.jsx("li",{className:"app-filter-row",onClick:()=>{A(Ge.trim()),ze()},children:b.jsx("div",{className:"app-filter-row-labels",children:b.jsx("div",{className:"app-filter-row-name",children:Ge.trim()})})})]})]})})})()]})}function Lx({pullDistance:e,refreshing:t,threshold:r}){const s=e>0||t,l=e>=r;return b.jsx("div",{className:"pull-to-refresh",style:{transform:`translateY(${e}px)`,opacity:s?Math.min(1,e/30):0},"aria-hidden":!s,children:b.jsx("div",{className:"pull-to-refresh-badge",children:t?b.jsx("div",{className:"spinner"}):b.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.25",strokeLinecap:"round",strokeLinejoin:"round",style:{transform:l?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"},children:[b.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),b.jsx("polyline",{points:"19 12 12 19 5 12"})]})})})}function zx({onRefresh:e,threshold:t=70,maxPull:r=110,enabled:s=!0}){const[l,u]=j.useState(0),[c,f]=j.useState(!1),d=j.useRef(null),m=j.useRef(!1),y=j.useRef(0),g=j.useRef(!1),x=j.useRef(e);return j.useEffect(()=>{x.current=e}),j.useEffect(()=>{if(!s)return;const w=z=>{if(g.current||window.scrollY>0){d.current=null;return}d.current=z.touches[0].clientY,m.current=!1,y.current=0},S=z=>{if(g.current||d.current==null)return;const D=z.touches[0].clientY-d.current;if(D<=0){m.current=!1,y.current=0,u(0);return}m.current=!0;const q=Math.min(r,D*.5);y.current=q,u(q),z.cancelable&&z.preventDefault()},T=()=>{if(!m.current){d.current=null,u(0);return}const z=y.current;d.current=null,m.current=!1,y.current=0,z>=t?(g.current=!0,f(!0),u(t),Promise.resolve(x.current()).catch(()=>{}).finally(()=>{g.current=!1,f(!1),u(0)})):u(0)};return window.addEventListener("touchstart",w,{passive:!0}),window.addEventListener("touchmove",S,{passive:!1}),window.addEventListener("touchend",T,{passive:!0}),window.addEventListener("touchcancel",T,{passive:!0}),()=>{window.removeEventListener("touchstart",w),window.removeEventListener("touchmove",S),window.removeEventListener("touchend",T),window.removeEventListener("touchcancel",T)}},[s,t,r]),{pullDistance:l,refreshing:c,threshold:t}}function RE({connected:e,hostId:t,request:r,subscribeEvents:s,agents:l,hostPlatform:u,isNotificationListener:c,onViewRun:f}){const[d,m]=j.useState([]),[y,g]=j.useState(!1),[x,w]=j.useState(null),[S,T]=j.useState(new Map),[z,D]=j.useState(!1),[q,F]=j.useState(void 0),oe=j.useCallback(()=>{D(!1),F(void 0)},[]),B=j.useCallback(async()=>{if(e){g(!0),w(null);try{const R=(await r("task.list")).tasks??[],G=new Map;for(const J of R)J.status&&G.set(J.id,J.status);T(G),m(R)}catch(H){const R=H instanceof Error?H.message:String(H);R==="Not connected"||R.includes("503")||R.toLowerCase().includes("no responders")?w(null):w(R),m([])}finally{g(!1)}}},[e,t,r]);j.useEffect(()=>{e?B():(m([]),g(!1))},[e,t,B]);const L=zx({onRefresh:B,enabled:e});j.useEffect(()=>!e||!t?void 0:s(t,async R=>{const G=R.subject.split(".");if(G.length<3)return;const J=G.slice(2).join(".");let fe={};try{fe=JSON.parse(new TextDecoder().decode(R.data))}catch{return}const ie=fe.event_type;if(!(ie!=="running-state"&&ie!=="permission-resolved"))try{const ee=await r("task.status",{id:J},{timeout:5e3});if(ee.error)return;T(P=>{const X=new Map(P);return X.set(J,ee),X})}catch{}}),[e,t,s,r]);function W(H){m(R=>{const G=R.findIndex(J=>J.id===H.id);if(G>=0){const J=[...R];return J[G]=H,J}return[H,...R]}),D(!1),F(void 0)}function $(H){m(R=>R.filter(G=>G.id!==H)),T(R=>{const G=new Map(R);return G.delete(H),G})}return b.jsxs(b.Fragment,{children:[b.jsx(Lx,{pullDistance:L.pullDistance,refreshing:L.refreshing,threshold:L.threshold}),x&&b.jsxs("div",{className:"form-error",children:[x,x.toLowerCase().includes("failed to fetch")&&b.jsxs(b.Fragment,{children:[" ",b.jsx("a",{href:"#",onClick:H=>{H.preventDefault(),window.location.reload()},children:"Reload"})]})]}),y&&!d.length?b.jsx("div",{className:"task-list",children:[0,1,2].map(H=>b.jsxs("div",{className:"task-card",style:{pointerEvents:"none"},children:[b.jsx("div",{className:"task-card-header",children:b.jsxs("div",{className:"task-card-title-row",children:[b.jsx("div",{className:"skeleton-line",style:{width:10,height:10,borderRadius:"50%"}}),b.jsx("div",{className:"skeleton-line",style:{width:`${60+H*12}%`}})]})}),b.jsxs("div",{className:"task-card-meta",children:[b.jsx("div",{className:"skeleton-line",style:{width:"30%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"25%"}})]})]},H))}):d.length===0?b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"No tasks yet"}),b.jsx("p",{className:"empty-state-hint",children:"Tap the + button to create your first task."})]}):b.jsx("div",{className:"task-list",children:d.map(H=>b.jsx(wE,{task:H,lastEvent:S.get(H.id),onEdit:async R=>{try{const G=await r("task.get",{id:R.id});F(G.error?R:G)}catch{F(R)}D(!0)},onDelete:$,onViewRun:f},H.id))}),b.jsx("button",{className:"fab",onClick:()=>{F(void 0),D(!0)},"aria-label":"New task",title:"New task",children:b.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),b.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),z&&b.jsx(OE,{initial:q,agents:l,hostPlatform:u,isNotificationListener:c,onSaved:W,onRun:f,onCancel:oe})]})}let ha=null;function I0(e){ha&&(e.preventDefault(),e.returnValue="")}function Oh(e){const t=!!ha;ha=e;const r=!!ha;r&&!t?window.addEventListener("beforeunload",I0):!r&&t&&window.removeEventListener("beforeunload",I0)}function ps(){return ha?window.confirm(ha):!0}function ME(){const e=Mr(),t=cr(),{hostId:r}=$u(),s=t.pathname.endsWith("/tasks"),l=!s;function u(c){ps()&&r&&e(`/hosts/${encodeURIComponent(r)}${c}`)}return b.jsxs(b.Fragment,{children:[b.jsxs("button",{className:`tab-btn ${l?"tab-btn-active":""}`,onClick:()=>u(""),children:[b.jsx("svg",{className:"tab-icon",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:b.jsx("path",{d:"M2 8H4.5L6 4L8 12L10 6L11.5 8H14"})}),"Sessions"]}),b.jsxs("button",{className:`tab-btn ${s?"tab-btn-active":""}`,onClick:()=>u("/tasks"),children:[b.jsxs("svg",{className:"tab-icon",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),b.jsx("path",{d:"M5.5 8L7 9.5L10.5 6"})]}),"Tasks"]})]})}function Ux(e){const[t,r]=j.useState(()=>window.matchMedia(e).matches);return j.useEffect(()=>{const s=window.matchMedia(e),l=u=>r(u.matches);return s.addEventListener("change",l),r(s.matches),()=>s.removeEventListener("change",l)},[e]),t}const ku=Xn.isNativePlatform(),DE=["Device","Data","Messaging"],LE=[{capability:"sms-read",label:"Read SMS",group:"Messaging"},{capability:"sms-send",label:"Send SMS",group:"Messaging"},{capability:"send-email",label:"Prompt Email to Send",group:"Messaging"},{capability:"notifications",label:"Notifications from Other Apps",group:"Data"},{capability:"contacts",label:"Manage Contacts",group:"Data"},{capability:"calendar",label:"Manage Calendar",group:"Data"},{capability:"location",label:"Get Location",group:"Device"},{capability:"dnd",label:"Set Ringer Mode",group:"Device"},{capability:"alarm",label:"Trigger Alarms",group:"Device"}];async function zE(){if(!ku||!mn)return new Set;try{const{capabilities:e}=await mn.getCapabilityStatus();return new Set(e.filter(t=>t.enabled).map(t=>t.name))}catch{return new Set}}function Bx({onChange:e,confirmDisable:t=!1}){const[r,s]=j.useState(new Map),[l,u]=j.useState(null),[c,f]=j.useState(null),d=j.useCallback(async()=>{if(!(!ku||!mn))try{const{capabilities:S}=await mn.getCapabilityStatus(),T=new Map;for(const z of S)T.set(z.name,z);s(T),e==null||e(new Set(S.filter(z=>z.enabled).map(z=>z.name)))}catch(S){console.error("Failed to read capability status:",S)}},[e]);j.useEffect(()=>{d()},[d]),j.useEffect(()=>{if(!ku)return;const S=fd.addListener("resume",d);return()=>{S.then(T=>T.remove())}},[d]);async function m(S,T){if(mn){u(S.capability);try{const z=await mn.setCapabilityEnabled({capability:S.capability,enabled:T});!z.enabled&&z.reason==="no-email-client"&&alert("No email app is installed on this device. Install one (e.g. Gmail) before enabling Send Email."),await d()}catch(z){console.error(`Failed to toggle ${S.capability}:`,z)}finally{u(null)}}}function y(S){const T=r.get(S.capability);if(T){if(T.enabled&&t){f(S);return}m(S,!T.enabled)}}function g(){const S=c;S&&(f(null),m(S,!1))}if(!ku)return null;const x=DE.map(S=>({group:S,items:LE.filter(T=>{const z=r.get(T.capability);return T.group===S&&(z==null?void 0:z.supported)})})).filter(S=>S.items.length>0);if(x.length===0)return b.jsx("div",{className:"capability-toggles-loading",children:b.jsx("span",{className:"spinner"})});const w=c&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>f(null),children:b.jsxs("div",{className:"confirm-modal",onClick:S=>S.stopPropagation(),children:[b.jsxs("h2",{className:"confirm-modal-title",children:["Disable ",c.label,"?"]}),b.jsxs("p",{className:"confirm-modal-message",children:["All hosts linked to this device will no longer be able to use ",c.label,"."]}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>f(null),children:"Cancel"}),b.jsx("button",{className:"btn btn-danger",onClick:g,children:"Disable"})]})]})}),document.body);return b.jsxs(b.Fragment,{children:[x.map(({group:S,items:T},z)=>b.jsx("div",{className:z>0?"drawer-toggle-group drawer-toggle-group-divided":"drawer-toggle-group",children:T.map(D=>{const q=r.get(D.capability),F=!!(q!=null&&q.enabled);return b.jsxs("label",{className:"drawer-toggle",children:[b.jsx("span",{className:"drawer-toggle-label",children:D.label}),b.jsx("button",{className:`toggle-switch ${F?"toggle-switch-on":""}`,onClick:()=>y(D),disabled:l===D.capability,role:"switch","aria-checked":F,children:b.jsx("span",{className:"toggle-switch-thumb"})})]},D.capability)})},S)),w]})}const F0=!!window.__PALMIER_SERVE__&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),UE=Xn.isNativePlatform();function $0({daemonVersion:e,linkedClientToken:t,request:r,onEnabledCapabilitiesChange:s,onLinkedClientTokenChange:l}){var ze;const{pairedHosts:u,removePairedHost:c,renamePairedHost:f}=Hi(),{activeHost:d}=si(),m=Mr(),y=cr(),x=$u().hostId??null,w=d.clientToken||null,S=!!w&&t===w,T=Ux("(min-width: 768px)"),[z,D]=j.useState(!1),[q,F]=j.useState(()=>Date.now());j.useEffect(()=>{const Ae=()=>F(Date.now()),Le=6e4-Date.now()%6e4,nt=setTimeout(()=>{Ae();const Ve=setInterval(Ae,6e4);nt._iv=Ve},Le);return()=>{const Ve=nt._iv;Ve&&clearInterval(Ve),clearTimeout(nt)}},[]);const oe=d.timezone?new Date(q).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",timeZone:d.timezone}):"";async function B(){if(!(!mn||!r||!w)){D(!0);try{const{token:Ae}=await mn.getFcmToken();if(!Ae)return;await r("device.link",{fcmToken:Ae}),l==null||l(w)}catch(Ae){console.error("Failed to make this the linked device:",Ae)}finally{D(!1)}}}async function L(Ae){const Le=Ae===x;if(Le&&r)try{await r("clients.revoke_self")}catch{}c(Ae),X(null),Le&&m("/",{replace:!0})}function W(Ae){const nt=y.pathname.endsWith("/tasks")?"/tasks":"";m(`/hosts/${encodeURIComponent(Ae)}${nt}`)}const[$,H]=j.useState(!1),[R,G]=j.useState(!1),[J,fe]=j.useState(null),[ie,ee]=j.useState(""),[P,X]=j.useState(null),[ae,pe]=j.useState(!1),M=j.useRef(null),E=j.useRef(null),K=j.useCallback(()=>{G(!0)},[]);function A(){R&&(H(!1),G(!1))}function be(){G(!1),H(!0)}function je(Ae,Le){fe(Ae),ee(Le)}function _e(){J&&ie.trim()&&f(J,ie.trim()),fe(null),ee("")}function Me(){fe(null),ee("")}j.useEffect(()=>{J&&E.current&&(E.current.focus(),E.current.select())},[J]),j.useEffect(()=>{if(!$||R)return;function Ae(Le){Le.key==="Escape"&&K()}return document.addEventListener("keydown",Ae),()=>{document.removeEventListener("keydown",Ae)}},[$,R,K]);const Ie=b.jsxs(b.Fragment,{children:[!T&&b.jsx("button",{className:"drawer-close-btn",onClick:K,"aria-label":"Close menu",children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:b.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),!F0&&u.length>0&&b.jsxs("div",{className:"drawer-section",children:[b.jsx("h3",{className:"drawer-section-label",children:"Hosts"}),b.jsx("div",{className:"host-picker-inline",children:b.jsx("div",{className:"host-picker-list",role:"listbox",children:u.map(Ae=>{const Le=Ae.hostId===x,nt=J===Ae.hostId,Ve=Ae.name||Ae.hostId.slice(0,8);return b.jsx("div",{className:"host-picker-item-wrapper",children:b.jsxs("div",{className:`host-picker-item ${Le?"host-picker-item-active":""}`,onClick:()=>{if(!nt&&!Le){if(!ps())return;W(Ae.hostId),T||K()}},role:"option","aria-selected":Le,children:[nt?b.jsx("input",{ref:E,className:"form-input host-picker-rename-input",type:"text",value:ie,onChange:Je=>ee(Je.target.value),onKeyDown:Je=>{Je.key==="Enter"&&_e(),Je.key==="Escape"&&Me()},onBlur:_e,onClick:Je=>Je.stopPropagation()}):b.jsx("span",{className:"host-picker-item-name",children:Ve}),b.jsxs("div",{className:"host-picker-item-actions",children:[Le&&!nt&&b.jsx("button",{className:"host-picker-edit-btn",onClick:Je=>{Je.stopPropagation(),je(Ae.hostId,Ve)},"aria-label":"Rename host",children:b.jsx("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",children:b.jsx("path",{d:"M9.5 1.5L11.5 3.5M1.5 11.5L2 9L9 2L11 4L4 11L1.5 11.5Z",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})}),!Le&&b.jsx("button",{className:"host-picker-delete-btn",onClick:Je=>{Je.stopPropagation(),X(Ae.hostId)},"aria-label":`Unpair ${Ve}`,children:b.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:b.jsx("path",{d:"M4 5.5V11C4 11.2761 4.22386 11.5 4.5 11.5H9.5C9.77614 11.5 10 11.2761 10 11V5.5M3 4H11M5.5 4V3C5.5 2.72386 5.72386 2.5 6 2.5H8C8.27614 2.5 8.5 2.72386 8.5 3V4M6.5 6.5V9.5M7.5 6.5V9.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]})},Ae.hostId)})})})]}),!F0&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-divider"}),b.jsx("div",{className:"drawer-section",children:b.jsx("button",{className:"btn btn-primary btn-full",onClick:()=>{ps()&&(m("/pair"),T||K())},children:"Add New Host"})})]}),UE&&r&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-divider"}),b.jsxs("div",{className:"drawer-section",children:[b.jsx("h3",{className:"drawer-section-label",children:"Device Capabilities"}),S?b.jsx(Bx,{onChange:s,confirmDisable:!0}):b.jsxs(b.Fragment,{children:[b.jsx("p",{className:"drawer-section-hint",children:"This device isn't the linked device for the host, so it can't provide capabilities (SMS, contacts, location, etc.)."}),b.jsx("button",{className:"btn btn-secondary btn-full",onClick:()=>{t&&t!==w?pe(!0):B()},disabled:z,children:z?"Linking…":"Link the host to this device"})]})]})]}),b.jsxs("div",{className:"drawer-footer",children:[d.timezone&&b.jsxs("div",{className:"drawer-host-time",children:["Host time: ",oe," · ",d.timezone]}),e&&b.jsxs("div",{className:"drawer-version",children:["Host version: v",e]}),b.jsxs("div",{className:"drawer-legal",children:[b.jsx("a",{href:"https://www.palmier.me/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms"}),b.jsx("span",{className:"drawer-legal-sep",children:"·"}),b.jsx("a",{href:"https://www.palmier.me/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy"})]})]})]}),ke=!!P&&P===x&&S,Ge=P&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>X(null),children:b.jsxs("div",{className:"confirm-modal",onClick:Ae=>Ae.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Remove host?"}),b.jsxs("p",{className:"confirm-modal-message",children:['"',((ze=u.find(Ae=>Ae.hostId===P))==null?void 0:ze.name)||P.slice(0,8),'" will be ',ke?"removed and unlinked":"removed",".",ke&&b.jsx(b.Fragment,{children:" This device is currently linked to the host — unlinking will revoke its access to all device capabilities (SMS, contacts, location, etc.) until another device is linked."})]}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>X(null),children:"Cancel"}),b.jsx("button",{className:"btn btn-danger",onClick:()=>L(P),children:"Remove"})]})]})}),document.body),Ft=ae&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:()=>pe(!1),children:b.jsxs("div",{className:"confirm-modal",onClick:Ae=>Ae.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Link the host to this device?"}),b.jsx("p",{className:"confirm-modal-message",children:"Another device is already linked to this host. Only one device can be linked to the host — switching will disable those capabilities on the currently linked device."}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:()=>pe(!1),children:"Cancel"}),b.jsx("button",{className:"btn btn-primary",onClick:()=>{pe(!1),B()},children:"Link"})]})]})}),document.body);return T?b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"drawer-panel drawer-panel-desktop",ref:M,children:Ie}),Ge,Ft]}):b.jsxs(b.Fragment,{children:[b.jsx("button",{className:"hamburger-btn",onClick:be,"aria-label":"Open menu",children:b.jsx("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:b.jsx("path",{d:"M3 5H17M3 10H17M3 15H17",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),$&&ds.createPortal(b.jsx("div",{className:`drawer-overlay ${R?"drawer-overlay-closing":""}`,onClick:K,onAnimationEnd:A,children:b.jsx("div",{className:`drawer-panel ${R?"drawer-panel-closing":""}`,ref:M,onClick:Ae=>Ae.stopPropagation(),children:Ie})}),document.body),Ge,Ft]})}const BE=Xn.isNativePlatform(),Fd={width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};function PE(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("rect",{x:"3",y:"6",width:"5",height:"12",rx:"1"}),b.jsx("rect",{x:"16",y:"6",width:"5",height:"12",rx:"1"}),b.jsx("line",{x1:"8",y1:"12",x2:"16",y2:"12"})]})}function Y0(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("circle",{cx:"12",cy:"12",r:"10"}),b.jsx("line",{x1:"2",y1:"12",x2:"22",y2:"12"}),b.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"})]})}function qE(){return b.jsxs("svg",{...Fd,"aria-hidden":"true",children:[b.jsx("path",{d:"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),b.jsx("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),b.jsx("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})]})}function HE(){const{mode:e}=si(),[t,r]=j.useState(!1),s=j.useRef(null);if(j.useEffect(()=>{if(!t)return;function f(m){var y;(y=s.current)!=null&&y.contains(m.target)||r(!1)}document.addEventListener("pointerdown",f);const d=window.setTimeout(()=>r(!1),3e3);return()=>{document.removeEventListener("pointerdown",f),clearTimeout(d)}},[t]),e==="direct")return null;let l,u,c;switch(e){case"lan":l=b.jsx(PE,{}),u="Connected via LAN",c="lan";break;case"nats":l=b.jsx(Y0,{}),u=BE?"Connected via relay":"Connected",c="relay";break;case"disconnected":l=b.jsx(qE,{}),u="Disconnected",c="disconnected";break;case"connecting":default:l=b.jsx(Y0,{}),u="Connecting…",c="connecting";break}return b.jsxs("div",{ref:s,className:`conn-status conn-status--${c}`,children:[b.jsx("button",{type:"button",className:"conn-status-btn","aria-label":u,onClick:()=>r(f=>!f),children:l}),b.jsx("div",{className:`conn-status-popover ${t?"conn-status-popover--open":""}`,role:"tooltip",children:u})]})}function G0(e,t){var s;const r=e.map(l=>l.key);return t&&r.includes(t)?t:((s=e[0])==null?void 0:s.key)??""}function IE({agents:e,hostPlatform:t,onStarted:r}){const{request:s,activeHost:l}=si(),{setHostLastAgent:u}=Hi(),[c,f]=j.useState(""),[d,m]=j.useState(()=>G0(e,l.lastAgent)),[y,g]=j.useState(!1),[x,w]=j.useState(!1),[S,T]=j.useState(null);j.useEffect(()=>{e.length&&(e.find(L=>L.key===d)||m(G0(e,l.lastAgent)))},[e,d,l.lastAgent]),j.useEffect(()=>{const L=c.trim().length>0;return Oh(L?"Your session draft will be lost. Continue?":null),()=>Oh(null)},[c]);const z=e.find(L=>L.key===d),D=!!(z!=null&&z.supportsYolo);j.useEffect(()=>{!D&&y&&g(!1)},[D,y]);const q=!!c.trim()&&!!d&&!x;function F(){return y?confirm(`Yolo mode is enabled. The agent will auto-approve all tool calls — it can read, write, delete files, run arbitrary commands, and access the network without asking for permission.
|
|
91
91
|
|
|
92
92
|
Are you sure you want to continue?`):!0}async function oe(){if(!(!q||!F())){w(!0),T(null);try{const L=await s("task.run_oneoff",{user_prompt:c,agent:d,yolo_mode:y,...t==="win32"?{foreground_mode:!0}:{}});if(L.error){T(L.error);return}u(l.hostId,d),f(""),Oh(null),L.task_id&&r(L.task_id,L.run_id)}catch(L){T(L instanceof Error?L.message:String(L))}finally{w(!1)}}}function B(L){L.key==="Enter"&&(L.metaKey||L.ctrlKey)&&(L.preventDefault(),oe())}return b.jsxs("div",{className:"session-composer",children:[S&&b.jsx("div",{className:"form-error",children:S}),b.jsx("textarea",{className:"session-composer-textarea",value:c,onChange:L=>f(L.target.value),onKeyDown:B,placeholder:"What can I do for you?",rows:3,disabled:x}),b.jsxs("div",{className:"session-composer-controls",children:[b.jsxs("div",{className:"agent-picker-section-inline",children:[b.jsx("span",{className:"agent-picker-label",children:"Run with"}),b.jsx("select",{className:"form-select form-select-sm",value:d,onChange:L=>m(L.target.value),disabled:x||!e.length,children:e.map(L=>b.jsx("option",{value:L.key,children:L.label},L.key))})]}),D&&b.jsxs("label",{className:"session-composer-yolo",children:[b.jsx("input",{type:"checkbox",checked:y,onChange:L=>g(L.target.checked),disabled:x}),"Yolo"]}),b.jsx("button",{className:"btn btn-primary chat-send-btn",onClick:oe,disabled:!q,"aria-label":"Run session",title:"Run session",children:x?b.jsx("span",{className:"btn-spinner"}):b.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),b.jsx("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})})]}),D&&y&&b.jsx("p",{className:"command-help-text",children:"The agent will auto-approve all tool calls without asking for permission."})]})}const fs=72,V0=6;function FE({id:e,revealedId:t,setRevealedId:r,onDelete:s,onClick:l,children:u,actionLabel:c="Delete",confirmMessage:f="Delete this item? This can't be undone."}){const d=t===e,[m,y]=j.useState(0),[g,x]=j.useState(!1),w=j.useRef(0),S=j.useRef(0),T=j.useRef(null),z=j.useRef(0),D=j.useRef(!1),q=j.useRef(null);j.useEffect(()=>{d||y(0)},[d]),j.useEffect(()=>{if(!d)return;function $(H){var R;(R=q.current)!=null&&R.contains(H.target)||r(null)}return document.addEventListener("pointerdown",$),()=>document.removeEventListener("pointerdown",$)},[d,r]);function F($){$.button!==void 0&&$.button!==0||(w.current=$.clientX,S.current=$.clientY,T.current=null,z.current=d?-fs:0,D.current=!1)}function oe($){if($.pointerType==="mouse"&&$.buttons===0)return;const H=$.clientX-w.current,R=$.clientY-S.current;if(T.current===null){if(Math.abs(H)<V0&&Math.abs(R)<V0)return;if(T.current=Math.abs(H)>Math.abs(R)?"x":"y",T.current==="x")try{$.currentTarget.setPointerCapture($.pointerId)}catch{}}if(T.current!=="x")return;D.current=!0,g||x(!0);let G=z.current+H;G>0&&(G=G/4),G<-fs&&(G=-fs+(G+fs)/4),y(G)}function B(){if(T.current!=="x"){x(!1);return}T.current=null,x(!1),m<=-36?(y(-fs),r(e)):(y(0),d&&r(null))}function L($){if(D.current){D.current=!1,$.stopPropagation(),$.preventDefault();return}d&&($.stopPropagation(),$.preventDefault(),r(null))}const W=m!==0?m:d?-fs:0;return b.jsxs("div",{ref:q,className:"swipe-row",children:[b.jsxs("button",{type:"button",className:"swipe-row-action",style:{width:fs},onClick:$=>{$.stopPropagation(),window.confirm(f)&&s()},tabIndex:d?0:-1,"aria-hidden":!d,"aria-label":c,children:[b.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[b.jsx("polyline",{points:"3 6 5 6 21 6"}),b.jsx("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),b.jsx("path",{d:"M10 11v6M14 11v6"}),b.jsx("path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"})]}),b.jsx("span",{className:"swipe-row-action-label",children:c})]}),b.jsx("div",{className:`swipe-row-content ${g?"swipe-row-content-dragging":""}`,style:{transform:`translateX(${W}px)`},onPointerDown:F,onPointerMove:oe,onPointerUp:B,onPointerCancel:B,onClickCapture:L,onClick:l,children:u})]})}const $E=10;function YE({connected:e,hostId:t,request:r,subscribeEvents:s,agents:l,hostPlatform:u,filterTaskId:c,onClearFilter:f}){const d=Id(),[m,y]=j.useState([]),[g,x]=j.useState(0),[w,S]=j.useState(!1),[T,z]=j.useState(!1),[D,q]=j.useState(null),F=Mr();async function oe(P){const X=`${P.task_id}:${P.run_id}`;y(ae=>ae.filter(pe=>`${pe.task_id}:${pe.run_id}`!==X)),x(ae=>Math.max(0,ae-1)),q(null);try{await r("taskrun.delete",{task_id:P.task_id,run_id:P.run_id})}catch(ae){console.error("Failed to delete run:",ae),y(pe=>[P,...pe]),x(pe=>pe+1)}}const B=j.useRef(null),L=j.useCallback(P=>{const X={offset:P,limit:$E};return c&&(X.task_id=c),X},[c]),W=j.useCallback(async(P,X)=>{if(e){X?z(!0):S(!0);try{const ae=await r("taskrun.list",L(P)),pe=ae.entries??[];x(ae.total??0),y(X?M=>{const E=new Set(M.map(A=>`${A.task_id}:${A.run_id}`)),K=pe.filter(A=>!E.has(`${A.task_id}:${A.run_id}`));return[...M,...K]}:pe)}catch(ae){ae instanceof Error&&ae.message==="Not connected"||console.error("Failed to load runs:",ae)}finally{S(!1),z(!1)}}},[e,r,L]);j.useEffect(()=>{e?(y([]),x(0),W(0,!1)):(y([]),x(0))},[e,t,W,c]);const $=zx({onRefresh:()=>W(0,!1),enabled:e});j.useEffect(()=>!e||!t?void 0:s(t,async X=>{try{const ae=JSON.parse(new TextDecoder().decode(X.data));if(ae.event_type==="running-state"&&ae.running_state&&["monitoring","started","finished","failed","aborted"].includes(ae.running_state)){const pe=await r("taskrun.list",L(0)),M=pe.entries??[];x(pe.total??0),y(E=>{const K=new Map(M.map(_e=>[`${_e.task_id}:${_e.run_id}`,_e])),A=E.map(_e=>{const Me=`${_e.task_id}:${_e.run_id}`;return K.get(Me)??_e}),be=new Set(A.map(_e=>`${_e.task_id}:${_e.run_id}`));return[...M.filter(_e=>!be.has(`${_e.task_id}:${_e.run_id}`)),...A]})}}catch{}}),[e,t,s,r]),j.useEffect(()=>{const P=B.current;if(!P)return;const X=new IntersectionObserver(ae=>{ae[0].isIntersecting&&!T&&m.length<g&&W(m.length,!0)},{threshold:.1});return X.observe(P),()=>X.disconnect()},[m.length,g,T,W]);function H(P,X){if(!P||!X)return"";const ae=Math.round((X-P)/1e3);if(ae<60)return`${ae}s`;const pe=Math.floor(ae/60),M=ae%60;return`${pe}m ${M}s`}const R={monitoring:"Monitoring",started:"Running",finished:"Finished",failed:"Failed",aborted:"Aborted"};function G(P,X){ps()&&t&&F(`/hosts/${encodeURIComponent(t)}/runs/${encodeURIComponent(P)}/${encodeURIComponent(X)}`)}const J=!c&&b.jsx(IE,{agents:l,hostPlatform:u,onStarted:(P,X)=>{if(!t)return;const ae=`/hosts/${encodeURIComponent(t)}/runs/${encodeURIComponent(P)}`;F(X?`${ae}/${encodeURIComponent(X)}`:ae)}}),fe=b.jsx(Lx,{pullDistance:$.pullDistance,refreshing:$.refreshing,threshold:$.threshold}),ie=c&&f&&b.jsx("div",{style:{marginBottom:"var(--space-sm)"},children:b.jsxs("span",{className:"sessions-filter-chip",children:["Filtered by task",b.jsx("button",{onClick:f,"aria-label":"Clear filter",children:"×"})]})});function ee(P){if(P==="failed")return"var(--color-error)";if(P==="aborted")return"var(--color-warning, #d97706)"}return w&&m.length===0&&e?b.jsxs(b.Fragment,{children:[fe,J,b.jsx("div",{className:"task-list",children:[0,1,2].map(P=>b.jsxs("div",{className:"task-card",style:{pointerEvents:"none"},children:[b.jsx("div",{className:"task-card-header",children:b.jsx("div",{className:"task-card-title-row",children:b.jsx("div",{className:"skeleton-line",style:{width:`${70+P*10}%`}})})}),b.jsx("div",{className:"task-card-meta",children:b.jsx("div",{className:"skeleton-line",style:{width:"45%"}})})]},P))})]}):!e||w&&m.length===0?b.jsxs(b.Fragment,{children:[fe,J,b.jsx("div",{className:"sessions-view",children:b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"Sessions"}),b.jsx("p",{className:"empty-state-hint",children:"Your sessions will appear here"})]})})]}):m.length===0?b.jsxs(b.Fragment,{children:[fe,J,ie,b.jsx("div",{className:"sessions-view",children:b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"No sessions yet"}),b.jsx("p",{className:"empty-state-hint",children:c?"This task hasn't been executed yet. Run it from the task menu or wait for its next trigger.":"Your sessions will appear here."})]})})]}):b.jsxs(b.Fragment,{children:[fe,J,ie,b.jsxs("div",{className:"task-list",children:[m.map((P,X)=>{const ae=`${P.task_id}:${P.run_id}`;return b.jsx(FE,{id:ae,revealedId:D,setRevealedId:q,onDelete:()=>oe(P),confirmMessage:"Delete this session? Its run history will be removed from the host.",onClick:()=>!P.error&&G(P.task_id,P.run_id),children:b.jsxs("div",{className:"sessions-card",children:[b.jsxs("div",{className:"sessions-card-body",children:[b.jsx("h3",{className:"sessions-card-name",children:P.task_name||P.task_id}),b.jsxs("div",{className:"sessions-card-meta",children:[P.running_state==="started"?b.jsx("span",{className:"status-spinner","aria-label":"Running",children:b.jsx("span",{})}):b.jsx("span",{style:{color:ee(P.running_state)},children:R[P.running_state??""]??P.running_state}),P.end_time&&b.jsx("span",{children:d(P.end_time)}),P.start_time&&P.end_time&&b.jsx("span",{style:{color:"var(--color-muted)"},children:H(P.start_time,P.end_time)}),P.error&&b.jsx("span",{style:{color:"var(--color-muted)"},children:P.error})]})]}),b.jsx("span",{className:"sessions-card-chevron",children:"›"})]})},`${ae}-${X}`)}),b.jsx("div",{ref:B,style:{height:1}}),T&&b.jsx("div",{className:"loading-state",style:{padding:"var(--space-md)"},children:b.jsx("div",{className:"spinner"})})]})]})}function GE(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const VE=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,JE=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,XE={};function J0(e,t){return(XE.jsx?JE:VE).test(e)}const KE=/[ \t\n\f\r]/g;function QE(e){return typeof e=="object"?e.type==="text"?X0(e.value):!1:X0(e)}function X0(e){return e.replace(KE,"")===""}class Gl{constructor(t,r,s){this.normal=r,this.property=t,s&&(this.space=s)}}Gl.prototype.normal={};Gl.prototype.property={};Gl.prototype.space=void 0;function Px(e,t){const r={},s={};for(const l of e)Object.assign(r,l.property),Object.assign(s,l.normal);return new Gl(r,s,t)}function md(e){return e.toLowerCase()}class Mn{constructor(t,r){this.attribute=r,this.property=t}}Mn.prototype.attribute="";Mn.prototype.booleanish=!1;Mn.prototype.boolean=!1;Mn.prototype.commaOrSpaceSeparated=!1;Mn.prototype.commaSeparated=!1;Mn.prototype.defined=!1;Mn.prototype.mustUseProperty=!1;Mn.prototype.number=!1;Mn.prototype.overloadedBoolean=!1;Mn.prototype.property="";Mn.prototype.spaceSeparated=!1;Mn.prototype.space=void 0;let ZE=0;const Ze=bs(),Zt=bs(),pd=bs(),ve=bs(),Ot=bs(),da=bs(),In=bs();function bs(){return 2**++ZE}const gd=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ze,booleanish:Zt,commaOrSpaceSeparated:In,commaSeparated:da,number:ve,overloadedBoolean:pd,spaceSeparated:Ot},Symbol.toStringTag,{value:"Module"})),Rh=Object.keys(gd);class $d extends Mn{constructor(t,r,s,l){let u=-1;if(super(t,r),K0(this,"space",l),typeof s=="number")for(;++u<Rh.length;){const c=Rh[u];K0(this,Rh[u],(s&gd[c])===gd[c])}}}$d.prototype.defined=!0;function K0(e,t,r){r&&(e[t]=r)}function _a(e){const t={},r={};for(const[s,l]of Object.entries(e.properties)){const u=new $d(s,e.transform(e.attributes||{},s),l,e.space);e.mustUseProperty&&e.mustUseProperty.includes(s)&&(u.mustUseProperty=!0),t[s]=u,r[md(s)]=s,r[md(u.attribute)]=s}return new Gl(t,r,e.space)}const qx=_a({properties:{ariaActiveDescendant:null,ariaAtomic:Zt,ariaAutoComplete:null,ariaBusy:Zt,ariaChecked:Zt,ariaColCount:ve,ariaColIndex:ve,ariaColSpan:ve,ariaControls:Ot,ariaCurrent:null,ariaDescribedBy:Ot,ariaDetails:null,ariaDisabled:Zt,ariaDropEffect:Ot,ariaErrorMessage:null,ariaExpanded:Zt,ariaFlowTo:Ot,ariaGrabbed:Zt,ariaHasPopup:null,ariaHidden:Zt,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Ot,ariaLevel:ve,ariaLive:null,ariaModal:Zt,ariaMultiLine:Zt,ariaMultiSelectable:Zt,ariaOrientation:null,ariaOwns:Ot,ariaPlaceholder:null,ariaPosInSet:ve,ariaPressed:Zt,ariaReadOnly:Zt,ariaRelevant:null,ariaRequired:Zt,ariaRoleDescription:Ot,ariaRowCount:ve,ariaRowIndex:ve,ariaRowSpan:ve,ariaSelected:Zt,ariaSetSize:ve,ariaSort:null,ariaValueMax:ve,ariaValueMin:ve,ariaValueNow:ve,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function Hx(e,t){return t in e?e[t]:t}function Ix(e,t){return Hx(e,t.toLowerCase())}const WE=_a({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:da,acceptCharset:Ot,accessKey:Ot,action:null,allow:null,allowFullScreen:Ze,allowPaymentRequest:Ze,allowUserMedia:Ze,alt:null,as:null,async:Ze,autoCapitalize:null,autoComplete:Ot,autoFocus:Ze,autoPlay:Ze,blocking:Ot,capture:null,charSet:null,checked:Ze,cite:null,className:Ot,cols:ve,colSpan:null,content:null,contentEditable:Zt,controls:Ze,controlsList:Ot,coords:ve|da,crossOrigin:null,data:null,dateTime:null,decoding:null,default:Ze,defer:Ze,dir:null,dirName:null,disabled:Ze,download:pd,draggable:Zt,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:Ze,formTarget:null,headers:Ot,height:ve,hidden:pd,high:ve,href:null,hrefLang:null,htmlFor:Ot,httpEquiv:Ot,id:null,imageSizes:null,imageSrcSet:null,inert:Ze,inputMode:null,integrity:null,is:null,isMap:Ze,itemId:null,itemProp:Ot,itemRef:Ot,itemScope:Ze,itemType:Ot,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:Ze,low:ve,manifest:null,max:null,maxLength:ve,media:null,method:null,min:null,minLength:ve,multiple:Ze,muted:Ze,name:null,nonce:null,noModule:Ze,noValidate:Ze,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:Ze,optimum:ve,pattern:null,ping:Ot,placeholder:null,playsInline:Ze,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:Ze,referrerPolicy:null,rel:Ot,required:Ze,reversed:Ze,rows:ve,rowSpan:ve,sandbox:Ot,scope:null,scoped:Ze,seamless:Ze,selected:Ze,shadowRootClonable:Ze,shadowRootDelegatesFocus:Ze,shadowRootMode:null,shape:null,size:ve,sizes:null,slot:null,span:ve,spellCheck:Zt,src:null,srcDoc:null,srcLang:null,srcSet:null,start:ve,step:null,style:null,tabIndex:ve,target:null,title:null,translate:null,type:null,typeMustMatch:Ze,useMap:null,value:Zt,width:ve,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Ot,axis:null,background:null,bgColor:null,border:ve,borderColor:null,bottomMargin:ve,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:Ze,declare:Ze,event:null,face:null,frame:null,frameBorder:null,hSpace:ve,leftMargin:ve,link:null,longDesc:null,lowSrc:null,marginHeight:ve,marginWidth:ve,noResize:Ze,noHref:Ze,noShade:Ze,noWrap:Ze,object:null,profile:null,prompt:null,rev:null,rightMargin:ve,rules:null,scheme:null,scrolling:Zt,standby:null,summary:null,text:null,topMargin:ve,valueType:null,version:null,vAlign:null,vLink:null,vSpace:ve,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:Ze,disableRemotePlayback:Ze,prefix:null,property:null,results:ve,security:null,unselectable:null},space:"html",transform:Ix}),eC=_a({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:In,accentHeight:ve,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:ve,amplitude:ve,arabicForm:null,ascent:ve,attributeName:null,attributeType:null,azimuth:ve,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:ve,by:null,calcMode:null,capHeight:ve,className:Ot,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:ve,diffuseConstant:ve,direction:null,display:null,dur:null,divisor:ve,dominantBaseline:null,download:Ze,dx:null,dy:null,edgeMode:null,editable:null,elevation:ve,enableBackground:null,end:null,event:null,exponent:ve,externalResourcesRequired:null,fill:null,fillOpacity:ve,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:da,g2:da,glyphName:da,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:ve,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:ve,horizOriginX:ve,horizOriginY:ve,id:null,ideographic:ve,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:ve,k:ve,k1:ve,k2:ve,k3:ve,k4:ve,kernelMatrix:In,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:ve,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:ve,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:ve,overlineThickness:ve,paintOrder:null,panose1:null,path:null,pathLength:ve,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Ot,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:ve,pointsAtY:ve,pointsAtZ:ve,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:In,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:In,rev:In,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:In,requiredFeatures:In,requiredFonts:In,requiredFormats:In,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:ve,specularExponent:ve,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:ve,strikethroughThickness:ve,string:null,stroke:null,strokeDashArray:In,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:ve,strokeOpacity:ve,strokeWidth:null,style:null,surfaceScale:ve,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:In,tabIndex:ve,tableValues:null,target:null,targetX:ve,targetY:ve,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:In,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:ve,underlineThickness:ve,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:ve,values:null,vAlphabetic:ve,vMathematical:ve,vectorEffect:null,vHanging:ve,vIdeographic:ve,version:null,vertAdvY:ve,vertOriginX:ve,vertOriginY:ve,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:ve,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:Hx}),Fx=_a({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),$x=_a({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:Ix}),Yx=_a({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),tC={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},nC=/[A-Z]/g,Q0=/-[a-z]/g,rC=/^data[-\w.:]+$/i;function iC(e,t){const r=md(t);let s=t,l=Mn;if(r in e.normal)return e.property[e.normal[r]];if(r.length>4&&r.slice(0,4)==="data"&&rC.test(t)){if(t.charAt(4)==="-"){const u=t.slice(5).replace(Q0,aC);s="data"+u.charAt(0).toUpperCase()+u.slice(1)}else{const u=t.slice(4);if(!Q0.test(u)){let c=u.replace(nC,sC);c.charAt(0)!=="-"&&(c="-"+c),t="data"+c}}l=$d}return new l(s,t)}function sC(e){return"-"+e.toLowerCase()}function aC(e){return e.charAt(1).toUpperCase()}const lC=Px([qx,WE,Fx,$x,Yx],"html"),Yd=Px([qx,eC,Fx,$x,Yx],"svg");function oC(e){return e.join(" ").trim()}var ta={},Mh,Z0;function uC(){if(Z0)return Mh;Z0=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,s=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,l=/^:\s*/,u=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,f=/^\s+|\s+$/g,d=`
|
|
93
93
|
`,m="/",y="*",g="",x="comment",w="declaration";function S(z,D){if(typeof z!="string")throw new TypeError("First argument must be a string");if(!z)return[];D=D||{};var q=1,F=1;function oe(ie){var ee=ie.match(t);ee&&(q+=ee.length);var P=ie.lastIndexOf(d);F=~P?ie.length-P:F+ie.length}function B(){var ie={line:q,column:F};return function(ee){return ee.position=new L(ie),H(),ee}}function L(ie){this.start=ie,this.end={line:q,column:F},this.source=D.source}L.prototype.content=z;function W(ie){var ee=new Error(D.source+":"+q+":"+F+": "+ie);if(ee.reason=ie,ee.filename=D.source,ee.line=q,ee.column=F,ee.source=z,!D.silent)throw ee}function $(ie){var ee=ie.exec(z);if(ee){var P=ee[0];return oe(P),z=z.slice(P.length),ee}}function H(){$(r)}function R(ie){var ee;for(ie=ie||[];ee=G();)ee!==!1&&ie.push(ee);return ie}function G(){var ie=B();if(!(m!=z.charAt(0)||y!=z.charAt(1))){for(var ee=2;g!=z.charAt(ee)&&(y!=z.charAt(ee)||m!=z.charAt(ee+1));)++ee;if(ee+=2,g===z.charAt(ee-1))return W("End of comment missing");var P=z.slice(2,ee-2);return F+=2,oe(P),z=z.slice(ee),F+=2,ie({type:x,comment:P})}}function J(){var ie=B(),ee=$(s);if(ee){if(G(),!$(l))return W("property missing ':'");var P=$(u),X=ie({type:w,property:T(ee[0].replace(e,g)),value:P?T(P[0].replace(e,g)):g});return $(c),X}}function fe(){var ie=[];R(ie);for(var ee;ee=J();)ee!==!1&&(ie.push(ee),R(ie));return ie}return H(),fe()}function T(z){return z?z.replace(f,g):g}return Mh=S,Mh}var W0;function cC(){if(W0)return ta;W0=1;var e=ta&&ta.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(ta,"__esModule",{value:!0}),ta.default=r;const t=e(uC());function r(s,l){let u=null;if(!s||typeof s!="string")return u;const c=(0,t.default)(s),f=typeof l=="function";return c.forEach(d=>{if(d.type!=="declaration")return;const{property:m,value:y}=d;f?l(m,y,d):y&&(u=u||{},u[m]=y)}),u}return ta}var vl={},eb;function fC(){if(eb)return vl;eb=1,Object.defineProperty(vl,"__esModule",{value:!0}),vl.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,s=/^-(webkit|moz|ms|o|khtml)-/,l=/^-(ms)-/,u=function(m){return!m||r.test(m)||e.test(m)},c=function(m,y){return y.toUpperCase()},f=function(m,y){return"".concat(y,"-")},d=function(m,y){return y===void 0&&(y={}),u(m)?m:(m=m.toLowerCase(),y.reactCompat?m=m.replace(l,f):m=m.replace(s,f),m.replace(t,c))};return vl.camelCase=d,vl}var wl,tb;function hC(){if(tb)return wl;tb=1;var e=wl&&wl.__importDefault||function(l){return l&&l.__esModule?l:{default:l}},t=e(cC()),r=fC();function s(l,u){var c={};return!l||typeof l!="string"||(0,t.default)(l,function(f,d){f&&d&&(c[(0,r.camelCase)(f,u)]=d)}),c}return s.default=s,wl=s,wl}var dC=hC();const mC=Hb(dC),Gx=Vx("end"),Gd=Vx("start");function Vx(e){return t;function t(r){const s=r&&r.position&&r.position[e]||{};if(typeof s.line=="number"&&s.line>0&&typeof s.column=="number"&&s.column>0)return{line:s.line,column:s.column,offset:typeof s.offset=="number"&&s.offset>-1?s.offset:void 0}}}function pC(e){const t=Gd(e),r=Gx(e);if(t&&r)return{start:t,end:r}}function Ol(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?nb(e.position):"start"in e||"end"in e?nb(e):"line"in e||"column"in e?yd(e):""}function yd(e){return rb(e&&e.line)+":"+rb(e&&e.column)}function nb(e){return yd(e&&e.start)+"-"+yd(e&&e.end)}function rb(e){return e&&typeof e=="number"?e:1}class gn extends Error{constructor(t,r,s){super(),typeof r=="string"&&(s=r,r=void 0);let l="",u={},c=!1;if(r&&("line"in r&&"column"in r?u={place:r}:"start"in r&&"end"in r?u={place:r}:"type"in r?u={ancestors:[r],place:r.position}:u={...r}),typeof t=="string"?l=t:!u.cause&&t&&(c=!0,l=t.message,u.cause=t),!u.ruleId&&!u.source&&typeof s=="string"){const d=s.indexOf(":");d===-1?u.ruleId=s:(u.source=s.slice(0,d),u.ruleId=s.slice(d+1))}if(!u.place&&u.ancestors&&u.ancestors){const d=u.ancestors[u.ancestors.length-1];d&&(u.place=d.position)}const f=u.place&&"start"in u.place?u.place.start:u.place;this.ancestors=u.ancestors||void 0,this.cause=u.cause||void 0,this.column=f?f.column:void 0,this.fatal=void 0,this.file="",this.message=l,this.line=f?f.line:void 0,this.name=Ol(u.place)||"1:1",this.place=u.place||void 0,this.reason=this.message,this.ruleId=u.ruleId||void 0,this.source=u.source||void 0,this.stack=c&&u.cause&&typeof u.cause.stack=="string"?u.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}gn.prototype.file="";gn.prototype.name="";gn.prototype.reason="";gn.prototype.message="";gn.prototype.stack="";gn.prototype.column=void 0;gn.prototype.line=void 0;gn.prototype.ancestors=void 0;gn.prototype.cause=void 0;gn.prototype.fatal=void 0;gn.prototype.place=void 0;gn.prototype.ruleId=void 0;gn.prototype.source=void 0;const Vd={}.hasOwnProperty,gC=new Map,yC=/[A-Z]/g,bC=new Set(["table","tbody","thead","tfoot","tr"]),xC=new Set(["td","th"]),Jx="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function vC(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let s;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");s=jC(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");s=AC(r,t.jsx,t.jsxs)}const l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:s,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Yd:lC,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},u=Xx(l,e,void 0);return u&&typeof u!="string"?u:l.create(e,l.Fragment,{children:u||void 0},void 0)}function Xx(e,t,r){if(t.type==="element")return wC(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return SC(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return kC(e,t,r);if(t.type==="mdxjsEsm")return _C(e,t);if(t.type==="root")return EC(e,t,r);if(t.type==="text")return CC(e,t)}function wC(e,t,r){const s=e.schema;let l=s;t.tagName.toLowerCase()==="svg"&&s.space==="html"&&(l=Yd,e.schema=l),e.ancestors.push(t);const u=Qx(e,t.tagName,!1),c=TC(e,t);let f=Xd(e,t);return bC.has(t.tagName)&&(f=f.filter(function(d){return typeof d=="string"?!QE(d):!0})),Kx(e,c,u,t),Jd(c,f),e.ancestors.pop(),e.schema=s,e.create(t,u,c,r)}function SC(e,t){if(t.data&&t.data.estree&&e.evaluater){const s=t.data.estree.body[0];return s.type,e.evaluater.evaluateExpression(s.expression)}ql(e,t.position)}function _C(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);ql(e,t.position)}function kC(e,t,r){const s=e.schema;let l=s;t.name==="svg"&&s.space==="html"&&(l=Yd,e.schema=l),e.ancestors.push(t);const u=t.name===null?e.Fragment:Qx(e,t.name,!0),c=NC(e,t),f=Xd(e,t);return Kx(e,c,u,t),Jd(c,f),e.ancestors.pop(),e.schema=s,e.create(t,u,c,r)}function EC(e,t,r){const s={};return Jd(s,Xd(e,t)),e.create(t,e.Fragment,s,r)}function CC(e,t){return t.value}function Kx(e,t,r,s){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=s)}function Jd(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function AC(e,t,r){return s;function s(l,u,c,f){const m=Array.isArray(c.children)?r:t;return f?m(u,c,f):m(u,c)}}function jC(e,t){return r;function r(s,l,u,c){const f=Array.isArray(u.children),d=Gd(s);return t(l,u,c,f,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function TC(e,t){const r={};let s,l;for(l in t.properties)if(l!=="children"&&Vd.call(t.properties,l)){const u=OC(e,l,t.properties[l]);if(u){const[c,f]=u;e.tableCellAlignToStyle&&c==="align"&&typeof f=="string"&&xC.has(t.tagName)?s=f:r[c]=f}}if(s){const u=r.style||(r.style={});u[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=s}return r}function NC(e,t){const r={};for(const s of t.attributes)if(s.type==="mdxJsxExpressionAttribute")if(s.data&&s.data.estree&&e.evaluater){const u=s.data.estree.body[0];u.type;const c=u.expression;c.type;const f=c.properties[0];f.type,Object.assign(r,e.evaluater.evaluateExpression(f.argument))}else ql(e,t.position);else{const l=s.name;let u;if(s.value&&typeof s.value=="object")if(s.value.data&&s.value.data.estree&&e.evaluater){const f=s.value.data.estree.body[0];f.type,u=e.evaluater.evaluateExpression(f.expression)}else ql(e,t.position);else u=s.value===null?!0:s.value;r[l]=u}return r}function Xd(e,t){const r=[];let s=-1;const l=e.passKeys?new Map:gC;for(;++s<t.children.length;){const u=t.children[s];let c;if(e.passKeys){const d=u.type==="element"?u.tagName:u.type==="mdxJsxFlowElement"||u.type==="mdxJsxTextElement"?u.name:void 0;if(d){const m=l.get(d)||0;c=d+"-"+m,l.set(d,m+1)}}const f=Xx(e,u,c);f!==void 0&&r.push(f)}return r}function OC(e,t,r){const s=iC(e.schema,t);if(!(r==null||typeof r=="number"&&Number.isNaN(r))){if(Array.isArray(r)&&(r=s.commaSeparated?GE(r):oC(r)),s.property==="style"){let l=typeof r=="object"?r:RC(e,String(r));return e.stylePropertyNameCase==="css"&&(l=MC(l)),["style",l]}return[e.elementAttributeNameCase==="react"&&s.space?tC[s.property]||s.property:s.attribute,r]}}function RC(e,t){try{return mC(t,{reactCompat:!0})}catch(r){if(e.ignoreInvalidStyle)return{};const s=r,l=new gn("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:s,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw l.file=e.filePath||void 0,l.url=Jx+"#cannot-parse-style-attribute",l}}function Qx(e,t,r){let s;if(!r)s={type:"Literal",value:t};else if(t.includes(".")){const l=t.split(".");let u=-1,c;for(;++u<l.length;){const f=J0(l[u])?{type:"Identifier",name:l[u]}:{type:"Literal",value:l[u]};c=c?{type:"MemberExpression",object:c,property:f,computed:!!(u&&f.type==="Literal"),optional:!1}:f}s=c}else s=J0(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(s.type==="Literal"){const l=s.value;return Vd.call(e.components,l)?e.components[l]:l}if(e.evaluater)return e.evaluater.evaluateExpression(s);ql(e)}function ql(e,t){const r=new gn("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=Jx+"#cannot-handle-mdx-estrees-without-createevaluater",r}function MC(e){const t={};let r;for(r in e)Vd.call(e,r)&&(t[DC(r)]=e[r]);return t}function DC(e){let t=e.replace(yC,LC);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function LC(e){return"-"+e.toLowerCase()}const Dh={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},zC={};function Kd(e,t){const r=zC,s=typeof r.includeImageAlt=="boolean"?r.includeImageAlt:!0,l=typeof r.includeHtml=="boolean"?r.includeHtml:!0;return Zx(e,s,l)}function Zx(e,t,r){if(UC(e)){if("value"in e)return e.type==="html"&&!r?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return ib(e.children,t,r)}return Array.isArray(e)?ib(e,t,r):""}function ib(e,t,r){const s=[];let l=-1;for(;++l<e.length;)s[l]=Zx(e[l],t,r);return s.join("")}function UC(e){return!!(e&&typeof e=="object")}const sb=document.createElement("i");function Qd(e){const t="&"+e+";";sb.innerHTML=t;const r=sb.textContent;return r.charCodeAt(r.length-1)===59&&e!=="semi"||r===t?!1:r}function Vn(e,t,r,s){const l=e.length;let u=0,c;if(t<0?t=-t>l?0:l+t:t=t>l?l:t,r=r>0?r:0,s.length<1e4)c=Array.from(s),c.unshift(t,r),e.splice(...c);else for(r&&e.splice(t,r);u<s.length;)c=s.slice(u,u+1e4),c.unshift(t,0),e.splice(...c),u+=1e4,t+=1e4}function ur(e,t){return e.length>0?(Vn(e,e.length,0,t),e):t}const ab={}.hasOwnProperty;function Wx(e){const t={};let r=-1;for(;++r<e.length;)BC(t,e[r]);return t}function BC(e,t){let r;for(r in t){const l=(ab.call(e,r)?e[r]:void 0)||(e[r]={}),u=t[r];let c;if(u)for(c in u){ab.call(l,c)||(l[c]=[]);const f=u[c];PC(l[c],Array.isArray(f)?f:f?[f]:[])}}}function PC(e,t){let r=-1;const s=[];for(;++r<t.length;)(t[r].add==="after"?e:s).push(t[r]);Vn(e,0,0,s)}function e1(e,t){const r=Number.parseInt(e,t);return r<9||r===11||r>13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function wr(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const kn=Fi(/[A-Za-z]/),pn=Fi(/[\dA-Za-z]/),qC=Fi(/[#-'*+\--9=?A-Z^-~]/);function Bu(e){return e!==null&&(e<32||e===127)}const bd=Fi(/\d/),HC=Fi(/[\dA-Fa-f]/),IC=Fi(/[!-/:-@[-`{-~]/);function Pe(e){return e!==null&&e<-2}function Nt(e){return e!==null&&(e<0||e===32)}function st(e){return e===-2||e===-1||e===32}const Qu=Fi(new RegExp("\\p{P}|\\p{S}","u")),gs=Fi(/\s/);function Fi(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function ka(e){const t=[];let r=-1,s=0,l=0;for(;++r<e.length;){const u=e.charCodeAt(r);let c="";if(u===37&&pn(e.charCodeAt(r+1))&&pn(e.charCodeAt(r+2)))l=2;else if(u<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(u))||(c=String.fromCharCode(u));else if(u>55295&&u<57344){const f=e.charCodeAt(r+1);u<56320&&f>56319&&f<57344?(c=String.fromCharCode(u,f),l=1):c="�"}else c=String.fromCharCode(u);c&&(t.push(e.slice(s,r),encodeURIComponent(c)),s=r+l+1,c=""),l&&(r+=l,l=0)}return t.join("")+e.slice(s)}function ct(e,t,r,s){const l=s?s-1:Number.POSITIVE_INFINITY;let u=0;return c;function c(d){return st(d)?(e.enter(r),f(d)):t(d)}function f(d){return st(d)&&u++<l?(e.consume(d),f):(e.exit(r),t(d))}}const FC={tokenize:$C};function $C(e){const t=e.attempt(this.parser.constructs.contentInitial,s,l);let r;return t;function s(f){if(f===null){e.consume(f);return}return e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),ct(e,t,"linePrefix")}function l(f){return e.enter("paragraph"),u(f)}function u(f){const d=e.enter("chunkText",{contentType:"text",previous:r});return r&&(r.next=d),r=d,c(f)}function c(f){if(f===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(f);return}return Pe(f)?(e.consume(f),e.exit("chunkText"),u):(e.consume(f),c)}}const YC={tokenize:GC},lb={tokenize:VC};function GC(e){const t=this,r=[];let s=0,l,u,c;return f;function f(F){if(s<r.length){const oe=r[s];return t.containerState=oe[1],e.attempt(oe[0].continuation,d,m)(F)}return m(F)}function d(F){if(s++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,l&&q();const oe=t.events.length;let B=oe,L;for(;B--;)if(t.events[B][0]==="exit"&&t.events[B][1].type==="chunkFlow"){L=t.events[B][1].end;break}D(s);let W=oe;for(;W<t.events.length;)t.events[W][1].end={...L},W++;return Vn(t.events,B+1,0,t.events.slice(oe)),t.events.length=W,m(F)}return f(F)}function m(F){if(s===r.length){if(!l)return x(F);if(l.currentConstruct&&l.currentConstruct.concrete)return S(F);t.interrupt=!!(l.currentConstruct&&!l._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(lb,y,g)(F)}function y(F){return l&&q(),D(s),x(F)}function g(F){return t.parser.lazy[t.now().line]=s!==r.length,c=t.now().offset,S(F)}function x(F){return t.containerState={},e.attempt(lb,w,S)(F)}function w(F){return s++,r.push([t.currentConstruct,t.containerState]),x(F)}function S(F){if(F===null){l&&q(),D(0),e.consume(F);return}return l=l||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:l,contentType:"flow",previous:u}),T(F)}function T(F){if(F===null){z(e.exit("chunkFlow"),!0),D(0),e.consume(F);return}return Pe(F)?(e.consume(F),z(e.exit("chunkFlow")),s=0,t.interrupt=void 0,f):(e.consume(F),T)}function z(F,oe){const B=t.sliceStream(F);if(oe&&B.push(null),F.previous=u,u&&(u.next=F),u=F,l.defineSkip(F.start),l.write(B),t.parser.lazy[F.start.line]){let L=l.events.length;for(;L--;)if(l.events[L][1].start.offset<c&&(!l.events[L][1].end||l.events[L][1].end.offset>c))return;const W=t.events.length;let $=W,H,R;for(;$--;)if(t.events[$][0]==="exit"&&t.events[$][1].type==="chunkFlow"){if(H){R=t.events[$][1].end;break}H=!0}for(D(s),L=W;L<t.events.length;)t.events[L][1].end={...R},L++;Vn(t.events,$+1,0,t.events.slice(W)),t.events.length=L}}function D(F){let oe=r.length;for(;oe-- >F;){const B=r[oe];t.containerState=B[1],B[0].exit.call(t,e)}r.length=F}function q(){l.write([null]),u=void 0,l=void 0,t.containerState._closeFlow=void 0}}function VC(e,t,r){return ct(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function ba(e){if(e===null||Nt(e)||gs(e))return 1;if(Qu(e))return 2}function Zu(e,t,r){const s=[];let l=-1;for(;++l<e.length;){const u=e[l].resolveAll;u&&!s.includes(u)&&(t=u(t,r),s.push(u))}return t}const xd={name:"attention",resolveAll:JC,tokenize:XC};function JC(e,t){let r=-1,s,l,u,c,f,d,m,y;for(;++r<e.length;)if(e[r][0]==="enter"&&e[r][1].type==="attentionSequence"&&e[r][1]._close){for(s=r;s--;)if(e[s][0]==="exit"&&e[s][1].type==="attentionSequence"&&e[s][1]._open&&t.sliceSerialize(e[s][1]).charCodeAt(0)===t.sliceSerialize(e[r][1]).charCodeAt(0)){if((e[s][1]._close||e[r][1]._open)&&(e[r][1].end.offset-e[r][1].start.offset)%3&&!((e[s][1].end.offset-e[s][1].start.offset+e[r][1].end.offset-e[r][1].start.offset)%3))continue;d=e[s][1].end.offset-e[s][1].start.offset>1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const g={...e[s][1].end},x={...e[r][1].start};ob(g,-d),ob(x,d),c={type:d>1?"strongSequence":"emphasisSequence",start:g,end:{...e[s][1].end}},f={type:d>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:x},u={type:d>1?"strongText":"emphasisText",start:{...e[s][1].end},end:{...e[r][1].start}},l={type:d>1?"strong":"emphasis",start:{...c.start},end:{...f.end}},e[s][1].end={...c.start},e[r][1].start={...f.end},m=[],e[s][1].end.offset-e[s][1].start.offset&&(m=ur(m,[["enter",e[s][1],t],["exit",e[s][1],t]])),m=ur(m,[["enter",l,t],["enter",c,t],["exit",c,t],["enter",u,t]]),m=ur(m,Zu(t.parser.constructs.insideSpan.null,e.slice(s+1,r),t)),m=ur(m,[["exit",u,t],["enter",f,t],["exit",f,t],["exit",l,t]]),e[r][1].end.offset-e[r][1].start.offset?(y=2,m=ur(m,[["enter",e[r][1],t],["exit",e[r][1],t]])):y=0,Vn(e,s-1,r-s+3,m),r=s+m.length-y-2;break}}for(r=-1;++r<e.length;)e[r][1].type==="attentionSequence"&&(e[r][1].type="data");return e}function XC(e,t){const r=this.parser.constructs.attentionMarkers.null,s=this.previous,l=ba(s);let u;return c;function c(d){return u=d,e.enter("attentionSequence"),f(d)}function f(d){if(d===u)return e.consume(d),f;const m=e.exit("attentionSequence"),y=ba(d),g=!y||y===2&&l||r.includes(d),x=!l||l===2&&y||r.includes(s);return m._open=!!(u===42?g:g&&(l||!x)),m._close=!!(u===42?x:x&&(y||!g)),t(d)}}function ob(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const KC={name:"autolink",tokenize:QC};function QC(e,t,r){let s=0;return l;function l(w){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(w),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),u}function u(w){return kn(w)?(e.consume(w),c):w===64?r(w):m(w)}function c(w){return w===43||w===45||w===46||pn(w)?(s=1,f(w)):m(w)}function f(w){return w===58?(e.consume(w),s=0,d):(w===43||w===45||w===46||pn(w))&&s++<32?(e.consume(w),f):(s=0,m(w))}function d(w){return w===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(w),e.exit("autolinkMarker"),e.exit("autolink"),t):w===null||w===32||w===60||Bu(w)?r(w):(e.consume(w),d)}function m(w){return w===64?(e.consume(w),y):qC(w)?(e.consume(w),m):r(w)}function y(w){return pn(w)?g(w):r(w)}function g(w){return w===46?(e.consume(w),s=0,y):w===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(w),e.exit("autolinkMarker"),e.exit("autolink"),t):x(w)}function x(w){if((w===45||pn(w))&&s++<63){const S=w===45?x:g;return e.consume(w),S}return r(w)}}const Vl={partial:!0,tokenize:ZC};function ZC(e,t,r){return s;function s(u){return st(u)?ct(e,l,"linePrefix")(u):l(u)}function l(u){return u===null||Pe(u)?t(u):r(u)}}const t1={continuation:{tokenize:eA},exit:tA,name:"blockQuote",tokenize:WC};function WC(e,t,r){const s=this;return l;function l(c){if(c===62){const f=s.containerState;return f.open||(e.enter("blockQuote",{_container:!0}),f.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(c),e.exit("blockQuoteMarker"),u}return r(c)}function u(c){return st(c)?(e.enter("blockQuotePrefixWhitespace"),e.consume(c),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(c))}}function eA(e,t,r){const s=this;return l;function l(c){return st(c)?ct(e,u,"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c):u(c)}function u(c){return e.attempt(t1,t,r)(c)}}function tA(e){e.exit("blockQuote")}const n1={name:"characterEscape",tokenize:nA};function nA(e,t,r){return s;function s(u){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(u),e.exit("escapeMarker"),l}function l(u){return IC(u)?(e.enter("characterEscapeValue"),e.consume(u),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):r(u)}}const r1={name:"characterReference",tokenize:rA};function rA(e,t,r){const s=this;let l=0,u,c;return f;function f(g){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(g),e.exit("characterReferenceMarker"),d}function d(g){return g===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(g),e.exit("characterReferenceMarkerNumeric"),m):(e.enter("characterReferenceValue"),u=31,c=pn,y(g))}function m(g){return g===88||g===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(g),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),u=6,c=HC,y):(e.enter("characterReferenceValue"),u=7,c=bd,y(g))}function y(g){if(g===59&&l){const x=e.exit("characterReferenceValue");return c===pn&&!Qd(s.sliceSerialize(x))?r(g):(e.enter("characterReferenceMarker"),e.consume(g),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return c(g)&&l++<u?(e.consume(g),y):r(g)}}const ub={partial:!0,tokenize:sA},cb={concrete:!0,name:"codeFenced",tokenize:iA};function iA(e,t,r){const s=this,l={partial:!0,tokenize:B};let u=0,c=0,f;return d;function d(L){return m(L)}function m(L){const W=s.events[s.events.length-1];return u=W&&W[1].type==="linePrefix"?W[2].sliceSerialize(W[1],!0).length:0,f=L,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),y(L)}function y(L){return L===f?(c++,e.consume(L),y):c<3?r(L):(e.exit("codeFencedFenceSequence"),st(L)?ct(e,g,"whitespace")(L):g(L))}function g(L){return L===null||Pe(L)?(e.exit("codeFencedFence"),s.interrupt?t(L):e.check(ub,T,oe)(L)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),x(L))}function x(L){return L===null||Pe(L)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),g(L)):st(L)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),ct(e,w,"whitespace")(L)):L===96&&L===f?r(L):(e.consume(L),x)}function w(L){return L===null||Pe(L)?g(L):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),S(L))}function S(L){return L===null||Pe(L)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),g(L)):L===96&&L===f?r(L):(e.consume(L),S)}function T(L){return e.attempt(l,oe,z)(L)}function z(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),D}function D(L){return u>0&&st(L)?ct(e,q,"linePrefix",u+1)(L):q(L)}function q(L){return L===null||Pe(L)?e.check(ub,T,oe)(L):(e.enter("codeFlowValue"),F(L))}function F(L){return L===null||Pe(L)?(e.exit("codeFlowValue"),q(L)):(e.consume(L),F)}function oe(L){return e.exit("codeFenced"),t(L)}function B(L,W,$){let H=0;return R;function R(ee){return L.enter("lineEnding"),L.consume(ee),L.exit("lineEnding"),G}function G(ee){return L.enter("codeFencedFence"),st(ee)?ct(L,J,"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(ee):J(ee)}function J(ee){return ee===f?(L.enter("codeFencedFenceSequence"),fe(ee)):$(ee)}function fe(ee){return ee===f?(H++,L.consume(ee),fe):H>=c?(L.exit("codeFencedFenceSequence"),st(ee)?ct(L,ie,"whitespace")(ee):ie(ee)):$(ee)}function ie(ee){return ee===null||Pe(ee)?(L.exit("codeFencedFence"),W(ee)):$(ee)}}}function sA(e,t,r){const s=this;return l;function l(c){return c===null?r(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),u)}function u(c){return s.parser.lazy[s.now().line]?r(c):t(c)}}const Lh={name:"codeIndented",tokenize:lA},aA={partial:!0,tokenize:oA};function lA(e,t,r){const s=this;return l;function l(m){return e.enter("codeIndented"),ct(e,u,"linePrefix",5)(m)}function u(m){const y=s.events[s.events.length-1];return y&&y[1].type==="linePrefix"&&y[2].sliceSerialize(y[1],!0).length>=4?c(m):r(m)}function c(m){return m===null?d(m):Pe(m)?e.attempt(aA,c,d)(m):(e.enter("codeFlowValue"),f(m))}function f(m){return m===null||Pe(m)?(e.exit("codeFlowValue"),c(m)):(e.consume(m),f)}function d(m){return e.exit("codeIndented"),t(m)}}function oA(e,t,r){const s=this;return l;function l(c){return s.parser.lazy[s.now().line]?r(c):Pe(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),l):ct(e,u,"linePrefix",5)(c)}function u(c){const f=s.events[s.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?t(c):Pe(c)?l(c):r(c)}}const uA={name:"codeText",previous:fA,resolve:cA,tokenize:hA};function cA(e){let t=e.length-4,r=3,s,l;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(s=r;++s<t;)if(e[s][1].type==="codeTextData"){e[r][1].type="codeTextPadding",e[t][1].type="codeTextPadding",r+=2,t-=2;break}}for(s=r-1,t++;++s<=t;)l===void 0?s!==t&&e[s][1].type!=="lineEnding"&&(l=s):(s===t||e[s][1].type==="lineEnding")&&(e[l][1].type="codeTextData",s!==l+2&&(e[l][1].end=e[s-1][1].end,e.splice(l+2,s-l-2),t-=s-l-2,s=l+2),l=void 0);return e}function fA(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function hA(e,t,r){let s=0,l,u;return c;function c(g){return e.enter("codeText"),e.enter("codeTextSequence"),f(g)}function f(g){return g===96?(e.consume(g),s++,f):(e.exit("codeTextSequence"),d(g))}function d(g){return g===null?r(g):g===32?(e.enter("space"),e.consume(g),e.exit("space"),d):g===96?(u=e.enter("codeTextSequence"),l=0,y(g)):Pe(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),d):(e.enter("codeTextData"),m(g))}function m(g){return g===null||g===32||g===96||Pe(g)?(e.exit("codeTextData"),d(g)):(e.consume(g),m)}function y(g){return g===96?(e.consume(g),l++,y):l===s?(e.exit("codeTextSequence"),e.exit("codeText"),t(g)):(u.type="codeTextData",m(g))}}class dA{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,r){const s=r??Number.POSITIVE_INFINITY;return s<this.left.length?this.left.slice(t,s):t>this.left.length?this.right.slice(this.right.length-s+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-s+this.left.length).reverse())}splice(t,r,s){const l=r||0;this.setCursor(Math.trunc(t));const u=this.right.splice(this.right.length-l,Number.POSITIVE_INFINITY);return s&&Sl(this.left,s),u.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Sl(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Sl(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const r=this.left.splice(t,Number.POSITIVE_INFINITY);Sl(this.right,r.reverse())}else{const r=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);Sl(this.left,r.reverse())}}}function Sl(e,t){let r=0;if(t.length<1e4)e.push(...t);else for(;r<t.length;)e.push(...t.slice(r,r+1e4)),r+=1e4}function i1(e){const t={};let r=-1,s,l,u,c,f,d,m;const y=new dA(e);for(;++r<y.length;){for(;r in t;)r=t[r];if(s=y.get(r),r&&s[1].type==="chunkFlow"&&y.get(r-1)[1].type==="listItemPrefix"&&(d=s[1]._tokenizer.events,u=0,u<d.length&&d[u][1].type==="lineEndingBlank"&&(u+=2),u<d.length&&d[u][1].type==="content"))for(;++u<d.length&&d[u][1].type!=="content";)d[u][1].type==="chunkText"&&(d[u][1]._isInFirstContentOfListItem=!0,u++);if(s[0]==="enter")s[1].contentType&&(Object.assign(t,mA(y,r)),r=t[r],m=!0);else if(s[1]._container){for(u=r,l=void 0;u--;)if(c=y.get(u),c[1].type==="lineEnding"||c[1].type==="lineEndingBlank")c[0]==="enter"&&(l&&(y.get(l)[1].type="lineEndingBlank"),c[1].type="lineEnding",l=u);else if(!(c[1].type==="linePrefix"||c[1].type==="listItemIndent"))break;l&&(s[1].end={...y.get(l)[1].start},f=y.slice(l,r),f.unshift(s),y.splice(l,r-l+1,f))}}return Vn(e,0,Number.POSITIVE_INFINITY,y.slice(0)),!m}function mA(e,t){const r=e.get(t)[1],s=e.get(t)[2];let l=t-1;const u=[];let c=r._tokenizer;c||(c=s.parser[r.contentType](r.start),r._contentTypeTextTrailing&&(c._contentTypeTextTrailing=!0));const f=c.events,d=[],m={};let y,g,x=-1,w=r,S=0,T=0;const z=[T];for(;w;){for(;e.get(++l)[1]!==w;);u.push(l),w._tokenizer||(y=s.sliceStream(w),w.next||y.push(null),g&&c.defineSkip(w.start),w._isInFirstContentOfListItem&&(c._gfmTasklistFirstContentOfListItem=!0),c.write(y),w._isInFirstContentOfListItem&&(c._gfmTasklistFirstContentOfListItem=void 0)),g=w,w=w.next}for(w=r;++x<f.length;)f[x][0]==="exit"&&f[x-1][0]==="enter"&&f[x][1].type===f[x-1][1].type&&f[x][1].start.line!==f[x][1].end.line&&(T=x+1,z.push(T),w._tokenizer=void 0,w.previous=void 0,w=w.next);for(c.events=[],w?(w._tokenizer=void 0,w.previous=void 0):z.pop(),x=z.length;x--;){const D=f.slice(z[x],z[x+1]),q=u.pop();d.push([q,q+D.length-1]),e.splice(q,2,D)}for(d.reverse(),x=-1;++x<d.length;)m[S+d[x][0]]=S+d[x][1],S+=d[x][1]-d[x][0]-1;return m}const pA={resolve:yA,tokenize:bA},gA={partial:!0,tokenize:xA};function yA(e){return i1(e),e}function bA(e,t){let r;return s;function s(f){return e.enter("content"),r=e.enter("chunkContent",{contentType:"content"}),l(f)}function l(f){return f===null?u(f):Pe(f)?e.check(gA,c,u)(f):(e.consume(f),l)}function u(f){return e.exit("chunkContent"),e.exit("content"),t(f)}function c(f){return e.consume(f),e.exit("chunkContent"),r.next=e.enter("chunkContent",{contentType:"content",previous:r}),r=r.next,l}}function xA(e,t,r){const s=this;return l;function l(c){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),ct(e,u,"linePrefix")}function u(c){if(c===null||Pe(c))return r(c);const f=s.events[s.events.length-1];return!s.parser.constructs.disable.null.includes("codeIndented")&&f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?t(c):e.interrupt(s.parser.constructs.flow,r,t)(c)}}function s1(e,t,r,s,l,u,c,f,d){const m=d||Number.POSITIVE_INFINITY;let y=0;return g;function g(D){return D===60?(e.enter(s),e.enter(l),e.enter(u),e.consume(D),e.exit(u),x):D===null||D===32||D===41||Bu(D)?r(D):(e.enter(s),e.enter(c),e.enter(f),e.enter("chunkString",{contentType:"string"}),T(D))}function x(D){return D===62?(e.enter(u),e.consume(D),e.exit(u),e.exit(l),e.exit(s),t):(e.enter(f),e.enter("chunkString",{contentType:"string"}),w(D))}function w(D){return D===62?(e.exit("chunkString"),e.exit(f),x(D)):D===null||D===60||Pe(D)?r(D):(e.consume(D),D===92?S:w)}function S(D){return D===60||D===62||D===92?(e.consume(D),w):w(D)}function T(D){return!y&&(D===null||D===41||Nt(D))?(e.exit("chunkString"),e.exit(f),e.exit(c),e.exit(s),t(D)):y<m&&D===40?(e.consume(D),y++,T):D===41?(e.consume(D),y--,T):D===null||D===32||D===40||Bu(D)?r(D):(e.consume(D),D===92?z:T)}function z(D){return D===40||D===41||D===92?(e.consume(D),T):T(D)}}function a1(e,t,r,s,l,u){const c=this;let f=0,d;return m;function m(w){return e.enter(s),e.enter(l),e.consume(w),e.exit(l),e.enter(u),y}function y(w){return f>999||w===null||w===91||w===93&&!d||w===94&&!f&&"_hiddenFootnoteSupport"in c.parser.constructs?r(w):w===93?(e.exit(u),e.enter(l),e.consume(w),e.exit(l),e.exit(s),t):Pe(w)?(e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),y):(e.enter("chunkString",{contentType:"string"}),g(w))}function g(w){return w===null||w===91||w===93||Pe(w)||f++>999?(e.exit("chunkString"),y(w)):(e.consume(w),d||(d=!st(w)),w===92?x:g)}function x(w){return w===91||w===92||w===93?(e.consume(w),f++,g):g(w)}}function l1(e,t,r,s,l,u){let c;return f;function f(x){return x===34||x===39||x===40?(e.enter(s),e.enter(l),e.consume(x),e.exit(l),c=x===40?41:x,d):r(x)}function d(x){return x===c?(e.enter(l),e.consume(x),e.exit(l),e.exit(s),t):(e.enter(u),m(x))}function m(x){return x===c?(e.exit(u),d(c)):x===null?r(x):Pe(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),ct(e,m,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),y(x))}function y(x){return x===c||x===null||Pe(x)?(e.exit("chunkString"),m(x)):(e.consume(x),x===92?g:y)}function g(x){return x===c||x===92?(e.consume(x),y):y(x)}}function Rl(e,t){let r;return s;function s(l){return Pe(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),r=!0,s):st(l)?ct(e,s,r?"linePrefix":"lineSuffix")(l):t(l)}}const vA={name:"definition",tokenize:SA},wA={partial:!0,tokenize:_A};function SA(e,t,r){const s=this;let l;return u;function u(w){return e.enter("definition"),c(w)}function c(w){return a1.call(s,e,f,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(w)}function f(w){return l=wr(s.sliceSerialize(s.events[s.events.length-1][1]).slice(1,-1)),w===58?(e.enter("definitionMarker"),e.consume(w),e.exit("definitionMarker"),d):r(w)}function d(w){return Nt(w)?Rl(e,m)(w):m(w)}function m(w){return s1(e,y,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(w)}function y(w){return e.attempt(wA,g,g)(w)}function g(w){return st(w)?ct(e,x,"whitespace")(w):x(w)}function x(w){return w===null||Pe(w)?(e.exit("definition"),s.parser.defined.push(l),t(w)):r(w)}}function _A(e,t,r){return s;function s(f){return Nt(f)?Rl(e,l)(f):r(f)}function l(f){return l1(e,u,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function u(f){return st(f)?ct(e,c,"whitespace")(f):c(f)}function c(f){return f===null||Pe(f)?t(f):r(f)}}const kA={name:"hardBreakEscape",tokenize:EA};function EA(e,t,r){return s;function s(u){return e.enter("hardBreakEscape"),e.consume(u),l}function l(u){return Pe(u)?(e.exit("hardBreakEscape"),t(u)):r(u)}}const CA={name:"headingAtx",resolve:AA,tokenize:jA};function AA(e,t){let r=e.length-2,s=3,l,u;return e[s][1].type==="whitespace"&&(s+=2),r-2>s&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(s===r-1||r-4>s&&e[r-2][1].type==="whitespace")&&(r-=s+1===r?2:4),r>s&&(l={type:"atxHeadingText",start:e[s][1].start,end:e[r][1].end},u={type:"chunkText",start:e[s][1].start,end:e[r][1].end,contentType:"text"},Vn(e,s,r-s+1,[["enter",l,t],["enter",u,t],["exit",u,t],["exit",l,t]])),e}function jA(e,t,r){let s=0;return l;function l(y){return e.enter("atxHeading"),u(y)}function u(y){return e.enter("atxHeadingSequence"),c(y)}function c(y){return y===35&&s++<6?(e.consume(y),c):y===null||Nt(y)?(e.exit("atxHeadingSequence"),f(y)):r(y)}function f(y){return y===35?(e.enter("atxHeadingSequence"),d(y)):y===null||Pe(y)?(e.exit("atxHeading"),t(y)):st(y)?ct(e,f,"whitespace")(y):(e.enter("atxHeadingText"),m(y))}function d(y){return y===35?(e.consume(y),d):(e.exit("atxHeadingSequence"),f(y))}function m(y){return y===null||y===35||Nt(y)?(e.exit("atxHeadingText"),f(y)):(e.consume(y),m)}}const TA=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],fb=["pre","script","style","textarea"],NA={concrete:!0,name:"htmlFlow",resolveTo:MA,tokenize:DA},OA={partial:!0,tokenize:zA},RA={partial:!0,tokenize:LA};function MA(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function DA(e,t,r){const s=this;let l,u,c,f,d;return m;function m(A){return y(A)}function y(A){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(A),g}function g(A){return A===33?(e.consume(A),x):A===47?(e.consume(A),u=!0,T):A===63?(e.consume(A),l=3,s.interrupt?t:M):kn(A)?(e.consume(A),c=String.fromCharCode(A),z):r(A)}function x(A){return A===45?(e.consume(A),l=2,w):A===91?(e.consume(A),l=5,f=0,S):kn(A)?(e.consume(A),l=4,s.interrupt?t:M):r(A)}function w(A){return A===45?(e.consume(A),s.interrupt?t:M):r(A)}function S(A){const be="CDATA[";return A===be.charCodeAt(f++)?(e.consume(A),f===be.length?s.interrupt?t:J:S):r(A)}function T(A){return kn(A)?(e.consume(A),c=String.fromCharCode(A),z):r(A)}function z(A){if(A===null||A===47||A===62||Nt(A)){const be=A===47,je=c.toLowerCase();return!be&&!u&&fb.includes(je)?(l=1,s.interrupt?t(A):J(A)):TA.includes(c.toLowerCase())?(l=6,be?(e.consume(A),D):s.interrupt?t(A):J(A)):(l=7,s.interrupt&&!s.parser.lazy[s.now().line]?r(A):u?q(A):F(A))}return A===45||pn(A)?(e.consume(A),c+=String.fromCharCode(A),z):r(A)}function D(A){return A===62?(e.consume(A),s.interrupt?t:J):r(A)}function q(A){return st(A)?(e.consume(A),q):R(A)}function F(A){return A===47?(e.consume(A),R):A===58||A===95||kn(A)?(e.consume(A),oe):st(A)?(e.consume(A),F):R(A)}function oe(A){return A===45||A===46||A===58||A===95||pn(A)?(e.consume(A),oe):B(A)}function B(A){return A===61?(e.consume(A),L):st(A)?(e.consume(A),B):F(A)}function L(A){return A===null||A===60||A===61||A===62||A===96?r(A):A===34||A===39?(e.consume(A),d=A,W):st(A)?(e.consume(A),L):$(A)}function W(A){return A===d?(e.consume(A),d=null,H):A===null||Pe(A)?r(A):(e.consume(A),W)}function $(A){return A===null||A===34||A===39||A===47||A===60||A===61||A===62||A===96||Nt(A)?B(A):(e.consume(A),$)}function H(A){return A===47||A===62||st(A)?F(A):r(A)}function R(A){return A===62?(e.consume(A),G):r(A)}function G(A){return A===null||Pe(A)?J(A):st(A)?(e.consume(A),G):r(A)}function J(A){return A===45&&l===2?(e.consume(A),P):A===60&&l===1?(e.consume(A),X):A===62&&l===4?(e.consume(A),E):A===63&&l===3?(e.consume(A),M):A===93&&l===5?(e.consume(A),pe):Pe(A)&&(l===6||l===7)?(e.exit("htmlFlowData"),e.check(OA,K,fe)(A)):A===null||Pe(A)?(e.exit("htmlFlowData"),fe(A)):(e.consume(A),J)}function fe(A){return e.check(RA,ie,K)(A)}function ie(A){return e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),ee}function ee(A){return A===null||Pe(A)?fe(A):(e.enter("htmlFlowData"),J(A))}function P(A){return A===45?(e.consume(A),M):J(A)}function X(A){return A===47?(e.consume(A),c="",ae):J(A)}function ae(A){if(A===62){const be=c.toLowerCase();return fb.includes(be)?(e.consume(A),E):J(A)}return kn(A)&&c.length<8?(e.consume(A),c+=String.fromCharCode(A),ae):J(A)}function pe(A){return A===93?(e.consume(A),M):J(A)}function M(A){return A===62?(e.consume(A),E):A===45&&l===2?(e.consume(A),M):J(A)}function E(A){return A===null||Pe(A)?(e.exit("htmlFlowData"),K(A)):(e.consume(A),E)}function K(A){return e.exit("htmlFlow"),t(A)}}function LA(e,t,r){const s=this;return l;function l(c){return Pe(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),u):r(c)}function u(c){return s.parser.lazy[s.now().line]?r(c):t(c)}}function zA(e,t,r){return s;function s(l){return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),e.attempt(Vl,t,r)}}const UA={name:"htmlText",tokenize:BA};function BA(e,t,r){const s=this;let l,u,c;return f;function f(M){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(M),d}function d(M){return M===33?(e.consume(M),m):M===47?(e.consume(M),B):M===63?(e.consume(M),F):kn(M)?(e.consume(M),$):r(M)}function m(M){return M===45?(e.consume(M),y):M===91?(e.consume(M),u=0,S):kn(M)?(e.consume(M),q):r(M)}function y(M){return M===45?(e.consume(M),w):r(M)}function g(M){return M===null?r(M):M===45?(e.consume(M),x):Pe(M)?(c=g,X(M)):(e.consume(M),g)}function x(M){return M===45?(e.consume(M),w):g(M)}function w(M){return M===62?P(M):M===45?x(M):g(M)}function S(M){const E="CDATA[";return M===E.charCodeAt(u++)?(e.consume(M),u===E.length?T:S):r(M)}function T(M){return M===null?r(M):M===93?(e.consume(M),z):Pe(M)?(c=T,X(M)):(e.consume(M),T)}function z(M){return M===93?(e.consume(M),D):T(M)}function D(M){return M===62?P(M):M===93?(e.consume(M),D):T(M)}function q(M){return M===null||M===62?P(M):Pe(M)?(c=q,X(M)):(e.consume(M),q)}function F(M){return M===null?r(M):M===63?(e.consume(M),oe):Pe(M)?(c=F,X(M)):(e.consume(M),F)}function oe(M){return M===62?P(M):F(M)}function B(M){return kn(M)?(e.consume(M),L):r(M)}function L(M){return M===45||pn(M)?(e.consume(M),L):W(M)}function W(M){return Pe(M)?(c=W,X(M)):st(M)?(e.consume(M),W):P(M)}function $(M){return M===45||pn(M)?(e.consume(M),$):M===47||M===62||Nt(M)?H(M):r(M)}function H(M){return M===47?(e.consume(M),P):M===58||M===95||kn(M)?(e.consume(M),R):Pe(M)?(c=H,X(M)):st(M)?(e.consume(M),H):P(M)}function R(M){return M===45||M===46||M===58||M===95||pn(M)?(e.consume(M),R):G(M)}function G(M){return M===61?(e.consume(M),J):Pe(M)?(c=G,X(M)):st(M)?(e.consume(M),G):H(M)}function J(M){return M===null||M===60||M===61||M===62||M===96?r(M):M===34||M===39?(e.consume(M),l=M,fe):Pe(M)?(c=J,X(M)):st(M)?(e.consume(M),J):(e.consume(M),ie)}function fe(M){return M===l?(e.consume(M),l=void 0,ee):M===null?r(M):Pe(M)?(c=fe,X(M)):(e.consume(M),fe)}function ie(M){return M===null||M===34||M===39||M===60||M===61||M===96?r(M):M===47||M===62||Nt(M)?H(M):(e.consume(M),ie)}function ee(M){return M===47||M===62||Nt(M)?H(M):r(M)}function P(M){return M===62?(e.consume(M),e.exit("htmlTextData"),e.exit("htmlText"),t):r(M)}function X(M){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),ae}function ae(M){return st(M)?ct(e,pe,"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(M):pe(M)}function pe(M){return e.enter("htmlTextData"),c(M)}}const Zd={name:"labelEnd",resolveAll:IA,resolveTo:FA,tokenize:$A},PA={tokenize:YA},qA={tokenize:GA},HA={tokenize:VA};function IA(e){let t=-1;const r=[];for(;++t<e.length;){const s=e[t][1];if(r.push(e[t]),s.type==="labelImage"||s.type==="labelLink"||s.type==="labelEnd"){const l=s.type==="labelImage"?4:2;s.type="data",t+=l}}return e.length!==r.length&&Vn(e,0,e.length,r),e}function FA(e,t){let r=e.length,s=0,l,u,c,f;for(;r--;)if(l=e[r][1],u){if(l.type==="link"||l.type==="labelLink"&&l._inactive)break;e[r][0]==="enter"&&l.type==="labelLink"&&(l._inactive=!0)}else if(c){if(e[r][0]==="enter"&&(l.type==="labelImage"||l.type==="labelLink")&&!l._balanced&&(u=r,l.type!=="labelLink")){s=2;break}}else l.type==="labelEnd"&&(c=r);const d={type:e[u][1].type==="labelLink"?"link":"image",start:{...e[u][1].start},end:{...e[e.length-1][1].end}},m={type:"label",start:{...e[u][1].start},end:{...e[c][1].end}},y={type:"labelText",start:{...e[u+s+2][1].end},end:{...e[c-2][1].start}};return f=[["enter",d,t],["enter",m,t]],f=ur(f,e.slice(u+1,u+s+3)),f=ur(f,[["enter",y,t]]),f=ur(f,Zu(t.parser.constructs.insideSpan.null,e.slice(u+s+4,c-3),t)),f=ur(f,[["exit",y,t],e[c-2],e[c-1],["exit",m,t]]),f=ur(f,e.slice(c+1)),f=ur(f,[["exit",d,t]]),Vn(e,u,e.length,f),e}function $A(e,t,r){const s=this;let l=s.events.length,u,c;for(;l--;)if((s.events[l][1].type==="labelImage"||s.events[l][1].type==="labelLink")&&!s.events[l][1]._balanced){u=s.events[l][1];break}return f;function f(x){return u?u._inactive?g(x):(c=s.parser.defined.includes(wr(s.sliceSerialize({start:u.end,end:s.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(x),e.exit("labelMarker"),e.exit("labelEnd"),d):r(x)}function d(x){return x===40?e.attempt(PA,y,c?y:g)(x):x===91?e.attempt(qA,y,c?m:g)(x):c?y(x):g(x)}function m(x){return e.attempt(HA,y,g)(x)}function y(x){return t(x)}function g(x){return u._balanced=!0,r(x)}}function YA(e,t,r){return s;function s(g){return e.enter("resource"),e.enter("resourceMarker"),e.consume(g),e.exit("resourceMarker"),l}function l(g){return Nt(g)?Rl(e,u)(g):u(g)}function u(g){return g===41?y(g):s1(e,c,f,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(g)}function c(g){return Nt(g)?Rl(e,d)(g):y(g)}function f(g){return r(g)}function d(g){return g===34||g===39||g===40?l1(e,m,r,"resourceTitle","resourceTitleMarker","resourceTitleString")(g):y(g)}function m(g){return Nt(g)?Rl(e,y)(g):y(g)}function y(g){return g===41?(e.enter("resourceMarker"),e.consume(g),e.exit("resourceMarker"),e.exit("resource"),t):r(g)}}function GA(e,t,r){const s=this;return l;function l(f){return a1.call(s,e,u,c,"reference","referenceMarker","referenceString")(f)}function u(f){return s.parser.defined.includes(wr(s.sliceSerialize(s.events[s.events.length-1][1]).slice(1,-1)))?t(f):r(f)}function c(f){return r(f)}}function VA(e,t,r){return s;function s(u){return e.enter("reference"),e.enter("referenceMarker"),e.consume(u),e.exit("referenceMarker"),l}function l(u){return u===93?(e.enter("referenceMarker"),e.consume(u),e.exit("referenceMarker"),e.exit("reference"),t):r(u)}}const JA={name:"labelStartImage",resolveAll:Zd.resolveAll,tokenize:XA};function XA(e,t,r){const s=this;return l;function l(f){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(f),e.exit("labelImageMarker"),u}function u(f){return f===91?(e.enter("labelMarker"),e.consume(f),e.exit("labelMarker"),e.exit("labelImage"),c):r(f)}function c(f){return f===94&&"_hiddenFootnoteSupport"in s.parser.constructs?r(f):t(f)}}const KA={name:"labelStartLink",resolveAll:Zd.resolveAll,tokenize:QA};function QA(e,t,r){const s=this;return l;function l(c){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(c),e.exit("labelMarker"),e.exit("labelLink"),u}function u(c){return c===94&&"_hiddenFootnoteSupport"in s.parser.constructs?r(c):t(c)}}const zh={name:"lineEnding",tokenize:ZA};function ZA(e,t){return r;function r(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),ct(e,t,"linePrefix")}}const Eu={name:"thematicBreak",tokenize:WA};function WA(e,t,r){let s=0,l;return u;function u(m){return e.enter("thematicBreak"),c(m)}function c(m){return l=m,f(m)}function f(m){return m===l?(e.enter("thematicBreakSequence"),d(m)):s>=3&&(m===null||Pe(m))?(e.exit("thematicBreak"),t(m)):r(m)}function d(m){return m===l?(e.consume(m),s++,d):(e.exit("thematicBreakSequence"),st(m)?ct(e,f,"whitespace")(m):f(m))}}const Rn={continuation:{tokenize:rj},exit:sj,name:"list",tokenize:nj},ej={partial:!0,tokenize:aj},tj={partial:!0,tokenize:ij};function nj(e,t,r){const s=this,l=s.events[s.events.length-1];let u=l&&l[1].type==="linePrefix"?l[2].sliceSerialize(l[1],!0).length:0,c=0;return f;function f(w){const S=s.containerState.type||(w===42||w===43||w===45?"listUnordered":"listOrdered");if(S==="listUnordered"?!s.containerState.marker||w===s.containerState.marker:bd(w)){if(s.containerState.type||(s.containerState.type=S,e.enter(S,{_container:!0})),S==="listUnordered")return e.enter("listItemPrefix"),w===42||w===45?e.check(Eu,r,m)(w):m(w);if(!s.interrupt||w===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(w)}return r(w)}function d(w){return bd(w)&&++c<10?(e.consume(w),d):(!s.interrupt||c<2)&&(s.containerState.marker?w===s.containerState.marker:w===41||w===46)?(e.exit("listItemValue"),m(w)):r(w)}function m(w){return e.enter("listItemMarker"),e.consume(w),e.exit("listItemMarker"),s.containerState.marker=s.containerState.marker||w,e.check(Vl,s.interrupt?r:y,e.attempt(ej,x,g))}function y(w){return s.containerState.initialBlankLine=!0,u++,x(w)}function g(w){return st(w)?(e.enter("listItemPrefixWhitespace"),e.consume(w),e.exit("listItemPrefixWhitespace"),x):r(w)}function x(w){return s.containerState.size=u+s.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(w)}}function rj(e,t,r){const s=this;return s.containerState._closeFlow=void 0,e.check(Vl,l,u);function l(f){return s.containerState.furtherBlankLines=s.containerState.furtherBlankLines||s.containerState.initialBlankLine,ct(e,t,"listItemIndent",s.containerState.size+1)(f)}function u(f){return s.containerState.furtherBlankLines||!st(f)?(s.containerState.furtherBlankLines=void 0,s.containerState.initialBlankLine=void 0,c(f)):(s.containerState.furtherBlankLines=void 0,s.containerState.initialBlankLine=void 0,e.attempt(tj,t,c)(f))}function c(f){return s.containerState._closeFlow=!0,s.interrupt=void 0,ct(e,e.attempt(Rn,t,r),"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function ij(e,t,r){const s=this;return ct(e,l,"listItemIndent",s.containerState.size+1);function l(u){const c=s.events[s.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===s.containerState.size?t(u):r(u)}}function sj(e){e.exit(this.containerState.type)}function aj(e,t,r){const s=this;return ct(e,l,"listItemPrefixWhitespace",s.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function l(u){const c=s.events[s.events.length-1];return!st(u)&&c&&c[1].type==="listItemPrefixWhitespace"?t(u):r(u)}}const hb={name:"setextUnderline",resolveTo:lj,tokenize:oj};function lj(e,t){let r=e.length,s,l,u;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){s=r;break}e[r][1].type==="paragraph"&&(l=r)}else e[r][1].type==="content"&&e.splice(r,1),!u&&e[r][1].type==="definition"&&(u=r);const c={type:"setextHeading",start:{...e[s][1].start},end:{...e[e.length-1][1].end}};return e[l][1].type="setextHeadingText",u?(e.splice(l,0,["enter",c,t]),e.splice(u+1,0,["exit",e[s][1],t]),e[s][1].end={...e[u][1].end}):e[s][1]=c,e.push(["exit",c,t]),e}function oj(e,t,r){const s=this;let l;return u;function u(m){let y=s.events.length,g;for(;y--;)if(s.events[y][1].type!=="lineEnding"&&s.events[y][1].type!=="linePrefix"&&s.events[y][1].type!=="content"){g=s.events[y][1].type==="paragraph";break}return!s.parser.lazy[s.now().line]&&(s.interrupt||g)?(e.enter("setextHeadingLine"),l=m,c(m)):r(m)}function c(m){return e.enter("setextHeadingLineSequence"),f(m)}function f(m){return m===l?(e.consume(m),f):(e.exit("setextHeadingLineSequence"),st(m)?ct(e,d,"lineSuffix")(m):d(m))}function d(m){return m===null||Pe(m)?(e.exit("setextHeadingLine"),t(m)):r(m)}}const uj={tokenize:cj};function cj(e){const t=this,r=e.attempt(Vl,s,e.attempt(this.parser.constructs.flowInitial,l,ct(e,e.attempt(this.parser.constructs.flow,l,e.attempt(pA,l)),"linePrefix")));return r;function s(u){if(u===null){e.consume(u);return}return e.enter("lineEndingBlank"),e.consume(u),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function l(u){if(u===null){e.consume(u);return}return e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const fj={resolveAll:u1()},hj=o1("string"),dj=o1("text");function o1(e){return{resolveAll:u1(e==="text"?mj:void 0),tokenize:t};function t(r){const s=this,l=this.parser.constructs[e],u=r.attempt(l,c,f);return c;function c(y){return m(y)?u(y):f(y)}function f(y){if(y===null){r.consume(y);return}return r.enter("data"),r.consume(y),d}function d(y){return m(y)?(r.exit("data"),u(y)):(r.consume(y),d)}function m(y){if(y===null)return!0;const g=l[y];let x=-1;if(g)for(;++x<g.length;){const w=g[x];if(!w.previous||w.previous.call(s,s.previous))return!0}return!1}}}function u1(e){return t;function t(r,s){let l=-1,u;for(;++l<=r.length;)u===void 0?r[l]&&r[l][1].type==="data"&&(u=l,l++):(!r[l]||r[l][1].type!=="data")&&(l!==u+2&&(r[u][1].end=r[l-1][1].end,r.splice(u+2,l-u-2),l=u+2),u=void 0);return e?e(r,s):r}}function mj(e,t){let r=0;for(;++r<=e.length;)if((r===e.length||e[r][1].type==="lineEnding")&&e[r-1][1].type==="data"){const s=e[r-1][1],l=t.sliceStream(s);let u=l.length,c=-1,f=0,d;for(;u--;){const m=l[u];if(typeof m=="string"){for(c=m.length;m.charCodeAt(c-1)===32;)f++,c--;if(c)break;c=-1}else if(m===-2)d=!0,f++;else if(m!==-1){u++;break}}if(t._contentTypeTextTrailing&&r===e.length&&(f=0),f){const m={type:r===e.length||d||f<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:u?c:s.start._bufferIndex+c,_index:s.start._index+u,line:s.end.line,column:s.end.column-f,offset:s.end.offset-f},end:{...s.end}};s.end={...m.start},s.start.offset===s.end.offset?Object.assign(s,m):(e.splice(r,0,["enter",m,t],["exit",m,t]),r+=2)}r++}return e}const pj={42:Rn,43:Rn,45:Rn,48:Rn,49:Rn,50:Rn,51:Rn,52:Rn,53:Rn,54:Rn,55:Rn,56:Rn,57:Rn,62:t1},gj={91:vA},yj={[-2]:Lh,[-1]:Lh,32:Lh},bj={35:CA,42:Eu,45:[hb,Eu],60:NA,61:hb,95:Eu,96:cb,126:cb},xj={38:r1,92:n1},vj={[-5]:zh,[-4]:zh,[-3]:zh,33:JA,38:r1,42:xd,60:[KC,UA],91:KA,92:[kA,n1],93:Zd,95:xd,96:uA},wj={null:[xd,fj]},Sj={null:[42,95]},_j={null:[]},kj=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:Sj,contentInitial:gj,disable:_j,document:pj,flow:bj,flowInitial:yj,insideSpan:wj,string:xj,text:vj},Symbol.toStringTag,{value:"Module"}));function Ej(e,t,r){let s={_bufferIndex:-1,_index:0,line:r&&r.line||1,column:r&&r.column||1,offset:r&&r.offset||0};const l={},u=[];let c=[],f=[];const d={attempt:W(B),check:W(L),consume:q,enter:F,exit:oe,interrupt:W(L,{interrupt:!0})},m={code:null,containerState:{},defineSkip:T,events:[],now:S,parser:e,previous:null,sliceSerialize:x,sliceStream:w,write:g};let y=t.tokenize.call(m,d);return t.resolveAll&&u.push(t),m;function g(G){return c=ur(c,G),z(),c[c.length-1]!==null?[]:($(t,0),m.events=Zu(u,m.events,m),m.events)}function x(G,J){return Aj(w(G),J)}function w(G){return Cj(c,G)}function S(){const{_bufferIndex:G,_index:J,line:fe,column:ie,offset:ee}=s;return{_bufferIndex:G,_index:J,line:fe,column:ie,offset:ee}}function T(G){l[G.line]=G.column,R()}function z(){let G;for(;s._index<c.length;){const J=c[s._index];if(typeof J=="string")for(G=s._index,s._bufferIndex<0&&(s._bufferIndex=0);s._index===G&&s._bufferIndex<J.length;)D(J.charCodeAt(s._bufferIndex));else D(J)}}function D(G){y=y(G)}function q(G){Pe(G)?(s.line++,s.column=1,s.offset+=G===-3?2:1,R()):G!==-1&&(s.column++,s.offset++),s._bufferIndex<0?s._index++:(s._bufferIndex++,s._bufferIndex===c[s._index].length&&(s._bufferIndex=-1,s._index++)),m.previous=G}function F(G,J){const fe=J||{};return fe.type=G,fe.start=S(),m.events.push(["enter",fe,m]),f.push(fe),fe}function oe(G){const J=f.pop();return J.end=S(),m.events.push(["exit",J,m]),J}function B(G,J){$(G,J.from)}function L(G,J){J.restore()}function W(G,J){return fe;function fe(ie,ee,P){let X,ae,pe,M;return Array.isArray(ie)?K(ie):"tokenize"in ie?K([ie]):E(ie);function E(_e){return Me;function Me(Ie){const ke=Ie!==null&&_e[Ie],Ge=Ie!==null&&_e.null,Ft=[...Array.isArray(ke)?ke:ke?[ke]:[],...Array.isArray(Ge)?Ge:Ge?[Ge]:[]];return K(Ft)(Ie)}}function K(_e){return X=_e,ae=0,_e.length===0?P:A(_e[ae])}function A(_e){return Me;function Me(Ie){return M=H(),pe=_e,_e.partial||(m.currentConstruct=_e),_e.name&&m.parser.constructs.disable.null.includes(_e.name)?je():_e.tokenize.call(J?Object.assign(Object.create(m),J):m,d,be,je)(Ie)}}function be(_e){return G(pe,M),ee}function je(_e){return M.restore(),++ae<X.length?A(X[ae]):P}}}function $(G,J){G.resolveAll&&!u.includes(G)&&u.push(G),G.resolve&&Vn(m.events,J,m.events.length-J,G.resolve(m.events.slice(J),m)),G.resolveTo&&(m.events=G.resolveTo(m.events,m))}function H(){const G=S(),J=m.previous,fe=m.currentConstruct,ie=m.events.length,ee=Array.from(f);return{from:ie,restore:P};function P(){s=G,m.previous=J,m.currentConstruct=fe,m.events.length=ie,f=ee,R()}}function R(){s.line in l&&s.column<2&&(s.column=l[s.line],s.offset+=l[s.line]-1)}}function Cj(e,t){const r=t.start._index,s=t.start._bufferIndex,l=t.end._index,u=t.end._bufferIndex;let c;if(r===l)c=[e[r].slice(s,u)];else{if(c=e.slice(r,l),s>-1){const f=c[0];typeof f=="string"?c[0]=f.slice(s):c.shift()}u>0&&c.push(e[l].slice(0,u))}return c}function Aj(e,t){let r=-1;const s=[];let l;for(;++r<e.length;){const u=e[r];let c;if(typeof u=="string")c=u;else switch(u){case-5:{c="\r";break}case-4:{c=`
|
|
@@ -117,4 +117,4 @@ Are you sure you want to continue?`):!0}async function oe(){if(!(!q||!F())){w(!0
|
|
|
117
117
|
`))+1))}const c="#".repeat(l),f=r.enter("headingAtx"),d=r.enter("phrasing");u.move(c+" ");let m=r.containerPhrasing(e,{before:"# ",after:`
|
|
118
118
|
`,...u.current()});return/^[\t ]/.test(m)&&(m=Hl(m.charCodeAt(0))+m.slice(1)),m=m?c+" "+m:c,r.options.closeAtx&&(m+=" "+c),d(),f(),m}C1.peek=n3;function C1(e){return e.value||""}function n3(){return"<"}A1.peek=r3;function A1(e,t,r,s){const l=sm(r),u=l==='"'?"Quote":"Apostrophe",c=r.enter("image");let f=r.enter("label");const d=r.createTracker(s);let m=d.move("![");return m+=d.move(r.safe(e.alt,{before:m,after:"]",...d.current()})),m+=d.move("]("),f(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(f=r.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(r.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(f=r.enter("destinationRaw"),m+=d.move(r.safe(e.url,{before:m,after:e.title?" ":")",...d.current()}))),f(),e.title&&(f=r.enter(`title${u}`),m+=d.move(" "+l),m+=d.move(r.safe(e.title,{before:m,after:l,...d.current()})),m+=d.move(l),f()),m+=d.move(")"),c(),m}function r3(){return"!"}j1.peek=i3;function j1(e,t,r,s){const l=e.referenceType,u=r.enter("imageReference");let c=r.enter("label");const f=r.createTracker(s);let d=f.move("![");const m=r.safe(e.alt,{before:d,after:"]",...f.current()});d+=f.move(m+"]["),c();const y=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:d,after:"]",...f.current()});return c(),r.stack=y,u(),l==="full"||!m||m!==g?d+=f.move(g+"]"):l==="shortcut"?d=d.slice(0,-1):d+=f.move("]"),d}function i3(){return"!"}T1.peek=s3;function T1(e,t,r){let s=e.value||"",l="`",u=-1;for(;new RegExp("(^|[^`])"+l+"([^`]|$)").test(s);)l+="`";for(/[^ \r\n]/.test(s)&&(/^[ \r\n]/.test(s)&&/[ \r\n]$/.test(s)||/^`|`$/.test(s))&&(s=" "+s+" ");++u<r.unsafe.length;){const c=r.unsafe[u],f=r.compilePattern(c);let d;if(c.atBreak)for(;d=f.exec(s);){let m=d.index;s.charCodeAt(m)===10&&s.charCodeAt(m-1)===13&&m--,s=s.slice(0,m)+" "+s.slice(d.index+1)}}return l+s+l}function s3(){return"`"}function N1(e,t){const r=Kd(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(r===e.url||"mailto:"+r===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}O1.peek=a3;function O1(e,t,r,s){const l=sm(r),u=l==='"'?"Quote":"Apostrophe",c=r.createTracker(s);let f,d;if(N1(e,r)){const y=r.stack;r.stack=[],f=r.enter("autolink");let g=c.move("<");return g+=c.move(r.containerPhrasing(e,{before:g,after:">",...c.current()})),g+=c.move(">"),f(),r.stack=y,g}f=r.enter("link"),d=r.enter("label");let m=c.move("[");return m+=c.move(r.containerPhrasing(e,{before:m,after:"](",...c.current()})),m+=c.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),m+=c.move("<"),m+=c.move(r.safe(e.url,{before:m,after:">",...c.current()})),m+=c.move(">")):(d=r.enter("destinationRaw"),m+=c.move(r.safe(e.url,{before:m,after:e.title?" ":")",...c.current()}))),d(),e.title&&(d=r.enter(`title${u}`),m+=c.move(" "+l),m+=c.move(r.safe(e.title,{before:m,after:l,...c.current()})),m+=c.move(l),d()),m+=c.move(")"),f(),m}function a3(e,t,r){return N1(e,r)?"<":"["}R1.peek=l3;function R1(e,t,r,s){const l=e.referenceType,u=r.enter("linkReference");let c=r.enter("label");const f=r.createTracker(s);let d=f.move("[");const m=r.containerPhrasing(e,{before:d,after:"]",...f.current()});d+=f.move(m+"]["),c();const y=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:d,after:"]",...f.current()});return c(),r.stack=y,u(),l==="full"||!m||m!==g?d+=f.move(g+"]"):l==="shortcut"?d=d.slice(0,-1):d+=f.move("]"),d}function l3(){return"["}function am(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function o3(e){const t=am(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function u3(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function M1(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function c3(e,t,r,s){const l=r.enter("list"),u=r.bulletCurrent;let c=e.ordered?u3(r):am(r);const f=e.ordered?c==="."?")":".":o3(r);let d=t&&r.bulletLastUsed?c===r.bulletLastUsed:!1;if(!e.ordered){const y=e.children?e.children[0]:void 0;if((c==="*"||c==="-")&&y&&(!y.children||!y.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(d=!0),M1(r)===c&&y){let g=-1;for(;++g<e.children.length;){const x=e.children[g];if(x&&x.type==="listItem"&&x.children&&x.children[0]&&x.children[0].type==="thematicBreak"){d=!0;break}}}}d&&(c=f),r.bulletCurrent=c;const m=r.containerFlow(e,s);return r.bulletLastUsed=c,r.bulletCurrent=u,l(),m}function f3(e){const t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function h3(e,t,r,s){const l=f3(r);let u=r.bulletCurrent||am(r);t&&t.type==="list"&&t.ordered&&(u=(typeof t.start=="number"&&t.start>-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+u);let c=u.length+1;(l==="tab"||l==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(c=Math.ceil(c/4)*4);const f=r.createTracker(s);f.move(u+" ".repeat(c-u.length)),f.shift(c);const d=r.enter("listItem"),m=r.indentLines(r.containerFlow(e,f.current()),y);return d(),m;function y(g,x,w){return x?(w?"":" ".repeat(c))+g:(w?u:u+" ".repeat(c-u.length))+g}}function d3(e,t,r,s){const l=r.enter("paragraph"),u=r.enter("phrasing"),c=r.containerPhrasing(e,s);return u(),l(),c}const m3=ec(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function p3(e,t,r,s){return(e.children.some(function(c){return m3(c)})?r.containerPhrasing:r.containerFlow).call(r,e,s)}function g3(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}D1.peek=y3;function D1(e,t,r,s){const l=g3(r),u=r.enter("strong"),c=r.createTracker(s),f=c.move(l+l);let d=c.move(r.containerPhrasing(e,{after:l,before:f,...c.current()}));const m=d.charCodeAt(0),y=Hu(s.before.charCodeAt(s.before.length-1),m,l);y.inside&&(d=Hl(m)+d.slice(1));const g=d.charCodeAt(d.length-1),x=Hu(s.after.charCodeAt(0),g,l);x.inside&&(d=d.slice(0,-1)+Hl(g));const w=c.move(l+l);return u(),r.attentionEncodeSurroundingInfo={after:x.outside,before:y.outside},f+d+w}function y3(e,t,r){return r.options.strong||"*"}function b3(e,t,r,s){return r.safe(e.value,s)}function x3(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function v3(e,t,r){const s=(M1(r)+(r.options.ruleSpaces?" ":"")).repeat(x3(r));return r.options.ruleSpaces?s.slice(0,-1):s}const L1={blockquote:FN,break:Db,code:XN,definition:QN,emphasis:E1,hardBreak:Db,heading:t3,html:C1,image:A1,imageReference:j1,inlineCode:T1,link:O1,linkReference:R1,list:c3,listItem:h3,paragraph:d3,root:p3,strong:D1,text:b3,thematicBreak:v3};function w3(){return{enter:{table:S3,tableData:Lb,tableHeader:Lb,tableRow:k3},exit:{codeText:E3,table:_3,tableData:Jh,tableHeader:Jh,tableRow:Jh}}}function S3(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function _3(e){this.exit(e),this.data.inTable=void 0}function k3(e){this.enter({type:"tableRow",children:[]},e)}function Jh(e){this.exit(e)}function Lb(e){this.enter({type:"tableCell",children:[]},e)}function E3(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,C3));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function C3(e,t){return t==="|"?t:e}function A3(e){const t=e||{},r=t.tableCellPadding,s=t.tablePipeAlign,l=t.stringLength,u=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:`
|
|
119
119
|
`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:x,table:c,tableCell:d,tableRow:f}};function c(w,S,T,z){return m(y(w,T,z),w.align)}function f(w,S,T,z){const D=g(w,T,z),q=m([D]);return q.slice(0,q.indexOf(`
|
|
120
|
-
`))}function d(w,S,T,z){const D=T.enter("tableCell"),q=T.enter("phrasing"),F=T.containerPhrasing(w,{...z,before:u,after:u});return q(),D(),F}function m(w,S){return HN(w,{align:S,alignDelimiters:s,padding:r,stringLength:l})}function y(w,S,T){const z=w.children;let D=-1;const q=[],F=S.enter("table");for(;++D<z.length;)q[D]=g(z[D],S,T);return F(),q}function g(w,S,T){const z=w.children;let D=-1;const q=[],F=S.enter("tableRow");for(;++D<z.length;)q[D]=d(z[D],w,S,T);return F(),q}function x(w,S,T){let z=L1.inlineCode(w,S,T);return T.stack.includes("tableCell")&&(z=z.replace(/\|/g,"\\$&")),z}}function j3(){return{exit:{taskListCheckValueChecked:zb,taskListCheckValueUnchecked:zb,paragraph:N3}}}function T3(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:O3}}}function zb(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function N3(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const r=this.stack[this.stack.length-1];r.type;const s=r.children[0];if(s&&s.type==="text"){const l=t.children;let u=-1,c;for(;++u<l.length;){const f=l[u];if(f.type==="paragraph"){c=f;break}}c===r&&(s.value=s.value.slice(1),s.value.length===0?r.children.shift():r.position&&s.position&&typeof s.position.start.offset=="number"&&(s.position.start.column++,s.position.start.offset++,r.position.start=Object.assign({},s.position.start)))}}this.exit(e)}function O3(e,t,r,s){const l=e.children[0],u=typeof e.checked=="boolean"&&l&&l.type==="paragraph",c="["+(e.checked?"x":" ")+"] ",f=r.createTracker(s);u&&f.move(c);let d=L1.listItem(e,t,r,{...s,...f.current()});return u&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,m)),d;function m(y){return y+c}}function R3(){return[cN(),ON(),LN(),w3(),j3()]}function M3(e){return{extensions:[fN(),RN(e),zN(),A3(e),T3()]}}const D3={tokenize:q3,partial:!0},z1={tokenize:H3,partial:!0},U1={tokenize:I3,partial:!0},B1={tokenize:F3,partial:!0},L3={tokenize:$3,partial:!0},P1={name:"wwwAutolink",tokenize:B3,previous:H1},q1={name:"protocolAutolink",tokenize:P3,previous:I1},ai={name:"emailAutolink",tokenize:U3,previous:F1},Dr={};function z3(){return{text:Dr}}let hs=48;for(;hs<123;)Dr[hs]=ai,hs++,hs===58?hs=65:hs===91&&(hs=97);Dr[43]=ai;Dr[45]=ai;Dr[46]=ai;Dr[95]=ai;Dr[72]=[ai,q1];Dr[104]=[ai,q1];Dr[87]=[ai,P1];Dr[119]=[ai,P1];function U3(e,t,r){const s=this;let l,u;return c;function c(g){return!kd(g)||!F1.call(s,s.previous)||lm(s.events)?r(g):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),f(g))}function f(g){return kd(g)?(e.consume(g),f):g===64?(e.consume(g),d):r(g)}function d(g){return g===46?e.check(L3,y,m)(g):g===45||g===95||pn(g)?(u=!0,e.consume(g),d):y(g)}function m(g){return e.consume(g),l=!0,d}function y(g){return u&&l&&kn(s.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(g)):r(g)}}function B3(e,t,r){const s=this;return l;function l(c){return c!==87&&c!==119||!H1.call(s,s.previous)||lm(s.events)?r(c):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(D3,e.attempt(z1,e.attempt(U1,u),r),r)(c))}function u(c){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(c)}}function P3(e,t,r){const s=this;let l="",u=!1;return c;function c(g){return(g===72||g===104)&&I1.call(s,s.previous)&&!lm(s.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),l+=String.fromCodePoint(g),e.consume(g),f):r(g)}function f(g){if(kn(g)&&l.length<5)return l+=String.fromCodePoint(g),e.consume(g),f;if(g===58){const x=l.toLowerCase();if(x==="http"||x==="https")return e.consume(g),d}return r(g)}function d(g){return g===47?(e.consume(g),u?m:(u=!0,d)):r(g)}function m(g){return g===null||Bu(g)||Nt(g)||gs(g)||Qu(g)?r(g):e.attempt(z1,e.attempt(U1,y),r)(g)}function y(g){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(g)}}function q3(e,t,r){let s=0;return l;function l(c){return(c===87||c===119)&&s<3?(s++,e.consume(c),l):c===46&&s===3?(e.consume(c),u):r(c)}function u(c){return c===null?r(c):t(c)}}function H3(e,t,r){let s,l,u;return c;function c(m){return m===46||m===95?e.check(B1,d,f)(m):m===null||Nt(m)||gs(m)||m!==45&&Qu(m)?d(m):(u=!0,e.consume(m),c)}function f(m){return m===95?s=!0:(l=s,s=void 0),e.consume(m),c}function d(m){return l||s||!u?r(m):t(m)}}function I3(e,t){let r=0,s=0;return l;function l(c){return c===40?(r++,e.consume(c),l):c===41&&s<r?u(c):c===33||c===34||c===38||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===60||c===63||c===93||c===95||c===126?e.check(B1,t,u)(c):c===null||Nt(c)||gs(c)?t(c):(e.consume(c),l)}function u(c){return c===41&&s++,e.consume(c),l}}function F3(e,t,r){return s;function s(f){return f===33||f===34||f===39||f===41||f===42||f===44||f===46||f===58||f===59||f===63||f===95||f===126?(e.consume(f),s):f===38?(e.consume(f),u):f===93?(e.consume(f),l):f===60||f===null||Nt(f)||gs(f)?t(f):r(f)}function l(f){return f===null||f===40||f===91||Nt(f)||gs(f)?t(f):s(f)}function u(f){return kn(f)?c(f):r(f)}function c(f){return f===59?(e.consume(f),s):kn(f)?(e.consume(f),c):r(f)}}function $3(e,t,r){return s;function s(u){return e.consume(u),l}function l(u){return pn(u)?r(u):t(u)}}function H1(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Nt(e)}function I1(e){return!kn(e)}function F1(e){return!(e===47||kd(e))}function kd(e){return e===43||e===45||e===46||e===95||pn(e)}function lm(e){let t=e.length,r=!1;for(;t--;){const s=e[t][1];if((s.type==="labelLink"||s.type==="labelImage")&&!s._balanced){r=!0;break}if(s._gfmAutolinkLiteralWalkedInto){r=!1;break}}return e.length>0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const Y3={tokenize:W3,partial:!0};function G3(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:K3,continuation:{tokenize:Q3},exit:Z3}},text:{91:{name:"gfmFootnoteCall",tokenize:X3},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:V3,resolveTo:J3}}}}function V3(e,t,r){const s=this;let l=s.events.length;const u=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let c;for(;l--;){const d=s.events[l][1];if(d.type==="labelImage"){c=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return f;function f(d){if(!c||!c._balanced)return r(d);const m=wr(s.sliceSerialize({start:c.end,end:s.now()}));return m.codePointAt(0)!==94||!u.includes(m.slice(1))?r(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),t(d))}}function J3(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const s={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},l={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};l.end.column++,l.end.offset++,l.end._bufferIndex++;const u={type:"gfmFootnoteCallString",start:Object.assign({},l.end),end:Object.assign({},e[e.length-1][1].start)},c={type:"chunkString",contentType:"string",start:Object.assign({},u.start),end:Object.assign({},u.end)},f=[e[r+1],e[r+2],["enter",s,t],e[r+3],e[r+4],["enter",l,t],["exit",l,t],["enter",u,t],["enter",c,t],["exit",c,t],["exit",u,t],e[e.length-2],e[e.length-1],["exit",s,t]];return e.splice(r,e.length-r+1,...f),e}function X3(e,t,r){const s=this,l=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let u=0,c;return f;function f(g){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),d}function d(g){return g!==94?r(g):(e.enter("gfmFootnoteCallMarker"),e.consume(g),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(g){if(u>999||g===93&&!c||g===null||g===91||Nt(g))return r(g);if(g===93){e.exit("chunkString");const x=e.exit("gfmFootnoteCallString");return l.includes(wr(s.sliceSerialize(x)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(g)}return Nt(g)||(c=!0),u++,e.consume(g),g===92?y:m}function y(g){return g===91||g===92||g===93?(e.consume(g),u++,m):m(g)}}function K3(e,t,r){const s=this,l=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let u,c=0,f;return d;function d(S){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionLabelMarker"),m}function m(S){return S===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",y):r(S)}function y(S){if(c>999||S===93&&!f||S===null||S===91||Nt(S))return r(S);if(S===93){e.exit("chunkString");const T=e.exit("gfmFootnoteDefinitionLabelString");return u=wr(s.sliceSerialize(T)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),x}return Nt(S)||(f=!0),c++,e.consume(S),S===92?g:y}function g(S){return S===91||S===92||S===93?(e.consume(S),c++,y):y(S)}function x(S){return S===58?(e.enter("definitionMarker"),e.consume(S),e.exit("definitionMarker"),l.includes(u)||l.push(u),ct(e,w,"gfmFootnoteDefinitionWhitespace")):r(S)}function w(S){return t(S)}}function Q3(e,t,r){return e.check(Vl,t,e.attempt(Y3,t,r))}function Z3(e){e.exit("gfmFootnoteDefinition")}function W3(e,t,r){const s=this;return ct(e,l,"gfmFootnoteDefinitionIndent",5);function l(u){const c=s.events[s.events.length-1];return c&&c[1].type==="gfmFootnoteDefinitionIndent"&&c[2].sliceSerialize(c[1],!0).length===4?t(u):r(u)}}function eO(e){let r=(e||{}).singleTilde;const s={name:"strikethrough",tokenize:u,resolveAll:l};return r==null&&(r=!0),{text:{126:s},insideSpan:{null:[s]},attentionMarkers:{null:[126]}};function l(c,f){let d=-1;for(;++d<c.length;)if(c[d][0]==="enter"&&c[d][1].type==="strikethroughSequenceTemporary"&&c[d][1]._close){let m=d;for(;m--;)if(c[m][0]==="exit"&&c[m][1].type==="strikethroughSequenceTemporary"&&c[m][1]._open&&c[d][1].end.offset-c[d][1].start.offset===c[m][1].end.offset-c[m][1].start.offset){c[d][1].type="strikethroughSequence",c[m][1].type="strikethroughSequence";const y={type:"strikethrough",start:Object.assign({},c[m][1].start),end:Object.assign({},c[d][1].end)},g={type:"strikethroughText",start:Object.assign({},c[m][1].end),end:Object.assign({},c[d][1].start)},x=[["enter",y,f],["enter",c[m][1],f],["exit",c[m][1],f],["enter",g,f]],w=f.parser.constructs.insideSpan.null;w&&Vn(x,x.length,0,Zu(w,c.slice(m+1,d),f)),Vn(x,x.length,0,[["exit",g,f],["enter",c[d][1],f],["exit",c[d][1],f],["exit",y,f]]),Vn(c,m-1,d-m+3,x),d=m+x.length-2;break}}for(d=-1;++d<c.length;)c[d][1].type==="strikethroughSequenceTemporary"&&(c[d][1].type="data");return c}function u(c,f,d){const m=this.previous,y=this.events;let g=0;return x;function x(S){return m===126&&y[y.length-1][1].type!=="characterEscape"?d(S):(c.enter("strikethroughSequenceTemporary"),w(S))}function w(S){const T=ba(m);if(S===126)return g>1?d(S):(c.consume(S),g++,w);if(g<2&&!r)return d(S);const z=c.exit("strikethroughSequenceTemporary"),D=ba(S);return z._open=!D||D===2&&!!T,z._close=!T||T===2&&!!D,f(S)}}}class tO{constructor(){this.map=[]}add(t,r,s){nO(this,t,r,s)}consume(t){if(this.map.sort(function(u,c){return u[0]-c[0]}),this.map.length===0)return;let r=this.map.length;const s=[];for(;r>0;)r-=1,s.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];s.push(t.slice()),t.length=0;let l=s.pop();for(;l;){for(const u of l)t.push(u);l=s.pop()}this.map.length=0}}function nO(e,t,r,s){let l=0;if(!(r===0&&s.length===0)){for(;l<e.map.length;){if(e.map[l][0]===t){e.map[l][1]+=r,e.map[l][2].push(...s);return}l+=1}e.map.push([t,r,s])}}function rO(e,t){let r=!1;const s=[];for(;t<e.length;){const l=e[t];if(r){if(l[0]==="enter")l[1].type==="tableContent"&&s.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(l[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const u=s.length-1;s[u]=s[u]==="left"?"center":"right"}}else if(l[1].type==="tableDelimiterRow")break}else l[0]==="enter"&&l[1].type==="tableDelimiterRow"&&(r=!0);t+=1}return s}function iO(){return{flow:{null:{name:"table",tokenize:sO,resolveAll:aO}}}}function sO(e,t,r){const s=this;let l=0,u=0,c;return f;function f(R){let G=s.events.length-1;for(;G>-1;){const ie=s.events[G][1].type;if(ie==="lineEnding"||ie==="linePrefix")G--;else break}const J=G>-1?s.events[G][1].type:null,fe=J==="tableHead"||J==="tableRow"?L:d;return fe===L&&s.parser.lazy[s.now().line]?r(R):fe(R)}function d(R){return e.enter("tableHead"),e.enter("tableRow"),m(R)}function m(R){return R===124||(c=!0,u+=1),y(R)}function y(R){return R===null?r(R):Pe(R)?u>1?(u=0,s.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),w):r(R):st(R)?ct(e,y,"whitespace")(R):(u+=1,c&&(c=!1,l+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),c=!0,y):(e.enter("data"),g(R)))}function g(R){return R===null||R===124||Nt(R)?(e.exit("data"),y(R)):(e.consume(R),R===92?x:g)}function x(R){return R===92||R===124?(e.consume(R),g):g(R)}function w(R){return s.interrupt=!1,s.parser.lazy[s.now().line]?r(R):(e.enter("tableDelimiterRow"),c=!1,st(R)?ct(e,S,"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):S(R))}function S(R){return R===45||R===58?z(R):R===124?(c=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),T):B(R)}function T(R){return st(R)?ct(e,z,"whitespace")(R):z(R)}function z(R){return R===58?(u+=1,c=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),D):R===45?(u+=1,D(R)):R===null||Pe(R)?oe(R):B(R)}function D(R){return R===45?(e.enter("tableDelimiterFiller"),q(R)):B(R)}function q(R){return R===45?(e.consume(R),q):R===58?(c=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),F):(e.exit("tableDelimiterFiller"),F(R))}function F(R){return st(R)?ct(e,oe,"whitespace")(R):oe(R)}function oe(R){return R===124?S(R):R===null||Pe(R)?!c||l!==u?B(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):B(R)}function B(R){return r(R)}function L(R){return e.enter("tableRow"),W(R)}function W(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),W):R===null||Pe(R)?(e.exit("tableRow"),t(R)):st(R)?ct(e,W,"whitespace")(R):(e.enter("data"),$(R))}function $(R){return R===null||R===124||Nt(R)?(e.exit("data"),W(R)):(e.consume(R),R===92?H:$)}function H(R){return R===92||R===124?(e.consume(R),$):$(R)}}function aO(e,t){let r=-1,s=!0,l=0,u=[0,0,0,0],c=[0,0,0,0],f=!1,d=0,m,y,g;const x=new tO;for(;++r<e.length;){const w=e[r],S=w[1];w[0]==="enter"?S.type==="tableHead"?(f=!1,d!==0&&(Ub(x,t,d,m,y),y=void 0,d=0),m={type:"table",start:Object.assign({},S.start),end:Object.assign({},S.end)},x.add(r,0,[["enter",m,t]])):S.type==="tableRow"||S.type==="tableDelimiterRow"?(s=!0,g=void 0,u=[0,0,0,0],c=[0,r+1,0,0],f&&(f=!1,y={type:"tableBody",start:Object.assign({},S.start),end:Object.assign({},S.end)},x.add(r,0,[["enter",y,t]])),l=S.type==="tableDelimiterRow"?2:y?3:1):l&&(S.type==="data"||S.type==="tableDelimiterMarker"||S.type==="tableDelimiterFiller")?(s=!1,c[2]===0&&(u[1]!==0&&(c[0]=c[1],g=bu(x,t,u,l,void 0,g),u=[0,0,0,0]),c[2]=r)):S.type==="tableCellDivider"&&(s?s=!1:(u[1]!==0&&(c[0]=c[1],g=bu(x,t,u,l,void 0,g)),u=c,c=[u[1],r,0,0])):S.type==="tableHead"?(f=!0,d=r):S.type==="tableRow"||S.type==="tableDelimiterRow"?(d=r,u[1]!==0?(c[0]=c[1],g=bu(x,t,u,l,r,g)):c[1]!==0&&(g=bu(x,t,c,l,r,g)),l=0):l&&(S.type==="data"||S.type==="tableDelimiterMarker"||S.type==="tableDelimiterFiller")&&(c[3]=r)}for(d!==0&&Ub(x,t,d,m,y),x.consume(t.events),r=-1;++r<t.events.length;){const w=t.events[r];w[0]==="enter"&&w[1].type==="table"&&(w[1]._align=rO(t.events,r))}return e}function bu(e,t,r,s,l,u){const c=s===1?"tableHeader":s===2?"tableDelimiter":"tableData",f="tableContent";r[0]!==0&&(u.end=Object.assign({},ia(t.events,r[0])),e.add(r[0],0,[["exit",u,t]]));const d=ia(t.events,r[1]);if(u={type:c,start:Object.assign({},d),end:Object.assign({},d)},e.add(r[1],0,[["enter",u,t]]),r[2]!==0){const m=ia(t.events,r[2]),y=ia(t.events,r[3]),g={type:f,start:Object.assign({},m),end:Object.assign({},y)};if(e.add(r[2],0,[["enter",g,t]]),s!==2){const x=t.events[r[2]],w=t.events[r[3]];if(x[1].end=Object.assign({},w[1].end),x[1].type="chunkText",x[1].contentType="text",r[3]>r[2]+1){const S=r[2]+1,T=r[3]-r[2]-1;e.add(S,T,[])}}e.add(r[3]+1,0,[["exit",g,t]])}return l!==void 0&&(u.end=Object.assign({},ia(t.events,l)),e.add(l,0,[["exit",u,t]]),u=void 0),u}function Ub(e,t,r,s,l){const u=[],c=ia(t.events,r);l&&(l.end=Object.assign({},c),u.push(["exit",l,t])),s.end=Object.assign({},c),u.push(["exit",s,t]),e.add(r+1,0,u)}function ia(e,t){const r=e[t],s=r[0]==="enter"?"start":"end";return r[1][s]}const lO={name:"tasklistCheck",tokenize:uO};function oO(){return{text:{91:lO}}}function uO(e,t,r){const s=this;return l;function l(d){return s.previous!==null||!s._gfmTasklistFirstContentOfListItem?r(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),u)}function u(d){return Nt(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),c):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),c):r(d)}function c(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),f):r(d)}function f(d){return Pe(d)?t(d):st(d)?e.check({tokenize:cO},t,r)(d):r(d)}}function cO(e,t,r){return ct(e,s,"whitespace");function s(l){return l===null?r(l):t(l)}}function fO(e){return Wx([z3(),G3(),eO(e),iO(),oO()])}const hO={};function Bb(e){const t=this,r=e||hO,s=t.data(),l=s.micromarkExtensions||(s.micromarkExtensions=[]),u=s.fromMarkdownExtensions||(s.fromMarkdownExtensions=[]),c=s.toMarkdownExtensions||(s.toMarkdownExtensions=[]);l.push(fO(r)),u.push(R3()),c.push(M3(r))}function dO(e){v1(e,[/\r?\n|\r/g,mO])}function mO(){return{type:"break"}}function Pb(){return function(e){dO(e)}}function pO({connected:e,hostId:t,request:r,subscribeEvents:s,taskId:l,runId:u}){const c=Mr(),f=Id(),[d,m]=j.useState(!0),[y,g]=j.useState([]),[x,w]=j.useState(),[S,T]=j.useState(),z=x==="started"||x==="monitoring",D=x==="followup",q=x==="started"||x==="followup",[F,oe]=j.useState(null);dd(F!==null,()=>oe(null));const[B,L]=j.useState(!1),[W,$]=j.useState(""),[H,R]=j.useState(!1),G=j.useRef(null),J=j.useRef(null),fe=j.useRef(null),[ie,ee]=j.useState(u==="latest"?void 0:u),P=u==="latest"&&ie===null;j.useEffect(()=>{if(u!=="latest"){ee(u);return}e&&(ee(void 0),r("taskrun.list",{task_id:l,limit:1}).then(E=>{var K,A;return ee(((A=(K=E.entries)==null?void 0:K[0])==null?void 0:A.run_id)??null)}).catch(()=>ee(null)))},[u,l,e,r]);async function X(){if(ie)try{const E=await r("task.result",{id:l,run_id:ie});if(E.error){console.error("No result:",E.error),c(t?`/hosts/${encodeURIComponent(t)}`:"/",{replace:!0});return}g(E.messages??[]),w(E.running_state),T(E.agent)}catch(E){console.error("Failed to load result:",E),c(t?`/hosts/${encodeURIComponent(t)}`:"/",{replace:!0})}finally{m(!1)}}async function ae(E){var K;if(ie)try{const be=(K=(await r("task.reports",{id:l,run_id:ie,report_files:[E]})).reports)==null?void 0:K[0];be!=null&&be.data_url?oe({file:E,data_url:be.data_url}):oe({file:E,content:(be==null?void 0:be.content)??"Report not found."})}catch{oe({file:E,content:"Failed to load report."})}}j.useEffect(()=>{!e||!ie||(m(!0),X())},[e,l,ie]),j.useEffect(()=>!e||!t||!ie?void 0:s(t,async K=>{try{const A=JSON.parse(new TextDecoder().decode(K.data));if(A.event_type!=="running-state"&&A.event_type!=="result-updated"||K.subject.split(".").pop()!==l||A.event_type==="result-updated"&&A.run_id&&A.run_id!==ie)return;X()}catch{}}),[e,t,l,ie,s,r]),j.useEffect(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight)},[y]),j.useEffect(()=>{d||P||!ie||fe.current!==ie&&(fe.current=ie,requestAnimationFrame(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight),window.scrollTo({top:document.documentElement.scrollHeight,behavior:"auto"})}))},[d,P,ie]);function pe(E){if(E==="input")return"User Input";if(E==="permission")return"Permission";if(E==="confirmation")return"Confirmation"}function M(E){return E==="started"?"Task started":E==="finished"?"Task finished":E==="failed"?"Task failed":E==="error"?"Command failed":E==="aborted"?"Task aborted":E==="confirmation"?"Task confirmed":E==="stopped"?"Follow-up stopped":E??""}return b.jsxs("div",{className:"run-detail",children:[b.jsxs("button",{className:"run-detail-back",onClick:()=>c(-1),children:[b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:b.jsx("path",{d:"M15 18l-6-6 6-6"})}),"Back"]}),P?b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"No runs yet"}),b.jsx("p",{className:"empty-state-hint",children:"This task hasn't been executed yet. Run it from the task menu or wait for its next trigger."})]}):d?b.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-sm)",padding:"var(--space-sm) 0"},children:[b.jsx("div",{className:"skeleton-line",style:{width:"40%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"55%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"100%",height:"8rem",marginTop:"var(--space-sm)"}})]}):b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"chat-thread",ref:G,children:[y.map((E,K)=>{const A=q&&E.role==="assistant"&&!y.slice(K+1).some(be=>be.role==="assistant"||be.role==="user");return E.role==="status"&&E.type==="monitoring"?null:E.role==="status"?b.jsxs("div",{className:`chat-status${E.type==="error"?" chat-status--error":""}`,children:[b.jsxs("div",{children:[M(E.type),E.time>0&&b.jsx("span",{className:"chat-status-time",children:f(E.time)})]}),E.content&&b.jsx("pre",{className:"chat-status-detail",children:E.content})]},K):b.jsxs("div",{className:`chat-message chat-message--${E.role}`,children:[E.role==="assistant"&&S&&b.jsx("div",{className:"chat-message-agent",children:hd(S)}),b.jsxs("div",{className:"chat-message-content",children:[b.jsx(Nb,{remarkPlugins:[Bb,Pb],children:E.content}),A&&b.jsxs("div",{className:"chat-typing-indicator",children:[b.jsx("span",{}),b.jsx("span",{}),b.jsx("span",{})]})]}),E.attachments&&E.attachments.length>0&&b.jsx("div",{className:"chat-message-attachments",children:E.attachments.map(be=>b.jsx("button",{className:"chat-attachment-chip",onClick:()=>ae(be),children:be},be))}),b.jsxs("div",{className:"chat-message-meta",children:[pe(E.type)&&b.jsx("span",{className:"chat-message-type",children:pe(E.type)}),E.time>0&&b.jsx("span",{children:f(E.time)})]})]},K)}),q&&(()=>{const E=y.filter(K=>K.role!=="status");return E.length===0||E[E.length-1].role!=="assistant"})()&&b.jsxs("div",{className:"chat-message chat-message--assistant",children:[S&&b.jsx("div",{className:"chat-message-agent",children:hd(S)}),b.jsxs("div",{className:"chat-typing-indicator",children:[b.jsx("span",{}),b.jsx("span",{}),b.jsx("span",{})]})]}),x==="monitoring"&&b.jsxs("div",{className:"chat-monitoring-indicator",children:[b.jsx("span",{className:"chat-monitoring-dot"}),"Monitoring command output"]})]}),z?b.jsx("div",{className:"chat-abort-bar",children:b.jsx("button",{className:"btn btn-secondary chat-abort-btn",disabled:B,onClick:async()=>{if(confirm("Abort this task?")){L(!0);try{await r("task.abort",{id:l})}catch(E){console.error("Abort failed:",E)}finally{L(!1)}}},children:B?"Aborting...":"Abort Task"})}):D?b.jsx("div",{className:"chat-input-bar",children:b.jsx("button",{className:"btn btn-secondary chat-stop-btn",disabled:B,onClick:async()=>{L(!0);try{await r("task.stop_followup",{id:l,run_id:ie})}catch(E){console.error("Stop failed:",E)}finally{L(!1)}},children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:b.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})})})}):b.jsxs("form",{className:"chat-input-bar",onSubmit:async E=>{E.preventDefault();const K=W.trim();if(!(!K||H)){R(!0);try{await r("task.followup",{id:l,run_id:ie,message:K}),$("")}catch(A){console.error("Follow-up failed:",A)}finally{R(!1)}}},children:[b.jsx("input",{ref:J,className:"chat-input",type:"text",placeholder:"Follow-up message",value:W,onChange:E=>$(E.target.value),disabled:H}),b.jsx("button",{className:"btn btn-primary chat-send-btn",type:"submit",disabled:!W.trim()||H,children:b.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),b.jsx("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})})]})]}),F&&b.jsx("div",{className:"report-dialog-overlay",onClick:()=>oe(null),children:b.jsxs("div",{className:"report-dialog",onClick:E=>E.stopPropagation(),children:[b.jsxs("div",{className:"report-dialog-header",children:[b.jsx("span",{className:"report-dialog-title",children:F.file}),b.jsx("button",{className:"report-dialog-close",onClick:()=>oe(null),"aria-label":"Close",children:b.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),b.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),b.jsx("div",{className:"report-dialog-body",children:F.data_url?b.jsx("img",{src:F.data_url,alt:F.file,style:{maxWidth:"100%",height:"auto"}}):b.jsx(Nb,{remarkPlugins:[Bb,Pb],components:{a:({...E})=>b.jsx("a",{...E,target:"_blank",rel:"noopener noreferrer"})},children:F.content??""})})]})})]})}function gO(){const{activeHost:e}=si(),t=j.useRef(null);j.useEffect(()=>{if(Xn.isNativePlatform()||e.directUrl||t.current===e.hostId)return;async function r(){var s;try{if(!("serviceWorker"in navigator)||!("PushManager"in window)){console.warn("[Push] Push notifications not supported");return}const l=await navigator.serviceWorker.ready;(s=l.active)==null||s.postMessage({type:"set-host-id",hostId:e.hostId});let u=await l.pushManager.getSubscription();if(!u){const{publicKey:f}=await hE("/api/push/vapid-key");if(!f){console.warn("[Push] No VAPID public key configured on server");return}if(await Notification.requestPermission()!=="granted"){console.log("[Push] Permission denied");return}u=await l.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:f})}const c=u.toJSON();await fE("/api/push/subscribe",{hostId:e.hostId,endpoint:c.endpoint,keys:{p256dh:c.keys.p256dh,auth:c.keys.auth}}),t.current=e.hostId}catch(l){console.error("[Push] Subscription failed:",l)}}r()},[e])}const yO="0.9.2";function bO(e,t){if(e.includes("-"))return!1;const r=e.split(".").map(Number),s=t.split(".").map(Number);for(let l=0;l<3;l++){if((r[l]??0)<(s[l]??0))return!0;if((r[l]??0)>(s[l]??0))return!1}return!1}function xu(){const{removePairedHost:e,setHostLanUrl:t,setHostTimezone:r}=Hi(),{connected:s,request:l,subscribeEvents:u,unauthorized:c,activeHost:f}=si(),d=f.hostId,m=f.clientToken||null,y=Mr(),g=cr(),x=$u(),w=Ux("(min-width: 768px)"),S=g.pathname.endsWith("/tasks"),T=x.runId?void 0:x.taskId,z=!!(x.taskId&&x.runId),[D,q]=j.useState(!1),[F,oe]=j.useState(!1),[B,L]=j.useState(null),[W,$]=j.useState(null),[H,R]=j.useState(null),[G,J]=j.useState(new Set),[fe,ie]=j.useState([]),[ee,P]=j.useState(),X=!!m&&H===m,[ae,pe]=j.useState(new Map),[M,E]=j.useState(new Map),[K,A]=j.useState(new Map),[be,je]=j.useState(new Map);gO(),j.useEffect(()=>{window.scrollTo(0,0)},[d]),j.useEffect(()=>{let ze=!1;return zE().then(Ae=>{ze||J(Ae)}),()=>{ze=!0}},[]),j.useEffect(()=>{s&&l("host.info").then(ze=>{var We,Fe,et,ft,ht,Wt;ie(ze.agents??[]),P(ze.host_platform),R(ze.linked_client_token??null),xE(ze.agents??[]);const Ae=ze.version??null;$(Ae),q(!!Ae&&bO(Ae,yO)),t(d,ze.lan_url??void 0),r(d,ze.host_timezone);const Le=new Map,nt=new Map,Ve=new Map,Je=new Map;for(const $e of ze.pending_prompts??[])if($e.type==="confirmation")Le.set($e.key,{description:((We=$e.meta)==null?void 0:We.description)??"",sessionName:(Fe=$e.meta)==null?void 0:Fe.session_name});else if($e.type==="permission")nt.set($e.key,{permissions:$e.params??[],sessionName:(et=$e.meta)==null?void 0:et.session_name});else if($e.type==="input"){const yn=$e.params??((ft=$e.meta)==null?void 0:ft.input_questions)??[];Ve.set($e.key,{questions:yn,description:(ht=$e.meta)==null?void 0:ht.description,sessionName:(Wt=$e.meta)==null?void 0:Wt.session_name}),Je.set($e.key,new Array(yn.length).fill(""))}pe(Le),E(nt),A(Ve),je(Je)}).catch(()=>{})},[s,d,l,t,r]),j.useEffect(()=>s?u(d,Ae=>{const Le=Ae.subject.split(".");if(Le.length<3)return;const nt=Le.slice(2).join(".");let Ve={};try{Ve=JSON.parse(new TextDecoder().decode(Ae.data))}catch{return}const Je=Ve.event_type,We=Ve.session_id;if(Je==="input-request"&&We){const Fe=Ve.input_questions,et=Ve.session_name,ft=Ve.description;Fe!=null&&Fe.length&&(A(ht=>{if(ht.has(We))return ht;const Wt=new Map(ht);return Wt.set(We,{questions:Fe,description:ft,sessionName:et}),Wt}),je(ht=>{if(ht.has(We))return ht;const Wt=new Map(ht);return Wt.set(We,new Array(Fe.length).fill("")),Wt}));return}if(Je==="input-resolved"&&We){A(Fe=>{if(!Fe.has(We))return Fe;const et=new Map(Fe);return et.delete(We),et}),je(Fe=>{const et=new Map(Fe);return et.delete(We),et});return}if(Je==="confirm-request"&&We){const Fe=Ve.description,et=Ve.session_name;Fe&&pe(ft=>{if(ft.has(We))return ft;const ht=new Map(ft);return ht.set(We,{description:Fe,sessionName:et}),ht});return}if(Je==="confirm-resolved"&&We){pe(Fe=>{if(!Fe.has(We))return Fe;const et=new Map(Fe);return et.delete(We),et});return}if(Je==="permission-request"){const Fe=Ve.required_permissions,et=Ve.session_name;Fe!=null&&Fe.length&&E(ft=>{if(ft.has(nt))return ft;const ht=new Map(ft);return ht.set(nt,{permissions:Fe,sessionName:et}),ht});return}if(Je==="permission-resolved"){E(Fe=>{if(!Fe.has(nt))return Fe;const et=new Map(Fe);return et.delete(nt),et});return}}):void 0,[s,d,u]);async function _e(ze,Ae){try{await l("task.user_input",{id:ze,value:[Ae]})}catch(Le){console.error("[Dashboard] Failed to respond to confirmation:",Le)}}async function Me(ze,Ae){try{await l("task.user_input",{id:ze,value:[Ae]})}catch(Le){console.error("[Dashboard] Failed to respond to permission request:",Le)}}async function Ie(ze,Ae){try{await l("task.user_input",{id:ze,value:Ae})}catch(Le){console.error("[Dashboard] Failed to respond to input request:",Le)}}function ke(ze,Ae){if(!ps())return;const Le=`/hosts/${encodeURIComponent(d)}/runs/${encodeURIComponent(ze)}`;y(Ae?`${Le}/${encodeURIComponent(Ae)}`:Le)}async function Ge(){oe(!0),L(null);try{const ze=await l("host.update");if(ze.error){L(ze.error),oe(!1);return}}catch{}setTimeout(()=>window.location.reload(),15e3)}const Ft=s&&!c;return b.jsxs("div",{className:"dashboard",children:[w&&b.jsx($0,{daemonVersion:W,linkedClientToken:H,request:l,onEnabledCapabilitiesChange:J,onLinkedClientTokenChange:R}),b.jsxs("div",{className:"dashboard-content",children:[b.jsxs("header",{className:"app-header",children:[b.jsxs("div",{className:"app-title-bar",children:[!w&&b.jsx($0,{daemonVersion:W,linkedClientToken:H,request:l,onEnabledCapabilitiesChange:J,onLinkedClientTokenChange:R}),b.jsx("h1",{className:"app-title",children:"Palmier"}),b.jsx(HE,{})]}),b.jsx("div",{className:"tab-bar",children:b.jsx(ME,{})})]}),b.jsx("main",{className:"dashboard-main",children:c?b.jsxs("div",{className:"revoked-state",children:[b.jsx("div",{className:"revoked-icon",children:b.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),b.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"}),b.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"18"})]})}),b.jsx("h2",{className:"revoked-title",children:"Client Revoked"}),b.jsx("p",{className:"revoked-description",children:"This client was revoked by the host. To reconnect, generate a new pairing code on the host machine."}),b.jsx("div",{className:"revoked-command",children:b.jsx("code",{children:"palmier pair"})}),b.jsxs("div",{className:"revoked-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>{ps()&&y("/pair")},children:"Re-pair Device"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>{e(d),y("/",{replace:!0})},children:"Remove Host"})]})]}):Ft?b.jsxs(b.Fragment,{children:[S&&!z&&b.jsx(RE,{connected:s,hostId:d,request:l,subscribeEvents:u,agents:fe,hostPlatform:ee,isNotificationListener:X&&G.has("notifications"),onViewRun:ke}),z?b.jsx(pO,{connected:s,hostId:d,request:l,subscribeEvents:u,taskId:x.taskId,runId:decodeURIComponent(x.runId)}):S?null:b.jsx(YE,{connected:s,hostId:d,request:l,subscribeEvents:u,agents:fe,hostPlatform:ee,filterTaskId:T,onClearFilter:()=>{ps()&&y(`/hosts/${encodeURIComponent(d)}`)}})]}):b.jsx("div",{className:"empty-state",children:b.jsx("p",{children:"Connecting to host..."})})}),D&&!F&&!B&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Update Required"}),b.jsxs("p",{className:"confirm-modal-message",children:["Your Palmier host",W?` (v${W})`:""," is too old for this version of the app. Please update to continue."]}),b.jsx("div",{className:"confirm-modal-actions",children:b.jsx("button",{className:"btn btn-primary",onClick:Ge,children:"Update Now"})})]})}),F&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Updating..."}),b.jsx("p",{className:"confirm-modal-message",children:"Installing update and restarting daemon. Please wait..."})]})}),B&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Update Failed"}),b.jsx("p",{className:"confirm-modal-message",style:{whiteSpace:"pre-line"},children:B}),b.jsx("div",{className:"confirm-modal-actions",children:b.jsx("button",{className:"btn btn-secondary",onClick:()=>{L(null)},children:"Retry"})})]})})]}),ds.createPortal(b.jsxs(b.Fragment,{children:[[...ae.entries()].map(([ze,{description:Ae,sessionName:Le}])=>b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Confirmation Required"}),Le&&b.jsx("p",{className:"confirm-modal-subtitle",children:Le}),b.jsx("p",{className:"confirm-modal-message",children:Ae}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>_e(ze,"confirmed"),children:"Confirm"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>_e(ze,"aborted"),children:"Abort"})]})]})},ze)),[...M.entries()].map(([ze,{permissions:Ae,sessionName:Le}])=>b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal permission-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Permission Required"}),b.jsx("p",{className:"confirm-modal-message",children:b.jsx("strong",{children:Le||ze})}),b.jsx("div",{className:"permission-list",children:Ae.map((nt,Ve)=>b.jsxs("div",{className:"permission-item",children:[b.jsx("span",{className:"permission-name",children:nt.name}),nt.description&&b.jsx("span",{className:"permission-desc",children:nt.description})]},Ve))}),b.jsxs("div",{className:"permission-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>Me(ze,"granted"),children:"Allow Once"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>Me(ze,"granted_all"),children:"Allow Always"})]}),b.jsx("button",{className:"permission-abort-link",onClick:()=>Me(ze,"aborted"),children:"Deny & Abort Task"})]})},ze)),[...K.entries()].map(([ze,{questions:Ae,description:Le,sessionName:nt}])=>{const Ve=be.get(ze)??new Array(Ae.length).fill("");return b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal input-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Input Required"}),nt&&b.jsx("p",{className:"confirm-modal-subtitle",children:nt}),Le&&b.jsx("p",{className:"confirm-modal-message",children:Le}),b.jsx("div",{className:"input-list",children:Ae.map((Je,We)=>b.jsxs("div",{className:"input-item",children:[b.jsx("label",{className:"input-label",children:Je}),b.jsx("input",{type:"text",className:"input-field",value:Ve[We]??"",onChange:Fe=>{je(et=>{const ft=new Map(et),ht=[...ft.get(ze)??[]];return ht[We]=Fe.target.value,ft.set(ze,ht),ft})},autoFocus:We===0})]},We))}),b.jsx("div",{className:"input-actions",children:b.jsx("button",{className:"btn btn-primary",disabled:Ve.some(Je=>!Je.trim()),onClick:()=>Ie(ze,Ve),children:"Submit"})}),b.jsx("button",{className:"permission-abort-link",onClick:()=>Ie(ze,["aborted"]),children:"Cancel"})]})},ze)})]}),document.body)]})}const xO=ys("Preferences",{web:()=>Hd(()=>import("./web-hExASsqW.js"),[]).then(e=>new e.PreferencesWeb)}),kl=!!window.__PALMIER_SERVE__&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),qb=Xn.isNativePlatform();function vO(){const[e,t]=j.useState(""),[r,s]=j.useState(!0),[l,u]=j.useState(!1),[c,f]=j.useState(null),{addPairedHost:d}=Hi(),m=Mr();async function y(){const g=e.trim().toUpperCase();if(!g){f("Enter a pairing code.");return}u(!0),f(null);try{let x;if(kl){const T=await fetch("/pair",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:g,label:navigator.userAgent})});if(!T.ok){const z=await T.json().catch(()=>({error:"Connection failed"}));throw new Error(z.error||`HTTP ${T.status}`)}x=await T.json()}else{const T=await fetch(`${Uu}/api/config`);if(!T.ok)throw new Error("Failed to fetch server config");const z=await T.json();if(!z.natsWsUrl)throw new Error("Server has no NATS WebSocket URL configured");const D=await Nx({servers:z.natsWsUrl,authenticator:wx(z.natsJwt,new TextEncoder().encode(z.natsNkeySeed))}),q=Nu(),F=`pair.${g}`,oe=await D.request(F,q.encode(JSON.stringify({label:navigator.userAgent})),{timeout:1e4});x=JSON.parse(q.decode(oe.data)),await D.close()}const w={hostId:x.hostId,clientToken:x.clientToken,directUrl:kl?window.location.origin:void 0,...x.hostName?{name:x.hostName}:{}};if(d(w),Xn.isNativePlatform()&&mn){await xO.set({key:"hostId",value:x.hostId});try{const{token:T}=await mn.getFcmToken();await fetch(`${Uu}/api/fcm/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hostId:x.hostId,fcmToken:T})})}catch(T){console.warn("FCM token registration failed:",T)}}const S=`/hosts/${encodeURIComponent(x.hostId)}`;m(qb&&r?`${S}/pair/setup`:S)}catch(x){const w=x instanceof Error?x.message:String(x);w.includes("timeout")||w.includes("TIMEOUT")||w.includes("503")||w.toLowerCase().includes("no responders")?f("Code not found or expired. Check the code and try again."):f(w)}finally{u(!1)}}return b.jsx("div",{className:"pair-page",children:b.jsxs("div",{className:"pair-card",children:[b.jsxs("div",{className:"pair-header",children:[b.jsx("h1",{className:"pair-title",children:kl?"Pair":"Pair with Host"}),b.jsx("p",{className:"pair-subtitle",children:kl?"Enter the pairing code shown in your terminal.":"Connect this device to a Palmier host"})]}),!kl&&b.jsxs("div",{className:"pair-instructions",children:[b.jsxs("div",{className:"pair-instruction-block",children:[b.jsx("h3",{className:"pair-instruction-heading",children:"Setting up a new host?"}),b.jsxs("ol",{className:"pair-steps",children:[b.jsxs("li",{children:["Install at least one agent CLI (e.g., ",b.jsx("a",{href:"https://www.palmier.me/agents",target:"_blank",rel:"noopener noreferrer",children:"Claude Code, Gemini CLI, Codex CLI"}),")"]}),b.jsxs("li",{children:["Install Palmier on your host machine.",b.jsx("span",{className:"pair-platform-label",children:"Linux / macOS:"}),b.jsx("code",{className:"pair-command",children:"curl -fsSL https://palmier.me/install.sh | bash"}),b.jsx("span",{className:"pair-platform-label",children:"Windows (PowerShell):"}),b.jsx("code",{className:"pair-command",children:"irm https://palmier.me/install.ps1 | iex"})]}),b.jsxs("li",{children:["Run the setup wizard:",b.jsx("code",{className:"pair-command",children:"palmier init"})]}),b.jsx("li",{children:"A pairing code will display automatically"})]})]}),b.jsx("div",{className:"pair-instruction-divider"}),b.jsxs("div",{className:"pair-instruction-block",children:[b.jsx("h3",{className:"pair-instruction-heading",children:"Pairing an existing host?"}),b.jsxs("ol",{className:"pair-steps",children:[b.jsxs("li",{children:["Run ",b.jsx("code",{children:"palmier pair"})," on the host machine"]}),b.jsx("li",{children:"Enter the 6-character code below"})]})]})]}),b.jsxs("div",{className:"pair-form",children:[b.jsxs("label",{className:"form-label",htmlFor:"pair-code",children:["Pairing code",b.jsx("input",{id:"pair-code",type:"text",maxLength:6,value:e,onChange:g=>t(g.target.value.toUpperCase()),placeholder:"A7K9M2",className:"form-input form-input-mono pair-code-input",autoFocus:!0,autoComplete:"off",disabled:l})]}),qb&&b.jsxs("label",{className:"pair-checkbox",children:[b.jsx("input",{type:"checkbox",checked:r,onChange:g=>s(g.target.checked),disabled:l}),b.jsxs("span",{className:"pair-checkbox-text",children:[b.jsx("span",{className:"pair-checkbox-title",children:"Link the host to this device"}),b.jsx("span",{className:"pair-checkbox-hint",children:r?"The host will use this device for SMS, contacts, calendar, location, and alarms. Only one device can be linked to the host.":"This device won't provide SMS, contacts, calendar, location, or alarms to the host. You can link it later from the menu."})]})]}),c&&b.jsx("p",{className:"pair-error",children:c}),b.jsxs("button",{className:"btn btn-primary btn-full",onClick:y,disabled:l||!e.trim(),children:[l&&b.jsx("span",{className:"btn-spinner"}),l?"Pairing...":"Pair"]}),b.jsx("button",{className:"btn btn-secondary btn-full",onClick:()=>m("/"),disabled:l,children:"Cancel"}),b.jsxs("p",{className:"pair-consent",children:["By pairing, you agree to our"," ",b.jsx("a",{href:"https://www.palmier.me/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," and"," ",b.jsx("a",{href:"https://www.palmier.me/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]})]})]})})}function wO(){const e=Mr(),{connected:t,request:r,activeHost:s}=si(),{setHostLanUrl:l,pairedHosts:u}=Hi(),c=u.length<=1,[f,d]=j.useState("loading"),[m,y]=j.useState(null),[g,x]=j.useState(null);function w(){e(`/hosts/${encodeURIComponent(s.hostId)}`,{replace:!0})}j.useEffect(()=>{if(!t||f!=="loading")return;let q=!1;return r("host.info").catch(()=>({})).then(F=>{if(q)return;l(s.hostId,F.lan_url??void 0);const oe=F.linked_client_token??null;y(oe);const B=!!oe&&oe!==s.clientToken;d(B?"confirming":"linking")}),()=>{q=!0}},[t,f,s,r,l]),j.useEffect(()=>{if(f!=="linking")return;let q=!1;return(async()=>{try{if(mn){const{token:F}=await mn.getFcmToken();if(!F)throw new Error("Could not read FCM token");await r("device.link",{fcmToken:F})}if(q)return;c?d("wizard"):w()}catch(F){if(q)return;x(F instanceof Error?F.message:String(F)),d("linkError")}})(),()=>{q=!0}},[f]);function S(){d("linking")}function T(){w()}function z(){x(null),d("linking")}const D=f==="confirming"&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:T,children:b.jsxs("div",{className:"confirm-modal",onClick:q=>q.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Link the host to this device?"}),b.jsx("p",{className:"confirm-modal-message",children:"Another device is already linked to this host. Only one device can be linked to the host — switching will disable those capabilities on the currently linked device."}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:T,children:"Cancel"}),b.jsx("button",{className:"btn btn-primary",onClick:S,children:"Link"})]})]})}),document.body);if(f==="loading"||f==="confirming"||f==="linking"||f==="linkError"){const q=c,F=f==="loading"||f==="confirming"||f==="linking";return b.jsxs("div",{className:"pair-setup",children:[b.jsxs("div",{className:"pair-setup-inner",children:[q&&b.jsx("h1",{className:"pair-setup-title",children:"Device Capabilities"}),b.jsxs("div",{className:"pair-setup-loading",children:[F&&b.jsx("span",{className:"spinner spinner-lg"}),f==="loading"&&b.jsx("span",{children:"Connecting to host…"}),f==="confirming"&&b.jsx("span",{children:"Awaiting confirmation…"}),f==="linking"&&b.jsx("span",{children:"Linking device…"}),f==="linkError"&&b.jsxs(b.Fragment,{children:[b.jsx("p",{className:"pair-error",children:g}),b.jsx("button",{className:"btn btn-primary",onClick:z,children:"Retry"}),b.jsx("button",{className:"btn btn-secondary",onClick:w,children:"Skip linking"})]})]})]}),D]})}return b.jsx("div",{className:"pair-setup",children:b.jsxs("div",{className:"pair-setup-inner",children:[b.jsx("h1",{className:"pair-setup-title",children:"Device Capabilities"}),b.jsx("p",{className:"pair-setup-description",children:"Choose what the host can use this device for. You can change these later from the menu."}),b.jsx(Bx,{}),b.jsx("div",{className:"pair-setup-actions",children:b.jsx("button",{className:"btn btn-primary btn-full",onClick:w,children:"Finish"})})]})})}function SO(){const e=Mr();return j.useEffect(()=>{if(!mn)return;const t=mn.addListener("deepLink",({path:r})=>e(r));return()=>{t.then(r=>r.remove())}},[e]),null}function _O(){const{pairedHosts:e}=Hi();return e.length===0?b.jsx(Ll,{to:"/pair",replace:!0}):b.jsx(Ll,{to:`/hosts/${encodeURIComponent(e[0].hostId)}`,replace:!0})}function kO(){const{hostId:e}=$u(),{pairedHosts:t}=Hi(),r=t.find(s=>s.hostId===e)??null;return r?b.jsx(gE,{activeHost:r,children:b.jsxs(nx,{children:[b.jsx(br,{index:!0,element:b.jsx(xu,{})}),b.jsx(br,{path:"tasks",element:b.jsx(xu,{})}),b.jsx(br,{path:"runs/:taskId",element:b.jsx(xu,{})}),b.jsx(br,{path:"runs/:taskId/:runId",element:b.jsx(xu,{})}),b.jsx(br,{path:"pair/setup",element:b.jsx(wO,{})}),b.jsx(br,{path:"*",element:b.jsx(Ll,{to:".",replace:!0})})]})}):b.jsx(Ll,{to:"/",replace:!0})}function EO(){return b.jsxs(q_,{children:[b.jsx(SO,{}),b.jsxs(nx,{children:[b.jsx(br,{path:"/",element:b.jsx(_O,{})}),b.jsx(br,{path:"/pair",element:b.jsx(vO,{})}),b.jsx(br,{path:"/hosts/:hostId/*",element:b.jsx(kO,{})}),b.jsx(br,{path:"*",element:b.jsx(Ll,{to:"/",replace:!0})})]})]})}lS.createRoot(document.getElementById("root")).render(b.jsx(j.StrictMode,{children:b.jsx(A_,{children:b.jsx(EO,{})})}));export{qd as W};
|
|
120
|
+
`))}function d(w,S,T,z){const D=T.enter("tableCell"),q=T.enter("phrasing"),F=T.containerPhrasing(w,{...z,before:u,after:u});return q(),D(),F}function m(w,S){return HN(w,{align:S,alignDelimiters:s,padding:r,stringLength:l})}function y(w,S,T){const z=w.children;let D=-1;const q=[],F=S.enter("table");for(;++D<z.length;)q[D]=g(z[D],S,T);return F(),q}function g(w,S,T){const z=w.children;let D=-1;const q=[],F=S.enter("tableRow");for(;++D<z.length;)q[D]=d(z[D],w,S,T);return F(),q}function x(w,S,T){let z=L1.inlineCode(w,S,T);return T.stack.includes("tableCell")&&(z=z.replace(/\|/g,"\\$&")),z}}function j3(){return{exit:{taskListCheckValueChecked:zb,taskListCheckValueUnchecked:zb,paragraph:N3}}}function T3(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:O3}}}function zb(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function N3(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const r=this.stack[this.stack.length-1];r.type;const s=r.children[0];if(s&&s.type==="text"){const l=t.children;let u=-1,c;for(;++u<l.length;){const f=l[u];if(f.type==="paragraph"){c=f;break}}c===r&&(s.value=s.value.slice(1),s.value.length===0?r.children.shift():r.position&&s.position&&typeof s.position.start.offset=="number"&&(s.position.start.column++,s.position.start.offset++,r.position.start=Object.assign({},s.position.start)))}}this.exit(e)}function O3(e,t,r,s){const l=e.children[0],u=typeof e.checked=="boolean"&&l&&l.type==="paragraph",c="["+(e.checked?"x":" ")+"] ",f=r.createTracker(s);u&&f.move(c);let d=L1.listItem(e,t,r,{...s,...f.current()});return u&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,m)),d;function m(y){return y+c}}function R3(){return[cN(),ON(),LN(),w3(),j3()]}function M3(e){return{extensions:[fN(),RN(e),zN(),A3(e),T3()]}}const D3={tokenize:q3,partial:!0},z1={tokenize:H3,partial:!0},U1={tokenize:I3,partial:!0},B1={tokenize:F3,partial:!0},L3={tokenize:$3,partial:!0},P1={name:"wwwAutolink",tokenize:B3,previous:H1},q1={name:"protocolAutolink",tokenize:P3,previous:I1},ai={name:"emailAutolink",tokenize:U3,previous:F1},Dr={};function z3(){return{text:Dr}}let hs=48;for(;hs<123;)Dr[hs]=ai,hs++,hs===58?hs=65:hs===91&&(hs=97);Dr[43]=ai;Dr[45]=ai;Dr[46]=ai;Dr[95]=ai;Dr[72]=[ai,q1];Dr[104]=[ai,q1];Dr[87]=[ai,P1];Dr[119]=[ai,P1];function U3(e,t,r){const s=this;let l,u;return c;function c(g){return!kd(g)||!F1.call(s,s.previous)||lm(s.events)?r(g):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),f(g))}function f(g){return kd(g)?(e.consume(g),f):g===64?(e.consume(g),d):r(g)}function d(g){return g===46?e.check(L3,y,m)(g):g===45||g===95||pn(g)?(u=!0,e.consume(g),d):y(g)}function m(g){return e.consume(g),l=!0,d}function y(g){return u&&l&&kn(s.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(g)):r(g)}}function B3(e,t,r){const s=this;return l;function l(c){return c!==87&&c!==119||!H1.call(s,s.previous)||lm(s.events)?r(c):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(D3,e.attempt(z1,e.attempt(U1,u),r),r)(c))}function u(c){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(c)}}function P3(e,t,r){const s=this;let l="",u=!1;return c;function c(g){return(g===72||g===104)&&I1.call(s,s.previous)&&!lm(s.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),l+=String.fromCodePoint(g),e.consume(g),f):r(g)}function f(g){if(kn(g)&&l.length<5)return l+=String.fromCodePoint(g),e.consume(g),f;if(g===58){const x=l.toLowerCase();if(x==="http"||x==="https")return e.consume(g),d}return r(g)}function d(g){return g===47?(e.consume(g),u?m:(u=!0,d)):r(g)}function m(g){return g===null||Bu(g)||Nt(g)||gs(g)||Qu(g)?r(g):e.attempt(z1,e.attempt(U1,y),r)(g)}function y(g){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(g)}}function q3(e,t,r){let s=0;return l;function l(c){return(c===87||c===119)&&s<3?(s++,e.consume(c),l):c===46&&s===3?(e.consume(c),u):r(c)}function u(c){return c===null?r(c):t(c)}}function H3(e,t,r){let s,l,u;return c;function c(m){return m===46||m===95?e.check(B1,d,f)(m):m===null||Nt(m)||gs(m)||m!==45&&Qu(m)?d(m):(u=!0,e.consume(m),c)}function f(m){return m===95?s=!0:(l=s,s=void 0),e.consume(m),c}function d(m){return l||s||!u?r(m):t(m)}}function I3(e,t){let r=0,s=0;return l;function l(c){return c===40?(r++,e.consume(c),l):c===41&&s<r?u(c):c===33||c===34||c===38||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===60||c===63||c===93||c===95||c===126?e.check(B1,t,u)(c):c===null||Nt(c)||gs(c)?t(c):(e.consume(c),l)}function u(c){return c===41&&s++,e.consume(c),l}}function F3(e,t,r){return s;function s(f){return f===33||f===34||f===39||f===41||f===42||f===44||f===46||f===58||f===59||f===63||f===95||f===126?(e.consume(f),s):f===38?(e.consume(f),u):f===93?(e.consume(f),l):f===60||f===null||Nt(f)||gs(f)?t(f):r(f)}function l(f){return f===null||f===40||f===91||Nt(f)||gs(f)?t(f):s(f)}function u(f){return kn(f)?c(f):r(f)}function c(f){return f===59?(e.consume(f),s):kn(f)?(e.consume(f),c):r(f)}}function $3(e,t,r){return s;function s(u){return e.consume(u),l}function l(u){return pn(u)?r(u):t(u)}}function H1(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Nt(e)}function I1(e){return!kn(e)}function F1(e){return!(e===47||kd(e))}function kd(e){return e===43||e===45||e===46||e===95||pn(e)}function lm(e){let t=e.length,r=!1;for(;t--;){const s=e[t][1];if((s.type==="labelLink"||s.type==="labelImage")&&!s._balanced){r=!0;break}if(s._gfmAutolinkLiteralWalkedInto){r=!1;break}}return e.length>0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const Y3={tokenize:W3,partial:!0};function G3(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:K3,continuation:{tokenize:Q3},exit:Z3}},text:{91:{name:"gfmFootnoteCall",tokenize:X3},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:V3,resolveTo:J3}}}}function V3(e,t,r){const s=this;let l=s.events.length;const u=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let c;for(;l--;){const d=s.events[l][1];if(d.type==="labelImage"){c=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return f;function f(d){if(!c||!c._balanced)return r(d);const m=wr(s.sliceSerialize({start:c.end,end:s.now()}));return m.codePointAt(0)!==94||!u.includes(m.slice(1))?r(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),t(d))}}function J3(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const s={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},l={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};l.end.column++,l.end.offset++,l.end._bufferIndex++;const u={type:"gfmFootnoteCallString",start:Object.assign({},l.end),end:Object.assign({},e[e.length-1][1].start)},c={type:"chunkString",contentType:"string",start:Object.assign({},u.start),end:Object.assign({},u.end)},f=[e[r+1],e[r+2],["enter",s,t],e[r+3],e[r+4],["enter",l,t],["exit",l,t],["enter",u,t],["enter",c,t],["exit",c,t],["exit",u,t],e[e.length-2],e[e.length-1],["exit",s,t]];return e.splice(r,e.length-r+1,...f),e}function X3(e,t,r){const s=this,l=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let u=0,c;return f;function f(g){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),d}function d(g){return g!==94?r(g):(e.enter("gfmFootnoteCallMarker"),e.consume(g),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(g){if(u>999||g===93&&!c||g===null||g===91||Nt(g))return r(g);if(g===93){e.exit("chunkString");const x=e.exit("gfmFootnoteCallString");return l.includes(wr(s.sliceSerialize(x)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(g)}return Nt(g)||(c=!0),u++,e.consume(g),g===92?y:m}function y(g){return g===91||g===92||g===93?(e.consume(g),u++,m):m(g)}}function K3(e,t,r){const s=this,l=s.parser.gfmFootnotes||(s.parser.gfmFootnotes=[]);let u,c=0,f;return d;function d(S){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionLabelMarker"),m}function m(S){return S===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",y):r(S)}function y(S){if(c>999||S===93&&!f||S===null||S===91||Nt(S))return r(S);if(S===93){e.exit("chunkString");const T=e.exit("gfmFootnoteDefinitionLabelString");return u=wr(s.sliceSerialize(T)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(S),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),x}return Nt(S)||(f=!0),c++,e.consume(S),S===92?g:y}function g(S){return S===91||S===92||S===93?(e.consume(S),c++,y):y(S)}function x(S){return S===58?(e.enter("definitionMarker"),e.consume(S),e.exit("definitionMarker"),l.includes(u)||l.push(u),ct(e,w,"gfmFootnoteDefinitionWhitespace")):r(S)}function w(S){return t(S)}}function Q3(e,t,r){return e.check(Vl,t,e.attempt(Y3,t,r))}function Z3(e){e.exit("gfmFootnoteDefinition")}function W3(e,t,r){const s=this;return ct(e,l,"gfmFootnoteDefinitionIndent",5);function l(u){const c=s.events[s.events.length-1];return c&&c[1].type==="gfmFootnoteDefinitionIndent"&&c[2].sliceSerialize(c[1],!0).length===4?t(u):r(u)}}function eO(e){let r=(e||{}).singleTilde;const s={name:"strikethrough",tokenize:u,resolveAll:l};return r==null&&(r=!0),{text:{126:s},insideSpan:{null:[s]},attentionMarkers:{null:[126]}};function l(c,f){let d=-1;for(;++d<c.length;)if(c[d][0]==="enter"&&c[d][1].type==="strikethroughSequenceTemporary"&&c[d][1]._close){let m=d;for(;m--;)if(c[m][0]==="exit"&&c[m][1].type==="strikethroughSequenceTemporary"&&c[m][1]._open&&c[d][1].end.offset-c[d][1].start.offset===c[m][1].end.offset-c[m][1].start.offset){c[d][1].type="strikethroughSequence",c[m][1].type="strikethroughSequence";const y={type:"strikethrough",start:Object.assign({},c[m][1].start),end:Object.assign({},c[d][1].end)},g={type:"strikethroughText",start:Object.assign({},c[m][1].end),end:Object.assign({},c[d][1].start)},x=[["enter",y,f],["enter",c[m][1],f],["exit",c[m][1],f],["enter",g,f]],w=f.parser.constructs.insideSpan.null;w&&Vn(x,x.length,0,Zu(w,c.slice(m+1,d),f)),Vn(x,x.length,0,[["exit",g,f],["enter",c[d][1],f],["exit",c[d][1],f],["exit",y,f]]),Vn(c,m-1,d-m+3,x),d=m+x.length-2;break}}for(d=-1;++d<c.length;)c[d][1].type==="strikethroughSequenceTemporary"&&(c[d][1].type="data");return c}function u(c,f,d){const m=this.previous,y=this.events;let g=0;return x;function x(S){return m===126&&y[y.length-1][1].type!=="characterEscape"?d(S):(c.enter("strikethroughSequenceTemporary"),w(S))}function w(S){const T=ba(m);if(S===126)return g>1?d(S):(c.consume(S),g++,w);if(g<2&&!r)return d(S);const z=c.exit("strikethroughSequenceTemporary"),D=ba(S);return z._open=!D||D===2&&!!T,z._close=!T||T===2&&!!D,f(S)}}}class tO{constructor(){this.map=[]}add(t,r,s){nO(this,t,r,s)}consume(t){if(this.map.sort(function(u,c){return u[0]-c[0]}),this.map.length===0)return;let r=this.map.length;const s=[];for(;r>0;)r-=1,s.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];s.push(t.slice()),t.length=0;let l=s.pop();for(;l;){for(const u of l)t.push(u);l=s.pop()}this.map.length=0}}function nO(e,t,r,s){let l=0;if(!(r===0&&s.length===0)){for(;l<e.map.length;){if(e.map[l][0]===t){e.map[l][1]+=r,e.map[l][2].push(...s);return}l+=1}e.map.push([t,r,s])}}function rO(e,t){let r=!1;const s=[];for(;t<e.length;){const l=e[t];if(r){if(l[0]==="enter")l[1].type==="tableContent"&&s.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(l[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const u=s.length-1;s[u]=s[u]==="left"?"center":"right"}}else if(l[1].type==="tableDelimiterRow")break}else l[0]==="enter"&&l[1].type==="tableDelimiterRow"&&(r=!0);t+=1}return s}function iO(){return{flow:{null:{name:"table",tokenize:sO,resolveAll:aO}}}}function sO(e,t,r){const s=this;let l=0,u=0,c;return f;function f(R){let G=s.events.length-1;for(;G>-1;){const ie=s.events[G][1].type;if(ie==="lineEnding"||ie==="linePrefix")G--;else break}const J=G>-1?s.events[G][1].type:null,fe=J==="tableHead"||J==="tableRow"?L:d;return fe===L&&s.parser.lazy[s.now().line]?r(R):fe(R)}function d(R){return e.enter("tableHead"),e.enter("tableRow"),m(R)}function m(R){return R===124||(c=!0,u+=1),y(R)}function y(R){return R===null?r(R):Pe(R)?u>1?(u=0,s.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),w):r(R):st(R)?ct(e,y,"whitespace")(R):(u+=1,c&&(c=!1,l+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),c=!0,y):(e.enter("data"),g(R)))}function g(R){return R===null||R===124||Nt(R)?(e.exit("data"),y(R)):(e.consume(R),R===92?x:g)}function x(R){return R===92||R===124?(e.consume(R),g):g(R)}function w(R){return s.interrupt=!1,s.parser.lazy[s.now().line]?r(R):(e.enter("tableDelimiterRow"),c=!1,st(R)?ct(e,S,"linePrefix",s.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):S(R))}function S(R){return R===45||R===58?z(R):R===124?(c=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),T):B(R)}function T(R){return st(R)?ct(e,z,"whitespace")(R):z(R)}function z(R){return R===58?(u+=1,c=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),D):R===45?(u+=1,D(R)):R===null||Pe(R)?oe(R):B(R)}function D(R){return R===45?(e.enter("tableDelimiterFiller"),q(R)):B(R)}function q(R){return R===45?(e.consume(R),q):R===58?(c=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),F):(e.exit("tableDelimiterFiller"),F(R))}function F(R){return st(R)?ct(e,oe,"whitespace")(R):oe(R)}function oe(R){return R===124?S(R):R===null||Pe(R)?!c||l!==u?B(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):B(R)}function B(R){return r(R)}function L(R){return e.enter("tableRow"),W(R)}function W(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),W):R===null||Pe(R)?(e.exit("tableRow"),t(R)):st(R)?ct(e,W,"whitespace")(R):(e.enter("data"),$(R))}function $(R){return R===null||R===124||Nt(R)?(e.exit("data"),W(R)):(e.consume(R),R===92?H:$)}function H(R){return R===92||R===124?(e.consume(R),$):$(R)}}function aO(e,t){let r=-1,s=!0,l=0,u=[0,0,0,0],c=[0,0,0,0],f=!1,d=0,m,y,g;const x=new tO;for(;++r<e.length;){const w=e[r],S=w[1];w[0]==="enter"?S.type==="tableHead"?(f=!1,d!==0&&(Ub(x,t,d,m,y),y=void 0,d=0),m={type:"table",start:Object.assign({},S.start),end:Object.assign({},S.end)},x.add(r,0,[["enter",m,t]])):S.type==="tableRow"||S.type==="tableDelimiterRow"?(s=!0,g=void 0,u=[0,0,0,0],c=[0,r+1,0,0],f&&(f=!1,y={type:"tableBody",start:Object.assign({},S.start),end:Object.assign({},S.end)},x.add(r,0,[["enter",y,t]])),l=S.type==="tableDelimiterRow"?2:y?3:1):l&&(S.type==="data"||S.type==="tableDelimiterMarker"||S.type==="tableDelimiterFiller")?(s=!1,c[2]===0&&(u[1]!==0&&(c[0]=c[1],g=bu(x,t,u,l,void 0,g),u=[0,0,0,0]),c[2]=r)):S.type==="tableCellDivider"&&(s?s=!1:(u[1]!==0&&(c[0]=c[1],g=bu(x,t,u,l,void 0,g)),u=c,c=[u[1],r,0,0])):S.type==="tableHead"?(f=!0,d=r):S.type==="tableRow"||S.type==="tableDelimiterRow"?(d=r,u[1]!==0?(c[0]=c[1],g=bu(x,t,u,l,r,g)):c[1]!==0&&(g=bu(x,t,c,l,r,g)),l=0):l&&(S.type==="data"||S.type==="tableDelimiterMarker"||S.type==="tableDelimiterFiller")&&(c[3]=r)}for(d!==0&&Ub(x,t,d,m,y),x.consume(t.events),r=-1;++r<t.events.length;){const w=t.events[r];w[0]==="enter"&&w[1].type==="table"&&(w[1]._align=rO(t.events,r))}return e}function bu(e,t,r,s,l,u){const c=s===1?"tableHeader":s===2?"tableDelimiter":"tableData",f="tableContent";r[0]!==0&&(u.end=Object.assign({},ia(t.events,r[0])),e.add(r[0],0,[["exit",u,t]]));const d=ia(t.events,r[1]);if(u={type:c,start:Object.assign({},d),end:Object.assign({},d)},e.add(r[1],0,[["enter",u,t]]),r[2]!==0){const m=ia(t.events,r[2]),y=ia(t.events,r[3]),g={type:f,start:Object.assign({},m),end:Object.assign({},y)};if(e.add(r[2],0,[["enter",g,t]]),s!==2){const x=t.events[r[2]],w=t.events[r[3]];if(x[1].end=Object.assign({},w[1].end),x[1].type="chunkText",x[1].contentType="text",r[3]>r[2]+1){const S=r[2]+1,T=r[3]-r[2]-1;e.add(S,T,[])}}e.add(r[3]+1,0,[["exit",g,t]])}return l!==void 0&&(u.end=Object.assign({},ia(t.events,l)),e.add(l,0,[["exit",u,t]]),u=void 0),u}function Ub(e,t,r,s,l){const u=[],c=ia(t.events,r);l&&(l.end=Object.assign({},c),u.push(["exit",l,t])),s.end=Object.assign({},c),u.push(["exit",s,t]),e.add(r+1,0,u)}function ia(e,t){const r=e[t],s=r[0]==="enter"?"start":"end";return r[1][s]}const lO={name:"tasklistCheck",tokenize:uO};function oO(){return{text:{91:lO}}}function uO(e,t,r){const s=this;return l;function l(d){return s.previous!==null||!s._gfmTasklistFirstContentOfListItem?r(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),u)}function u(d){return Nt(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),c):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),c):r(d)}function c(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),f):r(d)}function f(d){return Pe(d)?t(d):st(d)?e.check({tokenize:cO},t,r)(d):r(d)}}function cO(e,t,r){return ct(e,s,"whitespace");function s(l){return l===null?r(l):t(l)}}function fO(e){return Wx([z3(),G3(),eO(e),iO(),oO()])}const hO={};function Bb(e){const t=this,r=e||hO,s=t.data(),l=s.micromarkExtensions||(s.micromarkExtensions=[]),u=s.fromMarkdownExtensions||(s.fromMarkdownExtensions=[]),c=s.toMarkdownExtensions||(s.toMarkdownExtensions=[]);l.push(fO(r)),u.push(R3()),c.push(M3(r))}function dO(e){v1(e,[/\r?\n|\r/g,mO])}function mO(){return{type:"break"}}function Pb(){return function(e){dO(e)}}function pO({connected:e,hostId:t,request:r,subscribeEvents:s,taskId:l,runId:u}){const c=Mr(),f=Id(),[d,m]=j.useState(!0),[y,g]=j.useState([]),[x,w]=j.useState(),[S,T]=j.useState(),z=x==="started"||x==="monitoring",D=x==="followup",q=x==="started"||x==="followup",[F,oe]=j.useState(null);dd(F!==null,()=>oe(null));const[B,L]=j.useState(!1),[W,$]=j.useState(""),[H,R]=j.useState(!1),G=j.useRef(null),J=j.useRef(null),fe=j.useRef(null),[ie,ee]=j.useState(u==="latest"?void 0:u),P=u==="latest"&&ie===null;j.useEffect(()=>{if(u!=="latest"){ee(u);return}e&&(ee(void 0),r("taskrun.list",{task_id:l,limit:1}).then(E=>{var K,A;return ee(((A=(K=E.entries)==null?void 0:K[0])==null?void 0:A.run_id)??null)}).catch(()=>ee(null)))},[u,l,e,r]);async function X(){if(ie)try{const E=await r("task.result",{id:l,run_id:ie});if(E.error){console.error("No result:",E.error),c(t?`/hosts/${encodeURIComponent(t)}`:"/",{replace:!0});return}g(E.messages??[]),w(E.running_state),T(E.agent)}catch(E){console.error("Failed to load result:",E),c(t?`/hosts/${encodeURIComponent(t)}`:"/",{replace:!0})}finally{m(!1)}}async function ae(E){var K;if(ie)try{const be=(K=(await r("task.reports",{id:l,run_id:ie,report_files:[E]})).reports)==null?void 0:K[0];be!=null&&be.data_url?oe({file:E,data_url:be.data_url}):oe({file:E,content:(be==null?void 0:be.content)??"Report not found."})}catch{oe({file:E,content:"Failed to load report."})}}j.useEffect(()=>{!e||!ie||(m(!0),X())},[e,l,ie]),j.useEffect(()=>!e||!t||!ie?void 0:s(t,async K=>{try{const A=JSON.parse(new TextDecoder().decode(K.data));if(A.event_type!=="running-state"&&A.event_type!=="result-updated"||K.subject.split(".").pop()!==l||A.event_type==="result-updated"&&A.run_id&&A.run_id!==ie)return;X()}catch{}}),[e,t,l,ie,s,r]),j.useEffect(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight)},[y]),j.useEffect(()=>{d||P||!ie||fe.current!==ie&&(fe.current=ie,requestAnimationFrame(()=>{G.current&&(G.current.scrollTop=G.current.scrollHeight),window.scrollTo({top:document.documentElement.scrollHeight,behavior:"auto"})}))},[d,P,ie]);function pe(E){if(E==="input")return"User Input";if(E==="permission")return"Permission";if(E==="confirmation")return"Confirmation"}function M(E){return E==="started"?"Task started":E==="finished"?"Task finished":E==="failed"?"Task failed":E==="error"?"Command failed":E==="aborted"?"Task aborted":E==="confirmation"?"Task confirmed":E==="stopped"?"Follow-up stopped":E??""}return b.jsxs("div",{className:"run-detail",children:[b.jsxs("button",{className:"run-detail-back",onClick:()=>c(-1),children:[b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:b.jsx("path",{d:"M15 18l-6-6 6-6"})}),"Back"]}),P?b.jsxs("div",{className:"empty-state",children:[b.jsx("p",{className:"empty-state-text",children:"No runs yet"}),b.jsx("p",{className:"empty-state-hint",children:"This task hasn't been executed yet. Run it from the task menu or wait for its next trigger."})]}):d?b.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-sm)",padding:"var(--space-sm) 0"},children:[b.jsx("div",{className:"skeleton-line",style:{width:"40%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"55%"}}),b.jsx("div",{className:"skeleton-line",style:{width:"100%",height:"8rem",marginTop:"var(--space-sm)"}})]}):b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"chat-thread",ref:G,children:[y.map((E,K)=>{const A=q&&E.role==="assistant"&&!y.slice(K+1).some(be=>be.role==="assistant"||be.role==="user");return E.role==="status"&&E.type==="monitoring"?null:E.role==="status"?b.jsxs("div",{className:`chat-status${E.type==="error"?" chat-status--error":""}`,children:[b.jsxs("div",{children:[M(E.type),E.time>0&&b.jsx("span",{className:"chat-status-time",children:f(E.time)})]}),E.content&&b.jsx("pre",{className:"chat-status-detail",children:E.content})]},K):b.jsxs("div",{className:`chat-message chat-message--${E.role}`,children:[E.role==="assistant"&&S&&b.jsx("div",{className:"chat-message-agent",children:hd(S)}),b.jsxs("div",{className:"chat-message-content",children:[b.jsx(Nb,{remarkPlugins:[Bb,Pb],children:E.content}),A&&b.jsxs("div",{className:"chat-typing-indicator",children:[b.jsx("span",{}),b.jsx("span",{}),b.jsx("span",{})]})]}),E.attachments&&E.attachments.length>0&&b.jsx("div",{className:"chat-message-attachments",children:E.attachments.map(be=>b.jsx("button",{className:"chat-attachment-chip",onClick:()=>ae(be),children:be},be))}),b.jsxs("div",{className:"chat-message-meta",children:[pe(E.type)&&b.jsx("span",{className:"chat-message-type",children:pe(E.type)}),E.time>0&&b.jsx("span",{children:f(E.time)})]})]},K)}),q&&(()=>{const E=y.filter(K=>K.role!=="status");return E.length===0||E[E.length-1].role!=="assistant"})()&&b.jsxs("div",{className:"chat-message chat-message--assistant",children:[S&&b.jsx("div",{className:"chat-message-agent",children:hd(S)}),b.jsxs("div",{className:"chat-typing-indicator",children:[b.jsx("span",{}),b.jsx("span",{}),b.jsx("span",{})]})]}),x==="monitoring"&&b.jsxs("div",{className:"chat-monitoring-indicator",children:[b.jsx("span",{className:"chat-monitoring-dot"}),"Monitoring command output"]})]}),z?b.jsx("div",{className:"chat-abort-bar",children:b.jsx("button",{className:"btn btn-secondary chat-abort-btn",disabled:B,onClick:async()=>{if(confirm("Abort this task?")){L(!0);try{await r("task.abort",{id:l})}catch(E){console.error("Abort failed:",E)}finally{L(!1)}}},children:B?"Aborting...":"Abort Task"})}):D?b.jsx("div",{className:"chat-input-bar",children:b.jsx("button",{className:"btn btn-secondary chat-stop-btn",disabled:B,onClick:async()=>{L(!0);try{await r("task.stop_followup",{id:l,run_id:ie})}catch(E){console.error("Stop failed:",E)}finally{L(!1)}},children:b.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:b.jsx("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})})})}):b.jsxs("form",{className:"chat-input-bar",onSubmit:async E=>{E.preventDefault();const K=W.trim();if(!(!K||H)){R(!0);try{await r("task.followup",{id:l,run_id:ie,message:K}),$("")}catch(A){console.error("Follow-up failed:",A)}finally{R(!1)}}},children:[b.jsx("input",{ref:J,className:"chat-input",type:"text",placeholder:"Follow-up message",value:W,onChange:E=>$(E.target.value),disabled:H}),b.jsx("button",{className:"btn btn-primary chat-send-btn",type:"submit",disabled:!W.trim()||H,children:b.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),b.jsx("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})})]})]}),F&&b.jsx("div",{className:"report-dialog-overlay",onClick:()=>oe(null),children:b.jsxs("div",{className:"report-dialog",onClick:E=>E.stopPropagation(),children:[b.jsxs("div",{className:"report-dialog-header",children:[b.jsx("span",{className:"report-dialog-title",children:F.file}),b.jsx("button",{className:"report-dialog-close",onClick:()=>oe(null),"aria-label":"Close",children:b.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),b.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),b.jsx("div",{className:"report-dialog-body",children:F.data_url?b.jsx("img",{src:F.data_url,alt:F.file,style:{maxWidth:"100%",height:"auto"}}):b.jsx(Nb,{remarkPlugins:[Bb,Pb],components:{a:({...E})=>b.jsx("a",{...E,target:"_blank",rel:"noopener noreferrer"})},children:F.content??""})})]})})]})}function gO(){const{activeHost:e}=si(),t=j.useRef(null);j.useEffect(()=>{if(Xn.isNativePlatform()||e.directUrl||t.current===e.hostId)return;async function r(){var s;try{if(!("serviceWorker"in navigator)||!("PushManager"in window)){console.warn("[Push] Push notifications not supported");return}const l=await navigator.serviceWorker.ready;(s=l.active)==null||s.postMessage({type:"set-host-id",hostId:e.hostId});let u=await l.pushManager.getSubscription();if(!u){const{publicKey:f}=await hE("/api/push/vapid-key");if(!f){console.warn("[Push] No VAPID public key configured on server");return}if(await Notification.requestPermission()!=="granted"){console.log("[Push] Permission denied");return}u=await l.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:f})}const c=u.toJSON();await fE("/api/push/subscribe",{hostId:e.hostId,endpoint:c.endpoint,keys:{p256dh:c.keys.p256dh,auth:c.keys.auth}}),t.current=e.hostId}catch(l){console.error("[Push] Subscription failed:",l)}}r()},[e])}const yO="0.9.2";function bO(e,t){if(e.includes("-"))return!1;const r=e.split(".").map(Number),s=t.split(".").map(Number);for(let l=0;l<3;l++){if((r[l]??0)<(s[l]??0))return!0;if((r[l]??0)>(s[l]??0))return!1}return!1}function xu(){const{removePairedHost:e,setHostLanUrl:t,setHostTimezone:r}=Hi(),{connected:s,request:l,subscribeEvents:u,unauthorized:c,activeHost:f}=si(),d=f.hostId,m=f.clientToken||null,y=Mr(),g=cr(),x=$u(),w=Ux("(min-width: 768px)"),S=g.pathname.endsWith("/tasks"),T=x.runId?void 0:x.taskId,z=!!(x.taskId&&x.runId),[D,q]=j.useState(!1),[F,oe]=j.useState(!1),[B,L]=j.useState(null),[W,$]=j.useState(null),[H,R]=j.useState(null),[G,J]=j.useState(new Set),[fe,ie]=j.useState([]),[ee,P]=j.useState(),X=!!m&&H===m,[ae,pe]=j.useState(new Map),[M,E]=j.useState(new Map),[K,A]=j.useState(new Map),[be,je]=j.useState(new Map);gO(),j.useEffect(()=>{window.scrollTo(0,0)},[d]),j.useEffect(()=>{let ze=!1;return zE().then(Ae=>{ze||J(Ae)}),()=>{ze=!0}},[]),j.useEffect(()=>{s&&l("host.info").then(ze=>{var We,Fe,et,ft,ht,Wt;ie(ze.agents??[]),P(ze.host_platform),R(ze.linked_client_token??null),xE(ze.agents??[]);const Ae=ze.version??null;$(Ae),q(!!Ae&&bO(Ae,yO)),t(d,ze.lan_url??void 0),r(d,ze.host_timezone);const Le=new Map,nt=new Map,Ve=new Map,Je=new Map;for(const $e of ze.pending_prompts??[])if($e.type==="confirmation")Le.set($e.key,{description:((We=$e.meta)==null?void 0:We.description)??"",sessionName:(Fe=$e.meta)==null?void 0:Fe.session_name});else if($e.type==="permission")nt.set($e.key,{permissions:$e.params??[],sessionName:(et=$e.meta)==null?void 0:et.session_name});else if($e.type==="input"){const yn=$e.params??((ft=$e.meta)==null?void 0:ft.input_questions)??[];Ve.set($e.key,{questions:yn,description:(ht=$e.meta)==null?void 0:ht.description,sessionName:(Wt=$e.meta)==null?void 0:Wt.session_name}),Je.set($e.key,new Array(yn.length).fill(""))}pe(Le),E(nt),A(Ve),je(Je)}).catch(()=>{})},[s,d,l,t,r]),j.useEffect(()=>s?u(d,Ae=>{const Le=Ae.subject.split(".");if(Le.length<3)return;const nt=Le.slice(2).join(".");let Ve={};try{Ve=JSON.parse(new TextDecoder().decode(Ae.data))}catch{return}const Je=Ve.event_type,We=Ve.session_id;if(Je==="input-request"&&We){const Fe=Ve.input_questions,et=Ve.session_name,ft=Ve.description;Fe!=null&&Fe.length&&(A(ht=>{if(ht.has(We))return ht;const Wt=new Map(ht);return Wt.set(We,{questions:Fe,description:ft,sessionName:et}),Wt}),je(ht=>{if(ht.has(We))return ht;const Wt=new Map(ht);return Wt.set(We,new Array(Fe.length).fill("")),Wt}));return}if(Je==="input-resolved"&&We){A(Fe=>{if(!Fe.has(We))return Fe;const et=new Map(Fe);return et.delete(We),et}),je(Fe=>{const et=new Map(Fe);return et.delete(We),et});return}if(Je==="confirm-request"&&We){const Fe=Ve.description,et=Ve.session_name;Fe&&pe(ft=>{if(ft.has(We))return ft;const ht=new Map(ft);return ht.set(We,{description:Fe,sessionName:et}),ht});return}if(Je==="confirm-resolved"&&We){pe(Fe=>{if(!Fe.has(We))return Fe;const et=new Map(Fe);return et.delete(We),et});return}if(Je==="permission-request"){const Fe=Ve.required_permissions,et=Ve.session_name;Fe!=null&&Fe.length&&E(ft=>{if(ft.has(nt))return ft;const ht=new Map(ft);return ht.set(nt,{permissions:Fe,sessionName:et}),ht});return}if(Je==="permission-resolved"){E(Fe=>{if(!Fe.has(nt))return Fe;const et=new Map(Fe);return et.delete(nt),et});return}}):void 0,[s,d,u]);async function _e(ze,Ae){try{await l("task.user_input",{id:ze,value:[Ae]})}catch(Le){console.error("[Dashboard] Failed to respond to confirmation:",Le)}}async function Me(ze,Ae){try{await l("task.user_input",{id:ze,value:[Ae]})}catch(Le){console.error("[Dashboard] Failed to respond to permission request:",Le)}}async function Ie(ze,Ae){try{await l("task.user_input",{id:ze,value:Ae})}catch(Le){console.error("[Dashboard] Failed to respond to input request:",Le)}}function ke(ze,Ae){if(!ps())return;const Le=`/hosts/${encodeURIComponent(d)}/runs/${encodeURIComponent(ze)}`;y(Ae?`${Le}/${encodeURIComponent(Ae)}`:Le)}async function Ge(){oe(!0),L(null);try{const ze=await l("host.update");if(ze.error){L(ze.error),oe(!1);return}}catch{}setTimeout(()=>window.location.reload(),15e3)}const Ft=s&&!c;return b.jsxs("div",{className:"dashboard",children:[w&&b.jsx($0,{daemonVersion:W,linkedClientToken:H,request:l,onEnabledCapabilitiesChange:J,onLinkedClientTokenChange:R}),b.jsxs("div",{className:"dashboard-content",children:[b.jsxs("header",{className:"app-header",children:[b.jsxs("div",{className:"app-title-bar",children:[!w&&b.jsx($0,{daemonVersion:W,linkedClientToken:H,request:l,onEnabledCapabilitiesChange:J,onLinkedClientTokenChange:R}),b.jsx("h1",{className:"app-title",children:"Palmier"}),b.jsx(HE,{})]}),b.jsx("div",{className:"tab-bar",children:b.jsx(ME,{})})]}),b.jsx("main",{className:"dashboard-main",children:c?b.jsxs("div",{className:"revoked-state",children:[b.jsx("div",{className:"revoked-icon",children:b.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[b.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),b.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"}),b.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"18"})]})}),b.jsx("h2",{className:"revoked-title",children:"Client Revoked"}),b.jsx("p",{className:"revoked-description",children:"This client was revoked by the host. To reconnect, generate a new pairing code on the host machine."}),b.jsx("div",{className:"revoked-command",children:b.jsx("code",{children:"palmier pair"})}),b.jsxs("div",{className:"revoked-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>{ps()&&y("/pair")},children:"Re-pair Device"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>{e(d),y("/",{replace:!0})},children:"Remove Host"})]})]}):Ft?b.jsxs(b.Fragment,{children:[S&&!z&&b.jsx(RE,{connected:s,hostId:d,request:l,subscribeEvents:u,agents:fe,hostPlatform:ee,isNotificationListener:X&&G.has("notifications"),onViewRun:ke}),z?b.jsx(pO,{connected:s,hostId:d,request:l,subscribeEvents:u,taskId:x.taskId,runId:decodeURIComponent(x.runId)}):S?null:b.jsx(YE,{connected:s,hostId:d,request:l,subscribeEvents:u,agents:fe,hostPlatform:ee,filterTaskId:T,onClearFilter:()=>{ps()&&y(`/hosts/${encodeURIComponent(d)}`)}})]}):b.jsx("div",{className:"empty-state",children:b.jsx("p",{children:"Connecting to host..."})})}),D&&!F&&!B&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Update Required"}),b.jsxs("p",{className:"confirm-modal-message",children:["Your Palmier host",W?` (v${W})`:""," is too old for this version of the app. Please update to continue."]}),b.jsx("div",{className:"confirm-modal-actions",children:b.jsx("button",{className:"btn btn-primary",onClick:Ge,children:"Update Now"})})]})}),F&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Updating..."}),b.jsx("p",{className:"confirm-modal-message",children:"Installing update and restarting daemon. Please wait..."})]})}),B&&b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Update Failed"}),b.jsx("p",{className:"confirm-modal-message",style:{whiteSpace:"pre-line"},children:B}),b.jsx("div",{className:"confirm-modal-actions",children:b.jsx("button",{className:"btn btn-secondary",onClick:()=>{L(null)},children:"Retry"})})]})})]}),ds.createPortal(b.jsxs(b.Fragment,{children:[[...ae.entries()].map(([ze,{description:Ae,sessionName:Le}])=>b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Confirmation Required"}),Le&&b.jsx("p",{className:"confirm-modal-subtitle",children:Le}),b.jsx("p",{className:"confirm-modal-message",children:Ae}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>_e(ze,"confirmed"),children:"Confirm"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>_e(ze,"aborted"),children:"Abort"})]})]})},ze)),[...M.entries()].map(([ze,{permissions:Ae,sessionName:Le}])=>b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal permission-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Permission Required"}),b.jsx("p",{className:"confirm-modal-message",children:b.jsx("strong",{children:Le||ze})}),b.jsx("div",{className:"permission-list",children:Ae.map((nt,Ve)=>b.jsxs("div",{className:"permission-item",children:[b.jsx("span",{className:"permission-name",children:nt.name}),nt.description&&b.jsx("span",{className:"permission-desc",children:nt.description})]},Ve))}),b.jsxs("div",{className:"permission-actions",children:[b.jsx("button",{className:"btn btn-primary",onClick:()=>Me(ze,"granted"),children:"Allow Once"}),b.jsx("button",{className:"btn btn-secondary",onClick:()=>Me(ze,"granted_all"),children:"Allow Always"})]}),b.jsx("button",{className:"permission-abort-link",onClick:()=>Me(ze,"aborted"),children:"Deny & Abort Task"})]})},ze)),[...K.entries()].map(([ze,{questions:Ae,description:Le,sessionName:nt}])=>{const Ve=be.get(ze)??new Array(Ae.length).fill("");return b.jsx("div",{className:"confirm-modal-overlay",children:b.jsxs("div",{className:"confirm-modal input-modal",children:[b.jsx("h2",{className:"confirm-modal-title",children:"Input Required"}),nt&&b.jsx("p",{className:"confirm-modal-subtitle",children:nt}),Le&&b.jsx("p",{className:"confirm-modal-message",children:Le}),b.jsx("div",{className:"input-list",children:Ae.map((Je,We)=>b.jsxs("div",{className:"input-item",children:[b.jsx("label",{className:"input-label",children:Je}),b.jsx("input",{type:"text",className:"input-field",value:Ve[We]??"",onChange:Fe=>{je(et=>{const ft=new Map(et),ht=[...ft.get(ze)??[]];return ht[We]=Fe.target.value,ft.set(ze,ht),ft})},autoFocus:We===0})]},We))}),b.jsx("div",{className:"input-actions",children:b.jsx("button",{className:"btn btn-primary",disabled:Ve.some(Je=>!Je.trim()),onClick:()=>Ie(ze,Ve),children:"Submit"})}),b.jsx("button",{className:"permission-abort-link",onClick:()=>Ie(ze,["aborted"]),children:"Cancel"})]})},ze)})]}),document.body)]})}const xO=ys("Preferences",{web:()=>Hd(()=>import("./web-B4xEa6WO.js"),[]).then(e=>new e.PreferencesWeb)}),kl=!!window.__PALMIER_SERVE__&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),qb=Xn.isNativePlatform();function vO(){const[e,t]=j.useState(""),[r,s]=j.useState(!0),[l,u]=j.useState(!1),[c,f]=j.useState(null),{addPairedHost:d}=Hi(),m=Mr();async function y(){const g=e.trim().toUpperCase();if(!g){f("Enter a pairing code.");return}u(!0),f(null);try{let x;if(kl){const T=await fetch("/pair",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:g,label:navigator.userAgent})});if(!T.ok){const z=await T.json().catch(()=>({error:"Connection failed"}));throw new Error(z.error||`HTTP ${T.status}`)}x=await T.json()}else{const T=await fetch(`${Uu}/api/config`);if(!T.ok)throw new Error("Failed to fetch server config");const z=await T.json();if(!z.natsWsUrl)throw new Error("Server has no NATS WebSocket URL configured");const D=await Nx({servers:z.natsWsUrl,authenticator:wx(z.natsJwt,new TextEncoder().encode(z.natsNkeySeed))}),q=Nu(),F=`pair.${g}`,oe=await D.request(F,q.encode(JSON.stringify({label:navigator.userAgent})),{timeout:1e4});x=JSON.parse(q.decode(oe.data)),await D.close()}const w={hostId:x.hostId,clientToken:x.clientToken,directUrl:kl?window.location.origin:void 0,...x.hostName?{name:x.hostName}:{}};if(d(w),Xn.isNativePlatform()&&mn){await xO.set({key:"hostId",value:x.hostId});try{const{token:T}=await mn.getFcmToken();await fetch(`${Uu}/api/fcm/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hostId:x.hostId,fcmToken:T})})}catch(T){console.warn("FCM token registration failed:",T)}}const S=`/hosts/${encodeURIComponent(x.hostId)}`;m(qb&&r?`${S}/pair/setup`:S)}catch(x){const w=x instanceof Error?x.message:String(x);w.includes("timeout")||w.includes("TIMEOUT")||w.includes("503")||w.toLowerCase().includes("no responders")?f("Code not found or expired. Check the code and try again."):f(w)}finally{u(!1)}}return b.jsx("div",{className:"pair-page",children:b.jsxs("div",{className:"pair-card",children:[b.jsxs("div",{className:"pair-header",children:[b.jsx("h1",{className:"pair-title",children:kl?"Pair":"Pair with Host"}),b.jsx("p",{className:"pair-subtitle",children:kl?"Enter the pairing code shown in your terminal.":"Connect this device to a Palmier host"})]}),!kl&&b.jsxs("div",{className:"pair-instructions",children:[b.jsxs("div",{className:"pair-instruction-block",children:[b.jsx("h3",{className:"pair-instruction-heading",children:"Setting up a new host?"}),b.jsxs("ol",{className:"pair-steps",children:[b.jsxs("li",{children:["Install at least one agent CLI (e.g., ",b.jsx("a",{href:"https://www.palmier.me/agents",target:"_blank",rel:"noopener noreferrer",children:"Claude Code, Gemini CLI, Codex CLI"}),")"]}),b.jsxs("li",{children:["Install Palmier on your host machine.",b.jsx("span",{className:"pair-platform-label",children:"Linux / macOS:"}),b.jsx("code",{className:"pair-command",children:"curl -fsSL https://palmier.me/install.sh | bash"}),b.jsx("span",{className:"pair-platform-label",children:"Windows (PowerShell):"}),b.jsx("code",{className:"pair-command",children:"irm https://palmier.me/install.ps1 | iex"})]}),b.jsxs("li",{children:["Run the setup wizard:",b.jsx("code",{className:"pair-command",children:"palmier init"})]}),b.jsx("li",{children:"A pairing code will display automatically"})]})]}),b.jsx("div",{className:"pair-instruction-divider"}),b.jsxs("div",{className:"pair-instruction-block",children:[b.jsx("h3",{className:"pair-instruction-heading",children:"Pairing an existing host?"}),b.jsxs("ol",{className:"pair-steps",children:[b.jsxs("li",{children:["Run ",b.jsx("code",{children:"palmier pair"})," on the host machine"]}),b.jsx("li",{children:"Enter the 6-character code below"})]})]})]}),b.jsxs("div",{className:"pair-form",children:[b.jsxs("label",{className:"form-label",htmlFor:"pair-code",children:["Pairing code",b.jsx("input",{id:"pair-code",type:"text",maxLength:6,value:e,onChange:g=>t(g.target.value.toUpperCase()),placeholder:"A7K9M2",className:"form-input form-input-mono pair-code-input",autoFocus:!0,autoComplete:"off",disabled:l})]}),qb&&b.jsxs("label",{className:"pair-checkbox",children:[b.jsx("input",{type:"checkbox",checked:r,onChange:g=>s(g.target.checked),disabled:l}),b.jsxs("span",{className:"pair-checkbox-text",children:[b.jsx("span",{className:"pair-checkbox-title",children:"Link the host to this device"}),b.jsx("span",{className:"pair-checkbox-hint",children:r?"The host will use this device for SMS, contacts, calendar, location, and alarms. Only one device can be linked to the host.":"This device won't provide SMS, contacts, calendar, location, or alarms to the host. You can link it later from the menu."})]})]}),c&&b.jsx("p",{className:"pair-error",children:c}),b.jsxs("button",{className:"btn btn-primary btn-full",onClick:y,disabled:l||!e.trim(),children:[l&&b.jsx("span",{className:"btn-spinner"}),l?"Pairing...":"Pair"]}),b.jsx("button",{className:"btn btn-secondary btn-full",onClick:()=>m("/"),disabled:l,children:"Cancel"}),b.jsxs("p",{className:"pair-consent",children:["By pairing, you agree to our"," ",b.jsx("a",{href:"https://www.palmier.me/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," and"," ",b.jsx("a",{href:"https://www.palmier.me/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]})]})]})})}function wO(){const e=Mr(),{connected:t,request:r,activeHost:s}=si(),{setHostLanUrl:l,pairedHosts:u}=Hi(),c=u.length<=1,[f,d]=j.useState("loading"),[m,y]=j.useState(null),[g,x]=j.useState(null);function w(){e(`/hosts/${encodeURIComponent(s.hostId)}`,{replace:!0})}j.useEffect(()=>{if(!t||f!=="loading")return;let q=!1;return r("host.info").catch(()=>({})).then(F=>{if(q)return;l(s.hostId,F.lan_url??void 0);const oe=F.linked_client_token??null;y(oe);const B=!!oe&&oe!==s.clientToken;d(B?"confirming":"linking")}),()=>{q=!0}},[t,f,s,r,l]),j.useEffect(()=>{if(f!=="linking")return;let q=!1;return(async()=>{try{if(mn){const{token:F}=await mn.getFcmToken();if(!F)throw new Error("Could not read FCM token");await r("device.link",{fcmToken:F})}if(q)return;c?d("wizard"):w()}catch(F){if(q)return;x(F instanceof Error?F.message:String(F)),d("linkError")}})(),()=>{q=!0}},[f]);function S(){d("linking")}function T(){w()}function z(){x(null),d("linking")}const D=f==="confirming"&&ds.createPortal(b.jsx("div",{className:"confirm-modal-overlay",onClick:T,children:b.jsxs("div",{className:"confirm-modal",onClick:q=>q.stopPropagation(),children:[b.jsx("h2",{className:"confirm-modal-title",children:"Link the host to this device?"}),b.jsx("p",{className:"confirm-modal-message",children:"Another device is already linked to this host. Only one device can be linked to the host — switching will disable those capabilities on the currently linked device."}),b.jsxs("div",{className:"confirm-modal-actions",children:[b.jsx("button",{className:"btn btn-secondary",onClick:T,children:"Cancel"}),b.jsx("button",{className:"btn btn-primary",onClick:S,children:"Link"})]})]})}),document.body);if(f==="loading"||f==="confirming"||f==="linking"||f==="linkError"){const q=c,F=f==="loading"||f==="confirming"||f==="linking";return b.jsxs("div",{className:"pair-setup",children:[b.jsxs("div",{className:"pair-setup-inner",children:[q&&b.jsx("h1",{className:"pair-setup-title",children:"Device Capabilities"}),b.jsxs("div",{className:"pair-setup-loading",children:[F&&b.jsx("span",{className:"spinner spinner-lg"}),f==="loading"&&b.jsx("span",{children:"Connecting to host…"}),f==="confirming"&&b.jsx("span",{children:"Awaiting confirmation…"}),f==="linking"&&b.jsx("span",{children:"Linking device…"}),f==="linkError"&&b.jsxs(b.Fragment,{children:[b.jsx("p",{className:"pair-error",children:g}),b.jsx("button",{className:"btn btn-primary",onClick:z,children:"Retry"}),b.jsx("button",{className:"btn btn-secondary",onClick:w,children:"Skip linking"})]})]})]}),D]})}return b.jsx("div",{className:"pair-setup",children:b.jsxs("div",{className:"pair-setup-inner",children:[b.jsx("h1",{className:"pair-setup-title",children:"Device Capabilities"}),b.jsx("p",{className:"pair-setup-description",children:"Choose what the host can use this device for. You can change these later from the menu."}),b.jsx(Bx,{}),b.jsx("div",{className:"pair-setup-actions",children:b.jsx("button",{className:"btn btn-primary btn-full",onClick:w,children:"Finish"})})]})})}function SO(){const e=Mr();return j.useEffect(()=>{if(!mn)return;const t=mn.addListener("deepLink",({path:r})=>e(r));return()=>{t.then(r=>r.remove())}},[e]),null}function _O(){const{pairedHosts:e}=Hi();return e.length===0?b.jsx(Ll,{to:"/pair",replace:!0}):b.jsx(Ll,{to:`/hosts/${encodeURIComponent(e[0].hostId)}`,replace:!0})}function kO(){const{hostId:e}=$u(),{pairedHosts:t}=Hi(),r=t.find(s=>s.hostId===e)??null;return r?b.jsx(gE,{activeHost:r,children:b.jsxs(nx,{children:[b.jsx(br,{index:!0,element:b.jsx(xu,{})}),b.jsx(br,{path:"tasks",element:b.jsx(xu,{})}),b.jsx(br,{path:"runs/:taskId",element:b.jsx(xu,{})}),b.jsx(br,{path:"runs/:taskId/:runId",element:b.jsx(xu,{})}),b.jsx(br,{path:"pair/setup",element:b.jsx(wO,{})}),b.jsx(br,{path:"*",element:b.jsx(Ll,{to:".",replace:!0})})]})}):b.jsx(Ll,{to:"/",replace:!0})}function EO(){return b.jsxs(q_,{children:[b.jsx(SO,{}),b.jsxs(nx,{children:[b.jsx(br,{path:"/",element:b.jsx(_O,{})}),b.jsx(br,{path:"/pair",element:b.jsx(vO,{})}),b.jsx(br,{path:"/hosts/:hostId/*",element:b.jsx(kO,{})}),b.jsx(br,{path:"*",element:b.jsx(Ll,{to:"/",replace:!0})})]})]})}lS.createRoot(document.getElementById("root")).render(b.jsx(j.StrictMode,{children:b.jsx(A_,{children:b.jsx(EO,{})})}));export{qd as W};
|