@stacksjs/desktop 0.2.413 → 0.2.415
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +1 -1
- package/dist/chunk-aa3mwv0w.js +347 -0
- package/dist/index.js +76 -76
- package/dist/test-utils.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-er7zj094.js +0 -347
- package/dist/chunk-gzgq8v6d.js +0 -3
package/dist/index.js
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
<label class="${
|
|
4
|
-
<input ${
|
|
2
|
+
import{v,s,r,P,S,k,A,C,I,T,E,M,t,d,D,B,O,u,L,R,_,N,F,z,W,H,n,U,q,V,j,K,G,Y,p,X,J,Q,Z,f,ee,te,m,re,ne,oe,ie,ae,se,ce,e,le,de,ue,pe,fe,me,ge,he,we,be,xe,ye,ve,Pe,Se,ke,Ae,g,Ce,Ie,$e,Te,Ee,Me,De,Be,Oe,o,h,w,Le,i,Re,_e,Ne,b,x,c,a,Fe,l,ze,We,He,Ue,qe,Ve,je,Ke,Ge,Ye,Xe,Je,Qe,Ze,et,tt,rt,nt,ot,it,y,at}from"./chunk-aa3mwv0w.js";var Qt=import.meta.require;function St(st="stx"){return`${st}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function wt(st){return st.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Pt(...st){return st.filter(Boolean).join(" ")}function kt(st){if(!st)return"";return Object.entries(st).map(([lt,dt])=>`${lt.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${dt}`).join("; ")}function Po(st){let{text:lt,variant:dt="primary",size:ct="medium",disabled:pt=!1,loading:ut=!1,icon:gt,iconPosition:xt="left",id:ft=St("btn"),className:ht,style:bt}=st,yt=Pt("stx-button",`stx-button--${dt}`,`stx-button--${ct}`,pt&&"stx-button--disabled",ut&&"stx-button--loading",ht),mt=kt(bt),vt=gt?`<span class="stx-button-icon">${gt}</span>`:"",$t=ut?'<span class="stx-button-spinner"></span>':"",Tt=xt==="left"?`${vt}${$t}<span class="stx-button-text">${wt(lt)}</span>`:`<span class="stx-button-text">${wt(lt)}</span>${vt}${$t}`;return`<button id="${ft}" class="${yt}" ${pt||ut?"disabled":""} ${mt?`style='${mt}'`:""}>${Tt}</button>`}function So(st){let{value:lt="",placeholder:dt="",type:ct="text",disabled:pt=!1,readonly:ut=!1,maxLength:gt,minLength:xt,pattern:ft,required:ht=!1,autocomplete:bt,label:yt,error:mt,hint:vt,id:$t=St("input"),className:Tt,style:Ct}=st,At=Pt("stx-input",mt&&"stx-input--error",pt&&"stx-input--disabled",Tt),Rt=kt(Ct),ko=[`type="${ct}"`,`id="${$t}"`,`class="${At}"`,lt&&`value="${wt(lt)}"`,dt&&`placeholder="${wt(dt)}"`,pt&&"disabled",ut&&"readonly",ht&&"required",gt&&`maxlength="${gt}"`,xt&&`minlength="${xt}"`,ft&&`pattern="${wt(ft)}"`,bt&&`autocomplete="${bt}"`,Rt&&`style="${Rt}"`].filter(Boolean).join(" "),Bt="";if(yt)Bt+=`<label class="stx-input-label" for="${$t}">${wt(yt)}</label>`;if(Bt+=`<input ${ko} />`,mt)Bt+=`<div class="stx-input-error">${wt(mt)}</div>`;else if(vt)Bt+=`<div class="stx-input-hint">${wt(vt)}</div>`;return`<div class="stx-input-wrapper">${Bt}</div>`}function To(st){let{checked:lt=!1,label:dt,disabled:ct=!1,indeterminate:pt=!1,id:ut=St("checkbox"),className:gt,style:xt}=st,ft=Pt("stx-checkbox",ct&&"stx-checkbox--disabled",gt),ht=kt(xt),bt=['type="checkbox"',`id="${ut}"`,lt&&"checked",ct&&"disabled",pt&&'data-indeterminate="true"'].filter(Boolean).join(" ");return`
|
|
3
|
+
<label class="${ft}" ${ht?`style="${ht}"`:""}>
|
|
4
|
+
<input ${bt} />
|
|
5
5
|
<span class="stx-checkbox-box"></span>
|
|
6
|
-
${
|
|
6
|
+
${dt?`<span class="stx-checkbox-label">${wt(dt)}</span>`:""}
|
|
7
7
|
</label>
|
|
8
|
-
`}function
|
|
9
|
-
<div id="${
|
|
10
|
-
<div class="stx-progress-bar" style="width: ${
|
|
11
|
-
${
|
|
8
|
+
`}function Co(st){let{value:lt=50,min:dt=0,max:ct=100,step:pt=1,disabled:ut=!1,label:gt,showValue:xt=!0,id:ft=St("slider"),className:ht,style:bt}=st,yt=Pt("stx-slider",ut&&"stx-slider--disabled",ht),mt=kt(bt),vt=['type="range"',`id="${ft}"`,`value="${lt}"`,`min="${dt}"`,`max="${ct}"`,`step="${pt}"`,ut&&"disabled"].filter(Boolean).join(" "),$t="";if(gt)$t+=`<label class="stx-slider-label" for="${ft}">${wt(gt)}</label>`;if($t+=`<div class="stx-slider-track"><input ${vt} /></div>`,xt)$t+=`<span class="stx-slider-value">${lt}</span>`;return`<div class="${yt}" ${mt?`style='${mt}'`:""}>${$t}</div>`}function Ao(st){let{value:lt,max:dt=100,variant:ct="default",size:pt="medium",showLabel:ut=!1,indeterminate:gt=!1,id:xt=St("progress"),className:ft,style:ht}=st,bt=Math.min(100,Math.max(0,lt/dt*100)),yt=Pt("stx-progress",`stx-progress--${ct}`,`stx-progress--${pt}`,gt&&"stx-progress--indeterminate",ft),mt=kt(ht);return`
|
|
9
|
+
<div id="${xt}" class="${yt}" role="progressbar" aria-valuenow="${lt}" aria-valuemin="0" aria-valuemax="${dt}" ${mt?`style="${mt}"`:""}>
|
|
10
|
+
<div class="stx-progress-bar" style="width: ${gt?"100%":`${bt}%`}"></div>
|
|
11
|
+
${ut?`<span class="stx-progress-label">${Math.round(bt)}%</span>`:""}
|
|
12
12
|
</div>
|
|
13
|
-
`}function
|
|
14
|
-
<img src="${
|
|
15
|
-
</div>`;return`<div id="${
|
|
16
|
-
<span class="stx-avatar-initials">${
|
|
17
|
-
</div>`}function
|
|
18
|
-
<label class="${
|
|
19
|
-
<input ${
|
|
13
|
+
`}function Io(st){let{text:lt,variant:dt="default",size:ct="medium",id:pt=St("badge"),className:ut,style:gt}=st,xt=Pt("stx-badge",`stx-badge--${dt}`,`stx-badge--${ct}`,ut),ft=kt(gt);return`<span id="${pt}" class="${xt}" ${ft?`style='${ft}'`:""}>${wt(lt)}</span>`}function Mo(st){let{src:lt,alt:dt="",name:ct,size:pt="medium",shape:ut="circle",id:gt=St("avatar"),className:xt,style:ft}=st,ht=typeof pt==="number"?"":`stx-avatar--${pt}`,bt=typeof pt==="number"?`width: ${pt}px; height: ${pt}px;`:"",yt=Pt("stx-avatar",ht,`stx-avatar--${ut}`,xt),mt=[bt,kt(ft)].filter(Boolean).join(" "),vt=ct?ct.split(" ").map(($t)=>$t[0]).join("").toUpperCase().slice(0,2):"";if(lt)return`<div id="${gt}" class="${yt}" ${mt?`style="${mt}"`:""}>
|
|
14
|
+
<img src="${wt(lt)}" alt="${wt(dt)}" class="stx-avatar-img" />
|
|
15
|
+
</div>`;return`<div id="${gt}" class="${yt}" ${mt?`style="${mt}"`:""}>
|
|
16
|
+
<span class="stx-avatar-initials">${vt}</span>
|
|
17
|
+
</div>`}function Oo(st){let{title:lt,subtitle:dt,content:ct,image:pt,footer:ut,variant:gt="default",id:xt=St("card"),className:ft,style:ht}=st,bt=Pt("stx-card",`stx-card--${gt}`,ft),yt=kt(ht),mt="";if(pt)mt+=`<div class="stx-card-image"><img src="${wt(pt)}" alt="" /></div>`;if(mt+='<div class="stx-card-body">',lt)mt+=`<h3 class="stx-card-title">${wt(lt)}</h3>`;if(dt)mt+=`<p class="stx-card-subtitle">${wt(dt)}</p>`;if(ct)mt+=`<div class="stx-card-content">${wt(ct)}</div>`;if(mt+="</div>",ut)mt+=`<div class="stx-card-footer">${wt(ut)}</div>`;return`<div id="${xt}" class="${bt}" ${yt?`style='${yt}'`:""}>${mt}</div>`}function Do(st){let{tabs:lt,activeTab:dt,variant:ct="default",id:pt=St("tabs"),className:ut,style:gt}=st,xt=Pt("stx-tabs",`stx-tabs--${ct}`,ut),ft=kt(gt),ht=lt.map((bt,yt)=>{let mt=dt?bt.value===dt:yt===0;return`<button class="${Pt("stx-tab",mt&&"stx-tab--active",bt.disabled&&"stx-tab--disabled")}" data-value="${wt(bt.value)}" ${bt.disabled?"disabled":""} role="tab" aria-selected="${mt}">${wt(bt.label)}</button>`}).join("");return`<div id="${pt}" class="${xt}" role="tablist" ${ft?`style='${ft}'`:""}>${ht}</div>`}function Eo(st){let{options:lt,value:dt,placeholder:ct="Select...",disabled:pt=!1,id:ut=St("dropdown"),className:gt,style:xt}=st,ft=Pt("stx-dropdown",pt&&"stx-dropdown--disabled",gt),ht=kt(xt),bt=lt.map((mt)=>{let vt=mt.value===dt?"selected":"",$t=mt.disabled?"disabled":"";return`<option value="${wt(mt.value)}" ${vt} ${$t}>${wt(mt.label)}</option>`}).join(""),yt=dt?"":`<option value="" disabled selected>${wt(ct)}</option>`;return`<select id="${ut}" class="${ft}" ${pt?"disabled":""} ${ht?`style='${ht}'`:""}>${yt}${bt}</select>`}function No(st){let{value:lt=0,max:dt=5,readonly:ct=!1,size:pt="medium",allowHalf:ut=!1,id:gt=St("rating"),className:xt,style:ft}=st,ht=Pt("stx-rating",`stx-rating--${pt}`,ct&&"stx-rating--readonly",xt),bt=kt(ft),yt="";for(let mt=1;mt<=dt;mt++){let vt=mt<=lt,$t=ut&&mt-0.5===lt;yt+=`<span class="stx-star ${vt?"stx-star--filled":$t?"stx-star--half":""}" data-value="${mt}">\u2605</span>`}return`<div id="${gt}" class="${ht}" role="slider" aria-valuenow="${lt}" aria-valuemin="0" aria-valuemax="${dt}" ${bt?`style='${bt}'`:""}>${yt}</div>`}function zo(st){let{value:lt,name:dt,checked:ct=!1,label:pt,disabled:ut=!1,id:gt=St("radio"),className:xt,style:ft}=st,ht=Pt("stx-radio",ut&&"stx-radio--disabled",xt),bt=kt(ft),yt=['type="radio"',`id="${gt}"`,`name="${wt(dt)}"`,`value="${wt(lt)}"`,ct&&"checked",ut&&"disabled"].filter(Boolean).join(" ");return`
|
|
18
|
+
<label class="${ht}" ${bt?`style="${bt}"`:""}>
|
|
19
|
+
<input ${yt} />
|
|
20
20
|
<span class="stx-radio-circle"></span>
|
|
21
|
-
${
|
|
21
|
+
${pt?`<span class="stx-radio-label">${wt(pt)}</span>`:""}
|
|
22
22
|
</label>
|
|
23
|
-
`}function
|
|
24
|
-
<input type="color" id="${
|
|
25
|
-
<span class="stx-color-picker-value">${
|
|
26
|
-
</div
|
|
27
|
-
<input ${
|
|
28
|
-
${
|
|
29
|
-
</div>`,`<div class="${
|
|
30
|
-
<input type="text" id="${
|
|
31
|
-
${
|
|
32
|
-
</div
|
|
33
|
-
${
|
|
34
|
-
<span class="stx-tooltip stx-tooltip--${
|
|
35
|
-
</div>`}function
|
|
36
|
-
<div class="stx-split-pane" style="${
|
|
37
|
-
${
|
|
38
|
-
<div class="stx-split-pane" style="${
|
|
39
|
-
</div>`}function
|
|
40
|
-
<button class="stx-accordion-header" ${
|
|
41
|
-
<span class="stx-accordion-title">${
|
|
23
|
+
`}function Bo(st){let{value:lt="#3498db",disabled:dt=!1,label:ct,presetColors:pt=["#e74c3c","#f39c12","#27ae60","#3498db","#9b59b6","#1abc9c","#34495e","#000000"],id:ut=St("color"),className:gt,style:xt}=st,ft=Pt("stx-color-picker",dt&&"stx-color-picker--disabled",gt),ht=kt(xt),bt="";if(ct)bt+=`<label class="stx-color-picker-label" for="${ut}">${wt(ct)}</label>`;if(bt+=`<div class="stx-color-picker-input">
|
|
24
|
+
<input type="color" id="${ut}" value="${wt(lt)}" ${dt?"disabled":""} />
|
|
25
|
+
<span class="stx-color-picker-value">${wt(lt)}</span>
|
|
26
|
+
</div>`,pt.length>0){bt+='<div class="stx-color-picker-presets">';for(let yt of pt)bt+=`<button class="stx-color-preset" style="background: ${wt(yt)}" data-color="${wt(yt)}" ${dt?"disabled":""}></button>`;bt+="</div>"}return`<div class="${ft}" ${ht?`style='${ht}'`:""}>${bt}</div>`}function _o(st){let{value:lt,min:dt,max:ct,disabled:pt=!1,label:ut,placeholder:gt="Select date",showClear:xt=!0,id:ft=St("date"),className:ht,style:bt}=st,yt=Pt("stx-date-picker",pt&&"stx-date-picker--disabled",ht),mt=kt(bt),vt=lt instanceof Date?lt.toISOString().split("T")[0]:lt||"",$t=dt instanceof Date?dt.toISOString().split("T")[0]:dt,Tt=ct instanceof Date?ct.toISOString().split("T")[0]:ct,Ct=['type="date"',`id="${ft}"`,vt&&`value="${vt}"`,$t&&`min="${$t}"`,Tt&&`max="${Tt}"`,pt&&"disabled",`placeholder="${wt(gt)}"`].filter(Boolean).join(" "),At="";if(ut)At+=`<label class="stx-date-picker-label" for="${ft}">${wt(ut)}</label>`;return At+=`<div class="stx-date-picker-input">
|
|
27
|
+
<input ${Ct} />
|
|
28
|
+
${xt&&vt?'<button class="stx-date-picker-clear" type="button">×</button>':""}
|
|
29
|
+
</div>`,`<div class="${yt}" ${mt?`style='${mt}'`:""}>${At}</div>`}function Lo(st){let{value:lt="",disabled:dt=!1,label:ct,step:pt=60,min:ut,max:gt,id:xt=St("time"),className:ft,style:ht}=st,bt=Pt("stx-time-picker",dt&&"stx-time-picker--disabled",ft),yt=kt(ht),mt=['type="time"',`id="${xt}"`,lt&&`value="${wt(lt)}"`,`step="${pt}"`,ut&&`min="${wt(ut)}"`,gt&&`max="${wt(gt)}"`,dt&&"disabled"].filter(Boolean).join(" "),vt="";if(ct)vt+=`<label class="stx-time-picker-label" for="${xt}">${wt(ct)}</label>`;return vt+=`<input ${mt} class="stx-time-picker-input" />`,`<div class="${bt}" ${yt?`style='${yt}'`:""}>${vt}</div>`}function Ro(st){let{options:lt,value:dt="",placeholder:ct="Search...",disabled:pt=!1,label:ut,loading:gt=!1,id:xt=St("autocomplete"),className:ft,style:ht}=st,bt=Pt("stx-autocomplete",pt&&"stx-autocomplete--disabled",ft),yt=kt(ht),mt=lt.find((Tt)=>Tt.value===dt),vt=mt?mt.label:dt,$t="";if(ut)$t+=`<label class="stx-autocomplete-label" for="${xt}">${wt(ut)}</label>`;$t+=`<div class="stx-autocomplete-input-wrapper">
|
|
30
|
+
<input type="text" id="${xt}" value="${wt(vt)}" placeholder="${wt(ct)}" ${pt?"disabled":""} autocomplete="off" class="stx-autocomplete-input" />
|
|
31
|
+
${gt?'<span class="stx-autocomplete-spinner"></span>':""}
|
|
32
|
+
</div>`,$t+='<ul class="stx-autocomplete-list">';for(let Tt of lt)$t+=`<li class="stx-autocomplete-item ${Tt.value===dt?"stx-autocomplete-item--selected":""}" data-value="${wt(Tt.value)}">${wt(Tt.label)}</li>`;return $t+="</ul>",`<div class="${bt}" ${yt?`style='${yt}'`:""}>${$t}</div>`}function Wo(st){let{text:lt,htmlFor:dt,required:ct=!1,size:pt="medium",id:ut=St("label"),className:gt,style:xt}=st,ft=Pt("stx-label",`stx-label--${pt}`,gt),ht=kt(xt);return`<label id="${ut}" class="${ft}" ${dt?`for='${wt(dt)}'`:""} ${ht?`style='${ht}'`:""}>${wt(lt)}${ct?'<span class="stx-label-required">*</span>':""}</label>`}function Vo(st){let{src:lt,alt:dt="",width:ct,height:pt,objectFit:ut="cover",fallback:gt,loading:xt="lazy",id:ft=St("image"),className:ht,style:bt}=st,yt=Pt("stx-image",ht),mt={objectFit:ut};if(ct)mt.width=typeof ct==="number"?`${ct}px`:ct;if(pt)mt.height=typeof pt==="number"?`${pt}px`:pt;let vt=[kt(mt),kt(bt)].filter(Boolean).join("; "),$t=gt?`onerror="this.src='${wt(gt)}'"`:"";return`<img id="${ft}" class="${yt}" src="${wt(lt)}" alt="${wt(dt)}" loading="${xt}" ${vt?`style='${vt}'`:""} ${$t} />`}function Ho(st){let{text:lt,variant:dt="default",size:ct="medium",removable:pt=!1,icon:ut,id:gt=St("chip"),className:xt,style:ft}=st,ht=Pt("stx-chip",`stx-chip--${dt}`,`stx-chip--${ct}`,xt),bt=kt(ft),yt="";if(ut)yt+=`<span class="stx-chip-icon">${ut}</span>`;if(yt+=`<span class="stx-chip-text">${wt(lt)}</span>`,pt)yt+='<button class="stx-chip-remove" type="button">×</button>';return`<span id="${gt}" class="${ht}" ${bt?`style='${bt}'`:""}>${yt}</span>`}function Fo(st){let{text:lt,position:dt="top",delay:ct=200,children:pt,id:ut=St("tooltip"),className:gt,style:xt}=st,ft=Pt("stx-tooltip-wrapper",gt),ht=kt(xt);return`<div id="${ut}" class="${ft}" ${ht?`style="${ht}"`:""} data-tooltip="${wt(lt)}" data-position="${dt}" data-delay="${ct}">
|
|
33
|
+
${pt}
|
|
34
|
+
<span class="stx-tooltip stx-tooltip--${dt}">${wt(lt)}</span>
|
|
35
|
+
</div>`}function Uo(st){let{direction:lt="vertical",showScrollbar:dt=!0,smooth:ct=!0,height:pt,width:ut,children:gt,id:xt=St("scroll"),className:ft,style:ht}=st,bt=Pt("stx-scroll-view",`stx-scroll-view--${lt}`,!dt&&"stx-scroll-view--hide-scrollbar",ct&&"stx-scroll-view--smooth",ft),yt={};if(pt)yt.height=typeof pt==="number"?`${pt}px`:pt;if(ut)yt.width=typeof ut==="number"?`${ut}px`:ut;let mt=[kt(yt),kt(ht)].filter(Boolean).join("; ");return`<div id="${xt}" class="${bt}" ${mt?`style='${mt}'`:""}>${gt}</div>`}function jo(st){let{direction:lt="horizontal",sizes:dt=[50,50],resizable:ct=!0,children:pt,id:ut=St("split"),className:gt,style:xt}=st,ft=Pt("stx-split-view",`stx-split-view--${lt}`,ct&&"stx-split-view--resizable",gt),ht=kt(xt),bt=lt==="horizontal"?"width":"height";return`<div id="${ut}" class="${ft}" ${ht?`style="${ht}"`:""}>
|
|
36
|
+
<div class="stx-split-pane" style="${bt}: ${dt[0]}%">${pt[0]}</div>
|
|
37
|
+
${ct?'<div class="stx-split-divider"></div>':""}
|
|
38
|
+
<div class="stx-split-pane" style="${bt}: ${dt[1]}%">${pt[1]}</div>
|
|
39
|
+
</div>`}function qo(st){let{items:lt,multiple:dt=!1,defaultOpen:ct=[],id:pt=St("accordion"),className:ut,style:gt}=st,xt=Pt("stx-accordion",ut),ft=kt(gt),ht="";return lt.forEach((bt,yt)=>{let mt=ct.includes(yt),vt=Pt("stx-accordion-item",mt&&"stx-accordion-item--open",bt.disabled&&"stx-accordion-item--disabled");ht+=`<div class="${vt}" data-index="${yt}">
|
|
40
|
+
<button class="stx-accordion-header" ${bt.disabled?"disabled":""} aria-expanded="${mt}" data-multiple="${dt}">
|
|
41
|
+
<span class="stx-accordion-title">${wt(bt.title)}</span>
|
|
42
42
|
<span class="stx-accordion-icon">\u25BC</span>
|
|
43
43
|
</button>
|
|
44
|
-
<div class="stx-accordion-content" ${
|
|
45
|
-
${
|
|
44
|
+
<div class="stx-accordion-content" ${mt?"":"hidden"}>
|
|
45
|
+
${wt(bt.content)}
|
|
46
46
|
</div>
|
|
47
|
-
</div>`}),`<div id="${
|
|
47
|
+
</div>`}),`<div id="${pt}" class="${xt}" ${ft?`style='${ft}'`:""}>${ht}</div>`}function Go(st){let{steps:lt,currentStep:dt,orientation:ct="horizontal",id:pt=St("stepper"),className:ut,style:gt}=st,xt=Pt("stx-stepper",`stx-stepper--${ct}`,ut),ft=kt(gt),ht="";return lt.forEach((bt,yt)=>{let mt=Pt("stx-step",yt<dt&&"stx-step--completed",yt===dt&&"stx-step--active");if(ht+=`<div class="${mt}" data-step="${yt}">
|
|
48
48
|
<div class="stx-step-indicator">
|
|
49
|
-
${
|
|
49
|
+
${yt<dt?"\u2713":yt+1}
|
|
50
50
|
</div>
|
|
51
51
|
<div class="stx-step-content">
|
|
52
|
-
<div class="stx-step-label">${
|
|
53
|
-
${
|
|
52
|
+
<div class="stx-step-label">${wt(bt.label)}</div>
|
|
53
|
+
${bt.description?`<div class="stx-step-description">${wt(bt.description)}</div>`:""}
|
|
54
54
|
</div>
|
|
55
|
-
</div>`,
|
|
56
|
-
<div class="stx-list-view-empty">${
|
|
57
|
-
</div>`;let
|
|
55
|
+
</div>`,yt<lt.length-1)ht+='<div class="stx-step-connector"></div>'}),`<div id="${pt}" class="${xt}" ${ft?`style='${ft}'`:""}>${ht}</div>`}function Ko(st){let{open:lt=!1,title:dt,size:ct="medium",closable:pt=!0,children:ut,footer:gt,id:xt=St("modal"),className:ft,style:ht}=st,bt=Pt("stx-modal-component",`stx-modal-component--${ct}`,ft),yt=kt(ht);if(!lt)return`<div id="${xt}" class="${bt} stx-modal-component--hidden" ${yt?`style='${yt}'`:""}></div>`;let mt='<div class="stx-modal-component-overlay">';if(mt+='<div class="stx-modal-component-dialog">',dt||pt){if(mt+='<div class="stx-modal-component-header">',dt)mt+=`<h3 class="stx-modal-component-title">${wt(dt)}</h3>`;if(pt)mt+='<button class="stx-modal-component-close">×</button>';mt+="</div>"}if(mt+=`<div class="stx-modal-component-body">${ut}</div>`,gt)mt+=`<div class="stx-modal-component-footer">${gt}</div>`;return mt+="</div></div>",`<div id="${xt}" class="${bt}" ${yt?`style='${yt}'`:""}>${mt}</div>`}function Yo(st){let{items:lt,selectable:dt=!1,multiSelect:ct=!1,emptyMessage:pt="No items",id:ut=St("list"),className:gt,style:xt}=st,ft=Pt("stx-list-view",dt&&"stx-list-view--selectable",ct&&"stx-list-view--multi",gt),ht=kt(xt);if(lt.length===0)return`<div id="${ut}" class="${ft}" ${ht?`style="${ht}"`:""}>
|
|
56
|
+
<div class="stx-list-view-empty">${wt(pt)}</div>
|
|
57
|
+
</div>`;let bt='<ul class="stx-list-view-items">';for(let yt of lt){let mt=Pt("stx-list-view-item",yt.selected&&"stx-list-view-item--selected");bt+=`<li class="${mt}" data-id="${wt(yt.id)}" ${dt?'tabindex="0"':""}>${yt.content}</li>`}return bt+="</ul>",`<div id="${ut}" class="${ft}" ${ht?`style='${ht}'`:""}>${bt}</div>`}function Xo(st){let{columns:lt,data:dt,striped:ct=!1,bordered:pt=!1,hoverable:ut=!0,sortBy:gt,sortOrder:xt,id:ft=St("table"),className:ht,style:bt}=st,yt=Pt("stx-table",ct&&"stx-table--striped",pt&&"stx-table--bordered",ut&&"stx-table--hoverable",ht),mt=kt(bt),vt="<table>";vt+="<thead><tr>";for(let $t of lt){let Ct=$t.key===gt?`stx-table-sorted stx-table-sorted--${xt}`:"",At=$t.sortable?'data-sortable="true"':"",Rt=$t.width?`style="width: ${$t.width}"`:"";vt+=`<th class="${Ct}" ${At} ${Rt} data-key="${wt($t.key)}">${wt($t.label)}${$t.sortable?'<span class="stx-table-sort-icon"></span>':""}</th>`}vt+="</tr></thead>",vt+="<tbody>";for(let $t of dt){vt+="<tr>";for(let Tt of lt){let Ct=$t[Tt.key];vt+=`<td>${Ct!=null?wt(String(Ct)):""}</td>`}vt+="</tr>"}return vt+="</tbody></table>",`<div id="${ft}" class="${yt}" ${mt?`style='${mt}'`:""}>${vt}</div>`}function Zt(st,lt,dt,ct){let pt=lt.includes(st.key),ut=dt.includes(st.key),gt=st.children&&st.children.length>0,ft=`<div class="${Pt("stx-tree-node",ut&&"stx-tree-node--selected",st.disabled&&"stx-tree-node--disabled")}" data-key="${wt(st.key)}">`;if(ft+='<div class="stx-tree-node-content">',gt)ft+=`<span class="stx-tree-toggle ${pt?"stx-tree-toggle--expanded":""}">\u25B6</span>`;else ft+='<span class="stx-tree-toggle-placeholder"></span>';if(ct)ft+=`<input type="checkbox" class="stx-tree-checkbox" ${ut?"checked":""} ${st.disabled?"disabled":""} />`;if(st.icon)ft+=`<span class="stx-tree-icon">${st.icon}</span>`;if(ft+=`<span class="stx-tree-label">${wt(st.label)}</span>`,ft+="</div>",gt&&pt){ft+='<div class="stx-tree-children">';for(let ht of st.children)ft+=Zt(ht,lt,dt,ct);ft+="</div>"}return ft+="</div>",ft}function Jo(st){let{nodes:lt,expandedKeys:dt=[],selectedKeys:ct=[],checkable:pt=!1,id:ut=St("tree"),className:gt,style:xt}=st,ft=Pt("stx-tree-view",pt&&"stx-tree-view--checkable",gt),ht=kt(xt),bt="";for(let yt of lt)bt+=Zt(yt,dt,ct,pt);return`<div id="${ut}" class="${ft}" role="tree" ${ht?`style='${ht}'`:""}>${bt}</div>`}function Qo(st){let{columns:lt,data:dt,pagination:ct,selectable:pt=!1,id:ut=St("datagrid"),className:gt,style:xt}=st,ft=Pt("stx-data-grid",pt&&"stx-data-grid--selectable",gt),ht=kt(xt),bt='<div class="stx-data-grid-table-wrapper">';if(bt+='<table class="stx-data-grid-table">',bt+="<thead><tr>",pt)bt+='<th class="stx-data-grid-select-all"><input type="checkbox" /></th>';for(let yt of lt){let mt=yt.width?`style="width: ${yt.width}"`:"";bt+=`<th ${mt}>
|
|
58
58
|
<div class="stx-data-grid-header-cell">
|
|
59
|
-
<span>${
|
|
60
|
-
${
|
|
61
|
-
${
|
|
59
|
+
<span>${wt(yt.label)}</span>
|
|
60
|
+
${yt.sortable?'<button class="stx-data-grid-sort">\u21C5</button>':""}
|
|
61
|
+
${yt.filterable?'<button class="stx-data-grid-filter">\u22BB</button>':""}
|
|
62
62
|
</div>
|
|
63
|
-
</th>`}
|
|
64
|
-
<span class="stx-data-grid-page-info">Page ${
|
|
63
|
+
</th>`}bt+="</tr></thead>",bt+="<tbody>";for(let yt of dt){if(bt+="<tr>",pt)bt+='<td class="stx-data-grid-select"><input type="checkbox" /></td>';for(let mt of lt){let vt=yt[mt.key];bt+=`<td>${vt!=null?wt(String(vt)):""}</td>`}bt+="</tr>"}if(bt+="</tbody></table></div>",ct){let yt=Math.ceil(ct.total/ct.pageSize);bt+=`<div class="stx-data-grid-pagination">
|
|
64
|
+
<span class="stx-data-grid-page-info">Page ${ct.page} of ${yt} (${ct.total} items)</span>
|
|
65
65
|
<div class="stx-data-grid-page-buttons">
|
|
66
|
-
<button class="stx-data-grid-page-btn" ${
|
|
67
|
-
<button class="stx-data-grid-page-btn" ${
|
|
66
|
+
<button class="stx-data-grid-page-btn" ${ct.page<=1?"disabled":""}>\u25C0</button>
|
|
67
|
+
<button class="stx-data-grid-page-btn" ${ct.page>=yt?"disabled":""}>\u25B6</button>
|
|
68
68
|
</div>
|
|
69
|
-
</div>`}return`<div id="${
|
|
69
|
+
</div>`}return`<div id="${ut}" class="${ft}" ${ht?`style='${ht}'`:""}>${bt}</div>`}function Zo(st){let{type:lt,data:dt,options:ct={},width:pt="100%",height:ut=300,id:gt=St("chart"),className:xt,style:ft}=st,ht=Pt("stx-chart",`stx-chart--${lt}`,xt),bt={width:typeof pt==="number"?`${pt}px`:pt,height:typeof ut==="number"?`${ut}px`:ut},yt=[kt(bt),kt(ft)].filter(Boolean).join("; "),mt=JSON.stringify({type:lt,data:dt,options:ct});return`<div id="${gt}" class="${ht}" style="${yt}" data-chart='${wt(mt)}'>
|
|
70
70
|
<div class="stx-chart-placeholder">
|
|
71
|
-
${
|
|
72
|
-
<div class="stx-chart-type">${
|
|
73
|
-
<div class="stx-chart-info">${
|
|
71
|
+
${ct.title?`<div class="stx-chart-title">${wt(ct.title)}</div>`:""}
|
|
72
|
+
<div class="stx-chart-type">${lt.charAt(0).toUpperCase()+lt.slice(1)} Chart</div>
|
|
73
|
+
<div class="stx-chart-info">${dt.datasets.length} dataset(s), ${dt.labels.length} labels</div>
|
|
74
74
|
</div>
|
|
75
|
-
</div>`}function
|
|
76
|
-
`),
|
|
77
|
-
<td><span class="stx-file-explorer-icon">${
|
|
78
|
-
<td>${
|
|
79
|
-
<td>${
|
|
80
|
-
</tr>`}
|
|
81
|
-
<div class="stx-file-explorer-icon">${
|
|
82
|
-
<div class="stx-file-explorer-name">${
|
|
83
|
-
</div>`}
|
|
75
|
+
</div>`}function er(st){let{value:lt="",language:dt="plaintext",theme:ct="dark",lineNumbers:pt=!0,readOnly:ut=!1,height:gt=300,tabSize:xt=2,wordWrap:ft=!1,id:ht=St("code"),className:bt,style:yt}=st,mt=Pt("stx-code-editor",`stx-code-editor--${ct}`,pt&&"stx-code-editor--line-numbers",ut&&"stx-code-editor--readonly",ft&&"stx-code-editor--wrap",bt),vt={height:typeof gt==="number"?`${gt}px`:gt},$t=[kt(vt),kt(yt)].filter(Boolean).join("; "),Tt=lt.split(`
|
|
76
|
+
`),Ct="";if(pt){Ct+='<div class="stx-code-editor-gutter">';for(let At=1;At<=Tt.length;At++)Ct+=`<div class="stx-code-editor-line-number">${At}</div>`;Ct+="</div>"}return Ct+=`<pre class="stx-code-editor-content"><code class="language-${wt(dt)}">${wt(lt)}</code></pre>`,`<div id="${ht}" class="${mt}" style="${$t}" data-language="${wt(dt)}" data-tab-size="${xt}">${Ct}</div>`}function tr(st){let{src:lt,type:dt="video",poster:ct,autoplay:pt=!1,loop:ut=!1,muted:gt=!1,controls:xt=!0,width:ft,height:ht,id:bt=St("media"),className:yt,style:mt}=st,vt=Pt("stx-media-player",`stx-media-player--${dt}`,yt),$t={};if(ft)$t.width=typeof ft==="number"?`${ft}px`:ft;if(ht)$t.height=typeof ht==="number"?`${ht}px`:ht;let Tt=[kt($t),kt(mt)].filter(Boolean).join("; "),Ct=[`id="${bt}-media"`,`src="${wt(lt)}"`,xt&&"controls",pt&&"autoplay",ut&&"loop",gt&&"muted",dt==="video"&&ct&&`poster="${wt(ct)}"`].filter(Boolean).join(" "),At=dt==="video"?`<video ${Ct}>Your browser does not support the video tag.</video>`:`<audio ${Ct}>Your browser does not support the audio tag.</audio>`;return`<div id="${bt}" class="${vt}" ${Tt?`style='${Tt}'`:""}>${At}</div>`}function or(st){if(st===void 0)return"";let lt=["B","KB","MB","GB"],dt=st,ct=0;while(dt>=1024&&ct<lt.length-1)dt/=1024,ct++;return`${dt.toFixed(1)} ${lt[ct]}`}function rr(st){let{files:lt,viewMode:dt="list",showHidden:ct=!1,selectable:pt=!0,id:ut=St("files"),className:gt,style:xt}=st,ft=Pt("stx-file-explorer",`stx-file-explorer--${dt}`,gt),ht=kt(xt),bt=ct?lt:lt.filter((mt)=>!mt.name.startsWith(".")),yt="";if(dt==="list"){yt='<table class="stx-file-explorer-list"><thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead><tbody>';for(let mt of bt){let vt=mt.icon||(mt.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4"),$t=mt.type==="file"?or(mt.size):"",Tt=mt.modified?mt.modified.toLocaleDateString():"";yt+=`<tr class="stx-file-explorer-item ${pt?"stx-file-explorer-item--selectable":""}" data-path="${wt(mt.path)}" data-type="${mt.type}">
|
|
77
|
+
<td><span class="stx-file-explorer-icon">${vt}</span>${wt(mt.name)}</td>
|
|
78
|
+
<td>${$t}</td>
|
|
79
|
+
<td>${Tt}</td>
|
|
80
|
+
</tr>`}yt+="</tbody></table>"}else{yt='<div class="stx-file-explorer-grid">';for(let mt of bt){let vt=mt.icon||(mt.type==="folder"?"\uD83D\uDCC1":"\uD83D\uDCC4");yt+=`<div class="stx-file-explorer-item ${pt?"stx-file-explorer-item--selectable":""}" data-path="${wt(mt.path)}" data-type="${mt.type}">
|
|
81
|
+
<div class="stx-file-explorer-icon">${vt}</div>
|
|
82
|
+
<div class="stx-file-explorer-name">${wt(mt.name)}</div>
|
|
83
|
+
</div>`}yt+="</div>"}return`<div id="${ut}" class="${ft}" ${ht?`style='${ht}'`:""}>${yt}</div>`}function sr(st){let{url:lt,width:dt="100%",height:ct=400,sandbox:pt=!0,allowScripts:ut=!0,id:gt=St("webview"),className:xt,style:ft}=st,ht=Pt("stx-webview",xt),bt={width:typeof dt==="number"?`${dt}px`:dt,height:typeof ct==="number"?`${ct}px`:ct},yt=[kt(bt),kt(ft)].filter(Boolean).join("; "),mt=[];if(pt){if(mt.push("allow-same-origin"),ut)mt.push("allow-scripts")}let vt=pt?`sandbox="${mt.join(" ")}"`:"";return`<iframe id="${gt}" class="${ht}" src="${wt(lt)}" style="${yt}" ${vt} loading="lazy" frameborder="0"></iframe>`}var ir=["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"],nr=`
|
|
84
84
|
/* Button */
|
|
85
85
|
.stx-button {
|
|
86
86
|
display: inline-flex;
|
|
@@ -437,7 +437,7 @@ import{$ as Q1,$a as Q2,A as x0,Aa as C1,B as H0,Ba as x1,C as v0,Ca as H1,D as
|
|
|
437
437
|
.stx-chip--warning { background: #3a2a1a; }
|
|
438
438
|
.stx-chip--error { background: #3a1a1a; }
|
|
439
439
|
}
|
|
440
|
-
`;import
|
|
440
|
+
`;import eo from"process";function ar(){if(eo.platform)return eo.platform;return"unknown"}function oo(){if(typeof window<"u"&&window.craft?.tray)return!0;return!1}function ro(st,lt){if(st.type==="separator")return{id:`sep-${lt}`,label:"",type:"separator"};let dt={id:`item-${lt}-${st.label.replace(/\s+/g,"-").toLowerCase()}`,label:st.label,type:st.type||"normal",enabled:st.enabled!==!1};if(st.accelerator)dt.shortcut=st.accelerator;if(st.type==="checkbox")dt.checked=st.checked||!1;if(st.type==="submenu"&&st.submenu)dt.submenu=st.submenu.map((ct,pt)=>ro(ct,pt));return dt}function Ut(st){return st.map((lt,dt)=>ro(lt,dt))}function so(st,lt=0){if(st.type==="separator")return'<hr class="stx-tray-separator" />';let dt=" ".repeat(lt),ct=st.enabled===!1?"disabled":"",pt=st.checked?"\u2713 ":"",ut=st.accelerator?`<span class="accelerator">${st.accelerator}</span>`:"",gt=`${dt}<div class="stx-tray-item ${ct}" data-action="${st.label}">`;if(gt+=`<span class="label">${pt}${st.label}</span>${ut}`,st.type==="submenu"&&st.submenu){gt+='<span class="arrow">\u25B8</span>',gt+='<div class="stx-tray-submenu">';for(let xt of st.submenu)gt+=so(xt,lt+1);gt+="</div>"}return gt+="</div>",gt}function lr(st){let lt='<div class="stx-tray-menu">';for(let dt of st)lt+=so(dt);return lt+="</div>",lt}var Ot=new Map;function dr(){return`tray-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}var to=!1;function cr(){if(to||typeof window>"u")return;window.addEventListener("craft:tray:menu",(st)=>{let{action:lt}=st.detail;for(let dt of Ot.values()){let ct=dt.handlers.get(lt);if(ct){ct();break}}}),to=!0}async function io(st={}){let lt=dr(),dt=ar(),ct=oo(),pt={icon:st.icon||"",tooltip:st.tooltip||"stx Application",menu:st.menu||[],visible:!0},ut=new Map;for(let xt of st.menu||[]){if(xt.type!=="separator"&&xt.onClick)ut.set(xt.label,xt.onClick);if(xt.type==="submenu"&&xt.submenu){for(let ft of xt.submenu)if(ft.type!=="separator"&&ft.onClick)ut.set(ft.label,ft.onClick)}}if(Ot.set(lt,{state:pt,handlers:ut}),ct){cr();let xt=window;try{if(pt.tooltip)await xt.craft.tray.setTitle({title:pt.tooltip}),await xt.craft.tray.setTooltip({tooltip:pt.tooltip});if(pt.icon)await xt.craft.tray.setIcon({icon:pt.icon});let ft=Ut(pt.menu);await xt.craft.tray.setMenu({items:ft}),console.log(`[stx-tray] Native tray created for ${dt}`)}catch(ft){console.warn("[stx-tray] Failed to create native tray:",ft)}}else console.log("[stx-tray] Created simulated tray (not in Craft window)"),console.log(`[stx-tray] ID: ${lt}`),console.log(`[stx-tray] Tooltip: ${pt.tooltip}`),console.log(`[stx-tray] Menu items: ${pt.menu.length}`);return{id:lt,setIcon:(xt)=>{if(pt.icon=xt,ct)window.craft.tray.setIcon({icon:xt}).catch((ht)=>{console.warn("[stx-tray] Failed to set icon:",ht)});console.log(`[stx-tray:${lt}] Icon updated`)},setTooltip:(xt)=>{if(pt.tooltip=xt,ct)window.craft.tray.setTooltip({tooltip:xt}).catch((ht)=>{console.warn("[stx-tray] Failed to set tooltip:",ht)});console.log(`[stx-tray:${lt}] Tooltip: ${xt}`)},setMenu:(xt)=>{pt.menu=xt,ut.clear();for(let ft of xt){if(ft.type!=="separator"&&ft.onClick)ut.set(ft.label,ft.onClick);if(ft.type==="submenu"&&ft.submenu){for(let ht of ft.submenu)if(ht.type!=="separator"&&ht.onClick)ut.set(ht.label,ht.onClick)}}if(ct){let ft=window,ht=Ut(xt);ft.craft.tray.setMenu({items:ht}).catch((bt)=>{console.warn("[stx-tray] Failed to set menu:",bt)})}console.log(`[stx-tray:${lt}] Menu updated (${xt.length} items)`)},destroy:()=>{if(pt.visible=!1,Ot.delete(lt),ct)window.craft.tray.destroy?.().catch((ft)=>{console.warn("[stx-tray] Failed to destroy tray:",ft)});console.log(`[stx-tray:${lt}] Destroyed`)}}}var pr=io;function ur(){return Array.from(Ot.keys())}function fr(st){let lt=Ot.get(st);if(!lt)return null;let dt=oo();return{id:st,setIcon:(ct)=>{if(lt.state.icon=ct,dt)window.craft.tray.setIcon({icon:ct}).catch(()=>{})},setTooltip:(ct)=>{if(lt.state.tooltip=ct,dt)window.craft.tray.setTooltip({tooltip:ct}).catch(()=>{})},setMenu:(ct)=>{if(lt.state.menu=ct,dt){let pt=window,ut=Ut(ct);pt.craft.tray.setMenu({items:ut}).catch(()=>{})}},destroy:()=>{if(Ot.delete(st),dt)window.craft.tray.destroy?.().catch(()=>{})}}}function xr(st,lt){let dt=Ot.get(st);if(!dt)return!1;let ct=dt.handlers.get(lt);if(ct)return ct(),!0;return!1}function mr(st){let lt=Ot.get(st);if(!lt)return null;return lr(lt.state.menu)}function gr(){return`
|
|
441
441
|
// STX Desktop Tray Bridge
|
|
442
442
|
// Provides convenient wrappers around window.craft.tray APIs
|
|
443
443
|
window.stxTray = {
|
|
@@ -450,7 +450,7 @@ window.stxTray = {
|
|
|
450
450
|
// Check if tray is available
|
|
451
451
|
isAvailable: () => typeof window.craft?.tray !== 'undefined',
|
|
452
452
|
};
|
|
453
|
-
`}var
|
|
453
|
+
`}var br=`
|
|
454
454
|
.stx-tray-menu {
|
|
455
455
|
background: #2d2d2d;
|
|
456
456
|
border-radius: 8px;
|
|
@@ -516,7 +516,7 @@ window.stxTray = {
|
|
|
516
516
|
.stx-tray-item:hover > .stx-tray-submenu {
|
|
517
517
|
display: block;
|
|
518
518
|
}
|
|
519
|
-
`;import
|
|
519
|
+
`;import Dt from"process";import{existsSync as hr}from"fs";import{dirname as yr,join as wr}from"path";import{craftBinaryNotFoundMessage as no,resolveCraftBinary as vr}from"craft-native";var Et={};function $r(st){Et={...Et,...st}}function kr(){return{...Et}}function Pr(){Et={}}function jt(st){if(!st.sidebarConfig)return;let lt={...st.sidebarConfig};if(lt.variant==="desktop")lt.material=lt.material??"sidebar",lt.backgroundEffect=lt.backgroundEffect??"shimmer",lt.allowsVibrancy=lt.allowsVibrancy??!0;return lt}function Wt(){let st=yr(Dt.execPath),lt=st.includes(".app/Contents/MacOS")?wr(st,"craft"):void 0,dt=[Dt.env.CRAFT_BINARY_PATH,Et.craftBinaryPath,...Et.additionalSearchPaths||[],lt];for(let ct of dt)if(ct&&hr(ct))return ct;return vr()}var It=new Map;function qt(st){let lt=It.get(st);if(!lt||lt.closed)return;lt.closed=!0;for(let dt of lt.closeListeners??[])try{dt()}catch(ct){console.warn(`[stx/desktop] window ${st} close listener threw:`,ct)}lt.closeListeners?.clear()}var Sr=50;async function Gt(st,lt){let dt=lt.show().then(()=>({failed:!1}),(pt)=>({failed:!0,error:pt})),ct=await Promise.race([dt,new Promise((pt)=>setTimeout(()=>pt(null),Sr))]);if(ct?.failed)throw ct.error;dt.then(()=>qt(st))}function Tr(){return Array.from(It.keys())}function Cr(st){let lt=It.get(st);if(!lt)return null;return Vt(st,lt.app)}function Ar(){for(let[st,lt]of It)try{lt.app?.close?.()}catch(dt){console.warn(`Failed to close window ${st}:`,dt)}It.clear()}function Vt(st,lt){return{id:st,show:()=>{console.log(`[stx/desktop] Window ${st} shown`)},hide:()=>{console.log("[stx/desktop] To hide window, use window.craft.window.hide() from inside the webview")},close:()=>{let dt=It.get(st);if(dt?.app)dt.app.close(),qt(st),It.delete(st),console.log(`[stx/desktop] Window ${st} closed`)},onClosed:(dt)=>{let ct=It.get(st);if(!ct||ct.closed)return queueMicrotask(dt),()=>{};return ct.closeListeners??=new Set,ct.closeListeners.add(dt),()=>ct.closeListeners?.delete(dt)},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:(dt)=>{console.log(`[stx/desktop] To set title, use window.craft.window.setTitle({ title: "${dt}" }) from inside the webview`)},loadURL:(dt)=>{console.log(`[stx/desktop] To navigate, use window.location.href = "${dt}" from inside the webview`)},reload:()=>{console.log("[stx/desktop] To reload, use window.craft.window.reload() from inside the webview")}}}function Kt(st,lt={}){let dt=["--url",st,"--title",lt.title||"stx Desktop","--width",String(lt.width??1200),"--height",String(lt.height??800)];if(lt.darkMode)dt.push("--dark");if(lt.hotReload)dt.push("--hot-reload");if(lt.resizable===!1)dt.push("--no-resize");if(lt.frameless)dt.push("--frameless");if(lt.alwaysOnTop)dt.push("--always-on-top");if(lt.titlebarHidden)dt.push("--titlebar-hidden");if(lt.systemTray)dt.push("--system-tray");if(lt.hideDockIcon)dt.push("--hide-dock-icon");if(lt.devTools===!1)dt.push("--no-devtools");if(lt.nativeSidebar)dt.push("--native-sidebar");if(lt.sidebarWidth!==void 0)dt.push("--sidebar-width",String(lt.sidebarWidth));let ct=jt(lt);if(ct)dt.push("--sidebar-config",JSON.stringify(ct));return dt}async function Ir(st,lt={}){let dt=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,ct=Wt();try{let{createApp:pt}=await import("craft-native"),ut=pt({url:st,craftPath:ct,window:{title:lt.title||"stx Desktop",width:lt.width??1200,height:lt.height??800,darkMode:lt.darkMode??!1,hotReload:lt.hotReload??!1,resizable:lt.resizable??!0,frameless:lt.frameless??!1,alwaysOnTop:lt.alwaysOnTop??!1,titlebarHidden:lt.titlebarHidden??!1,systemTray:lt.systemTray??!1,hideDockIcon:lt.hideDockIcon??!1,devTools:lt.devTools??!1,nativeSidebar:lt.nativeSidebar??!1,sidebarWidth:lt.sidebarWidth,sidebarConfig:jt(lt)}});return It.set(dt,{app:ut,url:st,options:lt}),await Gt(dt,ut),Vt(dt,ut)}catch{try{let{spawn:pt}=await import("child_process"),ut=pt(ct,Kt(st,lt),{stdio:"inherit"});ut.on("error",(xt)=>{console.error(xt.code==="ENOENT"?no(ct):`craft child error: ${xt.message}`)});let gt={close:()=>ut.kill()};return It.set(dt,{app:gt,url:st,options:lt}),ut.on("exit",()=>qt(dt)),Vt(dt,gt)}catch(pt){return console.error("Failed to spawn craft binary:",pt.message),null}}}async function Mr(st,lt={}){let dt=`http://localhost:${st}/`;if(Dt.env.NODE_ENV==="test"||Dt.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:pt}=await import("craft-native");console.log("\u26A1 Opening native window via craft-native\u2026");let ut=!lt.nativeSidebar,gt=jt(lt),xt=pt({url:dt,craftPath:Wt(),window:{title:lt.title||"stx Development",width:lt.width||1400,height:lt.height||900,resizable:!0,systemTray:ut,darkMode:lt.darkMode??!0,hotReload:lt.hotReload??!0,devTools:!0,titlebarHidden:lt.titlebarHidden??!1,nativeSidebar:lt.nativeSidebar??!1,sidebarWidth:lt.sidebarWidth??260,sidebarConfig:gt}}),ft=`dev-window-${st}`;return It.set(ft,{app:xt,url:dt,options:lt}),await Gt(ft,xt),console.log(`\u2713 Native window opened at ${dt}`),!0}catch{let pt=Wt();try{console.log(`\u26A1 Opening native window via craft binary (${pt})\u2026`);let{spawn:ut}=await import("child_process"),gt=ut(pt,Kt(dt,{title:"stx Development",width:1400,height:900,hotReload:!0,...lt}),{stdio:"inherit"});gt.on("exit",()=>Dt.exit(0)),gt.on("error",(ft)=>{console.warn(ft.code==="ENOENT"?no(pt):`craft child error: ${ft.message}`)});let xt=`dev-window-${st}`;return It.set(xt,{app:{close:()=>gt.kill()},url:dt,options:lt}),console.log(`\u2713 Native window opened at ${dt}`),!0}catch(ut){console.warn("\u26A0 Could not spawn craft binary:",ut.message)}if(Dt.env.NODE_ENV==="test"||Dt.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:ut}=await import("child_process"),gt=Dt.platform;return ut(gt==="darwin"?"open":gt==="win32"?"cmd":"xdg-open",gt==="win32"?["/c","start",dt]:[dt],{detached:!0,stdio:"ignore"}).unref(),console.log(`\u2713 Browser opened at ${dt}`),!0}catch(ut){return console.error("Could not open browser:",ut),console.log(`Please open manually: ${dt}`),!1}}}async function Or(st,lt={}){let{title:dt="stx Desktop",width:ct=1200,height:pt=800,darkMode:ut=!1,hotReload:gt=!1,resizable:xt=!0,frameless:ft=!1,alwaysOnTop:ht=!1}=lt;try{let{createApp:bt}=await import("craft-native"),yt=Wt(),mt=bt({html:st,craftPath:yt,window:{title:dt,width:ct,height:pt,darkMode:ut,hotReload:gt,resizable:xt,frameless:ft,alwaysOnTop:ht}}),vt=`craft-window-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return It.set(vt,{app:mt,url:"html-content",options:lt}),await Gt(vt,mt),Vt(vt,mt)}catch(bt){return console.error("Failed to create window with HTML:",bt),null}}function Dr(){try{return Qt.resolve("craft-native"),!0}catch{return!1}}function Er(){return`
|
|
520
520
|
// STX Desktop Window Bridge
|
|
521
521
|
// Provides convenient wrappers around window.craft APIs
|
|
522
522
|
window.stxWindow = {
|
|
@@ -557,30 +557,30 @@ window.stxWindow = {
|
|
|
557
557
|
|
|
558
558
|
// Expose as global for backwards compatibility
|
|
559
559
|
window.desktop = window.stxWindow;
|
|
560
|
-
`}import{pack as
|
|
560
|
+
`}import{pack as Nr,packageApp as zr}from"craft-native";import{craftBinaryNotFoundMessage as Br,resolveCraftBinary as _r}from"craft-native";import _t from"process";import{spawn as Lr}from"child_process";import{AutoUpdater as ao,canReplaceBundle as Rr,clearQuarantine as Wr,extractBundle as Vr,generateUpdateManifest as lo,readBundleIdentity as Yt,swapBundle as Hr,verifyBundleTrust as Fr}from"craft-native";var co="update.json";function po(st,lt){return`https://github.com/${st}/releases/latest/download/${lt}`}function uo(st,lt,dt){return`https://github.com/${st}/releases/download/${lt}/${dt}`}function fo(st){let{repository:lt,manifestAsset:dt=co,...ct}=st;return new ao({...ct,updateUrl:po(lt,dt)})}function Ur(st){let lt=st.tag??`v${st.version}`,dt={};for(let[ct,pt]of Object.entries(st.artifacts)){if(!pt)continue;dt[ct]={path:pt,url:uo(st.repository,lt,pt.split("/").pop())}}return lo({version:st.version,releaseNotes:st.releaseNotes,platforms:dt})}function Ht(st=_t.execPath){let lt=st.split("/");for(let dt=0;dt<lt.length;dt++)if(lt[dt].endsWith(".app"))return lt.slice(0,dt+1).join("/");return null}async function jr(){let st=Ht();if(!st)return null;return(await Yt(st)).teamId}function xo(){let st=_t.ppid;if(st>1)try{_t.kill(st,"SIGTERM");return}catch{}_t.exit(0)}function mo(st={}){let lt=st.appPath??Ht(),dt=st.quit??(()=>_t.exit(0));if(lt)Lr("/usr/bin/open",["-n",lt],{detached:!0,stdio:"ignore"}).unref();let ct=st.quitDelayMs??0;if(ct>0){setTimeout(dt,ct).unref?.();return}dt()}async function qr(st){let{appPath:lt,requireSameTeam:dt=!0,macos:ct,...pt}=st,ut=lt??Ht();if(!ut)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 gt=ct?.teamId??(dt?(await Yt(ut)).teamId??void 0:void 0);return fo({...pt,appPath:ut,macos:{...ct,teamId:gt},relaunch:st.relaunch??((xt)=>mo({appPath:xt,quit:xo,quitDelayMs:250}))})}import{existsSync as Xt,mkdirSync as Gr,readFileSync as Kr,watch as Yr,writeFileSync as Xr}from"fs";import{homedir as Jr,platform as Qr}from"os";import{dirname as Zr,join as Lt}from"path";function es(st){let lt=Qr(),dt=Jr();switch(lt){case"darwin":return Lt(dt,"Library","Application Support",st);case"win32":return Lt(process.env.APPDATA||Lt(dt,"AppData","Roaming"),st);default:return Lt(dt,".config",st)}}class go{_defaults;_data;_path;_changeHandlers=new Map;_anyChangeHandlers=new Set;_watcher=null;_writeTimer=null;_writing=!1;constructor(st){this._defaults={...st.defaults};let lt=st.path?Zr(st.path):es(st.name);if(this._path=st.path||Lt(lt,"preferences.json"),!Xt(lt))Gr(lt,{recursive:!0});if(this._data=this._load(),st.watch!==!1)this._setupWatcher()}get path(){return this._path}get(st){if(st in this._data)return this._data[st];return this._defaults[st]}set(st,lt){let dt=this.get(st);if(JSON.stringify(dt)===JSON.stringify(lt))return;this._data[st]=lt,this._scheduleSave(),this._notifyChange(st,lt,dt)}getAll(){return{...this._defaults,...this._data}}has(st){return st in this._data}delete(st){if(!(st in this._data))return;let lt=this._data[st];delete this._data[st],this._scheduleSave(),this._notifyChange(st,this._defaults[st],lt)}reset(){let st={...this._data};this._data={},this._save();for(let lt of Object.keys(st)){let dt=this._defaults[lt];this._notifyChange(lt,dt,st[lt])}}onChange(st,lt){let dt=st;if(!this._changeHandlers.has(dt))this._changeHandlers.set(dt,new Set);return this._changeHandlers.get(dt).add(lt),()=>{this._changeHandlers.get(dt)?.delete(lt)}}onAnyChange(st){return this._anyChangeHandlers.add(st),()=>{this._anyChangeHandlers.delete(st)}}close(){if(this._watcher)this._watcher.close(),this._watcher=null;if(this._writeTimer)clearTimeout(this._writeTimer),this._writeTimer=null,this._save()}_load(){try{if(Xt(this._path)){let st=Kr(this._path,"utf-8");return JSON.parse(st)}}catch{}return{}}_save(){this._writing=!0;try{let st=JSON.stringify({...this._defaults,...this._data},null,2);Xr(this._path,st,"utf-8")}catch(st){console.error(`Failed to save preferences to ${this._path}:`,st)}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(!Xt(this._path))this._save();this._watcher=Yr(this._path,()=>{if(this._writing)return;let st=this._load(),lt={...this._data};this._data=st;let dt=new Set([...Object.keys(lt),...Object.keys(st)]);for(let ct of dt){let pt=ct in lt?lt[ct]:this._defaults[ct],ut=ct in st?st[ct]:this._defaults[ct];if(JSON.stringify(pt)!==JSON.stringify(ut))this._notifyChange(ct,ut,pt)}})}catch{}}_notifyChange(st,lt,dt){let ct=this._changeHandlers.get(st);if(ct)for(let pt of ct)try{pt(lt,dt)}catch{}for(let pt of this._anyChangeHandlers)try{pt(st,lt,dt)}catch{}}}function ts(st){return new go(st)}import{existsSync as Nt,mkdirSync as bo,readFileSync as os,unlinkSync as ho,writeFileSync as yo}from"fs";import{homedir as Ft,platform as wo}from"os";import{join as zt}from"path";function vo(st){let lt=st.toLowerCase().replace(/[^a-z0-9]/g,"-");return zt(Ft(),"Library","LaunchAgents",`com.${lt}.plist`)}function $o(st){let lt=process.env.XDG_CONFIG_HOME||zt(Ft(),".config");return zt(lt,"autostart",`${st.toLowerCase()}.desktop`)}async function rs(st,lt){let dt=lt.appName||"StxApp",ct=vo(dt),pt=zt(Ft(),"Library","LaunchAgents");if(st){let ut=lt.appPath||process.execPath,gt=lt.args||[],xt=[ut,...gt],ft=`<?xml version="1.0" encoding="UTF-8"?>
|
|
561
561
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
562
562
|
<plist version="1.0">
|
|
563
563
|
<dict>
|
|
564
564
|
<key>Label</key>
|
|
565
|
-
<string>com.${
|
|
565
|
+
<string>com.${dt.toLowerCase().replace(/[^a-z0-9]/g,"-")}</string>
|
|
566
566
|
<key>ProgramArguments</key>
|
|
567
567
|
<array>
|
|
568
|
-
${
|
|
568
|
+
${xt.map((ht)=>` <string>${as(ht)}</string>`).join(`
|
|
569
569
|
`)}
|
|
570
570
|
</array>
|
|
571
571
|
<key>RunAtLoad</key>
|
|
572
572
|
<true/>
|
|
573
573
|
<key>KeepAlive</key>
|
|
574
574
|
<false/>
|
|
575
|
-
${
|
|
575
|
+
${lt.isHidden?` <key>ProcessType</key>
|
|
576
576
|
<string>Background</string>`:""}
|
|
577
577
|
</dict>
|
|
578
|
-
</plist>`;if(!
|
|
578
|
+
</plist>`;if(!Nt(pt))bo(pt,{recursive:!0});yo(ct,ft,"utf-8")}else if(Nt(ct))ho(ct)}async function ss(st,lt){let dt=lt.appName||"StxApp",ct=$o(dt),pt=zt(process.env.XDG_CONFIG_HOME||zt(Ft(),".config"),"autostart");if(st){let ut=lt.appPath||process.execPath,gt=lt.args||[],xt=[ut,...gt].join(" "),ft=`[Desktop Entry]
|
|
579
579
|
Type=Application
|
|
580
|
-
Name=${
|
|
581
|
-
Exec=${
|
|
580
|
+
Name=${dt}
|
|
581
|
+
Exec=${xt}
|
|
582
582
|
Terminal=false
|
|
583
583
|
StartupNotify=false
|
|
584
|
-
${
|
|
584
|
+
${lt.isHidden?`X-GNOME-Autostart-enabled=true
|
|
585
585
|
NoDisplay=true`:""}
|
|
586
|
-
`;if(!
|
|
586
|
+
`;if(!Nt(pt))bo(pt,{recursive:!0});yo(ct,ft,"utf-8")}else if(Nt(ct))ho(ct)}async function is(st){return Nt(vo(st))}async function ns(st){let lt=$o(st);if(!Nt(lt))return!1;try{let dt=os(lt,"utf-8");if(dt.includes("X-GNOME-Autostart-enabled=false"))return!1;if(dt.includes("Hidden=true"))return!1;return!0}catch{return!1}}function as(st){return st.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}async function ls(st,lt={}){let dt=wo();switch(dt){case"darwin":return rs(st,lt);case"linux":return ss(st,lt);default:throw Error(`Auto-launch is not yet supported on ${dt}`)}}async function ds(st){let lt=st||"StxApp";switch(wo()){case"darwin":return is(lt);case"linux":return ns(lt);default:return!1}}var cs={accentColor:()=>Mt("system","accentColor",()=>""),highlightColor:()=>Mt("system","highlightColor",()=>""),language:()=>Mt("system","language",()=>{if(typeof navigator>"u")return"";return navigator.language?.split("-")[0]||""}),locale:()=>Mt("system","locale",()=>{if(typeof navigator>"u")return"";return navigator.language||""}),timezone:()=>Mt("system","timezone",()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||""}catch{return""}}),is24HourTime:()=>Mt("system","is24HourTime",()=>{try{let st=new Intl.DateTimeFormat([],{hour:"numeric"}).resolvedOptions();return st.hourCycle==="h23"||st.hourCycle==="h24"}catch{return!1}}),reduceMotion:()=>Mt("system","reduceMotion",()=>Jt("(prefers-reduced-motion: reduce)")),reduceTransparency:()=>Mt("system","reduceTransparency",()=>Jt("(prefers-reduced-transparency: reduce)")),increaseContrast:()=>Mt("system","increaseContrast",()=>Jt("(prefers-contrast: more)")),systemVersion:()=>Mt("system","systemVersion",()=>""),hostname:()=>Mt("system","hostname",()=>""),username:()=>Mt("system","username",()=>""),async openPreferences(){if(e("system"))await window.craft.system.openPreferences()}};async function Mt(st,lt,dt){if(e(st))return await window.craft[st][lt]();return await dt()}function Jt(st){if(typeof window>"u"||!window.matchMedia)return!1;return window.matchMedia(st).matches}export{ir as AVAILABLE_COMPONENTS,ao as AutoUpdater,nr as COMPONENT_STYLES,c as DEFAULT_WATCH_INTERVAL_MS,x as MAX_WATCH_INTERVAL_MS,b as MIN_WATCH_INTERVAL_MS,z as MODAL_STYLES,M as TOAST_STYLES,br as TRAY_MENU_STYLES,co as UPDATE_MANIFEST_ASSET,R as alert,Pe as appInfo,Ve as appleScript,qe as audio,be as battery,Ue as biometric,Be as bluetooth,Xe as bonjour,Ht as bundlePathForExecutable,Y as caffeinate,Rr as canReplaceBundle,Wr as clearQuarantine,le as clipboard,F as closeAllModals,Ar as closeAllWindows,L as confirm,Ae as contextMenu,rt as continuityCamera,tt as coreml,Br as craftBinaryNotFoundMessage,Kt as craftWindowArguments,o as crashReporter,qo as createAccordion,Ro as createAutocomplete,Mo as createAvatar,Io as createBadge,Po as createButton,Oo as createCard,Zo as createChart,To as createCheckbox,Ho as createChip,er as createCodeEditor,Bo as createColorPicker,Qo as createDataGrid,_o as createDatePicker,Eo as createDropdown,rr as createFileExplorer,Ur as createGitHubUpdateManifest,fo as createGitHubUpdater,Vo as createImageView,ie as createInterval,Wo as createLabel,Yo as createListView,tr as createMediaPlayer,pr as createMenubar,Ko as createModalComponent,ts as createPreferences,Ao as createProgressBar,zo as createRadioButton,No as createRating,Uo as createScrollView,qr as createSelfUpdater,Co as createSlider,jo as createSplitView,Go as createStepper,io as createSystemTray,Xo as createTable,Do as createTabs,So as createTextInput,Lo as createTimePicker,oe as createTimer,Fo as createTooltip,Jo as createTreeView,sr as createWebView,Ir as createWindow,Or as createWindowWithHTML,p as decaffeinate,we as deepLinks,ae as delay,I as dismissAlertById,T as dismissAllAlerts,ge as dragOut,Vr as extractBundle,je as fileAssociations,l as focus,We as focusShortcutsReady,ce as formatCompact,Z as formatDuration,Q as formatRemainingTime,ee as formatShortcut,se as formatTime,ue as fs,lo as generateUpdateManifest,E as getActiveAlertCount,N as getActiveModalCount,ur as getActiveTrayInstances,Tr as getActiveWindowIds,J as getCaffeinateStatus,it as getCapabilities,y as getCapability,kr as getDesktopConfig,G as getDialogBridgeScript,ne as getRegisteredHotkeys,mr as getSimulatedTrayHTML,gr as getTrayBridgeScript,fr as getTrayInstance,Cr as getWindow,Er as getWindowBridgeScript,po as githubLatestAssetUrl,uo as githubReleaseAssetUrl,fe as globalShortcuts,i as handoff,ze as hasFocusShortcuts,Le as iap,ds as isAutoLaunchEnabled,at as isAvailable,X as isCaffeinated,he as isDragOutAvailable,Dr as isWebviewAvailable,Ie as keychain,Re as liveActivities,He as localServer,_e as location,Ye as log,ke as menu,et as midi,Ee as nativeAutoLaunch,Me as nativeWindow,xe as network,de as notifications,C as notify,Mr as openDevWindow,Nr as pack,zr as packageApp,f as parseShortcut,Ge as pdf,$e as permissions,Te as printing,_ as prompt,xo as quitLauncher,Yt as readBundleIdentity,h as redactPII,te as registerHotkey,mo as relaunchBundle,v as requestNotificationPermission,Pr as resetDesktopConfig,_r as resolveCraftBinary,jr as runningBundleTeamId,Ce as screen,Ne as screenCapture,a as screenSharing,ot as serial,nt as serviceMenu,ls as setAutoLaunch,$r as setDesktopConfig,pe as shell,s as showAlert,q as showAlertDialog,U as showColorPicker,V as showConfirmDialog,j as showErrorDialog,B as showErrorModal,A as showErrorToast,d as showInfoModal,P as showInfoToast,n as showMessageBox,t as showModal,W as showOpenDialog,u as showQuestionModal,H as showSaveDialog,O as showSuccessModal,S as showSuccessToast,r as showToast,K as showWarningDialog,D as showWarningModal,k as showWarningToast,g as sidebar,w as signPayload,Oe as speech,Qe as speechRecognition,Je as spotlight,Se as standardMenus,Hr as swapBundle,cs as system,Ke as tags,me as theme,De as touchbar,xr as triggerTrayAction,re as unregisterAllHotkeys,m as unregisterHotkey,ye as updater,Fr as verifyBundleTrust,Ze as vision,Fe as watchScreenSharing,ve as windowEvents};
|