@stacksjs/hello-world-stx 0.75.330 → 0.75.336

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.
Files changed (37) hide show
  1. package/README.md +7 -0
  2. package/dist/bundle.js +474 -0
  3. package/dist/bundle.js.map +23 -0
  4. package/dist/custom-elements.d.ts +153 -0
  5. package/dist/custom-elements.json +927 -0
  6. package/dist/index.d.ts +13 -0
  7. package/dist/index.js +13 -0
  8. package/dist/runtime.js +309 -0
  9. package/dist/ssr.d.ts +27 -0
  10. package/dist/ssr.js +388 -0
  11. package/dist/stacks-context-menu-item.d.ts +27 -0
  12. package/dist/stacks-context-menu-item.js +85 -0
  13. package/dist/stacks-context-menu.d.ts +24 -0
  14. package/dist/stacks-context-menu.js +35 -0
  15. package/dist/stacks-desktop-icon.d.ts +33 -0
  16. package/dist/stacks-desktop-icon.js +114 -0
  17. package/dist/stacks-feature-button.d.ts +26 -0
  18. package/dist/stacks-feature-button.js +56 -0
  19. package/dist/stacks-input-group.d.ts +28 -0
  20. package/dist/stacks-input-group.js +68 -0
  21. package/dist/stacks-login-form.d.ts +28 -0
  22. package/dist/stacks-login-form.js +85 -0
  23. package/dist/stacks-login-screen.d.ts +26 -0
  24. package/dist/stacks-login-screen.js +77 -0
  25. package/dist/stacks-notification-popup.d.ts +26 -0
  26. package/dist/stacks-notification-popup.js +85 -0
  27. package/dist/stacks-package-item.d.ts +26 -0
  28. package/dist/stacks-package-item.js +49 -0
  29. package/dist/stacks-start-menu-item.d.ts +28 -0
  30. package/dist/stacks-start-menu-item.js +99 -0
  31. package/dist/stacks-start-menu.d.ts +26 -0
  32. package/dist/stacks-start-menu.js +85 -0
  33. package/dist/stacks-taskbar.d.ts +24 -0
  34. package/dist/stacks-taskbar.js +63 -0
  35. package/dist/stacks-window.d.ts +31 -0
  36. package/dist/stacks-window.js +104 -0
  37. package/package.json +4 -4
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # Stacks STX component library
2
+
3
+ This package publishes the application's `resources/components/` as native STX custom elements.
4
+
5
+ From a source checkout, run `bun run build` in this directory to compile the components through the maintained Stacks STX library builder. To develop the source components, run `./buddy dev:components` from the application root.
6
+
7
+ The package exports `dist/index.js` and its TypeScript declarations. Release publication checks those entries in the actual package payload after the build, including the package's `files` rules. A failed build, missing export or failed publication fails the release.
package/dist/bundle.js ADDED
@@ -0,0 +1,474 @@
1
+ var O=globalThis.HTMLElement||class{},R=(t)=>String(t??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#039;"),M=(t,e)=>{let i=e.trim().split("."),d=i.shift(),l=t._values&&Object.prototype.hasOwnProperty.call(t._values,d)?t._values[d]:t[d];for(let a of i)l=l?.[a];return typeof l==="function"?l.call(t):l},P=(t,e,i)=>{if(t===null)return e==="boolean"?!1:i;if(e==="boolean")return t!=="false"&&t!=="0";if(e==="number")return Number(t);if(e==="object"||e==="array")try{return JSON.parse(t)}catch{return i}return t},N=(t,e)=>{if(t==null||t===!1)return null;if(e==="boolean")return"";if(e==="object"||e==="array")return JSON.stringify(t);return String(t)},z=(t,e)=>{if(t==null||e!=="object"&&e!=="array")return t;if(typeof structuredClone==="function")return structuredClone(t);return JSON.parse(JSON.stringify(t))},L=(t)=>z(t.default??{string:"",number:0,boolean:!1,object:{},array:[]}[t.type],t.type);class p extends O{static definition={};static get observedAttributes(){return this.definition.observedAttributes||[]}constructor(){super();this._values=Object.create(null),this._reflecting=!1,this._connected=!1,this._hasConnected=!1,this._initializing=!1,this._updatePending=!1,this._listeners=new Map;let t=this.constructor.definition;for(let[e,i]of Object.entries(t.properties||{}))this._values[e]=L(i);if(t.shadowMode&&this.attachShadow&&!this.shadowRoot)this._closedRoot=this.attachShadow({mode:t.shadowMode})}get updateComplete(){return this._updateComplete||Promise.resolve()}get renderRoot(){return this._closedRoot||this.shadowRoot||this}connectedCallback(){if(this._connected)return;this._connected=!0,this._initializing=!0;let t=this.constructor.definition;for(let[l,a]of Object.entries(t.properties||{})){let s=a.attribute===!1?null:a.attribute||l.replace(/[A-Z]/g,(r)=>"-"+r.toLowerCase());if(s&&this.hasAttribute?.(s))this._values[l]=P(this.getAttribute(s),a.type,L(a))}for(let l of Object.keys(t.properties||{}))this._upgradeProperty(l);this._initializing=!1;let i=[...this.renderRoot.childNodes||[]].some((l)=>l.nodeType!==3||l.textContent.trim()),d=!this._hasConnected;if(!(d&&t.progressive&&i))this._render();else this._upgradeDeclarativeEvents();if(this._bindEvents(),d)this._hasConnected=!0,this.setAttribute?.("hydrated",""),this.dispatchEvent?.(new CustomEvent("stx:hydrated",{bubbles:!0,composed:!0}));try{this.onConnect?.()}catch(l){console.error("[stx] onConnect failed",l)}}disconnectedCallback(){this._connected=!1;try{this.onDisconnect?.()}catch(t){console.error("[stx] onDisconnect failed",t)}finally{for(let[t,e]of this._listeners)this.renderRoot.removeEventListener(t,e);this._listeners.clear()}}attributeChangedCallback(t,e,i){if(e===i||this._reflecting)return;let d=this.constructor.definition,l=d.attributeToProperty?.[t];if(!l)return;let a=d.properties[l],s=P(i,a.type,L(a));if(!Object.is(this._values[l],s))this._values[l]=s,this.requestUpdate()}_props(){return this._values}requestUpdate(){if(!this._connected||this._initializing||this._updatePending)return this.updateComplete;return this._updatePending=!0,this._updateComplete=new Promise((t)=>{queueMicrotask(()=>{if(this._updatePending=!1,this._connected)this._render();t()})}),this._updateComplete}emit(t,e,i={}){return this.dispatchEvent(new CustomEvent(t,{detail:e,bubbles:!0,composed:!0,...i}))}_upgradeProperty(t){if(!Object.prototype.hasOwnProperty.call(this,t))return;let e=this[t];delete this[t],this[t]=e}_upgradeDeclarativeEvents(){for(let t of this.renderRoot.querySelectorAll?.("*")||[]){let e=t.getAttributeNames?.()||[...t.attributes||[]].filter(Boolean).map((i)=>i.name);for(let i of e){if(!i?.startsWith("@"))continue;let[d,...l]=i.slice(1).split(".");if(t.setAttribute("data-stx-on-"+d,t.getAttribute(i)),l.length)t.setAttribute("data-stx-mod-"+d,l.join(" "));t.removeAttribute(i)}}}_bindEvents(){for(let t of this.constructor.definition.eventTypes||[]){if(this._listeners.has(t))continue;let e=(i)=>{let d="[data-stx-on-"+t+"]",l=i.target?.closest?.(d);if(!l||!this.renderRoot.contains(l))return;let a=(l.getAttribute("data-stx-mod-"+t)||"").split(" ");if(a.includes("prevent"))i.preventDefault();if(a.includes("stop"))i.stopPropagation();let s=l.getAttribute("data-stx-on-"+t);if(typeof this[s]==="function")this[s](i)};this.renderRoot.addEventListener(t,e),this._listeners.set(t,e)}}_render(){let t=this.constructor.definition,e=this.renderRoot,i=e.activeElement||(e.contains?.(globalThis.document?.activeElement)?globalThis.document.activeElement:null),d=i&&(i.getAttribute?.("data-key")||i.id||i.getAttribute?.("name")),l=i&&"selectionStart"in i?[i.selectionStart,i.selectionEnd]:null,a=typeof this.render==="function"?this.render(q):t.template.replace(new RegExp("\\{!!\\s*([\\w$.]+)\\s*!!\\}","g"),(s,r)=>String(M(this,r)??"")).replace(new RegExp("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}","g"),(s,r)=>R(M(this,r)));if(t.shadowMode&&t.styles)a="<style>"+t.styles+"</style>"+a;if(e.innerHTML=a,this._applyBindings(),this._bindEvents(),d){let s=globalThis.CSS?.escape?globalThis.CSS.escape(d):d.replace(/["\\]/g,"$&"),r=e.querySelector('[data-key="'+s+'"],#'+s+',[name="'+s+'"]');if(r?.focus?.(),l&&r?.setSelectionRange)r.setSelectionRange(l[0],l[1])}this.dispatchEvent?.(new CustomEvent("stx:updated",{bubbles:!1}))}_applyBindings(){for(let t of this.constructor.definition.bindings||[]){let e=this.renderRoot.querySelector("[data-stx-bind-"+t.id+"]");if(!e)continue;let i=M(this,t.expression);if(t.name==="class")e.className=i||"";else if(t.name==="style"&&typeof i==="object")Object.assign(e.style,i);else if(typeof i==="boolean"){if(e.toggleAttribute(t.name,i),t.name in e)e[t.name]=i}else if(i==null||i===!1)e.removeAttribute(t.name);else e.setAttribute(t.name,String(i))}}}var q={escape:R,raw:(t)=>String(t??""),values:(t)=>t==null?[]:t[Symbol.iterator]?t:Object.values(t),entries:(t)=>t==null?[]:Array.isArray(t)?t.entries():Object.entries(t)};function f(t,e){let i=e.properties||{},d={},l=[];for(let[s,r]of Object.entries(i)){let n=r.attribute===!1?null:r.attribute||s.replace(/[A-Z]/g,(c)=>"-"+c.toLowerCase());if(n)d[n]=s,l.push(n);if(s in O.prototype){if(!n)throw TypeError('STX prop "'+s+'" overlaps the native DOM API and needs an attribute binding');continue}Object.defineProperty(t.prototype,s,{configurable:!0,enumerable:!0,get(){return this._values[s]},set(c){let o=this._values[s];if(Object.is(o,c))return;if(this._values[s]=c,r.reflect&&n&&!this._reflecting){let m=N(c,r.type);if(this._reflecting=!0,m===null)this.removeAttribute(n);else this.setAttribute(n,m);this._reflecting=!1}this.requestUpdate(),this.dispatchEvent?.(new CustomEvent(s+"-changed",{detail:{value:c,oldValue:o},bubbles:!0,composed:!0}))}})}t.definition={...e,attributeToProperty:d,observedAttributes:l};let a=globalThis.customElements||globalThis.window?.customElements;if(a&&!a.get(e.tag))a.define(e.tag,t);return t}class b extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a}=this._props(),s="";return s+='<div class="context-menu" id="',s+=e(a),s+=`" style="display: none;">
2
+ <slot />
3
+ </div>`,s}}f(b,{tag:"stacks-context-menu",template:`<div class="context-menu" id="{{ id }}" style="display: none;">
4
+ <slot />
5
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",reflect:!0}},eventTypes:[],bindings:[]});var I=b;class h extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{icon:a="",label:s,onclick:r,hasSubmenu:n=!1}=this._props(),c="";if(n){if(c+=`
6
+ <div class="context-menu-item has-submenu">
7
+ `,a)c+=`
8
+ <div class="context-menu-item-icon">`,c+=e(a),c+=`</div>
9
+ `;c+="<div>",c+=e(s),c+=`</div>
10
+ <div class="context-submenu">
11
+ <slot />
12
+ </div>
13
+ </div>
14
+ `}else{if(c+='<button class="context-menu-item" ',r)c+='onclick="',c+=e(r),c+='"';if(c+=`>
15
+ `,a)c+=`
16
+ <div class="context-menu-item-icon">`,c+=e(a),c+=`</div>
17
+ `;c+="<div>",c+=e(s),c+=`</div>
18
+ </button>
19
+ `}return c}}f(h,{tag:"stacks-context-menu-item",template:`@if (hasSubmenu)
20
+ <div class="context-menu-item has-submenu">
21
+ @if (icon)
22
+ <div class="context-menu-item-icon">{{ icon }}</div>
23
+ @endif
24
+ <div>{{ label }}</div>
25
+ <div class="context-submenu">
26
+ <slot />
27
+ </div>
28
+ </div>
29
+ @else
30
+ <button class="context-menu-item" @if (onclick)onclick="{{ onclick }}"@endif>
31
+ @if (icon)
32
+ <div class="context-menu-item-icon">{{ icon }}</div>
33
+ @endif
34
+ <div>{{ label }}</div>
35
+ </button>
36
+ @endif`,styles:"",shadowMode:!1,progressive:!0,properties:{icon:{type:"string",default:"",reflect:!0},label:{type:"string",reflect:!0},onclick:{type:"string",reflect:!0},hasSubmenu:{type:"boolean",default:!1,reflect:!0}},eventTypes:[],bindings:[]});var W=h;class y extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a,icon:s="\uD83D\uDCC4",label:r,type:n="window",section:c="",url:o="",onclick:m,left:g="20px",top:u="20px",style:j=""}=this._props(),v="";if(v+=`<button
37
+ class="desktop-icon"
38
+ data-icon-id="`,v+=e(a),v+=`"
39
+ data-icon-type="`,v+=e(n),v+=`"
40
+ data-icon-section="`,v+=e(c),v+=`"
41
+ data-icon-url="`,v+=e(o),v+=`"
42
+ style="`,j)v+=e(j);else v+="left: ",v+=e(g),v+="; top: ",v+=e(u),v+=";";if(v+=`"
43
+ `,m)v+=`
44
+ onclick="`,v+=e(m),v+=`"
45
+ `;return v+=`>
46
+ <div class="desktop-icon-image">`,v+=e(s),v+=`</div>
47
+ <div class="desktop-icon-label">`,v+=e(r),v+=`</div>
48
+ </button>`,v}}f(y,{tag:"stacks-desktop-icon",template:`<button
49
+ class="desktop-icon"
50
+ data-icon-id="{{ id }}"
51
+ data-icon-type="{{ type }}"
52
+ data-icon-section="{{ section }}"
53
+ data-icon-url="{{ url }}"
54
+ style="@if(style){{ style }}@else left: {{ left }}; top: {{ top }};@endif"
55
+ @if (onclick)
56
+ onclick="{{ onclick }}"
57
+ @endif
58
+ >
59
+ <div class="desktop-icon-image">{{ icon }}</div>
60
+ <div class="desktop-icon-label">{{ label }}</div>
61
+ </button>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",reflect:!0},icon:{type:"string",default:"\uD83D\uDCC4",reflect:!0},label:{type:"string",reflect:!0},type:{type:"string",default:"window",reflect:!0},section:{type:"string",default:"",reflect:!0},url:{type:"string",default:"",reflect:!0},onclick:{type:"string",reflect:!0},left:{type:"string",default:"20px",reflect:!0},top:{type:"string",default:"20px",reflect:!0},style:{type:"string",default:"",reflect:!0}},eventTypes:[],bindings:[]});var B=y;class _ extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{label:a,onclick:s,active:r=!1}=this._props(),n="";if(n+=`<button
62
+ class="feature-btn `,r)n+="active";if(n+=`"
63
+ `,s)n+='onclick="',n+=e(s),n+='"';return n+=`>
64
+ `,n+=e(a),n+=`
65
+ </button>`,n}}f(_,{tag:"stacks-feature-button",template:`<button
66
+ class="feature-btn @if (active)active@endif"
67
+ @if (onclick)onclick="{{ onclick }}"@endif
68
+ >
69
+ {{ label }}
70
+ </button>`,styles:"",shadowMode:!1,progressive:!0,properties:{label:{type:"string",reflect:!0},onclick:{type:"string",reflect:!0},active:{type:"boolean",default:!1,reflect:!0}},eventTypes:[],bindings:[]});var H=_;class w extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a,label:s,type:r="text",placeholder:n="",class:c="login-input"}=this._props(),o="";return o+=`<div class="login-input-group">
71
+ <label>`,o+=e(s),o+=`:</label>
72
+ <input
73
+ type="`,o+=e(r),o+=`"
74
+ id="`,o+=e(a),o+=`"
75
+ class="`,o+=e(c),o+=`"
76
+ placeholder="`,o+=e(n),o+=`"
77
+ />
78
+ </div>`,o}}f(w,{tag:"stacks-input-group",template:`<div class="login-input-group">
79
+ <label>{{ label }}:</label>
80
+ <input
81
+ type="{{ type }}"
82
+ id="{{ id }}"
83
+ class="{{ classList }}"
84
+ placeholder="{{ placeholder }}"
85
+ />
86
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",reflect:!0},label:{type:"string",reflect:!0},type:{type:"string",default:"text",reflect:!0},placeholder:{type:"string",default:"",reflect:!0},class:{type:"string",default:"login-input",reflect:!0}},eventTypes:[],bindings:[]});var K=w;class k extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a,icon:s="\uD83D\uDC64",title:r="Login",prompt:n="Enter your credentials",submitHandler:c="handleLogin()"}=this._props(),o="";return o+='<div id="',o+=e(a),o+=`" class="hidden login-form">
87
+ <div class="login-form-background">
88
+ <div class="login-form-container">
89
+ <button class="login-close-btn" onclick="closeLoginScreens()">×</button>
90
+ <div class="login-form-header">
91
+ <button class="login-back-button" onclick="hideLoginForms()">← Back</button>
92
+ <div class="login-form-title">
93
+ <div class="login-form-icon">`,o+=e(s),o+=`</div>
94
+ <h2>`,o+=e(r),o+=`</h2>
95
+ </div>
96
+ </div>
97
+
98
+ <div class="login-form-content">
99
+ <div class="login-form-prompt">`,o+=e(n),o+=`</div>
100
+ <slot />
101
+ <div class="login-actions">
102
+ <button class="login-submit-btn" onclick="`,o+=e(c),o+=`">
103
+ <span class="login-btn-icon">→</span>
104
+ <span>Log In</span>
105
+ </button>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </div>`,o}}f(k,{tag:"stacks-login-form",template:`<div id="{{ id }}" class="hidden login-form">
111
+ <div class="login-form-background">
112
+ <div class="login-form-container">
113
+ <button class="login-close-btn" onclick="closeLoginScreens()">×</button>
114
+ <div class="login-form-header">
115
+ <button class="login-back-button" onclick="hideLoginForms()">← Back</button>
116
+ <div class="login-form-title">
117
+ <div class="login-form-icon">{{ icon }}</div>
118
+ <h2>{{ title }}</h2>
119
+ </div>
120
+ </div>
121
+
122
+ <div class="login-form-content">
123
+ <div class="login-form-prompt">{{ prompt }}</div>
124
+ <slot />
125
+ <div class="login-actions">
126
+ <button class="login-submit-btn" onclick="{{ submitHandler }}">
127
+ <span class="login-btn-icon">→</span>
128
+ <span>Log In</span>
129
+ </button>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",reflect:!0},icon:{type:"string",default:"\uD83D\uDC64",reflect:!0},title:{type:"string",default:"Login",reflect:!0},prompt:{type:"string",default:"Enter your credentials",reflect:!0},submitHandler:{type:"string",default:"handleLogin()",reflect:!0}},eventTypes:[],bindings:[]});var F=k;class x extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a="login-screen",logoText:s="STACKS",subtitle:r="To begin, click your user name"}=this._props(),n="";return n+='<div id="',n+=e(a),n+=`" class="hidden login-screen">
135
+ <div class="login-background">
136
+ <div class="login-container">
137
+ <button class="login-close-btn" onclick="closeLoginScreens()">×</button>
138
+ <div class="login-header">
139
+ <div class="login-logo">`,n+=e(s),n+=`</div>
140
+ <div class="login-subtitle">`,n+=e(r),n+=`</div>
141
+ </div>
142
+
143
+ <div class="login-users">
144
+ <slot name="login-options">
145
+ <button class="login-user-button" id="email-login-btn">
146
+ <div class="login-user-icon">\uD83D\uDC64</div>
147
+ <div class="login-user-name">Email Login</div>
148
+ </button>
149
+ <button class="login-user-button" id="license-login-btn">
150
+ <div class="login-user-icon">\uD83D\uDD11</div>
151
+ <div class="login-user-name">License Key</div>
152
+ </button>
153
+ </slot>
154
+ </div>
155
+
156
+ <div class="login-footer">
157
+ <slot name="footer">
158
+ <div class="login-footer-text">After you log in, you can access the STACKS Desktop</div>
159
+ </slot>
160
+ </div>
161
+ </div>
162
+ </div>
163
+ </div>`,n}}f(x,{tag:"stacks-login-screen",template:`<div id="{{ id }}" class="hidden login-screen">
164
+ <div class="login-background">
165
+ <div class="login-container">
166
+ <button class="login-close-btn" onclick="closeLoginScreens()">×</button>
167
+ <div class="login-header">
168
+ <div class="login-logo">{{ logoText }}</div>
169
+ <div class="login-subtitle">{{ subtitle }}</div>
170
+ </div>
171
+
172
+ <div class="login-users">
173
+ <slot name="login-options">
174
+ <button class="login-user-button" id="email-login-btn">
175
+ <div class="login-user-icon">\uD83D\uDC64</div>
176
+ <div class="login-user-name">Email Login</div>
177
+ </button>
178
+ <button class="login-user-button" id="license-login-btn">
179
+ <div class="login-user-icon">\uD83D\uDD11</div>
180
+ <div class="login-user-name">License Key</div>
181
+ </button>
182
+ </slot>
183
+ </div>
184
+
185
+ <div class="login-footer">
186
+ <slot name="footer">
187
+ <div class="login-footer-text">After you log in, you can access the STACKS Desktop</div>
188
+ </slot>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",default:"login-screen",reflect:!0},logoText:{type:"string",default:"STACKS",reflect:!0},subtitle:{type:"string",default:"To begin, click your user name",reflect:!0}},eventTypes:[],bindings:[]});var U=x;class S extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a="notification-popup",title:s="Notifications",showSignup:r=!0}=this._props(),n="";if(n+='<div class="notification-popup" id="',n+=e(a),n+=`" style="display: none;">
193
+ <div class="notification-header">
194
+ <span class="notification-title">`,n+=e(s),n+=`</span>
195
+ <button class="notification-close" onclick="closeNotificationPopup()">×</button>
196
+ </div>
197
+ <div class="notification-content">
198
+ <slot />
199
+ </div>
200
+ `,r)n+=`
201
+ <div class="notification-signup" id="notification-signup">
202
+ <div class="notification-separator"></div>
203
+ <div class="notification-signup-text">Get updates on new features & releases:</div>
204
+ <div class="notification-signup-form">
205
+ <input
206
+ type="email"
207
+ id="notification-email"
208
+ class="notification-email-input"
209
+ placeholder="your@email.com"
210
+ autocomplete="email"
211
+ />
212
+ <button class="notification-signup-btn" onclick="handleEmailSignup()">
213
+ Sign Up
214
+ </button>
215
+ </div>
216
+ </div>
217
+ <div class="notification-success" id="notification-success" style="display: none;">
218
+ <div class="notification-separator"></div>
219
+ <div class="notification-success-content">
220
+ <div class="notification-success-icon">✓</div>
221
+ <div class="notification-success-text">
222
+ <div class="notification-success-title">Thanks for subscribing!</div>
223
+ <div class="notification-success-subtitle">We'll keep you updated.</div>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ `;return n+="</div>",n}}f(S,{tag:"stacks-notification-popup",template:`<div class="notification-popup" id="{{ id }}" style="display: none;">
228
+ <div class="notification-header">
229
+ <span class="notification-title">{{ title }}</span>
230
+ <button class="notification-close" onclick="closeNotificationPopup()">×</button>
231
+ </div>
232
+ <div class="notification-content">
233
+ <slot />
234
+ </div>
235
+ @if (showSignup)
236
+ <div class="notification-signup" id="notification-signup">
237
+ <div class="notification-separator"></div>
238
+ <div class="notification-signup-text">Get updates on new features & releases:</div>
239
+ <div class="notification-signup-form">
240
+ <input
241
+ type="email"
242
+ id="notification-email"
243
+ class="notification-email-input"
244
+ placeholder="your@email.com"
245
+ autocomplete="email"
246
+ />
247
+ <button class="notification-signup-btn" onclick="handleEmailSignup()">
248
+ Sign Up
249
+ </button>
250
+ </div>
251
+ </div>
252
+ <div class="notification-success" id="notification-success" style="display: none;">
253
+ <div class="notification-separator"></div>
254
+ <div class="notification-success-content">
255
+ <div class="notification-success-icon">✓</div>
256
+ <div class="notification-success-text">
257
+ <div class="notification-success-title">Thanks for subscribing!</div>
258
+ <div class="notification-success-subtitle">We'll keep you updated.</div>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ @endif
263
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",default:"notification-popup",reflect:!0},title:{type:"string",default:"Notifications",reflect:!0},showSignup:{type:"boolean",default:!0,reflect:!0}},eventTypes:[],bindings:[]});var J=S;class E extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{emoji:a,title:s,description:r}=this._props(),n="";return n+=`<div class="package-item">
264
+ <div class="package-emoji">`,n+=e(a),n+=`</div>
265
+ <div class="package-title">`,n+=e(s),n+=`</div>
266
+ <div class="package-desc">`,n+=e(r),n+=`</div>
267
+ </div>`,n}}f(E,{tag:"stacks-package-item",template:`<div class="package-item">
268
+ <div class="package-emoji">{{ emoji }}</div>
269
+ <div class="package-title">{{ title }}</div>
270
+ <div class="package-desc">{{ description }}</div>
271
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{emoji:{type:"string",reflect:!0},title:{type:"string",reflect:!0},description:{type:"string",reflect:!0}},eventTypes:[],bindings:[]});var G=E;class C extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a="start-menu",userName:s="Developer",userImage:r="\uD83D\uDC64"}=this._props(),n="";return n+='<div class="start-menu" id="',n+=e(a),n+=`" style="display: none;">
272
+ <div class="start-menu-header">
273
+ <div class="start-menu-user-image">`,n+=e(r),n+=`</div>
274
+ <div class="start-menu-user-name">`,n+=e(s),n+=`</div>
275
+ </div>
276
+
277
+ <div class="start-menu-content">
278
+ <div class="start-menu-left">
279
+ <div class="start-menu-pinned">
280
+ <slot name="pinned-items" />
281
+ </div>
282
+ <div class="start-menu-separator"></div>
283
+ <slot name="all-programs">
284
+ <button class="start-menu-item all-programs">
285
+ <span>All Programs</span>
286
+ <span class="arrow">▸</span>
287
+ </button>
288
+ </slot>
289
+ </div>
290
+
291
+ <div class="start-menu-right">
292
+ <slot name="right-items" />
293
+ </div>
294
+ </div>
295
+
296
+ <div class="start-menu-footer">
297
+ <slot name="footer">
298
+ <button class="start-menu-footer-btn" onclick="showLoginScreen()">
299
+ <span class="footer-icon">\uD83D\uDD11</span>
300
+ <span>Log Off</span>
301
+ </button>
302
+ <button class="start-menu-footer-btn" onclick="window.location.reload()">
303
+ <span class="footer-icon">\uD83D\uDD04</span>
304
+ <span>Restart</span>
305
+ </button>
306
+ </slot>
307
+ </div>
308
+ </div>`,n}}f(C,{tag:"stacks-start-menu",template:`<div class="start-menu" id="{{ id }}" style="display: none;">
309
+ <div class="start-menu-header">
310
+ <div class="start-menu-user-image">{{ userImage }}</div>
311
+ <div class="start-menu-user-name">{{ userName }}</div>
312
+ </div>
313
+
314
+ <div class="start-menu-content">
315
+ <div class="start-menu-left">
316
+ <div class="start-menu-pinned">
317
+ <slot name="pinned-items" />
318
+ </div>
319
+ <div class="start-menu-separator"></div>
320
+ <slot name="all-programs">
321
+ <button class="start-menu-item all-programs">
322
+ <span>All Programs</span>
323
+ <span class="arrow">▸</span>
324
+ </button>
325
+ </slot>
326
+ </div>
327
+
328
+ <div class="start-menu-right">
329
+ <slot name="right-items" />
330
+ </div>
331
+ </div>
332
+
333
+ <div class="start-menu-footer">
334
+ <slot name="footer">
335
+ <button class="start-menu-footer-btn" onclick="showLoginScreen()">
336
+ <span class="footer-icon">\uD83D\uDD11</span>
337
+ <span>Log Off</span>
338
+ </button>
339
+ <button class="start-menu-footer-btn" onclick="window.location.reload()">
340
+ <span class="footer-icon">\uD83D\uDD04</span>
341
+ <span>Restart</span>
342
+ </button>
343
+ </slot>
344
+ </div>
345
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",default:"start-menu",reflect:!0},userName:{type:"string",default:"Developer",reflect:!0},userImage:{type:"string",default:"\uD83D\uDC64",reflect:!0}},eventTypes:[],bindings:[]});var Z=C;class D extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{icon:a="\uD83D\uDCC4",label:s,onclick:r,url:n,highlighted:c=!1}=this._props(),o="";if(n)o+=`
346
+ <button
347
+ class="start-menu-item `,o+=e(c?"highlighted":""),o+=`"
348
+ onclick="window.open('`,o+=e(n),o+=`', '_blank')"
349
+ >
350
+ <span class="start-menu-item-icon">`,o+=e(a),o+=`</span>
351
+ <span class="start-menu-item-label">`,o+=e(s),o+=`</span>
352
+ </button>
353
+ `;else if(r)o+=`
354
+ <button
355
+ class="start-menu-item `,o+=e(c?"highlighted":""),o+=`"
356
+ onclick="`,o+=e(r),o+=`"
357
+ >
358
+ <span class="start-menu-item-icon">`,o+=e(a),o+=`</span>
359
+ <span class="start-menu-item-label">`,o+=e(s),o+=`</span>
360
+ </button>
361
+ `;else o+=`<button
362
+ class="start-menu-item `,o+=e(c?"highlighted":""),o+=`"
363
+ >
364
+ <span class="start-menu-item-icon">`,o+=e(a),o+=`</span>
365
+ <span class="start-menu-item-label">`,o+=e(s),o+=`</span>
366
+ </button>
367
+ `;return o}}f(D,{tag:"stacks-start-menu-item",template:`@if (url)
368
+ <button
369
+ class="start-menu-item {{ highlighted ? 'highlighted' : '' }}"
370
+ onclick="window.open('{{ url }}', '_blank')"
371
+ >
372
+ <span class="start-menu-item-icon">{{ icon }}</span>
373
+ <span class="start-menu-item-label">{{ label }}</span>
374
+ </button>
375
+ @elseif (onclick)
376
+ <button
377
+ class="start-menu-item {{ highlighted ? 'highlighted' : '' }}"
378
+ onclick="{{ onclick }}"
379
+ >
380
+ <span class="start-menu-item-icon">{{ icon }}</span>
381
+ <span class="start-menu-item-label">{{ label }}</span>
382
+ </button>
383
+ @else
384
+ <button
385
+ class="start-menu-item {{ highlighted ? 'highlighted' : '' }}"
386
+ >
387
+ <span class="start-menu-item-icon">{{ icon }}</span>
388
+ <span class="start-menu-item-label">{{ label }}</span>
389
+ </button>
390
+ @endif`,styles:"",shadowMode:!1,progressive:!0,properties:{icon:{type:"string",default:"\uD83D\uDCC4",reflect:!0},label:{type:"string",reflect:!0},onclick:{type:"string",reflect:!0},url:{type:"string",reflect:!0},highlighted:{type:"boolean",default:!1,reflect:!0}},eventTypes:[],bindings:[]});var X=D;class T extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{showStartMenu:a=!0}=this._props(),s="";if(s+=`<div class="taskbar">
391
+ `,a)s+=`
392
+ <button class="start-button" onclick="toggleStartMenu()">
393
+ <div class="start-button-flag">
394
+ <div class="flag-red"></div>
395
+ <div class="flag-green"></div>
396
+ <div class="flag-blue"></div>
397
+ <div class="flag-yellow"></div>
398
+ </div>
399
+ <span>Start</span>
400
+ </button>
401
+ `;return s+=`<div class="quick-launch">
402
+ <slot name="quick-launch" />
403
+ </div>
404
+
405
+ <div class="taskbar-windows" id="taskbar-windows">
406
+ <slot name="taskbar-windows" />
407
+ </div>
408
+
409
+ <div class="system-tray">
410
+ <slot name="system-tray">
411
+ <button class="tray-icon" onclick="toggleNotificationPopup()">\uD83D\uDD14</button>
412
+ <button class="tray-icon" onclick="window.open('https://github.com/stacksjs/stacks', '_blank')">\uD83D\uDCBB</button>
413
+ <button class="tray-icon" onclick="window.open('https://stacksjs.com/discord', '_blank')">\uD83D\uDCAC</button>
414
+ </slot>
415
+ <div class="clock" id="clock"></div>
416
+ </div>
417
+ </div>`,s}}f(T,{tag:"stacks-taskbar",template:`<div class="taskbar">
418
+ @if (showStartMenu)
419
+ <button class="start-button" onclick="toggleStartMenu()">
420
+ <div class="start-button-flag">
421
+ <div class="flag-red"></div>
422
+ <div class="flag-green"></div>
423
+ <div class="flag-blue"></div>
424
+ <div class="flag-yellow"></div>
425
+ </div>
426
+ <span>Start</span>
427
+ </button>
428
+ @endif
429
+
430
+ <div class="quick-launch">
431
+ <slot name="quick-launch" />
432
+ </div>
433
+
434
+ <div class="taskbar-windows" id="taskbar-windows">
435
+ <slot name="taskbar-windows" />
436
+ </div>
437
+
438
+ <div class="system-tray">
439
+ <slot name="system-tray">
440
+ <button class="tray-icon" onclick="toggleNotificationPopup()">\uD83D\uDD14</button>
441
+ <button class="tray-icon" onclick="window.open('https://github.com/stacksjs/stacks', '_blank')">\uD83D\uDCBB</button>
442
+ <button class="tray-icon" onclick="window.open('https://stacksjs.com/discord', '_blank')">\uD83D\uDCAC</button>
443
+ </slot>
444
+ <div class="clock" id="clock"></div>
445
+ </div>
446
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{showStartMenu:{type:"boolean",default:!0,reflect:!0}},eventTypes:[],bindings:[]});var Q=T;class A extends p{render(t){let{escape:e,raw:i,values:d,entries:l}=t,{id:a,icon:s="\uD83D\uDCC4",title:r,left:n="100px",top:c="80px",width:o="600px",height:m="500px",style:g=""}=this._props(),u="";if(u+='<div id="window-',u+=e(a),u+='" class="window" style="',g)u+=e(g);else u+="left: ",u+=e(n),u+="; top: ",u+=e(c),u+="; width: ",u+=e(o),u+="; height: ",u+=e(m),u+=";";return u+=`">
447
+ <div class="window-titlebar">
448
+ <div class="window-icon">`,u+=e(s),u+=`</div>
449
+ <div class="window-title">`,u+=e(r),u+=`</div>
450
+ <div class="window-controls">
451
+ <button class="minimize window-control" onclick="minimizeWindow('`,u+=e(a),u+=`')">_</button>
452
+ <button class="maximize window-control" onclick="toggleMaximizeWindow('`,u+=e(a),u+=`')">□</button>
453
+ <button class="close window-control" onclick="closeWindow('`,u+=e(a),u+=`')">×</button>
454
+ </div>
455
+ </div>
456
+ <div class="window-content">
457
+ <slot />
458
+ </div>
459
+ </div>`,u}}f(A,{tag:"stacks-window",template:`<div id="window-{{ id }}" class="window" style="@if(style){{ style }}@else left: {{ left }}; top: {{ top }}; width: {{ width }}; height: {{ height }};@endif">
460
+ <div class="window-titlebar">
461
+ <div class="window-icon">{{ icon }}</div>
462
+ <div class="window-title">{{ title }}</div>
463
+ <div class="window-controls">
464
+ <button class="minimize window-control" onclick="minimizeWindow('{{ id }}')">_</button>
465
+ <button class="maximize window-control" onclick="toggleMaximizeWindow('{{ id }}')">□</button>
466
+ <button class="close window-control" onclick="closeWindow('{{ id }}')">×</button>
467
+ </div>
468
+ </div>
469
+ <div class="window-content">
470
+ <slot />
471
+ </div>
472
+ </div>`,styles:"",shadowMode:!1,progressive:!0,properties:{id:{type:"string",reflect:!0},icon:{type:"string",default:"\uD83D\uDCC4",reflect:!0},title:{type:"string",reflect:!0},left:{type:"string",default:"100px",reflect:!0},top:{type:"string",default:"80px",reflect:!0},width:{type:"string",default:"600px",reflect:!0},height:{type:"string",default:"500px",reflect:!0},style:{type:"string",default:"",reflect:!0}},eventTypes:[],bindings:[]});var V=A;export{b as ContextMenu,I as ContextMenuElement,h as ContextMenuItem,W as ContextMenuItemElement,y as DesktopIcon,B as DesktopIconElement,_ as FeatureButton,H as FeatureButtonElement,w as InputGroup,K as InputGroupElement,k as LoginForm,F as LoginFormElement,x as LoginScreen,U as LoginScreenElement,S as NotificationPopup,J as NotificationPopupElement,E as PackageItem,G as PackageItemElement,C as StartMenu,Z as StartMenuElement,D as StartMenuItem,X as StartMenuItemElement,T as Taskbar,Q as TaskbarElement,A as Window,V as WindowElement};
473
+
474
+ //# debugId=ACA2F932EBB98A3364756E2164756E21