@stacksjs/stx 0.2.676 → 0.2.677
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/{chunk-q1jcf6vm.js → chunk-01cx2p82.js} +1 -1
- package/dist/chunk-08d4wb3x.js +2 -0
- package/dist/{chunk-4rk5qnqf.js → chunk-0rpr2aax.js} +1 -1
- package/dist/{chunk-rnws0dh3.js → chunk-0wmcs0w3.js} +1 -1
- package/dist/{chunk-p27ptd9f.js → chunk-1nrz39tr.js} +6 -6
- package/dist/{chunk-245sas8r.js → chunk-2t51tpkc.js} +2 -2
- package/dist/{chunk-kn34esxw.js → chunk-3rde002j.js} +1 -1
- package/dist/{chunk-dmd7mgjw.js → chunk-4tn437tn.js} +1 -1
- package/dist/{chunk-z7ghjs7w.js → chunk-569s7hg6.js} +1 -1
- package/dist/{chunk-x63f2ywm.js → chunk-69qhykgz.js} +1 -1
- package/dist/{chunk-z35ftpqp.js → chunk-7dnpjrqp.js} +6 -6
- package/dist/{chunk-jk7chxkt.js → chunk-8z8w9rxc.js} +1 -1
- package/dist/{chunk-cdbaanmx.js → chunk-adyseb6y.js} +1 -1
- package/dist/{chunk-qbzqary0.js → chunk-aypmc7qg.js} +1 -1
- package/dist/{chunk-krcd3039.js → chunk-b4709e09.js} +5 -5
- package/dist/chunk-br3cde1t.js +2 -0
- package/dist/{chunk-78d5tn4r.js → chunk-cep5ba7w.js} +1 -1
- package/dist/{chunk-mq915g3j.js → chunk-dckjv2vk.js} +2 -2
- package/dist/{chunk-4jnv2v5e.js → chunk-dx037j0p.js} +1 -1
- package/dist/chunk-dzbn56tx.js +2 -0
- package/dist/chunk-e0fhfnee.js +2 -0
- package/dist/{chunk-fbrgz3s8.js → chunk-efpd1yyg.js} +1 -1
- package/dist/{chunk-526mf3fr.js → chunk-fjtffqf9.js} +1 -1
- package/dist/{chunk-zwkc8yge.js → chunk-fka2073f.js} +48 -48
- package/dist/chunk-fp3a3gmr.js +2 -0
- package/dist/{chunk-j60jye3e.js → chunk-gjdpdvw5.js} +1 -1
- package/dist/{chunk-d4ch6exz.js → chunk-hejx7gbs.js} +1 -1
- package/dist/{chunk-vay5v6sj.js → chunk-hg9dxba9.js} +1 -1
- package/dist/{chunk-5v7vm8cv.js → chunk-hh2dcnsx.js} +4 -4
- package/dist/{chunk-c4enpsj8.js → chunk-hkfabb1e.js} +1 -1
- package/dist/chunk-j9pwgyf1.js +2 -0
- package/dist/{chunk-fd72t30s.js → chunk-je8t9yka.js} +1 -1
- package/dist/chunk-jkw89s1t.js +2 -0
- package/dist/{chunk-1rztwjdj.js → chunk-k65zz7t3.js} +3 -3
- package/dist/{chunk-pwn0j1vq.js → chunk-kas6xn08.js} +1 -1
- package/dist/{chunk-bpj387yx.js → chunk-m46bj8c8.js} +2 -2
- package/dist/{chunk-rxxajm31.js → chunk-mgk7bwb3.js} +2 -2
- package/dist/{chunk-n94ts3t9.js → chunk-mhacarm5.js} +2 -2
- package/dist/{chunk-sptewgky.js → chunk-mzcf1dr1.js} +1 -1
- package/dist/{chunk-g12ht81a.js → chunk-n1d2t5h4.js} +1 -1
- package/dist/{chunk-s73z8zss.js → chunk-n46pv8kp.js} +1 -1
- package/dist/{chunk-b23vscaq.js → chunk-phdd7jxx.js} +1 -1
- package/dist/{chunk-cs8wq7nv.js → chunk-qjv5tjmy.js} +1 -1
- package/dist/chunk-r16n5dc4.js +2 -0
- package/dist/{chunk-whzvx5w5.js → chunk-r1v1496g.js} +1 -1
- package/dist/{chunk-ehzd1yc6.js → chunk-r9p7r6mx.js} +1 -1
- package/dist/chunk-reqdy80m.js +2 -0
- package/dist/{chunk-fdvfzknd.js → chunk-rza3yydb.js} +1 -1
- package/dist/{chunk-be2rswkw.js → chunk-scgn8dmx.js} +1 -1
- package/dist/{chunk-etz2dmec.js → chunk-sqv40sqk.js} +1 -1
- package/dist/{chunk-n63r9b4f.js → chunk-tjqyhgh2.js} +1 -1
- package/dist/{chunk-304dbbsw.js → chunk-tqc86aaw.js} +4 -4
- package/dist/{chunk-ghm9f13q.js → chunk-vdsf1yrt.js} +1 -1
- package/dist/{chunk-6bwca55g.js → chunk-wbz32ffd.js} +1 -1
- package/dist/{chunk-sqh3tvtw.js → chunk-wkkmk4aa.js} +1 -1
- package/dist/{chunk-rfc5pdv2.js → chunk-wwgh5ae7.js} +1 -1
- package/dist/{chunk-551s7ha0.js → chunk-x5sjsf3b.js} +2 -2
- package/dist/{chunk-707sx5sk.js → chunk-x5v3rqbn.js} +1 -1
- package/dist/chunk-yaej3mgj.js +2 -0
- package/dist/chunk-zbp10hjz.js +2 -0
- package/dist/{chunk-q3nnaxf9.js → chunk-zeyfefpc.js} +1 -1
- package/dist/{chunk-xk7cp691.js → chunk-ztebv7c0.js} +1 -1
- package/dist/{chunk-34e8e8te.js → chunk-zvr3r5p0.js} +1 -1
- package/dist/cli.js +7 -7
- package/dist/craft-entry.js +1 -1
- package/dist/craft.js +1 -1
- package/dist/desktop.d.ts +5 -0
- package/dist/pwa.js +1 -1
- package/dist/ssg.js +2 -2
- package/package.json +3 -3
- package/dist/chunk-1e73whqh.js +0 -2
- package/dist/chunk-3gdt16xa.js +0 -2
- package/dist/chunk-b18x0v21.js +0 -2
- package/dist/chunk-d2xf5hh9.js +0 -2
- package/dist/chunk-dda8pdya.js +0 -2
- package/dist/chunk-ds91e0fe.js +0 -2
- package/dist/chunk-g6gqja52.js +0 -2
- package/dist/chunk-gz5rvwgx.js +0 -2
- package/dist/chunk-jjet6qxq.js +0 -2
- package/dist/chunk-vewt3464.js +0 -2
- package/dist/chunk-wk1gt95z.js +0 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{f}from"./chunk-b7e07ybq.js";function
|
|
2
|
+
import{f}from"./chunk-b7e07ybq.js";function Ut(){if(typeof Notification<"u"&&Notification.permission==="granted")return!0;return!1}function pe(){return typeof window<"u"&&typeof document<"u"}async function qt(){if(typeof Notification>"u")return!1;if(Notification.permission==="granted")return!0;if(Notification.permission==="denied")return!1;return await Notification.requestPermission()==="granted"}var N=new Map;function Vt(){return`alert-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function jt(e){switch(e){case"info":return"ℹ";case"success":return"✔";case"warning":return"⚠";case"error":return"✖";default:return"ℹ"}}function Kt(e="top-right"){if(!pe())throw Error("Toast container requires browser environment");try{let r=document.querySelector(`.stx-toast-container[data-position="${e}"]`);if(r)return r}catch{}let t=document.createElement("div");t.className=`stx-toast-container ${e}`,t.dataset.position=e;try{if(document.body)document.body.appendChild(t)}catch{}return t}function Gt(e){let{options:t}=e,r=jt(t.type),n=t.type||"info",o=t.duration!==0;return`
|
|
3
3
|
<div class="stx-toast ${n}" data-alert-id="${e.id}" role="alert" aria-live="polite">
|
|
4
4
|
<div class="stx-toast-icon">${r}</div>
|
|
5
5
|
<div class="stx-toast-content">
|
|
6
|
-
${t.title?`<div class="stx-toast-title">${
|
|
7
|
-
<div class="stx-toast-message">${
|
|
6
|
+
${t.title?`<div class="stx-toast-title">${_e(t.title)}</div>`:""}
|
|
7
|
+
<div class="stx-toast-message">${_e(t.message)}</div>
|
|
8
8
|
</div>
|
|
9
|
-
${
|
|
9
|
+
${o?'<button class="stx-toast-close" aria-label="Close">×</button>':""}
|
|
10
10
|
</div>
|
|
11
|
-
`}function
|
|
11
|
+
`}function _e(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function te(e){if(e.timeout)clearTimeout(e.timeout);if(N.delete(e.id),e.element&&pe())e.element.classList.add("dismissing"),setTimeout(()=>{e.element?.remove()},200)}async function fe(e){let t=Vt(),r=Ut(),n=e.duration??5000,o={id:t,options:e};if(N.set(t,o),r&&e.type!=="error")try{let a=new Notification(e.title||"Notification",{body:e.message,icon:e.type==="success"?"\u2713":e.type==="warning"?"\u26A0":"\u2139",tag:t});if(a.onclick=()=>{if(e.onClick)e.onClick();a.close()},n>0)o.timeout=setTimeout(()=>{a.close(),N.delete(t)},n);return}catch{}if(pe())try{let a=Kt(e.position),s=document.createElement("div");s.innerHTML=Gt(o);let c=s.firstElementChild;if(!c){let l=(e.type||"info").toUpperCase();console.log(`[stx-alert] ${l}: ${e.title||""}`),console.log(`[stx-alert] ${e.message}`);return}o.element=c;try{a.appendChild(c)}catch{let l=(e.type||"info").toUpperCase();console.log(`[stx-alert] ${l}: ${e.title||""}`),console.log(`[stx-alert] ${e.message}`);return}if(typeof requestAnimationFrame==="function")requestAnimationFrame(()=>{try{c.classList.add("visible")}catch{}});try{c.addEventListener("click",(l)=>{if(l.target.classList?.contains("stx-toast-close")){te(o);return}if(e.onClick)e.onClick()})}catch{}if(n>0)o.timeout=setTimeout(()=>{te(o)},n)}catch{let a=(e.type||"info").toUpperCase();console.log(`[stx-alert] ${a}: ${e.title||""}`),console.log(`[stx-alert] ${e.message}`)}else{let a=(e.type||"info").toUpperCase();if(console.log(`[stx-alert] ${a}: ${e.title||""}`),console.log(`[stx-alert] ${e.message}`),n>0)o.timeout=setTimeout(()=>{N.delete(t)},n)}}async function j(e){return fe({...e,position:e.position||"top-right"})}async function Yt(e,t=3000){return j({message:e,type:"info",duration:t})}async function Xt(e,t=3000){return j({message:e,type:"success",duration:t})}async function Jt(e,t=3000){return j({message:e,type:"warning",duration:t})}async function Qt(e,t=5000){return j({message:e,type:"error",duration:t})}async function Zt(e,t,r="info"){return fe({title:e,message:t,type:r})}function er(e){let t=N.get(e);if(t)te(t)}function tr(){for(let e of N.values())te(e)}function rr(){return N.size}var nr=`
|
|
12
12
|
.stx-toast-container {
|
|
13
13
|
position: fixed;
|
|
14
14
|
z-index: 10001;
|
|
@@ -110,44 +110,44 @@ import{f}from"./chunk-b7e07ybq.js";function Wt(){if(typeof Notification<"u"&&Not
|
|
|
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 P(e="stx"){return`${e}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function g(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function y(...e){return e.filter(Boolean).join(" ")}function x(e){if(!e)return"";return Object.entries(e).map(([t,r])=>`${t.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${r}`).join("; ")}function
|
|
113
|
+
`;function P(e="stx"){return`${e}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function g(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function y(...e){return e.filter(Boolean).join(" ")}function x(e){if(!e)return"";return Object.entries(e).map(([t,r])=>`${t.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${r}`).join("; ")}function or(e){let{text:t,variant:r="primary",size:n="medium",disabled:o=!1,loading:a=!1,icon:s,iconPosition:c="left",id:l=P("btn"),className:d,style:p}=e,m=y("stx-button",`stx-button--${r}`,`stx-button--${n}`,o&&"stx-button--disabled",a&&"stx-button--loading",d),u=x(p),w=s?`<span class="stx-button-icon">${s}</span>`:"",b=a?'<span class="stx-button-spinner"></span>':"",S=c==="left"?`${w}${b}<span class="stx-button-text">${g(t)}</span>`:`<span class="stx-button-text">${g(t)}</span>${w}${b}`;return`<button id="${l}" class="${m}" ${o||a?"disabled":""} ${u?`style='${u}'`:""}>${S}</button>`}function ir(e){let{value:t="",placeholder:r="",type:n="text",disabled:o=!1,readonly:a=!1,maxLength:s,minLength:c,pattern:l,required:d=!1,autocomplete:p,label:m,error:u,hint:w,id:b=P("input"),className:S,style:k}=e,A=y("stx-input",u&&"stx-input--error",o&&"stx-input--disabled",S),B=x(k),ee=[`type="${n}"`,`id="${b}"`,`class="${A}"`,t&&`value="${g(t)}"`,r&&`placeholder="${g(r)}"`,o&&"disabled",a&&"readonly",d&&"required",s&&`maxlength="${s}"`,c&&`minlength="${c}"`,l&&`pattern="${g(l)}"`,p&&`autocomplete="${p}"`,B&&`style="${B}"`].filter(Boolean).join(" "),O="";if(m)O+=`<label class="stx-input-label" for="${b}">${g(m)}</label>`;if(O+=`<input ${ee} />`,u)O+=`<div class="stx-input-error">${g(u)}</div>`;else if(w)O+=`<div class="stx-input-hint">${g(w)}</div>`;return`<div class="stx-input-wrapper">${O}</div>`}function ar(e){let{checked:t=!1,label:r,disabled:n=!1,indeterminate:o=!1,id:a=P("checkbox"),className:s,style:c}=e,l=y("stx-checkbox",n&&"stx-checkbox--disabled",s),d=x(c),p=['type="checkbox"',`id="${a}"`,t&&"checked",n&&"disabled",o&&'data-indeterminate="true"'].filter(Boolean).join(" ");return`
|
|
114
114
|
<label class="${l}" ${d?`style="${d}"`:""}>
|
|
115
115
|
<input ${p} />
|
|
116
116
|
<span class="stx-checkbox-box"></span>
|
|
117
117
|
${r?`<span class="stx-checkbox-label">${g(r)}</span>`:""}
|
|
118
118
|
</label>
|
|
119
|
-
`}function
|
|
119
|
+
`}function sr(e){let{value:t=50,min:r=0,max:n=100,step:o=1,disabled:a=!1,label:s,showValue:c=!0,id:l=P("slider"),className:d,style:p}=e,m=y("stx-slider",a&&"stx-slider--disabled",d),u=x(p),w=['type="range"',`id="${l}"`,`value="${t}"`,`min="${r}"`,`max="${n}"`,`step="${o}"`,a&&"disabled"].filter(Boolean).join(" "),b="";if(s)b+=`<label class="stx-slider-label" for="${l}">${g(s)}</label>`;if(b+=`<div class="stx-slider-track"><input ${w} /></div>`,c)b+=`<span class="stx-slider-value">${t}</span>`;return`<div class="${m}" ${u?`style='${u}'`:""}>${b}</div>`}function cr(e){let{value:t,max:r=100,variant:n="default",size:o="medium",showLabel:a=!1,indeterminate:s=!1,id:c=P("progress"),className:l,style:d}=e,p=Math.min(100,Math.max(0,t/r*100)),m=y("stx-progress",`stx-progress--${n}`,`stx-progress--${o}`,s&&"stx-progress--indeterminate",l),u=x(d);return`
|
|
120
120
|
<div id="${c}" class="${m}" role="progressbar" aria-valuenow="${t}" aria-valuemin="0" aria-valuemax="${r}" ${u?`style="${u}"`:""}>
|
|
121
121
|
<div class="stx-progress-bar" style="width: ${s?"100%":`${p}%`}"></div>
|
|
122
122
|
${a?`<span class="stx-progress-label">${Math.round(p)}%</span>`:""}
|
|
123
123
|
</div>
|
|
124
|
-
`}function
|
|
124
|
+
`}function lr(e){let{text:t,variant:r="default",size:n="medium",id:o=P("badge"),className:a,style:s}=e,c=y("stx-badge",`stx-badge--${r}`,`stx-badge--${n}`,a),l=x(s);return`<span id="${o}" class="${c}" ${l?`style='${l}'`:""}>${g(t)}</span>`}function dr(e){let{src:t,alt:r="",name:n,size:o="medium",shape:a="circle",id:s=P("avatar"),className:c,style:l}=e,d=typeof o==="number"?"":`stx-avatar--${o}`,p=typeof o==="number"?`width: ${o}px; height: ${o}px;`:"",m=y("stx-avatar",d,`stx-avatar--${a}`,c),u=[p,x(l)].filter(Boolean).join(" "),w=n?n.split(" ").map((b)=>b[0]).join("").toUpperCase().slice(0,2):"";if(t)return`<div id="${s}" class="${m}" ${u?`style="${u}"`:""}>
|
|
125
125
|
<img src="${g(t)}" alt="${g(r)}" class="stx-avatar-img" />
|
|
126
126
|
</div>`;return`<div id="${s}" class="${m}" ${u?`style="${u}"`:""}>
|
|
127
127
|
<span class="stx-avatar-initials">${w}</span>
|
|
128
|
-
</div>`}function
|
|
128
|
+
</div>`}function ur(e){let{title:t,subtitle:r,content:n,image:o,footer:a,variant:s="default",id:c=P("card"),className:l,style:d}=e,p=y("stx-card",`stx-card--${s}`,l),m=x(d),u="";if(o)u+=`<div class="stx-card-image"><img src="${g(o)}" alt="" /></div>`;if(u+='<div class="stx-card-body">',t)u+=`<h3 class="stx-card-title">${g(t)}</h3>`;if(r)u+=`<p class="stx-card-subtitle">${g(r)}</p>`;if(n)u+=`<div class="stx-card-content">${g(n)}</div>`;if(u+="</div>",a)u+=`<div class="stx-card-footer">${g(a)}</div>`;return`<div id="${c}" class="${p}" ${m?`style='${m}'`:""}>${u}</div>`}function pr(e){let{tabs:t,activeTab:r,variant:n="default",id:o=P("tabs"),className:a,style:s}=e,c=y("stx-tabs",`stx-tabs--${n}`,a),l=x(s),d=t.map((p,m)=>{let u=r?p.value===r:m===0;return`<button class="${y("stx-tab",u&&"stx-tab--active",p.disabled&&"stx-tab--disabled")}" data-value="${g(p.value)}" ${p.disabled?"disabled":""} role="tab" aria-selected="${u}">${g(p.label)}</button>`}).join("");return`<div id="${o}" class="${c}" role="tablist" ${l?`style='${l}'`:""}>${d}</div>`}function fr(e){let{options:t,value:r,placeholder:n="Select...",disabled:o=!1,id:a=P("dropdown"),className:s,style:c}=e,l=y("stx-dropdown",o&&"stx-dropdown--disabled",s),d=x(c),p=t.map((u)=>{let w=u.value===r?"selected":"",b=u.disabled?"disabled":"";return`<option value="${g(u.value)}" ${w} ${b}>${g(u.label)}</option>`}).join(""),m=r?"":`<option value="" disabled selected>${g(n)}</option>`;return`<select id="${a}" class="${l}" ${o?"disabled":""} ${d?`style='${d}'`:""}>${m}${p}</select>`}function mr(e){let{value:t=0,max:r=5,readonly:n=!1,size:o="medium",allowHalf:a=!1,id:s=P("rating"),className:c,style:l}=e,d=y("stx-rating",`stx-rating--${o}`,n&&"stx-rating--readonly",c),p=x(l),m="";for(let u=1;u<=r;u++){let w=u<=t,b=a&&u-0.5===t;m+=`<span class="stx-star ${w?"stx-star--filled":b?"stx-star--half":""}" data-value="${u}">\u2605</span>`}return`<div id="${s}" class="${d}" role="slider" aria-valuenow="${t}" aria-valuemin="0" aria-valuemax="${r}" ${p?`style='${p}'`:""}>${m}</div>`}function gr(e){let{value:t,name:r,checked:n=!1,label:o,disabled:a=!1,id:s=P("radio"),className:c,style:l}=e,d=y("stx-radio",a&&"stx-radio--disabled",c),p=x(l),m=['type="radio"',`id="${s}"`,`name="${g(r)}"`,`value="${g(t)}"`,n&&"checked",a&&"disabled"].filter(Boolean).join(" ");return`
|
|
129
129
|
<label class="${d}" ${p?`style="${p}"`:""}>
|
|
130
130
|
<input ${m} />
|
|
131
131
|
<span class="stx-radio-circle"></span>
|
|
132
|
-
${
|
|
132
|
+
${o?`<span class="stx-radio-label">${g(o)}</span>`:""}
|
|
133
133
|
</label>
|
|
134
|
-
`}function
|
|
134
|
+
`}function hr(e){let{value:t="#3498db",disabled:r=!1,label:n,presetColors:o=["#e74c3c","#f39c12","#27ae60","#3498db","#9b59b6","#1abc9c","#34495e","#000000"],id:a=P("color"),className:s,style:c}=e,l=y("stx-color-picker",r&&"stx-color-picker--disabled",s),d=x(c),p="";if(n)p+=`<label class="stx-color-picker-label" for="${a}">${g(n)}</label>`;if(p+=`<div class="stx-color-picker-input">
|
|
135
135
|
<input type="color" id="${a}" value="${g(t)}" ${r?"disabled":""} />
|
|
136
136
|
<span class="stx-color-picker-value">${g(t)}</span>
|
|
137
|
-
</div>`,
|
|
137
|
+
</div>`,o.length>0){p+='<div class="stx-color-picker-presets">';for(let m of o)p+=`<button class="stx-color-preset" style="background: ${g(m)}" data-color="${g(m)}" ${r?"disabled":""}></button>`;p+="</div>"}return`<div class="${l}" ${d?`style='${d}'`:""}>${p}</div>`}function wr(e){let{value:t,min:r,max:n,disabled:o=!1,label:a,placeholder:s="Select date",showClear:c=!0,id:l=P("date"),className:d,style:p}=e,m=y("stx-date-picker",o&&"stx-date-picker--disabled",d),u=x(p),w=t instanceof Date?t.toISOString().split("T")[0]:t||"",b=r instanceof Date?r.toISOString().split("T")[0]:r,S=n instanceof Date?n.toISOString().split("T")[0]:n,k=['type="date"',`id="${l}"`,w&&`value="${w}"`,b&&`min="${b}"`,S&&`max="${S}"`,o&&"disabled",`placeholder="${g(s)}"`].filter(Boolean).join(" "),A="";if(a)A+=`<label class="stx-date-picker-label" for="${l}">${g(a)}</label>`;return A+=`<div class="stx-date-picker-input">
|
|
138
138
|
<input ${k} />
|
|
139
139
|
${c&&w?'<button class="stx-date-picker-clear" type="button">×</button>':""}
|
|
140
|
-
</div>`,`<div class="${m}" ${u?`style='${u}'`:""}>${A}</div>`}function
|
|
141
|
-
<input type="text" id="${c}" value="${g(w)}" placeholder="${g(n)}" ${
|
|
140
|
+
</div>`,`<div class="${m}" ${u?`style='${u}'`:""}>${A}</div>`}function br(e){let{value:t="",disabled:r=!1,label:n,step:o=60,min:a,max:s,id:c=P("time"),className:l,style:d}=e,p=y("stx-time-picker",r&&"stx-time-picker--disabled",l),m=x(d),u=['type="time"',`id="${c}"`,t&&`value="${g(t)}"`,`step="${o}"`,a&&`min="${g(a)}"`,s&&`max="${g(s)}"`,r&&"disabled"].filter(Boolean).join(" "),w="";if(n)w+=`<label class="stx-time-picker-label" for="${c}">${g(n)}</label>`;return w+=`<input ${u} class="stx-time-picker-input" />`,`<div class="${p}" ${m?`style='${m}'`:""}>${w}</div>`}function xr(e){let{options:t,value:r="",placeholder:n="Search...",disabled:o=!1,label:a,loading:s=!1,id:c=P("autocomplete"),className:l,style:d}=e,p=y("stx-autocomplete",o&&"stx-autocomplete--disabled",l),m=x(d),u=t.find((S)=>S.value===r),w=u?u.label:r,b="";if(a)b+=`<label class="stx-autocomplete-label" for="${c}">${g(a)}</label>`;b+=`<div class="stx-autocomplete-input-wrapper">
|
|
141
|
+
<input type="text" id="${c}" value="${g(w)}" placeholder="${g(n)}" ${o?"disabled":""} autocomplete="off" class="stx-autocomplete-input" />
|
|
142
142
|
${s?'<span class="stx-autocomplete-spinner"></span>':""}
|
|
143
|
-
</div>`,b+='<ul class="stx-autocomplete-list">';for(let S of t)b+=`<li class="stx-autocomplete-item ${S.value===r?"stx-autocomplete-item--selected":""}" data-value="${g(S.value)}">${g(S.label)}</li>`;return b+="</ul>",`<div class="${p}" ${m?`style='${m}'`:""}>${b}</div>`}function
|
|
144
|
-
${
|
|
143
|
+
</div>`,b+='<ul class="stx-autocomplete-list">';for(let S of t)b+=`<li class="stx-autocomplete-item ${S.value===r?"stx-autocomplete-item--selected":""}" data-value="${g(S.value)}">${g(S.label)}</li>`;return b+="</ul>",`<div class="${p}" ${m?`style='${m}'`:""}>${b}</div>`}function yr(e){let{text:t,htmlFor:r,required:n=!1,size:o="medium",id:a=P("label"),className:s,style:c}=e,l=y("stx-label",`stx-label--${o}`,s),d=x(c);return`<label id="${a}" class="${l}" ${r?`for='${g(r)}'`:""} ${d?`style='${d}'`:""}>${g(t)}${n?'<span class="stx-label-required">*</span>':""}</label>`}function vr(e){let{src:t,alt:r="",width:n,height:o,objectFit:a="cover",fallback:s,loading:c="lazy",id:l=P("image"),className:d,style:p}=e,m=y("stx-image",d),u={objectFit:a};if(n)u.width=typeof n==="number"?`${n}px`:n;if(o)u.height=typeof o==="number"?`${o}px`:o;let w=[x(u),x(p)].filter(Boolean).join("; "),b=s?`onerror="this.src='${g(s)}'"`:"";return`<img id="${l}" class="${m}" src="${g(t)}" alt="${g(r)}" loading="${c}" ${w?`style='${w}'`:""} ${b} />`}function Pr(e){let{text:t,variant:r="default",size:n="medium",removable:o=!1,icon:a,id:s=P("chip"),className:c,style:l}=e,d=y("stx-chip",`stx-chip--${r}`,`stx-chip--${n}`,c),p=x(l),m="";if(a)m+=`<span class="stx-chip-icon">${a}</span>`;if(m+=`<span class="stx-chip-text">${g(t)}</span>`,o)m+='<button class="stx-chip-remove" type="button">×</button>';return`<span id="${s}" class="${d}" ${p?`style='${p}'`:""}>${m}</span>`}function Sr(e){let{text:t,position:r="top",delay:n=200,children:o,id:a=P("tooltip"),className:s,style:c}=e,l=y("stx-tooltip-wrapper",s),d=x(c);return`<div id="${a}" class="${l}" ${d?`style="${d}"`:""} data-tooltip="${g(t)}" data-position="${r}" data-delay="${n}">
|
|
144
|
+
${o}
|
|
145
145
|
<span class="stx-tooltip stx-tooltip--${r}">${g(t)}</span>
|
|
146
|
-
</div>`}function
|
|
147
|
-
<div class="stx-split-pane" style="${p}: ${r[0]}%">${
|
|
146
|
+
</div>`}function kr(e){let{direction:t="vertical",showScrollbar:r=!0,smooth:n=!0,height:o,width:a,children:s,id:c=P("scroll"),className:l,style:d}=e,p=y("stx-scroll-view",`stx-scroll-view--${t}`,!r&&"stx-scroll-view--hide-scrollbar",n&&"stx-scroll-view--smooth",l),m={};if(o)m.height=typeof o==="number"?`${o}px`:o;if(a)m.width=typeof a==="number"?`${a}px`:a;let u=[x(m),x(d)].filter(Boolean).join("; ");return`<div id="${c}" class="${p}" ${u?`style='${u}'`:""}>${s}</div>`}function Ar(e){let{direction:t="horizontal",sizes:r=[50,50],resizable:n=!0,children:o,id:a=P("split"),className:s,style:c}=e,l=y("stx-split-view",`stx-split-view--${t}`,n&&"stx-split-view--resizable",s),d=x(c),p=t==="horizontal"?"width":"height";return`<div id="${a}" class="${l}" ${d?`style="${d}"`:""}>
|
|
147
|
+
<div class="stx-split-pane" style="${p}: ${r[0]}%">${o[0]}</div>
|
|
148
148
|
${n?'<div class="stx-split-divider"></div>':""}
|
|
149
|
-
<div class="stx-split-pane" style="${p}: ${r[1]}%">${
|
|
150
|
-
</div>`}function
|
|
149
|
+
<div class="stx-split-pane" style="${p}: ${r[1]}%">${o[1]}</div>
|
|
150
|
+
</div>`}function Cr(e){let{items:t,multiple:r=!1,defaultOpen:n=[],id:o=P("accordion"),className:a,style:s}=e,c=y("stx-accordion",a),l=x(s),d="";return t.forEach((p,m)=>{let u=n.includes(m),w=y("stx-accordion-item",u&&"stx-accordion-item--open",p.disabled&&"stx-accordion-item--disabled");d+=`<div class="${w}" data-index="${m}">
|
|
151
151
|
<button class="stx-accordion-header" ${p.disabled?"disabled":""} aria-expanded="${u}" data-multiple="${r}">
|
|
152
152
|
<span class="stx-accordion-title">${g(p.title)}</span>
|
|
153
153
|
<span class="stx-accordion-icon">\u25BC</span>
|
|
@@ -155,7 +155,7 @@ import{f}from"./chunk-b7e07ybq.js";function Wt(){if(typeof Notification<"u"&&Not
|
|
|
155
155
|
<div class="stx-accordion-content" ${u?"":"hidden"}>
|
|
156
156
|
${g(p.content)}
|
|
157
157
|
</div>
|
|
158
|
-
</div>`}),`<div id="${
|
|
158
|
+
</div>`}),`<div id="${o}" class="${c}" ${l?`style='${l}'`:""}>${d}</div>`}function Ir(e){let{steps:t,currentStep:r,orientation:n="horizontal",id:o=P("stepper"),className:a,style:s}=e,c=y("stx-stepper",`stx-stepper--${n}`,a),l=x(s),d="";return t.forEach((p,m)=>{let u=y("stx-step",m<r&&"stx-step--completed",m===r&&"stx-step--active");if(d+=`<div class="${u}" data-step="${m}">
|
|
159
159
|
<div class="stx-step-indicator">
|
|
160
160
|
${m<r?"\u2713":m+1}
|
|
161
161
|
</div>
|
|
@@ -163,35 +163,35 @@ import{f}from"./chunk-b7e07ybq.js";function Wt(){if(typeof Notification<"u"&&Not
|
|
|
163
163
|
<div class="stx-step-label">${g(p.label)}</div>
|
|
164
164
|
${p.description?`<div class="stx-step-description">${g(p.description)}</div>`:""}
|
|
165
165
|
</div>
|
|
166
|
-
</div>`,m<t.length-1)d+='<div class="stx-step-connector"></div>'}),`<div id="${
|
|
167
|
-
<div class="stx-list-view-empty">${g(
|
|
168
|
-
</div>`;let p='<ul class="stx-list-view-items">';for(let m of t){let u=y("stx-list-view-item",m.selected&&"stx-list-view-item--selected");p+=`<li class="${u}" data-id="${g(m.id)}" ${r?'tabindex="0"':""}>${m.content}</li>`}return p+="</ul>",`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${p}</div>`}function
|
|
166
|
+
</div>`,m<t.length-1)d+='<div class="stx-step-connector"></div>'}),`<div id="${o}" class="${c}" ${l?`style='${l}'`:""}>${d}</div>`}function $r(e){let{open:t=!1,title:r,size:n="medium",closable:o=!0,children:a,footer:s,id:c=P("modal"),className:l,style:d}=e,p=y("stx-modal-component",`stx-modal-component--${n}`,l),m=x(d);if(!t)return`<div id="${c}" class="${p} stx-modal-component--hidden" ${m?`style='${m}'`:""}></div>`;let u='<div class="stx-modal-component-overlay">';if(u+='<div class="stx-modal-component-dialog">',r||o){if(u+='<div class="stx-modal-component-header">',r)u+=`<h3 class="stx-modal-component-title">${g(r)}</h3>`;if(o)u+='<button class="stx-modal-component-close">×</button>';u+="</div>"}if(u+=`<div class="stx-modal-component-body">${a}</div>`,s)u+=`<div class="stx-modal-component-footer">${s}</div>`;return u+="</div></div>",`<div id="${c}" class="${p}" ${m?`style='${m}'`:""}>${u}</div>`}function Tr(e){let{items:t,selectable:r=!1,multiSelect:n=!1,emptyMessage:o="No items",id:a=P("list"),className:s,style:c}=e,l=y("stx-list-view",r&&"stx-list-view--selectable",n&&"stx-list-view--multi",s),d=x(c);if(t.length===0)return`<div id="${a}" class="${l}" ${d?`style="${d}"`:""}>
|
|
167
|
+
<div class="stx-list-view-empty">${g(o)}</div>
|
|
168
|
+
</div>`;let p='<ul class="stx-list-view-items">';for(let m of t){let u=y("stx-list-view-item",m.selected&&"stx-list-view-item--selected");p+=`<li class="${u}" data-id="${g(m.id)}" ${r?'tabindex="0"':""}>${m.content}</li>`}return p+="</ul>",`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${p}</div>`}function Er(e){let{columns:t,data:r,striped:n=!1,bordered:o=!1,hoverable:a=!0,sortBy:s,sortOrder:c,id:l=P("table"),className:d,style:p}=e,m=y("stx-table",n&&"stx-table--striped",o&&"stx-table--bordered",a&&"stx-table--hoverable",d),u=x(p),w="<table>";w+="<thead><tr>";for(let b of t){let k=b.key===s?`stx-table-sorted stx-table-sorted--${c}`:"",A=b.sortable?'data-sortable="true"':"",B=b.width?`style="width: ${b.width}"`:"";w+=`<th class="${k}" ${A} ${B} data-key="${g(b.key)}">${g(b.label)}${b.sortable?'<span class="stx-table-sort-icon"></span>':""}</th>`}w+="</tr></thead>",w+="<tbody>";for(let b of r){w+="<tr>";for(let S of t){let k=b[S.key];w+=`<td>${k!=null?g(String(k)):""}</td>`}w+="</tr>"}return w+="</tbody></table>",`<div id="${l}" class="${m}" ${u?`style='${u}'`:""}>${w}</div>`}function Ne(e,t,r,n){let o=t.includes(e.key),a=r.includes(e.key),s=e.children&&e.children.length>0,l=`<div class="${y("stx-tree-node",a&&"stx-tree-node--selected",e.disabled&&"stx-tree-node--disabled")}" data-key="${g(e.key)}">`;if(l+='<div class="stx-tree-node-content">',s)l+=`<span class="stx-tree-toggle ${o?"stx-tree-toggle--expanded":""}">\u25B6</span>`;else l+='<span class="stx-tree-toggle-placeholder"></span>';if(n)l+=`<input type="checkbox" class="stx-tree-checkbox" ${a?"checked":""} ${e.disabled?"disabled":""} />`;if(e.icon)l+=`<span class="stx-tree-icon">${e.icon}</span>`;if(l+=`<span class="stx-tree-label">${g(e.label)}</span>`,l+="</div>",s&&o){l+='<div class="stx-tree-children">';for(let d of e.children)l+=Ne(d,t,r,n);l+="</div>"}return l+="</div>",l}function Mr(e){let{nodes:t,expandedKeys:r=[],selectedKeys:n=[],checkable:o=!1,id:a=P("tree"),className:s,style:c}=e,l=y("stx-tree-view",o&&"stx-tree-view--checkable",s),d=x(c),p="";for(let m of t)p+=Ne(m,r,n,o);return`<div id="${a}" class="${l}" role="tree" ${d?`style='${d}'`:""}>${p}</div>`}function Dr(e){let{columns:t,data:r,pagination:n,selectable:o=!1,id:a=P("datagrid"),className:s,style:c}=e,l=y("stx-data-grid",o&&"stx-data-grid--selectable",s),d=x(c),p='<div class="stx-data-grid-table-wrapper">';if(p+='<table class="stx-data-grid-table">',p+="<thead><tr>",o)p+='<th class="stx-data-grid-select-all"><input type="checkbox" /></th>';for(let m of t){let u=m.width?`style="width: ${m.width}"`:"";p+=`<th ${u}>
|
|
169
169
|
<div class="stx-data-grid-header-cell">
|
|
170
170
|
<span>${g(m.label)}</span>
|
|
171
171
|
${m.sortable?'<button class="stx-data-grid-sort">\u21C5</button>':""}
|
|
172
172
|
${m.filterable?'<button class="stx-data-grid-filter">\u22BB</button>':""}
|
|
173
173
|
</div>
|
|
174
|
-
</th>`}p+="</tr></thead>",p+="<tbody>";for(let m of r){if(p+="<tr>",
|
|
174
|
+
</th>`}p+="</tr></thead>",p+="<tbody>";for(let m of r){if(p+="<tr>",o)p+='<td class="stx-data-grid-select"><input type="checkbox" /></td>';for(let u of t){let w=m[u.key];p+=`<td>${w!=null?g(String(w)):""}</td>`}p+="</tr>"}if(p+="</tbody></table></div>",n){let m=Math.ceil(n.total/n.pageSize);p+=`<div class="stx-data-grid-pagination">
|
|
175
175
|
<span class="stx-data-grid-page-info">Page ${n.page} of ${m} (${n.total} items)</span>
|
|
176
176
|
<div class="stx-data-grid-page-buttons">
|
|
177
177
|
<button class="stx-data-grid-page-btn" ${n.page<=1?"disabled":""}>\u25C0</button>
|
|
178
178
|
<button class="stx-data-grid-page-btn" ${n.page>=m?"disabled":""}>\u25B6</button>
|
|
179
179
|
</div>
|
|
180
|
-
</div>`}return`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${p}</div>`}function
|
|
180
|
+
</div>`}return`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${p}</div>`}function Br(e){let{type:t,data:r,options:n={},width:o="100%",height:a=300,id:s=P("chart"),className:c,style:l}=e,d=y("stx-chart",`stx-chart--${t}`,c),p={width:typeof o==="number"?`${o}px`:o,height:typeof a==="number"?`${a}px`:a},m=[x(p),x(l)].filter(Boolean).join("; "),u=JSON.stringify({type:t,data:r,options:n});return`<div id="${s}" class="${d}" style="${m}" data-chart='${g(u)}'>
|
|
181
181
|
<div class="stx-chart-placeholder">
|
|
182
182
|
${n.title?`<div class="stx-chart-title">${g(n.title)}</div>`:""}
|
|
183
183
|
<div class="stx-chart-type">${t.charAt(0).toUpperCase()+t.slice(1)} Chart</div>
|
|
184
184
|
<div class="stx-chart-info">${r.datasets.length} dataset(s), ${r.labels.length} labels</div>
|
|
185
185
|
</div>
|
|
186
|
-
</div>`}function
|
|
187
|
-
`),k="";if(
|
|
186
|
+
</div>`}function Or(e){let{value:t="",language:r="plaintext",theme:n="dark",lineNumbers:o=!0,readOnly:a=!1,height:s=300,tabSize:c=2,wordWrap:l=!1,id:d=P("code"),className:p,style:m}=e,u=y("stx-code-editor",`stx-code-editor--${n}`,o&&"stx-code-editor--line-numbers",a&&"stx-code-editor--readonly",l&&"stx-code-editor--wrap",p),w={height:typeof s==="number"?`${s}px`:s},b=[x(w),x(m)].filter(Boolean).join("; "),S=t.split(`
|
|
187
|
+
`),k="";if(o){k+='<div class="stx-code-editor-gutter">';for(let A=1;A<=S.length;A++)k+=`<div class="stx-code-editor-line-number">${A}</div>`;k+="</div>"}return k+=`<pre class="stx-code-editor-content"><code class="language-${g(r)}">${g(t)}</code></pre>`,`<div id="${d}" class="${u}" style="${b}" data-language="${g(r)}" data-tab-size="${c}">${k}</div>`}function Rr(e){let{src:t,type:r="video",poster:n,autoplay:o=!1,loop:a=!1,muted:s=!1,controls:c=!0,width:l,height:d,id:p=P("media"),className:m,style:u}=e,w=y("stx-media-player",`stx-media-player--${r}`,m),b={};if(l)b.width=typeof l==="number"?`${l}px`:l;if(d)b.height=typeof d==="number"?`${d}px`:d;let S=[x(b),x(u)].filter(Boolean).join("; "),k=[`id="${p}-media"`,`src="${g(t)}"`,c&&"controls",o&&"autoplay",a&&"loop",s&&"muted",r==="video"&&n&&`poster="${g(n)}"`].filter(Boolean).join(" "),A=r==="video"?`<video ${k}>Your browser does not support the video tag.</video>`:`<audio ${k}>Your browser does not support the audio tag.</audio>`;return`<div id="${p}" class="${w}" ${S?`style='${S}'`:""}>${A}</div>`}function Lr(e){if(e===void 0)return"";let t=["B","KB","MB","GB"],r=e,n=0;while(r>=1024&&n<t.length-1)r/=1024,n++;return`${r.toFixed(1)} ${t[n]}`}function _r(e){let{files:t,viewMode:r="list",showHidden:n=!1,selectable:o=!0,id:a=P("files"),className:s,style:c}=e,l=y("stx-file-explorer",`stx-file-explorer--${r}`,s),d=x(c),p=n?t:t.filter((u)=>!u.name.startsWith(".")),m="";if(r==="list"){m='<table class="stx-file-explorer-list"><thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>';for(let u of p){let w=u.icon||(u.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4"),b=u.type==="file"?Lr(u.size):"",S=u.modified?u.modified.toLocaleDateString():"";m+=`<tr class="stx-file-explorer-item ${o?"stx-file-explorer-item--selectable":""}" data-path="${g(u.path)}" data-type="${u.type}">
|
|
188
188
|
<td><span class="stx-file-explorer-icon">${w}</span>${g(u.name)}</td>
|
|
189
189
|
<td>${b}</td>
|
|
190
190
|
<td>${S}</td>
|
|
191
|
-
</tr>`}m+="</tbody></table>"}else{m='<div class="stx-file-explorer-grid">';for(let u of p){let w=u.icon||(u.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");m+=`<div class="stx-file-explorer-item ${
|
|
191
|
+
</tr>`}m+="</tbody></table>"}else{m='<div class="stx-file-explorer-grid">';for(let u of p){let w=u.icon||(u.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");m+=`<div class="stx-file-explorer-item ${o?"stx-file-explorer-item--selectable":""}" data-path="${g(u.path)}" data-type="${u.type}">
|
|
192
192
|
<div class="stx-file-explorer-icon">${w}</div>
|
|
193
193
|
<div class="stx-file-explorer-name">${g(u.name)}</div>
|
|
194
|
-
</div>`}m+="</div>"}return`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${m}</div>`}function
|
|
194
|
+
</div>`}m+="</div>"}return`<div id="${a}" class="${l}" ${d?`style='${d}'`:""}>${m}</div>`}function Nr(e){let{url:t,width:r="100%",height:n=400,sandbox:o=!0,allowScripts:a=!0,id:s=P("webview"),className:c,style:l}=e,d=y("stx-webview",c),p={width:typeof r==="number"?`${r}px`:r,height:typeof n==="number"?`${n}px`:n},m=[x(p),x(l)].filter(Boolean).join("; "),u=[];if(o){if(u.push("allow-same-origin"),a)u.push("allow-scripts")}let w=o?`sandbox="${u.join(" ")}"`:"";return`<iframe id="${s}" class="${d}" src="${g(t)}" style="${m}" ${w} loading="lazy" frameborder="0"></iframe>`}var Fr=["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"],Wr=`
|
|
195
195
|
/* Button */
|
|
196
196
|
.stx-button {
|
|
197
197
|
display: inline-flex;
|
|
@@ -548,18 +548,18 @@ import{f}from"./chunk-b7e07ybq.js";function Wt(){if(typeof Notification<"u"&&Not
|
|
|
548
548
|
.stx-chip--warning { background: #3a2a1a; }
|
|
549
549
|
.stx-chip--error { background: #3a1a1a; }
|
|
550
550
|
}
|
|
551
|
-
`;function
|
|
551
|
+
`;function zr(){return!1}function me(){return typeof window<"u"&&typeof document<"u"}var F=[];function Hr(){return`modal-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function Ur(e){switch(e){case"info":return"ℹ";case"warning":return"⚠";case"error":return"✖";case"success":return"✔";case"question":return"❓";default:return"ℹ"}}function re(e){if(e==="question")return[{label:"No",style:"default"},{label:"Yes",style:"primary"}];return[{label:"OK",style:"primary"}]}function qr(e){let{options:t}=e,r=Ur(t.type),n=t.buttons||re(t.type),o=t.type||"info",a="";return n.forEach((s,c)=>{let l=s.style==="destructive"?"destructive":s.style==="primary"?"primary":"default",d=c===(t.defaultButton??n.length-1)?"autofocus":"";a+=`<button class="stx-modal-btn ${l}" data-index="${c}" ${d}>${s.label}</button>`}),`
|
|
552
552
|
<div class="stx-modal-overlay" data-modal-id="${e.id}">
|
|
553
|
-
<div class="stx-modal ${
|
|
553
|
+
<div class="stx-modal ${o}" role="dialog" aria-modal="true" aria-labelledby="${e.id}-title">
|
|
554
554
|
<div class="stx-modal-icon">${r}</div>
|
|
555
555
|
<div class="stx-modal-content">
|
|
556
|
-
${t.title?`<h2 id="${e.id}-title" class="stx-modal-title">${
|
|
557
|
-
<p class="stx-modal-message">${
|
|
556
|
+
${t.title?`<h2 id="${e.id}-title" class="stx-modal-title">${Fe(t.title)}</h2>`:""}
|
|
557
|
+
<p class="stx-modal-message">${Fe(t.message)}</p>
|
|
558
558
|
</div>
|
|
559
559
|
<div class="stx-modal-buttons">${a}</div>
|
|
560
560
|
</div>
|
|
561
561
|
</div>
|
|
562
|
-
`}function
|
|
562
|
+
`}function Fe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function M(e,t,r=!1){let n=F.indexOf(e);if(n>-1)F.splice(n,1);if(e.element&&me())e.element.remove();let a=(e.options.buttons||re(e.options.type))[t];if(a?.action)a.action();e.resolve({buttonIndex:t,cancelled:r})}async function H(e){let t=zr(),r=Hr();return new Promise((n)=>{let o={id:r,options:e,resolve:n};if(F.push(o),t)console.log(`[stx-modal] Showing native modal: ${e.title||"Modal"}`),setTimeout(()=>{M(o,e.defaultButton??0,!1)},0);else if(me())try{let a=document.createElement("div");a.innerHTML=qr(o);let s=a.firstElementChild;if(!s){console.log(`[stx-modal] ${e.type?.toUpperCase()||"INFO"}: ${e.title||"Modal"}`),console.log(`[stx-modal] ${e.message}`),setTimeout(()=>{M(o,e.defaultButton??0,!1)},0);return}o.element=s;try{document.body.appendChild(s)}catch{console.log(`[stx-modal] ${e.type?.toUpperCase()||"INFO"}: ${e.title||"Modal"}`),console.log(`[stx-modal] ${e.message}`),setTimeout(()=>{M(o,e.defaultButton??0,!1)},0);return}try{s.querySelectorAll(".stx-modal-btn").forEach((c)=>{c.addEventListener("click",()=>{let l=Number.parseInt(c.dataset.index||"0",10);M(o,l,!1)})})}catch{}try{s.addEventListener("click",(c)=>{if(c.target===s){let l=e.cancelButton??0;M(o,l,!0)}})}catch{}try{let c=(l)=>{if(l.key==="Escape"){let d=e.cancelButton??0;M(o,d,!0),document.removeEventListener("keydown",c)}else if(l.key==="Enter"){let d=e.defaultButton??(e.buttons||re(e.type)).length-1;M(o,d,!1),document.removeEventListener("keydown",c)}};document.addEventListener("keydown",c)}catch{}try{let c=s.querySelector(".stx-modal-btn[autofocus]");if(c)c.focus()}catch{}if(typeof process<"u"&&process.env.BUN_TEST)setTimeout(()=>{M(o,e.defaultButton??0,!1)},0)}catch{console.log(`[stx-modal] ${e.type?.toUpperCase()||"INFO"}: ${e.title||"Modal"}`),console.log(`[stx-modal] ${e.message}`),setTimeout(()=>{M(o,e.defaultButton??0,!1)},0)}else{console.log(`[stx-modal] ${e.type?.toUpperCase()||"INFO"}: ${e.title||"Modal"}`),console.log(`[stx-modal] ${e.message}`);let a=e.buttons||re(e.type);console.log(`[stx-modal] Buttons: ${a.map((s)=>s.label).join(", ")}`),setTimeout(()=>{M(o,e.defaultButton??0,!1)},0)}})}async function We(e,t){return H({title:e,message:t,type:"info"})}async function Vr(e,t){return H({title:e,message:t,type:"warning"})}async function jr(e,t){return H({title:e,message:t,type:"error"})}async function Kr(e,t){return H({title:e,message:t,type:"success"})}async function ze(e,t){return H({title:e,message:t,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function Gr(e,t="Confirm"){return(await ze(t,e)).buttonIndex===1}async function Yr(e,t="Alert"){await We(t,e)}async function Xr(e,t="",r="Input"){if(me()&&typeof window.prompt==="function")return window.prompt(e,t);return console.log(`[stx-modal] PROMPT: ${r}`),console.log(`[stx-modal] ${e}`),console.log(`[stx-modal] Default: ${t}`),t}function Jr(){return F.length}function Qr(){while(F.length>0){let e=F[F.length-1];M(e,0,!0)}}var Zr=`
|
|
563
563
|
.stx-modal-overlay {
|
|
564
564
|
position: fixed;
|
|
565
565
|
inset: 0;
|
|
@@ -691,7 +691,7 @@ import{f}from"./chunk-b7e07ybq.js";function Wt(){if(typeof Notification<"u"&&Not
|
|
|
691
691
|
background: #555;
|
|
692
692
|
}
|
|
693
693
|
}
|
|
694
|
-
`;import
|
|
694
|
+
`;import He from"process";function en(){if(He.platform)return He.platform;return"unknown"}function qe(){if(typeof window<"u"&&window.craft?.tray)return!0;return!1}function Ve(e,t){if(e.type==="separator")return{id:`sep-${t}`,label:"",type:"separator"};let r={id:`item-${t}-${e.label.replace(/\s+/g,"-").toLowerCase()}`,label:e.label,type:e.type||"normal",enabled:e.enabled!==!1};if(e.accelerator)r.shortcut=e.accelerator;if(e.type==="checkbox")r.checked=e.checked||!1;if(e.type==="submenu"&&e.submenu)r.submenu=e.submenu.map((n,o)=>Ve(n,o));return r}function ge(e){return e.map((t,r)=>Ve(t,r))}function je(e,t=0){if(e.type==="separator")return'<hr class="stx-tray-separator" />';let r=" ".repeat(t),n=e.enabled===!1?"disabled":"",o=e.checked?"\u2713 ":"",a=e.accelerator?`<span class="accelerator">${e.accelerator}</span>`:"",s=`${r}<div class="stx-tray-item ${n}" data-action="${e.label}">`;if(s+=`<span class="label">${o}${e.label}</span>${a}`,e.type==="submenu"&&e.submenu){s+='<span class="arrow">\u25B8</span>',s+='<div class="stx-tray-submenu">';for(let c of e.submenu)s+=je(c,t+1);s+="</div>"}return s+="</div>",s}function tn(e){let t='<div class="stx-tray-menu">';for(let r of e)t+=je(r);return t+="</div>",t}var L=new Map;function rn(){return`tray-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var Ue=!1;function nn(){if(Ue||typeof window>"u")return;window.addEventListener("craft:tray:menu",(e)=>{let{action:t}=e.detail;for(let r of L.values()){let n=r.handlers.get(t);if(n){n();break}}}),Ue=!0}async function Ke(e={}){let t=rn(),r=en(),n=qe(),o={icon:e.icon||"",tooltip:e.tooltip||"stx Application",menu:e.menu||[],visible:!0},a=new Map;for(let c of e.menu||[]){if(c.type!=="separator"&&c.onClick)a.set(c.label,c.onClick);if(c.type==="submenu"&&c.submenu){for(let l of c.submenu)if(l.type!=="separator"&&l.onClick)a.set(l.label,l.onClick)}}if(L.set(t,{state:o,handlers:a}),n){nn();let c=window;try{if(o.tooltip)await c.craft.tray.setTitle({title:o.tooltip}),await c.craft.tray.setTooltip({tooltip:o.tooltip});if(o.icon)await c.craft.tray.setIcon({icon:o.icon});let l=ge(o.menu);await c.craft.tray.setMenu({items:l}),console.log(`[stx-tray] Native tray created for ${r}`)}catch(l){console.warn("[stx-tray] Failed to create native tray:",l)}}else console.log("[stx-tray] Created simulated tray (not in Craft window)"),console.log(`[stx-tray] ID: ${t}`),console.log(`[stx-tray] Tooltip: ${o.tooltip}`),console.log(`[stx-tray] Menu items: ${o.menu.length}`);return{id:t,setIcon:(c)=>{if(o.icon=c,n)window.craft.tray.setIcon({icon:c}).catch((d)=>{console.warn("[stx-tray] Failed to set icon:",d)});console.log(`[stx-tray:${t}] Icon updated`)},setTooltip:(c)=>{if(o.tooltip=c,n)window.craft.tray.setTooltip({tooltip:c}).catch((d)=>{console.warn("[stx-tray] Failed to set tooltip:",d)});console.log(`[stx-tray:${t}] Tooltip: ${c}`)},setMenu:(c)=>{o.menu=c,a.clear();for(let l of c){if(l.type!=="separator"&&l.onClick)a.set(l.label,l.onClick);if(l.type==="submenu"&&l.submenu){for(let d of l.submenu)if(d.type!=="separator"&&d.onClick)a.set(d.label,d.onClick)}}if(n){let l=window,d=ge(c);l.craft.tray.setMenu({items:d}).catch((p)=>{console.warn("[stx-tray] Failed to set menu:",p)})}console.log(`[stx-tray:${t}] Menu updated (${c.length} items)`)},destroy:()=>{if(o.visible=!1,L.delete(t),n)window.craft.tray.destroy?.().catch((l)=>{console.warn("[stx-tray] Failed to destroy tray:",l)});console.log(`[stx-tray:${t}] Destroyed`)}}}var on=Ke;function an(){return Array.from(L.keys())}function sn(e){let t=L.get(e);if(!t)return null;let r=qe();return{id:e,setIcon:(n)=>{if(t.state.icon=n,r)window.craft.tray.setIcon({icon:n}).catch(()=>{})},setTooltip:(n)=>{if(t.state.tooltip=n,r)window.craft.tray.setTooltip({tooltip:n}).catch(()=>{})},setMenu:(n)=>{if(t.state.menu=n,r){let o=window,a=ge(n);o.craft.tray.setMenu({items:a}).catch(()=>{})}},destroy:()=>{if(L.delete(e),r)window.craft.tray.destroy?.().catch(()=>{})}}}function cn(e,t){let r=L.get(e);if(!r)return!1;let n=r.handlers.get(t);if(n)return n(),!0;return!1}function ln(e){let t=L.get(e);if(!t)return null;return tn(t.state.menu)}function dn(){return`
|
|
695
695
|
// STX Desktop Tray Bridge
|
|
696
696
|
// Provides convenient wrappers around window.craft.tray APIs
|
|
697
697
|
window.stxTray = {
|
|
@@ -704,7 +704,7 @@ window.stxTray = {
|
|
|
704
704
|
// Check if tray is available
|
|
705
705
|
isAvailable: () => typeof window.craft?.tray !== 'undefined',
|
|
706
706
|
};
|
|
707
|
-
`}var
|
|
707
|
+
`}var un=`
|
|
708
708
|
.stx-tray-menu {
|
|
709
709
|
background: #2d2d2d;
|
|
710
710
|
border-radius: 8px;
|
|
@@ -770,11 +770,11 @@ window.stxTray = {
|
|
|
770
770
|
.stx-tray-item:hover > .stx-tray-submenu {
|
|
771
771
|
display: block;
|
|
772
772
|
}
|
|
773
|
-
`;function
|
|
773
|
+
`;function Ge(e){let t=new Set(e.properties??[]);if(e.canChooseDirectories)t.add("openDirectory");if(e.canChooseFiles)t.add("openFile");if(e.multiSelections)t.add("multiSelections");if(e.showHiddenFiles)t.add("showHiddenFiles");if(e.canCreateDirectories)t.add("createDirectory");return{...e,properties:[...t]}}function pn(){if(typeof window>"u")return;return window.craft?.dialog}var fn={error:"critical",warning:"warning",question:"info",info:"info",none:"info"};function mn(e){let t=[e.title?e.message:"",e.detail??""].filter(Boolean).join(`
|
|
774
774
|
|
|
775
|
-
`);return{title:e.title||e.message,message:t||void 0,style:
|
|
775
|
+
`);return{title:e.title||e.message,message:t||void 0,style:fn[e.type??"none"]??"info",buttons:e.buttons}}function Ye(e,t){if(typeof e==="number"&&Number.isFinite(e))return{response:e};if(e&&typeof e==="object"){let n=e;if(typeof n.response==="number")return{response:n.response};if(typeof n.buttonIndex==="number")return{response:n.buttonIndex}}let r=t.buttons??["OK"];return{response:t.cancelButton??Math.max(0,r.length-1)}}function he(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function gn(e={}){if(he())return await window.craft.dialog.showOpenDialog(Ge(e));return new Promise((t)=>{if(typeof document>"u"){t({canceled:!0,filePaths:[]});return}let r=new Set(Ge(e).properties),n=document.createElement("input");if(n.type="file",n.multiple=r.has("multiSelections"),e.filters?.length){let o=e.filters.flatMap((a)=>a.extensions.map((s)=>`.${s}`));n.accept=o.join(",")}if(r.has("openDirectory")&&!r.has("openFile"))n.webkitdirectory=!0;n.onchange=()=>{let o=Array.from(n.files||[]);if(o.length===0)t({canceled:!0,filePaths:[]});else{let a=o.map((s)=>s.name);t({canceled:!1,filePaths:a})}},n.oncancel=()=>{t({canceled:!0,filePaths:[]})},n.click()})}async function hn(e={}){if(he()){let r=window;try{return await r.craft.dialog.showSaveDialog(e)}catch(n){console.warn("[stx-dialog] Failed to show native save dialog:",n)}}if(typeof window<"u"&&"showSaveFilePicker"in window)try{let r=e.filters?.map((o)=>({description:o.name,accept:{"*/*":o.extensions.map((a)=>`.${a}`)}}));return{canceled:!1,filePath:(await window.showSaveFilePicker({suggestedName:e.defaultPath,types:r})).name}}catch(r){return{canceled:!0}}console.warn("[stx-dialog] Save dialog not available, using prompt fallback");let t=prompt("Enter filename:",e.defaultPath||"file.txt");if(t)return{canceled:!1,filePath:t};return{canceled:!0}}async function K(e){let t=pn();if(typeof t?.showMessageBox==="function")try{return Ye(await t.showMessageBox(e),e)}catch(c){console.warn("[stx-dialog] Failed to show native message box:",c)}else if(typeof t?.showAlert==="function")try{return Ye(await t.showAlert(mn(e)),e)}catch(c){console.warn("[stx-dialog] Failed to show native alert:",c)}let r=e.buttons||["OK"],n=e.detail?`
|
|
776
776
|
|
|
777
|
-
${e.detail}`:"",
|
|
777
|
+
${e.detail}`:"",o=`${e.message}${n}`;if(r.length===1)return alert(o),{response:0};let a=e.cancelButton??r.length-1,s=e.defaultButton!==void 0&&e.defaultButton!==a?e.defaultButton:r.findIndex((c,l)=>l!==a);if(r.length>2)console.warn(`[stx-dialog] ${r.length} buttons requested; a browser confirm offers two. Reachable: "${r[s]}" and "${r[a]}".`);return{response:confirm(o)?s:a}}async function wn(e={}){if(he()){let t=window;try{return await t.craft.dialog.showColorPicker(e)}catch(r){console.warn("[stx-dialog] Failed to show native color picker:",r)}}return new Promise((t)=>{if(typeof document>"u"){t({canceled:!0});return}let r=document.createElement("input");r.type="color",r.value=e.color||"#000000",r.onchange=()=>{t({canceled:!1,color:r.value})},r.oncancel=()=>{t({canceled:!0})},r.click()})}async function bn(e,t){await K({type:"info",title:t||"Alert",message:e,buttons:["OK"]})}async function xn(e,t){return(await K({type:"question",title:t||"Confirm",message:e,buttons:["OK","Cancel"],defaultButton:0,cancelButton:1})).response===0}async function yn(e,t){await K({type:"error",title:t||"Error",message:e,buttons:["OK"]})}async function vn(e,t){await K({type:"warning",title:t||"Warning",message:e,buttons:["OK"]})}function Pn(){return`
|
|
778
778
|
// STX Desktop Dialog Bridge
|
|
779
779
|
// Provides convenient wrappers around window.craft.dialog APIs
|
|
780
780
|
window.stxDialog = {
|
|
@@ -853,7 +853,7 @@ window.stxDialog = {
|
|
|
853
853
|
// Check if dialog is available
|
|
854
854
|
isAvailable: () => typeof window.craft?.dialog !== 'undefined',
|
|
855
855
|
};
|
|
856
|
-
`}import _ from"process";import{existsSync as
|
|
856
|
+
`}import _ from"process";import{existsSync as Xe}from"fs";import{basename as Je,dirname as we}from"path";import{craftBinaryNotFoundMessage as Qe,macOSRuntimeExecutablePath as Sn,resolveCraftBinary as kn}from"craft-native";var U={};function An(e){U={...U,...e}}function Cn(){return{...U}}function In(){U={}}function be(e){if(!e.sidebarConfig)return;let t={...e.sidebarConfig};if(t.variant==="desktop")t.material=t.material??"sidebar",t.backgroundEffect=t.backgroundEffect??"shimmer",t.allowsVibrancy=t.allowsVibrancy??!0;return t}function ne(){let e=we(_.execPath),t=we(e),r=we(t),n=Je(e)==="MacOS"&&Je(t)==="Contents"&&r.endsWith(".app"),o=[_.env.CRAFT_BINARY_PATH,U.craftBinaryPath,...U.additionalSearchPaths||[]];for(let a of o)if(a&&Xe(a))return a;if(n){let a=Sn(r);if(!Xe(a))throw Error("Packaged native runtime is missing. Build with packageApp({ macos: { nativeRuntimePath } }).");return a}return kn()}var T=new Map;function xe(e){let t=T.get(e);if(!t||t.closed)return;t.closed=!0;for(let r of t.closeListeners??[])try{r()}catch(n){console.warn(`[stx/desktop] window ${e} close listener threw:`,n)}t.closeListeners?.clear()}var $n=50;async function ye(e,t){let r=t.show().then(()=>({failed:!1}),(o)=>({failed:!0,error:o})),n=await Promise.race([r,new Promise((o)=>setTimeout(()=>o(null),$n))]);if(n?.failed)throw n.error;r.then(()=>xe(e))}function Tn(){return Array.from(T.keys())}function En(e){let t=T.get(e);if(!t)return null;return oe(e,t.app)}function Mn(){for(let[e,t]of T)try{t.app?.close?.()}catch(r){console.warn(`Failed to close window ${e}:`,r)}T.clear()}function oe(e,t){return{id:e,show:()=>{console.log(`[stx/desktop] Window ${e} shown`)},hide:()=>{console.log("[stx/desktop] To hide window, use window.craft.window.hide() from inside the webview")},close:()=>{let r=T.get(e);if(r?.app)r.app.close(),xe(e),T.delete(e),console.log(`[stx/desktop] Window ${e} closed`)},onClosed:(r)=>{let n=T.get(e);if(!n||n.closed)return queueMicrotask(r),()=>{};return n.closeListeners??=new Set,n.closeListeners.add(r),()=>n.closeListeners?.delete(r)},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:(r)=>{console.log(`[stx/desktop] To set title, use window.craft.window.setTitle({ title: "${r}" }) from inside the webview`)},loadURL:(r)=>{console.log(`[stx/desktop] To navigate, use window.location.href = "${r}" from inside the webview`)},reload:()=>{console.log("[stx/desktop] To reload, use window.craft.window.reload() from inside the webview")}}}function ve(e,t={}){let r=["--url",e,"--title",t.title||"stx Desktop","--width",String(t.width??1200),"--height",String(t.height??800)];if(t.headless)r.push("--headless");if(t.darkMode)r.push("--dark");if(t.hotReload)r.push("--hot-reload");if(t.resizable===!1)r.push("--no-resize");if(t.frameless)r.push("--frameless");if(t.alwaysOnTop)r.push("--always-on-top");if(t.titlebarHidden)r.push("--titlebar-hidden");if(t.systemTray)r.push("--system-tray");if(t.hideDockIcon)r.push("--hide-dock-icon");if(t.devTools===!1)r.push("--no-devtools");if(t.nativeSidebar)r.push("--native-sidebar");if(t.sidebarWidth!==void 0)r.push("--sidebar-width",String(t.sidebarWidth));let n=be(t);if(n)r.push("--sidebar-config",JSON.stringify(n));return r}async function Dn(e,t={}){let r=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=ne();try{let{createApp:o}=await import("craft-native"),a=o({url:e,craftPath:n,window:{title:t.title||"stx Desktop",headless:t.headless??!1,width:t.width??1200,height:t.height??800,darkMode:t.darkMode??!1,hotReload:t.hotReload??!1,resizable:t.resizable??!0,frameless:t.frameless??!1,alwaysOnTop:t.alwaysOnTop??!1,titlebarHidden:t.titlebarHidden??!1,systemTray:t.systemTray??!1,hideDockIcon:t.hideDockIcon??!1,devTools:t.devTools??!1,nativeSidebar:t.nativeSidebar??!1,sidebarWidth:t.sidebarWidth,sidebarConfig:be(t)}});return T.set(r,{app:a,url:e,options:t}),await ye(r,a),oe(r,a)}catch{try{let{spawn:o}=await import("child_process"),a=o(n,ve(e,t),{stdio:"inherit"});a.on("error",(c)=>{console.error(c.code==="ENOENT"?Qe(n):`craft child error: ${c.message}`)});let s={close:()=>a.kill()};return T.set(r,{app:s,url:e,options:t}),a.on("exit",()=>xe(r)),oe(r,s)}catch(o){return console.error("Failed to spawn craft binary:",o.message),null}}}async function Bn(e,t={}){let r=`http://localhost:${e}/`;if(_.env.NODE_ENV==="test"||_.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:o}=await import("craft-native");console.log("\u26A1 Opening native window via craft-native\u2026");let a=!t.nativeSidebar,s=be(t),c=o({url:r,craftPath:ne(),window:{title:t.title||"stx Development",width:t.width||1400,height:t.height||900,resizable:!0,systemTray:a,darkMode:t.darkMode??!0,hotReload:t.hotReload??!0,headless:t.headless??!1,devTools:!0,titlebarHidden:t.titlebarHidden??!1,nativeSidebar:t.nativeSidebar??!1,sidebarWidth:t.sidebarWidth??260,sidebarConfig:s}}),l=`dev-window-${e}`;return T.set(l,{app:c,url:r,options:t}),await ye(l,c),console.log(`\u2713 Native window opened at ${r}`),!0}catch{let o=ne();try{console.log(`\u26A1 Opening native window via craft binary (${o})\u2026`);let{spawn:a}=await import("child_process"),s=a(o,ve(r,{title:"stx Development",width:1400,height:900,hotReload:!0,...t}),{stdio:"inherit"});s.on("exit",()=>_.exit(0)),s.on("error",(l)=>{console.warn(l.code==="ENOENT"?Qe(o):`craft child error: ${l.message}`)});let c=`dev-window-${e}`;return T.set(c,{app:{close:()=>s.kill()},url:r,options:t}),console.log(`\u2713 Native window opened at ${r}`),!0}catch(a){console.warn("\u26A0 Could not spawn craft binary:",a.message)}if(_.env.NODE_ENV==="test"||_.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:a}=await import("child_process"),s=_.platform;return a(s==="darwin"?"open":s==="win32"?"cmd":"xdg-open",s==="win32"?["/c","start",r]:[r],{detached:!0,stdio:"ignore"}).unref(),console.log(`\u2713 Browser opened at ${r}`),!0}catch(a){return console.error("Could not open browser:",a),console.log(`Please open manually: ${r}`),!1}}}async function On(e,t={}){let{title:r="stx Desktop",width:n=1200,height:o=800,darkMode:a=!1,hotReload:s=!1,resizable:c=!0,frameless:l=!1,alwaysOnTop:d=!1}=t;try{let{createApp:p}=await import("craft-native"),m=ne(),u=p({html:e,craftPath:m,window:{title:r,headless:t.headless??!1,width:n,height:o,darkMode:a,hotReload:s,resizable:c,frameless:l,alwaysOnTop:d}}),w=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return T.set(w,{app:u,url:"html-content",options:t}),await ye(w,u),oe(w,u)}catch(p){return console.error("Failed to create window with HTML:",p),null}}function Rn(){try{return f.resolve("craft-native"),!0}catch{return!1}}function Ln(){return`
|
|
857
857
|
// STX Desktop Window Bridge
|
|
858
858
|
// Provides convenient wrappers around window.craft APIs
|
|
859
859
|
window.stxWindow = {
|
|
@@ -894,7 +894,7 @@ window.stxWindow = {
|
|
|
894
894
|
|
|
895
895
|
// Expose as global for backwards compatibility
|
|
896
896
|
window.desktop = window.stxWindow;
|
|
897
|
-
`}import{accessSync as
|
|
897
|
+
`}import{accessSync as _n,closeSync as Nn,constants as Fn,openSync as Wn,readSync as zn,realpathSync as Hn}from"fs";import{resolveCraftBinary as Un}from"craft-native";import{macOSRuntimeExecutablePath as Vn,pack as jn,packageApp as Kn}from"craft-native";import{craftBinaryNotFoundMessage as Gn,resolveCraftBinary as Yn}from"craft-native";function qn(e){let t=Un(e),r=t;if(t==="craft"){let l=Bun.spawnSync(["pantry","which","craft","--resolve"]);if(l.exitCode!==0){let d=`${l.stderr}${l.stdout}`.trim();throw Error(`Cannot locate Craft's native executable. Install Craft through Pantry and use Pantry 0.11.114 or newer.${d?` ${d}`:""}`)}r=l.stdout.toString().trim()}let n=Hn(r);_n(n,Fn.X_OK);let o=Wn(n,"r"),a=Buffer.alloc(4);try{zn(o,a,0,a.length,0)}finally{Nn(o)}let s=a.readUInt32BE(0);if(!(process.platform==="darwin"?[4277009102,3472551422,4277009103,3489328638,3405691582,3199925962,3405691583,3216703178].includes(s):process.platform==="win32"?a[0]===77&&a[1]===90:s===2135247942))throw Error(`Craft packaging requires a native executable, received: ${n}`);return n}import G from"process";import{spawn as Xn}from"child_process";import{AutoUpdater as Ze,canReplaceBundle as Jn,clearQuarantine as Qn,extractBundle as Zn,generateUpdateManifest as et,readBundleIdentity as Pe,swapBundle as eo,verifyBundleTrust as to}from"craft-native";var tt="update.json";function rt(e,t){return`https://github.com/${e}/releases/latest/download/${t}`}function nt(e,t,r){return`https://github.com/${e}/releases/download/${t}/${r}`}function ot(e){let{repository:t,manifestAsset:r=tt,...n}=e;return new Ze({...n,updateUrl:rt(t,r)})}function ro(e){let t=e.tag??`v${e.version}`,r={};for(let[n,o]of Object.entries(e.artifacts)){if(!o)continue;r[n]={path:o,url:nt(e.repository,t,o.split("/").pop())}}return et({version:e.version,releaseNotes:e.releaseNotes,platforms:r})}function ie(e=G.execPath){let t=e.split("/");for(let r=0;r<t.length;r++)if(t[r].endsWith(".app"))return t.slice(0,r+1).join("/");return null}async function no(){let e=ie();if(!e)return null;return(await Pe(e)).teamId}function it(){let e=G.ppid;if(e>1)try{G.kill(e,"SIGTERM");return}catch{}G.exit(0)}function at(e={}){let t=e.appPath??ie(),r=e.quit??(()=>G.exit(0));if(t)Xn("/usr/bin/open",["-n",t],{detached:!0,stdio:"ignore"}).unref();let n=e.quitDelayMs??0;if(n>0){setTimeout(r,n).unref?.();return}r()}async function oo(e){let{appPath:t,requireSameTeam:r=!0,macos:n,...o}=e,a=t??ie();if(!a)throw Error("createSelfUpdater: this process is not running from an .app bundle, so there is nothing to update. Pass `appPath` explicitly, or skip the updater in development.");let s=n?.teamId??(r?(await Pe(a)).teamId??void 0:void 0);return ot({...o,appPath:a,macos:{...n,teamId:s},relaunch:e.relaunch??((c)=>at({appPath:c,quit:it,quitDelayMs:250}))})}function st(e){if(typeof process>"u"||process.platform!=="darwin")throw Error("Caffeinate requires macOS");let{dlopen:t,ptr:r}=f("bun:ffi"),n=t("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation",{CFStringCreateWithCString:{args:["ptr","ptr","u32"],returns:"ptr"},CFRelease:{args:["ptr"],returns:"void"}}),o=t("/System/Library/Frameworks/IOKit.framework/IOKit",{IOPMAssertionCreateWithName:{args:["ptr","u32","ptr","ptr"],returns:"i32"},IOPMAssertionRelease:{args:["u32"],returns:"i32"},IOPMAssertionDeclareUserActivity:{args:["ptr","u32","ptr"],returns:"i32"}}),a=[],s=!1;function c(){if(s)return;s=!0;for(let d of a)o.symbols.IOPMAssertionRelease(d);o.close(),n.close()}function l(d){let p=Buffer.from(`${d}\x00`),m=n.symbols.CFStringCreateWithCString(null,r(p),134217984);if(!m)throw Error("Could not create power assertion name");return m}try{let d=[[e.preventDisplaySleep??!0,"PreventUserIdleDisplaySleep"],[e.preventIdleSleep??!0,"PreventUserIdleSystemSleep"],[e.preventSystemSleep??!0,"PreventSystemSleep"],[e.preventDiskSleep??!1,"PreventDiskIdle"]];for(let[p,m]of d){if(!p)continue;let u=l(e.reason||"stx: keeping your Mac awake"),w=l(m),b=new Uint32Array(1);try{let S=o.symbols.IOPMAssertionCreateWithName(w,255,u,r(b));if(S!==0)throw Error(`Could not acquire ${m} (${S})`);a.push(b[0])}finally{n.symbols.CFRelease(u),n.symbols.CFRelease(w)}}if(!a.length)throw Error("At least one sleep prevention option must be enabled");if(e.assertUserActivity??!0){let p=l("stx: user activity"),m=new Uint32Array(1);try{let u=o.symbols.IOPMAssertionDeclareUserActivity(p,0,r(m));if(u!==0)throw Error(`Could not declare user activity (${u})`);a.push(m[0])}finally{n.symbols.CFRelease(p)}}return c}catch(d){throw c(),d}}var C=null;class ct{_release;_startedAt;_endsAt;_options;_expireHandlers=[];_expireTimer=null;_stopped=!1;constructor(e,t){this._release=e,this._options={...t},this._startedAt=new Date;let r=t.duration;if(r&&r>0){let n=r*60*1000;this._endsAt=new Date(this._startedAt.getTime()+n),this._expireTimer=setTimeout(()=>{this.stop();for(let o of this._expireHandlers)try{o()}catch{}},n)}else this._endsAt=null}get pid(){return process.pid}get startedAt(){return this._startedAt}get endsAt(){return this._endsAt}get options(){return{...this._options}}get isActive(){return!this._stopped}get remainingMs(){if(!this._endsAt)return null;let e=this._endsAt.getTime()-Date.now();return Math.max(0,e)}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;this._release()}onExpire(e){this._expireHandlers.push(e)}}function io(e={}){if(e.duration!==void 0&&e.duration!==-1&&(!Number.isFinite(e.duration)||e.duration<=0))throw RangeError("duration must be positive minutes or -1 for indefinitely");let t=st(e),r=new ct(t,e);return Se(),C=r,r}function Se(e){if(e){if(e.stop(),C===e)C=null;return}if(C)C.stop();C=null}function ao(){return C!==null&&C.isActive}function so(){if(!C||!C.isActive)return{active:!1,instance:null,startedAt:null,endsAt:null,durationMinutes:null};let t=C.options.duration;return{active:!0,instance:C,startedAt:C.startedAt,endsAt:C.endsAt,durationMinutes:t&&t>0?t:-1}}function co(e){let t=e||C;if(!t||!t.isActive)return"0:00";let r=t.remainingMs;if(r===null)return"\u221E";let n=Math.ceil(r/1000),o=Math.floor(n/3600),a=Math.floor(n%3600/60),s=n%60;if(o>0)return`${o}:${String(a).padStart(2,"0")}:${String(s).padStart(2,"0")}`;return`${a}:${String(s).padStart(2,"0")}`}function lo(e){if(e<=0||e===-1)return"Indefinitely";if(e<60)return`${e} minutes`;if(e===60)return"1 hour";if(e%60===0)return`${e/60} hours`;let t=Math.floor(e/60),r=e%60;return`${t}h ${r}m`}if(typeof process<"u")process.once("exit",()=>Se());import{existsSync as ke,mkdirSync as uo,readFileSync as po,watch as fo,writeFileSync as mo}from"fs";import{homedir as go,platform as ho}from"os";import{dirname as wo,join as Y}from"path";function bo(e){let t=ho(),r=go();switch(t){case"darwin":return Y(r,"Library","Application Support",e);case"win32":return Y(process.env.APPDATA||Y(r,"AppData","Roaming"),e);default:return Y(r,".config",e)}}class lt{_defaults;_data;_path;_changeHandlers=new Map;_anyChangeHandlers=new Set;_watcher=null;_writeTimer=null;_writing=!1;constructor(e){this._defaults={...e.defaults};let t=e.path?wo(e.path):bo(e.name);if(this._path=e.path||Y(t,"preferences.json"),!ke(t))uo(t,{recursive:!0});if(this._data=this._load(),e.watch!==!1)this._setupWatcher()}get path(){return this._path}get(e){if(e in this._data)return this._data[e];return this._defaults[e]}set(e,t){let r=this.get(e);if(JSON.stringify(r)===JSON.stringify(t))return;this._data[e]=t,this._scheduleSave(),this._notifyChange(e,t,r)}getAll(){return{...this._defaults,...this._data}}has(e){return e in this._data}delete(e){if(!(e in this._data))return;let t=this._data[e];delete this._data[e],this._scheduleSave(),this._notifyChange(e,this._defaults[e],t)}reset(){let e={...this._data};this._data={},this._save();for(let t of Object.keys(e)){let r=this._defaults[t];this._notifyChange(t,r,e[t])}}onChange(e,t){let r=e;if(!this._changeHandlers.has(r))this._changeHandlers.set(r,new Set);return this._changeHandlers.get(r).add(t),()=>{this._changeHandlers.get(r)?.delete(t)}}onAnyChange(e){return this._anyChangeHandlers.add(e),()=>{this._anyChangeHandlers.delete(e)}}close(){if(this._watcher)this._watcher.close(),this._watcher=null;if(this._writeTimer)clearTimeout(this._writeTimer),this._writeTimer=null,this._save()}_load(){try{if(ke(this._path)){let e=po(this._path,"utf-8");return JSON.parse(e)}}catch{}return{}}_save(){this._writing=!0;try{let e=JSON.stringify({...this._defaults,...this._data},null,2);mo(this._path,e,"utf-8")}catch(e){console.error(`Failed to save preferences to ${this._path}:`,e)}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(!ke(this._path))this._save();this._watcher=fo(this._path,()=>{if(this._writing)return;let e=this._load(),t={...this._data};this._data=e;let r=new Set([...Object.keys(t),...Object.keys(e)]);for(let n of r){let o=n in t?t[n]:this._defaults[n],a=n in e?e[n]:this._defaults[n];if(JSON.stringify(o)!==JSON.stringify(a))this._notifyChange(n,a,o)}})}catch{}}_notifyChange(e,t,r){let n=this._changeHandlers.get(e);if(n)for(let o of n)try{o(t,r)}catch{}for(let o of this._anyChangeHandlers)try{o(e,t,r)}catch{}}}function xo(e){return new lt(e)}import{existsSync as q,mkdirSync as dt,readFileSync as yo,unlinkSync as ut,writeFileSync as pt}from"fs";import{homedir as ae,platform as ft}from"os";import{join as V}from"path";function mt(e){let t=e.toLowerCase().replace(/[^a-z0-9]/g,"-");return V(ae(),"Library","LaunchAgents",`com.${t}.plist`)}function gt(e){let t=process.env.XDG_CONFIG_HOME||V(ae(),".config");return V(t,"autostart",`${e.toLowerCase()}.desktop`)}async function vo(e,t){let r=t.appName||"StxApp",n=mt(r),o=V(ae(),"Library","LaunchAgents");if(e){let a=t.appPath||process.execPath,s=t.args||[],c=[a,...s],l=`<?xml version="1.0" encoding="UTF-8"?>
|
|
898
898
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
899
899
|
<plist version="1.0">
|
|
900
900
|
<dict>
|
|
@@ -902,7 +902,7 @@ window.desktop = window.stxWindow;
|
|
|
902
902
|
<string>com.${r.toLowerCase().replace(/[^a-z0-9]/g,"-")}</string>
|
|
903
903
|
<key>ProgramArguments</key>
|
|
904
904
|
<array>
|
|
905
|
-
${c.map((d)=>` <string>${
|
|
905
|
+
${c.map((d)=>` <string>${Ao(d)}</string>`).join(`
|
|
906
906
|
`)}
|
|
907
907
|
</array>
|
|
908
908
|
<key>RunAtLoad</key>
|
|
@@ -912,7 +912,7 @@ ${c.map((d)=>` <string>${So(d)}</string>`).join(`
|
|
|
912
912
|
${t.isHidden?` <key>ProcessType</key>
|
|
913
913
|
<string>Background</string>`:""}
|
|
914
914
|
</dict>
|
|
915
|
-
</plist>`;if(!q(
|
|
915
|
+
</plist>`;if(!q(o))dt(o,{recursive:!0});pt(n,l,"utf-8")}else if(q(n))ut(n)}async function Po(e,t){let r=t.appName||"StxApp",n=gt(r),o=V(process.env.XDG_CONFIG_HOME||V(ae(),".config"),"autostart");if(e){let a=t.appPath||process.execPath,s=t.args||[],c=[a,...s].join(" "),l=`[Desktop Entry]
|
|
916
916
|
Type=Application
|
|
917
917
|
Name=${r}
|
|
918
918
|
Exec=${c}
|
|
@@ -920,11 +920,11 @@ Terminal=false
|
|
|
920
920
|
StartupNotify=false
|
|
921
921
|
${t.isHidden?`X-GNOME-Autostart-enabled=true
|
|
922
922
|
NoDisplay=true`:""}
|
|
923
|
-
`;if(!q(
|
|
923
|
+
`;if(!q(o))dt(o,{recursive:!0});pt(n,l,"utf-8")}else if(q(n))ut(n)}async function So(e){return q(mt(e))}async function ko(e){let t=gt(e);if(!q(t))return!1;try{let r=yo(t,"utf-8");if(r.includes("X-GNOME-Autostart-enabled=false"))return!1;if(r.includes("Hidden=true"))return!1;return!0}catch{return!1}}function Ao(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}async function Co(e,t={}){let r=ft();switch(r){case"darwin":return vo(e,t);case"linux":return Po(e,t);default:throw Error(`Auto-launch is not yet supported on ${r}`)}}async function Io(e){let t=e||"StxApp";switch(ft()){case"darwin":return So(t);case"linux":return ko(t);default:return!1}}var R=new Map,$o=0,se=!1;function ht(e){let t=e.split("+").map((n)=>n.trim()),r={key:"",meta:!1,ctrl:!1,shift:!1,alt:!1};for(let n of t){let o=n.toLowerCase();switch(o){case"cmd":case"command":case"meta":case"\u2318":r.meta=!0;break;case"ctrl":case"control":case"\u2303":r.ctrl=!0;break;case"shift":case"\u21E7":r.shift=!0;break;case"alt":case"option":case"opt":case"\u2325":r.alt=!0;break;case"cmdorctrl":case"commandorcontrol":if(typeof process<"u"&&process.platform==="darwin")r.meta=!0;else r.ctrl=!0;break;default:r.key=o}}return r}function To(e){let t=[];if(e.ctrl)t.push("\u2303");if(e.alt)t.push("\u2325");if(e.shift)t.push("\u21E7");if(e.meta)t.push("\u2318");return t.push(e.key.toUpperCase()),t.join("")}function Eo(e,t){if(t.meta!==e.metaKey)return!1;if(t.ctrl!==e.ctrlKey)return!1;if(t.shift!==e.shiftKey)return!1;if(t.alt!==e.altKey)return!1;return e.key.toLowerCase()===t.key||e.code.toLowerCase()===`key${t.key}`}function wt(e){for(let[,t]of R)if(Eo(e,t.parsed)){e.preventDefault(),e.stopPropagation();try{t.handler()}catch{}break}}function Mo(){if(se)return;if(typeof document>"u")return;document.addEventListener("keydown",wt,!0),se=!0}function Ae(){if(!se)return;if(typeof document>"u")return;document.removeEventListener("keydown",wt,!0),se=!1}async function Do(e,t){if(typeof window>"u")return!1;let r=window.craft;if(!r?.hotkeys?.register)return!1;try{return await r.hotkeys.register(e,t),!0}catch{return!1}}async function Ce(e){if(typeof window>"u")return;let t=window.craft;if(!t?.hotkeys?.unregister)return;try{await t.hotkeys.unregister(e)}catch{}}function Bo(e,t){let r=`hotkey_${++$o}_${Date.now()}`,n=ht(e);R.set(r,{shortcut:e,handler:t,parsed:n}),Do(r,e),Mo();let o={shortcut:e,id:r,unregister(){bt(o)}};return o}function bt(e){if(R.delete(e.id),Ce(e.id),R.size===0)Ae()}function Oo(){for(let[e]of R)Ce(e);R.clear(),Ae()}function Ro(){return Array.from(R.entries()).map(([e,t])=>({shortcut:t.shortcut,id:e,unregister(){if(R.delete(e),Ce(e),R.size===0)Ae()}}))}class xt{_duration;_tickInterval;_remaining;_running=!1;_paused=!1;_complete=!1;_intervalId=null;_lastTick=0;_completionHandlers=new Set;_tickHandlers=new Set;constructor(e){if(this._duration=e.duration,this._tickInterval=e.tickInterval||1000,this._remaining=e.duration,e.onComplete)this._completionHandlers.add(e.onComplete);if(e.onTick)this._tickHandlers.add(e.onTick);if(e.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 e=Date.now()-this._lastTick;return Math.max(0,this._remaining-e)}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 e=Date.now()-this._lastTick;this._remaining=Math.max(0,this._remaining-e),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(e){return this._completionHandlers.add(e),()=>{this._completionHandlers.delete(e)}}onTick(e){return this._tickHandlers.add(e),()=>{this._tickHandlers.delete(e)}}_startInterval(){this._clearInterval(),this._intervalId=setInterval(()=>{let e=Date.now(),t=e-this._lastTick;this._lastTick=e,this._remaining=Math.max(0,this._remaining-t);for(let r of this._tickHandlers)try{r(this._remaining)}catch{}if(this._remaining<=0){this._clearInterval(),this._running=!1,this._complete=!0;for(let r of this._completionHandlers)try{r()}catch{}}},this._tickInterval)}_clearInterval(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null}}class yt{_interval;_handler;_immediate;_running=!1;_intervalId=null;constructor(e){if(this._interval=e.interval,this._handler=e.handler,this._immediate=e.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 Lo(e){return new xt(e)}function _o(e){return new yt(e)}function No(e){return new Promise((t)=>setTimeout(t,e))}function Fo(e){let t=Math.ceil(e/1000),r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;if(r>0)return`${r}:${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}`;return`${n}:${String(o).padStart(2,"0")}`}function Wo(e){let t=Math.ceil(e/1000),r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;if(r>0){if(n>0)return`${r}h ${n}m`;return`${r}h`}if(n>0){if(o>0)return`${n}m ${o}s`;return`${n}m`}return`${o}s`}function i(e){if(typeof window>"u")return!1;let t=window.craft;return!!(t&&t[e])}function v(e){if(!i(e))throw Error(`craft.${e} is not available \u2014 this API requires a Craft native window`);return window.craft[e]}function h(e,t){if(typeof window>"u")return()=>{};let r=(n)=>t(n.detail??{});return window.addEventListener(e,r),()=>window.removeEventListener(e,r)}var zo={async writeText(e){if(i("clipboard")){await window.craft.clipboard.writeText(e);return}if(typeof navigator<"u"&&navigator.clipboard)await navigator.clipboard.writeText(e)},async readText(){if(i("clipboard")){let e=await window.craft.clipboard.readText();return typeof e==="string"?e:""}if(typeof navigator<"u"&&navigator.clipboard?.readText)try{return await navigator.clipboard.readText()}catch{return""}return""},async writeHTML(e){if(i("clipboard")){await window.craft.clipboard.writeHTML(e);return}if(typeof navigator<"u"&&navigator.clipboard?.write)try{let t=new window.ClipboardItem({"text/html":new Blob([e],{type:"text/html"}),"text/plain":new Blob([Ho(e)],{type:"text/plain"})});await navigator.clipboard.write([t])}catch{}},async readHTML(){if(i("clipboard")){let e=await window.craft.clipboard.readHTML();return typeof e==="string"?e:""}if(typeof navigator<"u"&&navigator.clipboard?.read)try{let e=await navigator.clipboard.read();for(let t of e)if(t.types.includes("text/html"))return await(await t.getType("text/html")).text()}catch{}return""},async clear(){if(i("clipboard")){await window.craft.clipboard.clear();return}if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText("")}catch{}},async hasText(){if(i("clipboard"))return await window.craft.clipboard.hasText();return(await this.readText()).length>0},async hasHTML(){if(i("clipboard"))return await window.craft.clipboard.hasHTML();return(await this.readHTML()).length>0},async hasImage(){if(i("clipboard"))return await window.craft.clipboard.hasImage();return!1}};function Ho(e){return e.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<\/?(br|p|div|li|h[1-6])\b[^>]*>/gi,`
|
|
924
924
|
`).replace(/<[^>]+>/g,"").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/\n{3,}/g,`
|
|
925
925
|
|
|
926
|
-
`).trim()}var zo={async show(e){if(!e.title)throw Error("notification title is required");if(o("notifications")){await window.craft.notifications.show(e);return}if(typeof window<"u"&&"Notification"in window){let t=window.Notification;if(t.permission==="granted")new t(e.title,{body:e.body,icon:e.icon});else if(t.permission==="default"){if(await t.requestPermission()==="granted")new t(e.title,{body:e.body,icon:e.icon})}}},async schedule(e){if(o("notifications")){let n={...e};if(n.triggerAt instanceof Date)n.triggerAt=n.triggerAt.toISOString();await window.craft.notifications.schedule(n);return}let t=Ho(e.triggerAt),r=Math.max(0,t-Date.now());setTimeout(()=>{this.show(e).catch(()=>{})},r)},async cancel(e){if(o("notifications"))await window.craft.notifications.cancel(e)},async cancelAll(){if(o("notifications"))await window.craft.notifications.cancelAll()},async setBadge(e){let t=Math.max(0,Math.round(Number.isFinite(e)?e:0));if(o("notifications")){await window.craft.notifications.setBadge(t);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge(t)}catch{}},async clearBadge(){if(o("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(o("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let e=window.Notification;if(e.permission==="granted")return!0;if(e.permission==="denied")return!1;return await e.requestPermission()==="granted"}return!1},async registerCategories(e){if(!Array.isArray(e)||e.length===0)return;if(o("notifications")){let t=window.craft.notifications.registerCategories;if(typeof t==="function")await t(e)}},onActionClicked(e){return h("craft:notification:actionClicked",e)},onReply(e){return h("craft:notification:reply",e)}};function Ho(e){if(e==null)return Date.now();if(e instanceof Date)return e.getTime();if(typeof e==="number")return e;let t=Date.parse(e);return Number.isNaN(t)?Date.now():t}var Uo={async readFile(e){let t=await v("fs").readFile(e);return t&&t.data||""},async readBuffer(e){let t=await v("fs").readFile(e),r=t&&t.data||"";if(t&&t.base64===!0)return Vo(r);return new TextEncoder().encode(r)},async writeFile(e,t){await v("fs").writeFile(e,t)},async writeBuffer(e,t){let r=qo(t),n=v("fs");if(typeof n.writeFileBytes==="function")await n.writeFileBytes(e,r);else await n.writeFile(e,r)},async copy(e,t){if(e===t)throw Error("fs.copy: source and destination must differ");await v("fs").copy(e,t)},async move(e,t){if(e===t)throw Error("fs.move: source and destination must differ");await v("fs").move(e,t)},async appendFile(e,t){await v("fs").appendFile(e,t)},async deleteFile(e){await v("fs").deleteFile(e)},async exists(e){return await v("fs").exists(e)},async stat(e){return jo(await v("fs").stat(e))},async readDir(e){let t=await v("fs").readDir(e),r=t&&t.entries||[],n=e.endsWith("/")?e.slice(0,-1):e;return r.map((i)=>({name:i.name,path:`${n}/${i.name}`,isDirectory:!!i.isDirectory}))},async mkdir(e,t){await v("fs").mkdir(e,t)},async rmdir(e,t){await v("fs").rmdir(e,t)},async watch(e,t){await v("fs").watch(e,t)},async unwatch(e){await v("fs").unwatch(e)},onChange(e){return h("craft:fs:change",e)},async watchTree(e,t,r){let n=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,i=v("fs");await i.watch(e,n,{recursive:!!t.recursive});let a=t.kinds&&t.kinds.length>0?new Set(t.kinds):null,s=Math.max(0,Math.floor(t.coalesceMs??0)),c=[],l=null,d=!1,p=()=>{if(l=null,c.length===0)return;let u=c;c=[];try{r(u)}catch{}},m=h("craft:fs:change",(u)=>{if(d)return;if(u.id!==n)return;if(a&&u.kind&&!a.has(u.kind))return;if(c.push(u),s===0){p();return}if(l==null)l=setTimeout(p,s)});return{id:n,async stop(){if(d)return;if(d=!0,m(),l)clearTimeout(l),l=null;if(c.length>0)p();try{await i.unwatch(n)}catch{}}}},async homeDir(){return await v("fs").homeDir()},async tempDir(){return await v("fs").tempDir()},async appDataDir(){return await v("fs").appDataDir()}};function qo(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return typeof btoa==="function"?btoa(t):Buffer.from(e).toString("base64")}function Vo(e){let t=typeof atob==="function"?atob(e):Buffer.from(e,"base64").toString("binary"),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function jo(e){return{isFile:!!e.isFile,isDirectory:!!e.isDirectory,isSymlink:!!e.isSymlink,size:Number(e.size)||0,modifiedAt:e.modifiedAt!=null?e.modifiedAt<1000000000000?e.modifiedAt*1000:e.modifiedAt:0}}var X=new Set,bt=!1;function Ko(){if(bt)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(e)=>{let t=e.detail;if(t?.id)X.delete(t.id)}),bt=!0}var Go=new Set(["javascript:","data:","file:","vbscript:"]),Yo={async openExternal(e){let t=e.trim().toLowerCase();for(let r of Go)if(t.startsWith(r))throw Error(`shell.openExternal: ${r} URLs are blocked for safety`);if(o("shell")){await window.craft.shell.openExternal(e);return}if(typeof window<"u"&&typeof window.open==="function")window.open(e,"_blank","noopener,noreferrer")},async openPath(e){await v("shell").openPath(e)},async showInFinder(e){await v("shell").showInFinder(e)},async spawn(e,t,r=[],n={}){if(Ko(),!e||typeof e!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!t||typeof t!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray(r))throw Error("shell.spawn: args must be an array");for(let i of r)if(typeof i!=="string")throw Error("shell.spawn: args entries must be strings");if(X.has(e))throw Error(`shell.spawn: id "${e}" is already in use \u2014 call kill(id) first or pick a different id`);X.add(e);try{await v("shell").spawn(e,t,r,n)}catch(i){throw X.delete(e),i}},async kill(e){await v("shell").kill(e),X.delete(e)},async getEnv(e){if(o("shell")){let t=await window.craft.shell.getEnv(e);return t==null?void 0:String(t)}return},async setEnv(e,t){await v("shell").setEnv(e,t)},onStdout(e){return h("craft:shell:stdout",e)},onStderr(e){return h("craft:shell:stderr",e)},onExit(e){return h("craft:shell:exit",e)}};function W(){return window.craft.shortcuts}var Xo={async register(e,t,r){if(!o("shortcuts"))return;await W().register(e,t,r)},async unregister(e){if(!o("shortcuts"))return;await W().unregister(e)},async unregisterAll(){if(!o("shortcuts"))return;await W().unregisterAll()},async enable(e){if(!o("shortcuts"))return;await W().enable(e)},async disable(e){if(!o("shortcuts"))return;await W().disable(e)},async isRegistered(e){if(!o("shortcuts"))return!1;return await W().isRegistered(e)},async list(){if(!o("shortcuts"))return[];return await W().list()},on(e){return h("craft:shortcut",e)}};var Jo={get(){if(o("theme"))try{return window.craft.theme.get()}catch{}return{appearance:Qo()}},onChange(e){if(e(this.get()),o("theme"))return h("craft:theme",e);if(typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>e({appearance:t.matches?"dark":"light"});return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}return()=>{}},async current(){return this.get()}};function Qo(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function Zo(e,t={}){if(!o("dragOut"))throw Error("dragOut requires a Craft native window");let r=Array.isArray(e)?e:[e];if(r.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start(r,t)}function ei(){return o("dragOut")}var ti={onUrl(e){if(!o("deepLink"))return()=>{};return h("craft:deepLink",e)},getInitialUrl(){if(typeof window>"u")return null;if(o("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let e=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return e},isAvailable(){return o("deepLink")}};var ri={async isCharging(){if(o("power"))return await window.craft.power.isCharging();let e=await ce();return e?!!e.charging:!1},async isPluggedIn(){if(o("power"))return await window.craft.power.isPluggedIn();let e=await ce();return e?!!e.charging||e.level>=0.999:!1},async isLowPowerMode(){if(o("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(o("power")){let t=await window.craft.power.batteryLevel();return typeof t==="number"?t:null}let e=await ce();return e?e.level:null},async timeRemaining(){if(o("power")){let r=await window.craft.power.timeRemaining();return typeof r==="number"?r:null}let e=await ce();if(!e)return null;let t=e.charging?e.chargingTime:e.dischargingTime;return Number.isFinite(t)?Math.round(t/60):null},async thermalState(){if(o("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(o("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(e="app is busy"){if(o("power")){await window.craft.power.preventSleep(e);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let t=window;if(t.__craftWebWakeLock?.release){try{await t.__craftWebWakeLock.release()}catch{}t.__craftWebWakeLock=null}try{let r=await navigator.wakeLock.request("screen");t.__craftWebWakeLock=r}catch{}},async allowSleep(){if(o("power")){await window.craft.power.allowSleep();return}let e=window.__craftWebWakeLock;if(e&&typeof e.release==="function"){try{await e.release()}catch{}window.__craftWebWakeLock=null}},onSleep(e){return h("craft:powerSleep",e)},onWake(e){return h("craft:powerWake",e)}};async function ce(){if(typeof navigator>"u")return null;let e=navigator;if(typeof e.getBattery!=="function")return null;try{return await e.getBattery()}catch{return null}}var ni={async connectionType(){if(o("network"))return await window.craft.network.connectionType();return xt()},async wifiSSID(){if(o("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(o("network")){let e=await window.craft.network.wifiSignalStrength();return typeof e==="number"?e:void 0}return},async ipAddress(){if(o("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(o("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(o("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(o("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(o("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(o("network"))await window.craft.network.openPreferences()},onChange(e){if(o("network"))return h("craft:networkChange",e);if(typeof window>"u")return()=>{};let t=()=>e({type:xt(),online:!0}),r=()=>e({type:"none",online:!1});return window.addEventListener("online",t),window.addEventListener("offline",r),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}};function xt(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let e=navigator.connection;if(!e)return"unknown";let t=String(e.type||e.effectiveType||"unknown").toLowerCase();if(t==="wifi"||t==="cellular"||t==="ethernet"||t==="bluetooth"||t==="none")return t;return"unknown"}var oi={async checkForUpdates(){if(!o("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!o("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(e){if(!o("updater"))return;await window.craft.updater.setAutomaticChecks(e)},async setCheckInterval(e){if(!o("updater"))return;if(!Number.isFinite(e))throw Error("setCheckInterval: must be a finite number");let t=e<=0?0:Math.max(60,Math.round(e));await window.craft.updater.setCheckInterval(t)},async setFeedURL(e){if(!o("updater"))return;await window.craft.updater.setFeedURL(e)},async getLastUpdateCheckDate(){if(!o("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!o("updater"))return null;let e=await window.craft.updater.getUpdateInfo();if(!e||typeof e.version!=="string"||e.version.length===0)return null;return e},onAvailable(e){return h("craft:updateAvailable",e)},onDownloaded(e){return h("craft:updateDownloaded",e)},async verifySignature({payload:e,signatureB64:t,publicKeyB64:r}){let n=yt(e),i;try{i=await crypto.subtle.importKey("raw",le(r),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",i,le(t),n)}catch{return!1}},async verifyDownload({url:e,signatureB64:t,publicKeyB64:r,fetchInit:n}){let i;try{i=await fetch(e,n)}catch{return{ok:!1,reason:"fetch-failed"}}if(!i.ok)return{ok:!1,reason:"http-error",status:i.status};let a=new Uint8Array(await i.arrayBuffer()),s;try{s=await crypto.subtle.importKey("raw",le(r),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let c=!1;try{c=await crypto.subtle.verify("Ed25519",s,le(t),yt(a))}catch{c=!1}if(!c)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:a}}};function yt(e){if(e instanceof ArrayBuffer)return new Uint8Array(e);let t=new ArrayBuffer(e.byteLength),r=new Uint8Array(t);return r.set(e),r}function le(e){if(typeof atob==="function"){let n=atob(e),i=new ArrayBuffer(n.length),a=new Uint8Array(i);for(let s=0;s<n.length;s++)a[s]=n.charCodeAt(s);return a}let t=Buffer.from(e,"base64"),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),new Uint8Array(r)}var ii={onFocus(e){if(o("window"))return h("craft:window:focus",()=>e());return Ce("focus",e)},onBlur(e){if(o("window"))return h("craft:window:blur",()=>e());return Ce("blur",e)},onResize(e){if(o("window"))return h("craft:window:resize",e);if(typeof window>"u")return()=>{};let t=()=>e({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},onMove(e){if(o("window"))return h("craft:window:move",e);return()=>{}},onClose(e){if(o("window"))return h("craft:window:close",()=>e());return Ce("beforeunload",e)},onMinimize(e){if(o("window"))return h("craft:window:minimize",()=>e());if(typeof document>"u")return()=>{};let t=()=>{if(document.visibilityState==="hidden")e()};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},onRestore(e){if(o("window"))return h("craft:window:restore",()=>e());if(typeof document>"u")return()=>{};let t=()=>{if(document.visibilityState==="visible")e()};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)}};function Ce(e,t){if(typeof window>"u")return()=>{};let r=()=>t();return window.addEventListener(e,r),()=>window.removeEventListener(e,r)}var vt={name:"",version:"0.0.0"},ai={async hideDockIcon(){if(o("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(o("app"))await window.craft.app.showDockIcon()},async quit(){if(o("app"))await window.craft.app.quit()},async getInfo(){if(!o("app"))return vt;let e=await window.craft.app.getInfo();return{...vt,...e||{}}},async notify(e){if(!e.title)throw Error("notify: title is required");if(o("app"))await window.craft.app.notify(e)},async setBadge(e){if(o("app"))await window.craft.app.setBadge(e)},async bounce(e="informational"){if(o("app"))await window.craft.app.bounce(e)}};var si={app(e,t={}){return{label:e,items:[{label:`About ${e}`,role:"about"},{separator:!0},...t.settings?[{id:"stx.menu.settings",label:"Settings\u2026",shortcut:"cmd+,",onClick:t.settings},{separator:!0}]:[],{label:`Hide ${e}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${e}`,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(e,t={}){return[this.app(e,t),this.edit()]}},ci=0;function li(e){let t=new Map;return{payload:{menus:e.menus.map((n)=>({label:n.label,items:n.items.map((i)=>{let{onClick:a,...s}=i;if(s.separator)return s;let c=s.id??`stx.menu.${ci++}`;if(a)t.set(c,a);return{...s,id:c}})}))},handlers:t}}var Ie=null,di={async set(e){if(!o("menu"))return!1;let{payload:t,handlers:r}=li(e);if(Ie?.(),Ie=null,r.size>0)Ie=h("craft:menu:action",(n)=>{r.get(n.id)?.()});return await window.craft.menu.set(t),!0},async setDock(e){if(o("menu"))await window.craft.menu.setDock(e)},async addItem(e,t){if(o("menu"))await window.craft.menu.addItem(e,t)},async removeItem(e){if(o("menu"))await window.craft.menu.removeItem(e)},async enableItem(e){if(o("menu"))await window.craft.menu.enableItem(e)},async disableItem(e){if(o("menu"))await window.craft.menu.disableItem(e)},async checkItem(e){if(o("menu"))await window.craft.menu.checkItem(e)},async uncheckItem(e){if(o("menu"))await window.craft.menu.uncheckItem(e)},async setItemLabel(e,t){if(o("menu"))await window.craft.menu.setItemLabel(e,t)},async clearDock(){if(o("menu"))await window.craft.menu.clearDock()},onAction(e){return h("craft:menu:action",e)}};function St(e){if(e.separator)return{id:e.id||"",title:"",type:"separator"};return{id:e.id||"",title:e.title||"",icon:e.icon,shortcut:e.shortcut,enabled:e.disabled?!1:void 0,checked:e.checked?!0:void 0,type:e.submenu?"submenu":void 0,submenu:e.submenu?.map(St)}}async function Pt(e){if(!e.items||e.items.length===0)throw Error("contextMenu.show requires at least one item");if(!o("nativeUI"))return null;let t=window.craft?.nativeUI;if(!t)return null;let r=await t.showContextMenu({targetId:e.targetId||"",targetType:"general",x:Math.round(e.x),y:Math.round(e.y),items:e.items.map(St)});return{id:typeof r?.id==="string"?r.id:null,targetId:r?.targetId}}var ui={available(){return o("nativeUI")},async show(e){return await Pt(e)!==null},async pick(e){return(await Pt(e))?.id??null},onAction(e){return h("craft:contextmenu:action",(t)=>{if(typeof t.id==="string")e({id:t.id,targetId:t.targetId??""})})}};function $e(e){if(e===null||e===void 0||e===0)return"";return String(e)}function kt(e){return e.map((t)=>({id:t.id,header:t.header,items:t.items.map((r)=>({id:r.id,label:r.label,icon:r.icon,badge:$e(r.badge)||void 0}))}))}function At(e){return JSON.stringify(e.map((t)=>[t.id,t.header??"",t.items.map((r)=>[r.id,r.label,r.icon??""])]))}function Ct(e){return new Map(e.flatMap((t)=>t.items.map((r)=>[r.id,$e(r.badge)])))}var It={available(){return o("nativeUI")&&typeof window.craft?.nativeUI?._emitSidebarSelect==="function"},create(e){if(!It.available())return null;let t=window.craft?.nativeUI;if(!t)return null;let r=t.createSidebar({id:e.id,sections:kt(e.sections),selected:e.selected}),n=e.sections,i=new Set;return r.onSelect((a)=>{for(let s of[...i])s(a)}),{id:r.id,update(a){if(At(a)===At(n)){let s=Ct(n);for(let[c,l]of Ct(a))if(s.get(c)!==l)r.updateItem(c,{badge:l})}else r.setSections(kt(a));n=a},updateItem(a,s){r.updateItem(a,{...s.label!==void 0?{label:s.label}:{},...s.icon!==void 0?{icon:s.icon}:{},..."badge"in s?{badge:$e(s.badge)}:{}}),n=n.map((c)=>({...c,items:c.items.map((l)=>l.id===a?{...l,...s}:l)}))},select(a){r.setSelectedItem(a)},onSelect(a){return i.add(a),()=>i.delete(a)},destroy(){i.clear(),r.destroy()}}}};var pi={accentColor:()=>E("system","accentColor",()=>""),highlightColor:()=>E("system","highlightColor",()=>""),language:()=>E("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>E("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>E("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>E("system","is24HourTime",()=>{try{let e=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return e.hourCycle==="h23"||e.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>E("system","reduceMotion",()=>Te("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>E("system","reduceTransparency",()=>Te("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>E("system","increaseContrast",()=>Te("(prefers-contrast: more)")),systemVersion:()=>E("system","systemVersion",()=>""),hostname:()=>E("system","hostname",()=>""),username:()=>E("system","username",()=>""),async openPreferences(){if(o("system"))await window.craft.system.openPreferences()}};async function E(e,t,r){if(o(e))return await window.craft[e][t]();return await r()}function Te(e){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(e).matches}var fi={async getDisplays(){if(o("screen"))return await window.craft.screen.getDisplays();return $t()},async getPrimary(){if(o("screen")){let e=await window.craft.screen.getPrimary();return e&&typeof e.width==="number"?e:null}return $t()[0]??null},onChange(e){if(o("screen"))return h("craft:screen:change",()=>e());if(typeof window>"u")return()=>{};let t=()=>e();return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)}};function $t(){if(typeof window>"u"||!window.screen)return[];let e=window.screen;return[{id:0,x:e.left??0,y:e.top??0,width:e.width||0,height:e.height||0,workX:e.availLeft??0,workY:e.availTop??0,workWidth:e.availWidth??e.width??0,workHeight:e.availHeight??e.height??0,scaleFactor:window.devicePixelRatio||1}]}var mi={async set(e,t,r){if(!e)throw Error("keychain.set: service is required");if(!t)throw Error("keychain.set: account is required");await v("keychain").set(e,t,r)},async get(e,t){if(!e)throw Error("keychain.get: service is required");if(!t)throw Error("keychain.get: account is required");let r=await v("keychain").get(e,t);return typeof r==="string"?r:null},async delete(e,t){if(!e)throw Error("keychain.delete: service is required");if(!t)throw Error("keychain.delete: account is required");await v("keychain").delete(e,t)},async has(e,t){if(!e)throw Error("keychain.has: service is required");if(!t)throw Error("keychain.has: account is required");return await v("keychain").has(e,t)}};var gi={async check(e){if(o("permissions"))return await window.craft.permissions.check(e);return await Tt(e)},async request(e){if(o("permissions"))return await window.craft.permissions.request(e);return await hi(e)},async openSettings(e){if(o("permissions"))await window.craft.permissions.openSettings(e)}};async function Tt(e){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let t=await navigator.permissions.query({name:e});return wi(t.state)}catch{return"not-supported"}}async function hi(e){if(e==="notifications"&&typeof window<"u"&&"Notification"in window){let t=await window.Notification.requestPermission();return t==="granted"?"granted":t==="denied"?"denied":"undetermined"}return await Tt(e)}function wi(e){if(e==="granted")return"granted";if(e==="denied")return"denied";if(e==="prompt")return"undetermined";return"undetermined"}var bi={async print(){if(o("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(e){if(!e)throw Error("printToPDF: path is required");let t=e.startsWith("/"),r=/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\");if(!t&&!r)throw Error("printToPDF: path must be absolute");let n=await v("printing").printToPDF(e);return{ok:!!(n&&n.ok),path:n?.path}}};var xi={async enable(){if(!o("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!o("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!o("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};async function Ee(e){if(!o("tray"))return;let t=window.craft.tray;await e(t)}var yi={setIcon:(e)=>Ee((t)=>t.setIcon(e)),setTitle:(e)=>Ee((t)=>t.setTitle(e)),setTooltip:(e)=>Ee((t)=>t.setTooltip(e))};function Me(){if(!o("window"))return null;return window.craft.window}function D(e){let t=Me();if(!t)return Promise.resolve();try{return Promise.resolve(e(t)).then(()=>{return},()=>{return})}catch{return Promise.resolve()}}var vi={get available(){return Me()!==null},open(e){let t=()=>{if(typeof window<"u"&&e.url)window.open(e.url,e.name);return{name:e.name}},r=Me();if(!r?.open)return Promise.resolve(t());return r.open(e).then((n)=>({name:n?.name||e.name})).catch(t)},close:()=>D((e)=>e.close?.()),show:()=>D((e)=>e.show?.()),hide:()=>D((e)=>e.hide?.()),focus:()=>D((e)=>e.focus?.()),minimize:()=>D((e)=>e.minimize?.()),maximize:()=>D((e)=>e.maximize?.()),center:()=>D((e)=>e.center?.()),startDrag:()=>D((e)=>e.startDrag?.()),setTitle:(e)=>D((t)=>t.setTitle?.(e)),setSize:(e,t)=>D((r)=>r.setSize?.(e,t)),setAppearance:(e)=>D((t)=>t.setAppearance?.(e))};var Pi={async addItem(e){if(o("touchbar"))await window.craft.touchbar.addItem(e)},async removeItem(e){if(o("touchbar"))await window.craft.touchbar.removeItem(e)},async updateItem(e,t){if(o("touchbar"))await window.craft.touchbar.updateItem(e,t)},async setLabel(e,t){if(o("touchbar"))await window.craft.touchbar.setLabel(e,t)},async setIcon(e,t){if(o("touchbar"))await window.craft.touchbar.setIcon(e,t)},async setEnabled(e,t){if(o("touchbar"))await window.craft.touchbar.setEnabled(e,t)},async setSliderValue(e,t){if(o("touchbar"))await window.craft.touchbar.setSliderValue(e,t)},async clear(){if(o("touchbar"))await window.craft.touchbar.clear()},async show(){if(o("touchbar"))await window.craft.touchbar.show()},async hide(){if(o("touchbar"))await window.craft.touchbar.hide()},onAction(e){return h("craft:touchbar:action",e)}};var Si=/^[\da-f]*$/i;function ki(e,t){if(typeof t!=="string"||!Si.test(t)||t.length%2!==0)throw Error(`${e}: must be a hex string with even length, got ${JSON.stringify(t)}`)}var Ai={async isEnabled(){return o("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return o("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return o("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return o("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(o("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(o("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return o("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(e){if(o("bluetooth"))await window.craft.bluetooth.connect(e)},async disconnect(e){if(o("bluetooth"))await window.craft.bluetooth.disconnect(e)},async openPreferences(){if(o("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(e){if(!e)throw Error("bluetooth.discoverServices: deviceId is required");if(!o("bluetooth"))return[];let t=await window.craft.bluetooth.discoverServices(e);return Array.isArray(t)?t:[]},async discoverCharacteristics(e,t){if(!e||!t)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!o("bluetooth"))return[];let r=await window.craft.bluetooth.discoverCharacteristics(e,t);return Array.isArray(r)?r:[]},async readCharacteristic(e,t,r){if(!e||!t||!r)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!o("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(e,t,r)},async writeCharacteristic(e,t,r,n,i="with-response"){if(!e||!t||!r)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(ki("bluetooth.writeCharacteristic.valueHex",n),!o("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(e,t,r,n,i)},async setCharacteristicNotify(e,t,r,n){if(!e||!t||!r)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!o("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(e,t,r,n)},onDeviceFound(e){return h("craft:bluetooth:deviceFound",e)},onDeviceConnected(e){return h("craft:bluetooth:deviceConnected",e)},onDeviceDisconnected(e){return h("craft:bluetooth:deviceDisconnected",e)},onCharacteristicValue(e){return h("craft:bluetooth:characteristicValue",e)}};var Ci={async speak(e,t){if(!e)throw Error("speech.speak: text is required");if(o("speech")){await window.craft.speech.speak(e,t);return}if(typeof window<"u"&&window.speechSynthesis){let r=new window.SpeechSynthesisUtterance(e);if(t){if(t.rate!=null)r.rate=t.rate;if(t.pitch!=null)r.pitch=t.pitch;if(t.volume!=null)r.volume=t.volume;if(t.voice){let i=window.speechSynthesis.getVoices().find((a)=>a.voiceURI===t.voice||a.name===t.voice||a.lang===t.voice);if(i)r.voice=i}}window.speechSynthesis.speak(r)}},async stop(){if(o("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(o("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(o("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(o("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(o("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map((t)=>({id:t.voiceURI||t.name,name:t.name,language:t.lang||"",quality:"default"}));return[]}};var J=[],De=!0,Be,Oe,Q={async report(e){if(o("crashReporter")){await window.craft.crashReporter.report(e);return}if(!De)return;let t=e instanceof Error?{timestamp:Date.now(),severity:"error",message:e.message,source:"js",stack:e.stack||"",userId:Be,appVersion:Oe}:{timestamp:Date.now(),severity:e.severity||"error",message:e.message||"",source:e.source||"js",stack:e.stack||"",userId:Be,appVersion:Oe};if(J.length>=64)J.shift();J.push(t)},async flush(){if(o("crashReporter"))return await window.craft.crashReporter.flush();return[...J]},async clear(){if(o("crashReporter")){await window.craft.crashReporter.clear();return}J.length=0},async setEnabled(e){if(o("crashReporter")){await window.craft.crashReporter.setEnabled(e);return}De=e},async isEnabled(){if(o("crashReporter"))return await window.craft.crashReporter.isEnabled();return De},async setUser(e){if(o("crashReporter")){await window.craft.crashReporter.setUser(e);return}Be=e||void 0},async setAppVersion(e){if(o("crashReporter")){await window.craft.crashReporter.setAppVersion(e);return}Oe=e||void 0},attachGlobalHandlers(){if(o("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let e=(r)=>{Q.report({severity:"error",message:r.message,source:"js",stack:r.error?.stack||`${r.message}
|
|
927
|
-
at ${r.filename}:${r.lineno}:${r.colno}`}).catch(()=>{})},t=(r)=>{let n=r.reason;Q.report({severity:"error",message:n?.message||String(n),source:"js",stack:n?.stack||""}).catch(()=>{})};return window.addEventListener("error",e),window.addEventListener("unhandledrejection",t),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",t)}},forwardTo(e){return
|
|
926
|
+
`).trim()}var Uo={async show(e){if(!e.title)throw Error("notification title is required");if(i("notifications")){await window.craft.notifications.show(e);return}if(typeof window<"u"&&"Notification"in window){let t=window.Notification;if(t.permission==="granted")new t(e.title,{body:e.body,icon:e.icon});else if(t.permission==="default"){if(await t.requestPermission()==="granted")new t(e.title,{body:e.body,icon:e.icon})}}},async schedule(e){if(i("notifications")){let n={...e};if(n.triggerAt instanceof Date)n.triggerAt=n.triggerAt.toISOString();await window.craft.notifications.schedule(n);return}let t=qo(e.triggerAt),r=Math.max(0,t-Date.now());setTimeout(()=>{this.show(e).catch(()=>{})},r)},async cancel(e){if(i("notifications"))await window.craft.notifications.cancel(e)},async cancelAll(){if(i("notifications"))await window.craft.notifications.cancelAll()},async setBadge(e){let t=Math.max(0,Math.round(Number.isFinite(e)?e:0));if(i("notifications")){await window.craft.notifications.setBadge(t);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge(t)}catch{}},async clearBadge(){if(i("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(i("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let e=window.Notification;if(e.permission==="granted")return!0;if(e.permission==="denied")return!1;return await e.requestPermission()==="granted"}return!1},async registerCategories(e){if(!Array.isArray(e)||e.length===0)return;if(i("notifications")){let t=window.craft.notifications.registerCategories;if(typeof t==="function")await t(e)}},onActionClicked(e){return h("craft:notification:actionClicked",e)},onReply(e){return h("craft:notification:reply",e)}};function qo(e){if(e==null)return Date.now();if(e instanceof Date)return e.getTime();if(typeof e==="number")return e;let t=Date.parse(e);return Number.isNaN(t)?Date.now():t}var Vo={async readFile(e){let t=await v("fs").readFile(e);return t&&t.data||""},async readBuffer(e){let t=await v("fs").readFile(e),r=t&&t.data||"";if(t&&t.base64===!0)return Ko(r);return new TextEncoder().encode(r)},async writeFile(e,t){await v("fs").writeFile(e,t)},async writeBuffer(e,t){let r=jo(t),n=v("fs");if(typeof n.writeFileBytes==="function")await n.writeFileBytes(e,r);else await n.writeFile(e,r)},async copy(e,t){if(e===t)throw Error("fs.copy: source and destination must differ");await v("fs").copy(e,t)},async move(e,t){if(e===t)throw Error("fs.move: source and destination must differ");await v("fs").move(e,t)},async appendFile(e,t){await v("fs").appendFile(e,t)},async deleteFile(e){await v("fs").deleteFile(e)},async exists(e){return await v("fs").exists(e)},async stat(e){return Go(await v("fs").stat(e))},async readDir(e){let t=await v("fs").readDir(e),r=t&&t.entries||[],n=e.endsWith("/")?e.slice(0,-1):e;return r.map((o)=>({name:o.name,path:`${n}/${o.name}`,isDirectory:!!o.isDirectory}))},async mkdir(e,t){await v("fs").mkdir(e,t)},async rmdir(e,t){await v("fs").rmdir(e,t)},async watch(e,t){await v("fs").watch(e,t)},async unwatch(e){await v("fs").unwatch(e)},onChange(e){return h("craft:fs:change",e)},async watchTree(e,t,r){let n=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,o=v("fs");await o.watch(e,n,{recursive:!!t.recursive});let a=t.kinds&&t.kinds.length>0?new Set(t.kinds):null,s=Math.max(0,Math.floor(t.coalesceMs??0)),c=[],l=null,d=!1,p=()=>{if(l=null,c.length===0)return;let u=c;c=[];try{r(u)}catch{}},m=h("craft:fs:change",(u)=>{if(d)return;if(u.id!==n)return;if(a&&u.kind&&!a.has(u.kind))return;if(c.push(u),s===0){p();return}if(l==null)l=setTimeout(p,s)});return{id:n,async stop(){if(d)return;if(d=!0,m(),l)clearTimeout(l),l=null;if(c.length>0)p();try{await o.unwatch(n)}catch{}}}},async homeDir(){return await v("fs").homeDir()},async tempDir(){return await v("fs").tempDir()},async appDataDir(){return await v("fs").appDataDir()}};function jo(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return typeof btoa==="function"?btoa(t):Buffer.from(e).toString("base64")}function Ko(e){let t=typeof atob==="function"?atob(e):Buffer.from(e,"base64").toString("binary"),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function Go(e){return{isFile:!!e.isFile,isDirectory:!!e.isDirectory,isSymlink:!!e.isSymlink,size:Number(e.size)||0,modifiedAt:e.modifiedAt!=null?e.modifiedAt<1000000000000?e.modifiedAt*1000:e.modifiedAt:0}}var X=new Set,vt=!1;function Yo(){if(vt)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(e)=>{let t=e.detail;if(t?.id)X.delete(t.id)}),vt=!0}var Xo=new Set(["javascript:","data:","file:","vbscript:"]),Jo={async openExternal(e){let t=e.trim().toLowerCase();for(let r of Xo)if(t.startsWith(r))throw Error(`shell.openExternal: ${r} URLs are blocked for safety`);if(i("shell")){await window.craft.shell.openExternal(e);return}if(typeof window<"u"&&typeof window.open==="function")window.open(e,"_blank","noopener,noreferrer")},async openPath(e){await v("shell").openPath(e)},async showInFinder(e){await v("shell").showInFinder(e)},async spawn(e,t,r=[],n={}){if(Yo(),!e||typeof e!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!t||typeof t!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray(r))throw Error("shell.spawn: args must be an array");for(let o of r)if(typeof o!=="string")throw Error("shell.spawn: args entries must be strings");if(X.has(e))throw Error(`shell.spawn: id "${e}" is already in use \u2014 call kill(id) first or pick a different id`);X.add(e);try{await v("shell").spawn(e,t,r,n)}catch(o){throw X.delete(e),o}},async kill(e){await v("shell").kill(e),X.delete(e)},async getEnv(e){if(i("shell")){let t=await window.craft.shell.getEnv(e);return t==null?void 0:String(t)}return},async setEnv(e,t){await v("shell").setEnv(e,t)},onStdout(e){return h("craft:shell:stdout",e)},onStderr(e){return h("craft:shell:stderr",e)},onExit(e){return h("craft:shell:exit",e)}};function W(){return window.craft.shortcuts}var Qo={async register(e,t,r){if(!i("shortcuts"))return;await W().register(e,t,r)},async unregister(e){if(!i("shortcuts"))return;await W().unregister(e)},async unregisterAll(){if(!i("shortcuts"))return;await W().unregisterAll()},async enable(e){if(!i("shortcuts"))return;await W().enable(e)},async disable(e){if(!i("shortcuts"))return;await W().disable(e)},async isRegistered(e){if(!i("shortcuts"))return!1;return await W().isRegistered(e)},async list(){if(!i("shortcuts"))return[];return await W().list()},on(e){return h("craft:shortcut",e)}};var Zo={get(){if(i("theme"))try{return window.craft.theme.get()}catch{}return{appearance:ei()}},onChange(e){if(e(this.get()),i("theme"))return h("craft:theme",e);if(typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>e({appearance:t.matches?"dark":"light"});return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}return()=>{}},async current(){return this.get()}};function ei(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function ti(e,t={}){if(!i("dragOut"))throw Error("dragOut requires a Craft native window");let r=Array.isArray(e)?e:[e];if(r.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start(r,t)}function ri(){return i("dragOut")}var ni={onUrl(e){if(!i("deepLink"))return()=>{};return h("craft:deepLink",e)},getInitialUrl(){if(typeof window>"u")return null;if(i("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let e=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return e},isAvailable(){return i("deepLink")}};var oi={async isCharging(){if(i("power"))return await window.craft.power.isCharging();let e=await ce();return e?!!e.charging:!1},async isPluggedIn(){if(i("power"))return await window.craft.power.isPluggedIn();let e=await ce();return e?!!e.charging||e.level>=0.999:!1},async isLowPowerMode(){if(i("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(i("power")){let t=await window.craft.power.batteryLevel();return typeof t==="number"?t:null}let e=await ce();return e?e.level:null},async timeRemaining(){if(i("power")){let r=await window.craft.power.timeRemaining();return typeof r==="number"?r:null}let e=await ce();if(!e)return null;let t=e.charging?e.chargingTime:e.dischargingTime;return Number.isFinite(t)?Math.round(t/60):null},async thermalState(){if(i("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(i("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(e="app is busy"){if(i("power")){await window.craft.power.preventSleep(e);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let t=window;if(t.__craftWebWakeLock?.release){try{await t.__craftWebWakeLock.release()}catch{}t.__craftWebWakeLock=null}try{let r=await navigator.wakeLock.request("screen");t.__craftWebWakeLock=r}catch{}},async allowSleep(){if(i("power")){await window.craft.power.allowSleep();return}let e=window.__craftWebWakeLock;if(e&&typeof e.release==="function"){try{await e.release()}catch{}window.__craftWebWakeLock=null}},onSleep(e){return h("craft:powerSleep",e)},onWake(e){return h("craft:powerWake",e)}};async function ce(){if(typeof navigator>"u")return null;let e=navigator;if(typeof e.getBattery!=="function")return null;try{return await e.getBattery()}catch{return null}}var ii={async connectionType(){if(i("network"))return await window.craft.network.connectionType();return Pt()},async wifiSSID(){if(i("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(i("network")){let e=await window.craft.network.wifiSignalStrength();return typeof e==="number"?e:void 0}return},async ipAddress(){if(i("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(i("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(i("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(i("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(i("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(i("network"))await window.craft.network.openPreferences()},onChange(e){if(i("network"))return h("craft:networkChange",e);if(typeof window>"u")return()=>{};let t=()=>e({type:Pt(),online:!0}),r=()=>e({type:"none",online:!1});return window.addEventListener("online",t),window.addEventListener("offline",r),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}};function Pt(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let e=navigator.connection;if(!e)return"unknown";let t=String(e.type||e.effectiveType||"unknown").toLowerCase();if(t==="wifi"||t==="cellular"||t==="ethernet"||t==="bluetooth"||t==="none")return t;return"unknown"}var ai={async checkForUpdates(){if(!i("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!i("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(e){if(!i("updater"))return;await window.craft.updater.setAutomaticChecks(e)},async setCheckInterval(e){if(!i("updater"))return;if(!Number.isFinite(e))throw Error("setCheckInterval: must be a finite number");let t=e<=0?0:Math.max(60,Math.round(e));await window.craft.updater.setCheckInterval(t)},async setFeedURL(e){if(!i("updater"))return;await window.craft.updater.setFeedURL(e)},async getLastUpdateCheckDate(){if(!i("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!i("updater"))return null;let e=await window.craft.updater.getUpdateInfo();if(!e||typeof e.version!=="string"||e.version.length===0)return null;return e},onAvailable(e){return h("craft:updateAvailable",e)},onDownloaded(e){return h("craft:updateDownloaded",e)},async verifySignature({payload:e,signatureB64:t,publicKeyB64:r}){let n=St(e),o;try{o=await crypto.subtle.importKey("raw",le(r),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",o,le(t),n)}catch{return!1}},async verifyDownload({url:e,signatureB64:t,publicKeyB64:r,fetchInit:n}){let o;try{o=await fetch(e,n)}catch{return{ok:!1,reason:"fetch-failed"}}if(!o.ok)return{ok:!1,reason:"http-error",status:o.status};let a=new Uint8Array(await o.arrayBuffer()),s;try{s=await crypto.subtle.importKey("raw",le(r),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let c=!1;try{c=await crypto.subtle.verify("Ed25519",s,le(t),St(a))}catch{c=!1}if(!c)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:a}}};function St(e){if(e instanceof ArrayBuffer)return new Uint8Array(e);let t=new ArrayBuffer(e.byteLength),r=new Uint8Array(t);return r.set(e),r}function le(e){if(typeof atob==="function"){let n=atob(e),o=new ArrayBuffer(n.length),a=new Uint8Array(o);for(let s=0;s<n.length;s++)a[s]=n.charCodeAt(s);return a}let t=Buffer.from(e,"base64"),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),new Uint8Array(r)}var si={onFocus(e){if(i("window"))return h("craft:window:focus",()=>e());return Ie("focus",e)},onBlur(e){if(i("window"))return h("craft:window:blur",()=>e());return Ie("blur",e)},onResize(e){if(i("window"))return h("craft:window:resize",e);if(typeof window>"u")return()=>{};let t=()=>e({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},onMove(e){if(i("window"))return h("craft:window:move",e);return()=>{}},onClose(e){if(i("window"))return h("craft:window:close",()=>e());return Ie("beforeunload",e)},onMinimize(e){if(i("window"))return h("craft:window:minimize",()=>e());if(typeof document>"u")return()=>{};let t=()=>{if(document.visibilityState==="hidden")e()};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},onRestore(e){if(i("window"))return h("craft:window:restore",()=>e());if(typeof document>"u")return()=>{};let t=()=>{if(document.visibilityState==="visible")e()};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)}};function Ie(e,t){if(typeof window>"u")return()=>{};let r=()=>t();return window.addEventListener(e,r),()=>window.removeEventListener(e,r)}var kt={name:"",version:"0.0.0"},ci={async hideDockIcon(){if(i("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(i("app"))await window.craft.app.showDockIcon()},async quit(){if(i("app"))await window.craft.app.quit()},async getInfo(){if(!i("app"))return kt;let e=await window.craft.app.getInfo();return{...kt,...e||{}}},async notify(e){if(!e.title)throw Error("notify: title is required");if(i("app"))await window.craft.app.notify(e)},async setBadge(e){if(i("app"))await window.craft.app.setBadge(e)},async bounce(e="informational"){if(i("app"))await window.craft.app.bounce(e)}};var li={app(e,t={}){return{label:e,items:[{label:`About ${e}`,role:"about"},{separator:!0},...t.settings?[{id:"stx.menu.settings",label:"Settings\u2026",shortcut:"cmd+,",onClick:t.settings},{separator:!0}]:[],{label:`Hide ${e}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${e}`,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(e,t={}){return[this.app(e,t),this.edit()]}},di=0;function ui(e){let t=new Map;return{payload:{menus:e.menus.map((n)=>({label:n.label,items:n.items.map((o)=>{let{onClick:a,...s}=o;if(s.separator)return s;let c=s.id??`stx.menu.${di++}`;if(a)t.set(c,a);return{...s,id:c}})}))},handlers:t}}var $e=null,pi={async set(e){if(!i("menu"))return!1;let{payload:t,handlers:r}=ui(e);if($e?.(),$e=null,r.size>0)$e=h("craft:menu:action",(n)=>{r.get(n.id)?.()});return await window.craft.menu.set(t),!0},async setDock(e){if(i("menu"))await window.craft.menu.setDock(e)},async addItem(e,t){if(i("menu"))await window.craft.menu.addItem(e,t)},async removeItem(e){if(i("menu"))await window.craft.menu.removeItem(e)},async enableItem(e){if(i("menu"))await window.craft.menu.enableItem(e)},async disableItem(e){if(i("menu"))await window.craft.menu.disableItem(e)},async checkItem(e){if(i("menu"))await window.craft.menu.checkItem(e)},async uncheckItem(e){if(i("menu"))await window.craft.menu.uncheckItem(e)},async setItemLabel(e,t){if(i("menu"))await window.craft.menu.setItemLabel(e,t)},async clearDock(){if(i("menu"))await window.craft.menu.clearDock()},onAction(e){return h("craft:menu:action",e)}};function Ct(e){if(e.separator)return{id:e.id||"",title:"",type:"separator"};return{id:e.id||"",title:e.title||"",icon:e.icon,shortcut:e.shortcut,enabled:e.disabled?!1:void 0,checked:e.checked?!0:void 0,type:e.submenu?"submenu":void 0,submenu:e.submenu?.map(Ct)}}async function At(e){if(!e.items||e.items.length===0)throw Error("contextMenu.show requires at least one item");if(!i("nativeUI"))return null;let t=window.craft?.nativeUI;if(!t)return null;let r=await t.showContextMenu({targetId:e.targetId||"",targetType:"general",x:Math.round(e.x),y:Math.round(e.y),items:e.items.map(Ct)});return{id:typeof r?.id==="string"?r.id:null,targetId:r?.targetId}}var fi={available(){return i("nativeUI")},async show(e){return await At(e)!==null},async pick(e){return(await At(e))?.id??null},onAction(e){return h("craft:contextmenu:action",(t)=>{if(typeof t.id==="string")e({id:t.id,targetId:t.targetId??""})})}};function Te(e){if(e===null||e===void 0||e===0)return"";return String(e)}function It(e){return e.map((t)=>({id:t.id,header:t.header,items:t.items.map((r)=>({id:r.id,label:r.label,icon:r.icon,badge:Te(r.badge)||void 0}))}))}function $t(e){return JSON.stringify(e.map((t)=>[t.id,t.header??"",t.items.map((r)=>[r.id,r.label,r.icon??""])]))}function Tt(e){return new Map(e.flatMap((t)=>t.items.map((r)=>[r.id,Te(r.badge)])))}var Et={available(){return i("nativeUI")&&typeof window.craft?.nativeUI?._emitSidebarSelect==="function"},create(e){if(!Et.available())return null;let t=window.craft?.nativeUI;if(!t)return null;let r=t.createSidebar({id:e.id,sections:It(e.sections),selected:e.selected}),n=e.sections,o=new Set;return r.onSelect((a)=>{for(let s of[...o])s(a)}),{id:r.id,update(a){if($t(a)===$t(n)){let s=Tt(n);for(let[c,l]of Tt(a))if(s.get(c)!==l)r.updateItem(c,{badge:l})}else r.setSections(It(a));n=a},updateItem(a,s){r.updateItem(a,{...s.label!==void 0?{label:s.label}:{},...s.icon!==void 0?{icon:s.icon}:{},..."badge"in s?{badge:Te(s.badge)}:{}}),n=n.map((c)=>({...c,items:c.items.map((l)=>l.id===a?{...l,...s}:l)}))},select(a){r.setSelectedItem(a)},onSelect(a){return o.add(a),()=>o.delete(a)},destroy(){o.clear(),r.destroy()}}}};var mi={accentColor:()=>E("system","accentColor",()=>""),highlightColor:()=>E("system","highlightColor",()=>""),language:()=>E("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>E("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>E("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>E("system","is24HourTime",()=>{try{let e=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return e.hourCycle==="h23"||e.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>E("system","reduceMotion",()=>Ee("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>E("system","reduceTransparency",()=>Ee("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>E("system","increaseContrast",()=>Ee("(prefers-contrast: more)")),systemVersion:()=>E("system","systemVersion",()=>""),hostname:()=>E("system","hostname",()=>""),username:()=>E("system","username",()=>""),async openPreferences(){if(i("system"))await window.craft.system.openPreferences()}};async function E(e,t,r){if(i(e))return await window.craft[e][t]();return await r()}function Ee(e){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(e).matches}var gi={async getDisplays(){if(i("screen"))return await window.craft.screen.getDisplays();return Mt()},async getPrimary(){if(i("screen")){let e=await window.craft.screen.getPrimary();return e&&typeof e.width==="number"?e:null}return Mt()[0]??null},onChange(e){if(i("screen"))return h("craft:screen:change",()=>e());if(typeof window>"u")return()=>{};let t=()=>e();return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)}};function Mt(){if(typeof window>"u"||!window.screen)return[];let e=window.screen;return[{id:0,x:e.left??0,y:e.top??0,width:e.width||0,height:e.height||0,workX:e.availLeft??0,workY:e.availTop??0,workWidth:e.availWidth??e.width??0,workHeight:e.availHeight??e.height??0,scaleFactor:window.devicePixelRatio||1}]}var hi={async set(e,t,r){if(!e)throw Error("keychain.set: service is required");if(!t)throw Error("keychain.set: account is required");await v("keychain").set(e,t,r)},async get(e,t){if(!e)throw Error("keychain.get: service is required");if(!t)throw Error("keychain.get: account is required");let r=await v("keychain").get(e,t);return typeof r==="string"?r:null},async delete(e,t){if(!e)throw Error("keychain.delete: service is required");if(!t)throw Error("keychain.delete: account is required");await v("keychain").delete(e,t)},async has(e,t){if(!e)throw Error("keychain.has: service is required");if(!t)throw Error("keychain.has: account is required");return await v("keychain").has(e,t)}};var wi={async check(e){if(i("permissions"))return await window.craft.permissions.check(e);return await Dt(e)},async request(e){if(i("permissions"))return await window.craft.permissions.request(e);return await bi(e)},async openSettings(e){if(i("permissions"))await window.craft.permissions.openSettings(e)}};async function Dt(e){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let t=await navigator.permissions.query({name:e});return xi(t.state)}catch{return"not-supported"}}async function bi(e){if(e==="notifications"&&typeof window<"u"&&"Notification"in window){let t=await window.Notification.requestPermission();return t==="granted"?"granted":t==="denied"?"denied":"undetermined"}return await Dt(e)}function xi(e){if(e==="granted")return"granted";if(e==="denied")return"denied";if(e==="prompt")return"undetermined";return"undetermined"}var yi={async print(){if(i("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(e){if(!e)throw Error("printToPDF: path is required");let t=e.startsWith("/"),r=/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\");if(!t&&!r)throw Error("printToPDF: path must be absolute");let n=await v("printing").printToPDF(e);return{ok:!!(n&&n.ok),path:n?.path}}};var vi={async enable(){if(!i("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!i("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!i("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};async function Me(e){if(!i("tray"))return;let t=window.craft.tray;await e(t)}var Pi={setIcon:(e)=>Me((t)=>t.setIcon(e)),setTitle:(e)=>Me((t)=>t.setTitle(e)),setTooltip:(e)=>Me((t)=>t.setTooltip(e))};function De(){if(!i("window"))return null;return window.craft.window}function D(e){let t=De();if(!t)return Promise.resolve();try{return Promise.resolve(e(t)).then(()=>{return},()=>{return})}catch{return Promise.resolve()}}var Si={get available(){return De()!==null},open(e){let t=()=>{if(typeof window<"u"&&e.url)window.open(e.url,e.name);return{name:e.name}},r=De();if(!r?.open)return Promise.resolve(t());return r.open(e).then((n)=>({name:n?.name||e.name})).catch(t)},close:()=>D((e)=>e.close?.()),show:()=>D((e)=>e.show?.()),hide:()=>D((e)=>e.hide?.()),focus:()=>D((e)=>e.focus?.()),minimize:()=>D((e)=>e.minimize?.()),maximize:()=>D((e)=>e.maximize?.()),center:()=>D((e)=>e.center?.()),startDrag:()=>D((e)=>e.startDrag?.()),setTitle:(e)=>D((t)=>t.setTitle?.(e)),setSize:(e,t)=>D((r)=>r.setSize?.(e,t)),setAppearance:(e)=>D((t)=>t.setAppearance?.(e))};var ki={async addItem(e){if(i("touchbar"))await window.craft.touchbar.addItem(e)},async removeItem(e){if(i("touchbar"))await window.craft.touchbar.removeItem(e)},async updateItem(e,t){if(i("touchbar"))await window.craft.touchbar.updateItem(e,t)},async setLabel(e,t){if(i("touchbar"))await window.craft.touchbar.setLabel(e,t)},async setIcon(e,t){if(i("touchbar"))await window.craft.touchbar.setIcon(e,t)},async setEnabled(e,t){if(i("touchbar"))await window.craft.touchbar.setEnabled(e,t)},async setSliderValue(e,t){if(i("touchbar"))await window.craft.touchbar.setSliderValue(e,t)},async clear(){if(i("touchbar"))await window.craft.touchbar.clear()},async show(){if(i("touchbar"))await window.craft.touchbar.show()},async hide(){if(i("touchbar"))await window.craft.touchbar.hide()},onAction(e){return h("craft:touchbar:action",e)}};var Ai=/^[\da-f]*$/i;function Ci(e,t){if(typeof t!=="string"||!Ai.test(t)||t.length%2!==0)throw Error(`${e}: must be a hex string with even length, got ${JSON.stringify(t)}`)}var Ii={async isEnabled(){return i("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return i("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return i("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return i("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(i("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(i("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return i("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(e){if(i("bluetooth"))await window.craft.bluetooth.connect(e)},async disconnect(e){if(i("bluetooth"))await window.craft.bluetooth.disconnect(e)},async openPreferences(){if(i("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(e){if(!e)throw Error("bluetooth.discoverServices: deviceId is required");if(!i("bluetooth"))return[];let t=await window.craft.bluetooth.discoverServices(e);return Array.isArray(t)?t:[]},async discoverCharacteristics(e,t){if(!e||!t)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!i("bluetooth"))return[];let r=await window.craft.bluetooth.discoverCharacteristics(e,t);return Array.isArray(r)?r:[]},async readCharacteristic(e,t,r){if(!e||!t||!r)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!i("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(e,t,r)},async writeCharacteristic(e,t,r,n,o="with-response"){if(!e||!t||!r)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(Ci("bluetooth.writeCharacteristic.valueHex",n),!i("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(e,t,r,n,o)},async setCharacteristicNotify(e,t,r,n){if(!e||!t||!r)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!i("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(e,t,r,n)},onDeviceFound(e){return h("craft:bluetooth:deviceFound",e)},onDeviceConnected(e){return h("craft:bluetooth:deviceConnected",e)},onDeviceDisconnected(e){return h("craft:bluetooth:deviceDisconnected",e)},onCharacteristicValue(e){return h("craft:bluetooth:characteristicValue",e)}};var $i={async speak(e,t){if(!e)throw Error("speech.speak: text is required");if(i("speech")){await window.craft.speech.speak(e,t);return}if(typeof window<"u"&&window.speechSynthesis){let r=new window.SpeechSynthesisUtterance(e);if(t){if(t.rate!=null)r.rate=t.rate;if(t.pitch!=null)r.pitch=t.pitch;if(t.volume!=null)r.volume=t.volume;if(t.voice){let o=window.speechSynthesis.getVoices().find((a)=>a.voiceURI===t.voice||a.name===t.voice||a.lang===t.voice);if(o)r.voice=o}}window.speechSynthesis.speak(r)}},async stop(){if(i("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(i("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(i("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(i("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(i("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map((t)=>({id:t.voiceURI||t.name,name:t.name,language:t.lang||"",quality:"default"}));return[]}};var J=[],Be=!0,Oe,Re,Q={async report(e){if(i("crashReporter")){await window.craft.crashReporter.report(e);return}if(!Be)return;let t=e instanceof Error?{timestamp:Date.now(),severity:"error",message:e.message,source:"js",stack:e.stack||"",userId:Oe,appVersion:Re}:{timestamp:Date.now(),severity:e.severity||"error",message:e.message||"",source:e.source||"js",stack:e.stack||"",userId:Oe,appVersion:Re};if(J.length>=64)J.shift();J.push(t)},async flush(){if(i("crashReporter"))return await window.craft.crashReporter.flush();return[...J]},async clear(){if(i("crashReporter")){await window.craft.crashReporter.clear();return}J.length=0},async setEnabled(e){if(i("crashReporter")){await window.craft.crashReporter.setEnabled(e);return}Be=e},async isEnabled(){if(i("crashReporter"))return await window.craft.crashReporter.isEnabled();return Be},async setUser(e){if(i("crashReporter")){await window.craft.crashReporter.setUser(e);return}Oe=e||void 0},async setAppVersion(e){if(i("crashReporter")){await window.craft.crashReporter.setAppVersion(e);return}Re=e||void 0},attachGlobalHandlers(){if(i("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let e=(r)=>{Q.report({severity:"error",message:r.message,source:"js",stack:r.error?.stack||`${r.message}
|
|
927
|
+
at ${r.filename}:${r.lineno}:${r.colno}`}).catch(()=>{})},t=(r)=>{let n=r.reason;Q.report({severity:"error",message:n?.message||String(n),source:"js",stack:n?.stack||""}).catch(()=>{})};return window.addEventListener("error",e),window.addEventListener("unhandledrejection",t),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",t)}},forwardTo(e){return Oi(e)}},Ti="craft:crashReporter:pending",Ei=/[\w.+-]+@[\w-]+\.[\w.-]+/g,Mi=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,Di=/\/(?:Users|home)\/[^\s/'"`]+/g;function Ot(e){let t=(r)=>r.replace(Ei,"<email>").replace(Mi,"<ip>").replace(Di,"/<home>");return{...e,message:t(e.message),stack:t(e.stack)}}async function Rt(e,t){let r=new TextEncoder,n=await crypto.subtle.importKey("raw",r.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),o=await crypto.subtle.sign("HMAC",n,r.encode(t));return[...new Uint8Array(o)].map((a)=>a.toString(16).padStart(2,"0")).join("")}function Bi(e){if(!e||typeof localStorage>"u")return[];try{let t=localStorage.getItem(e);if(!t)return[];let r=JSON.parse(t);return Array.isArray(r)?r:[]}catch{return[]}}function Bt(e,t){if(!e||typeof localStorage>"u")return;try{if(t.length===0)localStorage.removeItem(e);else localStorage.setItem(e,JSON.stringify(t))}catch{}}function Oi(e){let{endpoint:t,intervalMs:r=60000,signingSecret:n,redact:o=!0,headers:a={},maxRetries:s=5,persistKey:c}=e,l=c===null?null:c??Ti,d=Bi(l),p=!1,m=null,u=null,w=typeof o==="function"?o:o===!1?(k)=>k:Ot;async function b(k){let A=JSON.stringify({entries:k}),B={"Content-Type":"application/json",...a};if(n)B["X-Craft-Signature"]=await Rt(n,A);let ee=0,O=1000;while(!p)try{let z=await fetch(t,{method:"POST",headers:B,body:A});if(z.ok)return;if(z.status>=400&&z.status<500)return;throw Error(`HTTP ${z.status}`)}catch(z){if(ee+=1,ee>s)throw d=[...k,...d],Bt(l,d),z;await new Promise((Ht)=>{setTimeout(Ht,O)}),O=Math.min(O*2,60000)}}async function S(){if(p||u)return u??void 0;let k=await Q.flush();if(k.length>0)await Q.clear();if(d=[...d,...k.map((B)=>w(B))],d.length===0)return;let A=d;return d=[],Bt(l,d),u=b(A).catch(()=>{}).finally(()=>{u=null}),u}if(r>0)m=setInterval(()=>{S().catch(()=>{})},r);return{async flushNow(){await S()},stop(){if(p=!0,m)clearInterval(m);m=null},pending(){return[...d]}}}var Ri={async isAvailable(){if(!i("iap"))return!1;return await window.craft.iap.isAvailable()},async getProducts(e){if(!i("iap"))return[];let t=Array.isArray(e)?e:[String(e)];return await window.craft.iap.getProducts(t)},async purchase(e){if(!i("iap"))return{queued:!1,productId:e,reason:"IAP bridge not available"};let t=await window.craft.iap.purchase(e);return{queued:!!(t&&t.queued),productId:t?.productId,reason:t?.reason}},async restorePurchases(){if(!i("iap"))return{ok:!1};let e=await window.craft.iap.restorePurchases();return{ok:!!(e&&e.ok)}},async finishTransaction(e){if(!i("iap"))return;await window.craft.iap.finishTransaction(e)},async getReceiptData(){if(!i("iap"))return null;let e=await window.craft.iap.getReceiptData();return e?String(e):null},onPurchased(e){return h("craft:iap:purchased",e)},onFailed(e){return h("craft:iap:failed",e)},onRestored(e){return h("craft:iap:restored",e)},onProductsLoaded(e){return h("craft:iap:productsLoaded",(t)=>e(t.products||[]))},onRefunded(e){return h("craft:iap:refunded",e)},onSubscriptionStatusChanged(e){return h("craft:iap:subscriptionStatusChanged",e)},async getActiveSubscriptions(){if(!i("iap"))return[];let e=window.craft.iap.getActiveSubscriptions;if(typeof e!=="function")return[];let t=await e();return Array.isArray(t)?t:[]},async isEligibleForIntroOffer(e){if(!i("iap"))return!1;let t=window.craft.iap.isEligibleForIntroOffer;if(typeof t!=="function")return!1;return!!await t(e)}};var Z={async startActivity(e,t){if(!e)throw Error("handoff.startActivity: type is required");if(!i("handoff"))return!1;let r=await window.craft.handoff.startActivity(e,t);return typeof r==="boolean"?r:!!(r&&r.ok)},async updateActivity(e){if(!i("handoff"))return!1;let t=await window.craft.handoff.updateActivity(e);return typeof t==="boolean"?t:!!(t&&t.ok)},async stopActivity(){if(!i("handoff"))return;await window.craft.handoff.stopActivity()},async getCurrentActivity(){if(!i("handoff"))return null;let e=await window.craft.handoff.getCurrentActivity();return e&&typeof e.type==="string"?e:null},onIncoming(e){return h("craft:handoff:incoming",e)}};var Li={async start(e,t){return Z.startActivity(e,{title:t?.title,webpageURL:t?.webpageURL,userInfo:t?.state})},async update(e){return Z.updateActivity({title:e.title,webpageURL:e.webpageURL,userInfo:e.state})},async stop(){await Z.stopActivity()}};var _i={async requestPermission(e="whenInUse"){if(i("location"))return await window.craft.location.requestPermission(e);if(typeof navigator<"u"&&navigator.geolocation)return"undetermined";return"not-supported"},async getAuthorization(){if(i("location"))return await window.craft.location.getAuthorization();return"unknown"},async getCurrentLocation(){if(i("location"))return await window.craft.location.getCurrentLocation();if(typeof navigator<"u"&&navigator.geolocation)return navigator.geolocation.getCurrentPosition((e)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:e.coords.latitude,longitude:e.coords.longitude,altitude:e.coords.altitude,horizontalAccuracy:e.coords.accuracy,verticalAccuracy:e.coords.altitudeAccuracy,speed:e.coords.speed}}))},(e)=>{window.dispatchEvent(new CustomEvent("craft:location:error",{detail:{message:e.message||String(e)}}))}),{requested:!0};return{requested:!1}},async startWatching(e){if(i("location"))return await window.craft.location.startWatching(e);if(typeof navigator<"u"&&navigator.geolocation){let t=navigator.geolocation.watchPosition((r)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:r.coords.latitude,longitude:r.coords.longitude,altitude:r.coords.altitude,horizontalAccuracy:r.coords.accuracy,verticalAccuracy:r.coords.altitudeAccuracy,speed:r.coords.speed}}))});return window.__craftWebLocationWatchId=t,!0}return!1},async stopWatching(){if(i("location")){await window.craft.location.stopWatching();return}if(typeof navigator<"u"&&navigator.geolocation){let e=window.__craftWebLocationWatchId;if(e!=null)navigator.geolocation.clearWatch(e),window.__craftWebLocationWatchId=null}},onUpdate(e){return h("craft:location:update",e)},onError(e){return h("craft:location:error",e)},onAuthChanged(e){return h("craft:location:authChanged",e)}};var Ni={async captureScreen(){if(!i("screenCapture"))return null;let e=await window.craft.screenCapture.captureScreen();return e?String(e):null},async captureWindow(e){if(!i("screenCapture"))return null;if(!Number.isFinite(e)||e<=0)throw Error("captureWindow: id must be a positive number");let t=await window.craft.screenCapture.captureWindow(e);return t?String(t):null},async listWindows(){if(!i("screenCapture"))return[];return await window.craft.screenCapture.listWindows()}};var _t=250,Nt=60000,ue=2000,Lt={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function Fi(){return{...Lt,signals:{...Lt.signals},sources:[]}}var de={async getState(){if(!i("screenSharing"))return Fi();return await window.craft.screenSharing.getState()},async watch(e=ue){let t=Number.isFinite(e)?Math.min(Nt,Math.max(_t,Math.round(e))):ue;if(!i("screenSharing"))return t;let r=await window.craft.screenSharing.watch(t);return r&&r.intervalMs||t},async stop(){if(!i("screenSharing"))return;await window.craft.screenSharing.unwatch()},onChange(e){return h("craft:screenSharing:change",e)}};async function Wi(e,t=ue){let r=de.onChange(e);try{await de.watch(t)}catch(o){throw r(),o}let n;return()=>{if(!n)r(),n=de.stop();return n}}var zi={supported:!1,isFocused:null,authorization:"unsupported"};function Ft(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var Le={async getStatus(){if(!i("focus"))return{...zi};return await window.craft.focus.getStatus()},async requestAuthorization(){if(!i("focus"))return"unsupported";return await window.craft.focus.requestAuthorization()},async setEnabled(e,t={}){if(!i("focus"))return Ft();if(!(e?t.onShortcut:t.offShortcut))return{ok:!1,error:`focus.setEnabled: no ${e?"onShortcut":"offShortcut"} configured`};return await window.craft.focus.setEnabled(e,t)},async runShortcut(e){if(!i("focus"))return Ft();if(!e)throw Error("focus.runShortcut: name is required");return await window.craft.focus.runShortcut(e)},async listShortcuts(){if(!i("focus"))return[];return await window.craft.focus.listShortcuts()},async listShortcutsResult(){if(!i("focus"))return{canList:!1,shortcuts:[]};let t=await window.craft.focus.listShortcutsResult?.();return{canList:Boolean(t?.canList),shortcuts:t?.shortcuts??[]}}};async function Hi(...e){if(e.length===0)return!1;let t=new Set(await Le.listShortcuts());return e.every((r)=>t.has(r))}async function Ui(...e){if(e.length===0)return!1;let{canList:t,shortcuts:r}=await Le.listShortcutsResult();if(!t)return"unknown";let n=new Set(r);return e.every((o)=>n.has(o))}var qi={async start(e=0,t="127.0.0.1"){if(!i("localServer"))return{port:0,started:!1,reason:"bridge unavailable"};return await window.craft.localServer.start(e,t)},async stop(){if(!i("localServer"))return;await window.craft.localServer.stop()},async respond(e){if(!i("localServer"))return;await window.craft.localServer.respond(e||{status:200,body:"OK"})},onRequest(e){return h("craft:localServer:request",e)},async awaitOAuthCallback(e={}){v("localServer");let{port:t=0,host:r="127.0.0.1",timeoutMs:n=300000,successHTML:o}=e,a=await this.start(t,r);if(!a.started)throw Error(`localServer: start failed${a.reason?` \u2014 ${a.reason}`:""}`);return new Promise((s,c)=>{let l=setTimeout(()=>{d(),this.stop().catch(()=>{}),c(Error("localServer: OAuth callback timed out"))},n),d=this.onRequest(({url:p})=>{clearTimeout(l),d();let m=o??`<!doctype html><meta charset="utf-8"><title>Done</title>
|
|
928
928
|
<style>body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;display:flex;align-items:center;justify-content:center;height:100vh;margin:0;background:#f5f5f7}</style>
|
|
929
929
|
<div><h1>You can close this tab.</h1><p>Returning to the app\u2026</p></div>
|
|
930
|
-
<script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:m,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),s({url:p,port:a.port})})})}};var Ui={async isAvailable(){if(!o("biometric"))return!1;return await window.craft.biometric.isAvailable()},async getBiometryType(){if(!o("biometric"))return"none";return await window.craft.biometric.getBiometryType()},async evaluate(e,t){if(!e)throw Error("biometric.evaluate: reason is required");if(!o("biometric"))return{success:!1,errorCode:-1};return await window.craft.biometric.evaluate(e,t)}};var I=null,qi={async play(e,t){if(o("audio"))return await window.craft.audio.play(e,t);if(typeof window>"u"||typeof Audio>"u")return!1;if(I)I.pause(),I=null;if(I=new Audio(e),t?.volume!=null)I.volume=t.volume;if(t?.loops)I.loop=!0;try{return await I.play(),!0}catch{return!1}},async playSystemSound(e){if(o("audio"))return await window.craft.audio.playSystemSound(e);if(typeof window>"u"||typeof Audio>"u")return!1;try{return I=new Audio(`/System/Library/Sounds/${e}.aiff`),await I.play(),!0}catch{return!1}},async stop(){if(o("audio")){await window.craft.audio.stop();return}if(I)I.pause(),I.currentTime=0,I=null},async isPlaying(){if(o("audio"))return await window.craft.audio.isPlaying();return!!(I&&!I.paused)},async startRecording(e,t){if(o("audio"))return await window.craft.audio.startRecording(e,t);return!1},async stopRecording(){if(o("audio"))await window.craft.audio.stopRecording()},async isRecording(){if(o("audio"))return await window.craft.audio.isRecording();return!1}};var Vi={async execute(e){if(!e)throw Error("appleScript.execute: source is required");if(!o("appleScript"))return{ok:!1};return await window.craft.appleScript.execute(e)}};var ji={async getDefault(e){if(!e)throw Error("fileAssociations.getDefault: uti is required");if(!o("fileAssociations"))return null;let t=await window.craft.fileAssociations.getDefault(e);return t?String(t):null},async setDefault(e,t){if(!e||!t)throw Error("fileAssociations.setDefault: uti and bundleId are required");if(!o("fileAssociations"))return!1;return await window.craft.fileAssociations.setDefault(e,t)}};var Ki={async get(e){if(!e)throw Error("tags.get: path is required");if(!o("tags"))return[];return await window.craft.tags.get(e)},async set(e,t){if(!e)throw Error("tags.set: path is required");if(!o("tags"))return!1;let r=Array.isArray(t)?t:[String(t)];return await window.craft.tags.set(e,r)},async clear(e){if(!e)throw Error("tags.clear: path is required");if(!o("tags"))return!1;return await window.craft.tags.clear(e)}};var Gi={async countPages(e){if(!e)throw Error("pdf.countPages: path is required");if(!o("pdf"))return 0;return await window.craft.pdf.countPages(e)},async extractText(e){if(!e)throw Error("pdf.extractText: path is required");if(!o("pdf"))return"";return await window.craft.pdf.extractText(e)}};var Yi={async debug(e){if(o("log"))await window.craft.log.debug(e);else console.debug(e)},async info(e){if(o("log"))await window.craft.log.info(e);else console.info(e)},async warn(e){if(o("log"))await window.craft.log.warn(e);else console.warn(e)},async error(e){if(o("log"))await window.craft.log.error(e);else console.error(e)}};var Xi={async browse(e){if(!o("bonjour"))return{started:!1,reason:"bridge unavailable"};return await window.craft.bonjour.browse(e)},async stop(){if(o("bonjour"))await window.craft.bonjour.stop()},onFound(e){return h("craft:bonjour:found",e)},onLost(e){return h("craft:bonjour:lost",e)}};var Ji={async index(e){if(!o("spotlight"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.spotlight.index(e)},async remove(e){if(!o("spotlight"))return{ok:!1};return await window.craft.spotlight.remove(e)},async removeAll(){if(!o("spotlight"))return{ok:!1};return await window.craft.spotlight.removeAll()}};var Qi={async isAvailable(){if(!o("speechRecognition"))return!1;return await window.craft.speechRecognition.isAvailable()},async start(e){if(!o("speechRecognition"))return{started:!1,reason:"bridge unavailable"};return await window.craft.speechRecognition.start(e)},async stop(){if(o("speechRecognition"))await window.craft.speechRecognition.stop()},onPartial(e){return h("craft:speechRecognition:partial",e)},onFinal(e){return h("craft:speechRecognition:final",e)}};var Zi={async recognizeText(e){if(!e)throw Error("vision.recognizeText: path is required");if(!o("vision"))return[];return await window.craft.vision.recognizeText(e)},async detectFaces(e){if(!e)throw Error("vision.detectFaces: path is required");if(!o("vision"))return[];return await window.craft.vision.detectFaces(e)},async detectBarcodes(e){if(!e)throw Error("vision.detectBarcodes: path is required");if(!o("vision"))return[];return await window.craft.vision.detectBarcodes(e)}};var ea={async listSources(){if(!o("midi"))return[];return await window.craft.midi.listSources()},async listDestinations(){if(!o("midi"))return[];return await window.craft.midi.listDestinations()},async send(e,t){if(!o("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.send(e,t)},async subscribe(e){if(!o("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.subscribe(e)},async unsubscribe(e){if(!o("midi"))return{ok:!1};return await window.craft.midi.unsubscribe(e)},onMessage(e){return h("craft:midi:message",e)}};var ta={async loadModel(e,t){if(!e||!t)throw Error("coreml.loadModel: id and path are required");if(!o("coreml"))return!1;return await window.craft.coreml.loadModel(e,t)},async unloadModel(e){if(!o("coreml"))return;await window.craft.coreml.unloadModel(e)},async predict(e,t){if(!e)throw Error("coreml.predict: id is required");if(!o("coreml"))return null;return await window.craft.coreml.predict(e,t)}};var ra={async listCameras(){if(!o("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var na={async register(e){if(!e)throw Error("serviceMenu.register: name is required");if(!o("serviceMenu"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serviceMenu.register(e)},async unregister(e){if(!e)throw Error("serviceMenu.unregister: name is required");if(!o("serviceMenu"))return;await window.craft.serviceMenu.unregister(e)},onInvoked(e){return h("craft:serviceMenu:invoked",e)}};var oa={async list(){if(!o("serial"))return[];return await window.craft.serial.list()},async open(e,t=9600){if(!e)throw Error("serial.open: path is required");if(!o("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.open(e,t)},async write(e,t){if(!e)throw Error("serial.write: id is required");if(!o("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.write(e,t)},async close(e){if(!o("serial"))return;await window.craft.serial.close(e)},onData(e){return h("craft:serial:data",e)}};var _t=[{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 ia(){return _t.map(({name:e,support:t})=>({name:e,support:t,available:o(e)}))}function Nt(e){let t=_t.find((r)=>r.name===e);if(!t)return;return{...t,available:o(e)}}function aa(e){let t=Nt(e);return!!t&&t.available}function sa(e,t={}){if(!Number.isInteger(e)||e<0||e>86400000)return Promise.reject(RangeError("delayMs must be an integer between 0 and 86400000"));let{signal:r}=t,n=()=>new DOMException("Background delay aborted","AbortError");if(r?.aborted)return Promise.reject(n());if(o("timers"))return v("timers").sleep(e,t);if(typeof window<"u"&&window.craft)return Promise.reject(Error("Native background deadlines require a Craft runtime with timers.sleep support"));return new Promise((i,a)=>{let s=setTimeout(()=>{r?.removeEventListener("abort",c),i()},e);function c(){clearTimeout(s),r?.removeEventListener("abort",c),a(n())}r?.addEventListener("abort",c,{once:!0})})}export{Lr as AVAILABLE_COMPONENTS,Xe as AutoUpdater,_r as COMPONENT_STYLES,ue as DEFAULT_WATCH_INTERVAL_MS,Rt as MAX_WATCH_INTERVAL_MS,Ot as MIN_WATCH_INTERVAL_MS,Xr as MODAL_STYLES,er as TOAST_STYLES,cn as TRAY_MENU_STYLES,Qe as UPDATE_MANIFEST_ASSET,jr as alert,ai as appInfo,Vi as appleScript,qi as audio,sa as backgroundDelay,ri as battery,Ui as biometric,Ai as bluetooth,Xi as bonjour,ie as bundlePathForExecutable,no as caffeinate,Yn as canReplaceBundle,Xn as clearQuarantine,Fo as clipboard,Yr as closeAllModals,En as closeAllWindows,Vr as confirm,ui as contextMenu,ra as continuityCamera,ta as coreml,jn as craftBinaryNotFoundMessage,ye as craftWindowArguments,Q as crashReporter,Sr as createAccordion,hr as createAutocomplete,sr as createAvatar,ar as createBadge,tr as createButton,cr as createCard,Er as createChart,nr as createCheckbox,xr as createChip,Mr as createCodeEditor,fr as createColorPicker,Tr as createDataGrid,mr as createDatePicker,dr as createDropdown,Or as createFileExplorer,eo as createGitHubUpdateManifest,tt as createGitHubUpdater,br as createImageView,Ro as createInterval,wr as createLabel,Cr as createListView,Dr as createMediaPlayer,tn as createMenubar,Ar as createModalComponent,wo as createPreferences,ir as createProgressBar,pr as createRadioButton,ur as createRating,vr as createScrollView,ro as createSelfUpdater,or as createSlider,Pr as createSplitView,kr as createStepper,je as createSystemTray,Ir as createTable,lr as createTabs,rr as createTextInput,gr as createTimePicker,Oo as createTimer,yr as createTooltip,$r as createTreeView,Rr as createWebView,Mn as createWindow,Bn as createWindowWithHTML,Pe as decaffeinate,ti as deepLinks,Lo as delay,Jt as dismissAlertById,Qt as dismissAllAlerts,Zo as dragOut,Jn as extractBundle,ji as fileAssociations,Re as focus,zi as focusShortcutsReady,No as formatCompact,so as formatDuration,ao as formatRemainingTime,Io as formatShortcut,_o as formatTime,Uo as fs,Je as generateUpdateManifest,Zt as getActiveAlertCount,Gr as getActiveModalCount,rn as getActiveTrayInstances,$n as getActiveWindowIds,io as getCaffeinateStatus,ia as getCapabilities,Nt as getCapability,An as getDesktopConfig,xn as getDialogBridgeScript,Bo as getRegisteredHotkeys,an as getSimulatedTrayHTML,sn as getTrayBridgeScript,nn as getTrayInstance,Tn as getWindow,Rn as getWindowBridgeScript,Ze as githubLatestAssetUrl,et as githubReleaseAssetUrl,Xo as globalShortcuts,Z as handoff,Wi as hasFocusShortcuts,Bi as iap,Ao as isAutoLaunchEnabled,aa as isAvailable,oo as isCaffeinated,ei as isDragOutAvailable,On as isWebviewAvailable,mi as keychain,Oi as liveActivities,Hi as localServer,Ri as location,Yi as log,di as menu,ea as midi,xi as nativeAutoLaunch,yi as nativeTray,vi as nativeWindow,ni as network,zo as notifications,Xt as notify,Dn as openDevWindow,qn as pack,Vn as packageApp,ft as parseShortcut,Gi as pdf,gi as permissions,bi as printing,Kr as prompt,rt as quitLauncher,ve as readBundleIdentity,Mt as redactPII,Mo as registerHotkey,nt as relaunchBundle,zt as requestNotificationPermission,Cn as resetDesktopConfig,Kn as resolveCraftBinary,Un as resolveCraftExecutablePath,to as runningBundleTeamId,fi as screen,Li as screenCapture,de as screenSharing,oa as serial,na as serviceMenu,ko as setAutoLaunch,kn as setDesktopConfig,Yo as shell,fe as showAlert,gn as showAlertDialog,mn as showColorPicker,hn as showConfirmDialog,wn as showErrorDialog,Ur as showErrorModal,Yt as showErrorToast,Fe as showInfoModal,jt as showInfoToast,K as showMessageBox,H as showModal,pn as showOpenDialog,We as showQuestionModal,fn as showSaveDialog,qr as showSuccessModal,Kt as showSuccessToast,j as showToast,bn as showWarningDialog,Hr as showWarningModal,Gt as showWarningToast,It as sidebar,Dt as signPayload,Ci as speech,Qi as speechRecognition,Ji as spotlight,si as standardMenus,Qn as swapBundle,pi as system,Ki as tags,Jo as theme,Pi as touchbar,on as triggerTrayAction,Do as unregisterAllHotkeys,gt as unregisterHotkey,oi as updater,Zn as verifyBundleTrust,Zi as vision,Ni as watchScreenSharing,ii as windowEvents};
|
|
930
|
+
<script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:m,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),s({url:p,port:a.port})})})}};var Vi={async isAvailable(){if(!i("biometric"))return!1;return await window.craft.biometric.isAvailable()},async getBiometryType(){if(!i("biometric"))return"none";return await window.craft.biometric.getBiometryType()},async evaluate(e,t){if(!e)throw Error("biometric.evaluate: reason is required");if(!i("biometric"))return{success:!1,errorCode:-1};return await window.craft.biometric.evaluate(e,t)}};var I=null,ji={async play(e,t){if(i("audio"))return await window.craft.audio.play(e,t);if(typeof window>"u"||typeof Audio>"u")return!1;if(I)I.pause(),I=null;if(I=new Audio(e),t?.volume!=null)I.volume=t.volume;if(t?.loops)I.loop=!0;try{return await I.play(),!0}catch{return!1}},async playSystemSound(e){if(i("audio"))return await window.craft.audio.playSystemSound(e);if(typeof window>"u"||typeof Audio>"u")return!1;try{return I=new Audio(`/System/Library/Sounds/${e}.aiff`),await I.play(),!0}catch{return!1}},async stop(){if(i("audio")){await window.craft.audio.stop();return}if(I)I.pause(),I.currentTime=0,I=null},async isPlaying(){if(i("audio"))return await window.craft.audio.isPlaying();return!!(I&&!I.paused)},async startRecording(e,t){if(i("audio"))return await window.craft.audio.startRecording(e,t);return!1},async stopRecording(){if(i("audio"))await window.craft.audio.stopRecording()},async isRecording(){if(i("audio"))return await window.craft.audio.isRecording();return!1}};var Ki={async execute(e){if(!e)throw Error("appleScript.execute: source is required");if(!i("appleScript"))return{ok:!1};return await window.craft.appleScript.execute(e)}};var Gi={async getDefault(e){if(!e)throw Error("fileAssociations.getDefault: uti is required");if(!i("fileAssociations"))return null;let t=await window.craft.fileAssociations.getDefault(e);return t?String(t):null},async setDefault(e,t){if(!e||!t)throw Error("fileAssociations.setDefault: uti and bundleId are required");if(!i("fileAssociations"))return!1;return await window.craft.fileAssociations.setDefault(e,t)}};var Yi={async get(e){if(!e)throw Error("tags.get: path is required");if(!i("tags"))return[];return await window.craft.tags.get(e)},async set(e,t){if(!e)throw Error("tags.set: path is required");if(!i("tags"))return!1;let r=Array.isArray(t)?t:[String(t)];return await window.craft.tags.set(e,r)},async clear(e){if(!e)throw Error("tags.clear: path is required");if(!i("tags"))return!1;return await window.craft.tags.clear(e)}};var Xi={async countPages(e){if(!e)throw Error("pdf.countPages: path is required");if(!i("pdf"))return 0;return await window.craft.pdf.countPages(e)},async extractText(e){if(!e)throw Error("pdf.extractText: path is required");if(!i("pdf"))return"";return await window.craft.pdf.extractText(e)}};var Ji={async debug(e){if(i("log"))await window.craft.log.debug(e);else console.debug(e)},async info(e){if(i("log"))await window.craft.log.info(e);else console.info(e)},async warn(e){if(i("log"))await window.craft.log.warn(e);else console.warn(e)},async error(e){if(i("log"))await window.craft.log.error(e);else console.error(e)}};var Qi={async browse(e){if(!i("bonjour"))return{started:!1,reason:"bridge unavailable"};return await window.craft.bonjour.browse(e)},async stop(){if(i("bonjour"))await window.craft.bonjour.stop()},onFound(e){return h("craft:bonjour:found",e)},onLost(e){return h("craft:bonjour:lost",e)}};var Zi={async index(e){if(!i("spotlight"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.spotlight.index(e)},async remove(e){if(!i("spotlight"))return{ok:!1};return await window.craft.spotlight.remove(e)},async removeAll(){if(!i("spotlight"))return{ok:!1};return await window.craft.spotlight.removeAll()}};var ea={async isAvailable(){if(!i("speechRecognition"))return!1;return await window.craft.speechRecognition.isAvailable()},async start(e){if(!i("speechRecognition"))return{started:!1,reason:"bridge unavailable"};return await window.craft.speechRecognition.start(e)},async stop(){if(i("speechRecognition"))await window.craft.speechRecognition.stop()},onPartial(e){return h("craft:speechRecognition:partial",e)},onFinal(e){return h("craft:speechRecognition:final",e)}};var ta={async recognizeText(e){if(!e)throw Error("vision.recognizeText: path is required");if(!i("vision"))return[];return await window.craft.vision.recognizeText(e)},async detectFaces(e){if(!e)throw Error("vision.detectFaces: path is required");if(!i("vision"))return[];return await window.craft.vision.detectFaces(e)},async detectBarcodes(e){if(!e)throw Error("vision.detectBarcodes: path is required");if(!i("vision"))return[];return await window.craft.vision.detectBarcodes(e)}};var ra={async listSources(){if(!i("midi"))return[];return await window.craft.midi.listSources()},async listDestinations(){if(!i("midi"))return[];return await window.craft.midi.listDestinations()},async send(e,t){if(!i("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.send(e,t)},async subscribe(e){if(!i("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.subscribe(e)},async unsubscribe(e){if(!i("midi"))return{ok:!1};return await window.craft.midi.unsubscribe(e)},onMessage(e){return h("craft:midi:message",e)}};var na={async loadModel(e,t){if(!e||!t)throw Error("coreml.loadModel: id and path are required");if(!i("coreml"))return!1;return await window.craft.coreml.loadModel(e,t)},async unloadModel(e){if(!i("coreml"))return;await window.craft.coreml.unloadModel(e)},async predict(e,t){if(!e)throw Error("coreml.predict: id is required");if(!i("coreml"))return null;return await window.craft.coreml.predict(e,t)}};var oa={async listCameras(){if(!i("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var ia={async register(e){if(!e)throw Error("serviceMenu.register: name is required");if(!i("serviceMenu"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serviceMenu.register(e)},async unregister(e){if(!e)throw Error("serviceMenu.unregister: name is required");if(!i("serviceMenu"))return;await window.craft.serviceMenu.unregister(e)},onInvoked(e){return h("craft:serviceMenu:invoked",e)}};var aa={async list(){if(!i("serial"))return[];return await window.craft.serial.list()},async open(e,t=9600){if(!e)throw Error("serial.open: path is required");if(!i("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.open(e,t)},async write(e,t){if(!e)throw Error("serial.write: id is required");if(!i("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.write(e,t)},async close(e){if(!i("serial"))return;await window.craft.serial.close(e)},onData(e){return h("craft:serial:data",e)}};var Wt=[{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 sa(){return Wt.map(({name:e,support:t})=>({name:e,support:t,available:i(e)}))}function zt(e){let t=Wt.find((r)=>r.name===e);if(!t)return;return{...t,available:i(e)}}function ca(e){let t=zt(e);return!!t&&t.available}function la(e,t={}){if(!Number.isInteger(e)||e<0||e>86400000)return Promise.reject(RangeError("delayMs must be an integer between 0 and 86400000"));let{signal:r}=t,n=()=>new DOMException("Background delay aborted","AbortError");if(r?.aborted)return Promise.reject(n());if(i("timers"))return v("timers").sleep(e,t);if(typeof window<"u"&&window.craft)return Promise.reject(Error("Native background deadlines require a Craft runtime with timers.sleep support"));return new Promise((o,a)=>{let s=setTimeout(()=>{r?.removeEventListener("abort",c),o()},e);function c(){clearTimeout(s),r?.removeEventListener("abort",c),a(n())}r?.addEventListener("abort",c,{once:!0})})}export{Fr as AVAILABLE_COMPONENTS,Ze as AutoUpdater,Wr as COMPONENT_STYLES,ue as DEFAULT_WATCH_INTERVAL_MS,Nt as MAX_WATCH_INTERVAL_MS,_t as MIN_WATCH_INTERVAL_MS,Zr as MODAL_STYLES,nr as TOAST_STYLES,un as TRAY_MENU_STYLES,tt as UPDATE_MANIFEST_ASSET,Yr as alert,ci as appInfo,Ki as appleScript,ji as audio,la as backgroundDelay,oi as battery,Vi as biometric,Ii as bluetooth,Qi as bonjour,ie as bundlePathForExecutable,io as caffeinate,Jn as canReplaceBundle,Qn as clearQuarantine,zo as clipboard,Qr as closeAllModals,Mn as closeAllWindows,Gr as confirm,fi as contextMenu,oa as continuityCamera,na as coreml,Gn as craftBinaryNotFoundMessage,ve as craftWindowArguments,Q as crashReporter,Cr as createAccordion,xr as createAutocomplete,dr as createAvatar,lr as createBadge,or as createButton,ur as createCard,Br as createChart,ar as createCheckbox,Pr as createChip,Or as createCodeEditor,hr as createColorPicker,Dr as createDataGrid,wr as createDatePicker,fr as createDropdown,_r as createFileExplorer,ro as createGitHubUpdateManifest,ot as createGitHubUpdater,vr as createImageView,_o as createInterval,yr as createLabel,Tr as createListView,Rr as createMediaPlayer,on as createMenubar,$r as createModalComponent,xo as createPreferences,cr as createProgressBar,gr as createRadioButton,mr as createRating,kr as createScrollView,oo as createSelfUpdater,sr as createSlider,Ar as createSplitView,Ir as createStepper,Ke as createSystemTray,Er as createTable,pr as createTabs,ir as createTextInput,br as createTimePicker,Lo as createTimer,Sr as createTooltip,Mr as createTreeView,Nr as createWebView,Dn as createWindow,On as createWindowWithHTML,Se as decaffeinate,ni as deepLinks,No as delay,er as dismissAlertById,tr as dismissAllAlerts,ti as dragOut,Zn as extractBundle,Gi as fileAssociations,Le as focus,Ui as focusShortcutsReady,Wo as formatCompact,lo as formatDuration,co as formatRemainingTime,To as formatShortcut,Fo as formatTime,Vo as fs,et as generateUpdateManifest,rr as getActiveAlertCount,Jr as getActiveModalCount,an as getActiveTrayInstances,Tn as getActiveWindowIds,so as getCaffeinateStatus,sa as getCapabilities,zt as getCapability,Cn as getDesktopConfig,Pn as getDialogBridgeScript,Ro as getRegisteredHotkeys,ln as getSimulatedTrayHTML,dn as getTrayBridgeScript,sn as getTrayInstance,En as getWindow,Ln as getWindowBridgeScript,rt as githubLatestAssetUrl,nt as githubReleaseAssetUrl,Qo as globalShortcuts,Z as handoff,Hi as hasFocusShortcuts,Ri as iap,Io as isAutoLaunchEnabled,ca as isAvailable,ao as isCaffeinated,ri as isDragOutAvailable,Rn as isWebviewAvailable,hi as keychain,Li as liveActivities,qi as localServer,_i as location,Ji as log,Vn as macOSRuntimeExecutablePath,pi as menu,ra as midi,vi as nativeAutoLaunch,Pi as nativeTray,Si as nativeWindow,ii as network,Uo as notifications,Zt as notify,Bn as openDevWindow,jn as pack,Kn as packageApp,ht as parseShortcut,Xi as pdf,wi as permissions,yi as printing,Xr as prompt,it as quitLauncher,Pe as readBundleIdentity,Ot as redactPII,Bo as registerHotkey,at as relaunchBundle,qt as requestNotificationPermission,In as resetDesktopConfig,Yn as resolveCraftBinary,qn as resolveCraftExecutablePath,no as runningBundleTeamId,gi as screen,Ni as screenCapture,de as screenSharing,aa as serial,ia as serviceMenu,Co as setAutoLaunch,An as setDesktopConfig,Jo as shell,fe as showAlert,bn as showAlertDialog,wn as showColorPicker,xn as showConfirmDialog,yn as showErrorDialog,jr as showErrorModal,Qt as showErrorToast,We as showInfoModal,Yt as showInfoToast,K as showMessageBox,H as showModal,gn as showOpenDialog,ze as showQuestionModal,hn as showSaveDialog,Kr as showSuccessModal,Xt as showSuccessToast,j as showToast,vn as showWarningDialog,Vr as showWarningModal,Jt as showWarningToast,Et as sidebar,Rt as signPayload,$i as speech,ea as speechRecognition,Zi as spotlight,li as standardMenus,eo as swapBundle,mi as system,Yi as tags,Zo as theme,ki as touchbar,cn as triggerTrayAction,Oo as unregisterAllHotkeys,bt as unregisterHotkey,ai as updater,to as verifyBundleTrust,ta as vision,Wi as watchScreenSharing,si as windowEvents};
|