@stacksjs/desktop 0.2.249 → 0.2.251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{$ as iq,$a as iz,A as Zq,Aa as Xz,B as _q,Ba as Yz,C as $q,Ca as Zz,D as jq,Da as _z,E as xq,Ea as $z,F as kq,Fa as jz,G as wq,Ga as xz,H as yq,Ha as kz,I as fq,Ia as wz,J as vq,Ja as yz,K as gq,Ka as fz,L as bq,La as vz,M as mq,Ma as gz,N as dq,Na as bz,O as uq,Oa as mz,P as hq,Pa as dz,Q as pq,Qa as uz,R as lq,Ra as hz,S as cq,Sa as pz,T as nq,Ta as lz,U as rq,Ua as cz,V as aq,Va as nz,W as sq,Wa as rz,X as oq,Xa as az,Ya as sz,Za as oz,_ as tq,_a as tz,a as zq,aa as eq,ab as ez,b as Aq,ba as qz,bb as qA,c as Bq,ca as zz,cb as zA,d as Cq,da as Az,db as AA,e as Dq,ea as Bz,f as Eq,fa as Cz,g as Fq,ga as Dz,h as Gq,ha as Ez,i as Hq,ia as Fz,j as Iq,ja as Gz,k as Jq,ka as Hz,l as Kq,la as Iz,m as Lq,ma as Jz,n as Mq,na as Kz,o as Nq,oa as Lz,p as Oq,pa as Mz,q as Pq,qa as Nz,r as Qq,ra as Oz,s as Rq,sa as Pz,t as Sq,ta as Qz,u as Tq,ua as Rz,v as Uq,va as Sz,w as Vq,wa as Tz,x as Wq,xa as Uz,y as Xq,ya as Vz,z as Yq,za as Wz}from"./chunk-cc1fg1zc.js";import"./chunk-h05t5fn6.js";export{Hz as windowEvents,wz as watchScreenSharing,az as vision,Gz as updater,pq as unregisterHotkey,lq as unregisterAllHotkeys,Qz as touchbar,Az as theme,hz as tags,Jz as standardMenus,nz as spotlight,rz as speechRecognition,Sz as speech,Vz as signPayload,Eq as showWarningToast,Nq as showWarningModal,kq as showWarningDialog,Bq as showToast,Dq as showSuccessToast,Pq as showSuccessModal,Yq as showSaveDialog,Qq as showQuestionModal,Xq as showOpenDialog,Lq as showModal,Zq as showMessageBox,Cq as showInfoToast,Mq as showInfoModal,Fq as showErrorToast,Oq as showErrorModal,xq as showErrorDialog,jq as showConfirmDialog,_q as showColorPicker,$q as showAlertDialog,Aq as showAlert,qz as shell,iz as serviceMenu,ez as serial,kz as screenSharing,_z as screenCapture,Lz as screen,zq as requestNotificationPermission,hq as registerHotkey,Uz as redactPII,Tq as prompt,Oz as printing,Nz as permissions,pz as pdf,dq as parseShortcut,Gq as notify,iq as notifications,Fz as network,Pz as nativeAutoLaunch,sz as midi,Kz as menu,lz as log,Zz as location,gz as localServer,Yz as liveActivities,Mz as keychain,Cz as isDragOutAvailable,vq as isCaffeinated,AA as isAvailable,Wz as iap,fz as hasFocusShortcuts,Xz as handoff,zz as globalShortcuts,cq as getRegisteredHotkeys,wq as getDialogBridgeScript,zA as getCapability,qA as getCapabilities,gq as getCaffeinateStatus,Uq as getActiveModalCount,Jq as getActiveAlertCount,eq as fs,sq as formatTime,uq as formatShortcut,bq as formatRemainingTime,mq as formatDuration,oq as formatCompact,vz as focusShortcutsReady,yz as focus,uz as fileAssociations,Bz as dragOut,Iq as dismissAllAlerts,Hq as dismissAlertById,aq as delay,Dz as deepLinks,fq as decaffeinate,nq as createTimer,rq as createInterval,Tz as crashReporter,oz as coreml,tz as continuityCamera,Rq as confirm,Vq as closeAllModals,tq as clipboard,yq as caffeinate,cz as bonjour,Rz as bluetooth,bz as biometric,Ez as battery,mz as audio,dz as appleScript,Iz as app,Sq as alert,Kq as TOAST_STYLES,Wq as MODAL_STYLES,$z as MIN_WATCH_INTERVAL_MS,jz as MAX_WATCH_INTERVAL_MS,xz as DEFAULT_WATCH_INTERVAL_MS};
2
+ import{$ as iq,$a as iz,A as Zq,Aa as Xz,B as _q,Ba as Yz,C as $q,Ca as Zz,D as jq,Da as _z,E as xq,Ea as $z,F as kq,Fa as jz,G as wq,Ga as xz,H as yq,Ha as kz,I as fq,Ia as wz,J as vq,Ja as yz,K as gq,Ka as fz,L as bq,La as vz,M as mq,Ma as gz,N as dq,Na as bz,O as uq,Oa as mz,P as hq,Pa as dz,Q as pq,Qa as uz,R as lq,Ra as hz,S as cq,Sa as pz,T as nq,Ta as lz,U as rq,Ua as cz,V as aq,Va as nz,W as sq,Wa as rz,X as oq,Xa as az,Ya as sz,Za as oz,_ as tq,_a as tz,a as zq,aa as eq,ab as ez,b as Aq,ba as qz,bb as qA,c as Bq,ca as zz,cb as zA,d as Cq,da as Az,db as AA,e as Dq,ea as Bz,f as Eq,fa as Cz,g as Fq,ga as Dz,h as Gq,ha as Ez,i as Hq,ia as Fz,j as Iq,ja as Gz,k as Jq,ka as Hz,l as Kq,la as Iz,m as Lq,ma as Jz,n as Mq,na as Kz,o as Nq,oa as Lz,p as Oq,pa as Mz,q as Pq,qa as Nz,r as Qq,ra as Oz,s as Rq,sa as Pz,t as Sq,ta as Qz,u as Tq,ua as Rz,v as Uq,va as Sz,w as Vq,wa as Tz,x as Wq,xa as Uz,y as Xq,ya as Vz,z as Yq,za as Wz}from"./chunk-r69bmd7g.js";import"./chunk-h05t5fn6.js";export{Hz as windowEvents,wz as watchScreenSharing,az as vision,Gz as updater,pq as unregisterHotkey,lq as unregisterAllHotkeys,Qz as touchbar,Az as theme,hz as tags,Jz as standardMenus,nz as spotlight,rz as speechRecognition,Sz as speech,Vz as signPayload,Eq as showWarningToast,Nq as showWarningModal,kq as showWarningDialog,Bq as showToast,Dq as showSuccessToast,Pq as showSuccessModal,Yq as showSaveDialog,Qq as showQuestionModal,Xq as showOpenDialog,Lq as showModal,Zq as showMessageBox,Cq as showInfoToast,Mq as showInfoModal,Fq as showErrorToast,Oq as showErrorModal,xq as showErrorDialog,jq as showConfirmDialog,_q as showColorPicker,$q as showAlertDialog,Aq as showAlert,qz as shell,iz as serviceMenu,ez as serial,kz as screenSharing,_z as screenCapture,Lz as screen,zq as requestNotificationPermission,hq as registerHotkey,Uz as redactPII,Tq as prompt,Oz as printing,Nz as permissions,pz as pdf,dq as parseShortcut,Gq as notify,iq as notifications,Fz as network,Pz as nativeAutoLaunch,sz as midi,Kz as menu,lz as log,Zz as location,gz as localServer,Yz as liveActivities,Mz as keychain,Cz as isDragOutAvailable,vq as isCaffeinated,AA as isAvailable,Wz as iap,fz as hasFocusShortcuts,Xz as handoff,zz as globalShortcuts,cq as getRegisteredHotkeys,wq as getDialogBridgeScript,zA as getCapability,qA as getCapabilities,gq as getCaffeinateStatus,Uq as getActiveModalCount,Jq as getActiveAlertCount,eq as fs,sq as formatTime,uq as formatShortcut,bq as formatRemainingTime,mq as formatDuration,oq as formatCompact,vz as focusShortcutsReady,yz as focus,uz as fileAssociations,Bz as dragOut,Iq as dismissAllAlerts,Hq as dismissAlertById,aq as delay,Dz as deepLinks,fq as decaffeinate,nq as createTimer,rq as createInterval,Tz as crashReporter,oz as coreml,tz as continuityCamera,Rq as confirm,Vq as closeAllModals,tq as clipboard,yq as caffeinate,cz as bonjour,Rz as bluetooth,bz as biometric,Ez as battery,mz as audio,dz as appleScript,Iz as app,Sq as alert,Kq as TOAST_STYLES,Wq as MODAL_STYLES,$z as MIN_WATCH_INTERVAL_MS,jz as MAX_WATCH_INTERVAL_MS,xz as DEFAULT_WATCH_INTERVAL_MS};
@@ -3,12 +3,12 @@ function UZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
3
3
  <div class="stx-toast ${z}" data-alert-id="${Z.id}" role="alert" aria-live="polite">
4
4
  <div class="stx-toast-icon">${Y}</div>
5
5
  <div class="stx-toast-content">
6
- ${$.title?`<div class="stx-toast-title">${t($.title)}</div>`:""}
7
- <div class="stx-toast-message">${t($.message)}</div>
6
+ ${$.title?`<div class="stx-toast-title">${e($.title)}</div>`:""}
7
+ <div class="stx-toast-message">${e($.message)}</div>
8
8
  </div>
9
9
  ${G?'<button class="stx-toast-close" aria-label="Close">&times;</button>':""}
10
10
  </div>
