@stacksjs/desktop 0.2.245 → 0.2.247

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 eq,$a as ez,A as Zq,Aa as Yz,B as _q,Ba as Zz,C as $q,Ca as _z,D as jq,Da as $z,E as xq,Ea as jz,F as kq,Fa as xz,G as wq,Ga as kz,H as yq,Ha as wz,I as fq,Ia as yz,J as vq,Ja as fz,K as gq,Ka as vz,L as bq,La as gz,M as mq,Ma as bz,N as dq,Na as mz,O as uq,Oa as dz,P as hq,Pa as uz,Q as pq,Qa as hz,R as lq,Ra as pz,S as cq,Sa as lz,T as nq,Ta as cz,U as rq,Ua as nz,V as aq,Va as rz,W as sq,Wa as az,X as oq,Xa as sz,Ya as oz,Z as tq,Za as tz,_ as iq,_a as iz,a as zq,aa as qz,ab as qA,b as Aq,ba as zz,bb as zA,c as Bq,ca as Az,d as Cq,da as Bz,e as Dq,ea as Cz,f as Eq,fa as Dz,g as Fq,ga as Ez,h as Gq,ha as Fz,i as Hq,ia as Gz,j as Iq,ja as Hz,k as Jq,ka as Iz,l as Kq,la as Jz,m as Lq,ma as Kz,n as Mq,na as Lz,o as Nq,oa as Mz,p as Oq,pa as Nz,q as Pq,qa as Oz,r as Qq,ra as Pz,s as Rq,sa as Qz,t as Sq,ta as Rz,u as Tq,ua as Sz,v as Uq,va as Tz,w as Vq,wa as Uz,x as Wq,xa as Vz,y as Xq,ya as Wz,z as Yq,za as Xz}from"./chunk-rgd4gjkd.js";import"./chunk-ts9f0mxv.js";export{Hz as windowEvents,kz as watchScreenSharing,rz as vision,Gz as updater,pq as unregisterHotkey,lq as unregisterAllHotkeys,Pz as touchbar,Az as theme,uz as tags,cz as spotlight,nz as speechRecognition,Rz as speech,Uz 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,tz as serviceMenu,iz as serial,xz as screenSharing,Zz as screenCapture,Kz as screen,zq as requestNotificationPermission,hq as registerHotkey,Tz as redactPII,Tq as prompt,Nz as printing,Mz as permissions,hz as pdf,dq as parseShortcut,Gq as notify,iq as notifications,Fz as network,Oz as nativeAutoLaunch,az as midi,Jz as menu,pz as log,Yz as location,vz as localServer,Xz as liveActivities,Lz as keychain,Cz as isDragOutAvailable,vq as isCaffeinated,zA as isAvailable,Vz as iap,yz as hasFocusShortcuts,Wz as handoff,zz as globalShortcuts,cq as getRegisteredHotkeys,wq as getDialogBridgeScript,qA as getCapability,ez 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,fz as focusShortcutsReady,wz as focus,dz 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,Sz as crashReporter,sz as coreml,oz as continuityCamera,Rq as confirm,Vq as closeAllModals,tq as clipboard,yq as caffeinate,lz as bonjour,Qz as bluetooth,gz as biometric,Ez as battery,bz as audio,mz as appleScript,Iz as app,Sq as alert,Kq as TOAST_STYLES,Wq as MODAL_STYLES,_z as MIN_WATCH_INTERVAL_MS,$z as MAX_WATCH_INTERVAL_MS,jz 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-c4areqvh.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};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")return!0;return!1}function g(){return typeof window<"u"&&typeof document<"u"}async function P4(){if(typeof Notification>"u")return!1;if(Notification.permission==="granted")return!0;if(Notification.permission==="denied")return!1;return await Notification.requestPermission()==="granted"}var q=new Map;function qZ(){return`alert-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function UZ(Z){switch(Z){case"info":return"&#x2139;";case"success":return"&#x2714;";case"warning":return"&#x26A0;";case"error":return"&#x2716;";default:return"&#x2139;"}}function MZ(Z="top-right"){if(!g())throw Error("Toast container requires browser environment");try{let Y=document.querySelector(`.stx-toast-container[data-position="${Z}"]`);if(Y)return Y}catch{}let $=document.createElement("div");$.className=`stx-toast-container ${Z}`,$.dataset.position=Z;try{if(document.body)document.body.appendChild($)}catch{}return $}function TZ(Z){let{options:$}=Z,Y=UZ($.type),z=$.type||"info",G=$.duration!==0;return`
2
+ function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")return!0;return!1}function g(){return typeof window<"u"&&typeof document<"u"}async function j4(){if(typeof Notification>"u")return!1;if(Notification.permission==="granted")return!0;if(Notification.permission==="denied")return!1;return await Notification.requestPermission()==="granted"}var H=new Map;function UZ(){return`alert-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function MZ(Z){switch(Z){case"info":return"&#x2139;";case"success":return"&#x2714;";case"warning":return"&#x26A0;";case"error":return"&#x2716;";default:return"&#x2139;"}}function TZ(Z="top-right"){if(!g())throw Error("Toast container requires browser environment");try{let Y=document.querySelector(`.stx-toast-container[data-position="${Z}"]`);if(Y)return Y}catch{}let $=document.createElement("div");$.className=`stx-toast-container ${Z}`,$.dataset.position=Z;try{if(document.body)document.body.appendChild($)}catch{}return $}function SZ(Z){let{options:$}=Z,Y=MZ($.type),z=$.type||"info",G=$.duration!==0;return`
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">
@@ -8,7 +8,7 @@ function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
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(q.delete(Z.id),Z.element&&g())Z.element.classList.add("dismissing"),setTimeout(()=>{Z.element?.remove()},200)}async function e(Z){let $=qZ(),Y=HZ(),z=Z.duration??5000,G={id:$,options:Z};if(q.set($,G),Y&&Z.type!=="error")try{let Q=new Notification(Z.title||"Notification",{body:Z.message,icon:Z.type==="success"?"\u2713":Z.type==="warning"?"\u26A0":"\u2139",tag:$});if(Q.onclick=()=>{if(Z.onClick)Z.onClick();Q.close()},z>0)G.timeout=setTimeout(()=>{Q.close(),q.delete($)},z);return}catch{}if(g())try{let Q=MZ(Z.position),P=document.createElement("div");P.innerHTML=TZ(G);let X=P.firstElementChild;if(!X){let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}G.element=X;try{Q.appendChild(X)}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{X.classList.add("visible")}catch{}});try{X.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 Q=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${Q}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`)}else{let Q=(Z.type||"info").toUpperCase();if(console.log(`[stx-alert] ${Q}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`),z>0)G.timeout=setTimeout(()=>{q.delete($)},z)}}async function C(Z){return e({...Z,position:Z.position||"top-right"})}async function V4(Z,$=3000){return C({message:Z,type:"info",duration:$})}async function F4(Z,$=3000){return C({message:Z,type:"success",duration:$})}async function j4(Z,$=3000){return C({message:Z,type:"warning",duration:$})}async function W4(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 $=q.get(Z);if($)E($)}function R4(){for(let Z of q.values())E(Z)}function L4(){return q.size}var D4=`
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 $=UZ(),Y=HZ(),z=Z.duration??5000,G={id:$,options:Z};if(H.set($,G),Y&&Z.type!=="error")try{let Q=new Notification(Z.title||"Notification",{body:Z.message,icon:Z.type==="success"?"\u2713":Z.type==="warning"?"\u26A0":"\u2139",tag:$});if(Q.onclick=()=>{if(Z.onClick)Z.onClick();Q.close()},z>0)G.timeout=setTimeout(()=>{Q.close(),H.delete($)},z);return}catch{}if(g())try{let Q=TZ(Z.position),P=document.createElement("div");P.innerHTML=SZ(G);let X=P.firstElementChild;if(!X){let F=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${F}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}G.element=X;try{Q.appendChild(X)}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{X.classList.add("visible")}catch{}});try{X.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 Q=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${Q}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`)}else{let Q=(Z.type||"info").toUpperCase();if(console.log(`[stx-alert] ${Q}: ${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 W4(Z,$=3000){return C({message:Z,type:"info",duration:$})}async function K4(Z,$=3000){return C({message:Z,type:"success",duration:$})}async function R4(Z,$=3000){return C({message:Z,type:"warning",duration:$})}async function L4(Z,$=5000){return C({message:Z,type:"error",duration:$})}async function D4(Z,$,Y="info"){return e({title:Z,message:$,type:Y})}function k4(Z){let $=H.get(Z);if($)E($)}function N4(){for(let Z of H.values())E(Z)}function q4(){return H.size}var H4=`
12
12
  .stx-toast-container {
13
13
  position: fixed;
14
14
  z-index: 10001;
@@ -110,7 +110,7 @@ function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
110
110
  .stx-toast.success { border-left: 4px solid #27ae60; }
111
111
  .stx-toast.warning { border-left: 4px solid #f39c12; }
112
112
  .stx-toast.error { border-left: 4px solid #e74c3c; }
113
- `;function SZ(){return!1}function u(){return typeof window<"u"&&typeof document<"u"}var U=[];function AZ(){return`modal-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function xZ(Z){switch(Z){case"info":return"&#x2139;";case"warning":return"&#x26A0;";case"error":return"&#x2716;";case"success":return"&#x2714;";case"question":return"&#x2753;";default:return"&#x2139;"}}function I(Z){if(Z==="question")return[{label:"No",style:"default"},{label:"Yes",style:"primary"}];return[{label:"OK",style:"primary"}]}function _Z(Z){let{options:$}=Z,Y=xZ($.type),z=$.buttons||I($.type),G=$.type||"info",Q="";return z.forEach((P,X)=>{let F=P.style==="destructive"?"destructive":P.style==="primary"?"primary":"default",j=X===($.defaultButton??z.length-1)?"autofocus":"";Q+=`<button class="stx-modal-btn ${F}" data-index="${X}" ${j}>${P.label}</button>`}),`
113
+ `;function AZ(){return!1}function u(){return typeof window<"u"&&typeof document<"u"}var U=[];function xZ(){return`modal-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function _Z(Z){switch(Z){case"info":return"&#x2139;";case"warning":return"&#x26A0;";case"error":return"&#x2716;";case"success":return"&#x2714;";case"question":return"&#x2753;";default:return"&#x2139;"}}function I(Z){if(Z==="question")return[{label:"No",style:"default"},{label:"Yes",style:"primary"}];return[{label:"OK",style:"primary"}]}function EZ(Z){let{options:$}=Z,Y=_Z($.type),z=$.buttons||I($.type),G=$.type||"info",Q="";return z.forEach((P,X)=>{let F=P.style==="destructive"?"destructive":P.style==="primary"?"primary":"default",j=X===($.defaultButton??z.length-1)?"autofocus":"";Q+=`<button class="stx-modal-btn ${F}" data-index="${X}" ${j}>${P.label}</button>`}),`
114
114
  <div class="stx-modal-overlay" data-modal-id="${Z.id}">
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>
@@ -121,7 +121,7 @@ function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
121
121
  <div class="stx-modal-buttons">${Q}</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 L(Z,$,Y=!1){let z=U.indexOf(Z);if(z>-1)U.splice(z,1);if(Z.element&&u())Z.element.remove();let Q=(Z.options.buttons||I(Z.options.type))[$];if(Q?.action)Q.action();Z.resolve({buttonIndex:$,cancelled:Y})}async function T(Z){let $=SZ(),Y=AZ();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(()=>{L(G,Z.defaultButton??0,!1)},0);else if(u())try{let Q=document.createElement("div");Q.innerHTML=_Z(G);let P=Q.firstElementChild;if(!P){console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{L(G,Z.defaultButton??0,!1)},0);return}G.element=P;try{document.body.appendChild(P)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{L(G,Z.defaultButton??0,!1)},0);return}try{P.querySelectorAll(".stx-modal-btn").forEach((X)=>{X.addEventListener("click",()=>{let F=Number.parseInt(X.dataset.index||"0",10);L(G,F,!1)})})}catch{}try{P.addEventListener("click",(X)=>{if(X.target===P){let F=Z.cancelButton??0;L(G,F,!0)}})}catch{}try{let X=(F)=>{if(F.key==="Escape"){let j=Z.cancelButton??0;L(G,j,!0),document.removeEventListener("keydown",X)}else if(F.key==="Enter"){let j=Z.defaultButton??(Z.buttons||I(Z.type)).length-1;L(G,j,!1),document.removeEventListener("keydown",X)}};document.addEventListener("keydown",X)}catch{}try{let X=P.querySelector(".stx-modal-btn[autofocus]");if(X)X.focus()}catch{}if(typeof process<"u"&&process.env.BUN_TEST)setTimeout(()=>{L(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(()=>{L(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 Q=Z.buttons||I(Z.type);console.log(`[stx-modal] Buttons: ${Q.map((P)=>P.label).join(", ")}`),setTimeout(()=>{L(G,Z.defaultButton??0,!1)},0)}})}async function EZ(Z,$){return T({title:Z,message:$,type:"info"})}async function H4(Z,$){return T({title:Z,message:$,type:"warning"})}async function q4(Z,$){return T({title:Z,message:$,type:"error"})}async function U4(Z,$){return T({title:Z,message:$,type:"success"})}async function CZ(Z,$){return T({title:Z,message:$,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function M4(Z,$="Confirm"){return(await CZ($,Z)).buttonIndex===1}async function T4(Z,$="Alert"){await EZ($,Z)}async function S4(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 A4(){return U.length}function x4(){while(U.length>0){let Z=U[U.length-1];L(Z,0,!0)}}var _4=`
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 Q=(Z.options.buttons||I(Z.options.type))[$];if(Q?.action)Q.action();Z.resolve({buttonIndex:$,cancelled:Y})}async function T(Z){let $=AZ(),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 Q=document.createElement("div");Q.innerHTML=EZ(G);let P=Q.firstElementChild;if(!P){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=P;try{document.body.appendChild(P)}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{P.querySelectorAll(".stx-modal-btn").forEach((X)=>{X.addEventListener("click",()=>{let F=Number.parseInt(X.dataset.index||"0",10);D(G,F,!1)})})}catch{}try{P.addEventListener("click",(X)=>{if(X.target===P){let F=Z.cancelButton??0;D(G,F,!0)}})}catch{}try{let X=(F)=>{if(F.key==="Escape"){let j=Z.cancelButton??0;D(G,j,!0),document.removeEventListener("keydown",X)}else if(F.key==="Enter"){let j=Z.defaultButton??(Z.buttons||I(Z.type)).length-1;D(G,j,!1),document.removeEventListener("keydown",X)}};document.addEventListener("keydown",X)}catch{}try{let X=P.querySelector(".stx-modal-btn[autofocus]");if(X)X.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 Q=Z.buttons||I(Z.type);console.log(`[stx-modal] Buttons: ${Q.map((P)=>P.label).join(", ")}`),setTimeout(()=>{D(G,Z.defaultButton??0,!1)},0)}})}async function CZ(Z,$){return T({title:Z,message:$,type:"info"})}async function M4(Z,$){return T({title:Z,message:$,type:"warning"})}async function T4(Z,$){return T({title:Z,message:$,type:"error"})}async function S4(Z,$){return T({title:Z,message:$,type:"success"})}async function IZ(Z,$){return T({title:Z,message:$,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function A4(Z,$="Confirm"){return(await IZ($,Z)).buttonIndex===1}async function x4(Z,$="Alert"){await CZ($,Z)}async function _4(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 E4(){return U.length}function C4(){while(U.length>0){let Z=U[U.length-1];D(Z,0,!0)}}var I4=`
125
125
  .stx-modal-overlay {
126
126
  position: fixed;
127
127
  inset: 0;
@@ -253,9 +253,9 @@ function HZ(){if(typeof Notification<"u"&&Notification.permission==="granted")re
253
253
  background: #555;
254
254
  }
255
255
  }
256
- `;function w(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function C4(Z={}){if(w()){let $=window;try{return await $.craft.dialog.showOpenDialog(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=document.createElement("input");if(Y.type="file",Y.multiple=Z.multiSelections??!1,Z.filters?.length){let z=Z.filters.flatMap((G)=>G.extensions.map((Q)=>`.${Q}`));Y.accept=z.join(",")}if(Z.canChooseDirectories&&!Z.canChooseFiles)Y.webkitdirectory=!0;Y.onchange=()=>{let z=Array.from(Y.files||[]);if(z.length===0)$({canceled:!0,filePaths:[]});else{let G=z.map((Q)=>Q.name);$({canceled:!1,filePaths:G})}},Y.oncancel=()=>{$({canceled:!0,filePaths:[]})},Y.click()})}async function I4(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((Q)=>`.${Q}`)}}));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 z=window;try{return await z.craft.dialog.showMessageBox(Z)}catch(G){console.warn("[stx-dialog] Failed to show native message box:",G)}}let $=Z.buttons||["OK"];if($.length===1)return alert(Z.message),{response:0};if($.length===2&&Z.type==="question")return{response:confirm(Z.message)?1:0};return console.warn("[stx-dialog] Complex message box not fully supported in browser, using confirm"),{response:confirm(`${Z.message}
256
+ `;function w(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function y4(Z={}){if(w()){let $=window;try{return await $.craft.dialog.showOpenDialog(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=document.createElement("input");if(Y.type="file",Y.multiple=Z.multiSelections??!1,Z.filters?.length){let z=Z.filters.flatMap((G)=>G.extensions.map((Q)=>`.${Q}`));Y.accept=z.join(",")}if(Z.canChooseDirectories&&!Z.canChooseFiles)Y.webkitdirectory=!0;Y.onchange=()=>{let z=Array.from(Y.files||[]);if(z.length===0)$({canceled:!0,filePaths:[]});else{let G=z.map((Q)=>Q.name);$({canceled:!1,filePaths:G})}},Y.oncancel=()=>{$({canceled:!0,filePaths:[]})},Y.click()})}async function f4(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((Q)=>`.${Q}`)}}));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 z=window;try{return await z.craft.dialog.showMessageBox(Z)}catch(G){console.warn("[stx-dialog] Failed to show native message box:",G)}}let $=Z.buttons||["OK"];if($.length===1)return alert(Z.message),{response:0};if($.length===2&&Z.type==="question")return{response:confirm(Z.message)?1:0};return console.warn("[stx-dialog] Complex message box not fully supported in browser, using confirm"),{response:confirm(`${Z.message}
257
257
 
258
- ${$.join(" / ")}`)?$.length-1:0}}async function w4(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 y4(Z,$){await y({type:"info",title:$||"Alert",message:Z,buttons:["OK"]})}async function f4(Z,$){return(await y({type:"question",title:$||"Confirm",message:Z,buttons:["Cancel","OK"],defaultButton:1,cancelButton:0})).response===1}async function m4(Z,$){await y({type:"error",title:$||"Error",message:Z,buttons:["OK"]})}async function B4(Z,$){await y({type:"warning",title:$||"Warning",message:Z,buttons:["OK"]})}function v4(){return`
258
+ ${$.join(" / ")}`)?$.length-1:0}}async function m4(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 B4(Z,$){await y({type:"info",title:$||"Alert",message:Z,buttons:["OK"]})}async function v4(Z,$){return(await y({type:"question",title:$||"Confirm",message:Z,buttons:["Cancel","OK"],defaultButton:1,cancelButton:0})).response===1}async function b4(Z,$){await y({type:"error",title:$||"Error",message:Z,buttons:["OK"]})}async function l4(Z,$){await y({type:"warning",title:$||"Warning",message:Z,buttons:["OK"]})}function g4(){return`
259
259
  // STX Desktop Dialog Bridge
260
260
  // Provides convenient wrappers around window.craft.dialog APIs
261
261
  window.stxDialog = {
@@ -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 $Z{_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 l4(Z={}){IZ();let{duration:$,preventDisplaySleep:Y=!0,preventIdleSleep:z=!0,preventSystemSleep:G=!0,preventDiskSleep:Q=!1,assertUserActivity:P=!0}=Z,X=[];if(Y)X.push("-d");if(z)X.push("-i");if(G)X.push("-s");if(Q)X.push("-m");if(P)X.push("-u");let F=[...X];if($&&$>0)F.push("-t",String($*60));let j=Bun.spawn(["/usr/bin/caffeinate",...F],{stdio:["ignore","ignore","ignore"]}),N=new $Z(j,Z);return h=j,W=N,N}function IZ(Z){if(Z){if(Z.stop(),W===Z)h=null,W=null;return}if(W)W.stop();h=null,W=null}function g4(){return W!==null&&W.isActive}function u4(){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 h4(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),Q=Math.floor(z%3600/60),P=z%60;if(G>0)return`${G}:${String(Q).padStart(2,"0")}:${String(P).padStart(2,"0")}`;return`${Q}:${String(P).padStart(2,"0")}`}function c4(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 D=new Map,wZ=0,f=!1;function yZ(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 d4(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 fZ(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 JZ(Z){for(let[,$]of D)if(fZ(Z,$.parsed)){Z.preventDefault(),Z.stopPropagation();try{$.handler()}catch{}break}}function mZ(){if(f)return;if(typeof document>"u")return;document.addEventListener("keydown",JZ,!0),f=!0}function c(){if(!f)return;if(typeof document>"u")return;document.removeEventListener("keydown",JZ,!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 n4(Z,$){let Y=`hotkey_${++wZ}_${Date.now()}`,z=yZ(Z);D.set(Y,{shortcut:Z,handler:$,parsed:z}),BZ(Y,Z),mZ();let G={shortcut:Z,id:Y,unregister(){vZ(G)}};return G}function vZ(Z){if(D.delete(Z.id),p(Z.id),D.size===0)c()}function r4(){for(let[Z]of D)p(Z);D.clear(),c()}function o4(){return Array.from(D.entries()).map(([Z,$])=>({shortcut:$.shortcut,id:Z,unregister(){if(D.delete(Z),p(Z),D.size===0)c()}}))}class YZ{_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 zZ{_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 i4(Z){return new YZ(Z)}function s4(Z){return new zZ(Z)}function t4(Z){return new Promise(($)=>setTimeout($,Z))}function e4(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 O(Z,$){if(typeof window>"u")return()=>{};let Y=(z)=>$(z.detail??{});return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var z8={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([bZ(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 bZ(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 $Z{_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 h4(Z={}){wZ();let{duration:$,preventDisplaySleep:Y=!0,preventIdleSleep:z=!0,preventSystemSleep:G=!0,preventDiskSleep:Q=!1,assertUserActivity:P=!0}=Z,X=[];if(Y)X.push("-d");if(z)X.push("-i");if(G)X.push("-s");if(Q)X.push("-m");if(P)X.push("-u");let F=[...X];if($&&$>0)F.push("-t",String($*60));let j=Bun.spawn(["/usr/bin/caffeinate",...F],{stdio:["ignore","ignore","ignore"]}),R=new $Z(j,Z);return h=j,W=R,R}function wZ(Z){if(Z){if(Z.stop(),W===Z)h=null,W=null;return}if(W)W.stop();h=null,W=null}function c4(){return W!==null&&W.isActive}function p4(){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 d4(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),Q=Math.floor(z%3600/60),P=z%60;if(G>0)return`${G}:${String(Q).padStart(2,"0")}:${String(P).padStart(2,"0")}`;return`${Q}:${String(P).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,yZ=0,f=!1;function fZ(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 o4(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 mZ(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 JZ(Z){for(let[,$]of k)if(mZ(Z,$.parsed)){Z.preventDefault(),Z.stopPropagation();try{$.handler()}catch{}break}}function BZ(){if(f)return;if(typeof document>"u")return;document.addEventListener("keydown",JZ,!0),f=!0}function c(){if(!f)return;if(typeof document>"u")return;document.removeEventListener("keydown",JZ,!0),f=!1}async function vZ(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 a4(Z,$){let Y=`hotkey_${++yZ}_${Date.now()}`,z=fZ(Z);k.set(Y,{shortcut:Z,handler:$,parsed:z}),vZ(Y,Z),BZ();let G={shortcut:Z,id:Y,unregister(){bZ(G)}};return G}function bZ(Z){if(k.delete(Z.id),p(Z.id),k.size===0)c()}function i4(){for(let[Z]of k)p(Z);k.clear(),c()}function s4(){return Array.from(k.entries()).map(([Z,$])=>({shortcut:$.shortcut,id:Z,unregister(){if(k.delete(Z),p(Z),k.size===0)c()}}))}class YZ{_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 zZ{_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 e4(Z){return new YZ(Z)}function Z8(Z){return new zZ(Z)}function $8(Z){return new Promise(($)=>setTimeout($,Z))}function J8(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 Y8(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 O(Z,$){if(typeof window>"u")return()=>{};let Y=(z)=>$(z.detail??{});return window.addEventListener(Z,Y),()=>window.removeEventListener(Z,Y)}var Q8={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([lZ(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 lZ(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 Q8={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 $=lZ(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 O("craft:notification:actionClicked",Z)},onReply(Z){return O("craft:notification:reply",Z)}};function lZ(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 V8={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 uZ(Y);return new TextEncoder().encode(Y)},async writeFile(Z,$){await V("fs").writeFile(Z,$)},async writeBuffer(Z,$){let Y=gZ($),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 hZ(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 O("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 Q=$.kinds&&$.kinds.length>0?new Set($.kinds):null,P=Math.max(0,Math.floor($.coalesceMs??0)),X=[],F=null,j=!1,N=()=>{if(F=null,X.length===0)return;let R=X;X=[];try{Y(R)}catch{}},k=O("craft:fs:change",(R)=>{if(j)return;if(R.id!==z)return;if(Q&&R.kind&&!Q.has(R.kind))return;if(X.push(R),P===0){N();return}if(F==null)F=setTimeout(N,P)});return{id:z,async stop(){if(j)return;if(j=!0,k(),F)clearTimeout(F),F=null;if(X.length>0)N();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 gZ(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 uZ(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 hZ(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,GZ=!1;function cZ(){if(GZ)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let $=Z.detail;if($?.id)S.delete($.id)}),GZ=!0}var pZ=new Set(["javascript:","data:","file:","vbscript:"]),W8={async openExternal(Z){let $=Z.trim().toLowerCase();for(let Y of pZ)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(cZ(),!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 O("craft:shell:stdout",Z)},onStderr(Z){return O("craft:shell:stderr",Z)},onExit(Z){return O("craft:shell:exit",Z)}};var R8={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 O("craft:shortcut",Z)}};var k8={get(){if(J("theme"))try{return window.craft.theme.get()}catch{}return{appearance:dZ()}},onChange(Z){if(Z(this.get()),J("theme"))return O("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 dZ(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function U8(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 M8(){return J("dragOut")}var A8={onUrl(Z){if(!J("deepLink"))return()=>{};return O("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 E8={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 O("craft:powerSleep",Z)},onWake(Z){return O("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 w8={async connectionType(){if(J("network"))return await window.craft.network.connectionType();return OZ()},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 O("craft:networkChange",Z);if(typeof window>"u")return()=>{};let $=()=>Z({type:OZ(),online:!0}),Y=()=>Z({type:"none",online:!1});return window.addEventListener("online",$),window.addEventListener("offline",Y),()=>{window.removeEventListener("online",$),window.removeEventListener("offline",Y)}}};function OZ(){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 m8={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 O("craft:updateAvailable",Z)},onDownloaded(Z){return O("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:$,publicKeyB64:Y}){let z=QZ(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 Q=new Uint8Array(await G.arrayBuffer()),P;try{P=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let X=!1;try{X=await crypto.subtle.verify("Ed25519",P,B($),QZ(Q))}catch{X=!1}if(!X)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:Q}}};function QZ(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),Q=new Uint8Array(G);for(let P=0;P<z.length;P++)Q[P]=z.charCodeAt(P);return Q}let $=Buffer.from(Z,"base64"),Y=new ArrayBuffer($.length);return new Uint8Array(Y).set($),new Uint8Array(Y)}var b8={onFocus(Z){if(J("window"))return O("craft:window:focus",()=>Z());return d("focus",Z)},onBlur(Z){if(J("window"))return O("craft:window:blur",()=>Z());return d("blur",Z)},onResize(Z){if(J("window"))return O("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 O("craft:window:move",Z);return()=>{}},onClose(Z){if(J("window"))return O("craft:window:close",()=>Z());return d("beforeunload",Z)},onMinimize(Z){if(J("window"))return O("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 O("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 XZ={name:"",version:"0.0.0"},u8={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 XZ;let Z=await window.craft.app.getInfo();return{...XZ,...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 p8={async set(Z){if(J("menu"))await window.craft.menu.set(Z)},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 O("craft:menu:action",Z)}};var r8={async getDisplays(){if(J("screen"))return await window.craft.screen.getDisplays();return PZ()},async getPrimary(){if(J("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return PZ()[0]??null},onChange(Z){if(J("screen"))return O("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let $=()=>Z();return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)}};function PZ(){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 i8={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 e8={async check(Z){if(J("permissions"))return await window.craft.permissions.check(Z);return await VZ(Z)},async request(Z){if(J("permissions"))return await window.craft.permissions.request(Z);return await nZ(Z)},async openSettings(Z){if(J("permissions"))await window.craft.permissions.openSettings(Z)}};async function VZ(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let $=await navigator.permissions.query({name:Z});return rZ($.state)}catch{return"not-supported"}}async function nZ(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let $=await window.Notification.requestPermission();return $==="granted"?"granted":$==="denied"?"denied":"undetermined"}return await VZ(Z)}function rZ(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var J$={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 G$={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 X$={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 O("craft:touchbar:action",Z)}};var oZ=/^[\da-f]*$/i;function aZ(Z,$){if(typeof $!=="string"||!oZ.test($)||$.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify($)}`)}var F$={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(aZ("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 O("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return O("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return O("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return O("craft:bluetooth:characteristicValue",Z)}};var K$={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((Q)=>Q.voiceURI===$.voice||Q.name===$.voice||Q.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,r,o,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:r,appVersion:o}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:r,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}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}r=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 Y4(Z)}},iZ="craft:crashReporter:pending",sZ=/[\w.+-]+@[\w-]+\.[\w.-]+/g,tZ=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,eZ=/\/(?:Users|home)\/[^\s/'"`]+/g;function Z4(Z){let $=(Y)=>Y.replace(sZ,"<email>").replace(tZ,"<ip>").replace(eZ,"/<home>");return{...Z,message:$(Z.message),stack:$(Z.stack)}}async function $4(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((Q)=>Q.toString(16).padStart(2,"0")).join("")}function J4(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 FZ(Z,$){if(!Z||typeof localStorage>"u")return;try{if($.length===0)localStorage.removeItem(Z);else localStorage.setItem(Z,JSON.stringify($))}catch{}}function Y4(Z){let{endpoint:$,intervalMs:Y=60000,signingSecret:z,redact:G=!0,headers:Q={},maxRetries:P=5,persistKey:X}=Z,F=X===null?null:X??iZ,j=J4(F),N=!1,k=null,R=null,LZ=typeof G==="function"?G:G===!1?(H)=>H:Z4;async function DZ(H){let x=JSON.stringify({entries:H}),_={"Content-Type":"application/json",...Q};if(z)_["X-Craft-Signature"]=await $4(z,x);let s=0,l=1000;while(!N)try{let M=await fetch($,{method:"POST",headers:_,body:x});if(M.ok)return;if(M.status>=400&&M.status<500)return;throw Error(`HTTP ${M.status}`)}catch(M){if(s+=1,s>P)throw j=[...H,...j],FZ(F,j),M;await new Promise((kZ)=>{setTimeout(kZ,l)}),l=Math.min(l*2,60000)}}async function i(){if(N||R)return R??void 0;let H=await v.flush();if(H.length>0)await v.clear();if(j=[...j,...H.map((_)=>LZ(_))],j.length===0)return;let x=j;return j=[],FZ(F,j),R=DZ(x).catch(()=>{}).finally(()=>{R=null}),R}if(Y>0)k=setInterval(()=>{i().catch(()=>{})},Y);return{async flushNow(){await i()},stop(){if(N=!0,k)clearInterval(k);k=null},pending(){return[...j]}}}var H$={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 O("craft:iap:purchased",Z)},onFailed(Z){return O("craft:iap:failed",Z)},onRestored(Z){return O("craft:iap:restored",Z)},onProductsLoaded(Z){return O("craft:iap:productsLoaded",($)=>Z($.products||[]))},onRefunded(Z){return O("craft:iap:refunded",Z)},onSubscriptionStatusChanged(Z){return O("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 O("craft:handoff:incoming",Z)}};var S$={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 _$={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 O("craft:location:update",Z)},onError(Z){return O("craft:location:error",Z)},onAuthChanged(Z){return O("craft:location:authChanged",Z)}};var I$={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 z4=250,G4=60000,WZ=2000,jZ={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function O4(){return{...jZ,signals:{...jZ.signals},sources:[]}}var a={async getState(){if(!J("screenSharing"))return O4();return await window.craft.screenSharing.getState()},async watch(Z=WZ){let $=Math.min(G4,Math.max(z4,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 O("craft:screenSharing:change",Z)}};async function f$(Z,$=WZ){let Y=a.onChange(Z);return await a.watch($),()=>{Y(),a.stop()}}var Q4={supported:!1,isFocused:null,authorization:"unsupported"};function KZ(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var NZ={async getStatus(){if(!J("focus"))return{...Q4};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 KZ();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 KZ();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 v$(...Z){if(Z.length===0)return!1;let $=new Set(await NZ.listShortcuts());return Z.every((Y)=>$.has(Y))}async function b$(...Z){if(Z.length===0)return!1;let{canList:$,shortcuts:Y}=await NZ.listShortcutsResult();if(!$)return"unknown";let z=new Set(Y);return Z.every((G)=>z.has(G))}var u$={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 O("craft:localServer:request",Z)},async awaitOAuthCallback(Z={}){V("localServer");let{port:$=0,host:Y="127.0.0.1",timeoutMs:z=300000,successHTML:G}=Z,Q=await this.start($,Y);if(!Q.started)throw Error(`localServer: start failed${Q.reason?` \u2014 ${Q.reason}`:""}`);return new Promise((P,X)=>{let F=setTimeout(()=>{j(),this.stop().catch(()=>{}),X(Error("localServer: OAuth callback timed out"))},z),j=this.onRequest(({url:N})=>{clearTimeout(F),j();let k=G??`<!doctype html><meta charset="utf-8"><title>Done</title>
310
+ `).trim()}var V8={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 $=gZ(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 O("craft:notification:actionClicked",Z)},onReply(Z){return O("craft:notification:reply",Z)}};function gZ(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 W8={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 hZ(Y);return new TextEncoder().encode(Y)},async writeFile(Z,$){await V("fs").writeFile(Z,$)},async writeBuffer(Z,$){let Y=uZ($),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 cZ(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 O("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 Q=$.kinds&&$.kinds.length>0?new Set($.kinds):null,P=Math.max(0,Math.floor($.coalesceMs??0)),X=[],F=null,j=!1,R=()=>{if(F=null,X.length===0)return;let L=X;X=[];try{Y(L)}catch{}},N=O("craft:fs:change",(L)=>{if(j)return;if(L.id!==z)return;if(Q&&L.kind&&!Q.has(L.kind))return;if(X.push(L),P===0){R();return}if(F==null)F=setTimeout(R,P)});return{id:z,async stop(){if(j)return;if(j=!0,N(),F)clearTimeout(F),F=null;if(X.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 uZ(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 hZ(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 cZ(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,GZ=!1;function pZ(){if(GZ)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let $=Z.detail;if($?.id)S.delete($.id)}),GZ=!0}var dZ=new Set(["javascript:","data:","file:","vbscript:"]),L8={async openExternal(Z){let $=Z.trim().toLowerCase();for(let Y of dZ)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(pZ(),!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 O("craft:shell:stdout",Z)},onStderr(Z){return O("craft:shell:stderr",Z)},onExit(Z){return O("craft:shell:exit",Z)}};var N8={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 O("craft:shortcut",Z)}};var U8={get(){if(J("theme"))try{return window.craft.theme.get()}catch{}return{appearance:nZ()}},onChange(Z){if(Z(this.get()),J("theme"))return O("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 S8(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 A8(){return J("dragOut")}var E8={onUrl(Z){if(!J("deepLink"))return()=>{};return O("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 w8={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 O("craft:powerSleep",Z)},onWake(Z){return O("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 m8={async connectionType(){if(J("network"))return await window.craft.network.connectionType();return OZ()},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 O("craft:networkChange",Z);if(typeof window>"u")return()=>{};let $=()=>Z({type:OZ(),online:!0}),Y=()=>Z({type:"none",online:!1});return window.addEventListener("online",$),window.addEventListener("offline",Y),()=>{window.removeEventListener("online",$),window.removeEventListener("offline",Y)}}};function OZ(){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 b8={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 O("craft:updateAvailable",Z)},onDownloaded(Z){return O("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:$,publicKeyB64:Y}){let z=QZ(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 Q=new Uint8Array(await G.arrayBuffer()),P;try{P=await crypto.subtle.importKey("raw",B(Y),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let X=!1;try{X=await crypto.subtle.verify("Ed25519",P,B($),QZ(Q))}catch{X=!1}if(!X)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:Q}}};function QZ(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),Q=new Uint8Array(G);for(let P=0;P<z.length;P++)Q[P]=z.charCodeAt(P);return Q}let $=Buffer.from(Z,"base64"),Y=new ArrayBuffer($.length);return new Uint8Array(Y).set($),new Uint8Array(Y)}var u8={onFocus(Z){if(J("window"))return O("craft:window:focus",()=>Z());return d("focus",Z)},onBlur(Z){if(J("window"))return O("craft:window:blur",()=>Z());return d("blur",Z)},onResize(Z){if(J("window"))return O("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 O("craft:window:move",Z);return()=>{}},onClose(Z){if(J("window"))return O("craft:window:close",()=>Z());return d("beforeunload",Z)},onMinimize(Z){if(J("window"))return O("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 O("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 XZ={name:"",version:"0.0.0"},p8={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 XZ;let Z=await window.craft.app.getInfo();return{...XZ,...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 r8={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()]}},rZ=0;function oZ(Z){let $=new Map;return{payload:{menus:Z.menus.map((z)=>({label:z.label,items:z.items.map((G)=>{let{onClick:Q,...P}=G;if(!Q)return P;let X=P.id??`stx.menu.${rZ++}`;return $.set(X,Q),{...P,id:X}})}))},handlers:$}}var PZ=null,o8={async set(Z){if(!J("menu"))return!1;let{payload:$,handlers:Y}=oZ(Z);return PZ?.(),PZ=Y.size>0?O("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 O("craft:menu:action",Z)}};var s8={async getDisplays(){if(J("screen"))return await window.craft.screen.getDisplays();return VZ()},async getPrimary(){if(J("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return VZ()[0]??null},onChange(Z){if(J("screen"))return O("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let $=()=>Z();return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)}};function VZ(){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 Z$={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 Y$={async check(Z){if(J("permissions"))return await window.craft.permissions.check(Z);return await FZ(Z)},async request(Z){if(J("permissions"))return await window.craft.permissions.request(Z);return await aZ(Z)},async openSettings(Z){if(J("permissions"))await window.craft.permissions.openSettings(Z)}};async function FZ(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let $=await navigator.permissions.query({name:Z});return iZ($.state)}catch{return"not-supported"}}async function aZ(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let $=await window.Notification.requestPermission();return $==="granted"?"granted":$==="denied"?"denied":"undetermined"}return await FZ(Z)}function iZ(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var O$={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 P$={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 j$={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 O("craft:touchbar:action",Z)}};var sZ=/^[\da-f]*$/i;function tZ(Z,$){if(typeof $!=="string"||!sZ.test($)||$.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify($)}`)}var R$={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(tZ("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 O("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return O("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return O("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return O("craft:bluetooth:characteristicValue",Z)}};var k$={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((Q)=>Q.voiceURI===$.voice||Q.name===$.voice||Q.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,r,o,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:r,appVersion:o}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:r,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}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}r=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 O4(Z)}},eZ="craft:crashReporter:pending",Z4=/[\w.+-]+@[\w-]+\.[\w.-]+/g,$4=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,J4=/\/(?:Users|home)\/[^\s/'"`]+/g;function Y4(Z){let $=(Y)=>Y.replace(Z4,"<email>").replace($4,"<ip>").replace(J4,"/<home>");return{...Z,message:$(Z.message),stack:$(Z.stack)}}async function z4(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((Q)=>Q.toString(16).padStart(2,"0")).join("")}function G4(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 jZ(Z,$){if(!Z||typeof localStorage>"u")return;try{if($.length===0)localStorage.removeItem(Z);else localStorage.setItem(Z,JSON.stringify($))}catch{}}function O4(Z){let{endpoint:$,intervalMs:Y=60000,signingSecret:z,redact:G=!0,headers:Q={},maxRetries:P=5,persistKey:X}=Z,F=X===null?null:X??eZ,j=G4(F),R=!1,N=null,L=null,kZ=typeof G==="function"?G:G===!1?(q)=>q:Y4;async function NZ(q){let x=JSON.stringify({entries:q}),_={"Content-Type":"application/json",...Q};if(z)_["X-Craft-Signature"]=await z4(z,x);let s=0,l=1000;while(!R)try{let M=await fetch($,{method:"POST",headers:_,body:x});if(M.ok)return;if(M.status>=400&&M.status<500)return;throw Error(`HTTP ${M.status}`)}catch(M){if(s+=1,s>P)throw j=[...q,...j],jZ(F,j),M;await new Promise((qZ)=>{setTimeout(qZ,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((_)=>kZ(_))],j.length===0)return;let x=j;return j=[],jZ(F,j),L=NZ(x).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 T$={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 O("craft:iap:purchased",Z)},onFailed(Z){return O("craft:iap:failed",Z)},onRestored(Z){return O("craft:iap:restored",Z)},onProductsLoaded(Z){return O("craft:iap:productsLoaded",($)=>Z($.products||[]))},onRefunded(Z){return O("craft:iap:refunded",Z)},onSubscriptionStatusChanged(Z){return O("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 O("craft:handoff:incoming",Z)}};var E$={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 w$={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 O("craft:location:update",Z)},onError(Z){return O("craft:location:error",Z)},onAuthChanged(Z){return O("craft:location:authChanged",Z)}};var m$={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 Q4=250,X4=60000,KZ=2000,WZ={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function P4(){return{...WZ,signals:{...WZ.signals},sources:[]}}var a={async getState(){if(!J("screenSharing"))return P4();return await window.craft.screenSharing.getState()},async watch(Z=KZ){let $=Math.min(X4,Math.max(Q4,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 O("craft:screenSharing:change",Z)}};async function b$(Z,$=KZ){let Y=a.onChange(Z);return await a.watch($),()=>{Y(),a.stop()}}var V4={supported:!1,isFocused:null,authorization:"unsupported"};function RZ(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var LZ={async getStatus(){if(!J("focus"))return{...V4};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 RZ();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 RZ();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 u$(...Z){if(Z.length===0)return!1;let $=new Set(await LZ.listShortcuts());return Z.every((Y)=>$.has(Y))}async function h$(...Z){if(Z.length===0)return!1;let{canList:$,shortcuts:Y}=await LZ.listShortcutsResult();if(!$)return"unknown";let z=new Set(Y);return Z.every((G)=>z.has(G))}var d$={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 O("craft:localServer:request",Z)},async awaitOAuthCallback(Z={}){V("localServer");let{port:$=0,host:Y="127.0.0.1",timeoutMs:z=300000,successHTML:G}=Z,Q=await this.start($,Y);if(!Q.started)throw Error(`localServer: start failed${Q.reason?` \u2014 ${Q.reason}`:""}`);return new Promise((P,X)=>{let F=setTimeout(()=>{j(),this.stop().catch(()=>{}),X(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
- <script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:k,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),P({url:N,port:Q.port})})})}};var p$={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,r$={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 i$={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 e$={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 JJ={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 GJ={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 XJ={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 FJ={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 O("craft:bonjour:found",Z)},onLost(Z){return O("craft:bonjour:lost",Z)}};var KJ={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 LJ={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 O("craft:speechRecognition:partial",Z)},onFinal(Z){return O("craft:speechRecognition:final",Z)}};var HJ={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 MJ={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 O("craft:midi:message",Z)}};var AJ={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 EJ={async listCameras(){if(!J("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var wJ={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 O("craft:serviceMenu:invoked",Z)}};var mJ={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 O("craft:serial:data",Z)}};var RZ=[{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 bJ(){return RZ.map(({name:Z,support:$})=>({name:Z,support:$,available:J(Z)}))}function X4(Z){let $=RZ.find((Y)=>Y.name===Z);if(!$)return;return{...$,available:J(Z)}}function lJ(Z){let $=X4(Z);return!!$&&$.available}
315
- export{P4 as a,e as b,C as c,V4 as d,F4 as e,j4 as f,W4 as g,K4 as h,N4 as i,R4 as j,L4 as k,D4 as l,T as m,EZ as n,H4 as o,q4 as p,U4 as q,CZ as r,M4 as s,T4 as t,S4 as u,A4 as v,x4 as w,_4 as x,C4 as y,I4 as z,y as A,w4 as B,y4 as C,f4 as D,m4 as E,B4 as F,v4 as G,l4 as H,IZ as I,g4 as J,u4 as K,h4 as L,c4 as M,yZ as N,d4 as O,n4 as P,vZ as Q,r4 as R,o4 as S,i4 as T,s4 as U,t4 as V,e4 as W,Z8 as X,J as Y,z8 as Z,Q8 as _,V8 as $,W8 as aa,R8 as ba,k8 as ca,U8 as da,M8 as ea,A8 as fa,E8 as ga,w8 as ha,m8 as ia,b8 as ja,u8 as ka,p8 as la,r8 as ma,i8 as na,e8 as oa,J$ as pa,G$ as qa,X$ as ra,F$ as sa,K$ as ta,v as ua,Z4 as va,$4 as wa,H$ as xa,b as ya,S$ as za,_$ as Aa,I$ as Ba,z4 as Ca,G4 as Da,WZ as Ea,a as Fa,f$ as Ga,NZ as Ha,v$ as Ia,b$ as Ja,u$ as Ka,p$ as La,r$ as Ma,i$ as Na,e$ as Oa,JJ as Pa,GJ as Qa,XJ as Ra,FJ as Sa,KJ as Ta,LJ as Ua,HJ as Va,MJ as Wa,AJ as Xa,EJ as Ya,wJ as Za,mJ as _a,bJ as $a,X4 as ab,lJ as bb};
314
+ <script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:N,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),P({url:R,port:Q.port})})})}};var o$={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,s$={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 ZJ={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 YJ={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 OJ={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 PJ={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 jJ={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 RJ={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 O("craft:bonjour:found",Z)},onLost(Z){return O("craft:bonjour:lost",Z)}};var kJ={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 HJ={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 O("craft:speechRecognition:partial",Z)},onFinal(Z){return O("craft:speechRecognition:final",Z)}};var TJ={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 O("craft:midi:message",Z)}};var CJ={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 yJ={async listCameras(){if(!J("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var BJ={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 O("craft:serviceMenu:invoked",Z)}};var lJ={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 O("craft:serial:data",Z)}};var DZ=[{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 hJ(){return DZ.map(({name:Z,support:$})=>({name:Z,support:$,available:J(Z)}))}function F4(Z){let $=DZ.find((Y)=>Y.name===Z);if(!$)return;return{...$,available:J(Z)}}function cJ(Z){let $=F4(Z);return!!$&&$.available}
315
+ export{j4 as a,e as b,C as c,W4 as d,K4 as e,R4 as f,L4 as g,D4 as h,k4 as i,N4 as j,q4 as k,H4 as l,T as m,CZ as n,M4 as o,T4 as p,S4 as q,IZ as r,A4 as s,x4 as t,_4 as u,E4 as v,C4 as w,I4 as x,y4 as y,f4 as z,y as A,m4 as B,B4 as C,v4 as D,b4 as E,l4 as F,g4 as G,h4 as H,wZ as I,c4 as J,p4 as K,d4 as L,n4 as M,fZ as N,o4 as O,a4 as P,bZ as Q,i4 as R,s4 as S,e4 as T,Z8 as U,$8 as V,J8 as W,Y8 as X,J as Y,O as Z,Q8 as _,V8 as $,W8 as aa,L8 as ba,N8 as ca,U8 as da,S8 as ea,A8 as fa,E8 as ga,w8 as ha,m8 as ia,b8 as ja,u8 as ka,p8 as la,r8 as ma,o8 as na,s8 as oa,Z$ as pa,Y$ as qa,O$ as ra,P$ as sa,j$ as ta,R$ as ua,k$ as va,v as wa,Y4 as xa,z4 as ya,T$ as za,b as Aa,E$ as Ba,w$ as Ca,m$ as Da,Q4 as Ea,X4 as Fa,KZ as Ga,a as Ha,b$ as Ia,LZ as Ja,u$ as Ka,h$ as La,d$ as Ma,o$ as Na,s$ as Oa,ZJ as Pa,YJ as Qa,OJ as Ra,PJ as Sa,jJ as Ta,RJ as Ua,kJ as Va,HJ as Wa,TJ as Xa,xJ as Ya,CJ as Za,yJ as _a,BJ as $a,lJ as ab,hJ as bb,F4 as cb,cJ as db};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
2
  var a=import.meta.require;
3
- export{a as cb};
3
+ export{a as eb};
@@ -0,0 +1,24 @@
1
+ export declare const contextMenu: ContextMenuAPI;
2
+ export declare interface ContextMenuItem {
3
+ id?: string
4
+ title?: string
5
+ separator?: boolean
6
+ icon?: string
7
+ shortcut?: string
8
+ disabled?: boolean
9
+ submenu?: ContextMenuItem[]
10
+ }
11
+ export declare interface ContextMenuOptions {
12
+ items: ContextMenuItem[]
13
+ x: number
14
+ y: number
15
+ targetId?: string
16
+ }
17
+ export declare interface ContextMenuActionEvent {
18
+ id: string
19
+ }
20
+ export declare interface ContextMenuAPI {
21
+ show: (options: ContextMenuOptions) => Promise<boolean>
22
+ available: () => boolean
23
+ onAction: (cb: (event: ContextMenuActionEvent) => void) => () => void
24
+ }
package/dist/index.d.ts CHANGED
@@ -150,7 +150,13 @@ export type {
150
150
  } from './updater';
151
151
  export type { WindowEvents, WindowPosition, WindowSize } from './window-events';
152
152
  export type { AppAPI, AppInfo, AppNotifyOptions } from './app-info';
153
- export type { MenuActionEvent, MenuAPI, MenuItem } from './menu';
153
+ export type { ApplicationMenu, Menu, MenuActionEvent, MenuAPI, MenuItem, MenuRole } from './menu';
154
+ export type {
155
+ ContextMenuAPI,
156
+ ContextMenuActionEvent,
157
+ ContextMenuItem,
158
+ ContextMenuOptions,
159
+ } from './context-menu';
154
160
  export type { SystemInfo } from './system';
155
161
  export type { Display, ScreenAPI } from './screen';
156
162
  export type { KeychainAPI } from './keychain';
@@ -516,7 +522,11 @@ export { app as appInfo } from './app-info';
516
522
  // =============================================================================
517
523
  // Native Application Menu (macOS menubar + dock menu)
518
524
  // =============================================================================
519
- export { menu } from './menu';
525
+ export { menu, standardMenus } from './menu';
526
+ // =============================================================================
527
+ // Native Context Menu (right-click, at the pointer)
528
+ // =============================================================================
529
+ export { contextMenu } from './context-menu';
520
530
  // =============================================================================
521
531
  // System / Host Info
522
532
  // =============================================================================
package/dist/index.js CHANGED
@@ -1,86 +1,86 @@
1
1
  // @bun
2
- import{$ as dZ,$a as d0,A as OZ,Aa as V0,B as zZ,Ba as O0,C as MZ,Ca as z0,D as TZ,Da as M0,E as LZ,Ea as T0,F as DZ,Fa as L0,G as PZ,Ga as D0,H as WZ,Ha as P0,I as AZ,Ia as W0,J as NZ,Ja as A0,K as IZ,Ka as N0,L as xZ,La as I0,M as kZ,Ma as x0,N as CZ,Na as k0,O as HZ,Oa as C0,P as vZ,Pa as H0,Q as wZ,Qa as v0,R as fZ,Ra as w0,S as SZ,Sa as f0,T as gZ,Ta as S0,U as bZ,Ua as g0,V as uZ,Va as b0,W as yZ,Wa as u0,X as hZ,Xa as y0,Y as d,Ya as h0,Z as mZ,Za as m0,_ as cZ,_a as c0,a as rY,aa as pZ,ab as p0,b as nY,ba as rZ,bb as r0,c as oY,ca as nZ,d as lY,da as oZ,e as aY,ea as lZ,f as iY,fa as aZ,g as sY,ga as iZ,h as tY,ha as sZ,i as eY,ia as tZ,j as QZ,ja as eZ,k as YZ,ka as Q0,l as ZZ,la as Y0,m as XZ,ma as Z0,n as $Z,na as X0,o as JZ,oa as $0,p as GZ,pa as J0,q as qZ,qa as G0,r as RZ,ra as q0,s as KZ,sa as R0,t as UZ,ta as K0,u as EZ,ua as U0,v as _Z,va as E0,w as BZ,wa as _0,x as FZ,xa as B0,y as jZ,ya as F0,z as VZ,za as j0}from"./chunk-rgd4gjkd.js";import{cb as N}from"./chunk-ts9f0mxv.js";function z(Y="stx"){return`${Y}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function B(Y){return Y.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function O(...Y){return Y.filter(Boolean).join(" ")}function V(Y){if(!Y)return"";return Object.entries(Y).map(([Q,Z])=>`${Q.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${Z}`).join("; ")}function EQ(Y){let{text:Q,variant:Z="primary",size:X="medium",disabled:$=!1,loading:G=!1,icon:K,iconPosition:q="left",id:J=z("btn"),className:E,style:U}=Y,_=O("stx-button",`stx-button--${Z}`,`stx-button--${X}`,$&&"stx-button--disabled",G&&"stx-button--loading",E),R=V(U),F=K?`<span class="stx-button-icon">${K}</span>`:"",j=G?'<span class="stx-button-spinner"></span>':"",M=q==="left"?`${F}${j}<span class="stx-button-text">${B(Q)}</span>`:`<span class="stx-button-text">${B(Q)}</span>${F}${j}`;return`<button id="${J}" class="${_}" ${$||G?"disabled":""} ${R?`style='${R}'`:""}>${M}</button>`}function _Q(Y){let{value:Q="",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:F,id:j=z("input"),className:M,style:T}=Y,L=O("stx-input",R&&"stx-input--error",$&&"stx-input--disabled",M),v=V(T),UQ=[`type="${X}"`,`id="${j}"`,`class="${L}"`,Q&&`value="${B(Q)}"`,Z&&`placeholder="${B(Z)}"`,$&&"disabled",G&&"readonly",E&&"required",K&&`maxlength="${K}"`,q&&`minlength="${q}"`,J&&`pattern="${B(J)}"`,U&&`autocomplete="${U}"`,v&&`style="${v}"`].filter(Boolean).join(" "),C="";if(_)C+=`<label class="stx-input-label" for="${j}">${B(_)}</label>`;if(C+=`<input ${UQ} />`,R)C+=`<div class="stx-input-error">${B(R)}</div>`;else if(F)C+=`<div class="stx-input-hint">${B(F)}</div>`;return`<div class="stx-input-wrapper">${C}</div>`}function BQ(Y){let{checked:Q=!1,label:Z,disabled:X=!1,indeterminate:$=!1,id:G=z("checkbox"),className:K,style:q}=Y,J=O("stx-checkbox",X&&"stx-checkbox--disabled",K),E=V(q),U=['type="checkbox"',`id="${G}"`,Q&&"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-c4areqvh.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>
6
- ${Z?`<span class="stx-checkbox-label">${B(Z)}</span>`:""}
6
+ ${Z?`<span class="stx-checkbox-label">${F(Z)}</span>`:""}
7
7
  </label>
8
- `}function FQ(Y){let{value:Q=50,min:Z=0,max:X=100,step:$=1,disabled:G=!1,label:K,showValue:q=!0,id:J=z("slider"),className:E,style:U}=Y,_=O("stx-slider",G&&"stx-slider--disabled",E),R=V(U),F=['type="range"',`id="${J}"`,`value="${Q}"`,`min="${Z}"`,`max="${X}"`,`step="${$}"`,G&&"disabled"].filter(Boolean).join(" "),j="";if(K)j+=`<label class="stx-slider-label" for="${J}">${B(K)}</label>`;if(j+=`<div class="stx-slider-track"><input ${F} /></div>`,q)j+=`<span class="stx-slider-value">${Q}</span>`;return`<div class="${_}" ${R?`style='${R}'`:""}>${j}</div>`}function jQ(Y){let{value:Q,max:Z=100,variant:X="default",size:$="medium",showLabel:G=!1,indeterminate:K=!1,id:q=z("progress"),className:J,style:E}=Y,U=Math.min(100,Math.max(0,Q/Z*100)),_=O("stx-progress",`stx-progress--${X}`,`stx-progress--${$}`,K&&"stx-progress--indeterminate",J),R=V(E);return`
9
- <div id="${q}" class="${_}" role="progressbar" aria-valuenow="${Q}" aria-valuemin="0" aria-valuemax="${Z}" ${R?`style="${R}"`:""}>
8
+ `}function VQ(Q){let{value:Y=50,min:Z=0,max:X=100,step:$=1,disabled:G=!1,label:K,showValue:q=!0,id:J=z("slider"),className:E,style:U}=Q,_=O("stx-slider",G&&"stx-slider--disabled",E),R=V(U),B=['type="range"',`id="${J}"`,`value="${Y}"`,`min="${Z}"`,`max="${X}"`,`step="${$}"`,G&&"disabled"].filter(Boolean).join(" "),j="";if(K)j+=`<label class="stx-slider-label" for="${J}">${F(K)}</label>`;if(j+=`<div class="stx-slider-track"><input ${B} /></div>`,q)j+=`<span class="stx-slider-value">${Y}</span>`;return`<div class="${_}" ${R?`style='${R}'`:""}>${j}</div>`}function OQ(Q){let{value:Y,max:Z=100,variant:X="default",size:$="medium",showLabel:G=!1,indeterminate:K=!1,id:q=z("progress"),className:J,style:E}=Q,U=Math.min(100,Math.max(0,Y/Z*100)),_=O("stx-progress",`stx-progress--${X}`,`stx-progress--${$}`,K&&"stx-progress--indeterminate",J),R=V(E);return`
9
+ <div id="${q}" class="${_}" role="progressbar" aria-valuenow="${Y}" aria-valuemin="0" aria-valuemax="${Z}" ${R?`style="${R}"`:""}>
10
10
  <div class="stx-progress-bar" style="width: ${K?"100%":`${U}%`}"></div>
11
11
  ${G?`<span class="stx-progress-label">${Math.round(U)}%</span>`:""}
12
12
  </div>
13
- `}function VQ(Y){let{text:Q,variant:Z="default",size:X="medium",id:$=z("badge"),className:G,style:K}=Y,q=O("stx-badge",`stx-badge--${Z}`,`stx-badge--${X}`,G),J=V(K);return`<span id="${$}" class="${q}" ${J?`style='${J}'`:""}>${B(Q)}</span>`}function OQ(Y){let{src:Q,alt:Z="",name:X,size:$="medium",shape:G="circle",id:K=z("avatar"),className:q,style:J}=Y,E=typeof $==="number"?"":`stx-avatar--${$}`,U=typeof $==="number"?`width: ${$}px; height: ${$}px;`:"",_=O("stx-avatar",E,`stx-avatar--${G}`,q),R=[U,V(J)].filter(Boolean).join(" "),F=X?X.split(" ").map((j)=>j[0]).join("").toUpperCase().slice(0,2):"";if(Q)return`<div id="${K}" class="${_}" ${R?`style="${R}"`:""}>
14
- <img src="${B(Q)}" alt="${B(Z)}" class="stx-avatar-img" />
13
+ `}function zQ(Q){let{text:Y,variant:Z="default",size:X="medium",id:$=z("badge"),className:G,style:K}=Q,q=O("stx-badge",`stx-badge--${Z}`,`stx-badge--${X}`,G),J=V(K);return`<span id="${$}" class="${q}" ${J?`style='${J}'`:""}>${F(Y)}</span>`}function MQ(Q){let{src:Y,alt:Z="",name:X,size:$="medium",shape:G="circle",id:K=z("avatar"),className:q,style:J}=Q,E=typeof $==="number"?"":`stx-avatar--${$}`,U=typeof $==="number"?`width: ${$}px; height: ${$}px;`:"",_=O("stx-avatar",E,`stx-avatar--${G}`,q),R=[U,V(J)].filter(Boolean).join(" "),B=X?X.split(" ").map((j)=>j[0]).join("").toUpperCase().slice(0,2):"";if(Y)return`<div id="${K}" class="${_}" ${R?`style="${R}"`:""}>
14
+ <img src="${F(Y)}" alt="${F(Z)}" class="stx-avatar-img" />
15
15
  </div>`;return`<div id="${K}" class="${_}" ${R?`style="${R}"`:""}>
16
- <span class="stx-avatar-initials">${F}</span>
17
- </div>`}function zQ(Y){let{title:Q,subtitle:Z,content:X,image:$,footer:G,variant:K="default",id:q=z("card"),className:J,style:E}=Y,U=O("stx-card",`stx-card--${K}`,J),_=V(E),R="";if($)R+=`<div class="stx-card-image"><img src="${B($)}" alt="" /></div>`;if(R+='<div class="stx-card-body">',Q)R+=`<h3 class="stx-card-title">${B(Q)}</h3>`;if(Z)R+=`<p class="stx-card-subtitle">${B(Z)}</p>`;if(X)R+=`<div class="stx-card-content">${B(X)}</div>`;if(R+="</div>",G)R+=`<div class="stx-card-footer">${B(G)}</div>`;return`<div id="${q}" class="${U}" ${_?`style='${_}'`:""}>${R}</div>`}function MQ(Y){let{tabs:Q,activeTab:Z,variant:X="default",id:$=z("tabs"),className:G,style:K}=Y,q=O("stx-tabs",`stx-tabs--${X}`,G),J=V(K),E=Q.map((U,_)=>{let R=Z?U.value===Z:_===0;return`<button class="${O("stx-tab",R&&"stx-tab--active",U.disabled&&"stx-tab--disabled")}" data-value="${B(U.value)}" ${U.disabled?"disabled":""} role="tab" aria-selected="${R}">${B(U.label)}</button>`}).join("");return`<div id="${$}" class="${q}" role="tablist" ${J?`style='${J}'`:""}>${E}</div>`}function TQ(Y){let{options:Q,value:Z,placeholder:X="Select...",disabled:$=!1,id:G=z("dropdown"),className:K,style:q}=Y,J=O("stx-dropdown",$&&"stx-dropdown--disabled",K),E=V(q),U=Q.map((R)=>{let F=R.value===Z?"selected":"",j=R.disabled?"disabled":"";return`<option value="${B(R.value)}" ${F} ${j}>${B(R.label)}</option>`}).join(""),_=Z?"":`<option value="" disabled selected>${B(X)}</option>`;return`<select id="${G}" class="${J}" ${$?"disabled":""} ${E?`style='${E}'`:""}>${_}${U}</select>`}function LQ(Y){let{value:Q=0,max:Z=5,readonly:X=!1,size:$="medium",allowHalf:G=!1,id:K=z("rating"),className:q,style:J}=Y,E=O("stx-rating",`stx-rating--${$}`,X&&"stx-rating--readonly",q),U=V(J),_="";for(let R=1;R<=Z;R++){let F=R<=Q,j=G&&R-0.5===Q;_+=`<span class="stx-star ${F?"stx-star--filled":j?"stx-star--half":""}" data-value="${R}">\u2605</span>`}return`<div id="${K}" class="${E}" role="slider" aria-valuenow="${Q}" aria-valuemin="0" aria-valuemax="${Z}" ${U?`style='${U}'`:""}>${_}</div>`}function DQ(Y){let{value:Q,name:Z,checked:X=!1,label:$,disabled:G=!1,id:K=z("radio"),className:q,style:J}=Y,E=O("stx-radio",G&&"stx-radio--disabled",q),U=V(J),_=['type="radio"',`id="${K}"`,`name="${B(Z)}"`,`value="${B(Q)}"`,X&&"checked",G&&"disabled"].filter(Boolean).join(" ");return`
16
+ <span class="stx-avatar-initials">${B}</span>
17
+ </div>`}function TQ(Q){let{title:Y,subtitle:Z,content:X,image:$,footer:G,variant:K="default",id:q=z("card"),className:J,style:E}=Q,U=O("stx-card",`stx-card--${K}`,J),_=V(E),R="";if($)R+=`<div class="stx-card-image"><img src="${F($)}" alt="" /></div>`;if(R+='<div class="stx-card-body">',Y)R+=`<h3 class="stx-card-title">${F(Y)}</h3>`;if(Z)R+=`<p class="stx-card-subtitle">${F(Z)}</p>`;if(X)R+=`<div class="stx-card-content">${F(X)}</div>`;if(R+="</div>",G)R+=`<div class="stx-card-footer">${F(G)}</div>`;return`<div id="${q}" class="${U}" ${_?`style='${_}'`:""}>${R}</div>`}function LQ(Q){let{tabs:Y,activeTab:Z,variant:X="default",id:$=z("tabs"),className:G,style:K}=Q,q=O("stx-tabs",`stx-tabs--${X}`,G),J=V(K),E=Y.map((U,_)=>{let R=Z?U.value===Z:_===0;return`<button class="${O("stx-tab",R&&"stx-tab--active",U.disabled&&"stx-tab--disabled")}" data-value="${F(U.value)}" ${U.disabled?"disabled":""} role="tab" aria-selected="${R}">${F(U.label)}</button>`}).join("");return`<div id="${$}" class="${q}" role="tablist" ${J?`style='${J}'`:""}>${E}</div>`}function DQ(Q){let{options:Y,value:Z,placeholder:X="Select...",disabled:$=!1,id:G=z("dropdown"),className:K,style:q}=Q,J=O("stx-dropdown",$&&"stx-dropdown--disabled",K),E=V(q),U=Y.map((R)=>{let B=R.value===Z?"selected":"",j=R.disabled?"disabled":"";return`<option value="${F(R.value)}" ${B} ${j}>${F(R.label)}</option>`}).join(""),_=Z?"":`<option value="" disabled selected>${F(X)}</option>`;return`<select id="${G}" class="${J}" ${$?"disabled":""} ${E?`style='${E}'`:""}>${_}${U}</select>`}function PQ(Q){let{value:Y=0,max:Z=5,readonly:X=!1,size:$="medium",allowHalf:G=!1,id:K=z("rating"),className:q,style:J}=Q,E=O("stx-rating",`stx-rating--${$}`,X&&"stx-rating--readonly",q),U=V(J),_="";for(let R=1;R<=Z;R++){let B=R<=Y,j=G&&R-0.5===Y;_+=`<span class="stx-star ${B?"stx-star--filled":j?"stx-star--half":""}" data-value="${R}">\u2605</span>`}return`<div id="${K}" class="${E}" role="slider" aria-valuenow="${Y}" aria-valuemin="0" aria-valuemax="${Z}" ${U?`style='${U}'`:""}>${_}</div>`}function WQ(Q){let{value:Y,name:Z,checked:X=!1,label:$,disabled:G=!1,id:K=z("radio"),className:q,style:J}=Q,E=O("stx-radio",G&&"stx-radio--disabled",q),U=V(J),_=['type="radio"',`id="${K}"`,`name="${F(Z)}"`,`value="${F(Y)}"`,X&&"checked",G&&"disabled"].filter(Boolean).join(" ");return`
18
18
  <label class="${E}" ${U?`style="${U}"`:""}>
19
19
  <input ${_} />
20
20
  <span class="stx-radio-circle"></span>
21
- ${$?`<span class="stx-radio-label">${B($)}</span>`:""}
21
+ ${$?`<span class="stx-radio-label">${F($)}</span>`:""}
22
22
  </label>
23
- `}function PQ(Y){let{value:Q="#3498db",disabled:Z=!1,label:X,presetColors:$=["#e74c3c","#f39c12","#27ae60","#3498db","#9b59b6","#1abc9c","#34495e","#000000"],id:G=z("color"),className:K,style:q}=Y,J=O("stx-color-picker",Z&&"stx-color-picker--disabled",K),E=V(q),U="";if(X)U+=`<label class="stx-color-picker-label" for="${G}">${B(X)}</label>`;if(U+=`<div class="stx-color-picker-input">
24
- <input type="color" id="${G}" value="${B(Q)}" ${Z?"disabled":""} />
25
- <span class="stx-color-picker-value">${B(Q)}</span>
26
- </div>`,$.length>0){U+='<div class="stx-color-picker-presets">';for(let _ of $)U+=`<button class="stx-color-preset" style="background: ${B(_)}" data-color="${B(_)}" ${Z?"disabled":""}></button>`;U+="</div>"}return`<div class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function WQ(Y){let{value:Q,min:Z,max:X,disabled:$=!1,label:G,placeholder:K="Select date",showClear:q=!0,id:J=z("date"),className:E,style:U}=Y,_=O("stx-date-picker",$&&"stx-date-picker--disabled",E),R=V(U),F=Q instanceof Date?Q.toISOString().split("T")[0]:Q||"",j=Z instanceof Date?Z.toISOString().split("T")[0]:Z,M=X instanceof Date?X.toISOString().split("T")[0]:X,T=['type="date"',`id="${J}"`,F&&`value="${F}"`,j&&`min="${j}"`,M&&`max="${M}"`,$&&"disabled",`placeholder="${B(K)}"`].filter(Boolean).join(" "),L="";if(G)L+=`<label class="stx-date-picker-label" for="${J}">${B(G)}</label>`;return L+=`<div class="stx-date-picker-input">
23
+ `}function AQ(Q){let{value:Y="#3498db",disabled:Z=!1,label:X,presetColors:$=["#e74c3c","#f39c12","#27ae60","#3498db","#9b59b6","#1abc9c","#34495e","#000000"],id:G=z("color"),className:K,style:q}=Q,J=O("stx-color-picker",Z&&"stx-color-picker--disabled",K),E=V(q),U="";if(X)U+=`<label class="stx-color-picker-label" for="${G}">${F(X)}</label>`;if(U+=`<div class="stx-color-picker-input">
24
+ <input type="color" id="${G}" value="${F(Y)}" ${Z?"disabled":""} />
25
+ <span class="stx-color-picker-value">${F(Y)}</span>
26
+ </div>`,$.length>0){U+='<div class="stx-color-picker-presets">';for(let _ of $)U+=`<button class="stx-color-preset" style="background: ${F(_)}" data-color="${F(_)}" ${Z?"disabled":""}></button>`;U+="</div>"}return`<div class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function NQ(Q){let{value:Y,min:Z,max:X,disabled:$=!1,label:G,placeholder:K="Select date",showClear:q=!0,id:J=z("date"),className:E,style:U}=Q,_=O("stx-date-picker",$&&"stx-date-picker--disabled",E),R=V(U),B=Y instanceof Date?Y.toISOString().split("T")[0]:Y||"",j=Z instanceof Date?Z.toISOString().split("T")[0]:Z,M=X instanceof Date?X.toISOString().split("T")[0]:X,T=['type="date"',`id="${J}"`,B&&`value="${B}"`,j&&`min="${j}"`,M&&`max="${M}"`,$&&"disabled",`placeholder="${F(K)}"`].filter(Boolean).join(" "),L="";if(G)L+=`<label class="stx-date-picker-label" for="${J}">${F(G)}</label>`;return L+=`<div class="stx-date-picker-input">
27
27
  <input ${T} />
28
- ${q&&F?'<button class="stx-date-picker-clear" type="button">&times;</button>':""}
29
- </div>`,`<div class="${_}" ${R?`style='${R}'`:""}>${L}</div>`}function AQ(Y){let{value:Q="",disabled:Z=!1,label:X,step:$=60,min:G,max:K,id:q=z("time"),className:J,style:E}=Y,U=O("stx-time-picker",Z&&"stx-time-picker--disabled",J),_=V(E),R=['type="time"',`id="${q}"`,Q&&`value="${B(Q)}"`,`step="${$}"`,G&&`min="${B(G)}"`,K&&`max="${B(K)}"`,Z&&"disabled"].filter(Boolean).join(" "),F="";if(X)F+=`<label class="stx-time-picker-label" for="${q}">${B(X)}</label>`;return F+=`<input ${R} class="stx-time-picker-input" />`,`<div class="${U}" ${_?`style='${_}'`:""}>${F}</div>`}function NQ(Y){let{options:Q,value:Z="",placeholder:X="Search...",disabled:$=!1,label:G,loading:K=!1,id:q=z("autocomplete"),className:J,style:E}=Y,U=O("stx-autocomplete",$&&"stx-autocomplete--disabled",J),_=V(E),R=Q.find((M)=>M.value===Z),F=R?R.label:Z,j="";if(G)j+=`<label class="stx-autocomplete-label" for="${q}">${B(G)}</label>`;j+=`<div class="stx-autocomplete-input-wrapper">
30
- <input type="text" id="${q}" value="${B(F)}" placeholder="${B(X)}" ${$?"disabled":""} autocomplete="off" class="stx-autocomplete-input" />
28
+ ${q&&B?'<button class="stx-date-picker-clear" type="button">&times;</button>':""}
29
+ </div>`,`<div class="${_}" ${R?`style='${R}'`:""}>${L}</div>`}function xQ(Q){let{value:Y="",disabled:Z=!1,label:X,step:$=60,min:G,max:K,id:q=z("time"),className:J,style:E}=Q,U=O("stx-time-picker",Z&&"stx-time-picker--disabled",J),_=V(E),R=['type="time"',`id="${q}"`,Y&&`value="${F(Y)}"`,`step="${$}"`,G&&`min="${F(G)}"`,K&&`max="${F(K)}"`,Z&&"disabled"].filter(Boolean).join(" "),B="";if(X)B+=`<label class="stx-time-picker-label" for="${q}">${F(X)}</label>`;return B+=`<input ${R} class="stx-time-picker-input" />`,`<div class="${U}" ${_?`style='${_}'`:""}>${B}</div>`}function IQ(Q){let{options:Y,value:Z="",placeholder:X="Search...",disabled:$=!1,label:G,loading:K=!1,id:q=z("autocomplete"),className:J,style:E}=Q,U=O("stx-autocomplete",$&&"stx-autocomplete--disabled",J),_=V(E),R=Y.find((M)=>M.value===Z),B=R?R.label:Z,j="";if(G)j+=`<label class="stx-autocomplete-label" for="${q}">${F(G)}</label>`;j+=`<div class="stx-autocomplete-input-wrapper">
30
+ <input type="text" id="${q}" value="${F(B)}" placeholder="${F(X)}" ${$?"disabled":""} autocomplete="off" class="stx-autocomplete-input" />
31
31
  ${K?'<span class="stx-autocomplete-spinner"></span>':""}
32
- </div>`,j+='<ul class="stx-autocomplete-list">';for(let M of Q)j+=`<li class="stx-autocomplete-item ${M.value===Z?"stx-autocomplete-item--selected":""}" data-value="${B(M.value)}">${B(M.label)}</li>`;return j+="</ul>",`<div class="${U}" ${_?`style='${_}'`:""}>${j}</div>`}function IQ(Y){let{text:Q,htmlFor:Z,required:X=!1,size:$="medium",id:G=z("label"),className:K,style:q}=Y,J=O("stx-label",`stx-label--${$}`,K),E=V(q);return`<label id="${G}" class="${J}" ${Z?`for='${B(Z)}'`:""} ${E?`style='${E}'`:""}>${B(Q)}${X?'<span class="stx-label-required">*</span>':""}</label>`}function xQ(Y){let{src:Q,alt:Z="",width:X,height:$,objectFit:G="cover",fallback:K,loading:q="lazy",id:J=z("image"),className:E,style:U}=Y,_=O("stx-image",E),R={objectFit:G};if(X)R.width=typeof X==="number"?`${X}px`:X;if($)R.height=typeof $==="number"?`${$}px`:$;let F=[V(R),V(U)].filter(Boolean).join("; "),j=K?`onerror="this.src='${B(K)}'"`:"";return`<img id="${J}" class="${_}" src="${B(Q)}" alt="${B(Z)}" loading="${q}" ${F?`style='${F}'`:""} ${j} />`}function kQ(Y){let{text:Q,variant:Z="default",size:X="medium",removable:$=!1,icon:G,id:K=z("chip"),className:q,style:J}=Y,E=O("stx-chip",`stx-chip--${Z}`,`stx-chip--${X}`,q),U=V(J),_="";if(G)_+=`<span class="stx-chip-icon">${G}</span>`;if(_+=`<span class="stx-chip-text">${B(Q)}</span>`,$)_+='<button class="stx-chip-remove" type="button">&times;</button>';return`<span id="${K}" class="${E}" ${U?`style='${U}'`:""}>${_}</span>`}function CQ(Y){let{text:Q,position:Z="top",delay:X=200,children:$,id:G=z("tooltip"),className:K,style:q}=Y,J=O("stx-tooltip-wrapper",K),E=V(q);return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""} data-tooltip="${B(Q)}" data-position="${Z}" data-delay="${X}">
32
+ </div>`,j+='<ul class="stx-autocomplete-list">';for(let M of Y)j+=`<li class="stx-autocomplete-item ${M.value===Z?"stx-autocomplete-item--selected":""}" data-value="${F(M.value)}">${F(M.label)}</li>`;return j+="</ul>",`<div class="${U}" ${_?`style='${_}'`:""}>${j}</div>`}function kQ(Q){let{text:Y,htmlFor:Z,required:X=!1,size:$="medium",id:G=z("label"),className:K,style:q}=Q,J=O("stx-label",`stx-label--${$}`,K),E=V(q);return`<label id="${G}" class="${J}" ${Z?`for='${F(Z)}'`:""} ${E?`style='${E}'`:""}>${F(Y)}${X?'<span class="stx-label-required">*</span>':""}</label>`}function CQ(Q){let{src:Y,alt:Z="",width:X,height:$,objectFit:G="cover",fallback:K,loading:q="lazy",id:J=z("image"),className:E,style:U}=Q,_=O("stx-image",E),R={objectFit:G};if(X)R.width=typeof X==="number"?`${X}px`:X;if($)R.height=typeof $==="number"?`${$}px`:$;let B=[V(R),V(U)].filter(Boolean).join("; "),j=K?`onerror="this.src='${F(K)}'"`:"";return`<img id="${J}" class="${_}" src="${F(Y)}" alt="${F(Z)}" loading="${q}" ${B?`style='${B}'`:""} ${j} />`}function HQ(Q){let{text:Y,variant:Z="default",size:X="medium",removable:$=!1,icon:G,id:K=z("chip"),className:q,style:J}=Q,E=O("stx-chip",`stx-chip--${Z}`,`stx-chip--${X}`,q),U=V(J),_="";if(G)_+=`<span class="stx-chip-icon">${G}</span>`;if(_+=`<span class="stx-chip-text">${F(Y)}</span>`,$)_+='<button class="stx-chip-remove" type="button">&times;</button>';return`<span id="${K}" class="${E}" ${U?`style='${U}'`:""}>${_}</span>`}function vQ(Q){let{text:Y,position:Z="top",delay:X=200,children:$,id:G=z("tooltip"),className:K,style:q}=Q,J=O("stx-tooltip-wrapper",K),E=V(q);return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""} data-tooltip="${F(Y)}" data-position="${Z}" data-delay="${X}">
33
33
  ${$}
34
- <span class="stx-tooltip stx-tooltip--${Z}">${B(Q)}</span>
35
- </div>`}function HQ(Y){let{direction:Q="vertical",showScrollbar:Z=!0,smooth:X=!0,height:$,width:G,children:K,id:q=z("scroll"),className:J,style:E}=Y,U=O("stx-scroll-view",`stx-scroll-view--${Q}`,!Z&&"stx-scroll-view--hide-scrollbar",X&&"stx-scroll-view--smooth",J),_={};if($)_.height=typeof $==="number"?`${$}px`:$;if(G)_.width=typeof G==="number"?`${G}px`:G;let R=[V(_),V(E)].filter(Boolean).join("; ");return`<div id="${q}" class="${U}" ${R?`style='${R}'`:""}>${K}</div>`}function vQ(Y){let{direction:Q="horizontal",sizes:Z=[50,50],resizable:X=!0,children:$,id:G=z("split"),className:K,style:q}=Y,J=O("stx-split-view",`stx-split-view--${Q}`,X&&"stx-split-view--resizable",K),E=V(q),U=Q==="horizontal"?"width":"height";return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""}>
34
+ <span class="stx-tooltip stx-tooltip--${Z}">${F(Y)}</span>
35
+ </div>`}function wQ(Q){let{direction:Y="vertical",showScrollbar:Z=!0,smooth:X=!0,height:$,width:G,children:K,id:q=z("scroll"),className:J,style:E}=Q,U=O("stx-scroll-view",`stx-scroll-view--${Y}`,!Z&&"stx-scroll-view--hide-scrollbar",X&&"stx-scroll-view--smooth",J),_={};if($)_.height=typeof $==="number"?`${$}px`:$;if(G)_.width=typeof G==="number"?`${G}px`:G;let R=[V(_),V(E)].filter(Boolean).join("; ");return`<div id="${q}" class="${U}" ${R?`style='${R}'`:""}>${K}</div>`}function fQ(Q){let{direction:Y="horizontal",sizes:Z=[50,50],resizable:X=!0,children:$,id:G=z("split"),className:K,style:q}=Q,J=O("stx-split-view",`stx-split-view--${Y}`,X&&"stx-split-view--resizable",K),E=V(q),U=Y==="horizontal"?"width":"height";return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""}>
36
36
  <div class="stx-split-pane" style="${U}: ${Z[0]}%">${$[0]}</div>
37
37
  ${X?'<div class="stx-split-divider"></div>':""}
38
38
  <div class="stx-split-pane" style="${U}: ${Z[1]}%">${$[1]}</div>
39
- </div>`}function wQ(Y){let{items:Q,multiple:Z=!1,defaultOpen:X=[],id:$=z("accordion"),className:G,style:K}=Y,q=O("stx-accordion",G),J=V(K),E="";return Q.forEach((U,_)=>{let R=X.includes(_),F=O("stx-accordion-item",R&&"stx-accordion-item--open",U.disabled&&"stx-accordion-item--disabled");E+=`<div class="${F}" data-index="${_}">
39
+ </div>`}function SQ(Q){let{items:Y,multiple:Z=!1,defaultOpen:X=[],id:$=z("accordion"),className:G,style:K}=Q,q=O("stx-accordion",G),J=V(K),E="";return Y.forEach((U,_)=>{let R=X.includes(_),B=O("stx-accordion-item",R&&"stx-accordion-item--open",U.disabled&&"stx-accordion-item--disabled");E+=`<div class="${B}" data-index="${_}">
40
40
  <button class="stx-accordion-header" ${U.disabled?"disabled":""} aria-expanded="${R}" data-multiple="${Z}">
41
- <span class="stx-accordion-title">${B(U.title)}</span>
41
+ <span class="stx-accordion-title">${F(U.title)}</span>
42
42
  <span class="stx-accordion-icon">\u25BC</span>
43
43
  </button>
44
44
  <div class="stx-accordion-content" ${R?"":"hidden"}>
45
- ${B(U.content)}
45
+ ${F(U.content)}
46
46
  </div>
47
- </div>`}),`<div id="${$}" class="${q}" ${J?`style='${J}'`:""}>${E}</div>`}function fQ(Y){let{steps:Q,currentStep:Z,orientation:X="horizontal",id:$=z("stepper"),className:G,style:K}=Y,q=O("stx-stepper",`stx-stepper--${X}`,G),J=V(K),E="";return Q.forEach((U,_)=>{let R=O("stx-step",_<Z&&"stx-step--completed",_===Z&&"stx-step--active");if(E+=`<div class="${R}" data-step="${_}">
47
+ </div>`}),`<div id="${$}" class="${q}" ${J?`style='${J}'`:""}>${E}</div>`}function gQ(Q){let{steps:Y,currentStep:Z,orientation:X="horizontal",id:$=z("stepper"),className:G,style:K}=Q,q=O("stx-stepper",`stx-stepper--${X}`,G),J=V(K),E="";return Y.forEach((U,_)=>{let R=O("stx-step",_<Z&&"stx-step--completed",_===Z&&"stx-step--active");if(E+=`<div class="${R}" data-step="${_}">
48
48
  <div class="stx-step-indicator">
49
49
  ${_<Z?"\u2713":_+1}
50
50
  </div>
51
51
  <div class="stx-step-content">
52
- <div class="stx-step-label">${B(U.label)}</div>
53
- ${U.description?`<div class="stx-step-description">${B(U.description)}</div>`:""}
52
+ <div class="stx-step-label">${F(U.label)}</div>
53
+ ${U.description?`<div class="stx-step-description">${F(U.description)}</div>`:""}
54
54
  </div>
55
- </div>`,_<Q.length-1)E+='<div class="stx-step-connector"></div>'}),`<div id="${$}" class="${q}" ${J?`style='${J}'`:""}>${E}</div>`}function SQ(Y){let{open:Q=!1,title:Z,size:X="medium",closable:$=!0,children:G,footer:K,id:q=z("modal"),className:J,style:E}=Y,U=O("stx-modal-component",`stx-modal-component--${X}`,J),_=V(E);if(!Q)return`<div id="${q}" class="${U} stx-modal-component--hidden" ${_?`style='${_}'`:""}></div>`;let R='<div class="stx-modal-component-overlay">';if(R+='<div class="stx-modal-component-dialog">',Z||$){if(R+='<div class="stx-modal-component-header">',Z)R+=`<h3 class="stx-modal-component-title">${B(Z)}</h3>`;if($)R+='<button class="stx-modal-component-close">&times;</button>';R+="</div>"}if(R+=`<div class="stx-modal-component-body">${G}</div>`,K)R+=`<div class="stx-modal-component-footer">${K}</div>`;return R+="</div></div>",`<div id="${q}" class="${U}" ${_?`style='${_}'`:""}>${R}</div>`}function gQ(Y){let{items:Q,selectable:Z=!1,multiSelect:X=!1,emptyMessage:$="No items",id:G=z("list"),className:K,style:q}=Y,J=O("stx-list-view",Z&&"stx-list-view--selectable",X&&"stx-list-view--multi",K),E=V(q);if(Q.length===0)return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""}>
56
- <div class="stx-list-view-empty">${B($)}</div>
57
- </div>`;let U='<ul class="stx-list-view-items">';for(let _ of Q){let R=O("stx-list-view-item",_.selected&&"stx-list-view-item--selected");U+=`<li class="${R}" data-id="${B(_.id)}" ${Z?'tabindex="0"':""}>${_.content}</li>`}return U+="</ul>",`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function bQ(Y){let{columns:Q,data:Z,striped:X=!1,bordered:$=!1,hoverable:G=!0,sortBy:K,sortOrder:q,id:J=z("table"),className:E,style:U}=Y,_=O("stx-table",X&&"stx-table--striped",$&&"stx-table--bordered",G&&"stx-table--hoverable",E),R=V(U),F="<table>";F+="<thead><tr>";for(let j of Q){let T=j.key===K?`stx-table-sorted stx-table-sorted--${q}`:"",L=j.sortable?'data-sortable="true"':"",v=j.width?`style="width: ${j.width}"`:"";F+=`<th class="${T}" ${L} ${v} data-key="${B(j.key)}">${B(j.label)}${j.sortable?'<span class="stx-table-sort-icon"></span>':""}</th>`}F+="</tr></thead>",F+="<tbody>";for(let j of Z){F+="<tr>";for(let M of Q){let T=j[M.key];F+=`<td>${T!=null?B(String(T)):""}</td>`}F+="</tr>"}return F+="</tbody></table>",`<div id="${J}" class="${_}" ${R?`style='${R}'`:""}>${F}</div>`}function p(Y,Q,Z,X){let $=Q.includes(Y.key),G=Z.includes(Y.key),K=Y.children&&Y.children.length>0,J=`<div class="${O("stx-tree-node",G&&"stx-tree-node--selected",Y.disabled&&"stx-tree-node--disabled")}" data-key="${B(Y.key)}">`;if(J+='<div class="stx-tree-node-content">',K)J+=`<span class="stx-tree-toggle ${$?"stx-tree-toggle--expanded":""}">\u25B6</span>`;else J+='<span class="stx-tree-toggle-placeholder"></span>';if(X)J+=`<input type="checkbox" class="stx-tree-checkbox" ${G?"checked":""} ${Y.disabled?"disabled":""} />`;if(Y.icon)J+=`<span class="stx-tree-icon">${Y.icon}</span>`;if(J+=`<span class="stx-tree-label">${B(Y.label)}</span>`,J+="</div>",K&&$){J+='<div class="stx-tree-children">';for(let E of Y.children)J+=p(E,Q,Z,X);J+="</div>"}return J+="</div>",J}function uQ(Y){let{nodes:Q,expandedKeys:Z=[],selectedKeys:X=[],checkable:$=!1,id:G=z("tree"),className:K,style:q}=Y,J=O("stx-tree-view",$&&"stx-tree-view--checkable",K),E=V(q),U="";for(let _ of Q)U+=p(_,Z,X,$);return`<div id="${G}" class="${J}" role="tree" ${E?`style='${E}'`:""}>${U}</div>`}function yQ(Y){let{columns:Q,data:Z,pagination:X,selectable:$=!1,id:G=z("datagrid"),className:K,style:q}=Y,J=O("stx-data-grid",$&&"stx-data-grid--selectable",K),E=V(q),U='<div class="stx-data-grid-table-wrapper">';if(U+='<table class="stx-data-grid-table">',U+="<thead><tr>",$)U+='<th class="stx-data-grid-select-all"><input type="checkbox" /></th>';for(let _ of Q){let R=_.width?`style="width: ${_.width}"`:"";U+=`<th ${R}>
55
+ </div>`,_<Y.length-1)E+='<div class="stx-step-connector"></div>'}),`<div id="${$}" class="${q}" ${J?`style='${J}'`:""}>${E}</div>`}function bQ(Q){let{open:Y=!1,title:Z,size:X="medium",closable:$=!0,children:G,footer:K,id:q=z("modal"),className:J,style:E}=Q,U=O("stx-modal-component",`stx-modal-component--${X}`,J),_=V(E);if(!Y)return`<div id="${q}" class="${U} stx-modal-component--hidden" ${_?`style='${_}'`:""}></div>`;let R='<div class="stx-modal-component-overlay">';if(R+='<div class="stx-modal-component-dialog">',Z||$){if(R+='<div class="stx-modal-component-header">',Z)R+=`<h3 class="stx-modal-component-title">${F(Z)}</h3>`;if($)R+='<button class="stx-modal-component-close">&times;</button>';R+="</div>"}if(R+=`<div class="stx-modal-component-body">${G}</div>`,K)R+=`<div class="stx-modal-component-footer">${K}</div>`;return R+="</div></div>",`<div id="${q}" class="${U}" ${_?`style='${_}'`:""}>${R}</div>`}function uQ(Q){let{items:Y,selectable:Z=!1,multiSelect:X=!1,emptyMessage:$="No items",id:G=z("list"),className:K,style:q}=Q,J=O("stx-list-view",Z&&"stx-list-view--selectable",X&&"stx-list-view--multi",K),E=V(q);if(Y.length===0)return`<div id="${G}" class="${J}" ${E?`style="${E}"`:""}>
56
+ <div class="stx-list-view-empty">${F($)}</div>
57
+ </div>`;let U='<ul class="stx-list-view-items">';for(let _ of Y){let R=O("stx-list-view-item",_.selected&&"stx-list-view-item--selected");U+=`<li class="${R}" data-id="${F(_.id)}" ${Z?'tabindex="0"':""}>${_.content}</li>`}return U+="</ul>",`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function yQ(Q){let{columns:Y,data:Z,striped:X=!1,bordered:$=!1,hoverable:G=!0,sortBy:K,sortOrder:q,id:J=z("table"),className:E,style:U}=Q,_=O("stx-table",X&&"stx-table--striped",$&&"stx-table--bordered",G&&"stx-table--hoverable",E),R=V(U),B="<table>";B+="<thead><tr>";for(let j of Y){let T=j.key===K?`stx-table-sorted stx-table-sorted--${q}`:"",L=j.sortable?'data-sortable="true"':"",w=j.width?`style="width: ${j.width}"`:"";B+=`<th class="${T}" ${L} ${w} data-key="${F(j.key)}">${F(j.label)}${j.sortable?'<span class="stx-table-sort-icon"></span>':""}</th>`}B+="</tr></thead>",B+="<tbody>";for(let j of Z){B+="<tr>";for(let M of Y){let T=j[M.key];B+=`<td>${T!=null?F(String(T)):""}</td>`}B+="</tr>"}return B+="</tbody></table>",`<div id="${J}" class="${_}" ${R?`style='${R}'`:""}>${B}</div>`}function p(Q,Y,Z,X){let $=Y.includes(Q.key),G=Z.includes(Q.key),K=Q.children&&Q.children.length>0,J=`<div class="${O("stx-tree-node",G&&"stx-tree-node--selected",Q.disabled&&"stx-tree-node--disabled")}" data-key="${F(Q.key)}">`;if(J+='<div class="stx-tree-node-content">',K)J+=`<span class="stx-tree-toggle ${$?"stx-tree-toggle--expanded":""}">\u25B6</span>`;else J+='<span class="stx-tree-toggle-placeholder"></span>';if(X)J+=`<input type="checkbox" class="stx-tree-checkbox" ${G?"checked":""} ${Q.disabled?"disabled":""} />`;if(Q.icon)J+=`<span class="stx-tree-icon">${Q.icon}</span>`;if(J+=`<span class="stx-tree-label">${F(Q.label)}</span>`,J+="</div>",K&&$){J+='<div class="stx-tree-children">';for(let E of Q.children)J+=p(E,Y,Z,X);J+="</div>"}return J+="</div>",J}function hQ(Q){let{nodes:Y,expandedKeys:Z=[],selectedKeys:X=[],checkable:$=!1,id:G=z("tree"),className:K,style:q}=Q,J=O("stx-tree-view",$&&"stx-tree-view--checkable",K),E=V(q),U="";for(let _ of Y)U+=p(_,Z,X,$);return`<div id="${G}" class="${J}" role="tree" ${E?`style='${E}'`:""}>${U}</div>`}function mQ(Q){let{columns:Y,data:Z,pagination:X,selectable:$=!1,id:G=z("datagrid"),className:K,style:q}=Q,J=O("stx-data-grid",$&&"stx-data-grid--selectable",K),E=V(q),U='<div class="stx-data-grid-table-wrapper">';if(U+='<table class="stx-data-grid-table">',U+="<thead><tr>",$)U+='<th class="stx-data-grid-select-all"><input type="checkbox" /></th>';for(let _ of Y){let R=_.width?`style="width: ${_.width}"`:"";U+=`<th ${R}>
58
58
  <div class="stx-data-grid-header-cell">
59
- <span>${B(_.label)}</span>
59
+ <span>${F(_.label)}</span>
60
60
  ${_.sortable?'<button class="stx-data-grid-sort">\u21C5</button>':""}
61
61
  ${_.filterable?'<button class="stx-data-grid-filter">\u22BB</button>':""}
62
62
  </div>
63
- </th>`}U+="</tr></thead>",U+="<tbody>";for(let _ of Z){if(U+="<tr>",$)U+='<td class="stx-data-grid-select"><input type="checkbox" /></td>';for(let R of Q){let F=_[R.key];U+=`<td>${F!=null?B(String(F)):""}</td>`}U+="</tr>"}if(U+="</tbody></table></div>",X){let _=Math.ceil(X.total/X.pageSize);U+=`<div class="stx-data-grid-pagination">
63
+ </th>`}U+="</tr></thead>",U+="<tbody>";for(let _ of Z){if(U+="<tr>",$)U+='<td class="stx-data-grid-select"><input type="checkbox" /></td>';for(let R of Y){let B=_[R.key];U+=`<td>${B!=null?F(String(B)):""}</td>`}U+="</tr>"}if(U+="</tbody></table></div>",X){let _=Math.ceil(X.total/X.pageSize);U+=`<div class="stx-data-grid-pagination">
64
64
  <span class="stx-data-grid-page-info">Page ${X.page} of ${_} (${X.total} items)</span>
65
65
  <div class="stx-data-grid-page-buttons">
66
66
  <button class="stx-data-grid-page-btn" ${X.page<=1?"disabled":""}>\u25C0</button>
67
67
  <button class="stx-data-grid-page-btn" ${X.page>=_?"disabled":""}>\u25B6</button>
68
68
  </div>
69
- </div>`}return`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function hQ(Y){let{type:Q,data:Z,options:X={},width:$="100%",height:G=300,id:K=z("chart"),className:q,style:J}=Y,E=O("stx-chart",`stx-chart--${Q}`,q),U={width:typeof $==="number"?`${$}px`:$,height:typeof G==="number"?`${G}px`:G},_=[V(U),V(J)].filter(Boolean).join("; "),R=JSON.stringify({type:Q,data:Z,options:X});return`<div id="${K}" class="${E}" style="${_}" data-chart='${B(R)}'>
69
+ </div>`}return`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${U}</div>`}function cQ(Q){let{type:Y,data:Z,options:X={},width:$="100%",height:G=300,id:K=z("chart"),className:q,style:J}=Q,E=O("stx-chart",`stx-chart--${Y}`,q),U={width:typeof $==="number"?`${$}px`:$,height:typeof G==="number"?`${G}px`:G},_=[V(U),V(J)].filter(Boolean).join("; "),R=JSON.stringify({type:Y,data:Z,options:X});return`<div id="${K}" class="${E}" style="${_}" data-chart='${F(R)}'>
70
70
  <div class="stx-chart-placeholder">
71
- ${X.title?`<div class="stx-chart-title">${B(X.title)}</div>`:""}
72
- <div class="stx-chart-type">${Q.charAt(0).toUpperCase()+Q.slice(1)} Chart</div>
71
+ ${X.title?`<div class="stx-chart-title">${F(X.title)}</div>`:""}
72
+ <div class="stx-chart-type">${Y.charAt(0).toUpperCase()+Y.slice(1)} Chart</div>
73
73
  <div class="stx-chart-info">${Z.datasets.length} dataset(s), ${Z.labels.length} labels</div>
74
74
  </div>
75
- </div>`}function mQ(Y){let{value:Q="",language:Z="plaintext",theme:X="dark",lineNumbers:$=!0,readOnly:G=!1,height:K=300,tabSize:q=2,wordWrap:J=!1,id:E=z("code"),className:U,style:_}=Y,R=O("stx-code-editor",`stx-code-editor--${X}`,$&&"stx-code-editor--line-numbers",G&&"stx-code-editor--readonly",J&&"stx-code-editor--wrap",U),F={height:typeof K==="number"?`${K}px`:K},j=[V(F),V(_)].filter(Boolean).join("; "),M=Q.split(`
76
- `),T="";if($){T+='<div class="stx-code-editor-gutter">';for(let L=1;L<=M.length;L++)T+=`<div class="stx-code-editor-line-number">${L}</div>`;T+="</div>"}return T+=`<pre class="stx-code-editor-content"><code class="language-${B(Z)}">${B(Q)}</code></pre>`,`<div id="${E}" class="${R}" style="${j}" data-language="${B(Z)}" data-tab-size="${q}">${T}</div>`}function cQ(Y){let{src:Q,type:Z="video",poster:X,autoplay:$=!1,loop:G=!1,muted:K=!1,controls:q=!0,width:J,height:E,id:U=z("media"),className:_,style:R}=Y,F=O("stx-media-player",`stx-media-player--${Z}`,_),j={};if(J)j.width=typeof J==="number"?`${J}px`:J;if(E)j.height=typeof E==="number"?`${E}px`:E;let M=[V(j),V(R)].filter(Boolean).join("; "),T=[`id="${U}-media"`,`src="${B(Q)}"`,q&&"controls",$&&"autoplay",G&&"loop",K&&"muted",Z==="video"&&X&&`poster="${B(X)}"`].filter(Boolean).join(" "),L=Z==="video"?`<video ${T}>Your browser does not support the video tag.</video>`:`<audio ${T}>Your browser does not support the audio tag.</audio>`;return`<div id="${U}" class="${F}" ${M?`style='${M}'`:""}>${L}</div>`}function dQ(Y){if(Y===void 0)return"";let Q=["B","KB","MB","GB"],Z=Y,X=0;while(Z>=1024&&X<Q.length-1)Z/=1024,X++;return`${Z.toFixed(1)} ${Q[X]}`}function pQ(Y){let{files:Q,viewMode:Z="list",showHidden:X=!1,selectable:$=!0,id:G=z("files"),className:K,style:q}=Y,J=O("stx-file-explorer",`stx-file-explorer--${Z}`,K),E=V(q),U=X?Q:Q.filter((R)=>!R.name.startsWith(".")),_="";if(Z==="list"){_='<table class="stx-file-explorer-list"><thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>';for(let R of U){let F=R.icon||(R.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4"),j=R.type==="file"?dQ(R.size):"",M=R.modified?R.modified.toLocaleDateString():"";_+=`<tr class="stx-file-explorer-item ${$?"stx-file-explorer-item--selectable":""}" data-path="${B(R.path)}" data-type="${R.type}">
77
- <td><span class="stx-file-explorer-icon">${F}</span>${B(R.name)}</td>
75
+ </div>`}function dQ(Q){let{value:Y="",language:Z="plaintext",theme:X="dark",lineNumbers:$=!0,readOnly:G=!1,height:K=300,tabSize:q=2,wordWrap:J=!1,id:E=z("code"),className:U,style:_}=Q,R=O("stx-code-editor",`stx-code-editor--${X}`,$&&"stx-code-editor--line-numbers",G&&"stx-code-editor--readonly",J&&"stx-code-editor--wrap",U),B={height:typeof K==="number"?`${K}px`:K},j=[V(B),V(_)].filter(Boolean).join("; "),M=Y.split(`
76
+ `),T="";if($){T+='<div class="stx-code-editor-gutter">';for(let L=1;L<=M.length;L++)T+=`<div class="stx-code-editor-line-number">${L}</div>`;T+="</div>"}return T+=`<pre class="stx-code-editor-content"><code class="language-${F(Z)}">${F(Y)}</code></pre>`,`<div id="${E}" class="${R}" style="${j}" data-language="${F(Z)}" data-tab-size="${q}">${T}</div>`}function pQ(Q){let{src:Y,type:Z="video",poster:X,autoplay:$=!1,loop:G=!1,muted:K=!1,controls:q=!0,width:J,height:E,id:U=z("media"),className:_,style:R}=Q,B=O("stx-media-player",`stx-media-player--${Z}`,_),j={};if(J)j.width=typeof J==="number"?`${J}px`:J;if(E)j.height=typeof E==="number"?`${E}px`:E;let M=[V(j),V(R)].filter(Boolean).join("; "),T=[`id="${U}-media"`,`src="${F(Y)}"`,q&&"controls",$&&"autoplay",G&&"loop",K&&"muted",Z==="video"&&X&&`poster="${F(X)}"`].filter(Boolean).join(" "),L=Z==="video"?`<video ${T}>Your browser does not support the video tag.</video>`:`<audio ${T}>Your browser does not support the audio tag.</audio>`;return`<div id="${U}" class="${B}" ${M?`style='${M}'`:""}>${L}</div>`}function rQ(Q){if(Q===void 0)return"";let Y=["B","KB","MB","GB"],Z=Q,X=0;while(Z>=1024&&X<Y.length-1)Z/=1024,X++;return`${Z.toFixed(1)} ${Y[X]}`}function nQ(Q){let{files:Y,viewMode:Z="list",showHidden:X=!1,selectable:$=!0,id:G=z("files"),className:K,style:q}=Q,J=O("stx-file-explorer",`stx-file-explorer--${Z}`,K),E=V(q),U=X?Y:Y.filter((R)=>!R.name.startsWith(".")),_="";if(Z==="list"){_='<table class="stx-file-explorer-list"><thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>';for(let R of U){let B=R.icon||(R.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4"),j=R.type==="file"?rQ(R.size):"",M=R.modified?R.modified.toLocaleDateString():"";_+=`<tr class="stx-file-explorer-item ${$?"stx-file-explorer-item--selectable":""}" data-path="${F(R.path)}" data-type="${R.type}">
77
+ <td><span class="stx-file-explorer-icon">${B}</span>${F(R.name)}</td>
78
78
  <td>${j}</td>
79
79
  <td>${M}</td>
80
- </tr>`}_+="</tbody></table>"}else{_='<div class="stx-file-explorer-grid">';for(let R of U){let F=R.icon||(R.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");_+=`<div class="stx-file-explorer-item ${$?"stx-file-explorer-item--selectable":""}" data-path="${B(R.path)}" data-type="${R.type}">
81
- <div class="stx-file-explorer-icon">${F}</div>
82
- <div class="stx-file-explorer-name">${B(R.name)}</div>
83
- </div>`}_+="</div>"}return`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${_}</div>`}function rQ(Y){let{url:Q,width:Z="100%",height:X=400,sandbox:$=!0,allowScripts:G=!0,id:K=z("webview"),className:q,style:J}=Y,E=O("stx-webview",q),U={width:typeof Z==="number"?`${Z}px`:Z,height:typeof X==="number"?`${X}px`:X},_=[V(U),V(J)].filter(Boolean).join("; "),R=[];if($){if(R.push("allow-same-origin"),G)R.push("allow-scripts")}let F=$?`sandbox="${R.join(" ")}"`:"";return`<iframe id="${K}" class="${E}" src="${B(Q)}" style="${_}" ${F} loading="lazy" frameborder="0"></iframe>`}var nQ=["Button","TextInput","Checkbox","RadioButton","Slider","ColorPicker","DatePicker","TimePicker","Autocomplete","Label","ImageView","ProgressBar","Avatar","Badge","Chip","Card","Tooltip","Toast","ScrollView","SplitView","Accordion","Stepper","Modal","Tabs","Dropdown","ListView","Table","TreeView","DataGrid","Chart","Rating","CodeEditor","MediaPlayer","FileExplorer","WebView"],oQ=`
80
+ </tr>`}_+="</tbody></table>"}else{_='<div class="stx-file-explorer-grid">';for(let R of U){let B=R.icon||(R.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");_+=`<div class="stx-file-explorer-item ${$?"stx-file-explorer-item--selectable":""}" data-path="${F(R.path)}" data-type="${R.type}">
81
+ <div class="stx-file-explorer-icon">${B}</div>
82
+ <div class="stx-file-explorer-name">${F(R.name)}</div>
83
+ </div>`}_+="</div>"}return`<div id="${G}" class="${J}" ${E?`style='${E}'`:""}>${_}</div>`}function oQ(Q){let{url:Y,width:Z="100%",height:X=400,sandbox:$=!0,allowScripts:G=!0,id:K=z("webview"),className:q,style:J}=Q,E=O("stx-webview",q),U={width:typeof Z==="number"?`${Z}px`:Z,height:typeof X==="number"?`${X}px`:X},_=[V(U),V(J)].filter(Boolean).join("; "),R=[];if($){if(R.push("allow-same-origin"),G)R.push("allow-scripts")}let B=$?`sandbox="${R.join(" ")}"`:"";return`<iframe id="${K}" class="${E}" src="${F(Y)}" style="${_}" ${B} loading="lazy" frameborder="0"></iframe>`}var lQ=["Button","TextInput","Checkbox","RadioButton","Slider","ColorPicker","DatePicker","TimePicker","Autocomplete","Label","ImageView","ProgressBar","Avatar","Badge","Chip","Card","Tooltip","Toast","ScrollView","SplitView","Accordion","Stepper","Modal","Tabs","Dropdown","ListView","Table","TreeView","DataGrid","Chart","Rating","CodeEditor","MediaPlayer","FileExplorer","WebView"],aQ=`
84
84
  /* Button */
85
85
  .stx-button {
86
86
  display: inline-flex;
@@ -437,7 +437,7 @@ import{$ as dZ,$a as d0,A as OZ,Aa as V0,B as zZ,Ba as O0,C as MZ,Ca as z0,D as
437
437
  .stx-chip--warning { background: #3a2a1a; }
438
438
  .stx-chip--error { background: #3a1a1a; }
439
439
  }
440
- `;import r from"process";function lQ(){if(r.platform)return r.platform;return"unknown"}function o(){if(typeof window<"u"&&window.craft?.tray)return!0;return!1}function l(Y,Q){if(Y.type==="separator")return{id:`sep-${Q}`,label:"",type:"separator"};let Z={id:`item-${Q}-${Y.label.replace(/\s+/g,"-").toLowerCase()}`,label:Y.label,type:Y.type||"normal",enabled:Y.enabled!==!1};if(Y.accelerator)Z.shortcut=Y.accelerator;if(Y.type==="checkbox")Z.checked=Y.checked||!1;if(Y.type==="submenu"&&Y.submenu)Z.submenu=Y.submenu.map((X,$)=>l(X,$));return Z}function g(Y){return Y.map((Q,Z)=>l(Q,Z))}function a(Y,Q=0){if(Y.type==="separator")return'<hr class="stx-tray-separator" />';let Z=" ".repeat(Q),X=Y.enabled===!1?"disabled":"",$=Y.checked?"\u2713 ":"",G=Y.accelerator?`<span class="accelerator">${Y.accelerator}</span>`:"",K=`${Z}<div class="stx-tray-item ${X}" data-action="${Y.label}">`;if(K+=`<span class="label">${$}${Y.label}</span>${G}`,Y.type==="submenu"&&Y.submenu){K+='<span class="arrow">\u25B8</span>',K+='<div class="stx-tray-submenu">';for(let q of Y.submenu)K+=a(q,Q+1);K+="</div>"}return K+="</div>",K}function aQ(Y){let Q='<div class="stx-tray-menu">';for(let Z of Y)Q+=a(Z);return Q+="</div>",Q}var A=new Map;function iQ(){return`tray-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var n=!1;function sQ(){if(n||typeof window>"u")return;window.addEventListener("craft:tray:menu",(Y)=>{let{action:Q}=Y.detail;for(let Z of A.values()){let X=Z.handlers.get(Q);if(X){X();break}}}),n=!0}async function i(Y={}){let Q=iQ(),Z=lQ(),X=o(),$={icon:Y.icon||"",tooltip:Y.tooltip||"stx Application",menu:Y.menu||[],visible:!0},G=new Map;for(let q of Y.menu||[]){if(q.type!=="separator"&&q.onClick)G.set(q.label,q.onClick);if(q.type==="submenu"&&q.submenu){for(let J of q.submenu)if(J.type!=="separator"&&J.onClick)G.set(J.label,J.onClick)}}if(A.set(Q,{state:$,handlers:G}),X){sQ();let q=window;try{if($.tooltip)await q.craft.tray.setTitle({title:$.tooltip}),await q.craft.tray.setTooltip({tooltip:$.tooltip});if($.icon)await q.craft.tray.setIcon({icon:$.icon});let J=g($.menu);await q.craft.tray.setMenu({items:J}),console.log(`[stx-tray] Native tray created for ${Z}`)}catch(J){console.warn("[stx-tray] Failed to create native tray:",J)}}else console.log("[stx-tray] Created simulated tray (not in Craft window)"),console.log(`[stx-tray] ID: ${Q}`),console.log(`[stx-tray] Tooltip: ${$.tooltip}`),console.log(`[stx-tray] Menu items: ${$.menu.length}`);return{id:Q,setIcon:(q)=>{if($.icon=q,X)window.craft.tray.setIcon({icon:q}).catch((E)=>{console.warn("[stx-tray] Failed to set icon:",E)});console.log(`[stx-tray:${Q}] Icon updated`)},setTooltip:(q)=>{if($.tooltip=q,X)window.craft.tray.setTooltip({tooltip:q}).catch((E)=>{console.warn("[stx-tray] Failed to set tooltip:",E)});console.log(`[stx-tray:${Q}] Tooltip: ${q}`)},setMenu:(q)=>{$.menu=q,G.clear();for(let J of q){if(J.type!=="separator"&&J.onClick)G.set(J.label,J.onClick);if(J.type==="submenu"&&J.submenu){for(let E of J.submenu)if(E.type!=="separator"&&E.onClick)G.set(E.label,E.onClick)}}if(X){let J=window,E=g(q);J.craft.tray.setMenu({items:E}).catch((U)=>{console.warn("[stx-tray] Failed to set menu:",U)})}console.log(`[stx-tray:${Q}] Menu updated (${q.length} items)`)},destroy:()=>{if($.visible=!1,A.delete(Q),X)window.craft.tray.destroy?.().catch((J)=>{console.warn("[stx-tray] Failed to destroy tray:",J)});console.log(`[stx-tray:${Q}] Destroyed`)}}}var tQ=i;function eQ(){return Array.from(A.keys())}function QY(Y){let Q=A.get(Y);if(!Q)return null;let Z=o();return{id:Y,setIcon:(X)=>{if(Q.state.icon=X,Z)window.craft.tray.setIcon({icon:X}).catch(()=>{})},setTooltip:(X)=>{if(Q.state.tooltip=X,Z)window.craft.tray.setTooltip({tooltip:X}).catch(()=>{})},setMenu:(X)=>{if(Q.state.menu=X,Z){let $=window,G=g(X);$.craft.tray.setMenu({items:G}).catch(()=>{})}},destroy:()=>{if(A.delete(Y),Z)window.craft.tray.destroy?.().catch(()=>{})}}}function YY(Y,Q){let Z=A.get(Y);if(!Z)return!1;let X=Z.handlers.get(Q);if(X)return X(),!0;return!1}function ZY(Y){let Q=A.get(Y);if(!Q)return null;return aQ(Q.state.menu)}function XY(){return`
440
+ `;import r from"process";function iQ(){if(r.platform)return r.platform;return"unknown"}function o(){if(typeof window<"u"&&window.craft?.tray)return!0;return!1}function l(Q,Y){if(Q.type==="separator")return{id:`sep-${Y}`,label:"",type:"separator"};let Z={id:`item-${Y}-${Q.label.replace(/\s+/g,"-").toLowerCase()}`,label:Q.label,type:Q.type||"normal",enabled:Q.enabled!==!1};if(Q.accelerator)Z.shortcut=Q.accelerator;if(Q.type==="checkbox")Z.checked=Q.checked||!1;if(Q.type==="submenu"&&Q.submenu)Z.submenu=Q.submenu.map((X,$)=>l(X,$));return Z}function b(Q){return Q.map((Y,Z)=>l(Y,Z))}function a(Q,Y=0){if(Q.type==="separator")return'<hr class="stx-tray-separator" />';let Z=" ".repeat(Y),X=Q.enabled===!1?"disabled":"",$=Q.checked?"\u2713 ":"",G=Q.accelerator?`<span class="accelerator">${Q.accelerator}</span>`:"",K=`${Z}<div class="stx-tray-item ${X}" data-action="${Q.label}">`;if(K+=`<span class="label">${$}${Q.label}</span>${G}`,Q.type==="submenu"&&Q.submenu){K+='<span class="arrow">\u25B8</span>',K+='<div class="stx-tray-submenu">';for(let q of Q.submenu)K+=a(q,Y+1);K+="</div>"}return K+="</div>",K}function sQ(Q){let Y='<div class="stx-tray-menu">';for(let Z of Q)Y+=a(Z);return Y+="</div>",Y}var A=new Map;function tQ(){return`tray-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var n=!1;function eQ(){if(n||typeof window>"u")return;window.addEventListener("craft:tray:menu",(Q)=>{let{action:Y}=Q.detail;for(let Z of A.values()){let X=Z.handlers.get(Y);if(X){X();break}}}),n=!0}async function i(Q={}){let Y=tQ(),Z=iQ(),X=o(),$={icon:Q.icon||"",tooltip:Q.tooltip||"stx Application",menu:Q.menu||[],visible:!0},G=new Map;for(let q of Q.menu||[]){if(q.type!=="separator"&&q.onClick)G.set(q.label,q.onClick);if(q.type==="submenu"&&q.submenu){for(let J of q.submenu)if(J.type!=="separator"&&J.onClick)G.set(J.label,J.onClick)}}if(A.set(Y,{state:$,handlers:G}),X){eQ();let q=window;try{if($.tooltip)await q.craft.tray.setTitle({title:$.tooltip}),await q.craft.tray.setTooltip({tooltip:$.tooltip});if($.icon)await q.craft.tray.setIcon({icon:$.icon});let J=b($.menu);await q.craft.tray.setMenu({items:J}),console.log(`[stx-tray] Native tray created for ${Z}`)}catch(J){console.warn("[stx-tray] Failed to create native tray:",J)}}else console.log("[stx-tray] Created simulated tray (not in Craft window)"),console.log(`[stx-tray] ID: ${Y}`),console.log(`[stx-tray] Tooltip: ${$.tooltip}`),console.log(`[stx-tray] Menu items: ${$.menu.length}`);return{id:Y,setIcon:(q)=>{if($.icon=q,X)window.craft.tray.setIcon({icon:q}).catch((E)=>{console.warn("[stx-tray] Failed to set icon:",E)});console.log(`[stx-tray:${Y}] Icon updated`)},setTooltip:(q)=>{if($.tooltip=q,X)window.craft.tray.setTooltip({tooltip:q}).catch((E)=>{console.warn("[stx-tray] Failed to set tooltip:",E)});console.log(`[stx-tray:${Y}] Tooltip: ${q}`)},setMenu:(q)=>{$.menu=q,G.clear();for(let J of q){if(J.type!=="separator"&&J.onClick)G.set(J.label,J.onClick);if(J.type==="submenu"&&J.submenu){for(let E of J.submenu)if(E.type!=="separator"&&E.onClick)G.set(E.label,E.onClick)}}if(X){let J=window,E=b(q);J.craft.tray.setMenu({items:E}).catch((U)=>{console.warn("[stx-tray] Failed to set menu:",U)})}console.log(`[stx-tray:${Y}] Menu updated (${q.length} items)`)},destroy:()=>{if($.visible=!1,A.delete(Y),X)window.craft.tray.destroy?.().catch((J)=>{console.warn("[stx-tray] Failed to destroy tray:",J)});console.log(`[stx-tray:${Y}] Destroyed`)}}}var QY=i;function YY(){return Array.from(A.keys())}function ZY(Q){let Y=A.get(Q);if(!Y)return null;let Z=o();return{id:Q,setIcon:(X)=>{if(Y.state.icon=X,Z)window.craft.tray.setIcon({icon:X}).catch(()=>{})},setTooltip:(X)=>{if(Y.state.tooltip=X,Z)window.craft.tray.setTooltip({tooltip:X}).catch(()=>{})},setMenu:(X)=>{if(Y.state.menu=X,Z){let $=window,G=b(X);$.craft.tray.setMenu({items:G}).catch(()=>{})}},destroy:()=>{if(A.delete(Q),Z)window.craft.tray.destroy?.().catch(()=>{})}}}function XY(Q,Y){let Z=A.get(Q);if(!Z)return!1;let X=Z.handlers.get(Y);if(X)return X(),!0;return!1}function $Y(Q){let Y=A.get(Q);if(!Y)return null;return sQ(Y.state.menu)}function JY(){return`
441
441
  // STX Desktop Tray Bridge
442
442
  // Provides convenient wrappers around window.craft.tray APIs
443
443
  window.stxTray = {
@@ -450,7 +450,7 @@ window.stxTray = {
450
450
  // Check if tray is available
451
451
  isAvailable: () => typeof window.craft?.tray !== 'undefined',
452
452
  };
453
- `}var $Y=`
453
+ `}var GY=`
454
454
  .stx-tray-menu {
455
455
  background: #2d2d2d;
456
456
  border-radius: 8px;
@@ -516,7 +516,7 @@ window.stxTray = {
516
516
  .stx-tray-item:hover > .stx-tray-submenu {
517
517
  display: block;
518
518
  }
519
- `;import W from"process";import{existsSync as JY}from"fs";import{dirname as GY,join as qY}from"path";import{craftBinaryNotFoundMessage as s,resolveCraftBinary as RY}from"craft-native";var I={};function KY(Y){I={...I,...Y}}function UY(){return{...I}}function EY(){I={}}function b(Y){if(!Y.sidebarConfig)return;let Q={...Y.sidebarConfig};if(Q.variant==="desktop")Q.material=Q.material??"sidebar",Q.backgroundEffect=Q.backgroundEffect??"shimmer",Q.allowsVibrancy=Q.allowsVibrancy??!0;return Q}function w(){let Y=GY(W.execPath),Q=Y.includes(".app/Contents/MacOS")?qY(Y,"craft"):void 0,Z=[W.env.CRAFT_BINARY_PATH,I.craftBinaryPath,...I.additionalSearchPaths||[],Q];for(let X of Z)if(X&&JY(X))return X;return RY()}var D=new Map;function u(Y){let Q=D.get(Y);if(!Q||Q.closed)return;Q.closed=!0;for(let Z of Q.closeListeners??[])try{Z()}catch(X){console.warn(`[stx/desktop] window ${Y} close listener threw:`,X)}Q.closeListeners?.clear()}var _Y=50;async function y(Y,Q){let Z=Q.show().then(()=>({failed:!1}),($)=>({failed:!0,error:$})),X=await Promise.race([Z,new Promise(($)=>setTimeout(()=>$(null),_Y))]);if(X?.failed)throw X.error;Z.then(()=>u(Y))}function BY(){return Array.from(D.keys())}function FY(Y){let Q=D.get(Y);if(!Q)return null;return f(Y,Q.app)}function jY(){for(let[Y,Q]of D)try{Q.app?.close?.()}catch(Z){console.warn(`Failed to close window ${Y}:`,Z)}D.clear()}function f(Y,Q){return{id:Y,show:()=>{console.log(`[stx/desktop] Window ${Y} shown`)},hide:()=>{console.log("[stx/desktop] To hide window, use window.craft.window.hide() from inside the webview")},close:()=>{let Z=D.get(Y);if(Z?.app)Z.app.close(),u(Y),D.delete(Y),console.log(`[stx/desktop] Window ${Y} closed`)},onClosed:(Z)=>{let X=D.get(Y);if(!X||X.closed)return queueMicrotask(Z),()=>{};return X.closeListeners??=new Set,X.closeListeners.add(Z),()=>X.closeListeners?.delete(Z)},focus:()=>{console.log("[stx/desktop] To focus window, use window.craft.window.focus() from inside the webview")},minimize:()=>{console.log("[stx/desktop] To minimize window, use window.craft.window.minimize() from inside the webview")},maximize:()=>{console.log("[stx/desktop] To maximize window, use window.craft.window.maximize() from inside the webview")},restore:()=>{console.log("[stx/desktop] To restore window, use window.craft.window.show() from inside the webview")},setTitle:(Z)=>{console.log(`[stx/desktop] To set title, use window.craft.window.setTitle({ title: "${Z}" }) from inside the webview`)},loadURL:(Z)=>{console.log(`[stx/desktop] To navigate, use window.location.href = "${Z}" from inside the webview`)},reload:()=>{console.log("[stx/desktop] To reload, use window.craft.window.reload() from inside the webview")}}}function h(Y,Q={}){let Z=["--url",Y,"--title",Q.title||"stx Desktop","--width",String(Q.width??1200),"--height",String(Q.height??800)];if(Q.darkMode)Z.push("--dark");if(Q.hotReload)Z.push("--hot-reload");if(Q.resizable===!1)Z.push("--no-resize");if(Q.frameless)Z.push("--frameless");if(Q.alwaysOnTop)Z.push("--always-on-top");if(Q.titlebarHidden)Z.push("--titlebar-hidden");if(Q.systemTray)Z.push("--system-tray");if(Q.hideDockIcon)Z.push("--hide-dock-icon");if(Q.devTools===!1)Z.push("--no-devtools");if(Q.nativeSidebar)Z.push("--native-sidebar");if(Q.sidebarWidth!==void 0)Z.push("--sidebar-width",String(Q.sidebarWidth));let X=b(Q);if(X)Z.push("--sidebar-config",JSON.stringify(X));return Z}async function VY(Y,Q={}){let Z=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,X=w();try{let{createApp:$}=await import("craft-native"),G=$({url:Y,craftPath:X,window:{title:Q.title||"stx Desktop",width:Q.width??1200,height:Q.height??800,darkMode:Q.darkMode??!1,hotReload:Q.hotReload??!1,resizable:Q.resizable??!0,frameless:Q.frameless??!1,alwaysOnTop:Q.alwaysOnTop??!1,titlebarHidden:Q.titlebarHidden??!1,systemTray:Q.systemTray??!1,hideDockIcon:Q.hideDockIcon??!1,devTools:Q.devTools??!1,nativeSidebar:Q.nativeSidebar??!1,sidebarWidth:Q.sidebarWidth,sidebarConfig:b(Q)}});return D.set(Z,{app:G,url:Y,options:Q}),await y(Z,G),f(Z,G)}catch{try{let{spawn:$}=await import("child_process"),G=$(X,h(Y,Q),{stdio:"inherit"});G.on("error",(q)=>{console.error(q.code==="ENOENT"?s(X):`craft child error: ${q.message}`)});let K={close:()=>G.kill()};return D.set(Z,{app:K,url:Y,options:Q}),G.on("exit",()=>u(Z)),f(Z,K)}catch($){return console.error("Failed to spawn craft binary:",$.message),null}}}async function OY(Y,Q={}){let Z=`http://localhost:${Y}/`;if(W.env.NODE_ENV==="test"||W.env.BUN_TEST)return console.warn("\u26A0 Skipping native window in test environment"),console.log("(Skipping browser fallback in test environment)"),!1;try{let{createApp:$}=await import("craft-native");console.log("\u26A1 Opening native window via craft-native\u2026");let G=!Q.nativeSidebar,K=b(Q),q=$({url:Z,craftPath:w(),window:{title:Q.title||"stx Development",width:Q.width||1400,height:Q.height||900,resizable:!0,systemTray:G,darkMode:Q.darkMode??!0,hotReload:Q.hotReload??!0,devTools:!0,titlebarHidden:Q.titlebarHidden??!1,nativeSidebar:Q.nativeSidebar??!1,sidebarWidth:Q.sidebarWidth??260,sidebarConfig:K}}),J=`dev-window-${Y}`;return D.set(J,{app:q,url:Z,options:Q}),await y(J,q),console.log(`\u2713 Native window opened at ${Z}`),!0}catch{let $=w();try{console.log(`\u26A1 Opening native window via craft binary (${$})\u2026`);let{spawn:G}=await import("child_process"),K=G($,h(Z,{title:"stx Development",width:1400,height:900,hotReload:!0,...Q}),{stdio:"inherit"});K.on("exit",()=>W.exit(0)),K.on("error",(J)=>{console.warn(J.code==="ENOENT"?s($):`craft child error: ${J.message}`)});let q=`dev-window-${Y}`;return D.set(q,{app:{close:()=>K.kill()},url:Z,options:Q}),console.log(`\u2713 Native window opened at ${Z}`),!0}catch(G){console.warn("\u26A0 Could not spawn craft binary:",G.message)}if(W.env.NODE_ENV==="test"||W.env.BUN_TEST)return console.log("(Skipping browser fallback in test environment)"),!1;console.log("\uD83D\uDCF1 Opening in browser instead\u2026");try{let{spawn:G}=await import("child_process"),K=W.platform;return G(K==="darwin"?"open":K==="win32"?"cmd":"xdg-open",K==="win32"?["/c","start",Z]:[Z],{detached:!0,stdio:"ignore"}).unref(),console.log(`\u2713 Browser opened at ${Z}`),!0}catch(G){return console.error("Could not open browser:",G),console.log(`Please open manually: ${Z}`),!1}}}async function zY(Y,Q={}){let{title:Z="stx Desktop",width:X=1200,height:$=800,darkMode:G=!1,hotReload:K=!1,resizable:q=!0,frameless:J=!1,alwaysOnTop:E=!1}=Q;try{let{createApp:U}=await import("craft-native"),_=w(),R=U({html:Y,craftPath:_,window:{title:Z,width:X,height:$,darkMode:G,hotReload:K,resizable:q,frameless:J,alwaysOnTop:E}}),F=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return D.set(F,{app:R,url:"html-content",options:Q}),await y(F,R),f(F,R)}catch(U){return console.error("Failed to create window with HTML:",U),null}}function MY(){try{return N.resolve("craft-native"),!0}catch{return!1}}function TY(){return`
519
+ `;import W from"process";import{existsSync as qY}from"fs";import{dirname as RY,join as KY}from"path";import{craftBinaryNotFoundMessage as s,resolveCraftBinary as UY}from"craft-native";var x={};function EY(Q){x={...x,...Q}}function _Y(){return{...x}}function FY(){x={}}function u(Q){if(!Q.sidebarConfig)return;let Y={...Q.sidebarConfig};if(Y.variant==="desktop")Y.material=Y.material??"sidebar",Y.backgroundEffect=Y.backgroundEffect??"shimmer",Y.allowsVibrancy=Y.allowsVibrancy??!0;return Y}function f(){let Q=RY(W.execPath),Y=Q.includes(".app/Contents/MacOS")?KY(Q,"craft"):void 0,Z=[W.env.CRAFT_BINARY_PATH,x.craftBinaryPath,...x.additionalSearchPaths||[],Y];for(let X of Z)if(X&&qY(X))return X;return UY()}var D=new Map;function y(Q){let Y=D.get(Q);if(!Y||Y.closed)return;Y.closed=!0;for(let Z of Y.closeListeners??[])try{Z()}catch(X){console.warn(`[stx/desktop] window ${Q} close listener threw:`,X)}Y.closeListeners?.clear()}var BY=50;async function h(Q,Y){let Z=Y.show().then(()=>({failed:!1}),($)=>({failed:!0,error:$})),X=await Promise.race([Z,new Promise(($)=>setTimeout(()=>$(null),BY))]);if(X?.failed)throw X.error;Z.then(()=>y(Q))}function jY(){return Array.from(D.keys())}function VY(Q){let Y=D.get(Q);if(!Y)return null;return S(Q,Y.app)}function OY(){for(let[Q,Y]of D)try{Y.app?.close?.()}catch(Z){console.warn(`Failed to close window ${Q}:`,Z)}D.clear()}function S(Q,Y){return{id:Q,show:()=>{console.log(`[stx/desktop] Window ${Q} shown`)},hide:()=>{console.log("[stx/desktop] To hide window, use window.craft.window.hide() from inside the webview")},close:()=>{let Z=D.get(Q);if(Z?.app)Z.app.close(),y(Q),D.delete(Q),console.log(`[stx/desktop] Window ${Q} closed`)},onClosed:(Z)=>{let X=D.get(Q);if(!X||X.closed)return queueMicrotask(Z),()=>{};return X.closeListeners??=new Set,X.closeListeners.add(Z),()=>X.closeListeners?.delete(Z)},focus:()=>{console.log("[stx/desktop] To focus window, use window.craft.window.focus() from inside the webview")},minimize:()=>{console.log("[stx/desktop] To minimize window, use window.craft.window.minimize() from inside the webview")},maximize:()=>{console.log("[stx/desktop] To maximize window, use window.craft.window.maximize() from inside the webview")},restore:()=>{console.log("[stx/desktop] To restore window, use window.craft.window.show() from inside the webview")},setTitle:(Z)=>{console.log(`[stx/desktop] To set title, use window.craft.window.setTitle({ title: "${Z}" }) from inside the webview`)},loadURL:(Z)=>{console.log(`[stx/desktop] To navigate, use window.location.href = "${Z}" from inside the webview`)},reload:()=>{console.log("[stx/desktop] To reload, use window.craft.window.reload() from inside the webview")}}}function m(Q,Y={}){let Z=["--url",Q,"--title",Y.title||"stx Desktop","--width",String(Y.width??1200),"--height",String(Y.height??800)];if(Y.darkMode)Z.push("--dark");if(Y.hotReload)Z.push("--hot-reload");if(Y.resizable===!1)Z.push("--no-resize");if(Y.frameless)Z.push("--frameless");if(Y.alwaysOnTop)Z.push("--always-on-top");if(Y.titlebarHidden)Z.push("--titlebar-hidden");if(Y.systemTray)Z.push("--system-tray");if(Y.hideDockIcon)Z.push("--hide-dock-icon");if(Y.devTools===!1)Z.push("--no-devtools");if(Y.nativeSidebar)Z.push("--native-sidebar");if(Y.sidebarWidth!==void 0)Z.push("--sidebar-width",String(Y.sidebarWidth));let X=u(Y);if(X)Z.push("--sidebar-config",JSON.stringify(X));return Z}async function zY(Q,Y={}){let Z=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,X=f();try{let{createApp:$}=await import("craft-native"),G=$({url:Q,craftPath:X,window:{title:Y.title||"stx Desktop",width:Y.width??1200,height:Y.height??800,darkMode:Y.darkMode??!1,hotReload:Y.hotReload??!1,resizable:Y.resizable??!0,frameless:Y.frameless??!1,alwaysOnTop:Y.alwaysOnTop??!1,titlebarHidden:Y.titlebarHidden??!1,systemTray:Y.systemTray??!1,hideDockIcon:Y.hideDockIcon??!1,devTools:Y.devTools??!1,nativeSidebar:Y.nativeSidebar??!1,sidebarWidth:Y.sidebarWidth,sidebarConfig:u(Y)}});return D.set(Z,{app:G,url:Q,options:Y}),await h(Z,G),S(Z,G)}catch{try{let{spawn:$}=await import("child_process"),G=$(X,m(Q,Y),{stdio:"inherit"});G.on("error",(q)=>{console.error(q.code==="ENOENT"?s(X):`craft child error: ${q.message}`)});let K={close:()=>G.kill()};return D.set(Z,{app:K,url:Q,options:Y}),G.on("exit",()=>y(Z)),S(Z,K)}catch($){return console.error("Failed to spawn craft binary:",$.message),null}}}async function MY(Q,Y={}){let Z=`http://localhost:${Q}/`;if(W.env.NODE_ENV==="test"||W.env.BUN_TEST)return console.warn("\u26A0 Skipping native window in test environment"),console.log("(Skipping browser fallback in test environment)"),!1;try{let{createApp:$}=await import("craft-native");console.log("\u26A1 Opening native window via craft-native\u2026");let G=!Y.nativeSidebar,K=u(Y),q=$({url:Z,craftPath:f(),window:{title:Y.title||"stx Development",width:Y.width||1400,height:Y.height||900,resizable:!0,systemTray:G,darkMode:Y.darkMode??!0,hotReload:Y.hotReload??!0,devTools:!0,titlebarHidden:Y.titlebarHidden??!1,nativeSidebar:Y.nativeSidebar??!1,sidebarWidth:Y.sidebarWidth??260,sidebarConfig:K}}),J=`dev-window-${Q}`;return D.set(J,{app:q,url:Z,options:Y}),await h(J,q),console.log(`\u2713 Native window opened at ${Z}`),!0}catch{let $=f();try{console.log(`\u26A1 Opening native window via craft binary (${$})\u2026`);let{spawn:G}=await import("child_process"),K=G($,m(Z,{title:"stx Development",width:1400,height:900,hotReload:!0,...Y}),{stdio:"inherit"});K.on("exit",()=>W.exit(0)),K.on("error",(J)=>{console.warn(J.code==="ENOENT"?s($):`craft child error: ${J.message}`)});let q=`dev-window-${Q}`;return D.set(q,{app:{close:()=>K.kill()},url:Z,options:Y}),console.log(`\u2713 Native window opened at ${Z}`),!0}catch(G){console.warn("\u26A0 Could not spawn craft binary:",G.message)}if(W.env.NODE_ENV==="test"||W.env.BUN_TEST)return console.log("(Skipping browser fallback in test environment)"),!1;console.log("\uD83D\uDCF1 Opening in browser instead\u2026");try{let{spawn:G}=await import("child_process"),K=W.platform;return G(K==="darwin"?"open":K==="win32"?"cmd":"xdg-open",K==="win32"?["/c","start",Z]:[Z],{detached:!0,stdio:"ignore"}).unref(),console.log(`\u2713 Browser opened at ${Z}`),!0}catch(G){return console.error("Could not open browser:",G),console.log(`Please open manually: ${Z}`),!1}}}async function TY(Q,Y={}){let{title:Z="stx Desktop",width:X=1200,height:$=800,darkMode:G=!1,hotReload:K=!1,resizable:q=!0,frameless:J=!1,alwaysOnTop:E=!1}=Y;try{let{createApp:U}=await import("craft-native"),_=f(),R=U({html:Q,craftPath:_,window:{title:Z,width:X,height:$,darkMode:G,hotReload:K,resizable:q,frameless:J,alwaysOnTop:E}}),B=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return D.set(B,{app:R,url:"html-content",options:Y}),await h(B,R),S(B,R)}catch(U){return console.error("Failed to create window with HTML:",U),null}}function LY(){try{return N.resolve("craft-native"),!0}catch{return!1}}function DY(){return`
520
520
  // STX Desktop Window Bridge
521
521
  // Provides convenient wrappers around window.craft APIs
522
522
  window.stxWindow = {
@@ -557,7 +557,7 @@ window.stxWindow = {
557
557
 
558
558
  // Expose as global for backwards compatibility
559
559
  window.desktop = window.stxWindow;
560
- `}import{pack as LY,packageApp as DY}from"craft-native";import{craftBinaryNotFoundMessage as PY,resolveCraftBinary as WY}from"craft-native";import{AutoUpdater as t,generateUpdateManifest as e}from"craft-native";var QQ="update.json";function YQ(Y,Q){return`https://github.com/${Y}/releases/latest/download/${Q}`}function ZQ(Y,Q,Z){return`https://github.com/${Y}/releases/download/${Q}/${Z}`}function AY(Y){let{repository:Q,manifestAsset:Z=QQ,...X}=Y;return new t({...X,updateUrl:YQ(Q,Z)})}function NY(Y){let Q=Y.tag??`v${Y.version}`,Z={};for(let[X,$]of Object.entries(Y.artifacts)){if(!$)continue;Z[X]={path:$,url:ZQ(Y.repository,Q,$.split("/").pop())}}return e({version:Y.version,releaseNotes:Y.releaseNotes,platforms:Z})}import{existsSync as m,mkdirSync as IY,readFileSync as xY,watch as kY,writeFileSync as CY}from"fs";import{homedir as HY,platform as vY}from"os";import{dirname as wY,join as H}from"path";function fY(Y){let Q=vY(),Z=HY();switch(Q){case"darwin":return H(Z,"Library","Application Support",Y);case"win32":return H(process.env.APPDATA||H(Z,"AppData","Roaming"),Y);default:return H(Z,".config",Y)}}class XQ{_defaults;_data;_path;_changeHandlers=new Map;_anyChangeHandlers=new Set;_watcher=null;_writeTimer=null;_writing=!1;constructor(Y){this._defaults={...Y.defaults};let Q=Y.path?wY(Y.path):fY(Y.name);if(this._path=Y.path||H(Q,"preferences.json"),!m(Q))IY(Q,{recursive:!0});if(this._data=this._load(),Y.watch!==!1)this._setupWatcher()}get path(){return this._path}get(Y){if(Y in this._data)return this._data[Y];return this._defaults[Y]}set(Y,Q){let Z=this.get(Y);if(JSON.stringify(Z)===JSON.stringify(Q))return;this._data[Y]=Q,this._scheduleSave(),this._notifyChange(Y,Q,Z)}getAll(){return{...this._defaults,...this._data}}has(Y){return Y in this._data}delete(Y){if(!(Y in this._data))return;let Q=this._data[Y];delete this._data[Y],this._scheduleSave(),this._notifyChange(Y,this._defaults[Y],Q)}reset(){let Y={...this._data};this._data={},this._save();for(let Q of Object.keys(Y)){let Z=this._defaults[Q];this._notifyChange(Q,Z,Y[Q])}}onChange(Y,Q){let Z=Y;if(!this._changeHandlers.has(Z))this._changeHandlers.set(Z,new Set);return this._changeHandlers.get(Z).add(Q),()=>{this._changeHandlers.get(Z)?.delete(Q)}}onAnyChange(Y){return this._anyChangeHandlers.add(Y),()=>{this._anyChangeHandlers.delete(Y)}}close(){if(this._watcher)this._watcher.close(),this._watcher=null;if(this._writeTimer)clearTimeout(this._writeTimer),this._writeTimer=null,this._save()}_load(){try{if(m(this._path)){let Y=xY(this._path,"utf-8");return JSON.parse(Y)}}catch{}return{}}_save(){this._writing=!0;try{let Y=JSON.stringify({...this._defaults,...this._data},null,2);CY(this._path,Y,"utf-8")}catch(Y){console.error(`Failed to save preferences to ${this._path}:`,Y)}finally{setTimeout(()=>{this._writing=!1},100)}}_scheduleSave(){if(this._writeTimer)clearTimeout(this._writeTimer);this._writeTimer=setTimeout(()=>{this._writeTimer=null,this._save()},50)}_setupWatcher(){try{if(!m(this._path))this._save();this._watcher=kY(this._path,()=>{if(this._writing)return;let Y=this._load(),Q={...this._data};this._data=Y;let Z=new Set([...Object.keys(Q),...Object.keys(Y)]);for(let X of Z){let $=X in Q?Q[X]:this._defaults[X],G=X in Y?Y[X]:this._defaults[X];if(JSON.stringify($)!==JSON.stringify(G))this._notifyChange(X,G,$)}})}catch{}}_notifyChange(Y,Q,Z){let X=this._changeHandlers.get(Y);if(X)for(let $ of X)try{$(Q,Z)}catch{}for(let $ of this._anyChangeHandlers)try{$(Y,Q,Z)}catch{}}}function SY(Y){return new XQ(Y)}import{existsSync as x,mkdirSync as $Q,readFileSync as gY,unlinkSync as JQ,writeFileSync as GQ}from"fs";import{homedir as S,platform as qQ}from"os";import{join as k}from"path";function RQ(Y){let Q=Y.toLowerCase().replace(/[^a-z0-9]/g,"-");return k(S(),"Library","LaunchAgents",`com.${Q}.plist`)}function KQ(Y){let Q=process.env.XDG_CONFIG_HOME||k(S(),".config");return k(Q,"autostart",`${Y.toLowerCase()}.desktop`)}async function bY(Y,Q){let Z=Q.appName||"StxApp",X=RQ(Z),$=k(S(),"Library","LaunchAgents");if(Y){let G=Q.appPath||process.execPath,K=Q.args||[],q=[G,...K],J=`<?xml version="1.0" encoding="UTF-8"?>
560
+ `}import{pack as PY,packageApp as WY}from"craft-native";import{craftBinaryNotFoundMessage as AY,resolveCraftBinary as NY}from"craft-native";import{AutoUpdater as t,generateUpdateManifest as e}from"craft-native";var QQ="update.json";function YQ(Q,Y){return`https://github.com/${Q}/releases/latest/download/${Y}`}function ZQ(Q,Y,Z){return`https://github.com/${Q}/releases/download/${Y}/${Z}`}function xY(Q){let{repository:Y,manifestAsset:Z=QQ,...X}=Q;return new t({...X,updateUrl:YQ(Y,Z)})}function IY(Q){let Y=Q.tag??`v${Q.version}`,Z={};for(let[X,$]of Object.entries(Q.artifacts)){if(!$)continue;Z[X]={path:$,url:ZQ(Q.repository,Y,$.split("/").pop())}}return e({version:Q.version,releaseNotes:Q.releaseNotes,platforms:Z})}import{existsSync as c,mkdirSync as kY,readFileSync as CY,watch as HY,writeFileSync as vY}from"fs";import{homedir as wY,platform as fY}from"os";import{dirname as SY,join as v}from"path";function gY(Q){let Y=fY(),Z=wY();switch(Y){case"darwin":return v(Z,"Library","Application Support",Q);case"win32":return v(process.env.APPDATA||v(Z,"AppData","Roaming"),Q);default:return v(Z,".config",Q)}}class XQ{_defaults;_data;_path;_changeHandlers=new Map;_anyChangeHandlers=new Set;_watcher=null;_writeTimer=null;_writing=!1;constructor(Q){this._defaults={...Q.defaults};let Y=Q.path?SY(Q.path):gY(Q.name);if(this._path=Q.path||v(Y,"preferences.json"),!c(Y))kY(Y,{recursive:!0});if(this._data=this._load(),Q.watch!==!1)this._setupWatcher()}get path(){return this._path}get(Q){if(Q in this._data)return this._data[Q];return this._defaults[Q]}set(Q,Y){let Z=this.get(Q);if(JSON.stringify(Z)===JSON.stringify(Y))return;this._data[Q]=Y,this._scheduleSave(),this._notifyChange(Q,Y,Z)}getAll(){return{...this._defaults,...this._data}}has(Q){return Q in this._data}delete(Q){if(!(Q in this._data))return;let Y=this._data[Q];delete this._data[Q],this._scheduleSave(),this._notifyChange(Q,this._defaults[Q],Y)}reset(){let Q={...this._data};this._data={},this._save();for(let Y of Object.keys(Q)){let Z=this._defaults[Y];this._notifyChange(Y,Z,Q[Y])}}onChange(Q,Y){let Z=Q;if(!this._changeHandlers.has(Z))this._changeHandlers.set(Z,new Set);return this._changeHandlers.get(Z).add(Y),()=>{this._changeHandlers.get(Z)?.delete(Y)}}onAnyChange(Q){return this._anyChangeHandlers.add(Q),()=>{this._anyChangeHandlers.delete(Q)}}close(){if(this._watcher)this._watcher.close(),this._watcher=null;if(this._writeTimer)clearTimeout(this._writeTimer),this._writeTimer=null,this._save()}_load(){try{if(c(this._path)){let Q=CY(this._path,"utf-8");return JSON.parse(Q)}}catch{}return{}}_save(){this._writing=!0;try{let Q=JSON.stringify({...this._defaults,...this._data},null,2);vY(this._path,Q,"utf-8")}catch(Q){console.error(`Failed to save preferences to ${this._path}:`,Q)}finally{setTimeout(()=>{this._writing=!1},100)}}_scheduleSave(){if(this._writeTimer)clearTimeout(this._writeTimer);this._writeTimer=setTimeout(()=>{this._writeTimer=null,this._save()},50)}_setupWatcher(){try{if(!c(this._path))this._save();this._watcher=HY(this._path,()=>{if(this._writing)return;let Q=this._load(),Y={...this._data};this._data=Q;let Z=new Set([...Object.keys(Y),...Object.keys(Q)]);for(let X of Z){let $=X in Y?Y[X]:this._defaults[X],G=X in Q?Q[X]:this._defaults[X];if(JSON.stringify($)!==JSON.stringify(G))this._notifyChange(X,G,$)}})}catch{}}_notifyChange(Q,Y,Z){let X=this._changeHandlers.get(Q);if(X)for(let $ of X)try{$(Y,Z)}catch{}for(let $ of this._anyChangeHandlers)try{$(Q,Y,Z)}catch{}}}function bY(Q){return new XQ(Q)}import{existsSync as I,mkdirSync as $Q,readFileSync as uY,unlinkSync as JQ,writeFileSync as GQ}from"fs";import{homedir as g,platform as qQ}from"os";import{join as k}from"path";function RQ(Q){let Y=Q.toLowerCase().replace(/[^a-z0-9]/g,"-");return k(g(),"Library","LaunchAgents",`com.${Y}.plist`)}function KQ(Q){let Y=process.env.XDG_CONFIG_HOME||k(g(),".config");return k(Y,"autostart",`${Q.toLowerCase()}.desktop`)}async function yY(Q,Y){let Z=Y.appName||"StxApp",X=RQ(Z),$=k(g(),"Library","LaunchAgents");if(Q){let G=Y.appPath||process.execPath,K=Y.args||[],q=[G,...K],J=`<?xml version="1.0" encoding="UTF-8"?>
561
561
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
562
562
  <plist version="1.0">
563
563
  <dict>
@@ -565,22 +565,22 @@ window.desktop = window.stxWindow;
565
565
  <string>com.${Z.toLowerCase().replace(/[^a-z0-9]/g,"-")}</string>
566
566
  <key>ProgramArguments</key>
567
567
  <array>
568
- ${q.map((E)=>` <string>${mY(E)}</string>`).join(`
568
+ ${q.map((E)=>` <string>${dY(E)}</string>`).join(`
569
569
  `)}
570
570
  </array>
571
571
  <key>RunAtLoad</key>
572
572
  <true/>
573
573
  <key>KeepAlive</key>
574
574
  <false/>
575
- ${Q.isHidden?` <key>ProcessType</key>
575
+ ${Y.isHidden?` <key>ProcessType</key>
576
576
  <string>Background</string>`:""}
577
577
  </dict>
578
- </plist>`;if(!x($))$Q($,{recursive:!0});GQ(X,J,"utf-8")}else if(x(X))JQ(X)}async function uY(Y,Q){let Z=Q.appName||"StxApp",X=KQ(Z),$=k(process.env.XDG_CONFIG_HOME||k(S(),".config"),"autostart");if(Y){let G=Q.appPath||process.execPath,K=Q.args||[],q=[G,...K].join(" "),J=`[Desktop Entry]
578
+ </plist>`;if(!I($))$Q($,{recursive:!0});GQ(X,J,"utf-8")}else if(I(X))JQ(X)}async function hY(Q,Y){let Z=Y.appName||"StxApp",X=KQ(Z),$=k(process.env.XDG_CONFIG_HOME||k(g(),".config"),"autostart");if(Q){let G=Y.appPath||process.execPath,K=Y.args||[],q=[G,...K].join(" "),J=`[Desktop Entry]
579
579
  Type=Application
580
580
  Name=${Z}
581
581
  Exec=${q}
582
582
  Terminal=false
583
583
  StartupNotify=false
584
- ${Q.isHidden?`X-GNOME-Autostart-enabled=true
584
+ ${Y.isHidden?`X-GNOME-Autostart-enabled=true
585
585
  NoDisplay=true`:""}
586
- `;if(!x($))$Q($,{recursive:!0});GQ(X,J,"utf-8")}else if(x(X))JQ(X)}async function yY(Y){return x(RQ(Y))}async function hY(Y){let Q=KQ(Y);if(!x(Q))return!1;try{let Z=gY(Q,"utf-8");if(Z.includes("X-GNOME-Autostart-enabled=false"))return!1;if(Z.includes("Hidden=true"))return!1;return!0}catch{return!1}}function mY(Y){return Y.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}async function cY(Y,Q={}){let Z=qQ();switch(Z){case"darwin":return bY(Y,Q);case"linux":return uY(Y,Q);default:throw Error(`Auto-launch is not yet supported on ${Z}`)}}async function dY(Y){let Q=Y||"StxApp";switch(qQ()){case"darwin":return yY(Q);case"linux":return hY(Q);default:return!1}}var pY={accentColor:()=>P("system","accentColor",()=>""),highlightColor:()=>P("system","highlightColor",()=>""),language:()=>P("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>P("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>P("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>P("system","is24HourTime",()=>{try{let Y=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return Y.hourCycle==="h23"||Y.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>P("system","reduceMotion",()=>c("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>P("system","reduceTransparency",()=>c("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>P("system","increaseContrast",()=>c("(prefers-contrast: more)")),systemVersion:()=>P("system","systemVersion",()=>""),hostname:()=>P("system","hostname",()=>""),username:()=>P("system","username",()=>""),async openPreferences(){if(d("system"))await window.craft.system.openPreferences()}};async function P(Y,Q,Z){if(d(Y))return await window.craft[Y][Q]();return await Z()}function c(Y){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(Y).matches}export{eZ as windowEvents,D0 as watchScreenSharing,b0 as vision,tZ as updater,wZ as unregisterHotkey,fZ as unregisterAllHotkeys,YY as triggerTrayAction,q0 as touchbar,nZ as theme,H0 as tags,pY as system,S0 as spotlight,g0 as speechRecognition,K0 as speech,_0 as signPayload,iY as showWarningToast,JZ as showWarningModal,DZ as showWarningDialog,oY as showToast,aY as showSuccessToast,qZ as showSuccessModal,VZ as showSaveDialog,RZ as showQuestionModal,jZ as showOpenDialog,XZ as showModal,OZ as showMessageBox,lY as showInfoToast,$Z as showInfoModal,sY as showErrorToast,GZ as showErrorModal,LZ as showErrorDialog,TZ as showConfirmDialog,zZ as showColorPicker,MZ as showAlertDialog,nY as showAlert,pZ as shell,KY as setDesktopConfig,cY as setAutoLaunch,m0 as serviceMenu,c0 as serial,L0 as screenSharing,O0 as screenCapture,Z0 as screen,WY as resolveCraftBinary,EY as resetDesktopConfig,rY as requestNotificationPermission,vZ as registerHotkey,E0 as redactPII,EZ as prompt,J0 as printing,$0 as permissions,v0 as pdf,CZ as parseShortcut,DY as packageApp,LY as pack,OY as openDevWindow,tY as notify,cZ as notifications,sZ as network,G0 as nativeAutoLaunch,u0 as midi,Y0 as menu,w0 as log,V0 as location,N0 as localServer,j0 as liveActivities,X0 as keychain,MY as isWebviewAvailable,lZ as isDragOutAvailable,NZ as isCaffeinated,r0 as isAvailable,dY as isAutoLaunchEnabled,B0 as iap,W0 as hasFocusShortcuts,F0 as handoff,rZ as globalShortcuts,ZQ as githubReleaseAssetUrl,YQ as githubLatestAssetUrl,TY as getWindowBridgeScript,FY as getWindow,QY as getTrayInstance,XY as getTrayBridgeScript,ZY as getSimulatedTrayHTML,SZ as getRegisteredHotkeys,PZ as getDialogBridgeScript,UY as getDesktopConfig,p0 as getCapability,d0 as getCapabilities,IZ as getCaffeinateStatus,BY as getActiveWindowIds,eQ as getActiveTrayInstances,_Z as getActiveModalCount,YZ as getActiveAlertCount,e as generateUpdateManifest,dZ as fs,yZ as formatTime,HZ as formatShortcut,xZ as formatRemainingTime,kZ as formatDuration,hZ as formatCompact,A0 as focusShortcutsReady,P0 as focus,C0 as fileAssociations,oZ as dragOut,QZ as dismissAllAlerts,eY as dismissAlertById,uZ as delay,aZ as deepLinks,AZ as decaffeinate,zY as createWindowWithHTML,VY as createWindow,rQ as createWebView,uQ as createTreeView,CQ as createTooltip,gZ as createTimer,AQ as createTimePicker,_Q as createTextInput,MQ as createTabs,bQ as createTable,i as createSystemTray,fQ as createStepper,vQ as createSplitView,FQ as createSlider,HQ as createScrollView,LQ as createRating,DQ as createRadioButton,jQ as createProgressBar,SY as createPreferences,SQ as createModalComponent,tQ as createMenubar,cQ as createMediaPlayer,gQ as createListView,IQ as createLabel,bZ as createInterval,xQ as createImageView,AY as createGitHubUpdater,NY as createGitHubUpdateManifest,pQ as createFileExplorer,TQ as createDropdown,WQ as createDatePicker,yQ as createDataGrid,PQ as createColorPicker,mQ as createCodeEditor,kQ as createChip,BQ as createCheckbox,hQ as createChart,zQ as createCard,EQ as createButton,VQ as createBadge,OQ as createAvatar,NQ as createAutocomplete,wQ as createAccordion,U0 as crashReporter,h as craftWindowArguments,PY as craftBinaryNotFoundMessage,y0 as coreml,h0 as continuityCamera,KZ as confirm,jY as closeAllWindows,BZ as closeAllModals,mZ as clipboard,WZ as caffeinate,f0 as bonjour,R0 as bluetooth,I0 as biometric,iZ as battery,x0 as audio,k0 as appleScript,Q0 as appInfo,UZ as alert,QQ as UPDATE_MANIFEST_ASSET,$Y as TRAY_MENU_STYLES,ZZ as TOAST_STYLES,FZ as MODAL_STYLES,z0 as MIN_WATCH_INTERVAL_MS,M0 as MAX_WATCH_INTERVAL_MS,T0 as DEFAULT_WATCH_INTERVAL_MS,oQ as COMPONENT_STYLES,t as AutoUpdater,nQ as AVAILABLE_COMPONENTS};
586
+ `;if(!I($))$Q($,{recursive:!0});GQ(X,J,"utf-8")}else if(I(X))JQ(X)}async function mY(Q){return I(RQ(Q))}async function cY(Q){let Y=KQ(Q);if(!I(Y))return!1;try{let Z=uY(Y,"utf-8");if(Z.includes("X-GNOME-Autostart-enabled=false"))return!1;if(Z.includes("Hidden=true"))return!1;return!0}catch{return!1}}function dY(Q){return Q.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}async function pY(Q,Y={}){let Z=qQ();switch(Z){case"darwin":return yY(Q,Y);case"linux":return hY(Q,Y);default:throw Error(`Auto-launch is not yet supported on ${Z}`)}}async function rY(Q){let Y=Q||"StxApp";switch(qQ()){case"darwin":return mY(Y);case"linux":return cY(Y);default:return!1}}function EQ(Q){if(Q.separator)return{id:Q.id||"",title:"",type:"separator"};return{id:Q.id||"",title:Q.title||"",icon:Q.icon,shortcut:Q.shortcut,enabled:Q.disabled?!1:void 0,submenu:Q.submenu?.map(EQ)}}var nY={available(){return C("nativeUI")},async show(Q){if(!Q.items||Q.items.length===0)throw Error("contextMenu.show requires at least one item");if(!C("nativeUI"))return!1;return await window.craft.nativeUI.showContextMenu({targetId:Q.targetId||"",targetType:"general",x:Math.round(Q.x),y:Math.round(Q.y),items:Q.items.map(EQ)}),!0},onAction(Q){return UQ("craft:menu:action",Q)}};var oY={accentColor:()=>P("system","accentColor",()=>""),highlightColor:()=>P("system","highlightColor",()=>""),language:()=>P("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>P("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>P("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>P("system","is24HourTime",()=>{try{let Q=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return Q.hourCycle==="h23"||Q.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>P("system","reduceMotion",()=>d("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>P("system","reduceTransparency",()=>d("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>P("system","increaseContrast",()=>d("(prefers-contrast: more)")),systemVersion:()=>P("system","systemVersion",()=>""),hostname:()=>P("system","hostname",()=>""),username:()=>P("system","username",()=>""),async openPreferences(){if(C("system"))await window.craft.system.openPreferences()}};async function P(Q,Y,Z){if(C(Q))return await window.craft[Q][Y]();return await Z()}function d(Q){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(Q).matches}export{Z0 as windowEvents,N0 as watchScreenSharing,m0 as vision,Y0 as updater,gZ as unregisterHotkey,bZ as unregisterAllHotkeys,XY as triggerTrayAction,E0 as touchbar,aZ as theme,S0 as tags,oY as system,$0 as standardMenus,y0 as spotlight,h0 as speechRecognition,F0 as speech,V0 as signPayload,eY as showWarningToast,RZ as showWarningModal,AZ as showWarningDialog,iY as showToast,tY as showSuccessToast,UZ as showSuccessModal,MZ as showSaveDialog,EZ as showQuestionModal,zZ as showOpenDialog,GZ as showModal,TZ as showMessageBox,sY as showInfoToast,qZ as showInfoModal,QZ as showErrorToast,KZ as showErrorModal,WZ as showErrorDialog,PZ as showConfirmDialog,LZ as showColorPicker,DZ as showAlertDialog,aY as showAlert,oZ as shell,EY as setDesktopConfig,pY as setAutoLaunch,r0 as serviceMenu,n0 as serial,A0 as screenSharing,L0 as screenCapture,G0 as screen,NY as resolveCraftBinary,FY as resetDesktopConfig,lY as requestNotificationPermission,SZ as registerHotkey,j0 as redactPII,BZ as prompt,K0 as printing,R0 as permissions,g0 as pdf,wZ as parseShortcut,WY as packageApp,PY as pack,MY as openDevWindow,YZ as notify,rZ as notifications,Q0 as network,U0 as nativeAutoLaunch,c0 as midi,J0 as menu,b0 as log,T0 as location,C0 as localServer,M0 as liveActivities,q0 as keychain,LY as isWebviewAvailable,sZ as isDragOutAvailable,kZ as isCaffeinated,a0 as isAvailable,rY as isAutoLaunchEnabled,O0 as iap,I0 as hasFocusShortcuts,z0 as handoff,lZ as globalShortcuts,ZQ as githubReleaseAssetUrl,YQ as githubLatestAssetUrl,DY as getWindowBridgeScript,VY as getWindow,ZY as getTrayInstance,JY as getTrayBridgeScript,$Y as getSimulatedTrayHTML,uZ as getRegisteredHotkeys,NZ as getDialogBridgeScript,_Y as getDesktopConfig,l0 as getCapability,o0 as getCapabilities,CZ as getCaffeinateStatus,jY as getActiveWindowIds,YY as getActiveTrayInstances,jZ as getActiveModalCount,$Z as getActiveAlertCount,e as generateUpdateManifest,nZ as fs,cZ as formatTime,fZ as formatShortcut,HZ as formatRemainingTime,vZ as formatDuration,dZ as formatCompact,k0 as focusShortcutsReady,x0 as focus,f0 as fileAssociations,iZ as dragOut,XZ as dismissAllAlerts,ZZ as dismissAlertById,mZ as delay,tZ as deepLinks,IZ as decaffeinate,TY as createWindowWithHTML,zY as createWindow,oQ as createWebView,hQ as createTreeView,vQ as createTooltip,yZ as createTimer,xQ as createTimePicker,BQ as createTextInput,LQ as createTabs,yQ as createTable,i as createSystemTray,gQ as createStepper,fQ as createSplitView,VQ as createSlider,wQ as createScrollView,PQ as createRating,WQ as createRadioButton,OQ as createProgressBar,bY as createPreferences,bQ as createModalComponent,QY as createMenubar,pQ as createMediaPlayer,uQ as createListView,kQ as createLabel,hZ as createInterval,CQ as createImageView,xY as createGitHubUpdater,IY as createGitHubUpdateManifest,nQ as createFileExplorer,DQ as createDropdown,NQ as createDatePicker,mQ as createDataGrid,AQ as createColorPicker,dQ as createCodeEditor,HQ as createChip,jQ as createCheckbox,cQ as createChart,TQ as createCard,FQ as createButton,zQ as createBadge,MQ as createAvatar,IQ as createAutocomplete,SQ as createAccordion,B0 as crashReporter,m as craftWindowArguments,AY as craftBinaryNotFoundMessage,d0 as coreml,p0 as continuityCamera,nY as contextMenu,_Z as confirm,OY as closeAllWindows,VZ as closeAllModals,pZ as clipboard,xZ as caffeinate,u0 as bonjour,_0 as bluetooth,H0 as biometric,eZ as battery,v0 as audio,w0 as appleScript,X0 as appInfo,FZ as alert,QQ as UPDATE_MANIFEST_ASSET,GY as TRAY_MENU_STYLES,JZ as TOAST_STYLES,OZ as MODAL_STYLES,D0 as MIN_WATCH_INTERVAL_MS,P0 as MAX_WATCH_INTERVAL_MS,W0 as DEFAULT_WATCH_INTERVAL_MS,aQ as COMPONENT_STYLES,t as AutoUpdater,lQ as AVAILABLE_COMPONENTS};
package/dist/menu.d.ts CHANGED
@@ -1,21 +1,67 @@
1
+ /**
2
+ * The menus every Mac app is expected to have, built correctly.
3
+ *
4
+ * Hand-writing these is boilerplate with a penalty: omit Edit and the app has
5
+ * no Copy; omit the app menu and the first menu you *did* write gets eaten in
6
+ * its place. Every item here uses a role, so AppKit performs it through the
7
+ * responder chain and macOS augments the menus with its own additions —
8
+ * Writing Tools and Emoji & Symbols in Edit, Quit and Keep Windows in the app
9
+ * menu — which it only does for menus it recognises.
10
+ */
11
+ export declare const standardMenus: {
12
+ /** The application menu. Must be first in the bar; AppKit titles it for you. */
13
+ app: (appName: string) => Menu;
14
+ /** Undo/redo and the clipboard. Roles throughout, which is the only way these work. */
15
+ edit: () => Menu;
16
+ /** Minimise, zoom and close. */
17
+ window: () => Menu;
18
+ /**
19
+ * The app menu and Edit, in the order the bar needs them.
20
+ *
21
+ * Spread this first and add your own menus after: the app menu has to be
22
+ * index zero, and Edit is the one people notice missing.
23
+ */
24
+ leading: (appName: string) => Menu[]
25
+ };
1
26
  export declare const menu: MenuAPI;
2
27
  export declare interface MenuItem {
3
- id: string
28
+ id?: string
4
29
  label?: string
5
- role?: string
6
- accelerator?: string
30
+ role?: MenuRole
31
+ shortcut?: string
7
32
  separator?: boolean
8
- checkable?: boolean
9
- checked?: boolean
10
- disabled?: boolean
11
- submenu?: MenuItem[]
12
33
  icon?: string
34
+ onClick?: () => void
35
+ }
36
+ /**
37
+ * One top-level menu in the bar.
38
+ *
39
+ * The menubar is two levels — a list of menus, each a list of items — not a
40
+ * tree. `MenuItem` has no `submenu`, because the native side does not read one.
41
+ */
42
+ export declare interface Menu {
43
+ label: string
44
+ items: MenuItem[]
45
+ }
46
+ /**
47
+ * What `menu.set` sends.
48
+ *
49
+ * The native side parses `{menus: [...]}`, not a bare array. Passing an array
50
+ * — which this package's own type used to ask for — deserialises into an empty
51
+ * menu set and changes nothing, with no error anywhere.
52
+ *
53
+ * Menus are *merged into* the bar the runtime already provides rather than
54
+ * replacing it, so a menu the runtime does not already carry (`File`, for
55
+ * instance) is dropped. Put app commands under a menu that exists.
56
+ */
57
+ export declare interface ApplicationMenu {
58
+ menus: Menu[]
13
59
  }
14
60
  export declare interface MenuActionEvent {
15
61
  id: string
16
62
  }
17
63
  export declare interface MenuAPI {
18
- set: (items: MenuItem[]) => Promise<void>
64
+ set: (menu: ApplicationMenu) => Promise<boolean>
19
65
  setDock: (items: MenuItem[]) => Promise<void>
20
66
  addItem: (parent: string, item: MenuItem) => Promise<void>
21
67
  removeItem: (id: string) => Promise<void>
@@ -27,3 +73,34 @@ export declare interface MenuAPI {
27
73
  clearDock: () => Promise<void>
28
74
  onAction: (cb: (event: MenuActionEvent) => void) => () => void
29
75
  }
76
+ /**
77
+ * The stock behaviours macOS already knows how to perform.
78
+ *
79
+ * Spelled out as a union rather than typed `string` because an unrecognised
80
+ * role does not fail: the native side falls back to forwarding the item as an
81
+ * event, so `'togglefullscreen'` — Electron's name for what is `'fullscreen'`
82
+ * here — builds a menu item that looks right, is enabled, and does nothing.
83
+ * That mistake is one letter deep and invisible until someone clicks it.
84
+ *
85
+ * Mirrors the table in Craft's `menu_roles.zig`. Craft matches case
86
+ * insensitively; this list is the canonical casing.
87
+ */
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';
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"./chunk-ts9f0mxv.js";O();function O(){if(typeof window>"u")return;let A=window;if(typeof A.addEventListener==="function"&&typeof A.dispatchEvent==="function")return;let B=new Map;A.addEventListener=(j,q)=>{let D=B.get(j);if(!D)D=new Set,B.set(j,D);D.add(q)},A.removeEventListener=(j,q)=>{B.get(j)?.delete(q)},A.dispatchEvent=(j)=>{let q=B.get(j.type);if(q)for(let D of q)try{D(j)}catch{}return!0}}function P(A=[]){let B=[],j=new Map,q=window.craft,D=q&&q.__craft_bridge_loaded?void 0:q;function I(x,z){return(...C)=>{B.push({ns:x,method:z,args:C});let F=`${x}:${z}`;if(j.has(F)){let G=j.get(F),L=typeof G==="function"?G(...C):G;return Promise.resolve(L)}return Promise.resolve(void 0)}}function J(x){return new Proxy({},{get(z,C){if(typeof C!=="string")return;if(j.has(`${x}:${C}`)){let F=j.get(`${x}:${C}`);if(typeof F==="function"&&F.length===0)return()=>{return B.push({ns:x,method:C,args:[]}),F()}}return I(x,C)}})}let K=new Proxy({},{get(x,z){if(typeof z!=="string")return;return J(z)},has(x,z){if(typeof z!=="string")return!1;if(A.length===0)return!0;return A.includes(z)}});return window.craft=K,{calls:B,whenCalled(x,z,C){j.set(`${x}:${z}`,C)},uninstall(){if(D===void 0)delete window.craft;else window.craft=D}}}function Q(A,B,j){return A.find((q)=>q.ns===B&&q.method===j)}export{P as installMockBridge,Q as findCall};
2
+ import"./chunk-h05t5fn6.js";O();function O(){if(typeof window>"u")return;let A=window;if(typeof A.addEventListener==="function"&&typeof A.dispatchEvent==="function")return;let B=new Map;A.addEventListener=(j,q)=>{let D=B.get(j);if(!D)D=new Set,B.set(j,D);D.add(q)},A.removeEventListener=(j,q)=>{B.get(j)?.delete(q)},A.dispatchEvent=(j)=>{let q=B.get(j.type);if(q)for(let D of q)try{D(j)}catch{}return!0}}function P(A=[]){let B=[],j=new Map,q=window.craft,D=q&&q.__craft_bridge_loaded?void 0:q;function I(x,z){return(...C)=>{B.push({ns:x,method:z,args:C});let F=`${x}:${z}`;if(j.has(F)){let G=j.get(F),L=typeof G==="function"?G(...C):G;return Promise.resolve(L)}return Promise.resolve(void 0)}}function J(x){return new Proxy({},{get(z,C){if(typeof C!=="string")return;if(j.has(`${x}:${C}`)){let F=j.get(`${x}:${C}`);if(typeof F==="function"&&F.length===0)return()=>{return B.push({ns:x,method:C,args:[]}),F()}}return I(x,C)}})}let K=new Proxy({},{get(x,z){if(typeof z!=="string")return;return J(z)},has(x,z){if(typeof z!=="string")return!1;if(A.length===0)return!0;return A.includes(z)}});return window.craft=K,{calls:B,whenCalled(x,z,C){j.set(`${x}:${z}`,C)},uninstall(){if(D===void 0)delete window.craft;else window.craft=D}}}function Q(A,B,j){return A.find((q)=>q.ns===B&&q.method===j)}export{P as installMockBridge,Q as findCall};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/desktop",
3
3
  "type": "module",
4
- "version": "0.2.245",
4
+ "version": "0.2.247",
5
5
  "description": "Native desktop application framework for stx (powered by Craft)",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",