@stacksjs/stx 0.2.360 → 0.2.362
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-6pdfvpa6.js → chunk-fyf0bz14.js} +1 -1
- package/dist/{chunk-vyhrzsnf.js → chunk-jk8exx37.js} +4 -4
- package/dist/{chunk-bxkr3ts9.js → chunk-kbfbfjpz.js} +1 -1
- package/dist/{chunk-3xspzgrq.js → chunk-p4eqd3fp.js} +1 -1
- package/dist/{chunk-z2rvc8d5.js → chunk-p75e8vf3.js} +47 -47
- package/dist/{chunk-d5gzma79.js → chunk-q065t1x7.js} +1 -1
- package/dist/{chunk-a68y9s2j.js → chunk-sr09yndb.js} +1 -1
- package/dist/{chunk-za8wxkx6.js → chunk-tz7kembg.js} +1 -1
- package/dist/{chunk-1hvxs7rh.js → chunk-zbk9frkq.js} +1 -1
- package/dist/{chunk-8akj7f4h.js → chunk-zjm3pz95.js} +1 -1
- package/dist/cli.js +3 -3
- package/package.json +5 -5
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Sw as y}from"./chunk-m8kem5ca.js";function
|
|
2
|
+
import{Sw as y}from"./chunk-m8kem5ca.js";function g4(){if(typeof Notification<"u"&&Notification.permission==="granted")return!0;return!1}function jZ(){return typeof window<"u"&&typeof document<"u"}async function b4(){if(typeof Notification>"u")return!1;if(Notification.permission==="granted")return!0;if(Notification.permission==="denied")return!1;return await Notification.requestPermission()==="granted"}var g=new Map;function u4(){return`alert-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function m4(Z){switch(Z){case"info":return"ℹ";case"success":return"✔";case"warning":return"⚠";case"error":return"✖";default:return"ℹ"}}function h4(Z="top-right"){if(!jZ())throw Error("Toast container requires browser environment");try{let $=document.querySelector(`.stx-toast-container[data-position="${Z}"]`);if($)return $}catch{}let Y=document.createElement("div");Y.className=`stx-toast-container ${Z}`,Y.dataset.position=Z;try{if(document.body)document.body.appendChild(Y)}catch{}return Y}function c4(Z){let{options:Y}=Z,$=m4(Y.type),J=Y.type||"info",G=Y.duration!==0;return`
|
|
3
3
|
<div class="stx-toast ${J}" data-alert-id="${Z.id}" role="alert" aria-live="polite">
|
|
4
4
|
<div class="stx-toast-icon">${$}</div>
|
|
5
5
|
<div class="stx-toast-content">
|
|
6
|
-
${Y.title?`<div class="stx-toast-title">${
|
|
7
|
-
<div class="stx-toast-message">${
|
|
6
|
+
${Y.title?`<div class="stx-toast-title">${fZ(Y.title)}</div>`:""}
|
|
7
|
+
<div class="stx-toast-message">${fZ(Y.message)}</div>
|
|
8
8
|
</div>
|
|
9
|
-
${
|
|
9
|
+
${G?'<button class="stx-toast-close" aria-label="Close">×</button>':""}
|
|
10
10
|
</div>
|
|
11
|
-
`}function
|
|
11
|
+
`}function fZ(Z){return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function ZZ(Z){if(Z.timeout)clearTimeout(Z.timeout);if(g.delete(Z.id),Z.element&&jZ())Z.element.classList.add("dismissing"),setTimeout(()=>{Z.element?.remove()},200)}async function OZ(Z){let Y=u4(),$=g4(),J=Z.duration??5000,G={id:Y,options:Z};if(g.set(Y,G),$&&Z.type!=="error")try{let X=new Notification(Z.title||"Notification",{body:Z.message,icon:Z.type==="success"?"\u2713":Z.type==="warning"?"\u26A0":"\u2139",tag:Y});if(X.onclick=()=>{if(Z.onClick)Z.onClick();X.close()},J>0)G.timeout=setTimeout(()=>{X.close(),g.delete(Y)},J);return}catch{}if(jZ())try{let X=h4(Z.position),R=document.createElement("div");R.innerHTML=c4(G);let z=R.firstElementChild;if(!z){let K=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${K}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}G.element=z;try{X.appendChild(z)}catch{let K=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${K}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`);return}if(typeof requestAnimationFrame==="function")requestAnimationFrame(()=>{try{z.classList.add("visible")}catch{}});try{z.addEventListener("click",(K)=>{if(K.target.classList?.contains("stx-toast-close")){ZZ(G);return}if(Z.onClick)Z.onClick()})}catch{}if(J>0)G.timeout=setTimeout(()=>{ZZ(G)},J)}catch{let X=(Z.type||"info").toUpperCase();console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`)}else{let X=(Z.type||"info").toUpperCase();if(console.log(`[stx-alert] ${X}: ${Z.title||""}`),console.log(`[stx-alert] ${Z.message}`),J>0)G.timeout=setTimeout(()=>{g.delete(Y)},J)}}async function d(Z){return OZ({...Z,position:Z.position||"top-right"})}async function p4(Z,Y=3000){return d({message:Z,type:"info",duration:Y})}async function l4(Z,Y=3000){return d({message:Z,type:"success",duration:Y})}async function d4(Z,Y=3000){return d({message:Z,type:"warning",duration:Y})}async function r4(Z,Y=5000){return d({message:Z,type:"error",duration:Y})}async function n4(Z,Y,$="info"){return OZ({title:Z,message:Y,type:$})}function o4(Z){let Y=g.get(Z);if(Y)ZZ(Y)}function a4(){for(let Z of g.values())ZZ(Z)}function i4(){return g.size}var s4=`
|
|
12
12
|
.stx-toast-container {
|
|
13
13
|
position: fixed;
|
|
14
14
|
z-index: 10001;
|
|
@@ -110,44 +110,44 @@ import{Sw as y}from"./chunk-m8kem5ca.js";function w4(){if(typeof Notification<"u
|
|
|
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 _(Z="stx"){return`${Z}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function q(Z){return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function D(...Z){return Z.filter(Boolean).join(" ")}function W(Z){if(!Z)return"";return Object.entries(Z).map(([Y,$])=>`${Y.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${$}`).join("; ")}function
|
|
113
|
+
`;function _(Z="stx"){return`${Z}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function q(Z){return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function D(...Z){return Z.filter(Boolean).join(" ")}function W(Z){if(!Z)return"";return Object.entries(Z).map(([Y,$])=>`${Y.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${$}`).join("; ")}function t4(Z){let{text:Y,variant:$="primary",size:J="medium",disabled:G=!1,loading:X=!1,icon:R,iconPosition:z="left",id:K=_("btn"),className:F,style:O}=Z,V=D("stx-button",`stx-button--${$}`,`stx-button--${J}`,G&&"stx-button--disabled",X&&"stx-button--loading",F),j=W(O),P=R?`<span class="stx-button-icon">${R}</span>`:"",L=X?'<span class="stx-button-spinner"></span>':"",T=z==="left"?`${P}${L}<span class="stx-button-text">${q(Y)}</span>`:`<span class="stx-button-text">${q(Y)}</span>${P}${L}`;return`<button id="${K}" class="${V}" ${G||X?"disabled":""} ${j?`style='${j}'`:""}>${T}</button>`}function e4(Z){let{value:Y="",placeholder:$="",type:J="text",disabled:G=!1,readonly:X=!1,maxLength:R,minLength:z,pattern:K,required:F=!1,autocomplete:O,label:V,error:j,hint:P,id:L=_("input"),className:T,style:N}=Z,E=D("stx-input",j&&"stx-input--error",G&&"stx-input--disabled",T),S=W(N),e=[`type="${J}"`,`id="${L}"`,`class="${E}"`,Y&&`value="${q(Y)}"`,$&&`placeholder="${q($)}"`,G&&"disabled",X&&"readonly",F&&"required",R&&`maxlength="${R}"`,z&&`minlength="${z}"`,K&&`pattern="${q(K)}"`,O&&`autocomplete="${O}"`,S&&`style="${S}"`].filter(Boolean).join(" "),w="";if(V)w+=`<label class="stx-input-label" for="${L}">${q(V)}</label>`;if(w+=`<input ${e} />`,j)w+=`<div class="stx-input-error">${q(j)}</div>`;else if(P)w+=`<div class="stx-input-hint">${q(P)}</div>`;return`<div class="stx-input-wrapper">${w}</div>`}function ZY(Z){let{checked:Y=!1,label:$,disabled:J=!1,indeterminate:G=!1,id:X=_("checkbox"),className:R,style:z}=Z,K=D("stx-checkbox",J&&"stx-checkbox--disabled",R),F=W(z),O=['type="checkbox"',`id="${X}"`,Y&&"checked",J&&"disabled",G&&'data-indeterminate="true"'].filter(Boolean).join(" ");return`
|
|
114
114
|
<label class="${K}" ${F?`style="${F}"`:""}>
|
|
115
115
|
<input ${O} />
|
|
116
116
|
<span class="stx-checkbox-box"></span>
|
|
117
117
|
${$?`<span class="stx-checkbox-label">${q($)}</span>`:""}
|
|
118
118
|
</label>
|
|
119
|
-
`}function
|
|
119
|
+
`}function YY(Z){let{value:Y=50,min:$=0,max:J=100,step:G=1,disabled:X=!1,label:R,showValue:z=!0,id:K=_("slider"),className:F,style:O}=Z,V=D("stx-slider",X&&"stx-slider--disabled",F),j=W(O),P=['type="range"',`id="${K}"`,`value="${Y}"`,`min="${$}"`,`max="${J}"`,`step="${G}"`,X&&"disabled"].filter(Boolean).join(" "),L="";if(R)L+=`<label class="stx-slider-label" for="${K}">${q(R)}</label>`;if(L+=`<div class="stx-slider-track"><input ${P} /></div>`,z)L+=`<span class="stx-slider-value">${Y}</span>`;return`<div class="${V}" ${j?`style='${j}'`:""}>${L}</div>`}function $Y(Z){let{value:Y,max:$=100,variant:J="default",size:G="medium",showLabel:X=!1,indeterminate:R=!1,id:z=_("progress"),className:K,style:F}=Z,O=Math.min(100,Math.max(0,Y/$*100)),V=D("stx-progress",`stx-progress--${J}`,`stx-progress--${G}`,R&&"stx-progress--indeterminate",K),j=W(F);return`
|
|
120
120
|
<div id="${z}" class="${V}" role="progressbar" aria-valuenow="${Y}" aria-valuemin="0" aria-valuemax="${$}" ${j?`style="${j}"`:""}>
|
|
121
121
|
<div class="stx-progress-bar" style="width: ${R?"100%":`${O}%`}"></div>
|
|
122
122
|
${X?`<span class="stx-progress-label">${Math.round(O)}%</span>`:""}
|
|
123
123
|
</div>
|
|
124
|
-
`}function
|
|
124
|
+
`}function JY(Z){let{text:Y,variant:$="default",size:J="medium",id:G=_("badge"),className:X,style:R}=Z,z=D("stx-badge",`stx-badge--${$}`,`stx-badge--${J}`,X),K=W(R);return`<span id="${G}" class="${z}" ${K?`style='${K}'`:""}>${q(Y)}</span>`}function GY(Z){let{src:Y,alt:$="",name:J,size:G="medium",shape:X="circle",id:R=_("avatar"),className:z,style:K}=Z,F=typeof G==="number"?"":`stx-avatar--${G}`,O=typeof G==="number"?`width: ${G}px; height: ${G}px;`:"",V=D("stx-avatar",F,`stx-avatar--${X}`,z),j=[O,W(K)].filter(Boolean).join(" "),P=J?J.split(" ").map((L)=>L[0]).join("").toUpperCase().slice(0,2):"";if(Y)return`<div id="${R}" class="${V}" ${j?`style="${j}"`:""}>
|
|
125
125
|
<img src="${q(Y)}" alt="${q($)}" class="stx-avatar-img" />
|
|
126
126
|
</div>`;return`<div id="${R}" class="${V}" ${j?`style="${j}"`:""}>
|
|
127
127
|
<span class="stx-avatar-initials">${P}</span>
|
|
128
|
-
</div>`}function
|
|
128
|
+
</div>`}function QY(Z){let{title:Y,subtitle:$,content:J,image:G,footer:X,variant:R="default",id:z=_("card"),className:K,style:F}=Z,O=D("stx-card",`stx-card--${R}`,K),V=W(F),j="";if(G)j+=`<div class="stx-card-image"><img src="${q(G)}" alt="" /></div>`;if(j+='<div class="stx-card-body">',Y)j+=`<h3 class="stx-card-title">${q(Y)}</h3>`;if($)j+=`<p class="stx-card-subtitle">${q($)}</p>`;if(J)j+=`<div class="stx-card-content">${q(J)}</div>`;if(j+="</div>",X)j+=`<div class="stx-card-footer">${q(X)}</div>`;return`<div id="${z}" class="${O}" ${V?`style='${V}'`:""}>${j}</div>`}function XY(Z){let{tabs:Y,activeTab:$,variant:J="default",id:G=_("tabs"),className:X,style:R}=Z,z=D("stx-tabs",`stx-tabs--${J}`,X),K=W(R),F=Y.map((O,V)=>{let j=$?O.value===$:V===0;return`<button class="${D("stx-tab",j&&"stx-tab--active",O.disabled&&"stx-tab--disabled")}" data-value="${q(O.value)}" ${O.disabled?"disabled":""} role="tab" aria-selected="${j}">${q(O.label)}</button>`}).join("");return`<div id="${G}" class="${z}" role="tablist" ${K?`style='${K}'`:""}>${F}</div>`}function zY(Z){let{options:Y,value:$,placeholder:J="Select...",disabled:G=!1,id:X=_("dropdown"),className:R,style:z}=Z,K=D("stx-dropdown",G&&"stx-dropdown--disabled",R),F=W(z),O=Y.map((j)=>{let P=j.value===$?"selected":"",L=j.disabled?"disabled":"";return`<option value="${q(j.value)}" ${P} ${L}>${q(j.label)}</option>`}).join(""),V=$?"":`<option value="" disabled selected>${q(J)}</option>`;return`<select id="${X}" class="${K}" ${G?"disabled":""} ${F?`style='${F}'`:""}>${V}${O}</select>`}function RY(Z){let{value:Y=0,max:$=5,readonly:J=!1,size:G="medium",allowHalf:X=!1,id:R=_("rating"),className:z,style:K}=Z,F=D("stx-rating",`stx-rating--${G}`,J&&"stx-rating--readonly",z),O=W(K),V="";for(let j=1;j<=$;j++){let P=j<=Y,L=X&&j-0.5===Y;V+=`<span class="stx-star ${P?"stx-star--filled":L?"stx-star--half":""}" data-value="${j}">\u2605</span>`}return`<div id="${R}" class="${F}" role="slider" aria-valuenow="${Y}" aria-valuemin="0" aria-valuemax="${$}" ${O?`style='${O}'`:""}>${V}</div>`}function KY(Z){let{value:Y,name:$,checked:J=!1,label:G,disabled:X=!1,id:R=_("radio"),className:z,style:K}=Z,F=D("stx-radio",X&&"stx-radio--disabled",z),O=W(K),V=['type="radio"',`id="${R}"`,`name="${q($)}"`,`value="${q(Y)}"`,J&&"checked",X&&"disabled"].filter(Boolean).join(" ");return`
|
|
129
129
|
<label class="${F}" ${O?`style="${O}"`:""}>
|
|
130
130
|
<input ${V} />
|
|
131
131
|
<span class="stx-radio-circle"></span>
|
|
132
|
-
${
|
|
132
|
+
${G?`<span class="stx-radio-label">${q(G)}</span>`:""}
|
|
133
133
|
</label>
|
|
134
|
-
`}function
|
|
134
|
+
`}function FY(Z){let{value:Y="#3498db",disabled:$=!1,label:J,presetColors:G=["#e74c3c","#f39c12","#27ae60","#3498db","#9b59b6","#1abc9c","#34495e","#000000"],id:X=_("color"),className:R,style:z}=Z,K=D("stx-color-picker",$&&"stx-color-picker--disabled",R),F=W(z),O="";if(J)O+=`<label class="stx-color-picker-label" for="${X}">${q(J)}</label>`;if(O+=`<div class="stx-color-picker-input">
|
|
135
135
|
<input type="color" id="${X}" value="${q(Y)}" ${$?"disabled":""} />
|
|
136
136
|
<span class="stx-color-picker-value">${q(Y)}</span>
|
|
137
|
-
</div>`,
|
|
137
|
+
</div>`,G.length>0){O+='<div class="stx-color-picker-presets">';for(let V of G)O+=`<button class="stx-color-preset" style="background: ${q(V)}" data-color="${q(V)}" ${$?"disabled":""}></button>`;O+="</div>"}return`<div class="${K}" ${F?`style='${F}'`:""}>${O}</div>`}function jY(Z){let{value:Y,min:$,max:J,disabled:G=!1,label:X,placeholder:R="Select date",showClear:z=!0,id:K=_("date"),className:F,style:O}=Z,V=D("stx-date-picker",G&&"stx-date-picker--disabled",F),j=W(O),P=Y instanceof Date?Y.toISOString().split("T")[0]:Y||"",L=$ instanceof Date?$.toISOString().split("T")[0]:$,T=J instanceof Date?J.toISOString().split("T")[0]:J,N=['type="date"',`id="${K}"`,P&&`value="${P}"`,L&&`min="${L}"`,T&&`max="${T}"`,G&&"disabled",`placeholder="${q(R)}"`].filter(Boolean).join(" "),E="";if(X)E+=`<label class="stx-date-picker-label" for="${K}">${q(X)}</label>`;return E+=`<div class="stx-date-picker-input">
|
|
138
138
|
<input ${N} />
|
|
139
139
|
${z&&P?'<button class="stx-date-picker-clear" type="button">×</button>':""}
|
|
140
|
-
</div>`,`<div class="${V}" ${j?`style='${j}'`:""}>${E}</div>`}function
|
|
141
|
-
<input type="text" id="${z}" value="${q(P)}" placeholder="${q(J)}" ${
|
|
140
|
+
</div>`,`<div class="${V}" ${j?`style='${j}'`:""}>${E}</div>`}function OY(Z){let{value:Y="",disabled:$=!1,label:J,step:G=60,min:X,max:R,id:z=_("time"),className:K,style:F}=Z,O=D("stx-time-picker",$&&"stx-time-picker--disabled",K),V=W(F),j=['type="time"',`id="${z}"`,Y&&`value="${q(Y)}"`,`step="${G}"`,X&&`min="${q(X)}"`,R&&`max="${q(R)}"`,$&&"disabled"].filter(Boolean).join(" "),P="";if(J)P+=`<label class="stx-time-picker-label" for="${z}">${q(J)}</label>`;return P+=`<input ${j} class="stx-time-picker-input" />`,`<div class="${O}" ${V?`style='${V}'`:""}>${P}</div>`}function VY(Z){let{options:Y,value:$="",placeholder:J="Search...",disabled:G=!1,label:X,loading:R=!1,id:z=_("autocomplete"),className:K,style:F}=Z,O=D("stx-autocomplete",G&&"stx-autocomplete--disabled",K),V=W(F),j=Y.find((T)=>T.value===$),P=j?j.label:$,L="";if(X)L+=`<label class="stx-autocomplete-label" for="${z}">${q(X)}</label>`;L+=`<div class="stx-autocomplete-input-wrapper">
|
|
141
|
+
<input type="text" id="${z}" value="${q(P)}" placeholder="${q(J)}" ${G?"disabled":""} autocomplete="off" class="stx-autocomplete-input" />
|
|
142
142
|
${R?'<span class="stx-autocomplete-spinner"></span>':""}
|
|
143
|
-
</div>`,L+='<ul class="stx-autocomplete-list">';for(let T of Y)L+=`<li class="stx-autocomplete-item ${T.value===$?"stx-autocomplete-item--selected":""}" data-value="${q(T.value)}">${q(T.label)}</li>`;return L+="</ul>",`<div class="${O}" ${V?`style='${V}'`:""}>${L}</div>`}function
|
|
144
|
-
${
|
|
143
|
+
</div>`,L+='<ul class="stx-autocomplete-list">';for(let T of Y)L+=`<li class="stx-autocomplete-item ${T.value===$?"stx-autocomplete-item--selected":""}" data-value="${q(T.value)}">${q(T.label)}</li>`;return L+="</ul>",`<div class="${O}" ${V?`style='${V}'`:""}>${L}</div>`}function qY(Z){let{text:Y,htmlFor:$,required:J=!1,size:G="medium",id:X=_("label"),className:R,style:z}=Z,K=D("stx-label",`stx-label--${G}`,R),F=W(z);return`<label id="${X}" class="${K}" ${$?`for='${q($)}'`:""} ${F?`style='${F}'`:""}>${q(Y)}${J?'<span class="stx-label-required">*</span>':""}</label>`}function UY(Z){let{src:Y,alt:$="",width:J,height:G,objectFit:X="cover",fallback:R,loading:z="lazy",id:K=_("image"),className:F,style:O}=Z,V=D("stx-image",F),j={objectFit:X};if(J)j.width=typeof J==="number"?`${J}px`:J;if(G)j.height=typeof G==="number"?`${G}px`:G;let P=[W(j),W(O)].filter(Boolean).join("; "),L=R?`onerror="this.src='${q(R)}'"`:"";return`<img id="${K}" class="${V}" src="${q(Y)}" alt="${q($)}" loading="${z}" ${P?`style='${P}'`:""} ${L} />`}function PY(Z){let{text:Y,variant:$="default",size:J="medium",removable:G=!1,icon:X,id:R=_("chip"),className:z,style:K}=Z,F=D("stx-chip",`stx-chip--${$}`,`stx-chip--${J}`,z),O=W(K),V="";if(X)V+=`<span class="stx-chip-icon">${X}</span>`;if(V+=`<span class="stx-chip-text">${q(Y)}</span>`,G)V+='<button class="stx-chip-remove" type="button">×</button>';return`<span id="${R}" class="${F}" ${O?`style='${O}'`:""}>${V}</span>`}function LY(Z){let{text:Y,position:$="top",delay:J=200,children:G,id:X=_("tooltip"),className:R,style:z}=Z,K=D("stx-tooltip-wrapper",R),F=W(z);return`<div id="${X}" class="${K}" ${F?`style="${F}"`:""} data-tooltip="${q(Y)}" data-position="${$}" data-delay="${J}">
|
|
144
|
+
${G}
|
|
145
145
|
<span class="stx-tooltip stx-tooltip--${$}">${q(Y)}</span>
|
|
146
|
-
</div>`}function
|
|
147
|
-
<div class="stx-split-pane" style="${O}: ${$[0]}%">${
|
|
146
|
+
</div>`}function WY(Z){let{direction:Y="vertical",showScrollbar:$=!0,smooth:J=!0,height:G,width:X,children:R,id:z=_("scroll"),className:K,style:F}=Z,O=D("stx-scroll-view",`stx-scroll-view--${Y}`,!$&&"stx-scroll-view--hide-scrollbar",J&&"stx-scroll-view--smooth",K),V={};if(G)V.height=typeof G==="number"?`${G}px`:G;if(X)V.width=typeof X==="number"?`${X}px`:X;let j=[W(V),W(F)].filter(Boolean).join("; ");return`<div id="${z}" class="${O}" ${j?`style='${j}'`:""}>${R}</div>`}function DY(Z){let{direction:Y="horizontal",sizes:$=[50,50],resizable:J=!0,children:G,id:X=_("split"),className:R,style:z}=Z,K=D("stx-split-view",`stx-split-view--${Y}`,J&&"stx-split-view--resizable",R),F=W(z),O=Y==="horizontal"?"width":"height";return`<div id="${X}" class="${K}" ${F?`style="${F}"`:""}>
|
|
147
|
+
<div class="stx-split-pane" style="${O}: ${$[0]}%">${G[0]}</div>
|
|
148
148
|
${J?'<div class="stx-split-divider"></div>':""}
|
|
149
|
-
<div class="stx-split-pane" style="${O}: ${$[1]}%">${
|
|
150
|
-
</div>`}function
|
|
149
|
+
<div class="stx-split-pane" style="${O}: ${$[1]}%">${G[1]}</div>
|
|
150
|
+
</div>`}function MY(Z){let{items:Y,multiple:$=!1,defaultOpen:J=[],id:G=_("accordion"),className:X,style:R}=Z,z=D("stx-accordion",X),K=W(R),F="";return Y.forEach((O,V)=>{let j=J.includes(V),P=D("stx-accordion-item",j&&"stx-accordion-item--open",O.disabled&&"stx-accordion-item--disabled");F+=`<div class="${P}" data-index="${V}">
|
|
151
151
|
<button class="stx-accordion-header" ${O.disabled?"disabled":""} aria-expanded="${j}" data-multiple="${$}">
|
|
152
152
|
<span class="stx-accordion-title">${q(O.title)}</span>
|
|
153
153
|
<span class="stx-accordion-icon">\u25BC</span>
|
|
@@ -155,7 +155,7 @@ import{Sw as y}from"./chunk-m8kem5ca.js";function w4(){if(typeof Notification<"u
|
|
|
155
155
|
<div class="stx-accordion-content" ${j?"":"hidden"}>
|
|
156
156
|
${q(O.content)}
|
|
157
157
|
</div>
|
|
158
|
-
</div>`}),`<div id="${
|
|
158
|
+
</div>`}),`<div id="${G}" class="${z}" ${K?`style='${K}'`:""}>${F}</div>`}function _Y(Z){let{steps:Y,currentStep:$,orientation:J="horizontal",id:G=_("stepper"),className:X,style:R}=Z,z=D("stx-stepper",`stx-stepper--${J}`,X),K=W(R),F="";return Y.forEach((O,V)=>{let j=D("stx-step",V<$&&"stx-step--completed",V===$&&"stx-step--active");if(F+=`<div class="${j}" data-step="${V}">
|
|
159
159
|
<div class="stx-step-indicator">
|
|
160
160
|
${V<$?"\u2713":V+1}
|
|
161
161
|
</div>
|
|
@@ -163,35 +163,35 @@ import{Sw as y}from"./chunk-m8kem5ca.js";function w4(){if(typeof Notification<"u
|
|
|
163
163
|
<div class="stx-step-label">${q(O.label)}</div>
|
|
164
164
|
${O.description?`<div class="stx-step-description">${q(O.description)}</div>`:""}
|
|
165
165
|
</div>
|
|
166
|
-
</div>`,V<Y.length-1)F+='<div class="stx-step-connector"></div>'}),`<div id="${
|
|
167
|
-
<div class="stx-list-view-empty">${q(
|
|
168
|
-
</div>`;let O='<ul class="stx-list-view-items">';for(let V of Y){let j=D("stx-list-view-item",V.selected&&"stx-list-view-item--selected");O+=`<li class="${j}" data-id="${q(V.id)}" ${$?'tabindex="0"':""}>${V.content}</li>`}return O+="</ul>",`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${O}</div>`}function
|
|
166
|
+
</div>`,V<Y.length-1)F+='<div class="stx-step-connector"></div>'}),`<div id="${G}" class="${z}" ${K?`style='${K}'`:""}>${F}</div>`}function TY(Z){let{open:Y=!1,title:$,size:J="medium",closable:G=!0,children:X,footer:R,id:z=_("modal"),className:K,style:F}=Z,O=D("stx-modal-component",`stx-modal-component--${J}`,K),V=W(F);if(!Y)return`<div id="${z}" class="${O} stx-modal-component--hidden" ${V?`style='${V}'`:""}></div>`;let j='<div class="stx-modal-component-overlay">';if(j+='<div class="stx-modal-component-dialog">',$||G){if(j+='<div class="stx-modal-component-header">',$)j+=`<h3 class="stx-modal-component-title">${q($)}</h3>`;if(G)j+='<button class="stx-modal-component-close">×</button>';j+="</div>"}if(j+=`<div class="stx-modal-component-body">${X}</div>`,R)j+=`<div class="stx-modal-component-footer">${R}</div>`;return j+="</div></div>",`<div id="${z}" class="${O}" ${V?`style='${V}'`:""}>${j}</div>`}function NY(Z){let{items:Y,selectable:$=!1,multiSelect:J=!1,emptyMessage:G="No items",id:X=_("list"),className:R,style:z}=Z,K=D("stx-list-view",$&&"stx-list-view--selectable",J&&"stx-list-view--multi",R),F=W(z);if(Y.length===0)return`<div id="${X}" class="${K}" ${F?`style="${F}"`:""}>
|
|
167
|
+
<div class="stx-list-view-empty">${q(G)}</div>
|
|
168
|
+
</div>`;let O='<ul class="stx-list-view-items">';for(let V of Y){let j=D("stx-list-view-item",V.selected&&"stx-list-view-item--selected");O+=`<li class="${j}" data-id="${q(V.id)}" ${$?'tabindex="0"':""}>${V.content}</li>`}return O+="</ul>",`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${O}</div>`}function EY(Z){let{columns:Y,data:$,striped:J=!1,bordered:G=!1,hoverable:X=!0,sortBy:R,sortOrder:z,id:K=_("table"),className:F,style:O}=Z,V=D("stx-table",J&&"stx-table--striped",G&&"stx-table--bordered",X&&"stx-table--hoverable",F),j=W(O),P="<table>";P+="<thead><tr>";for(let L of Y){let N=L.key===R?`stx-table-sorted stx-table-sorted--${z}`:"",E=L.sortable?'data-sortable="true"':"",S=L.width?`style="width: ${L.width}"`:"";P+=`<th class="${N}" ${E} ${S} data-key="${q(L.key)}">${q(L.label)}${L.sortable?'<span class="stx-table-sort-icon"></span>':""}</th>`}P+="</tr></thead>",P+="<tbody>";for(let L of $){P+="<tr>";for(let T of Y){let N=L[T.key];P+=`<td>${N!=null?q(String(N)):""}</td>`}P+="</tr>"}return P+="</tbody></table>",`<div id="${K}" class="${V}" ${j?`style='${j}'`:""}>${P}</div>`}function vZ(Z,Y,$,J){let G=Y.includes(Z.key),X=$.includes(Z.key),R=Z.children&&Z.children.length>0,K=`<div class="${D("stx-tree-node",X&&"stx-tree-node--selected",Z.disabled&&"stx-tree-node--disabled")}" data-key="${q(Z.key)}">`;if(K+='<div class="stx-tree-node-content">',R)K+=`<span class="stx-tree-toggle ${G?"stx-tree-toggle--expanded":""}">\u25B6</span>`;else K+='<span class="stx-tree-toggle-placeholder"></span>';if(J)K+=`<input type="checkbox" class="stx-tree-checkbox" ${X?"checked":""} ${Z.disabled?"disabled":""} />`;if(Z.icon)K+=`<span class="stx-tree-icon">${Z.icon}</span>`;if(K+=`<span class="stx-tree-label">${q(Z.label)}</span>`,K+="</div>",R&&G){K+='<div class="stx-tree-children">';for(let F of Z.children)K+=vZ(F,Y,$,J);K+="</div>"}return K+="</div>",K}function AY(Z){let{nodes:Y,expandedKeys:$=[],selectedKeys:J=[],checkable:G=!1,id:X=_("tree"),className:R,style:z}=Z,K=D("stx-tree-view",G&&"stx-tree-view--checkable",R),F=W(z),O="";for(let V of Y)O+=vZ(V,$,J,G);return`<div id="${X}" class="${K}" role="tree" ${F?`style='${F}'`:""}>${O}</div>`}function kY(Z){let{columns:Y,data:$,pagination:J,selectable:G=!1,id:X=_("datagrid"),className:R,style:z}=Z,K=D("stx-data-grid",G&&"stx-data-grid--selectable",R),F=W(z),O='<div class="stx-data-grid-table-wrapper">';if(O+='<table class="stx-data-grid-table">',O+="<thead><tr>",G)O+='<th class="stx-data-grid-select-all"><input type="checkbox" /></th>';for(let V of Y){let j=V.width?`style="width: ${V.width}"`:"";O+=`<th ${j}>
|
|
169
169
|
<div class="stx-data-grid-header-cell">
|
|
170
170
|
<span>${q(V.label)}</span>
|
|
171
171
|
${V.sortable?'<button class="stx-data-grid-sort">\u21C5</button>':""}
|
|
172
172
|
${V.filterable?'<button class="stx-data-grid-filter">\u22BB</button>':""}
|
|
173
173
|
</div>
|
|
174
|
-
</th>`}O+="</tr></thead>",O+="<tbody>";for(let V of $){if(O+="<tr>",
|
|
174
|
+
</th>`}O+="</tr></thead>",O+="<tbody>";for(let V of $){if(O+="<tr>",G)O+='<td class="stx-data-grid-select"><input type="checkbox" /></td>';for(let j of Y){let P=V[j.key];O+=`<td>${P!=null?q(String(P)):""}</td>`}O+="</tr>"}if(O+="</tbody></table></div>",J){let V=Math.ceil(J.total/J.pageSize);O+=`<div class="stx-data-grid-pagination">
|
|
175
175
|
<span class="stx-data-grid-page-info">Page ${J.page} of ${V} (${J.total} items)</span>
|
|
176
176
|
<div class="stx-data-grid-page-buttons">
|
|
177
177
|
<button class="stx-data-grid-page-btn" ${J.page<=1?"disabled":""}>\u25C0</button>
|
|
178
178
|
<button class="stx-data-grid-page-btn" ${J.page>=V?"disabled":""}>\u25B6</button>
|
|
179
179
|
</div>
|
|
180
|
-
</div>`}return`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${O}</div>`}function
|
|
180
|
+
</div>`}return`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${O}</div>`}function HY(Z){let{type:Y,data:$,options:J={},width:G="100%",height:X=300,id:R=_("chart"),className:z,style:K}=Z,F=D("stx-chart",`stx-chart--${Y}`,z),O={width:typeof G==="number"?`${G}px`:G,height:typeof X==="number"?`${X}px`:X},V=[W(O),W(K)].filter(Boolean).join("; "),j=JSON.stringify({type:Y,data:$,options:J});return`<div id="${R}" class="${F}" style="${V}" data-chart='${q(j)}'>
|
|
181
181
|
<div class="stx-chart-placeholder">
|
|
182
182
|
${J.title?`<div class="stx-chart-title">${q(J.title)}</div>`:""}
|
|
183
183
|
<div class="stx-chart-type">${Y.charAt(0).toUpperCase()+Y.slice(1)} Chart</div>
|
|
184
184
|
<div class="stx-chart-info">${$.datasets.length} dataset(s), ${$.labels.length} labels</div>
|
|
185
185
|
</div>
|
|
186
|
-
</div>`}function
|
|
187
|
-
`),N="";if(
|
|
186
|
+
</div>`}function xY(Z){let{value:Y="",language:$="plaintext",theme:J="dark",lineNumbers:G=!0,readOnly:X=!1,height:R=300,tabSize:z=2,wordWrap:K=!1,id:F=_("code"),className:O,style:V}=Z,j=D("stx-code-editor",`stx-code-editor--${J}`,G&&"stx-code-editor--line-numbers",X&&"stx-code-editor--readonly",K&&"stx-code-editor--wrap",O),P={height:typeof R==="number"?`${R}px`:R},L=[W(P),W(V)].filter(Boolean).join("; "),T=Y.split(`
|
|
187
|
+
`),N="";if(G){N+='<div class="stx-code-editor-gutter">';for(let E=1;E<=T.length;E++)N+=`<div class="stx-code-editor-line-number">${E}</div>`;N+="</div>"}return N+=`<pre class="stx-code-editor-content"><code class="language-${q($)}">${q(Y)}</code></pre>`,`<div id="${F}" class="${j}" style="${L}" data-language="${q($)}" data-tab-size="${z}">${N}</div>`}function CY(Z){let{src:Y,type:$="video",poster:J,autoplay:G=!1,loop:X=!1,muted:R=!1,controls:z=!0,width:K,height:F,id:O=_("media"),className:V,style:j}=Z,P=D("stx-media-player",`stx-media-player--${$}`,V),L={};if(K)L.width=typeof K==="number"?`${K}px`:K;if(F)L.height=typeof F==="number"?`${F}px`:F;let T=[W(L),W(j)].filter(Boolean).join("; "),N=[`id="${O}-media"`,`src="${q(Y)}"`,z&&"controls",G&&"autoplay",X&&"loop",R&&"muted",$==="video"&&J&&`poster="${q(J)}"`].filter(Boolean).join(" "),E=$==="video"?`<video ${N}>Your browser does not support the video tag.</video>`:`<audio ${N}>Your browser does not support the audio tag.</audio>`;return`<div id="${O}" class="${P}" ${T?`style='${T}'`:""}>${E}</div>`}function IY(Z){if(Z===void 0)return"";let Y=["B","KB","MB","GB"],$=Z,J=0;while($>=1024&&J<Y.length-1)$/=1024,J++;return`${$.toFixed(1)} ${Y[J]}`}function SY(Z){let{files:Y,viewMode:$="list",showHidden:J=!1,selectable:G=!0,id:X=_("files"),className:R,style:z}=Z,K=D("stx-file-explorer",`stx-file-explorer--${$}`,R),F=W(z),O=J?Y:Y.filter((j)=>!j.name.startsWith(".")),V="";if($==="list"){V='<table class="stx-file-explorer-list"><thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>';for(let j of O){let P=j.icon||(j.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4"),L=j.type==="file"?IY(j.size):"",T=j.modified?j.modified.toLocaleDateString():"";V+=`<tr class="stx-file-explorer-item ${G?"stx-file-explorer-item--selectable":""}" data-path="${q(j.path)}" data-type="${j.type}">
|
|
188
188
|
<td><span class="stx-file-explorer-icon">${P}</span>${q(j.name)}</td>
|
|
189
189
|
<td>${L}</td>
|
|
190
190
|
<td>${T}</td>
|
|
191
|
-
</tr>`}V+="</tbody></table>"}else{V='<div class="stx-file-explorer-grid">';for(let j of O){let P=j.icon||(j.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");V+=`<div class="stx-file-explorer-item ${
|
|
191
|
+
</tr>`}V+="</tbody></table>"}else{V='<div class="stx-file-explorer-grid">';for(let j of O){let P=j.icon||(j.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");V+=`<div class="stx-file-explorer-item ${G?"stx-file-explorer-item--selectable":""}" data-path="${q(j.path)}" data-type="${j.type}">
|
|
192
192
|
<div class="stx-file-explorer-icon">${P}</div>
|
|
193
193
|
<div class="stx-file-explorer-name">${q(j.name)}</div>
|
|
194
|
-
</div>`}V+="</div>"}return`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${V}</div>`}function
|
|
194
|
+
</div>`}V+="</div>"}return`<div id="${X}" class="${K}" ${F?`style='${F}'`:""}>${V}</div>`}function wY(Z){let{url:Y,width:$="100%",height:J=400,sandbox:G=!0,allowScripts:X=!0,id:R=_("webview"),className:z,style:K}=Z,F=D("stx-webview",z),O={width:typeof $==="number"?`${$}px`:$,height:typeof J==="number"?`${J}px`:J},V=[W(O),W(K)].filter(Boolean).join("; "),j=[];if(G){if(j.push("allow-same-origin"),X)j.push("allow-scripts")}let P=G?`sandbox="${j.join(" ")}"`:"";return`<iframe id="${R}" class="${F}" src="${q(Y)}" style="${V}" ${P} loading="lazy" frameborder="0"></iframe>`}var BY=["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"],fY=`
|
|
195
195
|
/* Button */
|
|
196
196
|
.stx-button {
|
|
197
197
|
display: inline-flex;
|
|
@@ -548,18 +548,18 @@ import{Sw as y}from"./chunk-m8kem5ca.js";function w4(){if(typeof Notification<"u
|
|
|
548
548
|
.stx-chip--warning { background: #3a2a1a; }
|
|
549
549
|
.stx-chip--error { background: #3a1a1a; }
|
|
550
550
|
}
|
|
551
|
-
`;function
|
|
551
|
+
`;function vY(){return!1}function VZ(){return typeof window<"u"&&typeof document<"u"}var b=[];function yY(){return`modal-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function gY(Z){switch(Z){case"info":return"ℹ";case"warning":return"⚠";case"error":return"✖";case"success":return"✔";case"question":return"❓";default:return"ℹ"}}function YZ(Z){if(Z==="question")return[{label:"No",style:"default"},{label:"Yes",style:"primary"}];return[{label:"OK",style:"primary"}]}function bY(Z){let{options:Y}=Z,$=gY(Y.type),J=Y.buttons||YZ(Y.type),G=Y.type||"info",X="";return J.forEach((R,z)=>{let K=R.style==="destructive"?"destructive":R.style==="primary"?"primary":"default",F=z===(Y.defaultButton??J.length-1)?"autofocus":"";X+=`<button class="stx-modal-btn ${K}" data-index="${z}" ${F}>${R.label}</button>`}),`
|
|
552
552
|
<div class="stx-modal-overlay" data-modal-id="${Z.id}">
|
|
553
|
-
<div class="stx-modal ${
|
|
553
|
+
<div class="stx-modal ${G}" role="dialog" aria-modal="true" aria-labelledby="${Z.id}-title">
|
|
554
554
|
<div class="stx-modal-icon">${$}</div>
|
|
555
555
|
<div class="stx-modal-content">
|
|
556
|
-
${Y.title?`<h2 id="${Z.id}-title" class="stx-modal-title">${
|
|
557
|
-
<p class="stx-modal-message">${
|
|
556
|
+
${Y.title?`<h2 id="${Z.id}-title" class="stx-modal-title">${yZ(Y.title)}</h2>`:""}
|
|
557
|
+
<p class="stx-modal-message">${yZ(Y.message)}</p>
|
|
558
558
|
</div>
|
|
559
559
|
<div class="stx-modal-buttons">${X}</div>
|
|
560
560
|
</div>
|
|
561
561
|
</div>
|
|
562
|
-
`}function
|
|
562
|
+
`}function yZ(Z){return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function C(Z,Y,$=!1){let J=b.indexOf(Z);if(J>-1)b.splice(J,1);if(Z.element&&VZ())Z.element.remove();let X=(Z.options.buttons||YZ(Z.options.type))[Y];if(X?.action)X.action();Z.resolve({buttonIndex:Y,cancelled:$})}async function h(Z){let Y=vY(),$=yY();return new Promise((J)=>{let G={id:$,options:Z,resolve:J};if(b.push(G),Y)console.log(`[stx-modal] Showing native modal: ${Z.title||"Modal"}`),setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0);else if(VZ())try{let X=document.createElement("div");X.innerHTML=bY(G);let R=X.firstElementChild;if(!R){console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0);return}G.element=R;try{document.body.appendChild(R)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0);return}try{R.querySelectorAll(".stx-modal-btn").forEach((z)=>{z.addEventListener("click",()=>{let K=Number.parseInt(z.dataset.index||"0",10);C(G,K,!1)})})}catch{}try{R.addEventListener("click",(z)=>{if(z.target===R){let K=Z.cancelButton??0;C(G,K,!0)}})}catch{}try{let z=(K)=>{if(K.key==="Escape"){let F=Z.cancelButton??0;C(G,F,!0),document.removeEventListener("keydown",z)}else if(K.key==="Enter"){let F=Z.defaultButton??(Z.buttons||YZ(Z.type)).length-1;C(G,F,!1),document.removeEventListener("keydown",z)}};document.addEventListener("keydown",z)}catch{}try{let z=R.querySelector(".stx-modal-btn[autofocus]");if(z)z.focus()}catch{}if(typeof process<"u"&&process.env.BUN_TEST)setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0)}catch{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`),setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0)}else{console.log(`[stx-modal] ${Z.type?.toUpperCase()||"INFO"}: ${Z.title||"Modal"}`),console.log(`[stx-modal] ${Z.message}`);let X=Z.buttons||YZ(Z.type);console.log(`[stx-modal] Buttons: ${X.map((R)=>R.label).join(", ")}`),setTimeout(()=>{C(G,Z.defaultButton??0,!1)},0)}})}async function gZ(Z,Y){return h({title:Z,message:Y,type:"info"})}async function uY(Z,Y){return h({title:Z,message:Y,type:"warning"})}async function mY(Z,Y){return h({title:Z,message:Y,type:"error"})}async function hY(Z,Y){return h({title:Z,message:Y,type:"success"})}async function bZ(Z,Y){return h({title:Z,message:Y,type:"question",buttons:[{label:"No",style:"default"},{label:"Yes",style:"primary"}],defaultButton:1,cancelButton:0})}async function cY(Z,Y="Confirm"){return(await bZ(Y,Z)).buttonIndex===1}async function pY(Z,Y="Alert"){await gZ(Y,Z)}async function lY(Z,Y="",$="Input"){if(VZ()&&typeof window.prompt==="function")return window.prompt(Z,Y);return console.log(`[stx-modal] PROMPT: ${$}`),console.log(`[stx-modal] ${Z}`),console.log(`[stx-modal] Default: ${Y}`),Y}function dY(){return b.length}function rY(){while(b.length>0){let Z=b[b.length-1];C(Z,0,!0)}}var nY=`
|
|
563
563
|
.stx-modal-overlay {
|
|
564
564
|
position: fixed;
|
|
565
565
|
inset: 0;
|
|
@@ -691,7 +691,7 @@ import{Sw as y}from"./chunk-m8kem5ca.js";function w4(){if(typeof Notification<"u
|
|
|
691
691
|
background: #555;
|
|
692
692
|
}
|
|
693
693
|
}
|
|
694
|
-
`;import
|
|
694
|
+
`;import uZ from"process";function oY(){if(uZ.platform)return uZ.platform;return"unknown"}function hZ(){if(typeof window<"u"&&window.craft?.tray)return!0;return!1}function cZ(Z,Y){if(Z.type==="separator")return{id:`sep-${Y}`,label:"",type:"separator"};let $={id:`item-${Y}-${Z.label.replace(/\s+/g,"-").toLowerCase()}`,label:Z.label,type:Z.type||"normal",enabled:Z.enabled!==!1};if(Z.accelerator)$.shortcut=Z.accelerator;if(Z.type==="checkbox")$.checked=Z.checked||!1;if(Z.type==="submenu"&&Z.submenu)$.submenu=Z.submenu.map((J,G)=>cZ(J,G));return $}function qZ(Z){return Z.map((Y,$)=>cZ(Y,$))}function pZ(Z,Y=0){if(Z.type==="separator")return'<hr class="stx-tray-separator" />';let $=" ".repeat(Y),J=Z.enabled===!1?"disabled":"",G=Z.checked?"\u2713 ":"",X=Z.accelerator?`<span class="accelerator">${Z.accelerator}</span>`:"",R=`${$}<div class="stx-tray-item ${J}" data-action="${Z.label}">`;if(R+=`<span class="label">${G}${Z.label}</span>${X}`,Z.type==="submenu"&&Z.submenu){R+='<span class="arrow">\u25B8</span>',R+='<div class="stx-tray-submenu">';for(let z of Z.submenu)R+=pZ(z,Y+1);R+="</div>"}return R+="</div>",R}function aY(Z){let Y='<div class="stx-tray-menu">';for(let $ of Z)Y+=pZ($);return Y+="</div>",Y}var v=new Map;function iY(){return`tray-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var mZ=!1;function sY(){if(mZ||typeof window>"u")return;window.addEventListener("craft:tray:menu",(Z)=>{let{action:Y}=Z.detail;for(let $ of v.values()){let J=$.handlers.get(Y);if(J){J();break}}}),mZ=!0}async function lZ(Z={}){let Y=iY(),$=oY(),J=hZ(),G={icon:Z.icon||"",tooltip:Z.tooltip||"stx Application",menu:Z.menu||[],visible:!0},X=new Map;for(let z of Z.menu||[]){if(z.type!=="separator"&&z.onClick)X.set(z.label,z.onClick);if(z.type==="submenu"&&z.submenu){for(let K of z.submenu)if(K.type!=="separator"&&K.onClick)X.set(K.label,K.onClick)}}if(v.set(Y,{state:G,handlers:X}),J){sY();let z=window;try{if(G.tooltip)await z.craft.tray.setTitle({title:G.tooltip}),await z.craft.tray.setTooltip({tooltip:G.tooltip});if(G.icon)await z.craft.tray.setIcon({icon:G.icon});let K=qZ(G.menu);await z.craft.tray.setMenu({items:K}),console.log(`[stx-tray] Native tray created for ${$}`)}catch(K){console.warn("[stx-tray] Failed to create native tray:",K)}}else console.log("[stx-tray] Created simulated tray (not in Craft window)"),console.log(`[stx-tray] ID: ${Y}`),console.log(`[stx-tray] Tooltip: ${G.tooltip}`),console.log(`[stx-tray] Menu items: ${G.menu.length}`);return{id:Y,setIcon:(z)=>{if(G.icon=z,J)window.craft.tray.setIcon({icon:z}).catch((F)=>{console.warn("[stx-tray] Failed to set icon:",F)});console.log(`[stx-tray:${Y}] Icon updated`)},setTooltip:(z)=>{if(G.tooltip=z,J)window.craft.tray.setTooltip({tooltip:z}).catch((F)=>{console.warn("[stx-tray] Failed to set tooltip:",F)});console.log(`[stx-tray:${Y}] Tooltip: ${z}`)},setMenu:(z)=>{G.menu=z,X.clear();for(let K of z){if(K.type!=="separator"&&K.onClick)X.set(K.label,K.onClick);if(K.type==="submenu"&&K.submenu){for(let F of K.submenu)if(F.type!=="separator"&&F.onClick)X.set(F.label,F.onClick)}}if(J){let K=window,F=qZ(z);K.craft.tray.setMenu({items:F}).catch((O)=>{console.warn("[stx-tray] Failed to set menu:",O)})}console.log(`[stx-tray:${Y}] Menu updated (${z.length} items)`)},destroy:()=>{if(G.visible=!1,v.delete(Y),J)window.craft.tray.destroy?.().catch((K)=>{console.warn("[stx-tray] Failed to destroy tray:",K)});console.log(`[stx-tray:${Y}] Destroyed`)}}}var tY=lZ;function eY(){return Array.from(v.keys())}function Z6(Z){let Y=v.get(Z);if(!Y)return null;let $=hZ();return{id:Z,setIcon:(J)=>{if(Y.state.icon=J,$)window.craft.tray.setIcon({icon:J}).catch(()=>{})},setTooltip:(J)=>{if(Y.state.tooltip=J,$)window.craft.tray.setTooltip({tooltip:J}).catch(()=>{})},setMenu:(J)=>{if(Y.state.menu=J,$){let G=window,X=qZ(J);G.craft.tray.setMenu({items:X}).catch(()=>{})}},destroy:()=>{if(v.delete(Z),$)window.craft.tray.destroy?.().catch(()=>{})}}}function Y6(Z,Y){let $=v.get(Z);if(!$)return!1;let J=$.handlers.get(Y);if(J)return J(),!0;return!1}function $6(Z){let Y=v.get(Z);if(!Y)return null;return aY(Y.state.menu)}function J6(){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 G6=`
|
|
708
708
|
.stx-tray-menu {
|
|
709
709
|
background: #2d2d2d;
|
|
710
710
|
border-radius: 8px;
|
|
@@ -770,9 +770,9 @@ window.stxTray = {
|
|
|
770
770
|
.stx-tray-item:hover > .stx-tray-submenu {
|
|
771
771
|
display: block;
|
|
772
772
|
}
|
|
773
|
-
`;function
|
|
773
|
+
`;function dZ(Z){let Y=new Set(Z.properties??[]);if(Z.canChooseDirectories)Y.add("openDirectory");if(Z.canChooseFiles)Y.add("openFile");if(Z.multiSelections)Y.add("multiSelections");if(Z.showHiddenFiles)Y.add("showHiddenFiles");if(Z.canCreateDirectories)Y.add("createDirectory");return{...Z,properties:[...Y]}}function $Z(){if(typeof window<"u"&&window.craft?.dialog)return!0;return!1}async function Q6(Z={}){if($Z()){let Y=window;try{return await Y.craft.dialog.showOpenDialog(dZ(Z))}catch($){console.warn("[stx-dialog] Failed to show native open dialog:",$)}}return new Promise((Y)=>{if(typeof document>"u"){Y({canceled:!0,filePaths:[]});return}let $=new Set(dZ(Z).properties),J=document.createElement("input");if(J.type="file",J.multiple=$.has("multiSelections"),Z.filters?.length){let G=Z.filters.flatMap((X)=>X.extensions.map((R)=>`.${R}`));J.accept=G.join(",")}if($.has("openDirectory")&&!$.has("openFile"))J.webkitdirectory=!0;J.onchange=()=>{let G=Array.from(J.files||[]);if(G.length===0)Y({canceled:!0,filePaths:[]});else{let X=G.map((R)=>R.name);Y({canceled:!1,filePaths:X})}},J.oncancel=()=>{Y({canceled:!0,filePaths:[]})},J.click()})}async function X6(Z={}){if($Z()){let $=window;try{return await $.craft.dialog.showSaveDialog(Z)}catch(J){console.warn("[stx-dialog] Failed to show native save dialog:",J)}}if(typeof window<"u"&&"showSaveFilePicker"in window)try{let $=Z.filters?.map((G)=>({description:G.name,accept:{"*/*":G.extensions.map((X)=>`.${X}`)}}));return{canceled:!1,filePath:(await window.showSaveFilePicker({suggestedName:Z.defaultPath,types:$})).name}}catch($){return{canceled:!0}}console.warn("[stx-dialog] Save dialog not available, using prompt fallback");let Y=prompt("Enter filename:",Z.defaultPath||"file.txt");if(Y)return{canceled:!1,filePath:Y};return{canceled:!0}}async function r(Z){if($Z()){let R=window;try{return await R.craft.dialog.showMessageBox(Z)}catch(z){console.warn("[stx-dialog] Failed to show native message box:",z)}}let Y=Z.buttons||["OK"],$=Z.detail?`
|
|
774
774
|
|
|
775
|
-
${Z.detail}`:"",J=`${Z.message}${$}`;if(Y.length===1)return alert(J),{response:0};let
|
|
775
|
+
${Z.detail}`:"",J=`${Z.message}${$}`;if(Y.length===1)return alert(J),{response:0};let G=Z.cancelButton??Y.length-1,X=Z.defaultButton!==void 0&&Z.defaultButton!==G?Z.defaultButton:Y.findIndex((R,z)=>z!==G);if(Y.length>2)console.warn(`[stx-dialog] ${Y.length} buttons requested; a browser confirm offers two. Reachable: "${Y[X]}" and "${Y[G]}".`);return{response:confirm(J)?X:G}}async function z6(Z={}){if($Z()){let Y=window;try{return await Y.craft.dialog.showColorPicker(Z)}catch($){console.warn("[stx-dialog] Failed to show native color picker:",$)}}return new Promise((Y)=>{if(typeof document>"u"){Y({canceled:!0});return}let $=document.createElement("input");$.type="color",$.value=Z.color||"#000000",$.onchange=()=>{Y({canceled:!1,color:$.value})},$.oncancel=()=>{Y({canceled:!0})},$.click()})}async function R6(Z,Y){await r({type:"info",title:Y||"Alert",message:Z,buttons:["OK"]})}async function K6(Z,Y){return(await r({type:"question",title:Y||"Confirm",message:Z,buttons:["OK","Cancel"],defaultButton:0,cancelButton:1})).response===0}async function F6(Z,Y){await r({type:"error",title:Y||"Error",message:Z,buttons:["OK"]})}async function j6(Z,Y){await r({type:"warning",title:Y||"Warning",message:Z,buttons:["OK"]})}function O6(){return`
|
|
776
776
|
// STX Desktop Dialog Bridge
|
|
777
777
|
// Provides convenient wrappers around window.craft.dialog APIs
|
|
778
778
|
window.stxDialog = {
|
|
@@ -821,7 +821,7 @@ window.stxDialog = {
|
|
|
821
821
|
// Check if dialog is available
|
|
822
822
|
isAvailable: () => typeof window.craft?.dialog !== 'undefined',
|
|
823
823
|
};
|
|
824
|
-
`}import I from"process";import{existsSync as
|
|
824
|
+
`}import I from"process";import{existsSync as V6}from"fs";import{dirname as q6,join as U6}from"path";import{craftBinaryNotFoundMessage as rZ,resolveCraftBinary as P6}from"craft-native";var c={};function L6(Z){c={...c,...Z}}function W6(){return{...c}}function D6(){c={}}function UZ(Z){if(!Z.sidebarConfig)return;let Y={...Z.sidebarConfig};if(Y.variant==="desktop")Y.material=Y.material??"sidebar",Y.backgroundEffect=Y.backgroundEffect??"shimmer",Y.allowsVibrancy=Y.allowsVibrancy??!0;return Y}function JZ(){let Z=q6(I.execPath),Y=Z.includes(".app/Contents/MacOS")?U6(Z,"craft"):void 0,$=[I.env.CRAFT_BINARY_PATH,c.craftBinaryPath,...c.additionalSearchPaths||[],Y];for(let J of $)if(J&&V6(J))return J;return P6()}var H=new Map;function PZ(Z){let Y=H.get(Z);if(!Y||Y.closed)return;Y.closed=!0;for(let $ of Y.closeListeners??[])try{$()}catch(J){console.warn(`[stx/desktop] window ${Z} close listener threw:`,J)}Y.closeListeners?.clear()}var M6=50;async function LZ(Z,Y){let $=Y.show().then(()=>({failed:!1}),(G)=>({failed:!0,error:G})),J=await Promise.race([$,new Promise((G)=>setTimeout(()=>G(null),M6))]);if(J?.failed)throw J.error;$.then(()=>PZ(Z))}function _6(){return Array.from(H.keys())}function T6(Z){let Y=H.get(Z);if(!Y)return null;return GZ(Z,Y.app)}function N6(){for(let[Z,Y]of H)try{Y.app?.close?.()}catch($){console.warn(`Failed to close window ${Z}:`,$)}H.clear()}function GZ(Z,Y){return{id:Z,show:()=>{console.log(`[stx/desktop] Window ${Z} shown`)},hide:()=>{console.log("[stx/desktop] To hide window, use window.craft.window.hide() from inside the webview")},close:()=>{let $=H.get(Z);if($?.app)$.app.close(),PZ(Z),H.delete(Z),console.log(`[stx/desktop] Window ${Z} closed`)},onClosed:($)=>{let J=H.get(Z);if(!J||J.closed)return queueMicrotask($),()=>{};return J.closeListeners??=new Set,J.closeListeners.add($),()=>J.closeListeners?.delete($)},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:($)=>{console.log(`[stx/desktop] To set title, use window.craft.window.setTitle({ title: "${$}" }) from inside the webview`)},loadURL:($)=>{console.log(`[stx/desktop] To navigate, use window.location.href = "${$}" from inside the webview`)},reload:()=>{console.log("[stx/desktop] To reload, use window.craft.window.reload() from inside the webview")}}}function WZ(Z,Y={}){let $=["--url",Z,"--title",Y.title||"stx Desktop","--width",String(Y.width??1200),"--height",String(Y.height??800)];if(Y.darkMode)$.push("--dark");if(Y.hotReload)$.push("--hot-reload");if(Y.resizable===!1)$.push("--no-resize");if(Y.frameless)$.push("--frameless");if(Y.alwaysOnTop)$.push("--always-on-top");if(Y.titlebarHidden)$.push("--titlebar-hidden");if(Y.systemTray)$.push("--system-tray");if(Y.hideDockIcon)$.push("--hide-dock-icon");if(Y.devTools===!1)$.push("--no-devtools");if(Y.nativeSidebar)$.push("--native-sidebar");if(Y.sidebarWidth!==void 0)$.push("--sidebar-width",String(Y.sidebarWidth));let J=UZ(Y);if(J)$.push("--sidebar-config",JSON.stringify(J));return $}async function E6(Z,Y={}){let $=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,J=JZ();try{let{createApp:G}=await import("craft-native"),X=G({url:Z,craftPath:J,window:{title:Y.title||"stx Desktop",width:Y.width??1200,height:Y.height??800,darkMode:Y.darkMode??!1,hotReload:Y.hotReload??!1,resizable:Y.resizable??!0,frameless:Y.frameless??!1,alwaysOnTop:Y.alwaysOnTop??!1,titlebarHidden:Y.titlebarHidden??!1,systemTray:Y.systemTray??!1,hideDockIcon:Y.hideDockIcon??!1,devTools:Y.devTools??!1,nativeSidebar:Y.nativeSidebar??!1,sidebarWidth:Y.sidebarWidth,sidebarConfig:UZ(Y)}});return H.set($,{app:X,url:Z,options:Y}),await LZ($,X),GZ($,X)}catch{try{let{spawn:G}=await import("child_process"),X=G(J,WZ(Z,Y),{stdio:"inherit"});X.on("error",(z)=>{console.error(z.code==="ENOENT"?rZ(J):`craft child error: ${z.message}`)});let R={close:()=>X.kill()};return H.set($,{app:R,url:Z,options:Y}),X.on("exit",()=>PZ($)),GZ($,R)}catch(G){return console.error("Failed to spawn craft binary:",G.message),null}}}async function A6(Z,Y={}){let $=`http://localhost:${Z}/`;if(I.env.NODE_ENV==="test"||I.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:G}=await import("craft-native");console.log("\u26A1 Opening native window via craft-native\u2026");let X=!Y.nativeSidebar,R=UZ(Y),z=G({url:$,craftPath:JZ(),window:{title:Y.title||"stx Development",width:Y.width||1400,height:Y.height||900,resizable:!0,systemTray:X,darkMode:Y.darkMode??!0,hotReload:Y.hotReload??!0,devTools:!0,titlebarHidden:Y.titlebarHidden??!1,nativeSidebar:Y.nativeSidebar??!1,sidebarWidth:Y.sidebarWidth??260,sidebarConfig:R}}),K=`dev-window-${Z}`;return H.set(K,{app:z,url:$,options:Y}),await LZ(K,z),console.log(`\u2713 Native window opened at ${$}`),!0}catch{let G=JZ();try{console.log(`\u26A1 Opening native window via craft binary (${G})\u2026`);let{spawn:X}=await import("child_process"),R=X(G,WZ($,{title:"stx Development",width:1400,height:900,hotReload:!0,...Y}),{stdio:"inherit"});R.on("exit",()=>I.exit(0)),R.on("error",(K)=>{console.warn(K.code==="ENOENT"?rZ(G):`craft child error: ${K.message}`)});let z=`dev-window-${Z}`;return H.set(z,{app:{close:()=>R.kill()},url:$,options:Y}),console.log(`\u2713 Native window opened at ${$}`),!0}catch(X){console.warn("\u26A0 Could not spawn craft binary:",X.message)}if(I.env.NODE_ENV==="test"||I.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:X}=await import("child_process"),R=I.platform;return X(R==="darwin"?"open":R==="win32"?"cmd":"xdg-open",R==="win32"?["/c","start",$]:[$],{detached:!0,stdio:"ignore"}).unref(),console.log(`\u2713 Browser opened at ${$}`),!0}catch(X){return console.error("Could not open browser:",X),console.log(`Please open manually: ${$}`),!1}}}async function k6(Z,Y={}){let{title:$="stx Desktop",width:J=1200,height:G=800,darkMode:X=!1,hotReload:R=!1,resizable:z=!0,frameless:K=!1,alwaysOnTop:F=!1}=Y;try{let{createApp:O}=await import("craft-native"),V=JZ(),j=O({html:Z,craftPath:V,window:{title:$,width:J,height:G,darkMode:X,hotReload:R,resizable:z,frameless:K,alwaysOnTop:F}}),P=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return H.set(P,{app:j,url:"html-content",options:Y}),await LZ(P,j),GZ(P,j)}catch(O){return console.error("Failed to create window with HTML:",O),null}}function H6(){try{return y.resolve("craft-native"),!0}catch{return!1}}function x6(){return`
|
|
825
825
|
// STX Desktop Window Bridge
|
|
826
826
|
// Provides convenient wrappers around window.craft APIs
|
|
827
827
|
window.stxWindow = {
|
|
@@ -862,7 +862,7 @@ window.stxWindow = {
|
|
|
862
862
|
|
|
863
863
|
// Expose as global for backwards compatibility
|
|
864
864
|
window.desktop = window.stxWindow;
|
|
865
|
-
`}import{pack as
|
|
865
|
+
`}import{pack as C6,packageApp as I6}from"craft-native";import{craftBinaryNotFoundMessage as S6,resolveCraftBinary as w6}from"craft-native";import n from"process";import{spawn as B6}from"child_process";import{AutoUpdater as nZ,canReplaceBundle as f6,clearQuarantine as v6,extractBundle as y6,generateUpdateManifest as oZ,readBundleIdentity as DZ,swapBundle as g6,verifyBundleTrust as b6}from"craft-native";var aZ="update.json";function iZ(Z,Y){return`https://github.com/${Z}/releases/latest/download/${Y}`}function sZ(Z,Y,$){return`https://github.com/${Z}/releases/download/${Y}/${$}`}function tZ(Z){let{repository:Y,manifestAsset:$=aZ,...J}=Z;return new nZ({...J,updateUrl:iZ(Y,$)})}function u6(Z){let Y=Z.tag??`v${Z.version}`,$={};for(let[J,G]of Object.entries(Z.artifacts)){if(!G)continue;$[J]={path:G,url:sZ(Z.repository,Y,G.split("/").pop())}}return oZ({version:Z.version,releaseNotes:Z.releaseNotes,platforms:$})}function QZ(Z=n.execPath){let Y=Z.split("/");for(let $=0;$<Y.length;$++)if(Y[$].endsWith(".app"))return Y.slice(0,$+1).join("/");return null}async function m6(){let Z=QZ();if(!Z)return null;return(await DZ(Z)).teamId}function eZ(){let Z=n.ppid;if(Z>1)try{n.kill(Z,"SIGTERM");return}catch{}n.exit(0)}function Z4(Z={}){let Y=Z.appPath??QZ(),$=Z.quit??(()=>n.exit(0));if(Y)B6("/usr/bin/open",["-n",Y],{detached:!0,stdio:"ignore"}).unref();let J=Z.quitDelayMs??0;if(J>0){setTimeout($,J).unref?.();return}$()}async function h6(Z){let{appPath:Y,requireSameTeam:$=!0,macos:J,...G}=Z,X=Y??QZ();if(!X)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 R=J?.teamId??($?(await DZ(X)).teamId??void 0:void 0);return tZ({...G,appPath:X,macos:{...J,teamId:R},relaunch:Z.relaunch??((z)=>Z4({appPath:z,quit:eZ,quitDelayMs:250}))})}var MZ=null,A=null;class Y4{_process;_startedAt;_endsAt;_options;_expireHandlers=[];_expireTimer=null;_stopped=!1;constructor(Z,Y){this._process=Z,this._options=Y,this._startedAt=new Date;let $=Y.duration;if($&&$>0){let J=$*60*1000;this._endsAt=new Date(this._startedAt.getTime()+J),this._expireTimer=setTimeout(()=>{this._stopped=!0;for(let G of this._expireHandlers)try{G()}catch{}},J)}else this._endsAt=null}get pid(){return this._process.pid}get startedAt(){return this._startedAt}get endsAt(){return this._endsAt}get options(){return{...this._options}}get isActive(){if(this._stopped)return!1;return this._process.exitCode===null}get remainingMs(){if(!this._endsAt)return null;let Z=this._endsAt.getTime()-Date.now();return Math.max(0,Z)}get elapsedMs(){return Date.now()-this._startedAt.getTime()}stop(){if(this._stopped)return;if(this._stopped=!0,this._expireTimer)clearTimeout(this._expireTimer),this._expireTimer=null;try{this._process.kill()}catch{}}onExpire(Z){this._expireHandlers.push(Z)}}function c6(Z={}){$4();let{duration:Y,preventDisplaySleep:$=!0,preventIdleSleep:J=!0,preventSystemSleep:G=!0,preventDiskSleep:X=!1,assertUserActivity:R=!0}=Z,z=[];if($)z.push("-d");if(J)z.push("-i");if(G)z.push("-s");if(X)z.push("-m");if(R)z.push("-u");let K=[...z];if(Y&&Y>0)K.push("-t",String(Y*60));let F=Bun.spawn(["/usr/bin/caffeinate",...K],{stdio:["ignore","ignore","ignore"]}),O=new Y4(F,Z);return MZ=F,A=O,O}function $4(Z){if(Z){if(Z.stop(),A===Z)MZ=null,A=null;return}if(A)A.stop();MZ=null,A=null}function p6(){return A!==null&&A.isActive}function l6(){if(!A||!A.isActive)return{active:!1,instance:null,startedAt:null,endsAt:null,durationMinutes:null};let Y=A.options.duration;return{active:!0,instance:A,startedAt:A.startedAt,endsAt:A.endsAt,durationMinutes:Y&&Y>0?Y:-1}}function d6(Z){let Y=Z||A;if(!Y||!Y.isActive)return"0:00";let $=Y.remainingMs;if($===null)return"\u221E";let J=Math.ceil($/1000),G=Math.floor(J/3600),X=Math.floor(J%3600/60),R=J%60;if(G>0)return`${G}:${String(X).padStart(2,"0")}:${String(R).padStart(2,"0")}`;return`${X}:${String(R).padStart(2,"0")}`}function r6(Z){if(Z<=0||Z===-1)return"Indefinitely";if(Z<60)return`${Z} minutes`;if(Z===60)return"1 hour";if(Z%60===0)return`${Z/60} hours`;let Y=Math.floor(Z/60),$=Z%60;return`${Y}h ${$}m`}import{existsSync as _Z,mkdirSync as n6,readFileSync as o6,watch as a6,writeFileSync as i6}from"fs";import{homedir as s6,platform as t6}from"os";import{dirname as e6,join as o}from"path";function Z8(Z){let Y=t6(),$=s6();switch(Y){case"darwin":return o($,"Library","Application Support",Z);case"win32":return o(process.env.APPDATA||o($,"AppData","Roaming"),Z);default:return o($,".config",Z)}}class J4{_defaults;_data;_path;_changeHandlers=new Map;_anyChangeHandlers=new Set;_watcher=null;_writeTimer=null;_writing=!1;constructor(Z){this._defaults={...Z.defaults};let Y=Z.path?e6(Z.path):Z8(Z.name);if(this._path=Z.path||o(Y,"preferences.json"),!_Z(Y))n6(Y,{recursive:!0});if(this._data=this._load(),Z.watch!==!1)this._setupWatcher()}get path(){return this._path}get(Z){if(Z in this._data)return this._data[Z];return this._defaults[Z]}set(Z,Y){let $=this.get(Z);if(JSON.stringify($)===JSON.stringify(Y))return;this._data[Z]=Y,this._scheduleSave(),this._notifyChange(Z,Y,$)}getAll(){return{...this._defaults,...this._data}}has(Z){return Z in this._data}delete(Z){if(!(Z in this._data))return;let Y=this._data[Z];delete this._data[Z],this._scheduleSave(),this._notifyChange(Z,this._defaults[Z],Y)}reset(){let Z={...this._data};this._data={},this._save();for(let Y of Object.keys(Z)){let $=this._defaults[Y];this._notifyChange(Y,$,Z[Y])}}onChange(Z,Y){let $=Z;if(!this._changeHandlers.has($))this._changeHandlers.set($,new Set);return this._changeHandlers.get($).add(Y),()=>{this._changeHandlers.get($)?.delete(Y)}}onAnyChange(Z){return this._anyChangeHandlers.add(Z),()=>{this._anyChangeHandlers.delete(Z)}}close(){if(this._watcher)this._watcher.close(),this._watcher=null;if(this._writeTimer)clearTimeout(this._writeTimer),this._writeTimer=null,this._save()}_load(){try{if(_Z(this._path)){let Z=o6(this._path,"utf-8");return JSON.parse(Z)}}catch{}return{}}_save(){this._writing=!0;try{let Z=JSON.stringify({...this._defaults,...this._data},null,2);i6(this._path,Z,"utf-8")}catch(Z){console.error(`Failed to save preferences to ${this._path}:`,Z)}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(!_Z(this._path))this._save();this._watcher=a6(this._path,()=>{if(this._writing)return;let Z=this._load(),Y={...this._data};this._data=Z;let $=new Set([...Object.keys(Y),...Object.keys(Z)]);for(let J of $){let G=J in Y?Y[J]:this._defaults[J],X=J in Z?Z[J]:this._defaults[J];if(JSON.stringify(G)!==JSON.stringify(X))this._notifyChange(J,X,G)}})}catch{}}_notifyChange(Z,Y,$){let J=this._changeHandlers.get(Z);if(J)for(let G of J)try{G(Y,$)}catch{}for(let G of this._anyChangeHandlers)try{G(Z,Y,$)}catch{}}}function Y8(Z){return new J4(Z)}import{existsSync as p,mkdirSync as G4,readFileSync as $8,unlinkSync as Q4,writeFileSync as X4}from"fs";import{homedir as XZ,platform as z4}from"os";import{join as l}from"path";function R4(Z){let Y=Z.toLowerCase().replace(/[^a-z0-9]/g,"-");return l(XZ(),"Library","LaunchAgents",`com.${Y}.plist`)}function K4(Z){let Y=process.env.XDG_CONFIG_HOME||l(XZ(),".config");return l(Y,"autostart",`${Z.toLowerCase()}.desktop`)}async function J8(Z,Y){let $=Y.appName||"StxApp",J=R4($),G=l(XZ(),"Library","LaunchAgents");if(Z){let X=Y.appPath||process.execPath,R=Y.args||[],z=[X,...R],K=`<?xml version="1.0" encoding="UTF-8"?>
|
|
866
866
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
867
867
|
<plist version="1.0">
|
|
868
868
|
<dict>
|
|
@@ -870,7 +870,7 @@ window.desktop = window.stxWindow;
|
|
|
870
870
|
<string>com.${$.toLowerCase().replace(/[^a-z0-9]/g,"-")}</string>
|
|
871
871
|
<key>ProgramArguments</key>
|
|
872
872
|
<array>
|
|
873
|
-
${z.map((F)=>` <string>${
|
|
873
|
+
${z.map((F)=>` <string>${z8(F)}</string>`).join(`
|
|
874
874
|
`)}
|
|
875
875
|
</array>
|
|
876
876
|
<key>RunAtLoad</key>
|
|
@@ -880,7 +880,7 @@ ${z.map((F)=>` <string>${$8(F)}</string>`).join(`
|
|
|
880
880
|
${Y.isHidden?` <key>ProcessType</key>
|
|
881
881
|
<string>Background</string>`:""}
|
|
882
882
|
</dict>
|
|
883
|
-
</plist>`;if(!p(
|
|
883
|
+
</plist>`;if(!p(G))G4(G,{recursive:!0});X4(J,K,"utf-8")}else if(p(J))Q4(J)}async function G8(Z,Y){let $=Y.appName||"StxApp",J=K4($),G=l(process.env.XDG_CONFIG_HOME||l(XZ(),".config"),"autostart");if(Z){let X=Y.appPath||process.execPath,R=Y.args||[],z=[X,...R].join(" "),K=`[Desktop Entry]
|
|
884
884
|
Type=Application
|
|
885
885
|
Name=${$}
|
|
886
886
|
Exec=${z}
|
|
@@ -888,11 +888,11 @@ Terminal=false
|
|
|
888
888
|
StartupNotify=false
|
|
889
889
|
${Y.isHidden?`X-GNOME-Autostart-enabled=true
|
|
890
890
|
NoDisplay=true`:""}
|
|
891
|
-
`;if(!p(
|
|
891
|
+
`;if(!p(G))G4(G,{recursive:!0});X4(J,K,"utf-8")}else if(p(J))Q4(J)}async function Q8(Z){return p(R4(Z))}async function X8(Z){let Y=K4(Z);if(!p(Y))return!1;try{let $=$8(Y,"utf-8");if($.includes("X-GNOME-Autostart-enabled=false"))return!1;if($.includes("Hidden=true"))return!1;return!0}catch{return!1}}function z8(Z){return Z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}async function R8(Z,Y={}){let $=z4();switch($){case"darwin":return J8(Z,Y);case"linux":return G8(Z,Y);default:throw Error(`Auto-launch is not yet supported on ${$}`)}}async function K8(Z){let Y=Z||"StxApp";switch(z4()){case"darwin":return Q8(Y);case"linux":return X8(Y);default:return!1}}var B=new Map,F8=0,zZ=!1;function F4(Z){let Y=Z.split("+").map((J)=>J.trim()),$={key:"",meta:!1,ctrl:!1,shift:!1,alt:!1};for(let J of Y){let G=J.toLowerCase();switch(G){case"cmd":case"command":case"meta":case"\u2318":$.meta=!0;break;case"ctrl":case"control":case"\u2303":$.ctrl=!0;break;case"shift":case"\u21E7":$.shift=!0;break;case"alt":case"option":case"opt":case"\u2325":$.alt=!0;break;case"cmdorctrl":case"commandorcontrol":if(typeof process<"u"&&process.platform==="darwin")$.meta=!0;else $.ctrl=!0;break;default:$.key=G}}return $}function j8(Z){let Y=[];if(Z.ctrl)Y.push("\u2303");if(Z.alt)Y.push("\u2325");if(Z.shift)Y.push("\u21E7");if(Z.meta)Y.push("\u2318");return Y.push(Z.key.toUpperCase()),Y.join("")}function O8(Z,Y){if(Y.meta!==Z.metaKey)return!1;if(Y.ctrl!==Z.ctrlKey)return!1;if(Y.shift!==Z.shiftKey)return!1;if(Y.alt!==Z.altKey)return!1;return Z.key.toLowerCase()===Y.key||Z.code.toLowerCase()===`key${Y.key}`}function j4(Z){for(let[,Y]of B)if(O8(Z,Y.parsed)){Z.preventDefault(),Z.stopPropagation();try{Y.handler()}catch{}break}}function V8(){if(zZ)return;if(typeof document>"u")return;document.addEventListener("keydown",j4,!0),zZ=!0}function TZ(){if(!zZ)return;if(typeof document>"u")return;document.removeEventListener("keydown",j4,!0),zZ=!1}async function q8(Z,Y){if(typeof window>"u")return!1;let $=window.craft;if(!$?.hotkeys?.register)return!1;try{return await $.hotkeys.register(Z,Y),!0}catch{return!1}}async function NZ(Z){if(typeof window>"u")return;let Y=window.craft;if(!Y?.hotkeys?.unregister)return;try{await Y.hotkeys.unregister(Z)}catch{}}function U8(Z,Y){let $=`hotkey_${++F8}_${Date.now()}`,J=F4(Z);B.set($,{shortcut:Z,handler:Y,parsed:J}),q8($,Z),V8();let G={shortcut:Z,id:$,unregister(){O4(G)}};return G}function O4(Z){if(B.delete(Z.id),NZ(Z.id),B.size===0)TZ()}function P8(){for(let[Z]of B)NZ(Z);B.clear(),TZ()}function L8(){return Array.from(B.entries()).map(([Z,Y])=>({shortcut:Y.shortcut,id:Z,unregister(){if(B.delete(Z),NZ(Z),B.size===0)TZ()}}))}class V4{_duration;_tickInterval;_remaining;_running=!1;_paused=!1;_complete=!1;_intervalId=null;_lastTick=0;_completionHandlers=new Set;_tickHandlers=new Set;constructor(Z){if(this._duration=Z.duration,this._tickInterval=Z.tickInterval||1000,this._remaining=Z.duration,Z.onComplete)this._completionHandlers.add(Z.onComplete);if(Z.onTick)this._tickHandlers.add(Z.onTick);if(Z.autoStart)this.start()}get isRunning(){return this._running&&!this._paused}get isPaused(){return this._paused}get isComplete(){return this._complete}get remaining(){if(this._running&&!this._paused){let Z=Date.now()-this._lastTick;return Math.max(0,this._remaining-Z)}return Math.max(0,this._remaining)}get elapsed(){return this._duration-this.remaining}get duration(){return this._duration}get progress(){if(this._duration===0)return 1;return Math.min(1,this.elapsed/this._duration)}start(){if(this._running)return;this._running=!0,this._paused=!1,this._complete=!1,this._lastTick=Date.now(),this._startInterval()}stop(){this._clearInterval(),this._running=!1,this._paused=!1,this._remaining=this._duration}pause(){if(!this._running||this._paused)return;let Z=Date.now()-this._lastTick;this._remaining=Math.max(0,this._remaining-Z),this._clearInterval(),this._paused=!0}resume(){if(!this._paused)return;this._paused=!1,this._lastTick=Date.now(),this._startInterval()}reset(){this._clearInterval(),this._running=!1,this._paused=!1,this._complete=!1,this._remaining=this._duration}onComplete(Z){return this._completionHandlers.add(Z),()=>{this._completionHandlers.delete(Z)}}onTick(Z){return this._tickHandlers.add(Z),()=>{this._tickHandlers.delete(Z)}}_startInterval(){this._clearInterval(),this._intervalId=setInterval(()=>{let Z=Date.now(),Y=Z-this._lastTick;this._lastTick=Z,this._remaining=Math.max(0,this._remaining-Y);for(let $ of this._tickHandlers)try{$(this._remaining)}catch{}if(this._remaining<=0){this._clearInterval(),this._running=!1,this._complete=!0;for(let $ of this._completionHandlers)try{$()}catch{}}},this._tickInterval)}_clearInterval(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null}}class q4{_interval;_handler;_immediate;_running=!1;_intervalId=null;constructor(Z){if(this._interval=Z.interval,this._handler=Z.handler,this._immediate=Z.immediate!==!1,this._immediate)this.start()}get isRunning(){return this._running}start(){if(this._running)return;this._running=!0,this._intervalId=setInterval(()=>{try{this._handler()}catch{}},this._interval)}stop(){if(this._intervalId!==null)clearInterval(this._intervalId),this._intervalId=null;this._running=!1}}function W8(Z){return new V4(Z)}function D8(Z){return new q4(Z)}function M8(Z){return new Promise((Y)=>setTimeout(Y,Z))}function _8(Z){let Y=Math.ceil(Z/1000),$=Math.floor(Y/3600),J=Math.floor(Y%3600/60),G=Y%60;if($>0)return`${$}:${String(J).padStart(2,"0")}:${String(G).padStart(2,"0")}`;return`${J}:${String(G).padStart(2,"0")}`}function T8(Z){let Y=Math.ceil(Z/1000),$=Math.floor(Y/3600),J=Math.floor(Y%3600/60),G=Y%60;if($>0){if(J>0)return`${$}h ${J}m`;return`${$}h`}if(J>0){if(G>0)return`${J}m ${G}s`;return`${J}m`}return`${G}s`}function Q(Z){if(typeof window>"u")return!1;let Y=window.craft;return!!(Y&&Y[Z])}function M(Z){if(!Q(Z))throw Error(`craft.${Z} is not available \u2014 this API requires a Craft native window`);return window.craft[Z]}function U(Z,Y){if(typeof window>"u")return()=>{};let $=(J)=>Y(J.detail??{});return window.addEventListener(Z,$),()=>window.removeEventListener(Z,$)}var N8={async writeText(Z){if(Q("clipboard")){await window.craft.clipboard.writeText(Z);return}if(typeof navigator<"u"&&navigator.clipboard)await navigator.clipboard.writeText(Z)},async readText(){if(Q("clipboard")){let Z=await window.craft.clipboard.readText();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.readText)try{return await navigator.clipboard.readText()}catch{return""}return""},async writeHTML(Z){if(Q("clipboard")){await window.craft.clipboard.writeHTML(Z);return}if(typeof navigator<"u"&&navigator.clipboard?.write)try{let Y=new window.ClipboardItem({"text/html":new Blob([Z],{type:"text/html"}),"text/plain":new Blob([E8(Z)],{type:"text/plain"})});await navigator.clipboard.write([Y])}catch{}},async readHTML(){if(Q("clipboard")){let Z=await window.craft.clipboard.readHTML();return typeof Z==="string"?Z:""}if(typeof navigator<"u"&&navigator.clipboard?.read)try{let Z=await navigator.clipboard.read();for(let Y of Z)if(Y.types.includes("text/html"))return await(await Y.getType("text/html")).text()}catch{}return""},async clear(){if(Q("clipboard")){await window.craft.clipboard.clear();return}if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText("")}catch{}},async hasText(){if(Q("clipboard"))return await window.craft.clipboard.hasText();return(await this.readText()).length>0},async hasHTML(){if(Q("clipboard"))return await window.craft.clipboard.hasHTML();return(await this.readHTML()).length>0},async hasImage(){if(Q("clipboard"))return await window.craft.clipboard.hasImage();return!1}};function E8(Z){return Z.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<\/?(br|p|div|li|h[1-6])\b[^>]*>/gi,`
|
|
892
892
|
`).replace(/<[^>]+>/g,"").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/\n{3,}/g,`
|
|
893
893
|
|
|
894
|
-
`).trim()}var M8={async show(Z){if(!Z.title)throw Error("notification title is required");if(G("notifications")){await window.craft.notifications.show(Z);return}if(typeof window<"u"&&"Notification"in window){let Y=window.Notification;if(Y.permission==="granted")new Y(Z.title,{body:Z.body,icon:Z.icon});else if(Y.permission==="default"){if(await Y.requestPermission()==="granted")new Y(Z.title,{body:Z.body,icon:Z.icon})}}},async schedule(Z){if(G("notifications")){let J={...Z};if(J.triggerAt instanceof Date)J.triggerAt=J.triggerAt.toISOString();await window.craft.notifications.schedule(J);return}let Y=_8(Z.triggerAt),$=Math.max(0,Y-Date.now());setTimeout(()=>{this.show(Z).catch(()=>{})},$)},async cancel(Z){if(G("notifications"))await window.craft.notifications.cancel(Z)},async cancelAll(){if(G("notifications"))await window.craft.notifications.cancelAll()},async setBadge(Z){let Y=Math.max(0,Math.round(Number.isFinite(Z)?Z:0));if(G("notifications")){await window.craft.notifications.setBadge(Y);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge(Y)}catch{}},async clearBadge(){if(G("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(G("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let Z=window.Notification;if(Z.permission==="granted")return!0;if(Z.permission==="denied")return!1;return await Z.requestPermission()==="granted"}return!1},async registerCategories(Z){if(!Array.isArray(Z)||Z.length===0)return;if(G("notifications")){let Y=window.craft.notifications.registerCategories;if(typeof Y==="function")await Y(Z)}},onActionClicked(Z){return U("craft:notification:actionClicked",Z)},onReply(Z){return U("craft:notification:reply",Z)}};function _8(Z){if(Z==null)return Date.now();if(Z instanceof Date)return Z.getTime();if(typeof Z==="number")return Z;let Y=Date.parse(Z);return Number.isNaN(Y)?Date.now():Y}var T8={async readFile(Z){let Y=await M("fs").readFile(Z);return Y&&Y.data||""},async readBuffer(Z){let Y=await M("fs").readFile(Z),$=Y&&Y.data||"";if(Y&&Y.base64===!0)return E8($);return new TextEncoder().encode($)},async writeFile(Z,Y){await M("fs").writeFile(Z,Y)},async writeBuffer(Z,Y){let $=N8(Y),J=M("fs");if(typeof J.writeFileBytes==="function")await J.writeFileBytes(Z,$);else await J.writeFile(Z,$)},async copy(Z,Y){if(Z===Y)throw Error("fs.copy: source and destination must differ");await M("fs").copy(Z,Y)},async move(Z,Y){if(Z===Y)throw Error("fs.move: source and destination must differ");await M("fs").move(Z,Y)},async appendFile(Z,Y){await M("fs").appendFile(Z,Y)},async deleteFile(Z){await M("fs").deleteFile(Z)},async exists(Z){return await M("fs").exists(Z)},async stat(Z){return A8(await M("fs").stat(Z))},async readDir(Z){let Y=await M("fs").readDir(Z),$=Y&&Y.entries||[],J=Z.endsWith("/")?Z.slice(0,-1):Z;return $.map((Q)=>({name:Q.name,path:`${J}/${Q.name}`,isDirectory:!!Q.isDirectory}))},async mkdir(Z,Y){await M("fs").mkdir(Z,Y)},async rmdir(Z,Y){await M("fs").rmdir(Z,Y)},async watch(Z,Y){await M("fs").watch(Z,Y)},async unwatch(Z){await M("fs").unwatch(Z)},onChange(Z){return U("craft:fs:change",Z)},async watchTree(Z,Y,$){let J=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,Q=M("fs");await Q.watch(Z,J,{recursive:!!Y.recursive});let X=Y.kinds&&Y.kinds.length>0?new Set(Y.kinds):null,R=Math.max(0,Math.floor(Y.coalesceMs??0)),z=[],K=null,F=!1,O=()=>{if(K=null,z.length===0)return;let j=z;z=[];try{$(j)}catch{}},V=U("craft:fs:change",(j)=>{if(F)return;if(j.id!==J)return;if(X&&j.kind&&!X.has(j.kind))return;if(z.push(j),R===0){O();return}if(K==null)K=setTimeout(O,R)});return{id:J,async stop(){if(F)return;if(F=!0,V(),K)clearTimeout(K),K=null;if(z.length>0)O();try{await Q.unwatch(J)}catch{}}}},async homeDir(){return await M("fs").homeDir()},async tempDir(){return await M("fs").tempDir()},async appDataDir(){return await M("fs").appDataDir()}};function N8(Z){let Y="";for(let $=0;$<Z.length;$++)Y+=String.fromCharCode(Z[$]);return typeof btoa==="function"?btoa(Y):Buffer.from(Z).toString("base64")}function E8(Z){let Y=typeof atob==="function"?atob(Z):Buffer.from(Z,"base64").toString("binary"),$=new Uint8Array(Y.length);for(let J=0;J<Y.length;J++)$[J]=Y.charCodeAt(J);return $}function A8(Z){return{isFile:!!Z.isFile,isDirectory:!!Z.isDirectory,isSymlink:!!Z.isSymlink,size:Number(Z.size)||0,modifiedAt:Z.modifiedAt!=null?Z.modifiedAt<1000000000000?Z.modifiedAt*1000:Z.modifiedAt:0}}var a=new Set,q4=!1;function k8(){if(q4)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let Y=Z.detail;if(Y?.id)a.delete(Y.id)}),q4=!0}var H8=new Set(["javascript:","data:","file:","vbscript:"]),x8={async openExternal(Z){let Y=Z.trim().toLowerCase();for(let $ of H8)if(Y.startsWith($))throw Error(`shell.openExternal: ${$} URLs are blocked for safety`);if(G("shell")){await window.craft.shell.openExternal(Z);return}if(typeof window<"u"&&typeof window.open==="function")window.open(Z,"_blank","noopener,noreferrer")},async openPath(Z){await M("shell").openPath(Z)},async showInFinder(Z){await M("shell").showInFinder(Z)},async spawn(Z,Y,$=[],J={}){if(k8(),!Z||typeof Z!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!Y||typeof Y!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray($))throw Error("shell.spawn: args must be an array");for(let Q of $)if(typeof Q!=="string")throw Error("shell.spawn: args entries must be strings");if(a.has(Z))throw Error(`shell.spawn: id "${Z}" is already in use \u2014 call kill(id) first or pick a different id`);a.add(Z);try{await M("shell").spawn(Z,Y,$,J)}catch(Q){throw a.delete(Z),Q}},async kill(Z){await M("shell").kill(Z),a.delete(Z)},async getEnv(Z){if(G("shell")){let Y=await window.craft.shell.getEnv(Z);return Y==null?void 0:String(Y)}return},async setEnv(Z,Y){await M("shell").setEnv(Z,Y)},onStdout(Z){return U("craft:shell:stdout",Z)},onStderr(Z){return U("craft:shell:stderr",Z)},onExit(Z){return U("craft:shell:exit",Z)}};function u(){return window.craft.shortcuts}var C8={async register(Z,Y,$){if(!G("shortcuts"))return;await u().register(Z,Y,$)},async unregister(Z){if(!G("shortcuts"))return;await u().unregister(Z)},async unregisterAll(){if(!G("shortcuts"))return;await u().unregisterAll()},async enable(Z){if(!G("shortcuts"))return;await u().enable(Z)},async disable(Z){if(!G("shortcuts"))return;await u().disable(Z)},async isRegistered(Z){if(!G("shortcuts"))return!1;return await u().isRegistered(Z)},async list(){if(!G("shortcuts"))return[];return await u().list()},on(Z){return U("craft:shortcut",Z)}};var I8={get(){if(G("theme"))try{return window.craft.theme.get()}catch{}return{appearance:S8()}},onChange(Z){if(Z(this.get()),G("theme"))return U("craft:theme",Z);if(typeof window<"u"&&window.matchMedia){let Y=window.matchMedia("(prefers-color-scheme: dark)"),$=()=>Z({appearance:Y.matches?"dark":"light"});return Y.addEventListener("change",$),()=>Y.removeEventListener("change",$)}return()=>{}},async current(){return this.get()}};function S8(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function w8(Z,Y={}){if(!G("dragOut"))throw Error("dragOut requires a Craft native window");let $=Array.isArray(Z)?Z:[Z];if($.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start($,Y)}function B8(){return G("dragOut")}var f8={onUrl(Z){if(!G("deepLink"))return()=>{};return U("craft:deepLink",Z)},getInitialUrl(){if(typeof window>"u")return null;if(G("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let Z=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return Z},isAvailable(){return G("deepLink")}};var v8={async isCharging(){if(G("power"))return await window.craft.power.isCharging();let Z=await RZ();return Z?!!Z.charging:!1},async isPluggedIn(){if(G("power"))return await window.craft.power.isPluggedIn();let Z=await RZ();return Z?!!Z.charging||Z.level>=0.999:!1},async isLowPowerMode(){if(G("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(G("power")){let Y=await window.craft.power.batteryLevel();return typeof Y==="number"?Y:null}let Z=await RZ();return Z?Z.level:null},async timeRemaining(){if(G("power")){let $=await window.craft.power.timeRemaining();return typeof $==="number"?$:null}let Z=await RZ();if(!Z)return null;let Y=Z.charging?Z.chargingTime:Z.dischargingTime;return Number.isFinite(Y)?Math.round(Y/60):null},async thermalState(){if(G("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(G("power"))return await window.craft.power.uptimeSeconds();if(typeof performance<"u"&&typeof performance.now==="function")return Math.round(performance.now()/1000);return 0},async preventSleep(Z="app is busy"){if(G("power")){await window.craft.power.preventSleep(Z);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let Y=window;if(Y.__craftWebWakeLock?.release){try{await Y.__craftWebWakeLock.release()}catch{}Y.__craftWebWakeLock=null}try{let $=await navigator.wakeLock.request("screen");Y.__craftWebWakeLock=$}catch{}},async allowSleep(){if(G("power")){await window.craft.power.allowSleep();return}let Z=window.__craftWebWakeLock;if(Z&&typeof Z.release==="function"){try{await Z.release()}catch{}window.__craftWebWakeLock=null}},onSleep(Z){return U("craft:powerSleep",Z)},onWake(Z){return U("craft:powerWake",Z)}};async function RZ(){if(typeof navigator>"u")return null;let Z=navigator;if(typeof Z.getBattery!=="function")return null;try{return await Z.getBattery()}catch{return null}}var y8={async connectionType(){if(G("network"))return await window.craft.network.connectionType();return U4()},async wifiSSID(){if(G("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(G("network")){let Z=await window.craft.network.wifiSignalStrength();return typeof Z==="number"?Z:void 0}return},async ipAddress(){if(G("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(G("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(G("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(G("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(G("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(G("network"))await window.craft.network.openPreferences()},onChange(Z){if(G("network"))return U("craft:networkChange",Z);if(typeof window>"u")return()=>{};let Y=()=>Z({type:U4(),online:!0}),$=()=>Z({type:"none",online:!1});return window.addEventListener("online",Y),window.addEventListener("offline",$),()=>{window.removeEventListener("online",Y),window.removeEventListener("offline",$)}}};function U4(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let Z=navigator.connection;if(!Z)return"unknown";let Y=String(Z.type||Z.effectiveType||"unknown").toLowerCase();if(Y==="wifi"||Y==="cellular"||Y==="ethernet"||Y==="bluetooth"||Y==="none")return Y;return"unknown"}var g8={async checkForUpdates(){if(!G("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!G("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(Z){if(!G("updater"))return;await window.craft.updater.setAutomaticChecks(Z)},async setCheckInterval(Z){if(!G("updater"))return;if(!Number.isFinite(Z))throw Error("setCheckInterval: must be a finite number");let Y=Z<=0?0:Math.max(60,Math.round(Z));await window.craft.updater.setCheckInterval(Y)},async setFeedURL(Z){if(!G("updater"))return;await window.craft.updater.setFeedURL(Z)},async getLastUpdateCheckDate(){if(!G("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!G("updater"))return null;let Z=await window.craft.updater.getUpdateInfo();if(!Z||typeof Z.version!=="string"||Z.version.length===0)return null;return Z},onAvailable(Z){return U("craft:updateAvailable",Z)},onDownloaded(Z){return U("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:Y,publicKeyB64:$}){let J=P4(Z),Q;try{Q=await crypto.subtle.importKey("raw",KZ($),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",Q,KZ(Y),J)}catch{return!1}},async verifyDownload({url:Z,signatureB64:Y,publicKeyB64:$,fetchInit:J}){let Q;try{Q=await fetch(Z,J)}catch{return{ok:!1,reason:"fetch-failed"}}if(!Q.ok)return{ok:!1,reason:"http-error",status:Q.status};let X=new Uint8Array(await Q.arrayBuffer()),R;try{R=await crypto.subtle.importKey("raw",KZ($),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let z=!1;try{z=await crypto.subtle.verify("Ed25519",R,KZ(Y),P4(X))}catch{z=!1}if(!z)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:X}}};function P4(Z){if(Z instanceof ArrayBuffer)return new Uint8Array(Z);let Y=new ArrayBuffer(Z.byteLength),$=new Uint8Array(Y);return $.set(Z),$}function KZ(Z){if(typeof atob==="function"){let J=atob(Z),Q=new ArrayBuffer(J.length),X=new Uint8Array(Q);for(let R=0;R<J.length;R++)X[R]=J.charCodeAt(R);return X}let Y=Buffer.from(Z,"base64"),$=new ArrayBuffer(Y.length);return new Uint8Array($).set(Y),new Uint8Array($)}var b8={onFocus(Z){if(G("window"))return U("craft:window:focus",()=>Z());return EZ("focus",Z)},onBlur(Z){if(G("window"))return U("craft:window:blur",()=>Z());return EZ("blur",Z)},onResize(Z){if(G("window"))return U("craft:window:resize",Z);if(typeof window>"u")return()=>{};let Y=()=>Z({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)},onMove(Z){if(G("window"))return U("craft:window:move",Z);return()=>{}},onClose(Z){if(G("window"))return U("craft:window:close",()=>Z());return EZ("beforeunload",Z)},onMinimize(Z){if(G("window"))return U("craft:window:minimize",()=>Z());if(typeof document>"u")return()=>{};let Y=()=>{if(document.visibilityState==="hidden")Z()};return document.addEventListener("visibilitychange",Y),()=>document.removeEventListener("visibilitychange",Y)},onRestore(Z){if(G("window"))return U("craft:window:restore",()=>Z());if(typeof document>"u")return()=>{};let Y=()=>{if(document.visibilityState==="visible")Z()};return document.addEventListener("visibilitychange",Y),()=>document.removeEventListener("visibilitychange",Y)}};function EZ(Z,Y){if(typeof window>"u")return()=>{};let $=()=>Y();return window.addEventListener(Z,$),()=>window.removeEventListener(Z,$)}var L4={name:"",version:"0.0.0"},u8={async hideDockIcon(){if(G("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(G("app"))await window.craft.app.showDockIcon()},async quit(){if(G("app"))await window.craft.app.quit()},async getInfo(){if(!G("app"))return L4;let Z=await window.craft.app.getInfo();return{...L4,...Z||{}}},async notify(Z){if(!Z.title)throw Error("notify: title is required");if(G("app"))await window.craft.app.notify(Z)},async setBadge(Z){if(G("app"))await window.craft.app.setBadge(Z)},async bounce(Z="informational"){if(G("app"))await window.craft.app.bounce(Z)}};var m8={app(Z){return{label:Z,items:[{label:`About ${Z}`,role:"about"},{separator:!0},{label:`Hide ${Z}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${Z}`,role:"quit",shortcut:"cmd+q"}]}},edit(){return{label:"Edit",items:[{label:"Undo",role:"undo",shortcut:"cmd+z"},{label:"Redo",role:"redo",shortcut:"cmd+shift+z"},{separator:!0},{label:"Cut",role:"cut",shortcut:"cmd+x"},{label:"Copy",role:"copy",shortcut:"cmd+c"},{label:"Paste",role:"paste",shortcut:"cmd+v"},{label:"Select All",role:"selectAll",shortcut:"cmd+a"}]}},window(){return{label:"Window",items:[{label:"Minimize",role:"minimize",shortcut:"cmd+m"},{label:"Zoom",role:"zoom"},{separator:!0},{label:"Close Window",role:"close",shortcut:"cmd+w"}]}},leading(Z){return[this.app(Z),this.edit()]}},h8=0;function c8(Z){let Y=new Map;return{payload:{menus:Z.menus.map((J)=>({label:J.label,items:J.items.map((Q)=>{let{onClick:X,...R}=Q;if(R.separator)return R;let z=R.id??`stx.menu.${h8++}`;if(X)Y.set(z,X);return{...R,id:z}})}))},handlers:Y}}var AZ=null,p8={async set(Z){if(!G("menu"))return!1;let{payload:Y,handlers:$}=c8(Z);if(AZ?.(),AZ=null,$.size>0)AZ=U("craft:menu:action",(J)=>{$.get(J.id)?.()});return await window.craft.menu.set(Y),!0},async setDock(Z){if(G("menu"))await window.craft.menu.setDock(Z)},async addItem(Z,Y){if(G("menu"))await window.craft.menu.addItem(Z,Y)},async removeItem(Z){if(G("menu"))await window.craft.menu.removeItem(Z)},async enableItem(Z){if(G("menu"))await window.craft.menu.enableItem(Z)},async disableItem(Z){if(G("menu"))await window.craft.menu.disableItem(Z)},async checkItem(Z){if(G("menu"))await window.craft.menu.checkItem(Z)},async uncheckItem(Z){if(G("menu"))await window.craft.menu.uncheckItem(Z)},async setItemLabel(Z,Y){if(G("menu"))await window.craft.menu.setItemLabel(Z,Y)},async clearDock(){if(G("menu"))await window.craft.menu.clearDock()},onAction(Z){return U("craft:menu:action",Z)}};function D4(Z){if(Z.separator)return{id:Z.id||"",title:"",type:"separator"};return{id:Z.id||"",title:Z.title||"",icon:Z.icon,shortcut:Z.shortcut,enabled:Z.disabled?!1:void 0,checked:Z.checked?!0:void 0,type:Z.submenu?"submenu":void 0,submenu:Z.submenu?.map(D4)}}async function W4(Z){if(!Z.items||Z.items.length===0)throw Error("contextMenu.show requires at least one item");if(!G("nativeUI"))return null;let Y=await window.craft.nativeUI.showContextMenu({targetId:Z.targetId||"",targetType:"general",x:Math.round(Z.x),y:Math.round(Z.y),items:Z.items.map(D4)});return{id:typeof Y?.id==="string"?Y.id:null,targetId:Y?.targetId}}var l8={available(){return G("nativeUI")},async show(Z){return await W4(Z)!==null},async pick(Z){return(await W4(Z))?.id??null},onAction(Z){return U("craft:contextmenu:action",(Y)=>{if(typeof Y.id==="string")Z({id:Y.id,targetId:Y.targetId??""})})}};var d8={accentColor:()=>x("system","accentColor",()=>""),highlightColor:()=>x("system","highlightColor",()=>""),language:()=>x("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>x("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>x("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>x("system","is24HourTime",()=>{try{let Z=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return Z.hourCycle==="h23"||Z.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>x("system","reduceMotion",()=>kZ("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>x("system","reduceTransparency",()=>kZ("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>x("system","increaseContrast",()=>kZ("(prefers-contrast: more)")),systemVersion:()=>x("system","systemVersion",()=>""),hostname:()=>x("system","hostname",()=>""),username:()=>x("system","username",()=>""),async openPreferences(){if(G("system"))await window.craft.system.openPreferences()}};async function x(Z,Y,$){if(G(Z))return await window.craft[Z][Y]();return await $()}function kZ(Z){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(Z).matches}var r8={async getDisplays(){if(G("screen"))return await window.craft.screen.getDisplays();return M4()},async getPrimary(){if(G("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return M4()[0]??null},onChange(Z){if(G("screen"))return U("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let Y=()=>Z();return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)}};function M4(){if(typeof window>"u"||!window.screen)return[];let Z=window.screen;return[{id:0,x:Z.left??0,y:Z.top??0,width:Z.width||0,height:Z.height||0,workX:Z.availLeft??0,workY:Z.availTop??0,workWidth:Z.availWidth??Z.width??0,workHeight:Z.availHeight??Z.height??0,scaleFactor:window.devicePixelRatio||1}]}var n8={async set(Z,Y,$){if(!Z)throw Error("keychain.set: service is required");if(!Y)throw Error("keychain.set: account is required");await M("keychain").set(Z,Y,$)},async get(Z,Y){if(!Z)throw Error("keychain.get: service is required");if(!Y)throw Error("keychain.get: account is required");let $=await M("keychain").get(Z,Y);return typeof $==="string"?$:null},async delete(Z,Y){if(!Z)throw Error("keychain.delete: service is required");if(!Y)throw Error("keychain.delete: account is required");await M("keychain").delete(Z,Y)},async has(Z,Y){if(!Z)throw Error("keychain.has: service is required");if(!Y)throw Error("keychain.has: account is required");return await M("keychain").has(Z,Y)}};var o8={async check(Z){if(G("permissions"))return await window.craft.permissions.check(Z);return await _4(Z)},async request(Z){if(G("permissions"))return await window.craft.permissions.request(Z);return await a8(Z)},async openSettings(Z){if(G("permissions"))await window.craft.permissions.openSettings(Z)}};async function _4(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let Y=await navigator.permissions.query({name:Z});return i8(Y.state)}catch{return"not-supported"}}async function a8(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let Y=await window.Notification.requestPermission();return Y==="granted"?"granted":Y==="denied"?"denied":"undetermined"}return await _4(Z)}function i8(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var s8={async print(){if(G("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(Z){if(!Z)throw Error("printToPDF: path is required");let Y=Z.startsWith("/"),$=/^[a-zA-Z]:[\\/]/.test(Z)||Z.startsWith("\\\\");if(!Y&&!$)throw Error("printToPDF: path must be absolute");let J=await M("printing").printToPDF(Z);return{ok:!!(J&&J.ok),path:J?.path}}};var t8={async enable(){if(!G("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!G("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!G("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};function HZ(){if(!G("window"))return null;return window.craft.window}function f(Z){let Y=HZ();if(!Y)return Promise.resolve();try{return Promise.resolve(Z(Y)).then(()=>{return},()=>{return})}catch{return Promise.resolve()}}var e8={get available(){return HZ()!==null},open(Z){let Y=()=>{if(typeof window<"u"&&Z.url)window.open(Z.url,Z.name);return{name:Z.name}},$=HZ();if(!$?.open)return Promise.resolve(Y());return $.open(Z).then((J)=>({name:J?.name||Z.name})).catch(Y)},close:()=>f((Z)=>Z.close?.()),focus:()=>f((Z)=>Z.focus?.()),minimize:()=>f((Z)=>Z.minimize?.()),maximize:()=>f((Z)=>Z.maximize?.()),center:()=>f((Z)=>Z.center?.()),startDrag:()=>f((Z)=>Z.startDrag?.()),setTitle:(Z)=>f((Y)=>Y.setTitle?.(Z)),setSize:(Z,Y)=>f(($)=>$.setSize?.(Z,Y)),setAppearance:(Z)=>f((Y)=>Y.setAppearance?.(Z))};var Z9={async addItem(Z){if(G("touchbar"))await window.craft.touchbar.addItem(Z)},async removeItem(Z){if(G("touchbar"))await window.craft.touchbar.removeItem(Z)},async updateItem(Z,Y){if(G("touchbar"))await window.craft.touchbar.updateItem(Z,Y)},async setLabel(Z,Y){if(G("touchbar"))await window.craft.touchbar.setLabel(Z,Y)},async setIcon(Z,Y){if(G("touchbar"))await window.craft.touchbar.setIcon(Z,Y)},async setEnabled(Z,Y){if(G("touchbar"))await window.craft.touchbar.setEnabled(Z,Y)},async setSliderValue(Z,Y){if(G("touchbar"))await window.craft.touchbar.setSliderValue(Z,Y)},async clear(){if(G("touchbar"))await window.craft.touchbar.clear()},async show(){if(G("touchbar"))await window.craft.touchbar.show()},async hide(){if(G("touchbar"))await window.craft.touchbar.hide()},onAction(Z){return U("craft:touchbar:action",Z)}};var Y9=/^[\da-f]*$/i;function $9(Z,Y){if(typeof Y!=="string"||!Y9.test(Y)||Y.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify(Y)}`)}var J9={async isEnabled(){return G("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return G("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return G("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return G("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(G("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(G("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return G("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(Z){if(G("bluetooth"))await window.craft.bluetooth.connect(Z)},async disconnect(Z){if(G("bluetooth"))await window.craft.bluetooth.disconnect(Z)},async openPreferences(){if(G("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(Z){if(!Z)throw Error("bluetooth.discoverServices: deviceId is required");if(!G("bluetooth"))return[];let Y=await window.craft.bluetooth.discoverServices(Z);return Array.isArray(Y)?Y:[]},async discoverCharacteristics(Z,Y){if(!Z||!Y)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!G("bluetooth"))return[];let $=await window.craft.bluetooth.discoverCharacteristics(Z,Y);return Array.isArray($)?$:[]},async readCharacteristic(Z,Y,$){if(!Z||!Y||!$)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!G("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(Z,Y,$)},async writeCharacteristic(Z,Y,$,J,Q="with-response"){if(!Z||!Y||!$)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if($9("bluetooth.writeCharacteristic.valueHex",J),!G("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(Z,Y,$,J,Q)},async setCharacteristicNotify(Z,Y,$,J){if(!Z||!Y||!$)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!G("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(Z,Y,$,J)},onDeviceFound(Z){return U("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return U("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return U("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return U("craft:bluetooth:characteristicValue",Z)}};var G9={async speak(Z,Y){if(!Z)throw Error("speech.speak: text is required");if(G("speech")){await window.craft.speech.speak(Z,Y);return}if(typeof window<"u"&&window.speechSynthesis){let $=new window.SpeechSynthesisUtterance(Z);if(Y){if(Y.rate!=null)$.rate=Y.rate;if(Y.pitch!=null)$.pitch=Y.pitch;if(Y.volume!=null)$.volume=Y.volume;if(Y.voice){let Q=window.speechSynthesis.getVoices().find((X)=>X.voiceURI===Y.voice||X.name===Y.voice||X.lang===Y.voice);if(Q)$.voice=Q}}window.speechSynthesis.speak($)}},async stop(){if(G("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(G("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(G("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(G("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(G("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map((Y)=>({id:Y.voiceURI||Y.name,name:Y.name,language:Y.lang||"",quality:"default"}));return[]}};var i=[],xZ=!0,CZ,IZ,s={async report(Z){if(G("crashReporter")){await window.craft.crashReporter.report(Z);return}if(!xZ)return;let Y=Z instanceof Error?{timestamp:Date.now(),severity:"error",message:Z.message,source:"js",stack:Z.stack||"",userId:CZ,appVersion:IZ}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:CZ,appVersion:IZ};if(i.length>=64)i.shift();i.push(Y)},async flush(){if(G("crashReporter"))return await window.craft.crashReporter.flush();return[...i]},async clear(){if(G("crashReporter")){await window.craft.crashReporter.clear();return}i.length=0},async setEnabled(Z){if(G("crashReporter")){await window.craft.crashReporter.setEnabled(Z);return}xZ=Z},async isEnabled(){if(G("crashReporter"))return await window.craft.crashReporter.isEnabled();return xZ},async setUser(Z){if(G("crashReporter")){await window.craft.crashReporter.setUser(Z);return}CZ=Z||void 0},async setAppVersion(Z){if(G("crashReporter")){await window.craft.crashReporter.setAppVersion(Z);return}IZ=Z||void 0},attachGlobalHandlers(){if(G("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let Z=($)=>{s.report({severity:"error",message:$.message,source:"js",stack:$.error?.stack||`${$.message}
|
|
895
|
-
at ${$.filename}:${$.lineno}:${$.colno}`}).catch(()=>{})},Y=($)=>{let J=$.reason;s.report({severity:"error",message:J?.message||String(J),source:"js",stack:J?.stack||""}).catch(()=>{})};return window.addEventListener("error",Z),window.addEventListener("unhandledrejection",Y),()=>{window.removeEventListener("error",Z),window.removeEventListener("unhandledrejection",Y)}},forwardTo(Z){return
|
|
894
|
+
`).trim()}var A8={async show(Z){if(!Z.title)throw Error("notification title is required");if(Q("notifications")){await window.craft.notifications.show(Z);return}if(typeof window<"u"&&"Notification"in window){let Y=window.Notification;if(Y.permission==="granted")new Y(Z.title,{body:Z.body,icon:Z.icon});else if(Y.permission==="default"){if(await Y.requestPermission()==="granted")new Y(Z.title,{body:Z.body,icon:Z.icon})}}},async schedule(Z){if(Q("notifications")){let J={...Z};if(J.triggerAt instanceof Date)J.triggerAt=J.triggerAt.toISOString();await window.craft.notifications.schedule(J);return}let Y=k8(Z.triggerAt),$=Math.max(0,Y-Date.now());setTimeout(()=>{this.show(Z).catch(()=>{})},$)},async cancel(Z){if(Q("notifications"))await window.craft.notifications.cancel(Z)},async cancelAll(){if(Q("notifications"))await window.craft.notifications.cancelAll()},async setBadge(Z){let Y=Math.max(0,Math.round(Number.isFinite(Z)?Z:0));if(Q("notifications")){await window.craft.notifications.setBadge(Y);return}if(typeof navigator<"u"&&navigator.setAppBadge)try{await navigator.setAppBadge(Y)}catch{}},async clearBadge(){if(Q("notifications")){await window.craft.notifications.clearBadge();return}if(typeof navigator<"u"&&navigator.clearAppBadge)try{await navigator.clearAppBadge()}catch{}},async requestPermission(){if(Q("notifications"))return await window.craft.notifications.requestPermission();if(typeof window<"u"&&"Notification"in window){let Z=window.Notification;if(Z.permission==="granted")return!0;if(Z.permission==="denied")return!1;return await Z.requestPermission()==="granted"}return!1},async registerCategories(Z){if(!Array.isArray(Z)||Z.length===0)return;if(Q("notifications")){let Y=window.craft.notifications.registerCategories;if(typeof Y==="function")await Y(Z)}},onActionClicked(Z){return U("craft:notification:actionClicked",Z)},onReply(Z){return U("craft:notification:reply",Z)}};function k8(Z){if(Z==null)return Date.now();if(Z instanceof Date)return Z.getTime();if(typeof Z==="number")return Z;let Y=Date.parse(Z);return Number.isNaN(Y)?Date.now():Y}var H8={async readFile(Z){let Y=await M("fs").readFile(Z);return Y&&Y.data||""},async readBuffer(Z){let Y=await M("fs").readFile(Z),$=Y&&Y.data||"";if(Y&&Y.base64===!0)return C8($);return new TextEncoder().encode($)},async writeFile(Z,Y){await M("fs").writeFile(Z,Y)},async writeBuffer(Z,Y){let $=x8(Y),J=M("fs");if(typeof J.writeFileBytes==="function")await J.writeFileBytes(Z,$);else await J.writeFile(Z,$)},async copy(Z,Y){if(Z===Y)throw Error("fs.copy: source and destination must differ");await M("fs").copy(Z,Y)},async move(Z,Y){if(Z===Y)throw Error("fs.move: source and destination must differ");await M("fs").move(Z,Y)},async appendFile(Z,Y){await M("fs").appendFile(Z,Y)},async deleteFile(Z){await M("fs").deleteFile(Z)},async exists(Z){return await M("fs").exists(Z)},async stat(Z){return I8(await M("fs").stat(Z))},async readDir(Z){let Y=await M("fs").readDir(Z),$=Y&&Y.entries||[],J=Z.endsWith("/")?Z.slice(0,-1):Z;return $.map((G)=>({name:G.name,path:`${J}/${G.name}`,isDirectory:!!G.isDirectory}))},async mkdir(Z,Y){await M("fs").mkdir(Z,Y)},async rmdir(Z,Y){await M("fs").rmdir(Z,Y)},async watch(Z,Y){await M("fs").watch(Z,Y)},async unwatch(Z){await M("fs").unwatch(Z)},onChange(Z){return U("craft:fs:change",Z)},async watchTree(Z,Y,$){let J=`watch-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,G=M("fs");await G.watch(Z,J,{recursive:!!Y.recursive});let X=Y.kinds&&Y.kinds.length>0?new Set(Y.kinds):null,R=Math.max(0,Math.floor(Y.coalesceMs??0)),z=[],K=null,F=!1,O=()=>{if(K=null,z.length===0)return;let j=z;z=[];try{$(j)}catch{}},V=U("craft:fs:change",(j)=>{if(F)return;if(j.id!==J)return;if(X&&j.kind&&!X.has(j.kind))return;if(z.push(j),R===0){O();return}if(K==null)K=setTimeout(O,R)});return{id:J,async stop(){if(F)return;if(F=!0,V(),K)clearTimeout(K),K=null;if(z.length>0)O();try{await G.unwatch(J)}catch{}}}},async homeDir(){return await M("fs").homeDir()},async tempDir(){return await M("fs").tempDir()},async appDataDir(){return await M("fs").appDataDir()}};function x8(Z){let Y="";for(let $=0;$<Z.length;$++)Y+=String.fromCharCode(Z[$]);return typeof btoa==="function"?btoa(Y):Buffer.from(Z).toString("base64")}function C8(Z){let Y=typeof atob==="function"?atob(Z):Buffer.from(Z,"base64").toString("binary"),$=new Uint8Array(Y.length);for(let J=0;J<Y.length;J++)$[J]=Y.charCodeAt(J);return $}function I8(Z){return{isFile:!!Z.isFile,isDirectory:!!Z.isDirectory,isSymlink:!!Z.isSymlink,size:Number(Z.size)||0,modifiedAt:Z.modifiedAt!=null?Z.modifiedAt<1000000000000?Z.modifiedAt*1000:Z.modifiedAt:0}}var a=new Set,U4=!1;function S8(){if(U4)return;if(typeof window>"u"||typeof window.addEventListener!=="function")return;window.addEventListener("craft:shell:exit",(Z)=>{let Y=Z.detail;if(Y?.id)a.delete(Y.id)}),U4=!0}var w8=new Set(["javascript:","data:","file:","vbscript:"]),B8={async openExternal(Z){let Y=Z.trim().toLowerCase();for(let $ of w8)if(Y.startsWith($))throw Error(`shell.openExternal: ${$} URLs are blocked for safety`);if(Q("shell")){await window.craft.shell.openExternal(Z);return}if(typeof window<"u"&&typeof window.open==="function")window.open(Z,"_blank","noopener,noreferrer")},async openPath(Z){await M("shell").openPath(Z)},async showInFinder(Z){await M("shell").showInFinder(Z)},async spawn(Z,Y,$=[],J={}){if(S8(),!Z||typeof Z!=="string")throw Error("shell.spawn: id must be a non-empty string");if(!Y||typeof Y!=="string")throw Error("shell.spawn: command must be a non-empty string");if(!Array.isArray($))throw Error("shell.spawn: args must be an array");for(let G of $)if(typeof G!=="string")throw Error("shell.spawn: args entries must be strings");if(a.has(Z))throw Error(`shell.spawn: id "${Z}" is already in use \u2014 call kill(id) first or pick a different id`);a.add(Z);try{await M("shell").spawn(Z,Y,$,J)}catch(G){throw a.delete(Z),G}},async kill(Z){await M("shell").kill(Z),a.delete(Z)},async getEnv(Z){if(Q("shell")){let Y=await window.craft.shell.getEnv(Z);return Y==null?void 0:String(Y)}return},async setEnv(Z,Y){await M("shell").setEnv(Z,Y)},onStdout(Z){return U("craft:shell:stdout",Z)},onStderr(Z){return U("craft:shell:stderr",Z)},onExit(Z){return U("craft:shell:exit",Z)}};function u(){return window.craft.shortcuts}var f8={async register(Z,Y,$){if(!Q("shortcuts"))return;await u().register(Z,Y,$)},async unregister(Z){if(!Q("shortcuts"))return;await u().unregister(Z)},async unregisterAll(){if(!Q("shortcuts"))return;await u().unregisterAll()},async enable(Z){if(!Q("shortcuts"))return;await u().enable(Z)},async disable(Z){if(!Q("shortcuts"))return;await u().disable(Z)},async isRegistered(Z){if(!Q("shortcuts"))return!1;return await u().isRegistered(Z)},async list(){if(!Q("shortcuts"))return[];return await u().list()},on(Z){return U("craft:shortcut",Z)}};var v8={get(){if(Q("theme"))try{return window.craft.theme.get()}catch{}return{appearance:y8()}},onChange(Z){if(Z(this.get()),Q("theme"))return U("craft:theme",Z);if(typeof window<"u"&&window.matchMedia){let Y=window.matchMedia("(prefers-color-scheme: dark)"),$=()=>Z({appearance:Y.matches?"dark":"light"});return Y.addEventListener("change",$),()=>Y.removeEventListener("change",$)}return()=>{}},async current(){return this.get()}};function y8(){if(typeof window>"u"||!window.matchMedia)return"light";return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}async function g8(Z,Y={}){if(!Q("dragOut"))throw Error("dragOut requires a Craft native window");let $=Array.isArray(Z)?Z:[Z];if($.length===0)throw Error("dragOut: at least one path required");await window.craft.dragOut.start($,Y)}function b8(){return Q("dragOut")}var u8={onUrl(Z){if(!Q("deepLink"))return()=>{};return U("craft:deepLink",Z)},getInitialUrl(){if(typeof window>"u")return null;if(Q("deepLink"))try{return window.craft.deepLink.getInitialUrl()}catch{return null}return window.__craftPendingDeepLink||null},consumeInitialUrl(){let Z=this.getInitialUrl();if(typeof window<"u")window.__craftPendingDeepLink=void 0;return Z},isAvailable(){return Q("deepLink")}};var m8={async isCharging(){if(Q("power"))return await window.craft.power.isCharging();let Z=await RZ();return Z?!!Z.charging:!1},async isPluggedIn(){if(Q("power"))return await window.craft.power.isPluggedIn();let Z=await RZ();return Z?!!Z.charging||Z.level>=0.999:!1},async isLowPowerMode(){if(Q("power"))return await window.craft.power.isLowPowerMode();return!1},async level(){if(Q("power")){let Y=await window.craft.power.batteryLevel();return typeof Y==="number"?Y:null}let Z=await RZ();return Z?Z.level:null},async timeRemaining(){if(Q("power")){let $=await window.craft.power.timeRemaining();return typeof $==="number"?$:null}let Z=await RZ();if(!Z)return null;let Y=Z.charging?Z.chargingTime:Z.dischargingTime;return Number.isFinite(Y)?Math.round(Y/60):null},async thermalState(){if(Q("power"))return await window.craft.power.thermalState()||"unknown";return"unknown"},async uptimeSeconds(){if(Q("power"))return await window.craft.power.uptimeSeconds();if(typeof performance<"u"&&typeof performance.now==="function")return Math.round(performance.now()/1000);return 0},async preventSleep(Z="app is busy"){if(Q("power")){await window.craft.power.preventSleep(Z);return}if(typeof navigator>"u"||!navigator.wakeLock)return;let Y=window;if(Y.__craftWebWakeLock?.release){try{await Y.__craftWebWakeLock.release()}catch{}Y.__craftWebWakeLock=null}try{let $=await navigator.wakeLock.request("screen");Y.__craftWebWakeLock=$}catch{}},async allowSleep(){if(Q("power")){await window.craft.power.allowSleep();return}let Z=window.__craftWebWakeLock;if(Z&&typeof Z.release==="function"){try{await Z.release()}catch{}window.__craftWebWakeLock=null}},onSleep(Z){return U("craft:powerSleep",Z)},onWake(Z){return U("craft:powerWake",Z)}};async function RZ(){if(typeof navigator>"u")return null;let Z=navigator;if(typeof Z.getBattery!=="function")return null;try{return await Z.getBattery()}catch{return null}}var h8={async connectionType(){if(Q("network"))return await window.craft.network.connectionType();return P4()},async wifiSSID(){if(Q("network"))return await window.craft.network.wifiSSID()||void 0;return},async wifiSignalStrength(){if(Q("network")){let Z=await window.craft.network.wifiSignalStrength();return typeof Z==="number"?Z:void 0}return},async ipAddress(){if(Q("network"))return await window.craft.network.ipAddress();return""},async macAddress(){if(Q("network"))return await window.craft.network.macAddress();return""},async interfaces(){if(Q("network"))return await window.craft.network.interfaces();return[]},async isVPNConnected(){if(Q("network"))return await window.craft.network.isVPNConnected();return!1},async proxySettings(){if(Q("network"))return await window.craft.network.proxySettings()||{};return{}},async openPreferences(){if(Q("network"))await window.craft.network.openPreferences()},onChange(Z){if(Q("network"))return U("craft:networkChange",Z);if(typeof window>"u")return()=>{};let Y=()=>Z({type:P4(),online:!0}),$=()=>Z({type:"none",online:!1});return window.addEventListener("online",Y),window.addEventListener("offline",$),()=>{window.removeEventListener("online",Y),window.removeEventListener("offline",$)}}};function P4(){if(typeof navigator>"u")return"unknown";if(navigator.onLine===!1)return"none";let Z=navigator.connection;if(!Z)return"unknown";let Y=String(Z.type||Z.effectiveType||"unknown").toLowerCase();if(Y==="wifi"||Y==="cellular"||Y==="ethernet"||Y==="bluetooth"||Y==="none")return Y;return"unknown"}var c8={async checkForUpdates(){if(!Q("updater"))return;await window.craft.updater.checkForUpdates()},async checkInBackground(){if(!Q("updater"))return;await window.craft.updater.checkInBackground()},async setAutomaticChecks(Z){if(!Q("updater"))return;await window.craft.updater.setAutomaticChecks(Z)},async setCheckInterval(Z){if(!Q("updater"))return;if(!Number.isFinite(Z))throw Error("setCheckInterval: must be a finite number");let Y=Z<=0?0:Math.max(60,Math.round(Z));await window.craft.updater.setCheckInterval(Y)},async setFeedURL(Z){if(!Q("updater"))return;await window.craft.updater.setFeedURL(Z)},async getLastUpdateCheckDate(){if(!Q("updater"))return null;return await window.craft.updater.getLastUpdateCheckDate()||null},async getUpdateInfo(){if(!Q("updater"))return null;let Z=await window.craft.updater.getUpdateInfo();if(!Z||typeof Z.version!=="string"||Z.version.length===0)return null;return Z},onAvailable(Z){return U("craft:updateAvailable",Z)},onDownloaded(Z){return U("craft:updateDownloaded",Z)},async verifySignature({payload:Z,signatureB64:Y,publicKeyB64:$}){let J=L4(Z),G;try{G=await crypto.subtle.importKey("raw",KZ($),{name:"Ed25519"},!1,["verify"])}catch{return!1}try{return await crypto.subtle.verify("Ed25519",G,KZ(Y),J)}catch{return!1}},async verifyDownload({url:Z,signatureB64:Y,publicKeyB64:$,fetchInit:J}){let G;try{G=await fetch(Z,J)}catch{return{ok:!1,reason:"fetch-failed"}}if(!G.ok)return{ok:!1,reason:"http-error",status:G.status};let X=new Uint8Array(await G.arrayBuffer()),R;try{R=await crypto.subtle.importKey("raw",KZ($),{name:"Ed25519"},!1,["verify"])}catch{return{ok:!1,reason:"bad-key"}}let z=!1;try{z=await crypto.subtle.verify("Ed25519",R,KZ(Y),L4(X))}catch{z=!1}if(!z)return{ok:!1,reason:"bad-signature"};return{ok:!0,payload:X}}};function L4(Z){if(Z instanceof ArrayBuffer)return new Uint8Array(Z);let Y=new ArrayBuffer(Z.byteLength),$=new Uint8Array(Y);return $.set(Z),$}function KZ(Z){if(typeof atob==="function"){let J=atob(Z),G=new ArrayBuffer(J.length),X=new Uint8Array(G);for(let R=0;R<J.length;R++)X[R]=J.charCodeAt(R);return X}let Y=Buffer.from(Z,"base64"),$=new ArrayBuffer(Y.length);return new Uint8Array($).set(Y),new Uint8Array($)}var p8={onFocus(Z){if(Q("window"))return U("craft:window:focus",()=>Z());return EZ("focus",Z)},onBlur(Z){if(Q("window"))return U("craft:window:blur",()=>Z());return EZ("blur",Z)},onResize(Z){if(Q("window"))return U("craft:window:resize",Z);if(typeof window>"u")return()=>{};let Y=()=>Z({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)},onMove(Z){if(Q("window"))return U("craft:window:move",Z);return()=>{}},onClose(Z){if(Q("window"))return U("craft:window:close",()=>Z());return EZ("beforeunload",Z)},onMinimize(Z){if(Q("window"))return U("craft:window:minimize",()=>Z());if(typeof document>"u")return()=>{};let Y=()=>{if(document.visibilityState==="hidden")Z()};return document.addEventListener("visibilitychange",Y),()=>document.removeEventListener("visibilitychange",Y)},onRestore(Z){if(Q("window"))return U("craft:window:restore",()=>Z());if(typeof document>"u")return()=>{};let Y=()=>{if(document.visibilityState==="visible")Z()};return document.addEventListener("visibilitychange",Y),()=>document.removeEventListener("visibilitychange",Y)}};function EZ(Z,Y){if(typeof window>"u")return()=>{};let $=()=>Y();return window.addEventListener(Z,$),()=>window.removeEventListener(Z,$)}var W4={name:"",version:"0.0.0"},l8={async hideDockIcon(){if(Q("app"))await window.craft.app.hideDockIcon()},async showDockIcon(){if(Q("app"))await window.craft.app.showDockIcon()},async quit(){if(Q("app"))await window.craft.app.quit()},async getInfo(){if(!Q("app"))return W4;let Z=await window.craft.app.getInfo();return{...W4,...Z||{}}},async notify(Z){if(!Z.title)throw Error("notify: title is required");if(Q("app"))await window.craft.app.notify(Z)},async setBadge(Z){if(Q("app"))await window.craft.app.setBadge(Z)},async bounce(Z="informational"){if(Q("app"))await window.craft.app.bounce(Z)}};var d8={app(Z,Y={}){return{label:Z,items:[{label:`About ${Z}`,role:"about"},{separator:!0},...Y.settings?[{id:"stx.menu.settings",label:"Settings\u2026",shortcut:"cmd+,",onClick:Y.settings},{separator:!0}]:[],{label:`Hide ${Z}`,role:"hide",shortcut:"cmd+h"},{label:"Hide Others",role:"hideOthers",shortcut:"cmd+alt+h"},{label:"Show All",role:"showAll"},{separator:!0},{label:`Quit ${Z}`,role:"quit",shortcut:"cmd+q"}]}},edit(){return{label:"Edit",items:[{label:"Undo",role:"undo",shortcut:"cmd+z"},{label:"Redo",role:"redo",shortcut:"cmd+shift+z"},{separator:!0},{label:"Cut",role:"cut",shortcut:"cmd+x"},{label:"Copy",role:"copy",shortcut:"cmd+c"},{label:"Paste",role:"paste",shortcut:"cmd+v"},{label:"Select All",role:"selectAll",shortcut:"cmd+a"}]}},window(){return{label:"Window",items:[{label:"Minimize",role:"minimize",shortcut:"cmd+m"},{label:"Zoom",role:"zoom"},{separator:!0},{label:"Close Window",role:"close",shortcut:"cmd+w"}]}},leading(Z,Y={}){return[this.app(Z,Y),this.edit()]}},r8=0;function n8(Z){let Y=new Map;return{payload:{menus:Z.menus.map((J)=>({label:J.label,items:J.items.map((G)=>{let{onClick:X,...R}=G;if(R.separator)return R;let z=R.id??`stx.menu.${r8++}`;if(X)Y.set(z,X);return{...R,id:z}})}))},handlers:Y}}var AZ=null,o8={async set(Z){if(!Q("menu"))return!1;let{payload:Y,handlers:$}=n8(Z);if(AZ?.(),AZ=null,$.size>0)AZ=U("craft:menu:action",(J)=>{$.get(J.id)?.()});return await window.craft.menu.set(Y),!0},async setDock(Z){if(Q("menu"))await window.craft.menu.setDock(Z)},async addItem(Z,Y){if(Q("menu"))await window.craft.menu.addItem(Z,Y)},async removeItem(Z){if(Q("menu"))await window.craft.menu.removeItem(Z)},async enableItem(Z){if(Q("menu"))await window.craft.menu.enableItem(Z)},async disableItem(Z){if(Q("menu"))await window.craft.menu.disableItem(Z)},async checkItem(Z){if(Q("menu"))await window.craft.menu.checkItem(Z)},async uncheckItem(Z){if(Q("menu"))await window.craft.menu.uncheckItem(Z)},async setItemLabel(Z,Y){if(Q("menu"))await window.craft.menu.setItemLabel(Z,Y)},async clearDock(){if(Q("menu"))await window.craft.menu.clearDock()},onAction(Z){return U("craft:menu:action",Z)}};function M4(Z){if(Z.separator)return{id:Z.id||"",title:"",type:"separator"};return{id:Z.id||"",title:Z.title||"",icon:Z.icon,shortcut:Z.shortcut,enabled:Z.disabled?!1:void 0,checked:Z.checked?!0:void 0,type:Z.submenu?"submenu":void 0,submenu:Z.submenu?.map(M4)}}async function D4(Z){if(!Z.items||Z.items.length===0)throw Error("contextMenu.show requires at least one item");if(!Q("nativeUI"))return null;let Y=await window.craft.nativeUI.showContextMenu({targetId:Z.targetId||"",targetType:"general",x:Math.round(Z.x),y:Math.round(Z.y),items:Z.items.map(M4)});return{id:typeof Y?.id==="string"?Y.id:null,targetId:Y?.targetId}}var a8={available(){return Q("nativeUI")},async show(Z){return await D4(Z)!==null},async pick(Z){return(await D4(Z))?.id??null},onAction(Z){return U("craft:contextmenu:action",(Y)=>{if(typeof Y.id==="string")Z({id:Y.id,targetId:Y.targetId??""})})}};function kZ(Z){if(Z===null||Z===void 0||Z===0)return"";return String(Z)}function _4(Z){return Z.map((Y)=>({id:Y.id,header:Y.header,items:Y.items.map(($)=>({id:$.id,label:$.label,icon:$.icon,badge:kZ($.badge)||void 0}))}))}function T4(Z){return JSON.stringify(Z.map((Y)=>[Y.id,Y.header??"",Y.items.map(($)=>[$.id,$.label,$.icon??""])]))}function N4(Z){return new Map(Z.flatMap((Y)=>Y.items.map(($)=>[$.id,kZ($.badge)])))}var E4={available(){return Q("nativeUI")&&typeof window.craft?.nativeUI?._emitSidebarSelect==="function"},create(Z){if(!E4.available())return null;let Y=window.craft.nativeUI.createSidebar({id:Z.id,sections:_4(Z.sections),selected:Z.selected}),$=Z.sections,J=new Set;return Y.onSelect((G)=>{for(let X of[...J])X(G)}),{id:Y.id,update(G){if(T4(G)===T4($)){let X=N4($);for(let[R,z]of N4(G))if(X.get(R)!==z)Y.updateItem(R,{badge:z})}else Y.setSections(_4(G));$=G},updateItem(G,X){Y.updateItem(G,{...X.label!==void 0?{label:X.label}:{},...X.icon!==void 0?{icon:X.icon}:{},..."badge"in X?{badge:kZ(X.badge)}:{}}),$=$.map((R)=>({...R,items:R.items.map((z)=>z.id===G?{...z,...X}:z)}))},select(G){Y.setSelectedItem(G)},onSelect(G){return J.add(G),()=>J.delete(G)},destroy(){J.clear(),Y.destroy()}}}};var i8={accentColor:()=>x("system","accentColor",()=>""),highlightColor:()=>x("system","highlightColor",()=>""),language:()=>x("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>x("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>x("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>x("system","is24HourTime",()=>{try{let Z=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return Z.hourCycle==="h23"||Z.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>x("system","reduceMotion",()=>HZ("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>x("system","reduceTransparency",()=>HZ("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>x("system","increaseContrast",()=>HZ("(prefers-contrast: more)")),systemVersion:()=>x("system","systemVersion",()=>""),hostname:()=>x("system","hostname",()=>""),username:()=>x("system","username",()=>""),async openPreferences(){if(Q("system"))await window.craft.system.openPreferences()}};async function x(Z,Y,$){if(Q(Z))return await window.craft[Z][Y]();return await $()}function HZ(Z){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(Z).matches}var s8={async getDisplays(){if(Q("screen"))return await window.craft.screen.getDisplays();return A4()},async getPrimary(){if(Q("screen")){let Z=await window.craft.screen.getPrimary();return Z&&typeof Z.width==="number"?Z:null}return A4()[0]??null},onChange(Z){if(Q("screen"))return U("craft:screen:change",()=>Z());if(typeof window>"u")return()=>{};let Y=()=>Z();return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)}};function A4(){if(typeof window>"u"||!window.screen)return[];let Z=window.screen;return[{id:0,x:Z.left??0,y:Z.top??0,width:Z.width||0,height:Z.height||0,workX:Z.availLeft??0,workY:Z.availTop??0,workWidth:Z.availWidth??Z.width??0,workHeight:Z.availHeight??Z.height??0,scaleFactor:window.devicePixelRatio||1}]}var t8={async set(Z,Y,$){if(!Z)throw Error("keychain.set: service is required");if(!Y)throw Error("keychain.set: account is required");await M("keychain").set(Z,Y,$)},async get(Z,Y){if(!Z)throw Error("keychain.get: service is required");if(!Y)throw Error("keychain.get: account is required");let $=await M("keychain").get(Z,Y);return typeof $==="string"?$:null},async delete(Z,Y){if(!Z)throw Error("keychain.delete: service is required");if(!Y)throw Error("keychain.delete: account is required");await M("keychain").delete(Z,Y)},async has(Z,Y){if(!Z)throw Error("keychain.has: service is required");if(!Y)throw Error("keychain.has: account is required");return await M("keychain").has(Z,Y)}};var e8={async check(Z){if(Q("permissions"))return await window.craft.permissions.check(Z);return await k4(Z)},async request(Z){if(Q("permissions"))return await window.craft.permissions.request(Z);return await Z9(Z)},async openSettings(Z){if(Q("permissions"))await window.craft.permissions.openSettings(Z)}};async function k4(Z){if(typeof navigator>"u"||!navigator.permissions?.query)return"not-supported";try{let Y=await navigator.permissions.query({name:Z});return Y9(Y.state)}catch{return"not-supported"}}async function Z9(Z){if(Z==="notifications"&&typeof window<"u"&&"Notification"in window){let Y=await window.Notification.requestPermission();return Y==="granted"?"granted":Y==="denied"?"denied":"undetermined"}return await k4(Z)}function Y9(Z){if(Z==="granted")return"granted";if(Z==="denied")return"denied";if(Z==="prompt")return"undetermined";return"undetermined"}var $9={async print(){if(Q("printing")){await window.craft.printing.print();return}if(typeof window<"u"&&typeof window.print==="function")window.print()},async printToPDF(Z){if(!Z)throw Error("printToPDF: path is required");let Y=Z.startsWith("/"),$=/^[a-zA-Z]:[\\/]/.test(Z)||Z.startsWith("\\\\");if(!Y&&!$)throw Error("printToPDF: path must be absolute");let J=await M("printing").printToPDF(Z);return{ok:!!(J&&J.ok),path:J?.path}}};var J9={async enable(){if(!Q("autoLaunch"))return!1;return await window.craft.autoLaunch.enable()},async disable(){if(!Q("autoLaunch"))return!1;return await window.craft.autoLaunch.disable()},async isEnabled(){if(!Q("autoLaunch"))return!1;return await window.craft.autoLaunch.isEnabled()}};function xZ(){if(!Q("window"))return null;return window.craft.window}function f(Z){let Y=xZ();if(!Y)return Promise.resolve();try{return Promise.resolve(Z(Y)).then(()=>{return},()=>{return})}catch{return Promise.resolve()}}var G9={get available(){return xZ()!==null},open(Z){let Y=()=>{if(typeof window<"u"&&Z.url)window.open(Z.url,Z.name);return{name:Z.name}},$=xZ();if(!$?.open)return Promise.resolve(Y());return $.open(Z).then((J)=>({name:J?.name||Z.name})).catch(Y)},close:()=>f((Z)=>Z.close?.()),focus:()=>f((Z)=>Z.focus?.()),minimize:()=>f((Z)=>Z.minimize?.()),maximize:()=>f((Z)=>Z.maximize?.()),center:()=>f((Z)=>Z.center?.()),startDrag:()=>f((Z)=>Z.startDrag?.()),setTitle:(Z)=>f((Y)=>Y.setTitle?.(Z)),setSize:(Z,Y)=>f(($)=>$.setSize?.(Z,Y)),setAppearance:(Z)=>f((Y)=>Y.setAppearance?.(Z))};var Q9={async addItem(Z){if(Q("touchbar"))await window.craft.touchbar.addItem(Z)},async removeItem(Z){if(Q("touchbar"))await window.craft.touchbar.removeItem(Z)},async updateItem(Z,Y){if(Q("touchbar"))await window.craft.touchbar.updateItem(Z,Y)},async setLabel(Z,Y){if(Q("touchbar"))await window.craft.touchbar.setLabel(Z,Y)},async setIcon(Z,Y){if(Q("touchbar"))await window.craft.touchbar.setIcon(Z,Y)},async setEnabled(Z,Y){if(Q("touchbar"))await window.craft.touchbar.setEnabled(Z,Y)},async setSliderValue(Z,Y){if(Q("touchbar"))await window.craft.touchbar.setSliderValue(Z,Y)},async clear(){if(Q("touchbar"))await window.craft.touchbar.clear()},async show(){if(Q("touchbar"))await window.craft.touchbar.show()},async hide(){if(Q("touchbar"))await window.craft.touchbar.hide()},onAction(Z){return U("craft:touchbar:action",Z)}};var X9=/^[\da-f]*$/i;function z9(Z,Y){if(typeof Y!=="string"||!X9.test(Y)||Y.length%2!==0)throw Error(`${Z}: must be a hex string with even length, got ${JSON.stringify(Y)}`)}var R9={async isEnabled(){return Q("bluetooth")?await window.craft.bluetooth.isEnabled():!1},async powerState(){return Q("bluetooth")?await window.craft.bluetooth.powerState():"unknown"},async connectedDevices(){return Q("bluetooth")?await window.craft.bluetooth.connectedDevices():[]},async pairedDevices(){return Q("bluetooth")?await window.craft.bluetooth.pairedDevices():[]},async startDiscovery(){if(Q("bluetooth"))await window.craft.bluetooth.startDiscovery()},async stopDiscovery(){if(Q("bluetooth"))await window.craft.bluetooth.stopDiscovery()},async isDiscovering(){return Q("bluetooth")?await window.craft.bluetooth.isDiscovering():!1},async connect(Z){if(Q("bluetooth"))await window.craft.bluetooth.connect(Z)},async disconnect(Z){if(Q("bluetooth"))await window.craft.bluetooth.disconnect(Z)},async openPreferences(){if(Q("bluetooth"))await window.craft.bluetooth.openPreferences()},async discoverServices(Z){if(!Z)throw Error("bluetooth.discoverServices: deviceId is required");if(!Q("bluetooth"))return[];let Y=await window.craft.bluetooth.discoverServices(Z);return Array.isArray(Y)?Y:[]},async discoverCharacteristics(Z,Y){if(!Z||!Y)throw Error("bluetooth.discoverCharacteristics: deviceId and serviceUuid are required");if(!Q("bluetooth"))return[];let $=await window.craft.bluetooth.discoverCharacteristics(Z,Y);return Array.isArray($)?$:[]},async readCharacteristic(Z,Y,$){if(!Z||!Y||!$)throw Error("bluetooth.readCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(!Q("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.readCharacteristic(Z,Y,$)},async writeCharacteristic(Z,Y,$,J,G="with-response"){if(!Z||!Y||!$)throw Error("bluetooth.writeCharacteristic: deviceId, serviceUuid, characteristicUuid are required");if(z9("bluetooth.writeCharacteristic.valueHex",J),!Q("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.writeCharacteristic(Z,Y,$,J,G)},async setCharacteristicNotify(Z,Y,$,J){if(!Z||!Y||!$)throw Error("bluetooth.setCharacteristicNotify: deviceId, serviceUuid, characteristicUuid are required");if(!Q("bluetooth"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.bluetooth.setCharacteristicNotify(Z,Y,$,J)},onDeviceFound(Z){return U("craft:bluetooth:deviceFound",Z)},onDeviceConnected(Z){return U("craft:bluetooth:deviceConnected",Z)},onDeviceDisconnected(Z){return U("craft:bluetooth:deviceDisconnected",Z)},onCharacteristicValue(Z){return U("craft:bluetooth:characteristicValue",Z)}};var K9={async speak(Z,Y){if(!Z)throw Error("speech.speak: text is required");if(Q("speech")){await window.craft.speech.speak(Z,Y);return}if(typeof window<"u"&&window.speechSynthesis){let $=new window.SpeechSynthesisUtterance(Z);if(Y){if(Y.rate!=null)$.rate=Y.rate;if(Y.pitch!=null)$.pitch=Y.pitch;if(Y.volume!=null)$.volume=Y.volume;if(Y.voice){let G=window.speechSynthesis.getVoices().find((X)=>X.voiceURI===Y.voice||X.name===Y.voice||X.lang===Y.voice);if(G)$.voice=G}}window.speechSynthesis.speak($)}},async stop(){if(Q("speech")){await window.craft.speech.stop();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.cancel()},async pause(){if(Q("speech")){await window.craft.speech.pause();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.pause()},async resume(){if(Q("speech")){await window.craft.speech.resume();return}if(typeof window<"u"&&window.speechSynthesis)window.speechSynthesis.resume()},async isSpeaking(){if(Q("speech"))return await window.craft.speech.isSpeaking();if(typeof window<"u"&&window.speechSynthesis)return!!window.speechSynthesis.speaking;return!1},async getVoices(){if(Q("speech"))return await window.craft.speech.getVoices();if(typeof window<"u"&&window.speechSynthesis)return window.speechSynthesis.getVoices().map((Y)=>({id:Y.voiceURI||Y.name,name:Y.name,language:Y.lang||"",quality:"default"}));return[]}};var i=[],CZ=!0,IZ,SZ,s={async report(Z){if(Q("crashReporter")){await window.craft.crashReporter.report(Z);return}if(!CZ)return;let Y=Z instanceof Error?{timestamp:Date.now(),severity:"error",message:Z.message,source:"js",stack:Z.stack||"",userId:IZ,appVersion:SZ}:{timestamp:Date.now(),severity:Z.severity||"error",message:Z.message||"",source:Z.source||"js",stack:Z.stack||"",userId:IZ,appVersion:SZ};if(i.length>=64)i.shift();i.push(Y)},async flush(){if(Q("crashReporter"))return await window.craft.crashReporter.flush();return[...i]},async clear(){if(Q("crashReporter")){await window.craft.crashReporter.clear();return}i.length=0},async setEnabled(Z){if(Q("crashReporter")){await window.craft.crashReporter.setEnabled(Z);return}CZ=Z},async isEnabled(){if(Q("crashReporter"))return await window.craft.crashReporter.isEnabled();return CZ},async setUser(Z){if(Q("crashReporter")){await window.craft.crashReporter.setUser(Z);return}IZ=Z||void 0},async setAppVersion(Z){if(Q("crashReporter")){await window.craft.crashReporter.setAppVersion(Z);return}SZ=Z||void 0},attachGlobalHandlers(){if(Q("crashReporter")&&window.craft.crashReporter.attachGlobalHandlers)return window.craft.crashReporter.attachGlobalHandlers();if(typeof window>"u")return()=>{};let Z=($)=>{s.report({severity:"error",message:$.message,source:"js",stack:$.error?.stack||`${$.message}
|
|
895
|
+
at ${$.filename}:${$.lineno}:${$.colno}`}).catch(()=>{})},Y=($)=>{let J=$.reason;s.report({severity:"error",message:J?.message||String(J),source:"js",stack:J?.stack||""}).catch(()=>{})};return window.addEventListener("error",Z),window.addEventListener("unhandledrejection",Y),()=>{window.removeEventListener("error",Z),window.removeEventListener("unhandledrejection",Y)}},forwardTo(Z){return U9(Z)}},F9="craft:crashReporter:pending",j9=/[\w.+-]+@[\w-]+\.[\w.-]+/g,O9=/\b(?:\d{1,3}\.){3}\d{1,3}\b/g,V9=/\/(?:Users|home)\/[^\s/'"`]+/g;function x4(Z){let Y=($)=>$.replace(j9,"<email>").replace(O9,"<ip>").replace(V9,"/<home>");return{...Z,message:Y(Z.message),stack:Y(Z.stack)}}async function C4(Z,Y){let $=new TextEncoder,J=await crypto.subtle.importKey("raw",$.encode(Z),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),G=await crypto.subtle.sign("HMAC",J,$.encode(Y));return[...new Uint8Array(G)].map((X)=>X.toString(16).padStart(2,"0")).join("")}function q9(Z){if(!Z||typeof localStorage>"u")return[];try{let Y=localStorage.getItem(Z);if(!Y)return[];let $=JSON.parse(Y);return Array.isArray($)?$:[]}catch{return[]}}function H4(Z,Y){if(!Z||typeof localStorage>"u")return;try{if(Y.length===0)localStorage.removeItem(Z);else localStorage.setItem(Z,JSON.stringify(Y))}catch{}}function U9(Z){let{endpoint:Y,intervalMs:$=60000,signingSecret:J,redact:G=!0,headers:X={},maxRetries:R=5,persistKey:z}=Z,K=z===null?null:z??F9,F=q9(K),O=!1,V=null,j=null,P=typeof G==="function"?G:G===!1?(N)=>N:x4;async function L(N){let E=JSON.stringify({entries:N}),S={"Content-Type":"application/json",...X};if(J)S["X-Craft-Signature"]=await C4(J,E);let e=0,w=1000;while(!O)try{let m=await fetch(Y,{method:"POST",headers:S,body:E});if(m.ok)return;if(m.status>=400&&m.status<500)return;throw Error(`HTTP ${m.status}`)}catch(m){if(e+=1,e>R)throw F=[...N,...F],H4(K,F),m;await new Promise((y4)=>{setTimeout(y4,w)}),w=Math.min(w*2,60000)}}async function T(){if(O||j)return j??void 0;let N=await s.flush();if(N.length>0)await s.clear();if(F=[...F,...N.map((S)=>P(S))],F.length===0)return;let E=F;return F=[],H4(K,F),j=L(E).catch(()=>{}).finally(()=>{j=null}),j}if($>0)V=setInterval(()=>{T().catch(()=>{})},$);return{async flushNow(){await T()},stop(){if(O=!0,V)clearInterval(V);V=null},pending(){return[...F]}}}var P9={async isAvailable(){if(!Q("iap"))return!1;return await window.craft.iap.isAvailable()},async getProducts(Z){if(!Q("iap"))return[];let Y=Array.isArray(Z)?Z:[String(Z)];return await window.craft.iap.getProducts(Y)},async purchase(Z){if(!Q("iap"))return{queued:!1,productId:Z,reason:"IAP bridge not available"};let Y=await window.craft.iap.purchase(Z);return{queued:!!(Y&&Y.queued),productId:Y?.productId,reason:Y?.reason}},async restorePurchases(){if(!Q("iap"))return{ok:!1};let Z=await window.craft.iap.restorePurchases();return{ok:!!(Z&&Z.ok)}},async finishTransaction(Z){if(!Q("iap"))return;await window.craft.iap.finishTransaction(Z)},async getReceiptData(){if(!Q("iap"))return null;let Z=await window.craft.iap.getReceiptData();return Z?String(Z):null},onPurchased(Z){return U("craft:iap:purchased",Z)},onFailed(Z){return U("craft:iap:failed",Z)},onRestored(Z){return U("craft:iap:restored",Z)},onProductsLoaded(Z){return U("craft:iap:productsLoaded",(Y)=>Z(Y.products||[]))},onRefunded(Z){return U("craft:iap:refunded",Z)},onSubscriptionStatusChanged(Z){return U("craft:iap:subscriptionStatusChanged",Z)},async getActiveSubscriptions(){if(!Q("iap"))return[];let Z=window.craft.iap.getActiveSubscriptions;if(typeof Z!=="function")return[];let Y=await Z();return Array.isArray(Y)?Y:[]},async isEligibleForIntroOffer(Z){if(!Q("iap"))return!1;let Y=window.craft.iap.isEligibleForIntroOffer;if(typeof Y!=="function")return!1;return!!await Y(Z)}};var t={async startActivity(Z,Y){if(!Z)throw Error("handoff.startActivity: type is required");if(!Q("handoff"))return!1;let $=await window.craft.handoff.startActivity(Z,Y);return typeof $==="boolean"?$:!!($&&$.ok)},async updateActivity(Z){if(!Q("handoff"))return!1;let Y=await window.craft.handoff.updateActivity(Z);return typeof Y==="boolean"?Y:!!(Y&&Y.ok)},async stopActivity(){if(!Q("handoff"))return;await window.craft.handoff.stopActivity()},async getCurrentActivity(){if(!Q("handoff"))return null;let Z=await window.craft.handoff.getCurrentActivity();return Z&&typeof Z.type==="string"?Z:null},onIncoming(Z){return U("craft:handoff:incoming",Z)}};var L9={async start(Z,Y){return t.startActivity(Z,{title:Y?.title,webpageURL:Y?.webpageURL,userInfo:Y?.state})},async update(Z){return t.updateActivity({title:Z.title,webpageURL:Z.webpageURL,userInfo:Z.state})},async stop(){await t.stopActivity()}};var W9={async requestPermission(Z="whenInUse"){if(Q("location"))return await window.craft.location.requestPermission(Z);if(typeof navigator<"u"&&navigator.geolocation)return"undetermined";return"not-supported"},async getAuthorization(){if(Q("location"))return await window.craft.location.getAuthorization();return"unknown"},async getCurrentLocation(){if(Q("location"))return await window.craft.location.getCurrentLocation();if(typeof navigator<"u"&&navigator.geolocation)return navigator.geolocation.getCurrentPosition((Z)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:Z.coords.latitude,longitude:Z.coords.longitude,altitude:Z.coords.altitude,horizontalAccuracy:Z.coords.accuracy,verticalAccuracy:Z.coords.altitudeAccuracy,speed:Z.coords.speed}}))},(Z)=>{window.dispatchEvent(new CustomEvent("craft:location:error",{detail:{message:Z.message||String(Z)}}))}),{requested:!0};return{requested:!1}},async startWatching(Z){if(Q("location"))return await window.craft.location.startWatching(Z);if(typeof navigator<"u"&&navigator.geolocation){let Y=navigator.geolocation.watchPosition(($)=>{window.dispatchEvent(new CustomEvent("craft:location:update",{detail:{latitude:$.coords.latitude,longitude:$.coords.longitude,altitude:$.coords.altitude,horizontalAccuracy:$.coords.accuracy,verticalAccuracy:$.coords.altitudeAccuracy,speed:$.coords.speed}}))});return window.__craftWebLocationWatchId=Y,!0}return!1},async stopWatching(){if(Q("location")){await window.craft.location.stopWatching();return}if(typeof navigator<"u"&&navigator.geolocation){let Z=window.__craftWebLocationWatchId;if(Z!=null)navigator.geolocation.clearWatch(Z),window.__craftWebLocationWatchId=null}},onUpdate(Z){return U("craft:location:update",Z)},onError(Z){return U("craft:location:error",Z)},onAuthChanged(Z){return U("craft:location:authChanged",Z)}};var D9={async captureScreen(){if(!Q("screenCapture"))return null;let Z=await window.craft.screenCapture.captureScreen();return Z?String(Z):null},async captureWindow(Z){if(!Q("screenCapture"))return null;if(!Number.isFinite(Z)||Z<=0)throw Error("captureWindow: id must be a positive number");let Y=await window.craft.screenCapture.captureWindow(Z);return Y?String(Y):null},async listWindows(){if(!Q("screenCapture"))return[];return await window.craft.screenCapture.listWindows()}};var S4=250,w4=60000,wZ=2000,I4={sharing:!1,signals:{systemScreenShare:!1,remoteSession:!1,conferenceSharing:!1,screenRecording:!1},sources:[]};function M9(){return{...I4,signals:{...I4.signals},sources:[]}}var FZ={async getState(){if(!Q("screenSharing"))return M9();return await window.craft.screenSharing.getState()},async watch(Z=wZ){let Y=Math.min(w4,Math.max(S4,Math.round(Z)));if(!Q("screenSharing"))return Y;let $=await window.craft.screenSharing.watch(Y);return $&&$.intervalMs||Y},async stop(){if(!Q("screenSharing"))return;await window.craft.screenSharing.unwatch()},onChange(Z){return U("craft:screenSharing:change",Z)}};async function _9(Z,Y=wZ){let $=FZ.onChange(Z);return await FZ.watch(Y),()=>{$(),FZ.stop()}}var T9={supported:!1,isFocused:null,authorization:"unsupported"};function B4(){return{ok:!1,error:"Focus control is only available in a Craft window on macOS"}}var BZ={async getStatus(){if(!Q("focus"))return{...T9};return await window.craft.focus.getStatus()},async requestAuthorization(){if(!Q("focus"))return"unsupported";return await window.craft.focus.requestAuthorization()},async setEnabled(Z,Y={}){if(!Q("focus"))return B4();if(!(Z?Y.onShortcut:Y.offShortcut))return{ok:!1,error:`focus.setEnabled: no ${Z?"onShortcut":"offShortcut"} configured`};return await window.craft.focus.setEnabled(Z,Y)},async runShortcut(Z){if(!Q("focus"))return B4();if(!Z)throw Error("focus.runShortcut: name is required");return await window.craft.focus.runShortcut(Z)},async listShortcuts(){if(!Q("focus"))return[];return await window.craft.focus.listShortcuts()},async listShortcutsResult(){if(!Q("focus"))return{canList:!1,shortcuts:[]};let Y=await window.craft.focus.listShortcutsResult?.();return{canList:Boolean(Y?.canList),shortcuts:Y?.shortcuts??[]}}};async function N9(...Z){if(Z.length===0)return!1;let Y=new Set(await BZ.listShortcuts());return Z.every(($)=>Y.has($))}async function E9(...Z){if(Z.length===0)return!1;let{canList:Y,shortcuts:$}=await BZ.listShortcutsResult();if(!Y)return"unknown";let J=new Set($);return Z.every((G)=>J.has(G))}var A9={async start(Z=0,Y="127.0.0.1"){if(!Q("localServer"))return{port:0,started:!1,reason:"bridge unavailable"};return await window.craft.localServer.start(Z,Y)},async stop(){if(!Q("localServer"))return;await window.craft.localServer.stop()},async respond(Z){if(!Q("localServer"))return;await window.craft.localServer.respond(Z||{status:200,body:"OK"})},onRequest(Z){return U("craft:localServer:request",Z)},async awaitOAuthCallback(Z={}){M("localServer");let{port:Y=0,host:$="127.0.0.1",timeoutMs:J=300000,successHTML:G}=Z,X=await this.start(Y,$);if(!X.started)throw Error(`localServer: start failed${X.reason?` \u2014 ${X.reason}`:""}`);return new Promise((R,z)=>{let K=setTimeout(()=>{F(),this.stop().catch(()=>{}),z(Error("localServer: OAuth callback timed out"))},J),F=this.onRequest(({url:O})=>{clearTimeout(K),F();let V=G??`<!doctype html><meta charset="utf-8"><title>Done</title>
|
|
896
896
|
<style>body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;display:flex;align-items:center;justify-content:center;height:100vh;margin:0;background:#f5f5f7}</style>
|
|
897
897
|
<div><h1>You can close this tab.</h1><p>Returning to the app\u2026</p></div>
|
|
898
|
-
<script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:V,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),R({url:O,port:X.port})})})}};var _9={async isAvailable(){if(!G("biometric"))return!1;return await window.craft.biometric.isAvailable()},async getBiometryType(){if(!G("biometric"))return"none";return await window.craft.biometric.getBiometryType()},async evaluate(Z,Y){if(!Z)throw Error("biometric.evaluate: reason is required");if(!G("biometric"))return{success:!1,errorCode:-1};return await window.craft.biometric.evaluate(Z,Y)}};var k=null,T9={async play(Z,Y){if(G("audio"))return await window.craft.audio.play(Z,Y);if(typeof window>"u"||typeof Audio>"u")return!1;if(k)k.pause(),k=null;if(k=new Audio(Z),Y?.volume!=null)k.volume=Y.volume;if(Y?.loops)k.loop=!0;try{return await k.play(),!0}catch{return!1}},async playSystemSound(Z){if(G("audio"))return await window.craft.audio.playSystemSound(Z);if(typeof window>"u"||typeof Audio>"u")return!1;try{return k=new Audio(`/System/Library/Sounds/${Z}.aiff`),await k.play(),!0}catch{return!1}},async stop(){if(G("audio")){await window.craft.audio.stop();return}if(k)k.pause(),k.currentTime=0,k=null},async isPlaying(){if(G("audio"))return await window.craft.audio.isPlaying();return!!(k&&!k.paused)},async startRecording(Z,Y){if(G("audio"))return await window.craft.audio.startRecording(Z,Y);return!1},async stopRecording(){if(G("audio"))await window.craft.audio.stopRecording()},async isRecording(){if(G("audio"))return await window.craft.audio.isRecording();return!1}};var N9={async execute(Z){if(!Z)throw Error("appleScript.execute: source is required");if(!G("appleScript"))return{ok:!1};return await window.craft.appleScript.execute(Z)}};var E9={async getDefault(Z){if(!Z)throw Error("fileAssociations.getDefault: uti is required");if(!G("fileAssociations"))return null;let Y=await window.craft.fileAssociations.getDefault(Z);return Y?String(Y):null},async setDefault(Z,Y){if(!Z||!Y)throw Error("fileAssociations.setDefault: uti and bundleId are required");if(!G("fileAssociations"))return!1;return await window.craft.fileAssociations.setDefault(Z,Y)}};var A9={async get(Z){if(!Z)throw Error("tags.get: path is required");if(!G("tags"))return[];return await window.craft.tags.get(Z)},async set(Z,Y){if(!Z)throw Error("tags.set: path is required");if(!G("tags"))return!1;let $=Array.isArray(Y)?Y:[String(Y)];return await window.craft.tags.set(Z,$)},async clear(Z){if(!Z)throw Error("tags.clear: path is required");if(!G("tags"))return!1;return await window.craft.tags.clear(Z)}};var k9={async countPages(Z){if(!Z)throw Error("pdf.countPages: path is required");if(!G("pdf"))return 0;return await window.craft.pdf.countPages(Z)},async extractText(Z){if(!Z)throw Error("pdf.extractText: path is required");if(!G("pdf"))return"";return await window.craft.pdf.extractText(Z)}};var H9={async debug(Z){if(G("log"))await window.craft.log.debug(Z);else console.debug(Z)},async info(Z){if(G("log"))await window.craft.log.info(Z);else console.info(Z)},async warn(Z){if(G("log"))await window.craft.log.warn(Z);else console.warn(Z)},async error(Z){if(G("log"))await window.craft.log.error(Z);else console.error(Z)}};var x9={async browse(Z){if(!G("bonjour"))return{started:!1,reason:"bridge unavailable"};return await window.craft.bonjour.browse(Z)},async stop(){if(G("bonjour"))await window.craft.bonjour.stop()},onFound(Z){return U("craft:bonjour:found",Z)},onLost(Z){return U("craft:bonjour:lost",Z)}};var C9={async index(Z){if(!G("spotlight"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.spotlight.index(Z)},async remove(Z){if(!G("spotlight"))return{ok:!1};return await window.craft.spotlight.remove(Z)},async removeAll(){if(!G("spotlight"))return{ok:!1};return await window.craft.spotlight.removeAll()}};var I9={async isAvailable(){if(!G("speechRecognition"))return!1;return await window.craft.speechRecognition.isAvailable()},async start(Z){if(!G("speechRecognition"))return{started:!1,reason:"bridge unavailable"};return await window.craft.speechRecognition.start(Z)},async stop(){if(G("speechRecognition"))await window.craft.speechRecognition.stop()},onPartial(Z){return U("craft:speechRecognition:partial",Z)},onFinal(Z){return U("craft:speechRecognition:final",Z)}};var S9={async recognizeText(Z){if(!Z)throw Error("vision.recognizeText: path is required");if(!G("vision"))return[];return await window.craft.vision.recognizeText(Z)},async detectFaces(Z){if(!Z)throw Error("vision.detectFaces: path is required");if(!G("vision"))return[];return await window.craft.vision.detectFaces(Z)},async detectBarcodes(Z){if(!Z)throw Error("vision.detectBarcodes: path is required");if(!G("vision"))return[];return await window.craft.vision.detectBarcodes(Z)}};var w9={async listSources(){if(!G("midi"))return[];return await window.craft.midi.listSources()},async listDestinations(){if(!G("midi"))return[];return await window.craft.midi.listDestinations()},async send(Z,Y){if(!G("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.send(Z,Y)},async subscribe(Z){if(!G("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.subscribe(Z)},async unsubscribe(Z){if(!G("midi"))return{ok:!1};return await window.craft.midi.unsubscribe(Z)},onMessage(Z){return U("craft:midi:message",Z)}};var B9={async loadModel(Z,Y){if(!Z||!Y)throw Error("coreml.loadModel: id and path are required");if(!G("coreml"))return!1;return await window.craft.coreml.loadModel(Z,Y)},async unloadModel(Z){if(!G("coreml"))return;await window.craft.coreml.unloadModel(Z)},async predict(Z,Y){if(!Z)throw Error("coreml.predict: id is required");if(!G("coreml"))return null;return await window.craft.coreml.predict(Z,Y)}};var f9={async listCameras(){if(!G("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var v9={async register(Z){if(!Z)throw Error("serviceMenu.register: name is required");if(!G("serviceMenu"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serviceMenu.register(Z)},async unregister(Z){if(!Z)throw Error("serviceMenu.unregister: name is required");if(!G("serviceMenu"))return;await window.craft.serviceMenu.unregister(Z)},onInvoked(Z){return U("craft:serviceMenu:invoked",Z)}};var y9={async list(){if(!G("serial"))return[];return await window.craft.serial.list()},async open(Z,Y=9600){if(!Z)throw Error("serial.open: path is required");if(!G("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.open(Z,Y)},async write(Z,Y){if(!Z)throw Error("serial.write: id is required");if(!G("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.write(Z,Y)},async close(Z){if(!G("serial"))return;await window.craft.serial.close(Z)},onData(Z){return U("craft:serial:data",Z)}};var C4=[{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 g9(){return C4.map(({name:Z,support:Y})=>({name:Z,support:Y,available:G(Z)}))}function I4(Z){let Y=C4.find(($)=>$.name===Z);if(!Y)return;return{...Y,available:G(Z)}}function b9(Z){let Y=I4(Z);return!!Y&&Y.available}export{b8 as windowEvents,P9 as watchScreenSharing,S9 as vision,B6 as verifyBundleTrust,g8 as updater,j4 as unregisterHotkey,j8 as unregisterAllHotkeys,iY as triggerTrayAction,Z9 as touchbar,I8 as theme,A9 as tags,d8 as system,w6 as swapBundle,m8 as standardMenus,C9 as spotlight,I9 as speechRecognition,G9 as speech,E4 as signPayload,m4 as showWarningToast,fY as showWarningModal,X6 as showWarningDialog,d as showToast,u4 as showSuccessToast,yY as showSuccessModal,Y6 as showSaveDialog,gZ as showQuestionModal,Z6 as showOpenDialog,h as showModal,r as showMessageBox,b4 as showInfoToast,yZ as showInfoModal,h4 as showErrorToast,vY as showErrorModal,Q6 as showErrorDialog,G6 as showConfirmDialog,$6 as showColorPicker,J6 as showAlertDialog,OZ as showAlert,x8 as shell,O6 as setDesktopConfig,J8 as setAutoLaunch,v9 as serviceMenu,y9 as serial,FZ as screenSharing,q9 as screenCapture,r8 as screen,v6 as runningBundleTeamId,H6 as resolveCraftBinary,q6 as resetDesktopConfig,B4 as requestNotificationPermission,eZ as relaunchBundle,F8 as registerHotkey,N4 as redactPII,DZ as readBundleIdentity,tZ as quitLauncher,uY as prompt,s8 as printing,o8 as permissions,k9 as pdf,K4 as parseShortcut,A6 as packageApp,E6 as pack,M6 as openDevWindow,c4 as notify,M8 as notifications,y8 as network,e8 as nativeWindow,t8 as nativeAutoLaunch,w9 as midi,p8 as menu,H9 as log,V9 as location,M9 as localServer,O9 as liveActivities,n8 as keychain,T6 as isWebviewAvailable,B8 as isDragOutAvailable,b6 as isCaffeinated,b9 as isAvailable,G8 as isAutoLaunchEnabled,j9 as iap,W9 as hasFocusShortcuts,t as handoff,C8 as globalShortcuts,iZ as githubReleaseAssetUrl,aZ as githubLatestAssetUrl,N6 as getWindowBridgeScript,L6 as getWindow,aY as getTrayInstance,tY as getTrayBridgeScript,sY as getSimulatedTrayHTML,O8 as getRegisteredHotkeys,z6 as getDialogBridgeScript,V6 as getDesktopConfig,I4 as getCapability,g9 as getCapabilities,u6 as getCaffeinateStatus,P6 as getActiveWindowIds,oY as getActiveTrayInstances,mY as getActiveModalCount,d4 as getActiveAlertCount,nZ as generateUpdateManifest,T8 as fs,P8 as formatTime,X8 as formatShortcut,m6 as formatRemainingTime,h6 as formatDuration,L8 as formatCompact,D9 as focusShortcutsReady,wZ as focus,E9 as fileAssociations,S6 as extractBundle,w8 as dragOut,l4 as dismissAllAlerts,p4 as dismissAlertById,U8 as delay,f8 as deepLinks,Y4 as decaffeinate,_6 as createWindowWithHTML,D6 as createWindow,HY as createWebView,MY as createTreeView,OY as createTooltip,V8 as createTimer,zY as createTimePicker,o4 as createTextInput,YY as createTabs,DY as createTable,pZ as createSystemTray,PY as createStepper,qY as createSplitView,i4 as createSlider,y6 as createSelfUpdater,VY as createScrollView,JY as createRating,GY as createRadioButton,s4 as createProgressBar,i6 as createPreferences,LY as createModalComponent,nY as createMenubar,EY as createMediaPlayer,WY as createListView,KY as createLabel,q8 as createInterval,FY as createImageView,sZ as createGitHubUpdater,f6 as createGitHubUpdateManifest,kY as createFileExplorer,$Y as createDropdown,XY as createDatePicker,_Y as createDataGrid,QY as createColorPicker,NY as createCodeEditor,jY as createChip,a4 as createCheckbox,TY as createChart,ZY as createCard,n4 as createButton,t4 as createBadge,e4 as createAvatar,RY as createAutocomplete,UY as createAccordion,s as crashReporter,WZ as craftWindowArguments,k6 as craftBinaryNotFoundMessage,B9 as coreml,f9 as continuityCamera,l8 as contextMenu,gY as confirm,W6 as closeAllWindows,hY as closeAllModals,W8 as clipboard,I6 as clearQuarantine,C6 as canReplaceBundle,g6 as caffeinate,QZ as bundlePathForExecutable,x9 as bonjour,J9 as bluetooth,_9 as biometric,v8 as battery,T9 as audio,N9 as appleScript,u8 as appInfo,bY as alert,oZ as UPDATE_MANIFEST_ASSET,eY as TRAY_MENU_STYLES,r4 as TOAST_STYLES,cY as MODAL_STYLES,k4 as MIN_WATCH_INTERVAL_MS,H4 as MAX_WATCH_INTERVAL_MS,SZ as DEFAULT_WATCH_INTERVAL_MS,CY as COMPONENT_STYLES,rZ as AutoUpdater,xY as AVAILABLE_COMPONENTS};
|
|
898
|
+
<script>setTimeout(()=>window.close(),1500)</script>`;this.respond({status:200,body:V,contentType:"text/html; charset=utf-8"}).catch(()=>{}).finally(()=>this.stop().catch(()=>{})),R({url:O,port:X.port})})})}};var k9={async isAvailable(){if(!Q("biometric"))return!1;return await window.craft.biometric.isAvailable()},async getBiometryType(){if(!Q("biometric"))return"none";return await window.craft.biometric.getBiometryType()},async evaluate(Z,Y){if(!Z)throw Error("biometric.evaluate: reason is required");if(!Q("biometric"))return{success:!1,errorCode:-1};return await window.craft.biometric.evaluate(Z,Y)}};var k=null,H9={async play(Z,Y){if(Q("audio"))return await window.craft.audio.play(Z,Y);if(typeof window>"u"||typeof Audio>"u")return!1;if(k)k.pause(),k=null;if(k=new Audio(Z),Y?.volume!=null)k.volume=Y.volume;if(Y?.loops)k.loop=!0;try{return await k.play(),!0}catch{return!1}},async playSystemSound(Z){if(Q("audio"))return await window.craft.audio.playSystemSound(Z);if(typeof window>"u"||typeof Audio>"u")return!1;try{return k=new Audio(`/System/Library/Sounds/${Z}.aiff`),await k.play(),!0}catch{return!1}},async stop(){if(Q("audio")){await window.craft.audio.stop();return}if(k)k.pause(),k.currentTime=0,k=null},async isPlaying(){if(Q("audio"))return await window.craft.audio.isPlaying();return!!(k&&!k.paused)},async startRecording(Z,Y){if(Q("audio"))return await window.craft.audio.startRecording(Z,Y);return!1},async stopRecording(){if(Q("audio"))await window.craft.audio.stopRecording()},async isRecording(){if(Q("audio"))return await window.craft.audio.isRecording();return!1}};var x9={async execute(Z){if(!Z)throw Error("appleScript.execute: source is required");if(!Q("appleScript"))return{ok:!1};return await window.craft.appleScript.execute(Z)}};var C9={async getDefault(Z){if(!Z)throw Error("fileAssociations.getDefault: uti is required");if(!Q("fileAssociations"))return null;let Y=await window.craft.fileAssociations.getDefault(Z);return Y?String(Y):null},async setDefault(Z,Y){if(!Z||!Y)throw Error("fileAssociations.setDefault: uti and bundleId are required");if(!Q("fileAssociations"))return!1;return await window.craft.fileAssociations.setDefault(Z,Y)}};var I9={async get(Z){if(!Z)throw Error("tags.get: path is required");if(!Q("tags"))return[];return await window.craft.tags.get(Z)},async set(Z,Y){if(!Z)throw Error("tags.set: path is required");if(!Q("tags"))return!1;let $=Array.isArray(Y)?Y:[String(Y)];return await window.craft.tags.set(Z,$)},async clear(Z){if(!Z)throw Error("tags.clear: path is required");if(!Q("tags"))return!1;return await window.craft.tags.clear(Z)}};var S9={async countPages(Z){if(!Z)throw Error("pdf.countPages: path is required");if(!Q("pdf"))return 0;return await window.craft.pdf.countPages(Z)},async extractText(Z){if(!Z)throw Error("pdf.extractText: path is required");if(!Q("pdf"))return"";return await window.craft.pdf.extractText(Z)}};var w9={async debug(Z){if(Q("log"))await window.craft.log.debug(Z);else console.debug(Z)},async info(Z){if(Q("log"))await window.craft.log.info(Z);else console.info(Z)},async warn(Z){if(Q("log"))await window.craft.log.warn(Z);else console.warn(Z)},async error(Z){if(Q("log"))await window.craft.log.error(Z);else console.error(Z)}};var B9={async browse(Z){if(!Q("bonjour"))return{started:!1,reason:"bridge unavailable"};return await window.craft.bonjour.browse(Z)},async stop(){if(Q("bonjour"))await window.craft.bonjour.stop()},onFound(Z){return U("craft:bonjour:found",Z)},onLost(Z){return U("craft:bonjour:lost",Z)}};var f9={async index(Z){if(!Q("spotlight"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.spotlight.index(Z)},async remove(Z){if(!Q("spotlight"))return{ok:!1};return await window.craft.spotlight.remove(Z)},async removeAll(){if(!Q("spotlight"))return{ok:!1};return await window.craft.spotlight.removeAll()}};var v9={async isAvailable(){if(!Q("speechRecognition"))return!1;return await window.craft.speechRecognition.isAvailable()},async start(Z){if(!Q("speechRecognition"))return{started:!1,reason:"bridge unavailable"};return await window.craft.speechRecognition.start(Z)},async stop(){if(Q("speechRecognition"))await window.craft.speechRecognition.stop()},onPartial(Z){return U("craft:speechRecognition:partial",Z)},onFinal(Z){return U("craft:speechRecognition:final",Z)}};var y9={async recognizeText(Z){if(!Z)throw Error("vision.recognizeText: path is required");if(!Q("vision"))return[];return await window.craft.vision.recognizeText(Z)},async detectFaces(Z){if(!Z)throw Error("vision.detectFaces: path is required");if(!Q("vision"))return[];return await window.craft.vision.detectFaces(Z)},async detectBarcodes(Z){if(!Z)throw Error("vision.detectBarcodes: path is required");if(!Q("vision"))return[];return await window.craft.vision.detectBarcodes(Z)}};var g9={async listSources(){if(!Q("midi"))return[];return await window.craft.midi.listSources()},async listDestinations(){if(!Q("midi"))return[];return await window.craft.midi.listDestinations()},async send(Z,Y){if(!Q("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.send(Z,Y)},async subscribe(Z){if(!Q("midi"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.midi.subscribe(Z)},async unsubscribe(Z){if(!Q("midi"))return{ok:!1};return await window.craft.midi.unsubscribe(Z)},onMessage(Z){return U("craft:midi:message",Z)}};var b9={async loadModel(Z,Y){if(!Z||!Y)throw Error("coreml.loadModel: id and path are required");if(!Q("coreml"))return!1;return await window.craft.coreml.loadModel(Z,Y)},async unloadModel(Z){if(!Q("coreml"))return;await window.craft.coreml.unloadModel(Z)},async predict(Z,Y){if(!Z)throw Error("coreml.predict: id is required");if(!Q("coreml"))return null;return await window.craft.coreml.predict(Z,Y)}};var u9={async listCameras(){if(!Q("continuityCamera"))return[];return await window.craft.continuityCamera.listCameras()}};var m9={async register(Z){if(!Z)throw Error("serviceMenu.register: name is required");if(!Q("serviceMenu"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serviceMenu.register(Z)},async unregister(Z){if(!Z)throw Error("serviceMenu.unregister: name is required");if(!Q("serviceMenu"))return;await window.craft.serviceMenu.unregister(Z)},onInvoked(Z){return U("craft:serviceMenu:invoked",Z)}};var h9={async list(){if(!Q("serial"))return[];return await window.craft.serial.list()},async open(Z,Y=9600){if(!Z)throw Error("serial.open: path is required");if(!Q("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.open(Z,Y)},async write(Z,Y){if(!Z)throw Error("serial.write: id is required");if(!Q("serial"))return{ok:!1,reason:"bridge unavailable"};return await window.craft.serial.write(Z,Y)},async close(Z){if(!Q("serial"))return;await window.craft.serial.close(Z)},onData(Z){return U("craft:serial:data",Z)}};var f4=[{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 c9(){return f4.map(({name:Z,support:Y})=>({name:Z,support:Y,available:Q(Z)}))}function v4(Z){let Y=f4.find(($)=>$.name===Z);if(!Y)return;return{...Y,available:Q(Z)}}function p9(Z){let Y=v4(Z);return!!Y&&Y.available}export{p8 as windowEvents,_9 as watchScreenSharing,y9 as vision,b6 as verifyBundleTrust,c8 as updater,O4 as unregisterHotkey,P8 as unregisterAllHotkeys,Y6 as triggerTrayAction,Q9 as touchbar,v8 as theme,I9 as tags,i8 as system,g6 as swapBundle,d8 as standardMenus,f9 as spotlight,v9 as speechRecognition,K9 as speech,C4 as signPayload,E4 as sidebar,d4 as showWarningToast,uY as showWarningModal,j6 as showWarningDialog,d as showToast,l4 as showSuccessToast,hY as showSuccessModal,X6 as showSaveDialog,bZ as showQuestionModal,Q6 as showOpenDialog,h as showModal,r as showMessageBox,p4 as showInfoToast,gZ as showInfoModal,r4 as showErrorToast,mY as showErrorModal,F6 as showErrorDialog,K6 as showConfirmDialog,z6 as showColorPicker,R6 as showAlertDialog,OZ as showAlert,B8 as shell,L6 as setDesktopConfig,R8 as setAutoLaunch,m9 as serviceMenu,h9 as serial,FZ as screenSharing,D9 as screenCapture,s8 as screen,m6 as runningBundleTeamId,w6 as resolveCraftBinary,D6 as resetDesktopConfig,b4 as requestNotificationPermission,Z4 as relaunchBundle,U8 as registerHotkey,x4 as redactPII,DZ as readBundleIdentity,eZ as quitLauncher,lY as prompt,$9 as printing,e8 as permissions,S9 as pdf,F4 as parseShortcut,I6 as packageApp,C6 as pack,A6 as openDevWindow,n4 as notify,A8 as notifications,h8 as network,G9 as nativeWindow,J9 as nativeAutoLaunch,g9 as midi,o8 as menu,w9 as log,W9 as location,A9 as localServer,L9 as liveActivities,t8 as keychain,H6 as isWebviewAvailable,b8 as isDragOutAvailable,p6 as isCaffeinated,p9 as isAvailable,K8 as isAutoLaunchEnabled,P9 as iap,N9 as hasFocusShortcuts,t as handoff,f8 as globalShortcuts,sZ as githubReleaseAssetUrl,iZ as githubLatestAssetUrl,x6 as getWindowBridgeScript,T6 as getWindow,Z6 as getTrayInstance,J6 as getTrayBridgeScript,$6 as getSimulatedTrayHTML,L8 as getRegisteredHotkeys,O6 as getDialogBridgeScript,W6 as getDesktopConfig,v4 as getCapability,c9 as getCapabilities,l6 as getCaffeinateStatus,_6 as getActiveWindowIds,eY as getActiveTrayInstances,dY as getActiveModalCount,i4 as getActiveAlertCount,oZ as generateUpdateManifest,H8 as fs,_8 as formatTime,j8 as formatShortcut,d6 as formatRemainingTime,r6 as formatDuration,T8 as formatCompact,E9 as focusShortcutsReady,BZ as focus,C9 as fileAssociations,y6 as extractBundle,g8 as dragOut,a4 as dismissAllAlerts,o4 as dismissAlertById,M8 as delay,u8 as deepLinks,$4 as decaffeinate,k6 as createWindowWithHTML,E6 as createWindow,wY as createWebView,AY as createTreeView,LY as createTooltip,W8 as createTimer,OY as createTimePicker,e4 as createTextInput,XY as createTabs,EY as createTable,lZ as createSystemTray,_Y as createStepper,DY as createSplitView,YY as createSlider,h6 as createSelfUpdater,WY as createScrollView,RY as createRating,KY as createRadioButton,$Y as createProgressBar,Y8 as createPreferences,TY as createModalComponent,tY as createMenubar,CY as createMediaPlayer,NY as createListView,qY as createLabel,D8 as createInterval,UY as createImageView,tZ as createGitHubUpdater,u6 as createGitHubUpdateManifest,SY as createFileExplorer,zY as createDropdown,jY as createDatePicker,kY as createDataGrid,FY as createColorPicker,xY as createCodeEditor,PY as createChip,ZY as createCheckbox,HY as createChart,QY as createCard,t4 as createButton,JY as createBadge,GY as createAvatar,VY as createAutocomplete,MY as createAccordion,s as crashReporter,WZ as craftWindowArguments,S6 as craftBinaryNotFoundMessage,b9 as coreml,u9 as continuityCamera,a8 as contextMenu,cY as confirm,N6 as closeAllWindows,rY as closeAllModals,N8 as clipboard,v6 as clearQuarantine,f6 as canReplaceBundle,c6 as caffeinate,QZ as bundlePathForExecutable,B9 as bonjour,R9 as bluetooth,k9 as biometric,m8 as battery,H9 as audio,x9 as appleScript,l8 as appInfo,pY as alert,aZ as UPDATE_MANIFEST_ASSET,G6 as TRAY_MENU_STYLES,s4 as TOAST_STYLES,nY as MODAL_STYLES,S4 as MIN_WATCH_INTERVAL_MS,w4 as MAX_WATCH_INTERVAL_MS,wZ as DEFAULT_WATCH_INTERVAL_MS,fY as COMPONENT_STYLES,nZ as AutoUpdater,BY as AVAILABLE_COMPONENTS};
|