11
- `}function t(Z){return Z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function E(Z){if(Z.timeout)clearTimeout(Z.timeout);if(H.delete(Z.id),Z.element&&g())Z.element.classList.add("dismissing"),setTimeout(()=>{Z.element?.remove()},200)}async function e(Z){let $=MZ(),Y=UZ(),z=Z.duration??5000,G={id:$,options:Z};if(H.set($,G),Y&&Z.type!=="error")try{let X=new Notification(Z.title||"Notification",{body:Z.message,icon:Z.type==="success"?"\u2713":Z.type==="warning"?"\u26A0":"\u2139",tag:$});if(X.onclick=()=>{if(Z.onClick)Z.onClick();X.close()},z>0)G.timeout=setTimeout(()=>{X.close(),H.delete($)},z);return}catch{}if(g())try{let X=SZ(Z.position),O=document.createElement("div");O.innerHTML=AZ(G);let P=O.firstElementChild;if(!P){let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}G.element=P;try{X.appendChild(P)}catch{let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}if(typeof requestAnimationFrame==="function")requestAnimationFrame(()=>{try{P.classList.add("visible")}catch{}});try{P.addEventListener("click",(F)=>{if(F.target.classList?.contains("stx-toast-close")){E(G);return}if(Z.onClick)Z.onClick()})}catch{}if(z>0)G.timeout=setTimeout(()=>{E(G)},z)}catch{let X=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`)}else{let X=(Z.type||"info").toUpperCase();if(console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`),z>0)G.timeout=setTimeout(()=>{H.delete($)},z)}}async function C(Z){return e({...Z,position:Z.position||"top-right"})}async function K4(Z,$=3000){return C({message:Z,type:"info",duration:$})}async function R4(Z,$=3000){return C({message:Z,type:"success",duration:$})}async function L4(Z,$=3000){return C({message:Z,type:"warning",duration:$})}async function D4(Z,$=5000){return C({message:Z,type:"error",duration:$})}async function k4(Z,$,Y="info"){return e({title:Z,message:$,type:Y})}function N4(Z){let $=H.get(Z);if($)E($)}function q4(){for(let Z of H.values())E(Z)}function H4(){return H.size}var U4=`
11
+ `}function e(Z){return Z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function E(Z){if(Z.timeout)clearTimeout(Z.timeout);if(H.delete(Z.id),Z.element&&g())Z.element.classList.add("dismissing"),setTimeout(()=>{Z.element?.remove()},200)}async function ZZ(Z){let $=MZ(),Y=UZ(),z=Z.duration??5000,G={id:$,options:Z};if(H.set($,G),Y&&Z.type!=="error")try{let X=new Notification(Z.title||"Notification",{body:Z.message,icon:Z.type==="success"?"\u2713":Z.type==="warning"?"\u26A0":"\u2139",tag:$});if(X.onclick=()=>{if(Z.onClick)Z.onClick();X.close()},z>0)G.timeout=setTimeout(()=>{X.close(),H.delete($)},z);return}catch{}if(g())try{let X=SZ(Z.position),O=document.createElement("div");O.innerHTML=AZ(G);let P=O.firstElementChild;if(!P){let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}G.element=P;try{X.appendChild(P)}catch{let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}if(typeof requestAnimationFrame==="function")requestAnimationFrame(()=>{try{P.classList.add("visible")}catch{}});try{P.addEventListener("click",(F)=>{if(F.target.classList?.contains("stx-toast-close")){E(G);return}if(Z.onClick)Z.onClick()})}catch{}if(z>0)G.timeout=setTimeout(()=>{E(G)},z)}catch{let X=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`)}else{let X=(Z.type||"info").toUpperCase();if(console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`),z>0)G.timeout=setTimeout(()=>{H.delete($)},z)}}async function C(Z){return ZZ({...Z,position:Z.position||"top-right"})}async function K4(Z,$=3000){return C({message:Z,type:"info",duration:$})}async function R4(Z,$=3000){return C({message:Z,type:"success",duration:$})}async function L4(Z,$=3000){return C({message:Z,type:"warning",duration:$})}async function D4(Z,$=5000){return C({message:Z,type:"error",duration:$})}async function k4(Z,$,Y="info"){return ZZ({title:Z,message:$,type:Y})}function N4(Z){let $=H.get(Z);if($)E($)}function q4(){for(let Z of H.values())E(Z)}function H4(){return H.size}var U4=`
12
12
  .stx-toast-container {
13
13
  position: fixed;
14
14
  z-index: 10001;
@@ -115,13 +115,13 @@ function UZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
115
115
  <div class="stx-modal ${G}" role="dialog" aria-modal="true" aria-labelledby="${Z.id}-title">
116
116
  <div class="stx-modal-icon">${Y}</div>
117
117
  <div class="stx-modal-content">
118
- ${$.title?`<h2 id="${Z.id}-title" class="stx-modal-title">${ZZ($.title)}</h2>`:""}
119
- <p class="stx-modal-message">${ZZ($.message)}</p>
118
+ ${$.title?`<h2 id="${Z.id}-title" class="stx-modal-title">${$Z($.title)}</h2>`:""}
119
+ <p class="stx-modal-message">${$Z($.message)}</p>
120
120
  </div>
121
121
  <div class="stx-modal-buttons">${X}</div>
122
122
  </div>
123
123
  </div>
124
- `}function ZZ(Z){return Z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function D(Z,$,Y=!1){let z=U.indexOf(Z);if(z>-1)U.splice(z,1);if(Z.element&&u())Z.element.remove();let X=(Z.options.buttons||I(Z.options.type))[$];if(X?.action)X.action();Z.resolve({buttonIndex:$,cancelled:Y})}async function T(Z){let $=_Z(),Y=xZ();return new Promise((z)=>{let G={id:Y,options:Z,resolve:z};if(U.push(G),$)console.log(`[stx-modal] Showing native modal: ${Z.title||"Modal"}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);else if(u())try{let X=document.createElement("div");X.innerHTML=CZ(G);let O=X.firstElementChild;if(!O){console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);return}G.element=O;try{document.body.appendChild(O)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);return}try{O.querySelectorAll(".stx-modal-btn").forEach((P)=>{P.addEventListener("click",()=>{let F=Number.parseInt(P.dataset.index||"0",10);D(G,F,!1)})})}catch{}try{O.addEventListener("click",(P)=>{if(P.target===O){let F=Z.cancelButton??0;D(G,F,!0)}})}catch{}try{let P=(F)=>{if(F.key==="Escape"){let j=Z.cancelButton??0;D(G,j,!0),document.removeEventListener("keydown",P)}else if(F.key==="Enter"){let j=Z.defaultButton??(Z.buttons||I(Z.type)).length-1;D(G,j,!1),document.removeEventListener("keydown",P)}};document.addEventListener("keydown",P)}catch{}try{let P=O.querySelector(".stx-modal-btn[autofocus]");if(P)P.focus()}catch{}if(typeof process<"u"&&process.env.BUN_TEST)setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}else{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`);let X=Z.buttons||I(Z.type);console.log(`[stx-modal] Buttons: ${X.map((O)=>O.label).join(", ")}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}})}async function IZ(Z,$){return T({title:Z,message:$,type:"info"})}async function T4(Z,$){return T({title:Z,message:$,type:"warning"})}async function S4(Z,$){return T({title:Z,message:$,type:"error"})}async function A4(Z,$){return T({title:Z,message:$,type:"success"})}async function wZ(Z,$){return T({title:Z,message:$,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function _4(Z,$="Confirm"){return(await wZ($,Z)).buttonIndex===1}async function x4(Z,$="Alert"){await IZ($,Z)}async function E4(Z,$="",Y="Input"){if(u()&&typeof window.prompt==="function")return window.prompt(Z,$);return console.log(`[stx-modal] PROMPT: ${Y}`),console.log(`[stx-modal] ${Z}`),console.log(`[stx-modal] Default: ${$}`),$}function C4(){return U.length}function I4(){while(U.length>0){let Z=U[U.length-1];D(Z,0,!0)}}var w4=`
124
+ `}function $Z(Z){return Z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function D(Z,$,Y=!1){let z=U.indexOf(Z);if(z>-1)U.splice(z,1);if(Z.element&&u())Z.element.remove();let X=(Z.options.buttons||I(Z.options.type))[$];if(X?.action)X.action();Z.resolve({buttonIndex:$,cancelled:Y})}async function T(Z){let $=_Z(),Y=xZ();return new Promise((z)=>{let G={id:Y,options:Z,resolve:z};if(U.push(G),$)console.log(`[stx-modal] Showing native modal: ${Z.title||"Modal"}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);else if(u())try{let X=document.createElement("div");X.innerHTML=CZ(G);let O=X.firstElementChild;if(!O){console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);return}G.element=O;try{document.body.appendChild(O)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0);return}try{O.querySelectorAll(".stx-modal-btn").forEach((P)=>{P.addEventListener("click",()=>{let F=Number.parseInt(P.dataset.index||"0",10);D(G,F,!1)})})}catch{}try{O.addEventListener("click",(P)=>{if(P.target===O){let F=Z.cancelButton??0;D(G,F,!0)}})}catch{}try{let P=(F)=>{if(F.key==="Escape"){let j=Z.cancelButton??0;D(G,j,!0),document.removeEventListener("keydown",P)}else if(F.key==="Enter"){let j=Z.defaultButton??(Z.buttons||I(Z.type)).length-1;D(G,j,!1),document.removeEventListener("keydown",P)}};document.addEventListener("keydown",P)}catch{}try{let P=O.querySelector(".stx-modal-btn[autofocus]");if(P)P.focus()}catch{}if(typeof process<"u"&&process.env.BUN_TEST)setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}else{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`);let X=Z.buttons||I(Z.type);console.log(`[stx-modal] Buttons: ${X.map((O)=>O.label).join(", ")}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}})}async function IZ(Z,$){return T({title:Z,message:$,type:"info"})}async function T4(Z,$){return T({title:Z,message:$,type:"warning"})}async function S4(Z,$){return T({title:Z,message:$,type:"error"})}async function A4(Z,$){return T({title:Z,message:$,type:"success"})}async function wZ(Z,$){return T({title:Z,message:$,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function _4(Z,$="Confirm"){return(await wZ($,Z)).buttonIndex===1}async function x4(Z,$="Alert"){await IZ($,Z)}async function E4(Z,$="",Y="Input"){if(u()&&typeof window.prompt==="function")return window.prompt(Z,$);return console.log(`[stx-modal] PROMPT: ${Y}`),console.log(`[stx-modal] ${Z}`),console.log(`[stx-modal] Default: ${$}`),$}function C4(){return U.length}function I4(){while(U.length>0){let Z=U[U.length-1];D(Z,0,!0)}}var w4=`
125
125
  .stx-modal-overlay {
126
126
  position: fixed;
127
127
  inset: 0;
@@ -253,7 +253,7 @@ function UZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
253
253
  background: #555;
254
254
  }
255
255
  }
256
- `;function $Z(Z){let $=new Set(Z.properties??[]);if(Z.canChooseDirectories)$.add("openDirectory");if(Z.canChooseFiles)$.add("openFile");if(Z.multiSelections)$.add("multiSelections");if(Z.showHiddenFiles)$.add("showHiddenFiles");if(Z.canCreateDirectories)$.add("createDirectory");return{...Z,properties:[...$]}}function w(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function f4(Z={}){if(w()){let $=window;try{return await $.craft.dialog.showOpenDialog($Z(Z))}catch(Y){console.warn("[stx-dialog] Failed to show native open dialog:",Y)}}return new Promise(($)=>{if(typeof document>"u"){$({canceled:!0,filePaths:[]});return}let Y=new Set($Z(Z).properties),z=document.createElement("input");if(z.type="file",z.multiple=Y.has("multiSelections"),Z.filters?.length){let G=Z.filters.flatMap((X)=>X.extensions.map((O)=>`.${O}`));z.accept=G.join(",")}if(Y.has("openDirectory")&&!Y.has("openFile"))z.webkitdirectory=!0;z.onchange=()=>{let G=Array.from(z.files||[]);if(G.length===0)$({canceled:!0,filePaths:[]});else{let X=G.map((O)=>O.name);$({canceled:!1,filePaths:X})}},z.oncancel=()=>{$({canceled:!0,filePaths:[]})},z.click()})}async function m4(Z={}){if(w()){let Y=window;try{return await Y.craft.dialog.showSaveDialog(Z)}catch(z){console.warn("[stx-dialog] Failed to show native save dialog:",z)}}if(typeof window<"u"&&"showSaveFilePicker"in window)try{let Y=Z.filters?.map((G)=>({description:G.name,accept:{"*/*":G.extensions.map((X)=>`.${X}`)}}));return{canceled:!1,filePath:(await window.showSaveFilePicker({suggestedName:Z.defaultPath,types:Y})).name}}catch(Y){return{canceled:!0}}console.warn("[stx-dialog] Save dialog not available, using prompt fallback");let $=prompt("Enter filename:",Z.defaultPath||"file.txt");if($)return{canceled:!1,filePath:$};return{canceled:!0}}async function y(Z){if(w()){let O=window;try{return await O.craft.dialog.showMessageBox(Z)}catch(P){console.warn("[stx-dialog] Failed to show native message box:",P)}}let $=Z.buttons||["OK"],Y=Z.detail?`
256
+ `;function JZ(Z){let $=new Set(Z.properties??[]);if(Z.canChooseDirectories)$.add("openDirectory");if(Z.canChooseFiles)$.add("openFile");if(Z.multiSelections)$.add("multiSelections");if(Z.showHiddenFiles)$.add("showHiddenFiles");if(Z.canCreateDirectories)$.add("createDirectory");return{...Z,properties:[...$]}}function w(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function f4(Z={}){if(w()){let $=window;try{return await $.craft.dialog.showOpenDialog(JZ(Z))}catch(Y){console.warn("[stx-dialog] Failed to show native open dialog:",Y)}}return new Promise(($)=>{if(typeof document>"u"){$({canceled:!0,filePaths:[]});return}let Y=new Set(JZ(Z).properties),z=document.createElement("input");if(z.type="file",z.multiple=Y.has("multiSelections"),Z.filters?.length){let G=Z.filters.flatMap((X)=>X.extensions.map((O)=>`.${O}`));z.accept=G.join(",")}if(Y.has("openDirectory")&&!Y.has("openFile"))z.webkitdirectory=!0;z.onchange=()=>{let G=Array.from(z.files||[]);if(G.length===0)$({canceled:!0,filePaths:[]});else{let X=G.map((O)=>O.name);$({canceled:!1,filePaths:X})}},z.oncancel=()=>{$({canceled:!0,filePaths:[]})},z.click()})}async function m4(Z={}){if(w()){let Y=window;try{return await Y.craft.dialog.showSaveDialog(Z)}catch(z){console.warn("[stx-dialog] Failed to show native save dialog:",z)}}if(typeof window<"u"&&"showSaveFilePicker"in window)try{let Y=Z.filters?.map((G)=>({description:G.name,accept:{"*/*":G.extensions.map((X)=>`.${X}`)}}));return{canceled:!1,filePath:(await window.showSaveFilePicker({suggestedName:Z.defaultPath,types:Y})).name}}catch(Y){return{canceled:!0}}console.warn("[stx-dialog] Save dialog not available, using prompt fallback");let $=prompt("Enter filename:",Z.defaultPath||"file.txt");if($)return{canceled:!1,filePath:$};return{canceled:!0}}async function y(Z){if(w()){let O=window;try{return await O.craft.dialog.showMessageBox(Z)}catch(P){console.warn("[stx-dialog] Failed to show native message box:",P)}}let $=Z.buttons||["OK"],Y=Z.detail?`
257
257
 
258
258
  ${Z.detail}`:"",z=`${Z.message}${Y}`;if($.length===1)return alert(z),{response:0};let G=Z.cancelButton??$.length-1,X=Z.defaultButton!==void 0&&Z.defaultButton!==G?Z.defaultButton:$.findIndex((O,P)=>P!==G);if($.length>2)console.warn(`[stx-dialog] ${$.length} buttons requested; a browser confirm offers two. Reachable: "${$[X]}" and "${$[G]}".`);return{response:confirm(z)?X:G}}async function B4(Z={}){if(w()){let $=window;try{return await $.craft.dialog.showColorPicker(Z)}catch(Y){console.warn("[stx-dialog] Failed to show native color picker:",Y)}}return new Promise(($)=>{if(typeof document>"u"){$({canceled:!0});return}let Y=document.createElement("input");Y.type="color",Y.value=Z.color||"#000000",Y.onchange=()=>{$({canceled:!1,color:Y.value})},Y.oncancel=()=>{$({canceled:!0})},Y.click()})}async function v4(Z,$){await y({type:"info",title:$||"Alert",message:Z,buttons:["OK"]})}async function b4(Z,$){return(await y({type:"question",title:$||"Confirm",message:Z,buttons:["OK","Cancel"],defaultButton:0,cancelButton:1})).response===0}async function l4(Z,$){await y({type:"error",title:$||"Error",message:Z,buttons:["OK"]})}async function g4(Z,$){await y({type:"warning",title:$||"Warning",message:Z,buttons:["OK"]})}function u4(){return`
259
259
  // STX Desktop Dialog Bridge
@@ -304,12 +304,12 @@ window.stxDialog = {
304
304
  // Check if dialog is available
305
305
  isAvailable: () => typeof window.craft?.dialog !== 'undefined',
306
306
  };
307
- `}var h=null,W=null;class JZ{_process;_startedAt;_endsAt;_options;_expireHandlers=[];_expireTimer=null;_stopped=!1;constructor(Z,$){this._process=Z,this._options=$,this._startedAt=new Date;let Y=$.duration;if(Y&&Y>0){let z=Y*60*1000;this._endsAt=new Date(this._startedAt.getTime()+z),this._expireTimer=setTimeout(()=>{this._stopped=!0;for(let G of this._expireHandlers)try{G()}catch{}},z)}else this._endsAt=null}get pid(){return this._process.pid}get startedAt(){return this._startedAt}get endsAt(){return this._endsAt}get options(){return{...this._options}}get isActive(){if(this._stopped)return!1;return this._process.exitCode===null}get remainingMs(){if(!this._endsAt)return null;let Z=this._endsAt.getTime()-Date.now();return Math.max(0,Z)}get elapsedMs(){return Date.now()-this._startedAt.getTime()}stop(){if(this._stopped)return;if(this._stopped=!0,this._expireTimer)clearTimeout(this._expireTimer),this._expireTimer=null;try{this._process.kill()}catch{}}onExpire(Z){this._expireHandlers.push(Z)}}function c4(Z={}){yZ();let{duration:$,preventDisplaySleep:Y=!0,preventIdleSleep:z=!0,preventSystemSleep:G=!0,preventDiskSleep:X=!1,assertUserActivity:O=!0}=Z,P=[];if(Y)P.push("-d");if(z)P.push("-i");if(G)P.push("-s");if(X)P.push("-m");if(O)P.push("-u");let F=[...P];if($&&$>0)F.push("-t",String($*60));let j=Bun.spawn(["/usr/bin/caffeinate",...F],{stdio:["ignore","ignore","ignore"]}),R=new JZ(j,Z);return h=j,W=R,R}function yZ(Z){if(Z){if(Z.stop(),W===Z)h=null,W=null;return}if(W)W.stop();h=null,W=null}function p4(){return W!==null&&W.isActive}function d4(){if(!W||!W.isActive)return{active:!1,instance:null,startedAt:null,endsAt:null,durationMinutes:null};let $=W.options.duration;return{active:!0,instance:W,startedAt:W.startedAt,endsAt:W.endsAt,durationMinutes:$&&$>0?$:-1}}function r4(Z){let $=Z||W;if(!$||!$.isActive)return"0:00";let Y=$.remainingMs;if(Y===null)return"\u221E";let z=Math.ceil(Y/1000),G=Math.floor(z/3600),X=Math.floor(z%3600/60),O=z%60;if(G>0)return`${G}:${String(X).padStart(2,"0")}:${String(O).padStart(2,"0")}`;return`${X}:${String(O).padStart(2,"0")}`}function n4(Z){if(Z<=0||Z===-1)return"Indefinitely";if(Z<60)return`${Z} minutes`;if(Z===60)return"1 hour";if(Z%60===0)return`${Z/60} hours`;let $=Math.floor(Z/60),Y=Z%60;return`${$}h ${Y}m`}var k=new Map,fZ=0,f=!1;function mZ(Z){let $=Z.split("+").map((z)=>z.trim()),Y={key:"",meta:!1,ctrl:!1,shift:!1,alt:!1};for(let z of $){let G=z.toLowerCase();switch(G){case"cmd":case"command":case"meta":case"\u2318":Y.meta=!0;break;case"ctrl":case"control":case"\u2303":Y.ctrl=!0;break;case"shift":case"\u21E7":Y.shift=!0;break;case"alt":case"option":case"opt":case"\u2325":Y.alt=!0;break;case"cmdorctrl":case"commandorcontrol":if(typeof process<"u"&&process.platform==="darwin")Y.meta=!0;else Y.ctrl=!0;break;default:Y.key=G}}return Y}function a4(Z){let $=[];if(Z.ctrl)$.push("\u2303");if(Z.alt)$.push("\u2325");if(Z.shift)$.push("\u21E7");if(Z.meta)$.push("\u2318");return $.push(Z.key.toUpperCase()),$.join("")}function BZ(Z,$){if($.meta!==Z.metaKey)return!1;if($.ctrl!==Z.ctrlKey)return!1;if($.shift!==Z.shiftKey)return!1;if($.alt!==Z.altKey)return!1;return Z.key.toLowerCase()===$.key||Z.code.toLowerCase()===`key${$.key}`}function YZ(Z){for(let[,$]of k)if(BZ(Z,$.parsed)){Z.preventDefault(),Z.stopPropagation();try{$.handler()}catch{}break}}function vZ(){if(f)return;if(typeof document>"u")return;document.addEventListener("keydown",YZ,!0),f=!0}function c(){if(!f)return;if(typeof document>"u")return;document.removeEventListener("keydown",YZ,!0),f=!1}async function bZ(Z,$){if(typeof window>"u")return!1;let Y=window.craft;if(!Y?.hotkeys?.register)return!1;try{return await Y.hotkeys.register(Z,$),!0}catch{return!1}}async function p(Z){if(typeof window>"u")return;let $=window.craft;if(!$?.hotkeys?.unregister)return;try{await $.hotkeys.unregister(Z)}catch{}}function i4(Z,$){let Y=`hotkey_${++fZ}_${Date.now()}`,z=mZ(Z);k.set(Y,{shortcut:Z,handler:$,parsed:z}),bZ(Y,Z),vZ();let G={shortcut:Z,id:Y,unregister(){lZ(G)}};return G}function lZ(Z){if(k.delete(Z.id),p(Z.id),k.size===0)c()}function s4(){for(let[Z]of k)p(Z);k.clear(),c()}function t4(){return Array.from(k.entries()).map(([Z,$])=>({shortcut:$.shortcut,id:Z,unregister(){if(k.delete(Z),p(Z),k.size===0)c()}}))}class zZ{_duration;_tickInterval;_remaining;_running=!1;_paused=!1;_complete=!1;_intervalId=null;_lastTick=0;_completionHandlers=new Set;_tickHandlers=new Set;constructor(Z){if(this._duration=Z.duration,this._tickInterval=Z.tickInterval||1000,this._remaining=Z.duration,Z.onComplete)this._completionHandlers.add(Z.onComplete);if(Z.onTick)this._tickHandlers.add(Z.onTick);if(Z.autoStart)this.start()}get isRunning(){return this._running&&!this._paused}get isPaused(){return this._paused}get isComplete(){return this._complete}get remaining(){if(this._running&&!this._paused){let Z=Date.now()-this._lastTick;return Math.max(0,this._remaining-Z)}return Math.max(0,this._remaining)}get elapsed(){return this._duration-this.remaining}get duration(){return this._duration}get progress(){if(this._duration===0)return 1;return Math.min(1,this.elapsed/this._duration)}start(){if(this._running)return;this._running=!0,this._paused=!1,this._complete=!1,this._lastTick=Date.now(),this._startInterval()}stop(){this._clearInterval(),this._running=!1,this._paused=!1,this._remaining=this._duration}pause(){if(!this._running||this._paused)return;let Z=Date.now()-this._lastTick;this._remaining=Math.max(0,this._remaining-Z),this._clearInterval(),this._paused=!0}resume(){if(!this._paused)return;this._paused=!1,this._lastTick=Date.now(),this._startInterval()}reset(){this._clearInterval(),this._running=!1,this._paused=!1,this._complete=!1,this._remaining=this._duration}onComplete(Z){return this._completionHandlers.add(Z),()=>{this._completionHandlers.delete(Z)}}onTick(Z){return this._tickHandlers.add(Z),()=>{this._tickHandlers.delete(Z)}}_startInterval(){this._clearInterval(),this._intervalId=setInterval(()=>{let Z=Date.now(),$=Z-this._lastTick;this._lastTick=Z,this._remaining=Math.max(0,this._remaining-$);for(let Y of this._tickHandlers)try{Y(this._remaining)}catch{}if(this._remaining<=0){this._clearInterval(),this._running=!1,this._complete=!0;for(let Y of this._completionHandlers)try{Y()}catch{}}},this._tickInterval)}_clearInterval(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null}}class GZ{_interval;_handler;_immediate;_running=!1;_intervalId=null;constructor(Z){if(this._interval=Z.interval,this._handler=Z.handler,this._immediate=Z.immediate!==!1,this._immediate)this.start()}get isRunning(){return this._running}start(){if(this._running)return;this._running=!0,this._intervalId=setInterval(()=>{try{this._handler()}catch{}},this._interval)}stop(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null;this._running=!1}}function Z8(Z){return new zZ(Z)}function $8(Z){return new GZ(Z)}function J8(Z){return new Promise(($)=>setTimeout($,Z))}function Y8(Z){let $=Math.ceil(Z/1000),Y=Math.floor($/3600),z=Math.floor($%3600/60),G=$%60;if(Y>0)return`${Y}:${String(z).padStart(2,"0")}:${String(G).padStart(2,"0")}`;return`${z}:${String(G).padStart(2,"0")}`}function z8(Z){let $=Math.ceil(Z/1000),Y=Math.floor($/3600),z=Math.floor($%3600/60),G=$%60;if(Y>0){if(z>0)return`${Y}h ${z}m`;return`${Y}h`}if(z>0){if(G>0)return`${z}m ${G}s`;return`${z}m`}return`${G}s`}function J(Z){if(typeof window>"u")return!1;let $=window.craft;return!!($&&$[Z])}function V(Z){if(!J(Z))throw Error(`craft.${Z} is not available \u2014 this API requires a Craft native window`);return window.craft[Z]}function Q(Z,$){if(typeof window>"u")return()=>{};let Y=(z)=>$(z.detail??{});return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var P8={async writeText(Z){if(J("clipboard")){await window.craft.clipboard.writeText(Z);return}if(typeof navigator<"u"&&navigator.clipboard)await navigator.clipboard.writeText(Z)},async readText(){if(J("clipboard")){let Z=await window.craft.clipboard.readText();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.readText)try{return await navigator.clipboard.readText()}catch{return""}return""},async writeHTML(Z){if(J("clipboard")){await window.craft.clipboard.writeHTML(Z);return}if(typeof navigator<"u"&&navigator.clipboard?.write)try{let $=new window.ClipboardItem({"text/html":new Blob([Z],{type:"text/html"}),"text/plain":new Blob([gZ(Z)],{type:"text/plain"})});await navigator.clipboard.write([$])}catch{}},async readHTML(){if(J("clipboard")){let Z=await window.craft.clipboard.readHTML();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.read)try{let Z=await navigator.clipboard.read();for(let $ of Z)if($.types.includes("text/html"))return await(await $.getType("text/html")).text()}catch{}return""},async clear(){if(J("clipboard")){await window.craft.clipboard.clear();return}if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText("")}catch{}},async hasText(){if(J("clipboard"))return await window.craft.clipboard.hasText();return(await this.readText()).length>0},async hasHTML(){if(J("clipboard"))return await window.craft.clipboard.hasHTML();return(await this.readHTML()).length>0},async hasImage(){if(J("clipboard"))return await window.craft.clipboard.hasImage();return!1}};function gZ(Z){return Z.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<\/?(br|p|div|li|h[1-6])\b[^>]*>/gi,`
307
+ `}var h=null,W=null;class YZ{_process;_startedAt;_endsAt;_options;_expireHandlers=[];_expireTimer=null;_stopped=!1;constructor(Z,$){this._process=Z,this._options=$,this._startedAt=new Date;let Y=$.duration;if(Y&&Y>0){let z=Y*60*1000;this._endsAt=new Date(this._startedAt.getTime()+z),this._expireTimer=setTimeout(()=>{this._stopped=!0;for(let G of this._expireHandlers)try{G()}catch{}},z)}else this._endsAt=null}get pid(){return this._process.pid}get startedAt(){return this._startedAt}get endsAt(){return this._endsAt}get options(){return{...this._options}}get isActive(){if(this._stopped)return!1;return this._process.exitCode===null}get remainingMs(){if(!this._endsAt)return null;let Z=this._endsAt.getTime()-Date.now();return Math.max(0,Z)}get elapsedMs(){return Date.now()-this._startedAt.getTime()}stop(){if(this._stopped)return;if(this._stopped=!0,this._expireTimer)clearTimeout(this._expireTimer),this._expireTimer=null;try{this._process.kill()}catch{}}onExpire(Z){this._expireHandlers.push(Z)}}function c4(Z={}){yZ();let{duration:$,preventDisplaySleep:Y=!0,preventIdleSleep:z=!0,preventSystemSleep:G=!0,preventDiskSleep:X=!1,assertUserActivity:O=!0}=Z,P=[];if(Y)P.push("-d");if(z)P.push("-i");if(G)P.push("-s");if(X)P.push("-m");if(O)P.push("-u");let F=[...P];if($&&$>0)F.push("-t",String($*60));let j=Bun.spawn(["/usr/bin/caffeinate",...F],{stdio:["ignore","ignore","ignore"]}),R=new YZ(j,Z);return h=j,W=R,R}function yZ(Z){if(Z){if(Z.stop(),W===Z)h=null,W=null;return}if(W)W.stop();h=null,W=null}function p4(){return W!==null&&W.isActive}function d4(){if(!W||!W.isActive)return{active:!1,instance:null,startedAt:null,endsAt:null,durationMinutes:null};let $=W.options.duration;return{active:!0,instance:W,startedAt:W.startedAt,endsAt:W.endsAt,durationMinutes:$&&$>0?$:-1}}function r4(Z){let $=Z||W;if(!$||!$.isActive)return"0:00";let Y=$.remainingMs;if(Y===null)return"\u221E";let z=Math.ceil(Y/1000),G=Math.floor(z/3600),X=Math.floor(z%3600/60),O=z%60;if(G>0)return`${G}:${String(X).padStart(2,"0")}:${String(O).padStart(2,"0")}`;return`${X}:${String(O).padStart(2,"0")}`}function n4(Z){if(Z<=0||Z===-1)return"Indefinitely";if(Z<60)return`${Z} minutes`;if(Z===60)return"1 hour";if(Z%60===0)return`${Z/60} hours`;let $=Math.floor(Z/60),Y=Z%60;return`${$}h ${Y}m`}var k=new Map,fZ=0,f=!1;function mZ(Z){let $=Z.split("+").map((z)=>z.trim()),Y={key:"",meta:!1,ctrl:!1,shift:!1,alt:!1};for(let z of $){let G=z.toLowerCase();switch(G){case"cmd":case"command":case"meta":case"\u2318":Y.meta=!0;break;case"ctrl":case"control":case"\u2303":Y.ctrl=!0;break;case"shift":case"\u21E7":Y.shift=!0;break;case"alt":case"option":case"opt":case"\u2325":Y.alt=!0;break;case"cmdorctrl":case"commandorcontrol":if(typeof process<"u"&&process.platform==="darwin")Y.meta=!0;else Y.ctrl=!0;break;default:Y.key=G}}return Y}function a4(Z){let $=[];if(Z.ctrl)$.push("\u2303");if(Z.alt)$.push("\u2325");if(Z.shift)$.push("\u21E7");if(Z.meta)$.push("\u2318");return $.push(Z.key.toUpperCase()),$.join("")}function BZ(Z,$){if($.meta!==Z.metaKey)return!1;if($.ctrl!==Z.ctrlKey)return!1;if($.shift!==Z.shiftKey)return!1;if($.alt!==Z.altKey)return!1;return Z.key.toLowerCase()===$.key||Z.code.toLowerCase()===`key${$.key}`}function zZ(Z){for(let[,$]of k)if(BZ(Z,$.parsed)){Z.preventDefault(),Z.stopPropagation();try{$.handler()}catch{}break}}function vZ(){if(f)return;if(typeof document>"u")return;document.addEventListener("keydown",zZ,!0),f=!0}function c(){if(!f)return;if(typeof document>"u")return;document.removeEventListener("keydown",zZ,!0),f=!1}async function bZ(Z,$){if(typeof window>"u")return!1;let Y=window.craft;if(!Y?.hotkeys?.register)return!1;try{return await Y.hotkeys.register(Z,$),!0}catch{return!1}}async function p(Z){if(typeof window>"u")return;let $=window.craft;if(!$?.hotkeys?.unregister)return;try{await $.hotkeys.unregister(Z)}catch{}}function i4(Z,$){let Y=`hotkey_${++fZ}_${Date.now()}`,z=mZ(Z);k.set(Y,{shortcut:Z,handler:$,parsed:z}),bZ(Y,Z),vZ();let G={shortcut:Z,id:Y,unregister(){lZ(G)}};return G}function lZ(Z){if(k.delete(Z.id),p(Z.id),k.size===0)c()}function s4(){for(let[Z]of k)p(Z);k.clear(),c()}function t4(){return Array.from(k.entries()).map(([Z,$])=>({shortcut:$.shortcut,id:Z,unregister(){if(k.delete(Z),p(Z),k.size===0)c()}}))}class GZ{_duration;_tickInterval;_remaining;_running=!1;_paused=!1;_complete=!1;_intervalId=null;_lastTick=0;_completionHandlers=new Set;_tickHandlers=new Set;constructor(Z){if(this._duration=Z.duration,this._tickInterval=Z.tickInterval||1000,this._remaining=Z.duration,Z.onComplete)this._completionHandlers.add(Z.onComplete);if(Z.onTick)this._tickHandlers.add(Z.onTick);if(Z.autoStart)this.start()}get isRunning(){return this._running&&!this._paused}get isPaused(){return this._paused}get isComplete(){return this._complete}get remaining(){if(this._running&&!this._paused){let Z=Date.now()-this._lastTick;return Math.max(0,this._remaining-Z)}return Math.max(0,this._remaining)}get elapsed(){return this._duration-this.remaining}get duration(){return this._duration}get progress(){if(this._duration===0)return 1;return Math.min(1,this.elapsed/this._duration)}start(){if(this._running)return;this._running=!0,this._paused=!1,this._complete=!1,this._lastTick=Date.now(),this._startInterval()}stop(){this._clearInterval(),this._running=!1,this._paused=!1,this._remaining=this._duration}pause(){if(!this._running||this._paused)return;let Z=Date.now()-this._lastTick;this._remaining=Math.max(0,this._remaining-Z),this._clearInterval(),this._paused=!0}resume(){if(!this._paused)return;this._paused=!1,this._lastTick=Date.now(),this._startInterval()}reset(){this._clearInterval(),this._running=!1,this._paused=!1,this._complete=!1,this._remaining=this._duration}onComplete(Z){return this._completionHandlers.add(Z),()=>{this._completionHandlers.delete(Z)}}onTick(Z){return this._tickHandlers.add(Z),()=>{this._tickHandlers.delete(Z)}}_startInterval(){this._clearInterval(),this._intervalId=setInterval(()=>{let Z=Date.now(),$=Z-this._lastTick;this._lastTick=Z,this._remaining=Math.max(0,this._remaining-$);for(let Y of this._tickHandlers)try{Y(this._remaining)}catch{}if(this._remaining<=0){this._clearInterval(),this._running=!1,this._complete=!0;for(let Y of this._completionHandlers)try{Y()}catch{}}},this._tickInterval)}_clearInterval(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null}}class QZ{_interval;_handler;_immediate;_running=!1;_intervalId=null;constructor(Z){if(this._interval=Z.interval,this._handler=Z.handler,this._immediate=Z.immediate!==!1,this._immediate)this.start()}get isRunning(){return this._running}start(){if(this._running)return;this._running=!0,this._intervalId=setInterval(()=>{try{this._handler()}catch{}},this._interval)}stop(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null;this._running=!1}}function Z8(Z){return new GZ(Z)}function $8(Z){return new QZ(Z)}function J8(Z){return new Promise(($)=>setTimeout($,Z))}function Y8(Z){let $=Math.ceil(Z/1000),Y=Math.floor($/3600),z=Math.floor($%3600/60),G=$%60;if(Y>0)return`${Y}:${String(z).padStart(2,"0")}:${String(G).padStart(2,"0")}`;return`${z}:${String(G).padStart(2,"0")}`}function z8(Z){let $=Math.ceil(Z/1000),Y=Math.floor($/3600),z=Math.floor($%3600/60),G=$%60;if(Y>0){if(z>0)return`${Y}h ${z}m`;return`${Y}h`}if(z>0){if(G>0)return`${z}m ${G}s`;return`${z}m`}return`${G}s`}function J(Z){if(typeof window>"u")return!1;let $=window.craft;return!!($&&$[Z])}function V(Z){if(!J(Z))throw Error(`craft.${Z} is not available \u2014 this API requires a Craft native window`);return window.craft[Z]}function Q(Z,$){if(typeof window>"u")return()=>{};let Y=(z)=>$(z.detail??{});return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var P8={async writeText(Z){if(J("clipboard")){await window.craft.clipboard.writeText(Z);return}if(typeof navigator<"u"&&navigator.clipboard)await navigator.clipboard.writeText(Z)},async readText(){if(J("clipboard")){let Z=await window.craft.clipboard.readText();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.readText)try{return await navigator.clipboard.readText()}catch{return""}return""},async writeHTML(Z){if(J("clipboard")){await window.craft.clipboard.writeHTML(Z);return}if(typeof navigator<"u"&&navigator.clipboard?.write)try{let $=new window.ClipboardItem({"text/html":new Blob([Z],{type:"text/html"}),"text/plain":new Blob([gZ(Z)],{type:"text/plain"})});await navigator.clipboard.write([$])}catch{}},async readHTML(){if(J("clipboard")){let Z=await window.craft.clipboard.readHTML();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.read)try{let Z=await navigator.clipboard.read();for(let $ of Z)if($.types.includes("text/html"))return await(await $.getType("text/html")).text()}catch{}return""},async clear(){if(J("clipboard")){await window.craft.clipboard.clear();return}if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText("")}catch{}},async hasText(){if(J("clipboard"))return await window.craft.clipboard.hasText();return(await this.readText()).length>0},async hasHTML(){if(J("clipboard"))return await window.craft.clipboard.hasHTML();return(await this.readHTML()).length>0},async hasImage(){if(J("clipboard"))return await window.craft.clipboard.hasImage();return!1}};function gZ(Z){return Z.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<\/?(br|p|div|li|h[1-6])\b[^>]*>/gi,`
308
308
  `).replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/\n{3,}/g,`
309
309
 
310
- `).trim()}var F8={async show(Z){if(!Z.title)throw Error("notification title is required");if(J("notifications")){await window.craft.notifications.show(Z);return}if(typeof window<"u"&&"Notification"in window){let $=window.Notification;if($.permission==="granted")new $(Z.title,{body:Z.body,icon:Z.icon});else if($.permission==="default"){if(await $.requestPermission()==="granted")new $(Z.title,{body:Z.body,icon:Z.icon})}}},async schedule(Z){if(J("notifications")){let z={...Z};if(z.triggerAt instanceof Date)z.triggerAt=z.triggerAt.toISOString();await window.craft.notifications.schedule(z);return}let $=uZ(Z.triggerAt),Y=Math.max(0,$-Date.now());setTimeout(()=>{this.show(Z).catch(()=>{})},Y)},async cancel(Z){if(J("notifications"))await window.craft.notifications.cancel(Z)},async cancelAll(){if(J("notifications"))await window.craft.notifications.cancelAll()},async setBadge(Z){let $=Math.max(0,Math.round(Number.isFinite(Z)?Z:0));if(J("notifications")){await window.craft.notifications.setBadge($);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge($)}catch{}},async clearBadge(){if(J("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(J("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let Z=window.Notification;if(Z.permission==="granted")return!0;if(Z.permission==="denied")return!1;return await Z.requestPermission()==="granted"}return!1},async registerCategories(Z){if(!Array.isArray(Z)||Z.length===0)return;if(J("notifications")){let $=window.craft.notifications.registerCategories;if(typeof $==="function")await $(Z)}},onActionClicked(Z){return Q("craft:notification:actionClicked",Z)},onReply(Z){return Q("craft:notification:reply",Z)}};function uZ(Z){if(Z==null)return Date.now();if(Z instanceof Date)return Z.getTime();if(typeof Z==="number")return Z;let $=Date.parse(Z);return Number.isNaN($)?Date.now():$}var K8={async readFile(Z){let $=await V("fs").readFile(Z);return $&&$.data||""},async readBuffer(Z){let $=await V("fs").readFile(Z),Y=$&&$.data||"";if($&&$.base64===!0)return cZ(Y);return new TextEncoder().encode(Y)},async writeFile(Z,$){await V("fs").writeFile(Z,$)},async writeBuffer(Z,$){let Y=hZ($),z=V("fs");if(typeof z.writeFileBytes==="function")await z.writeFileBytes(Z,Y);else await z.writeFile(Z,Y)},async copy(Z,$){if(Z===$)throw Error("fs.copy: source and destination must differ");await V("fs").copy(Z,$)},async move(Z,$){if(Z===$)throw Error("fs.move: source and destination must differ");await V("fs").move(Z,$)},async appendFile(Z,$){await V("fs").appendFile(Z,$)},async deleteFile(Z){await V("fs").deleteFile(Z)},async exists(Z){return await V("fs").exists(Z)},async stat(Z){return pZ(await V("fs").stat(Z))},async readDir(Z){let $=await V("fs").readDir(Z),Y=$&&$.entries||[],z=Z.endsWith("/")?Z.slice(0,-1):Z;return Y.map((G)=>({name:G.name,path:`${z}/${G.name}`,isDirectory:!!G.isDirectory}))},async mkdir(Z,$){await V("fs").mkdir(Z,$)},async rmdir(Z,$){await V("fs").rmdir(Z,$)},async watch(Z,$){await V("fs").watch(Z,$)},async unwatch(Z){await V("fs").unwatch(Z)},onChange(Z){return Q("craft:fs:change",Z)},async watchTree(Z,$,Y){let z=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,G=V("fs");await G.watch(Z,z,{recursive:!!$.recursive});let X=$.kinds&&$.kinds.length>0?new Set($.kinds):null,O=Math.max(0,Math.floor($.coalesceMs??0)),P=[],F=null,j=!1,R=()=>{if(F=null,P.length===0)return;let L=P;P=[];try{Y(L)}catch{}},N=Q("craft:fs:change",(L)=>{if(j)return;if(L.id!==z)return;if(X&&L.kind&&!X.has(L.kind))return;if(P.push(L),O===0){R();return}if(F==null)F=setTimeout(R,O)});return{id:z,async stop(){if(j)return;if(j=!0,N(),F)clearTimeout(F),F=null;if(P.length>0)R();try{await G.unwatch(z)}catch{}}}},async homeDir(){return await V("fs").homeDir()},async tempDir(){return await V("fs").tempDir()},async appDataDir(){return await V("fs").appDataDir()}};function hZ(Z){let $="";for(let Y=0;Y<Z.length;Y++)$+=String.fromCharCode(Z[Y]);return typeof btoa==="function"?btoa($):Buffer.from(Z).toString("base64")}function cZ(Z){let $=typeof atob==="function"?atob(Z):Buffer.from(Z,"base64").toString("binary"),Y=new Uint8Array($.length);for(let z=0;z<$.length;z++)Y[z]=$.charCodeAt(z);return Y}function pZ(Z){return{isFile:!!Z.isFile,isDirectory:!!Z.isDirectory,isSymlink:!!Z.isSymlink,size:Number(Z.size)||0,modifiedAt:Z.modifiedAt!=null?Z.modifiedAt<1000000000000?Z.modifiedAt*1000:Z.modifiedAt:0}}var S=new Set,QZ=!1;function dZ(){if(QZ)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let $=Z.detail;if($?.id)S.delete($.id)}),QZ=!0}var rZ=new Set(["javascript:","data:","file:","vbscript:"]),D8={async openExternal(Z){let $=Z.trim().toLowerCase();for(let Y of rZ)if($.startsWith(Y))throw Error(`shell.openExternal: ${Y} URLs are blocked for safety`);if(J("shell")){await window.craft.shell.openExternal(Z);return}if(typeof window<"u"&&typeof window.open==="function")window.open(Z,"_blank","noopener,noreferrer")},async openPath(Z){await V("shell").openPath(Z)},async showInFinder(Z){await V("shell").showInFinder(Z)},async spawn(Z,$,Y=[],z={}){if(dZ(),!Z||typeof Z!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!$||typeof $!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray(Y))throw Error("shell.spawn: args must be an array");for(let G of Y)if(typeof G!=="string")throw Error("shell.spawn: args entries must be strings");if(S.has(Z))throw Error(`shell.spawn: id "${Z}" is already in use \u2014 call kill(id) first or pick a different id`);S.add(Z);try{await V("shell").spawn(Z,$,Y,z)}catch(G){throw S.delete(Z),G}},async kill(Z){await V("shell").kill(Z),S.delete(Z)},async getEnv(Z){if(J("shell")){let $=await window.craft.shell.getEnv(Z);return $==null?void 0:String($)}return},async setEnv(Z,$){await V("shell").setEnv(Z,$)},onStdout(Z){return Q("craft:shell:stdout",Z)},onStderr(Z){return Q("craft:shell:stderr",Z)},onExit(Z){return Q("craft:shell:exit",Z)}};var q8={async register(Z,$,Y){if(!J("shortcuts"))return;await window.craft.shortcuts.register(Z,$,Y)},async unregister(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.unregister(Z)},async unregisterAll(){if(!J("shortcuts"))return;await window.craft.shortcuts.unregisterAll()},async enable(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.enable(Z)},async disable(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.disable(Z)},async isRegistered(Z){if(!J("shortcuts"))return!1;return await window.craft.shortcuts.isRegistered(Z)},async list(){if(!J("shortcuts"))return[];return await window.craft.shortcuts.list()},on(Z){return Q("craft:shortcut",Z)}};var M8={get(){if(J("theme"))try{return window.craft.theme.get()}catch{}return{appearance:nZ()}},onChange(Z){if(Z(this.get()),J("theme"))return Q("craft:theme",Z);if(typeof window<"u"&&window.matchMedia){let $=window.matchMedia("(prefers-color-scheme: dark)"),Y=()=>Z({appearance:$.matches?"dark":"light"});return $.addEventListener("change",Y),()=>$.removeEventListener("change",Y)}return()=>{}},async current(){return this.get()}};function nZ(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function A8(Z,$={}){if(!J("dragOut"))throw Error("dragOut requires a Craft native window");let Y=Array.isArray(Z)?Z:[Z];if(Y.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start(Y,$)}function _8(){return J("dragOut")}var C8={onUrl(Z){if(!J("deepLink"))return()=>{};return Q("craft:deepLink",Z)},getInitialUrl(){if(typeof window>"u")return null;if(J("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let Z=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return Z},isAvailable(){return J("deepLink")}};var y8={async isCharging(){if(J("power"))return await window.craft.power.isCharging();let Z=await m();return Z?!!Z.charging:!1},async isPluggedIn(){if(J("power"))return await window.craft.power.isPluggedIn();let Z=await m();return Z?!!Z.charging||Z.level>=0.999:!1},async isLowPowerMode(){if(J("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(J("power")){let $=await window.craft.power.batteryLevel();return typeof $==="number"?$:null}let Z=await m();return Z?Z.level:null},async timeRemaining(){if(J("power")){let Y=await window.craft.power.timeRemaining();return typeof Y==="number"?Y:null}let Z=await m();if(!Z)return null;let $=Z.charging?Z.chargingTime:Z.dischargingTime;return Number.isFinite($)?Math.round($/60):null},async thermalState(){if(J("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(J("power"))return await window.craft.power.uptimeSeconds();if(typeof performance<"u"&&typeof performance.now==="function")return Math.round(performance.now()/1000);return 0},async preventSleep(Z="app is busy"){if(J("power")){await window.craft.power.preventSleep(Z);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let $=window;if($.__craftWebWakeLock?.release){try{await $.__craftWebWakeLock.release()}catch{}$.__craftWebWakeLock=null}try{let Y=await navigator.wakeLock.request("screen");$.__craftWebWakeLock=Y}catch{}},async allowSleep(){if(J("power")){await window.craft.power.allowSleep();return}let Z=window.__craftWebWakeLock;if(Z&&typeof Z.release==="function"){try{await Z.release()}catch{}window.__craftWebWakeLock=null}},onSleep(Z){return Q("craft:powerSleep",Z)},onWake(Z){return Q("craft:powerWake",Z)}};async function m(){if(typeof navigator>"u")return null;let Z=navigator;if(typeof Z.getBattery!=="function")return null;try{return await Z.getBattery()}catch{return null}}var B8={async connectionType(){if(J("network"))return await window.craft.network.connectionType();return XZ()},async wifiSSID(){if(J("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(J("network")){let Z=await window.craft.network.wifiSignalStrength();return typeof Z==="number"?Z:void 0}return},async ipAddress(){if(J("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(J("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(J("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(J("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(J("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(J("network"))await window.craft.network.openPreferences()},onChange(Z){if(J("network"))return Q("craft:networkChange",Z);if(typeof window>"u")return()=>{};let $=()=>Z({type:XZ(),online:!0}),Y=()=>Z({type:"none",online:!1});return window.addEventListener("online",$),window.addEventListener("offline",Y),()=>{window.removeEventListener("online",$),window.removeEventListener("offline",Y)}}};function XZ(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let Z=navigator.connection;if(!Z)return"unknown";let $=String(Z.type||Z.effectiveType||"unknown").toLowerCase();if($==="wifi"||$==="cellular"||$==="ethernet"||$==="bluetooth"||$==="none")return $;return"unknown"}var l8={async checkForUpdates(){if(!J("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!J("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(Z){if(!J("updater"))return;await window.craft.updater.setAutomaticChecks(Z)},async setCheckInterval(Z){if(!J("updater"))return;if(!Number.isFinite(Z))throw Error("setCheckInterval: must be a finite number");let $=Z<=0?0:Math.max(60,Math.round(Z));await window.craft.updater.setCheckInterval($)},async setFeedURL(Z){if(!J("updater"))return;await window.craft.updater.setFeedURL(Z)},async getLastUpdateCheckDate(){if(!J("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!J("updater"))return null;let Z=await window.craft.updater.getUpdateInfo();if(!Z||typeof Z.version!=="string"||Z.version.length===0)return null;return Z},onAvailable(Z){return Q("craft:updateAvailable",Z)},onDownloaded(Z){return Q("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:$,publicKeyB64:Y}){let z=PZ(Z),G;try{G=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",G,B($),z)}catch{return!1}},async verifyDownload({url:Z,signatureB64:$,publicKeyB64:Y,fetchInit:z}){let G;try{G=await fetch(Z,z)}catch{return{ok:!1,reason:"fetch-failed"}}if(!G.ok)return{ok:!1,reason:"http-error",status:G.status};let X=new Uint8Array(await G.arrayBuffer()),O;try{O=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let P=!1;try{P=await crypto.subtle.verify("Ed25519",O,B($),PZ(X))}catch{P=!1}if(!P)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:X}}};function PZ(Z){if(Z instanceof ArrayBuffer)return new Uint8Array(Z);let $=new ArrayBuffer(Z.byteLength),Y=new Uint8Array($);return Y.set(Z),Y}function B(Z){if(typeof atob==="function"){let z=atob(Z),G=new ArrayBuffer(z.length),X=new Uint8Array(G);for(let O=0;O<z.length;O++)X[O]=z.charCodeAt(O);return X}let $=Buffer.from(Z,"base64"),Y=new ArrayBuffer($.length);return new Uint8Array(Y).set($),new Uint8Array(Y)}var h8={onFocus(Z){if(J("window"))return Q("craft:window:focus",()=>Z());return d("focus",Z)},onBlur(Z){if(J("window"))return Q("craft:window:blur",()=>Z());return d("blur",Z)},onResize(Z){if(J("window"))return Q("craft:window:resize",Z);if(typeof window>"u")return()=>{};let $=()=>Z({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},onMove(Z){if(J("window"))return Q("craft:window:move",Z);return()=>{}},onClose(Z){if(J("window"))return Q("craft:window:close",()=>Z());return d("beforeunload",Z)},onMinimize(Z){if(J("window"))return Q("craft:window:minimize",()=>Z());if(typeof document>"u")return()=>{};let $=()=>{if(document.visibilityState==="hidden")Z()};return document.addEventListener("visibilitychange",$),()=>document.removeEventListener("visibilitychange",$)},onRestore(Z){if(J("window"))return Q("craft:window:restore",()=>Z());if(typeof document>"u")return()=>{};let $=()=>{if(document.visibilityState==="visible")Z()};return document.addEventListener("visibilitychange",$),()=>document.removeEventListener("visibilitychange",$)}};function d(Z,$){if(typeof window>"u")return()=>{};let Y=()=>$();return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var OZ={name:"",version:"0.0.0"},d8={async hideDockIcon(){if(J("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(J("app"))await window.craft.app.showDockIcon()},async quit(){if(J("app"))await window.craft.app.quit()},async getInfo(){if(!J("app"))return OZ;let Z=await window.craft.app.getInfo();return{...OZ,...Z||{}}},async notify(Z){if(!Z.title)throw Error("notify: title is required");if(J("app"))await window.craft.app.notify(Z)},async setBadge(Z){if(J("app"))await window.craft.app.setBadge(Z)},async bounce(Z="informational"){if(J("app"))await window.craft.app.bounce(Z)}};var o8={app(Z){return{label:Z,items:[{label:`About ${Z}`,role:"about"},{separator:!0},{label:`Hide ${Z}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${Z}`,role:"quit",shortcut:"cmd+q"}]}},edit(){return{label:"Edit",items:[{label:"Undo",role:"undo",shortcut:"cmd+z"},{label:"Redo",role:"redo",shortcut:"cmd+shift+z"},{separator:!0},{label:"Cut",role:"cut",shortcut:"cmd+x"},{label:"Copy",role:"copy",shortcut:"cmd+c"},{label:"Paste",role:"paste",shortcut:"cmd+v"},{label:"Select All",role:"selectAll",shortcut:"cmd+a"}]}},window(){return{label:"Window",items:[{label:"Minimize",role:"minimize",shortcut:"cmd+m"},{label:"Zoom",role:"zoom"},{separator:!0},{label:"Close Window",role:"close",shortcut:"cmd+w"}]}},leading(Z){return[this.app(Z),this.edit()]}},oZ=0;function aZ(Z){let $=new Map;return{payload:{menus:Z.menus.map((z)=>({label:z.label,items:z.items.map((G)=>{let{onClick:X,...O}=G;if(O.separator)return O;let P=O.id??`stx.menu.${oZ++}`;if(X)$.set(P,X);return{...O,id:P}})}))},handlers:$}}var VZ=null,a8={async set(Z){if(!J("menu"))return!1;let{payload:$,handlers:Y}=aZ(Z);return VZ?.(),VZ=Y.size>0?Q("craft:menu:action",(z)=>{Y.get(z.id)?.()}):null,await window.craft.menu.set($),!0},async setDock(Z){if(J("menu"))await window.craft.menu.setDock(Z)},async addItem(Z,$){if(J("menu"))await window.craft.menu.addItem(Z,$)},async removeItem(Z){if(J("menu"))await window.craft.menu.removeItem(Z)},async enableItem(Z){if(J("menu"))await window.craft.menu.enableItem(Z)},async disableItem(Z){if(J("menu"))await window.craft.menu.disableItem(Z)},async checkItem(Z){if(J("menu"))await window.craft.menu.checkItem(Z)},async uncheckItem(Z){if(J("menu"))await window.craft.menu.uncheckItem(Z)},async setItemLabel(Z,$){if(J("menu"))await window.craft.menu.setItemLabel(Z,$)},async clearDock(){if(J("menu"))await window.craft.menu.clearDock()},onAction(Z){return Q("craft:menu:action",Z)}};var t8={async getDisplays(){if(J("screen"))return await window.craft.screen.getDisplays();return FZ()},async getPrimary(){if(J("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return FZ()[0]??null},onChange(Z){if(J("screen"))return Q("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let $=()=>Z();return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)}};function FZ(){if(typeof window>"u"||!window.screen)return[];let Z=window.screen;return[{id:0,x:Z.left??0,y:Z.top??0,width:Z.width||0,height:Z.height||0,workX:Z.availLeft??0,workY:Z.availTop??0,workWidth:Z.availWidth??Z.width??0,workHeight:Z.availHeight??Z.height??0,scaleFactor:window.devicePixelRatio||1}]}var $$={async set(Z,$,Y){if(!Z)throw Error("keychain.set: service is required");if(!$)throw Error("keychain.set: account is required");await V("keychain").set(Z,$,Y)},async get(Z,$){if(!Z)throw Error("keychain.get: service is required");if(!$)throw Error("keychain.get: account is required");let Y=await V("keychain").get(Z,$);return typeof Y==="string"?Y:null},async delete(Z,$){if(!Z)throw Error("keychain.delete: service is required");if(!$)throw Error("keychain.delete: account is required");await V("keychain").delete(Z,$)},async has(Z,$){if(!Z)throw Error("keychain.has: service is required");if(!$)throw Error("keychain.has: account is required");return await V("keychain").has(Z,$)}};var z$={async check(Z){if(J("permissions"))return await window.craft.permissions.check(Z);return await jZ(Z)},async request(Z){if(J("permissions"))return await window.craft.permissions.request(Z);return await iZ(Z)},async openSettings(Z){if(J("permissions"))await window.craft.permissions.openSettings(Z)}};async function jZ(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let $=await navigator.permissions.query({name:Z});return sZ($.state)}catch{return"not-supported"}}async function iZ(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let $=await window.Notification.requestPermission();return $==="granted"?"granted":$==="denied"?"denied":"undetermined"}return await jZ(Z)}function sZ(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var X$={async print(){if(J("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(Z){if(!Z)throw Error("printToPDF: path is required");let $=Z.startsWith("/"),Y=/^[a-zA-Z]:[\\/]/.test(Z)||Z.startsWith("\\\\");if(!$&&!Y)throw Error("printToPDF: path must be absolute");let z=await V("printing").printToPDF(Z);return{ok:!!(z&&z.ok),path:z?.path}}};var V$={async enable(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};var W$={async addItem(Z){if(J("touchbar"))await window.craft.touchbar.addItem(Z)},async removeItem(Z){if(J("touchbar"))await window.craft.touchbar.removeItem(Z)},async updateItem(Z,$){if(J("touchbar"))await window.craft.touchbar.updateItem(Z,$)},async setLabel(Z,$){if(J("touchbar"))await window.craft.touchbar.setLabel(Z,$)},async setIcon(Z,$){if(J("touchbar"))await window.craft.touchbar.setIcon(Z,$)},async setEnabled(Z,$){if(J("touchbar"))await window.craft.touchbar.setEnabled(Z,$)},async setSliderValue(Z,$){if(J("touchbar"))await window.craft.touchbar.setSliderValue(Z,$)},async clear(){if(J("touchbar"))await window.craft.touchbar.clear()},async show(){if(J("touchbar"))await window.craft.touchbar.show()},async hide(){if(J("touchbar"))await window.craft.touchbar.hide()},onAction(Z){return Q("craft:touchbar:action",Z)}};var tZ=/^[\da-f]*$/i;function eZ(Z,$){if(typeof $!=="string"||!tZ.test($)||$.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify($)}`)}var L$={async isEnabled(){return J("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return J("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return J("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return J("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(J("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(J("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return J("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(Z){if(J("bluetooth"))await window.craft.bluetooth.connect(Z)},async disconnect(Z){if(J("bluetooth"))await window.craft.bluetooth.disconnect(Z)},async openPreferences(){if(J("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(Z){if(!Z)throw Error("bluetooth.discoverServices: deviceId is required");if(!J("bluetooth"))return[];let $=await window.craft.bluetooth.discoverServices(Z);return Array.isArray($)?$:[]},async discoverCharacteristics(Z,$){if(!Z||!$)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!J("bluetooth"))return[];let Y=await window.craft.bluetooth.discoverCharacteristics(Z,$);return Array.isArray(Y)?Y:[]},async readCharacteristic(Z,$,Y){if(!Z||!$||!Y)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(Z,$,Y)},async writeCharacteristic(Z,$,Y,z,G="with-response"){if(!Z||!$||!Y)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(eZ("bluetooth.writeCharacteristic.valueHex",z),!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(Z,$,Y,z,G)},async setCharacteristicNotify(Z,$,Y,z){if(!Z||!$||!Y)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(Z,$,Y,z)},onDeviceFound(Z){return Q("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return Q("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return Q("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return Q("craft:bluetooth:characteristicValue",Z)}};var N$={async speak(Z,$){if(!Z)throw Error("speech.speak: text is required");if(J("speech")){await window.craft.speech.speak(Z,$);return}if(typeof window<"u"&&window.speechSynthesis){let Y=new window.SpeechSynthesisUtterance(Z);if($){if($.rate!=null)Y.rate=$.rate;if($.pitch!=null)Y.pitch=$.pitch;if($.volume!=null)Y.volume=$.volume;if($.voice){let G=window.speechSynthesis.getVoices().find((X)=>X.voiceURI===$.voice||X.name===$.voice||X.lang===$.voice);if(G)Y.voice=G}}window.speechSynthesis.speak(Y)}},async stop(){if(J("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(J("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(J("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(J("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(J("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map(($)=>({id:$.voiceURI||$.name,name:$.name,language:$.lang||"",quality:"default"}));return[]}};var A=[],r=!0,n,o,v={async report(Z){if(J("crashReporter")){await window.craft.crashReporter.report(Z);return}if(!r)return;let $=Z instanceof Error?{timestamp:Date.now(),severity:"error",message:Z.message,source:"js",stack:Z.stack||"",userId:n,appVersion:o}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:n,appVersion:o};if(A.length>=64)A.shift();A.push($)},async flush(){if(J("crashReporter"))return await window.craft.crashReporter.flush();return[...A]},async clear(){if(J("crashReporter")){await window.craft.crashReporter.clear();return}A.length=0},async setEnabled(Z){if(J("crashReporter")){await window.craft.crashReporter.setEnabled(Z);return}r=Z},async isEnabled(){if(J("crashReporter"))return await window.craft.crashReporter.isEnabled();return r},async setUser(Z){if(J("crashReporter")){await window.craft.crashReporter.setUser(Z);return}n=Z||void 0},async setAppVersion(Z){if(J("crashReporter")){await window.craft.crashReporter.setAppVersion(Z);return}o=Z||void 0},attachGlobalHandlers(){if(J("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let Z=(Y)=>{v.report({severity:"error",message:Y.message,source:"js",stack:Y.error?.stack||`${Y.message}
311
- at ${Y.filename}:${Y.lineno}:${Y.colno}`}).catch(()=>{})},$=(Y)=>{let z=Y.reason;v.report({severity:"error",message:z?.message||String(z),source:"js",stack:z?.stack||""}).catch(()=>{})};return window.addEventListener("error",Z),window.addEventListener("unhandledrejection",$),()=>{window.removeEventListener("error",Z),window.removeEventListener("unhandledrejection",$)}},forwardTo(Z){return X4(Z)}},Z4="craft:crashReporter:pending",$4=/[\w.+-]+@[\w-]+\.[\w.-]+/g,J4=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,Y4=/\/(?:Users|home)\/[^\s/'"`]+/g;function z4(Z){let $=(Y)=>Y.replace($4,"<email>").replace(J4,"<ip>").replace(Y4,"/<home>");return{...Z,message:$(Z.message),stack:$(Z.stack)}}async function G4(Z,$){let Y=new TextEncoder,z=await crypto.subtle.importKey("raw",Y.encode(Z),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),G=await crypto.subtle.sign("HMAC",z,Y.encode($));return[...new Uint8Array(G)].map((X)=>X.toString(16).padStart(2,"0")).join("")}function Q4(Z){if(!Z||typeof localStorage>"u")return[];try{let $=localStorage.getItem(Z);if(!$)return[];let Y=JSON.parse($);return Array.isArray(Y)?Y:[]}catch{return[]}}function WZ(Z,$){if(!Z||typeof localStorage>"u")return;try{if($.length===0)localStorage.removeItem(Z);else localStorage.setItem(Z,JSON.stringify($))}catch{}}function X4(Z){let{endpoint:$,intervalMs:Y=60000,signingSecret:z,redact:G=!0,headers:X={},maxRetries:O=5,persistKey:P}=Z,F=P===null?null:P??Z4,j=Q4(F),R=!1,N=null,L=null,NZ=typeof G==="function"?G:G===!1?(q)=>q:z4;async function qZ(q){let _=JSON.stringify({entries:q}),x={"Content-Type":"application/json",...X};if(z)x["X-Craft-Signature"]=await G4(z,_);let s=0,l=1000;while(!R)try{let M=await fetch($,{method:"POST",headers:x,body:_});if(M.ok)return;if(M.status>=400&&M.status<500)return;throw Error(`HTTP ${M.status}`)}catch(M){if(s+=1,s>O)throw j=[...q,...j],WZ(F,j),M;await new Promise((HZ)=>{setTimeout(HZ,l)}),l=Math.min(l*2,60000)}}async function i(){if(R||L)return L??void 0;let q=await v.flush();if(q.length>0)await v.clear();if(j=[...j,...q.map((x)=>NZ(x))],j.length===0)return;let _=j;return j=[],WZ(F,j),L=qZ(_).catch(()=>{}).finally(()=>{L=null}),L}if(Y>0)N=setInterval(()=>{i().catch(()=>{})},Y);return{async flushNow(){await i()},stop(){if(R=!0,N)clearInterval(N);N=null},pending(){return[...j]}}}var S$={async isAvailable(){if(!J("iap"))return!1;return await window.craft.iap.isAvailable()},async getProducts(Z){if(!J("iap"))return[];let $=Array.isArray(Z)?Z:[String(Z)];return await window.craft.iap.getProducts($)},async purchase(Z){if(!J("iap"))return{queued:!1,productId:Z,reason:"IAP bridge not available"};let $=await window.craft.iap.purchase(Z);return{queued:!!($&&$.queued),productId:$?.productId,reason:$?.reason}},async restorePurchases(){if(!J("iap"))return{ok:!1};let Z=await window.craft.iap.restorePurchases();return{ok:!!(Z&&Z.ok)}},async finishTransaction(Z){if(!J("iap"))return;await window.craft.iap.finishTransaction(Z)},async getReceiptData(){if(!J("iap"))return null;let Z=await window.craft.iap.getReceiptData();return Z?String(Z):null},onPurchased(Z){return Q("craft:iap:purchased",Z)},onFailed(Z){return Q("craft:iap:failed",Z)},onRestored(Z){return Q("craft:iap:restored",Z)},onProductsLoaded(Z){return Q("craft:iap:productsLoaded",($)=>Z($.products||[]))},onRefunded(Z){return Q("craft:iap:refunded",Z)},onSubscriptionStatusChanged(Z){return Q("craft:iap:subscriptionStatusChanged",Z)},async getActiveSubscriptions(){if(!J("iap"))return[];let Z=window.craft.iap.getActiveSubscriptions;if(typeof Z!=="function")return[];let $=await Z();return Array.isArray($)?$:[]},async isEligibleForIntroOffer(Z){if(!J("iap"))return!1;let $=window.craft.iap.isEligibleForIntroOffer;if(typeof $!=="function")return!1;return!!await $(Z)}};var b={async startActivity(Z,$){if(!Z)throw Error("handoff.startActivity: type is required");if(!J("handoff"))return!1;let Y=await window.craft.handoff.startActivity(Z,$);return typeof Y==="boolean"?Y:!!(Y&&Y.ok)},async updateActivity(Z){if(!J("handoff"))return!1;let $=await window.craft.handoff.updateActivity(Z);return typeof $==="boolean"?$:!!($&&$.ok)},async stopActivity(){if(!J("handoff"))return;await window.craft.handoff.stopActivity()},async getCurrentActivity(){if(!J("handoff"))return null;let Z=await window.craft.handoff.getCurrentActivity();return Z&&typeof Z.type==="string"?Z:null},onIncoming(Z){return Q("craft:handoff:incoming",Z)}};var C$={async start(Z,$){return b.startActivity(Z,{title:$?.title,webpageURL:$?.webpageURL,userInfo:$?.state})},async update(Z){return b.updateActivity({title:Z.title,webpageURL:Z.webpageURL,userInfo:Z.state})},async stop(){await b.stopActivity()}};var y$={async requestPermission(Z="whenInUse"){if(J("location"))return await window.craft.location.requestPermission(Z);if(typeof navigator<"u"&&navigator.geolocation)return"undetermined";return"not-supported"},async getAuthorization(){if(J("location"))return await window.craft.location.getAuthorization();return"unknown"},async getCurrentLocation(){if(J("location"))return await window.craft.location.getCurrentLocation();if(typeof navigator<"u"&&navigator.geolocation)return navigator.geolocation.getCurrentPosition((Z)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:Z.coords.latitude,longitude:Z.coords.longitude,altitude:Z.coords.altitude,horizontalAccuracy:Z.coords.accuracy,verticalAccuracy:Z.coords.altitudeAccuracy,speed:Z.coords.speed}}))},(Z)=>{window.dispatchEvent(new CustomEvent("craft:location:error",{detail:{message:Z.message||String(Z)}}))}),{requested:!0};return{requested:!1}},async startWatching(Z){if(J("location"))return await window.craft.location.startWatching(Z);if(typeof navigator<"u"&&navigator.geolocation){let $=navigator.geolocation.watchPosition((Y)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:Y.coords.latitude,longitude:Y.coords.longitude,altitude:Y.coords.altitude,horizontalAccuracy:Y.coords.accuracy,verticalAccuracy:Y.coords.altitudeAccuracy,speed:Y.coords.speed}}))});return window.__craftWebLocationWatchId=$,!0}return!1},async stopWatching(){if(J("location")){await window.craft.location.stopWatching();return}if(typeof navigator<"u"&&navigator.geolocation){let Z=window.__craftWebLocationWatchId;if(Z!=null)navigator.geolocation.clearWatch(Z),window.__craftWebLocationWatchId=null}},onUpdate(Z){return Q("craft:location:update",Z)},onError(Z){return Q("craft:location:error",Z)},onAuthChanged(Z){return Q("craft:location:authChanged",Z)}};var B$={async captureScreen(){if(!J("screenCapture"))return null;let Z=await window.craft.screenCapture.captureScreen();return Z?String(Z):null},async captureWindow(Z){if(!J("screenCapture"))return null;if(!Number.isFinite(Z)||Z<=0)throw Error("captureWindow: id must be a positive number");let $=await window.craft.screenCapture.captureWindow(Z);return $?String($):null},async listWindows(){if(!J("screenCapture"))return[];return await window.craft.screenCapture.listWindows()}};var P4=250,O4=60000,RZ=2000,KZ={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function V4(){return{...KZ,signals:{...KZ.signals},sources:[]}}var a={async getState(){if(!J("screenSharing"))return V4();return await window.craft.screenSharing.getState()},async watch(Z=RZ){let $=Math.min(O4,Math.max(P4,Math.round(Z)));if(!J("screenSharing"))return $;let Y=await window.craft.screenSharing.watch($);return Y&&Y.intervalMs||$},async stop(){if(!J("screenSharing"))return;await window.craft.screenSharing.unwatch()},onChange(Z){return Q("craft:screenSharing:change",Z)}};async function l$(Z,$=RZ){let Y=a.onChange(Z);return await a.watch($),()=>{Y(),a.stop()}}var F4={supported:!1,isFocused:null,authorization:"unsupported"};function LZ(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var DZ={async getStatus(){if(!J("focus"))return{...F4};return await window.craft.focus.getStatus()},async requestAuthorization(){if(!J("focus"))return"unsupported";return await window.craft.focus.requestAuthorization()},async setEnabled(Z,$={}){if(!J("focus"))return LZ();if(!(Z?$.onShortcut:$.offShortcut))return{ok:!1,error:`focus.setEnabled: no ${Z?"onShortcut":"offShortcut"} configured`};return await window.craft.focus.setEnabled(Z,$)},async runShortcut(Z){if(!J("focus"))return LZ();if(!Z)throw Error("focus.runShortcut: name is required");return await window.craft.focus.runShortcut(Z)},async listShortcuts(){if(!J("focus"))return[];return await window.craft.focus.listShortcuts()},async listShortcutsResult(){if(!J("focus"))return{canList:!1,shortcuts:[]};let $=await window.craft.focus.listShortcutsResult?.();return{canList:Boolean($?.canList),shortcuts:$?.shortcuts??[]}}};async function h$(...Z){if(Z.length===0)return!1;let $=new Set(await DZ.listShortcuts());return Z.every((Y)=>$.has(Y))}async function c$(...Z){if(Z.length===0)return!1;let{canList:$,shortcuts:Y}=await DZ.listShortcutsResult();if(!$)return"unknown";let z=new Set(Y);return Z.every((G)=>z.has(G))}var r$={async start(Z=0,$="127.0.0.1"){if(!J("localServer"))return{port:0,started:!1,reason:"bridge unavailable"};return await window.craft.localServer.start(Z,$)},async stop(){if(!J("localServer"))return;await window.craft.localServer.stop()},async respond(Z){if(!J("localServer"))return;await window.craft.localServer.respond(Z||{status:200,body:"OK"})},onRequest(Z){return Q("craft:localServer:request",Z)},async awaitOAuthCallback(Z={}){V("localServer");let{port:$=0,host:Y="127.0.0.1",timeoutMs:z=300000,successHTML:G}=Z,X=await this.start($,Y);if(!X.started)throw Error(`localServer: start failed${X.reason?` \u2014 ${X.reason}`:""}`);return new Promise((O,P)=>{let F=setTimeout(()=>{j(),this.stop().catch(()=>{}),P(Error("localServer: OAuth callback timed out"))},z),j=this.onRequest(({url:R})=>{clearTimeout(F),j();let N=G??`<!doctype html><meta charset="utf-8"><title>Done</title>
310
+ `).trim()}var F8={async show(Z){if(!Z.title)throw Error("notification title is required");if(J("notifications")){await window.craft.notifications.show(Z);return}if(typeof window<"u"&&"Notification"in window){let $=window.Notification;if($.permission==="granted")new $(Z.title,{body:Z.body,icon:Z.icon});else if($.permission==="default"){if(await $.requestPermission()==="granted")new $(Z.title,{body:Z.body,icon:Z.icon})}}},async schedule(Z){if(J("notifications")){let z={...Z};if(z.triggerAt instanceof Date)z.triggerAt=z.triggerAt.toISOString();await window.craft.notifications.schedule(z);return}let $=uZ(Z.triggerAt),Y=Math.max(0,$-Date.now());setTimeout(()=>{this.show(Z).catch(()=>{})},Y)},async cancel(Z){if(J("notifications"))await window.craft.notifications.cancel(Z)},async cancelAll(){if(J("notifications"))await window.craft.notifications.cancelAll()},async setBadge(Z){let $=Math.max(0,Math.round(Number.isFinite(Z)?Z:0));if(J("notifications")){await window.craft.notifications.setBadge($);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge($)}catch{}},async clearBadge(){if(J("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(J("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let Z=window.Notification;if(Z.permission==="granted")return!0;if(Z.permission==="denied")return!1;return await Z.requestPermission()==="granted"}return!1},async registerCategories(Z){if(!Array.isArray(Z)||Z.length===0)return;if(J("notifications")){let $=window.craft.notifications.registerCategories;if(typeof $==="function")await $(Z)}},onActionClicked(Z){return Q("craft:notification:actionClicked",Z)},onReply(Z){return Q("craft:notification:reply",Z)}};function uZ(Z){if(Z==null)return Date.now();if(Z instanceof Date)return Z.getTime();if(typeof Z==="number")return Z;let $=Date.parse(Z);return Number.isNaN($)?Date.now():$}var K8={async readFile(Z){let $=await V("fs").readFile(Z);return $&&$.data||""},async readBuffer(Z){let $=await V("fs").readFile(Z),Y=$&&$.data||"";if($&&$.base64===!0)return cZ(Y);return new TextEncoder().encode(Y)},async writeFile(Z,$){await V("fs").writeFile(Z,$)},async writeBuffer(Z,$){let Y=hZ($),z=V("fs");if(typeof z.writeFileBytes==="function")await z.writeFileBytes(Z,Y);else await z.writeFile(Z,Y)},async copy(Z,$){if(Z===$)throw Error("fs.copy: source and destination must differ");await V("fs").copy(Z,$)},async move(Z,$){if(Z===$)throw Error("fs.move: source and destination must differ");await V("fs").move(Z,$)},async appendFile(Z,$){await V("fs").appendFile(Z,$)},async deleteFile(Z){await V("fs").deleteFile(Z)},async exists(Z){return await V("fs").exists(Z)},async stat(Z){return pZ(await V("fs").stat(Z))},async readDir(Z){let $=await V("fs").readDir(Z),Y=$&&$.entries||[],z=Z.endsWith("/")?Z.slice(0,-1):Z;return Y.map((G)=>({name:G.name,path:`${z}/${G.name}`,isDirectory:!!G.isDirectory}))},async mkdir(Z,$){await V("fs").mkdir(Z,$)},async rmdir(Z,$){await V("fs").rmdir(Z,$)},async watch(Z,$){await V("fs").watch(Z,$)},async unwatch(Z){await V("fs").unwatch(Z)},onChange(Z){return Q("craft:fs:change",Z)},async watchTree(Z,$,Y){let z=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,G=V("fs");await G.watch(Z,z,{recursive:!!$.recursive});let X=$.kinds&&$.kinds.length>0?new Set($.kinds):null,O=Math.max(0,Math.floor($.coalesceMs??0)),P=[],F=null,j=!1,R=()=>{if(F=null,P.length===0)return;let L=P;P=[];try{Y(L)}catch{}},N=Q("craft:fs:change",(L)=>{if(j)return;if(L.id!==z)return;if(X&&L.kind&&!X.has(L.kind))return;if(P.push(L),O===0){R();return}if(F==null)F=setTimeout(R,O)});return{id:z,async stop(){if(j)return;if(j=!0,N(),F)clearTimeout(F),F=null;if(P.length>0)R();try{await G.unwatch(z)}catch{}}}},async homeDir(){return await V("fs").homeDir()},async tempDir(){return await V("fs").tempDir()},async appDataDir(){return await V("fs").appDataDir()}};function hZ(Z){let $="";for(let Y=0;Y<Z.length;Y++)$+=String.fromCharCode(Z[Y]);return typeof btoa==="function"?btoa($):Buffer.from(Z).toString("base64")}function cZ(Z){let $=typeof atob==="function"?atob(Z):Buffer.from(Z,"base64").toString("binary"),Y=new Uint8Array($.length);for(let z=0;z<$.length;z++)Y[z]=$.charCodeAt(z);return Y}function pZ(Z){return{isFile:!!Z.isFile,isDirectory:!!Z.isDirectory,isSymlink:!!Z.isSymlink,size:Number(Z.size)||0,modifiedAt:Z.modifiedAt!=null?Z.modifiedAt<1000000000000?Z.modifiedAt*1000:Z.modifiedAt:0}}var S=new Set,XZ=!1;function dZ(){if(XZ)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let $=Z.detail;if($?.id)S.delete($.id)}),XZ=!0}var rZ=new Set(["javascript:","data:","file:","vbscript:"]),D8={async openExternal(Z){let $=Z.trim().toLowerCase();for(let Y of rZ)if($.startsWith(Y))throw Error(`shell.openExternal: ${Y} URLs are blocked for safety`);if(J("shell")){await window.craft.shell.openExternal(Z);return}if(typeof window<"u"&&typeof window.open==="function")window.open(Z,"_blank","noopener,noreferrer")},async openPath(Z){await V("shell").openPath(Z)},async showInFinder(Z){await V("shell").showInFinder(Z)},async spawn(Z,$,Y=[],z={}){if(dZ(),!Z||typeof Z!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!$||typeof $!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray(Y))throw Error("shell.spawn: args must be an array");for(let G of Y)if(typeof G!=="string")throw Error("shell.spawn: args entries must be strings");if(S.has(Z))throw Error(`shell.spawn: id "${Z}" is already in use \u2014 call kill(id) first or pick a different id`);S.add(Z);try{await V("shell").spawn(Z,$,Y,z)}catch(G){throw S.delete(Z),G}},async kill(Z){await V("shell").kill(Z),S.delete(Z)},async getEnv(Z){if(J("shell")){let $=await window.craft.shell.getEnv(Z);return $==null?void 0:String($)}return},async setEnv(Z,$){await V("shell").setEnv(Z,$)},onStdout(Z){return Q("craft:shell:stdout",Z)},onStderr(Z){return Q("craft:shell:stderr",Z)},onExit(Z){return Q("craft:shell:exit",Z)}};var q8={async register(Z,$,Y){if(!J("shortcuts"))return;await window.craft.shortcuts.register(Z,$,Y)},async unregister(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.unregister(Z)},async unregisterAll(){if(!J("shortcuts"))return;await window.craft.shortcuts.unregisterAll()},async enable(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.enable(Z)},async disable(Z){if(!J("shortcuts"))return;await window.craft.shortcuts.disable(Z)},async isRegistered(Z){if(!J("shortcuts"))return!1;return await window.craft.shortcuts.isRegistered(Z)},async list(){if(!J("shortcuts"))return[];return await window.craft.shortcuts.list()},on(Z){return Q("craft:shortcut",Z)}};var M8={get(){if(J("theme"))try{return window.craft.theme.get()}catch{}return{appearance:nZ()}},onChange(Z){if(Z(this.get()),J("theme"))return Q("craft:theme",Z);if(typeof window<"u"&&window.matchMedia){let $=window.matchMedia("(prefers-color-scheme: dark)"),Y=()=>Z({appearance:$.matches?"dark":"light"});return $.addEventListener("change",Y),()=>$.removeEventListener("change",Y)}return()=>{}},async current(){return this.get()}};function nZ(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function A8(Z,$={}){if(!J("dragOut"))throw Error("dragOut requires a Craft native window");let Y=Array.isArray(Z)?Z:[Z];if(Y.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start(Y,$)}function _8(){return J("dragOut")}var C8={onUrl(Z){if(!J("deepLink"))return()=>{};return Q("craft:deepLink",Z)},getInitialUrl(){if(typeof window>"u")return null;if(J("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let Z=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return Z},isAvailable(){return J("deepLink")}};var y8={async isCharging(){if(J("power"))return await window.craft.power.isCharging();let Z=await m();return Z?!!Z.charging:!1},async isPluggedIn(){if(J("power"))return await window.craft.power.isPluggedIn();let Z=await m();return Z?!!Z.charging||Z.level>=0.999:!1},async isLowPowerMode(){if(J("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(J("power")){let $=await window.craft.power.batteryLevel();return typeof $==="number"?$:null}let Z=await m();return Z?Z.level:null},async timeRemaining(){if(J("power")){let Y=await window.craft.power.timeRemaining();return typeof Y==="number"?Y:null}let Z=await m();if(!Z)return null;let $=Z.charging?Z.chargingTime:Z.dischargingTime;return Number.isFinite($)?Math.round($/60):null},async thermalState(){if(J("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(J("power"))return await window.craft.power.uptimeSeconds();if(typeof performance<"u"&&typeof performance.now==="function")return Math.round(performance.now()/1000);return 0},async preventSleep(Z="app is busy"){if(J("power")){await window.craft.power.preventSleep(Z);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let $=window;if($.__craftWebWakeLock?.release){try{await $.__craftWebWakeLock.release()}catch{}$.__craftWebWakeLock=null}try{let Y=await navigator.wakeLock.request("screen");$.__craftWebWakeLock=Y}catch{}},async allowSleep(){if(J("power")){await window.craft.power.allowSleep();return}let Z=window.__craftWebWakeLock;if(Z&&typeof Z.release==="function"){try{await Z.release()}catch{}window.__craftWebWakeLock=null}},onSleep(Z){return Q("craft:powerSleep",Z)},onWake(Z){return Q("craft:powerWake",Z)}};async function m(){if(typeof navigator>"u")return null;let Z=navigator;if(typeof Z.getBattery!=="function")return null;try{return await Z.getBattery()}catch{return null}}var B8={async connectionType(){if(J("network"))return await window.craft.network.connectionType();return PZ()},async wifiSSID(){if(J("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(J("network")){let Z=await window.craft.network.wifiSignalStrength();return typeof Z==="number"?Z:void 0}return},async ipAddress(){if(J("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(J("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(J("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(J("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(J("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(J("network"))await window.craft.network.openPreferences()},onChange(Z){if(J("network"))return Q("craft:networkChange",Z);if(typeof window>"u")return()=>{};let $=()=>Z({type:PZ(),online:!0}),Y=()=>Z({type:"none",online:!1});return window.addEventListener("online",$),window.addEventListener("offline",Y),()=>{window.removeEventListener("online",$),window.removeEventListener("offline",Y)}}};function PZ(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let Z=navigator.connection;if(!Z)return"unknown";let $=String(Z.type||Z.effectiveType||"unknown").toLowerCase();if($==="wifi"||$==="cellular"||$==="ethernet"||$==="bluetooth"||$==="none")return $;return"unknown"}var l8={async checkForUpdates(){if(!J("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!J("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(Z){if(!J("updater"))return;await window.craft.updater.setAutomaticChecks(Z)},async setCheckInterval(Z){if(!J("updater"))return;if(!Number.isFinite(Z))throw Error("setCheckInterval: must be a finite number");let $=Z<=0?0:Math.max(60,Math.round(Z));await window.craft.updater.setCheckInterval($)},async setFeedURL(Z){if(!J("updater"))return;await window.craft.updater.setFeedURL(Z)},async getLastUpdateCheckDate(){if(!J("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!J("updater"))return null;let Z=await window.craft.updater.getUpdateInfo();if(!Z||typeof Z.version!=="string"||Z.version.length===0)return null;return Z},onAvailable(Z){return Q("craft:updateAvailable",Z)},onDownloaded(Z){return Q("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:$,publicKeyB64:Y}){let z=OZ(Z),G;try{G=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",G,B($),z)}catch{return!1}},async verifyDownload({url:Z,signatureB64:$,publicKeyB64:Y,fetchInit:z}){let G;try{G=await fetch(Z,z)}catch{return{ok:!1,reason:"fetch-failed"}}if(!G.ok)return{ok:!1,reason:"http-error",status:G.status};let X=new Uint8Array(await G.arrayBuffer()),O;try{O=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let P=!1;try{P=await crypto.subtle.verify("Ed25519",O,B($),OZ(X))}catch{P=!1}if(!P)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:X}}};function OZ(Z){if(Z instanceof ArrayBuffer)return new Uint8Array(Z);let $=new ArrayBuffer(Z.byteLength),Y=new Uint8Array($);return Y.set(Z),Y}function B(Z){if(typeof atob==="function"){let z=atob(Z),G=new ArrayBuffer(z.length),X=new Uint8Array(G);for(let O=0;O<z.length;O++)X[O]=z.charCodeAt(O);return X}let $=Buffer.from(Z,"base64"),Y=new ArrayBuffer($.length);return new Uint8Array(Y).set($),new Uint8Array(Y)}var h8={onFocus(Z){if(J("window"))return Q("craft:window:focus",()=>Z());return d("focus",Z)},onBlur(Z){if(J("window"))return Q("craft:window:blur",()=>Z());return d("blur",Z)},onResize(Z){if(J("window"))return Q("craft:window:resize",Z);if(typeof window>"u")return()=>{};let $=()=>Z({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},onMove(Z){if(J("window"))return Q("craft:window:move",Z);return()=>{}},onClose(Z){if(J("window"))return Q("craft:window:close",()=>Z());return d("beforeunload",Z)},onMinimize(Z){if(J("window"))return Q("craft:window:minimize",()=>Z());if(typeof document>"u")return()=>{};let $=()=>{if(document.visibilityState==="hidden")Z()};return document.addEventListener("visibilitychange",$),()=>document.removeEventListener("visibilitychange",$)},onRestore(Z){if(J("window"))return Q("craft:window:restore",()=>Z());if(typeof document>"u")return()=>{};let $=()=>{if(document.visibilityState==="visible")Z()};return document.addEventListener("visibilitychange",$),()=>document.removeEventListener("visibilitychange",$)}};function d(Z,$){if(typeof window>"u")return()=>{};let Y=()=>$();return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var VZ={name:"",version:"0.0.0"},d8={async hideDockIcon(){if(J("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(J("app"))await window.craft.app.showDockIcon()},async quit(){if(J("app"))await window.craft.app.quit()},async getInfo(){if(!J("app"))return VZ;let Z=await window.craft.app.getInfo();return{...VZ,...Z||{}}},async notify(Z){if(!Z.title)throw Error("notify: title is required");if(J("app"))await window.craft.app.notify(Z)},async setBadge(Z){if(J("app"))await window.craft.app.setBadge(Z)},async bounce(Z="informational"){if(J("app"))await window.craft.app.bounce(Z)}};var o8={app(Z){return{label:Z,items:[{label:`About ${Z}`,role:"about"},{separator:!0},{label:`Hide ${Z}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${Z}`,role:"quit",shortcut:"cmd+q"}]}},edit(){return{label:"Edit",items:[{label:"Undo",role:"undo",shortcut:"cmd+z"},{label:"Redo",role:"redo",shortcut:"cmd+shift+z"},{separator:!0},{label:"Cut",role:"cut",shortcut:"cmd+x"},{label:"Copy",role:"copy",shortcut:"cmd+c"},{label:"Paste",role:"paste",shortcut:"cmd+v"},{label:"Select All",role:"selectAll",shortcut:"cmd+a"}]}},window(){return{label:"Window",items:[{label:"Minimize",role:"minimize",shortcut:"cmd+m"},{label:"Zoom",role:"zoom"},{separator:!0},{label:"Close Window",role:"close",shortcut:"cmd+w"}]}},leading(Z){return[this.app(Z),this.edit()]}},oZ=0;function aZ(Z){let $=new Map;return{payload:{menus:Z.menus.map((z)=>({label:z.label,items:z.items.map((G)=>{let{onClick:X,...O}=G;if(O.separator)return O;let P=O.id??`stx.menu.${oZ++}`;if(X)$.set(P,X);return{...O,id:P}})}))},handlers:$}}var r=null,a8={async set(Z){if(!J("menu"))return!1;let{payload:$,handlers:Y}=aZ(Z);if(r?.(),r=null,Y.size>0)r=Q("craft:menu:action",(z)=>{Y.get(z.id)?.()});return await window.craft.menu.set($),!0},async setDock(Z){if(J("menu"))await window.craft.menu.setDock(Z)},async addItem(Z,$){if(J("menu"))await window.craft.menu.addItem(Z,$)},async removeItem(Z){if(J("menu"))await window.craft.menu.removeItem(Z)},async enableItem(Z){if(J("menu"))await window.craft.menu.enableItem(Z)},async disableItem(Z){if(J("menu"))await window.craft.menu.disableItem(Z)},async checkItem(Z){if(J("menu"))await window.craft.menu.checkItem(Z)},async uncheckItem(Z){if(J("menu"))await window.craft.menu.uncheckItem(Z)},async setItemLabel(Z,$){if(J("menu"))await window.craft.menu.setItemLabel(Z,$)},async clearDock(){if(J("menu"))await window.craft.menu.clearDock()},onAction(Z){return Q("craft:menu:action",Z)}};var t8={async getDisplays(){if(J("screen"))return await window.craft.screen.getDisplays();return FZ()},async getPrimary(){if(J("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return FZ()[0]??null},onChange(Z){if(J("screen"))return Q("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let $=()=>Z();return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)}};function FZ(){if(typeof window>"u"||!window.screen)return[];let Z=window.screen;return[{id:0,x:Z.left??0,y:Z.top??0,width:Z.width||0,height:Z.height||0,workX:Z.availLeft??0,workY:Z.availTop??0,workWidth:Z.availWidth??Z.width??0,workHeight:Z.availHeight??Z.height??0,scaleFactor:window.devicePixelRatio||1}]}var $$={async set(Z,$,Y){if(!Z)throw Error("keychain.set: service is required");if(!$)throw Error("keychain.set: account is required");await V("keychain").set(Z,$,Y)},async get(Z,$){if(!Z)throw Error("keychain.get: service is required");if(!$)throw Error("keychain.get: account is required");let Y=await V("keychain").get(Z,$);return typeof Y==="string"?Y:null},async delete(Z,$){if(!Z)throw Error("keychain.delete: service is required");if(!$)throw Error("keychain.delete: account is required");await V("keychain").delete(Z,$)},async has(Z,$){if(!Z)throw Error("keychain.has: service is required");if(!$)throw Error("keychain.has: account is required");return await V("keychain").has(Z,$)}};var z$={async check(Z){if(J("permissions"))return await window.craft.permissions.check(Z);return await jZ(Z)},async request(Z){if(J("permissions"))return await window.craft.permissions.request(Z);return await iZ(Z)},async openSettings(Z){if(J("permissions"))await window.craft.permissions.openSettings(Z)}};async function jZ(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let $=await navigator.permissions.query({name:Z});return sZ($.state)}catch{return"not-supported"}}async function iZ(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let $=await window.Notification.requestPermission();return $==="granted"?"granted":$==="denied"?"denied":"undetermined"}return await jZ(Z)}function sZ(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var X$={async print(){if(J("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(Z){if(!Z)throw Error("printToPDF: path is required");let $=Z.startsWith("/"),Y=/^[a-zA-Z]:[\\/]/.test(Z)||Z.startsWith("\\\\");if(!$&&!Y)throw Error("printToPDF: path must be absolute");let z=await V("printing").printToPDF(Z);return{ok:!!(z&&z.ok),path:z?.path}}};var V$={async enable(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!J("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};var W$={async addItem(Z){if(J("touchbar"))await window.craft.touchbar.addItem(Z)},async removeItem(Z){if(J("touchbar"))await window.craft.touchbar.removeItem(Z)},async updateItem(Z,$){if(J("touchbar"))await window.craft.touchbar.updateItem(Z,$)},async setLabel(Z,$){if(J("touchbar"))await window.craft.touchbar.setLabel(Z,$)},async setIcon(Z,$){if(J("touchbar"))await window.craft.touchbar.setIcon(Z,$)},async setEnabled(Z,$){if(J("touchbar"))await window.craft.touchbar.setEnabled(Z,$)},async setSliderValue(Z,$){if(J("touchbar"))await window.craft.touchbar.setSliderValue(Z,$)},async clear(){if(J("touchbar"))await window.craft.touchbar.clear()},async show(){if(J("touchbar"))await window.craft.touchbar.show()},async hide(){if(J("touchbar"))await window.craft.touchbar.hide()},onAction(Z){return Q("craft:touchbar:action",Z)}};var tZ=/^[\da-f]*$/i;function eZ(Z,$){if(typeof $!=="string"||!tZ.test($)||$.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify($)}`)}var L$={async isEnabled(){return J("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return J("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return J("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return J("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(J("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(J("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return J("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(Z){if(J("bluetooth"))await window.craft.bluetooth.connect(Z)},async disconnect(Z){if(J("bluetooth"))await window.craft.bluetooth.disconnect(Z)},async openPreferences(){if(J("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(Z){if(!Z)throw Error("bluetooth.discoverServices: deviceId is required");if(!J("bluetooth"))return[];let $=await window.craft.bluetooth.discoverServices(Z);return Array.isArray($)?$:[]},async discoverCharacteristics(Z,$){if(!Z||!$)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!J("bluetooth"))return[];let Y=await window.craft.bluetooth.discoverCharacteristics(Z,$);return Array.isArray(Y)?Y:[]},async readCharacteristic(Z,$,Y){if(!Z||!$||!Y)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(Z,$,Y)},async writeCharacteristic(Z,$,Y,z,G="with-response"){if(!Z||!$||!Y)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(eZ("bluetooth.writeCharacteristic.valueHex",z),!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(Z,$,Y,z,G)},async setCharacteristicNotify(Z,$,Y,z){if(!Z||!$||!Y)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!J("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(Z,$,Y,z)},onDeviceFound(Z){return Q("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return Q("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return Q("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return Q("craft:bluetooth:characteristicValue",Z)}};var N$={async speak(Z,$){if(!Z)throw Error("speech.speak: text is required");if(J("speech")){await window.craft.speech.speak(Z,$);return}if(typeof window<"u"&&window.speechSynthesis){let Y=new window.SpeechSynthesisUtterance(Z);if($){if($.rate!=null)Y.rate=$.rate;if($.pitch!=null)Y.pitch=$.pitch;if($.volume!=null)Y.volume=$.volume;if($.voice){let G=window.speechSynthesis.getVoices().find((X)=>X.voiceURI===$.voice||X.name===$.voice||X.lang===$.voice);if(G)Y.voice=G}}window.speechSynthesis.speak(Y)}},async stop(){if(J("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(J("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(J("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(J("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(J("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map(($)=>({id:$.voiceURI||$.name,name:$.name,language:$.lang||"",quality:"default"}));return[]}};var A=[],n=!0,o,a,v={async report(Z){if(J("crashReporter")){await window.craft.crashReporter.report(Z);return}if(!n)return;let $=Z instanceof Error?{timestamp:Date.now(),severity:"error",message:Z.message,source:"js",stack:Z.stack||"",userId:o,appVersion:a}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:o,appVersion:a};if(A.length>=64)A.shift();A.push($)},async flush(){if(J("crashReporter"))return await window.craft.crashReporter.flush();return[...A]},async clear(){if(J("crashReporter")){await window.craft.crashReporter.clear();return}A.length=0},async setEnabled(Z){if(J("crashReporter")){await window.craft.crashReporter.setEnabled(Z);return}n=Z},async isEnabled(){if(J("crashReporter"))return await window.craft.crashReporter.isEnabled();return n},async setUser(Z){if(J("crashReporter")){await window.craft.crashReporter.setUser(Z);return}o=Z||void 0},async setAppVersion(Z){if(J("crashReporter")){await window.craft.crashReporter.setAppVersion(Z);return}a=Z||void 0},attachGlobalHandlers(){if(J("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let Z=(Y)=>{v.report({severity:"error",message:Y.message,source:"js",stack:Y.error?.stack||`${Y.message}
311
+ at ${Y.filename}:${Y.lineno}:${Y.colno}`}).catch(()=>{})},$=(Y)=>{let z=Y.reason;v.report({severity:"error",message:z?.message||String(z),source:"js",stack:z?.stack||""}).catch(()=>{})};return window.addEventListener("error",Z),window.addEventListener("unhandledrejection",$),()=>{window.removeEventListener("error",Z),window.removeEventListener("unhandledrejection",$)}},forwardTo(Z){return X4(Z)}},Z4="craft:crashReporter:pending",$4=/[\w.+-]+@[\w-]+\.[\w.-]+/g,J4=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,Y4=/\/(?:Users|home)\/[^\s/'"`]+/g;function z4(Z){let $=(Y)=>Y.replace($4,"<email>").replace(J4,"<ip>").replace(Y4,"/<home>");return{...Z,message:$(Z.message),stack:$(Z.stack)}}async function G4(Z,$){let Y=new TextEncoder,z=await crypto.subtle.importKey("raw",Y.encode(Z),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),G=await crypto.subtle.sign("HMAC",z,Y.encode($));return[...new Uint8Array(G)].map((X)=>X.toString(16).padStart(2,"0")).join("")}function Q4(Z){if(!Z||typeof localStorage>"u")return[];try{let $=localStorage.getItem(Z);if(!$)return[];let Y=JSON.parse($);return Array.isArray(Y)?Y:[]}catch{return[]}}function WZ(Z,$){if(!Z||typeof localStorage>"u")return;try{if($.length===0)localStorage.removeItem(Z);else localStorage.setItem(Z,JSON.stringify($))}catch{}}function X4(Z){let{endpoint:$,intervalMs:Y=60000,signingSecret:z,redact:G=!0,headers:X={},maxRetries:O=5,persistKey:P}=Z,F=P===null?null:P??Z4,j=Q4(F),R=!1,N=null,L=null,NZ=typeof G==="function"?G:G===!1?(q)=>q:z4;async function qZ(q){let _=JSON.stringify({entries:q}),x={"Content-Type":"application/json",...X};if(z)x["X-Craft-Signature"]=await G4(z,_);let t=0,l=1000;while(!R)try{let M=await fetch($,{method:"POST",headers:x,body:_});if(M.ok)return;if(M.status>=400&&M.status<500)return;throw Error(`HTTP ${M.status}`)}catch(M){if(t+=1,t>O)throw j=[...q,...j],WZ(F,j),M;await new Promise((HZ)=>{setTimeout(HZ,l)}),l=Math.min(l*2,60000)}}async function s(){if(R||L)return L??void 0;let q=await v.flush();if(q.length>0)await v.clear();if(j=[...j,...q.map((x)=>NZ(x))],j.length===0)return;let _=j;return j=[],WZ(F,j),L=qZ(_).catch(()=>{}).finally(()=>{L=null}),L}if(Y>0)N=setInterval(()=>{s().catch(()=>{})},Y);return{async flushNow(){await s()},stop(){if(R=!0,N)clearInterval(N);N=null},pending(){return[...j]}}}var S$={async isAvailable(){if(!J("iap"))return!1;return await window.craft.iap.isAvailable()},async getProducts(Z){if(!J("iap"))return[];let $=Array.isArray(Z)?Z:[String(Z)];return await window.craft.iap.getProducts($)},async purchase(Z){if(!J("iap"))return{queued:!1,productId:Z,reason:"IAP bridge not available"};let $=await window.craft.iap.purchase(Z);return{queued:!!($&&$.queued),productId:$?.productId,reason:$?.reason}},async restorePurchases(){if(!J("iap"))return{ok:!1};let Z=await window.craft.iap.restorePurchases();return{ok:!!(Z&&Z.ok)}},async finishTransaction(Z){if(!J("iap"))return;await window.craft.iap.finishTransaction(Z)},async getReceiptData(){if(!J("iap"))return null;let Z=await window.craft.iap.getReceiptData();return Z?String(Z):null},onPurchased(Z){return Q("craft:iap:purchased",Z)},onFailed(Z){return Q("craft:iap:failed",Z)},onRestored(Z){return Q("craft:iap:restored",Z)},onProductsLoaded(Z){return Q("craft:iap:productsLoaded",($)=>Z($.products||[]))},onRefunded(Z){return Q("craft:iap:refunded",Z)},onSubscriptionStatusChanged(Z){return Q("craft:iap:subscriptionStatusChanged",Z)},async getActiveSubscriptions(){if(!J("iap"))return[];let Z=window.craft.iap.getActiveSubscriptions;if(typeof Z!=="function")return[];let $=await Z();return Array.isArray($)?$:[]},async isEligibleForIntroOffer(Z){if(!J("iap"))return!1;let $=window.craft.iap.isEligibleForIntroOffer;if(typeof $!=="function")return!1;return!!await $(Z)}};var b={async startActivity(Z,$){if(!Z)throw Error("handoff.startActivity: type is required");if(!J("handoff"))return!1;let Y=await window.craft.handoff.startActivity(Z,$);return typeof Y==="boolean"?Y:!!(Y&&Y.ok)},async updateActivity(Z){if(!J("handoff"))return!1;let $=await window.craft.handoff.updateActivity(Z);return typeof $==="boolean"?$:!!($&&$.ok)},async stopActivity(){if(!J("handoff"))return;await window.craft.handoff.stopActivity()},async getCurrentActivity(){if(!J("handoff"))return null;let Z=await window.craft.handoff.getCurrentActivity();return Z&&typeof Z.type==="string"?Z:null},onIncoming(Z){return Q("craft:handoff:incoming",Z)}};var C$={async start(Z,$){return b.startActivity(Z,{title:$?.title,webpageURL:$?.webpageURL,userInfo:$?.state})},async update(Z){return b.updateActivity({title:Z.title,webpageURL:Z.webpageURL,userInfo:Z.state})},async stop(){await b.stopActivity()}};var y$={async requestPermission(Z="whenInUse"){if(J("location"))return await window.craft.location.requestPermission(Z);if(typeof navigator<"u"&&navigator.geolocation)return"undetermined";return"not-supported"},async getAuthorization(){if(J("location"))return await window.craft.location.getAuthorization();return"unknown"},async getCurrentLocation(){if(J("location"))return await window.craft.location.getCurrentLocation();if(typeof navigator<"u"&&navigator.geolocation)return navigator.geolocation.getCurrentPosition((Z)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:Z.coords.latitude,longitude:Z.coords.longitude,altitude:Z.coords.altitude,horizontalAccuracy:Z.coords.accuracy,verticalAccuracy:Z.coords.altitudeAccuracy,speed:Z.coords.speed}}))},(Z)=>{window.dispatchEvent(new CustomEvent("craft:location:error",{detail:{message:Z.message||String(Z)}}))}),{requested:!0};return{requested:!1}},async startWatching(Z){if(J("location"))return await window.craft.location.startWatching(Z);if(typeof navigator<"u"&&navigator.geolocation){let $=navigator.geolocation.watchPosition((Y)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:Y.coords.latitude,longitude:Y.coords.longitude,altitude:Y.coords.altitude,horizontalAccuracy:Y.coords.accuracy,verticalAccuracy:Y.coords.altitudeAccuracy,speed:Y.coords.speed}}))});return window.__craftWebLocationWatchId=$,!0}return!1},async stopWatching(){if(J("location")){await window.craft.location.stopWatching();return}if(typeof navigator<"u"&&navigator.geolocation){let Z=window.__craftWebLocationWatchId;if(Z!=null)navigator.geolocation.clearWatch(Z),window.__craftWebLocationWatchId=null}},onUpdate(Z){return Q("craft:location:update",Z)},onError(Z){return Q("craft:location:error",Z)},onAuthChanged(Z){return Q("craft:location:authChanged",Z)}};var B$={async captureScreen(){if(!J("screenCapture"))return null;let Z=await window.craft.screenCapture.captureScreen();return Z?String(Z):null},async captureWindow(Z){if(!J("screenCapture"))return null;if(!Number.isFinite(Z)||Z<=0)throw Error("captureWindow: id must be a positive number");let $=await window.craft.screenCapture.captureWindow(Z);return $?String($):null},async listWindows(){if(!J("screenCapture"))return[];return await window.craft.screenCapture.listWindows()}};var P4=250,O4=60000,RZ=2000,KZ={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function V4(){return{...KZ,signals:{...KZ.signals},sources:[]}}var i={async getState(){if(!J("screenSharing"))return V4();return await window.craft.screenSharing.getState()},async watch(Z=RZ){let $=Math.min(O4,Math.max(P4,Math.round(Z)));if(!J("screenSharing"))return $;let Y=await window.craft.screenSharing.watch($);return Y&&Y.intervalMs||$},async stop(){if(!J("screenSharing"))return;await window.craft.screenSharing.unwatch()},onChange(Z){return Q("craft:screenSharing:change",Z)}};async function l$(Z,$=RZ){let Y=i.onChange(Z);return await i.watch($),()=>{Y(),i.stop()}}var F4={supported:!1,isFocused:null,authorization:"unsupported"};function LZ(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var DZ={async getStatus(){if(!J("focus"))return{...F4};return await window.craft.focus.getStatus()},async requestAuthorization(){if(!J("focus"))return"unsupported";return await window.craft.focus.requestAuthorization()},async setEnabled(Z,$={}){if(!J("focus"))return LZ();if(!(Z?$.onShortcut:$.offShortcut))return{ok:!1,error:`focus.setEnabled: no ${Z?"onShortcut":"offShortcut"} configured`};return await window.craft.focus.setEnabled(Z,$)},async runShortcut(Z){if(!J("focus"))return LZ();if(!Z)throw Error("focus.runShortcut: name is required");return await window.craft.focus.runShortcut(Z)},async listShortcuts(){if(!J("focus"))return[];return await window.craft.focus.listShortcuts()},async listShortcutsResult(){if(!J("focus"))return{canList:!1,shortcuts:[]};let $=await window.craft.focus.listShortcutsResult?.();return{canList:Boolean($?.canList),shortcuts:$?.shortcuts??[]}}};async function h$(...Z){if(Z.length===0)return!1;let $=new Set(await DZ.listShortcuts());return Z.every((Y)=>$.has(Y))}async function c$(...Z){if(Z.length===0)return!1;let{canList:$,shortcuts:Y}=await DZ.listShortcutsResult();if(!$)return"unknown";let z=new Set(Y);return Z.every((G)=>z.has(G))}var r$={async start(Z=0,$="127.0.0.1"){if(!J("localServer"))return{port:0,started:!1,reason:"bridge unavailable"};return await window.craft.localServer.start(Z,$)},async stop(){if(!J("localServer"))return;await window.craft.localServer.stop()},async respond(Z){if(!J("localServer"))return;await window.craft.localServer.respond(Z||{status:200,body:"OK"})},onRequest(Z){return Q("craft:localServer:request",Z)},async awaitOAuthCallback(Z={}){V("localServer");let{port:$=0,host:Y="127.0.0.1",timeoutMs:z=300000,successHTML:G}=Z,X=await this.start($,Y);if(!X.started)throw Error(`localServer: start failed${X.reason?` \u2014 ${X.reason}`:""}`);return new Promise((O,P)=>{let F=setTimeout(()=>{j(),this.stop().catch(()=>{}),P(Error("localServer: OAuth callback timed out"))},z),j=this.onRequest(({url:R})=>{clearTimeout(F),j();let N=G??`<!doctype html><meta charset="utf-8"><title>Done</title>
312
312
  <style>body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;display:flex;align-items:center;justify-content:center;height:100vh;margin:0;background:#f5f5f7}</style>
313
313
  <div><h1>You can close this tab.</h1><p>Returning to the app\u2026</p></div>
314
314
  <script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:N,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),O({url:R,port:X.port})})})}};var a$={async isAvailable(){if(!J("biometric"))return!1;return await window.craft.biometric.isAvailable()},async getBiometryType(){if(!J("biometric"))return"none";return await window.craft.biometric.getBiometryType()},async evaluate(Z,$){if(!Z)throw Error("biometric.evaluate: reason is required");if(!J("biometric"))return{success:!1,errorCode:-1};return await window.craft.biometric.evaluate(Z,$)}};var K=null,t$={async play(Z,$){if(J("audio"))return await window.craft.audio.play(Z,$);if(typeof window>"u"||typeof Audio>"u")return!1;if(K)K.pause(),K=null;if(K=new Audio(Z),$?.volume!=null)K.volume=$.volume;if($?.loops)K.loop=!0;try{return await K.play(),!0}catch{return!1}},async playSystemSound(Z){if(J("audio"))return await window.craft.audio.playSystemSound(Z);if(typeof window>"u"||typeof Audio>"u")return!1;try{return K=new Audio(`/System/Library/Sounds/${Z}.aiff`),await K.play(),!0}catch{return!1}},async stop(){if(J("audio")){await window.craft.audio.stop();return}if(K)K.pause(),K.currentTime=0,K=null},async isPlaying(){if(J("audio"))return await window.craft.audio.isPlaying();return!!(K&&!K.paused)},async startRecording(Z,$){if(J("audio"))return await window.craft.audio.startRecording(Z,$);return!1},async stopRecording(){if(J("audio"))await window.craft.audio.stopRecording()},async isRecording(){if(J("audio"))return await window.craft.audio.isRecording();return!1}};var $J={async execute(Z){if(!Z)throw Error("appleScript.execute: source is required");if(!J("appleScript"))return{ok:!1};return await window.craft.appleScript.execute(Z)}};var zJ={async getDefault(Z){if(!Z)throw Error("fileAssociations.getDefault: uti is required");if(!J("fileAssociations"))return null;let $=await window.craft.fileAssociations.getDefault(Z);return $?String($):null},async setDefault(Z,$){if(!Z||!$)throw Error("fileAssociations.setDefault: uti and bundleId are required");if(!J("fileAssociations"))return!1;return await window.craft.fileAssociations.setDefault(Z,$)}};var XJ={async get(Z){if(!Z)throw Error("tags.get: path is required");if(!J("tags"))return[];return await window.craft.tags.get(Z)},async set(Z,$){if(!Z)throw Error("tags.set: path is required");if(!J("tags"))return!1;let Y=Array.isArray($)?$:[String($)];return await window.craft.tags.set(Z,Y)},async clear(Z){if(!Z)throw Error("tags.clear: path is required");if(!J("tags"))return!1;return await window.craft.tags.clear(Z)}};var VJ={async countPages(Z){if(!Z)throw Error("pdf.countPages: path is required");if(!J("pdf"))return 0;return await window.craft.pdf.countPages(Z)},async extractText(Z){if(!Z)throw Error("pdf.extractText: path is required");if(!J("pdf"))return"";return await window.craft.pdf.extractText(Z)}};var WJ={async debug(Z){if(J("log"))await window.craft.log.debug(Z);else console.debug(Z)},async info(Z){if(J("log"))await window.craft.log.info(Z);else console.info(Z)},async warn(Z){if(J("log"))await window.craft.log.warn(Z);else console.warn(Z)},async error(Z){if(J("log"))await window.craft.log.error(Z);else console.error(Z)}};var LJ={async browse(Z){if(!J("bonjour"))return{started:!1,reason:"bridge unavailable"};return await window.craft.bonjour.browse(Z)},async stop(){if(J("bonjour"))await window.craft.bonjour.stop()},onFound(Z){return Q("craft:bonjour:found",Z)},onLost(Z){return Q("craft:bonjour:lost",Z)}};var NJ={async index(Z){if(!J("spotlight"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.spotlight.index(Z)},async remove(Z){if(!J("spotlight"))return{ok:!1};return await window.craft.spotlight.remove(Z)},async removeAll(){if(!J("spotlight"))return{ok:!1};return await window.craft.spotlight.removeAll()}};var UJ={async isAvailable(){if(!J("speechRecognition"))return!1;return await window.craft.speechRecognition.isAvailable()},async start(Z){if(!J("speechRecognition"))return{started:!1,reason:"bridge unavailable"};return await window.craft.speechRecognition.start(Z)},async stop(){if(J("speechRecognition"))await window.craft.speechRecognition.stop()},onPartial(Z){return Q("craft:speechRecognition:partial",Z)},onFinal(Z){return Q("craft:speechRecognition:final",Z)}};var SJ={async recognizeText(Z){if(!Z)throw Error("vision.recognizeText: path is required");if(!J("vision"))return[];return await window.craft.vision.recognizeText(Z)},async detectFaces(Z){if(!Z)throw Error("vision.detectFaces: path is required");if(!J("vision"))return[];return await window.craft.vision.detectFaces(Z)},async detectBarcodes(Z){if(!Z)throw Error("vision.detectBarcodes: path is required");if(!J("vision"))return[];return await window.craft.vision.detectBarcodes(Z)}};var xJ={async listSources(){if(!J("midi"))return[];return await window.craft.midi.listSources()},async listDestinations(){if(!J("midi"))return[];return await window.craft.midi.listDestinations()},async send(Z,$){if(!J("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.send(Z,$)},async subscribe(Z){if(!J("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.subscribe(Z)},async unsubscribe(Z){if(!J("midi"))return{ok:!1};return await window.craft.midi.unsubscribe(Z)},onMessage(Z){return Q("craft:midi:message",Z)}};var IJ={async loadModel(Z,$){if(!Z||!$)throw Error("coreml.loadModel: id and path are required");if(!J("coreml"))return!1;return await window.craft.coreml.loadModel(Z,$)},async unloadModel(Z){if(!J("coreml"))return;await window.craft.coreml.unloadModel(Z)},async predict(Z,$){if(!Z)throw Error("coreml.predict: id is required");if(!J("coreml"))return null;return await window.craft.coreml.predict(Z,$)}};var fJ={async listCameras(){if(!J("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var vJ={async register(Z){if(!Z)throw Error("serviceMenu.register: name is required");if(!J("serviceMenu"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serviceMenu.register(Z)},async unregister(Z){if(!Z)throw Error("serviceMenu.unregister: name is required");if(!J("serviceMenu"))return;await window.craft.serviceMenu.unregister(Z)},onInvoked(Z){return Q("craft:serviceMenu:invoked",Z)}};var gJ={async list(){if(!J("serial"))return[];return await window.craft.serial.list()},async open(Z,$=9600){if(!Z)throw Error("serial.open: path is required");if(!J("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.open(Z,$)},async write(Z,$){if(!Z)throw Error("serial.write: id is required");if(!J("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.write(Z,$)},async close(Z){if(!J("serial"))return;await window.craft.serial.close(Z)},onData(Z){return Q("craft:serial:data",Z)}};var kZ=[{name:"fs",support:"native"},{name:"shell",support:"native"},{name:"system",support:"all"},{name:"clipboard",support:"all"},{name:"dialog",support:"all"},{name:"window",support:"native"},{name:"tray",support:"native"},{name:"menu",support:"native"},{name:"theme",support:"all"},{name:"screen",support:"all"},{name:"network",support:"all"},{name:"power",support:"all"},{name:"battery",support:"all"},{name:"notifications",support:"all"},{name:"globalShortcuts",support:"native"},{name:"autolaunch",support:"native"},{name:"appInfo",support:"all"},{name:"localServer",support:"native"},{name:"bluetooth",support:"native"},{name:"crashReporter",support:"all"},{name:"updater",support:"native"},{name:"iap",support:"macos"},{name:"keychain",support:"native"},{name:"log",support:"all"},{name:"biometric",support:"macos"},{name:"location",support:"macos"},{name:"audio",support:"macos"},{name:"deepLink",support:"native"},{name:"handoff",support:"macos"},{name:"liveActivities",support:"macos"},{name:"touchbar",support:"macos"},{name:"dragOut",support:"macos"},{name:"appleScript",support:"macos"},{name:"fileAssociations",support:"native"},{name:"tags",support:"macos"},{name:"pdf",support:"macos"},{name:"bonjour",support:"macos"},{name:"spotlight",support:"macos"},{name:"speechRecognition",support:"macos"},{name:"vision",support:"macos"},{name:"midi",support:"macos"},{name:"coreml",support:"macos"},{name:"continuityCamera",support:"macos"},{name:"serviceMenu",support:"macos"},{name:"serial",support:"native"}];function cJ(){return kZ.map(({name:Z,support:$})=>({name:Z,support:$,available:J(Z)}))}function j4(Z){let $=kZ.find((Y)=>Y.name===Z);if(!$)return;return{...$,available:J(Z)}}function pJ(Z){let $=j4(Z);return!!$&&$.available}
315
- export{W4 as a,e as b,C as c,K4 as d,R4 as e,L4 as f,D4 as g,k4 as h,N4 as i,q4 as j,H4 as k,U4 as l,T as m,IZ as n,T4 as o,S4 as p,A4 as q,wZ as r,_4 as s,x4 as t,E4 as u,C4 as v,I4 as w,w4 as x,f4 as y,m4 as z,y as A,B4 as B,v4 as C,b4 as D,l4 as E,g4 as F,u4 as G,c4 as H,yZ as I,p4 as J,d4 as K,r4 as L,n4 as M,mZ as N,a4 as O,i4 as P,lZ as Q,s4 as R,t4 as S,Z8 as T,$8 as U,J8 as V,Y8 as W,z8 as X,J as Y,Q as Z,P8 as _,F8 as $,K8 as aa,D8 as ba,q8 as ca,M8 as da,A8 as ea,_8 as fa,C8 as ga,y8 as ha,B8 as ia,l8 as ja,h8 as ka,d8 as la,o8 as ma,a8 as na,t8 as oa,$$ as pa,z$ as qa,X$ as ra,V$ as sa,W$ as ta,L$ as ua,N$ as va,v as wa,z4 as xa,G4 as ya,S$ as za,b as Aa,C$ as Ba,y$ as Ca,B$ as Da,P4 as Ea,O4 as Fa,RZ as Ga,a as Ha,l$ as Ia,DZ as Ja,h$ as Ka,c$ as La,r$ as Ma,a$ as Na,t$ as Oa,$J as Pa,zJ as Qa,XJ as Ra,VJ as Sa,WJ as Ta,LJ as Ua,NJ as Va,UJ as Wa,SJ as Xa,xJ as Ya,IJ as Za,fJ as _a,vJ as $a,gJ as ab,cJ as bb,j4 as cb,pJ as db};
315
+ export{W4 as a,ZZ as b,C as c,K4 as d,R4 as e,L4 as f,D4 as g,k4 as h,N4 as i,q4 as j,H4 as k,U4 as l,T as m,IZ as n,T4 as o,S4 as p,A4 as q,wZ as r,_4 as s,x4 as t,E4 as u,C4 as v,I4 as w,w4 as x,f4 as y,m4 as z,y as A,B4 as B,v4 as C,b4 as D,l4 as E,g4 as F,u4 as G,c4 as H,yZ as I,p4 as J,d4 as K,r4 as L,n4 as M,mZ as N,a4 as O,i4 as P,lZ as Q,s4 as R,t4 as S,Z8 as T,$8 as U,J8 as V,Y8 as W,z8 as X,J as Y,Q as Z,P8 as _,F8 as $,K8 as aa,D8 as ba,q8 as ca,M8 as da,A8 as ea,_8 as fa,C8 as ga,y8 as ha,B8 as ia,l8 as ja,h8 as ka,d8 as la,o8 as ma,a8 as na,t8 as oa,$$ as pa,z$ as qa,X$ as ra,V$ as sa,W$ as ta,L$ as ua,N$ as va,v as wa,z4 as xa,G4 as ya,S$ as za,b as Aa,C$ as Ba,y$ as Ca,B$ as Da,P4 as Ea,O4 as Fa,RZ as Ga,i as Ha,l$ as Ia,DZ as Ja,h$ as Ka,c$ as La,r$ as Ma,a$ as Na,t$ as Oa,$J as Pa,zJ as Qa,XJ as Ra,VJ as Sa,WJ as Ta,LJ as Ua,NJ as Va,UJ as Wa,SJ as Xa,xJ as Ya,IJ as Za,fJ as _a,vJ as $a,gJ as ab,cJ as bb,j4 as cb,pJ as db};
package/dist/dialogs.d.ts CHANGED
@@ -204,7 +204,7 @@ export declare interface ColorPickerResult {
204
204
  }
205
205
  /** A behaviour Craft's open panel understands. */
206
206
  export type OpenDialogProperty = | 'openFile'
207
- | 'openDirectory'
208
- | 'multiSelections'
209
- | 'showHiddenFiles'
210
- | 'createDirectory';
207
+ | 'openDirectory'
208
+ | 'multiSelections'
209
+ | 'showHiddenFiles'
210
+ | 'createDirectory';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{$ as rZ,$a as r0,A as TZ,Aa as z0,B as LZ,Ba as M0,C as DZ,Ca as T0,D as PZ,Da as L0,E as WZ,Ea as D0,F as AZ,Fa as P0,G as NZ,Ga as W0,H as xZ,Ha as A0,I as IZ,Ia as N0,J as kZ,Ja as x0,K as CZ,Ka as I0,L as HZ,La as k0,M as vZ,Ma as C0,N as wZ,Na as H0,O as fZ,Oa as v0,P as SZ,Pa as w0,Q as gZ,Qa as f0,R as bZ,Ra as S0,S as uZ,Sa as g0,T as yZ,Ta as b0,U as hZ,Ua as u0,V as mZ,Va as y0,W as cZ,Wa as h0,X as dZ,Xa as m0,Y as C,Ya as c0,Z as UQ,Za as d0,_ as pZ,_a as p0,a as lY,aa as nZ,ab as n0,b as aY,ba as oZ,bb as o0,c as iY,ca as lZ,cb as l0,d as sY,da as aZ,db as a0,e as tY,ea as iZ,f as eY,fa as sZ,g as QZ,ga as tZ,h as YZ,ha as eZ,i as ZZ,ia as Q0,j as XZ,ja as Y0,k as $Z,ka as Z0,l as JZ,la as X0,m as GZ,ma as $0,n as qZ,na as J0,o as RZ,oa as G0,p as KZ,pa as q0,q as UZ,qa as R0,r as EZ,ra as K0,s as _Z,sa as U0,t as FZ,ta as E0,u as BZ,ua as _0,v as jZ,va as F0,w as VZ,wa as B0,x as OZ,xa as j0,y as zZ,ya as V0,z as MZ,za as O0}from"./chunk-cc1fg1zc.js";import{eb as N}from"./chunk-h05t5fn6.js";function z(Q="stx"){return`${Q}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function F(Q){return Q.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function O(...Q){return Q.filter(Boolean).join(" ")}function V(Q){if(!Q)return"";return Object.entries(Q).map(([Y,Z])=>`${Y.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${Z}`).join("; ")}function FQ(Q){let{text:Y,variant:Z="primary",size:X="medium",disabled:$=!1,loading:G=!1,icon:K,iconPosition:q="left",id:J=z("btn"),className:E,style:U}=Q,_=O("stx-button",`stx-button--${Z}`,`stx-button--${X}`,$&&"stx-button--disabled",G&&"stx-button--loading",E),R=V(U),B=K?`<span class="stx-button-icon">${K}</span>`:"",j=G?'<span class="stx-button-spinner"></span>':"",M=q==="left"?`${B}${j}<span class="stx-button-text">${F(Y)}</span>`:`<span class="stx-button-text">${F(Y)}</span>${B}${j}`;return`<button id="${J}" class="${_}" ${$||G?"disabled":""} ${R?`style='${R}'`:""}>${M}</button>`}function BQ(Q){let{value:Y="",placeholder:Z="",type:X="text",disabled:$=!1,readonly:G=!1,maxLength:K,minLength:q,pattern:J,required:E=!1,autocomplete:U,label:_,error:R,hint:B,id:j=z("input"),className:M,style:T}=Q,L=O("stx-input",R&&"stx-input--error",$&&"stx-input--disabled",M),w=V(T),_Q=[`type="${X}"`,`id="${j}"`,`class="${L}"`,Y&&`value="${F(Y)}"`,Z&&`placeholder="${F(Z)}"`,$&&"disabled",G&&"readonly",E&&"required",K&&`maxlength="${K}"`,q&&`minlength="${q}"`,J&&`pattern="${F(J)}"`,U&&`autocomplete="${U}"`,w&&`style="${w}"`].filter(Boolean).join(" "),H="";if(_)H+=`<label class="stx-input-label" for="${j}">${F(_)}</label>`;if(H+=`<input ${_Q} />`,R)H+=`<div class="stx-input-error">${F(R)}</div>`;else if(B)H+=`<div class="stx-input-hint">${F(B)}</div>`;return`<div class="stx-input-wrapper">${H}</div>`}function jQ(Q){let{checked:Y=!1,label:Z,disabled:X=!1,indeterminate:$=!1,id:G=z("checkbox"),className:K,style:q}=Q,J=O("stx-checkbox",X&&"stx-checkbox--disabled",K),E=V(q),U=['type="checkbox"',`id="${G}"`,Y&&"checked",X&&"disabled",$&&'data-indeterminate="true"'].filter(Boolean).join(" ");return`
2
+ import{$ as rZ,$a as r0,A as TZ,Aa as z0,B as LZ,Ba as M0,C as DZ,Ca as T0,D as PZ,Da as L0,E as WZ,Ea as D0,F as AZ,Fa as P0,G as NZ,Ga as W0,H as xZ,Ha as A0,I as IZ,Ia as N0,J as kZ,Ja as x0,K as CZ,Ka as I0,L as HZ,La as k0,M as vZ,Ma as C0,N as wZ,Na as H0,O as fZ,Oa as v0,P as SZ,Pa as w0,Q as gZ,Qa as f0,R as bZ,Ra as S0,S as uZ,Sa as g0,T as yZ,Ta as b0,U as hZ,Ua as u0,V as mZ,Va as y0,W as cZ,Wa as h0,X as dZ,Xa as m0,Y as C,Ya as c0,Z as UQ,Za as d0,_ as pZ,_a as p0,a as lY,aa as nZ,ab as n0,b as aY,ba as oZ,bb as o0,c as iY,ca as lZ,cb as l0,d as sY,da as aZ,db as a0,e as tY,ea as iZ,f as eY,fa as sZ,g as QZ,ga as tZ,h as YZ,ha as eZ,i as ZZ,ia as Q0,j as XZ,ja as Y0,k as $Z,ka as Z0,l as JZ,la as X0,m as GZ,ma as $0,n as qZ,na as J0,o as RZ,oa as G0,p as KZ,pa as q0,q as UZ,qa as R0,r as EZ,ra as K0,s as _Z,sa as U0,t as FZ,ta as E0,u as BZ,ua as _0,v as jZ,va as F0,w as VZ,wa as B0,x as OZ,xa as j0,y as zZ,ya as V0,z as MZ,za as O0}from"./chunk-r69bmd7g.js";import{eb as N}from"./chunk-h05t5fn6.js";function z(Q="stx"){return`${Q}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function F(Q){return Q.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function O(...Q){return Q.filter(Boolean).join(" ")}function V(Q){if(!Q)return"";return Object.entries(Q).map(([Y,Z])=>`${Y.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${Z}`).join("; ")}function FQ(Q){let{text:Y,variant:Z="primary",size:X="medium",disabled:$=!1,loading:G=!1,icon:K,iconPosition:q="left",id:J=z("btn"),className:E,style:U}=Q,_=O("stx-button",`stx-button--${Z}`,`stx-button--${X}`,$&&"stx-button--disabled",G&&"stx-button--loading",E),R=V(U),B=K?`<span class="stx-button-icon">${K}</span>`:"",j=G?'<span class="stx-button-spinner"></span>':"",M=q==="left"?`${B}${j}<span class="stx-button-text">${F(Y)}</span>`:`<span class="stx-button-text">${F(Y)}</span>${B}${j}`;return`<button id="${J}" class="${_}" ${$||G?"disabled":""} ${R?`style='${R}'`:""}>${M}</button>`}function BQ(Q){let{value:Y="",placeholder:Z="",type:X="text",disabled:$=!1,readonly:G=!1,maxLength:K,minLength:q,pattern:J,required:E=!1,autocomplete:U,label:_,error:R,hint:B,id:j=z("input"),className:M,style:T}=Q,L=O("stx-input",R&&"stx-input--error",$&&"stx-input--disabled",M),w=V(T),_Q=[`type="${X}"`,`id="${j}"`,`class="${L}"`,Y&&`value="${F(Y)}"`,Z&&`placeholder="${F(Z)}"`,$&&"disabled",G&&"readonly",E&&"required",K&&`maxlength="${K}"`,q&&`minlength="${q}"`,J&&`pattern="${F(J)}"`,U&&`autocomplete="${U}"`,w&&`style="${w}"`].filter(Boolean).join(" "),H="";if(_)H+=`<label class="stx-input-label" for="${j}">${F(_)}</label>`;if(H+=`<input ${_Q} />`,R)H+=`<div class="stx-input-error">${F(R)}</div>`;else if(B)H+=`<div class="stx-input-hint">${F(B)}</div>`;return`<div class="stx-input-wrapper">${H}</div>`}function jQ(Q){let{checked:Y=!1,label:Z,disabled:X=!1,indeterminate:$=!1,id:G=z("checkbox"),className:K,style:q}=Q,J=O("stx-checkbox",X&&"stx-checkbox--disabled",K),E=V(q),U=['type="checkbox"',`id="${G}"`,Y&&"checked",X&&"disabled",$&&'data-indeterminate="true"'].filter(Boolean).join(" ");return`
3
3
  <label class="${J}" ${E?`style="${E}"`:""}>
4
4
  <input ${U} />
5
5
  <span class="stx-checkbox-box"></span>
package/dist/menu.d.ts CHANGED
@@ -86,21 +86,21 @@ export declare interface MenuAPI {
86
86
  * insensitively; this list is the canonical casing.
87
87
  */
88
88
  export type MenuRole = | 'about'
89
- | 'hide'
90
- | 'hideOthers'
91
- | 'showAll'
92
- | 'quit'
93
- | 'undo'
94
- | 'redo'
95
- | 'cut'
96
- | 'copy'
97
- | 'paste'
98
- | 'delete'
99
- | 'selectAll'
100
- | 'close'
101
- | 'minimize'
102
- | 'zoom'
103
- | 'front'
104
- | 'fullscreen'
105
- | 'reload'
106
- | 'forceReload';
89
+ | 'hide'
90
+ | 'hideOthers'
91
+ | 'showAll'
92
+ | 'quit'
93
+ | 'undo'
94
+ | 'redo'
95
+ | 'cut'
96
+ | 'copy'
97
+ | 'paste'
98
+ | 'delete'
99
+ | 'selectAll'
100
+ | 'close'
101
+ | 'minimize'
102
+ | 'zoom'
103
+ | 'front'
104
+ | 'fullscreen'
105
+ | 'reload'
106
+ | 'forceReload';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/desktop",
3
3
  "type": "module",
4
- "version": "0.2.249",
4
+ "version": "0.2.251",
5
5
  "description": "Native desktop application framework for stx (powered by Craft)",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",