@stacksjs/stx 0.2.345 → 0.2.346

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 (60) hide show
  1. package/dist/{chunk-kqzpmwx2.js → chunk-1bws4afs.js} +183 -171
  2. package/dist/{chunk-72yrrggn.js → chunk-1caep9rn.js} +1 -1
  3. package/dist/{chunk-qr3zcm87.js → chunk-1djdz98r.js} +1 -1
  4. package/dist/{chunk-nqz501eq.js → chunk-1vyz6kr8.js} +2 -2
  5. package/dist/{chunk-1t4ece3v.js → chunk-1xayahc6.js} +1 -1
  6. package/dist/{chunk-fp868yhg.js → chunk-1xts7768.js} +1 -1
  7. package/dist/{chunk-z8wb7kbj.js → chunk-21mmq3aj.js} +1 -1
  8. package/dist/{chunk-8rhjt6fh.js → chunk-3pggfwbf.js} +1 -1
  9. package/dist/{chunk-7g5vk4c3.js → chunk-5hhng72w.js} +1 -1
  10. package/dist/{chunk-rzda6bd6.js → chunk-7hjjckat.js} +1 -1
  11. package/dist/{chunk-h1vax4wg.js → chunk-7w66sc17.js} +1 -1
  12. package/dist/{chunk-jnbg3e4r.js → chunk-864m3xp2.js} +1 -1
  13. package/dist/{chunk-6wmjwbq9.js → chunk-8tghv8cf.js} +1 -1
  14. package/dist/{chunk-9qtf2b1p.js → chunk-akb6mgrb.js} +1 -1
  15. package/dist/{chunk-ybx8n794.js → chunk-b08taxsf.js} +1 -1
  16. package/dist/{chunk-1vtdege3.js → chunk-bxwanj4g.js} +1 -1
  17. package/dist/{chunk-6fwp7gee.js → chunk-byn0ptqt.js} +1 -1
  18. package/dist/{chunk-7m9qk7da.js → chunk-ddsgfmhv.js} +1 -1
  19. package/dist/{chunk-1vv9g6cj.js → chunk-dyy74sdv.js} +1 -1
  20. package/dist/{chunk-b5mnam29.js → chunk-es275g3w.js} +1 -1
  21. package/dist/{chunk-3zm4hgcf.js → chunk-fvvdq3ev.js} +1 -1
  22. package/dist/{chunk-66tgkvqw.js → chunk-fynb9e02.js} +1 -1
  23. package/dist/{chunk-77p1kjg2.js → chunk-hfvknn03.js} +1 -1
  24. package/dist/{chunk-xq0e2y4x.js → chunk-j8s9akdq.js} +1 -1
  25. package/dist/{chunk-qkdcbeaw.js → chunk-jwe0cwff.js} +1 -1
  26. package/dist/{chunk-1qyg1q6d.js → chunk-k5hv1qqy.js} +1 -1
  27. package/dist/{chunk-gvemapw4.js → chunk-k80kr2t2.js} +1 -1
  28. package/dist/{chunk-xrjx7b2v.js → chunk-km92eab7.js} +1 -1
  29. package/dist/{chunk-zwr4bn6a.js → chunk-maq5jag2.js} +1 -1
  30. package/dist/{chunk-yca761bm.js → chunk-p04rck27.js} +1 -1
  31. package/dist/{chunk-c4tf1vpy.js → chunk-pc8np1bb.js} +1 -1
  32. package/dist/{chunk-mr8ccsnm.js → chunk-q45fva8h.js} +1 -1
  33. package/dist/{chunk-ek2m0kkw.js → chunk-qp7sk0ex.js} +1 -1
  34. package/dist/{chunk-aapqf6bj.js → chunk-rf2cejt3.js} +1 -1
  35. package/dist/{chunk-vhg91hnw.js → chunk-rwk5hwvk.js} +1 -1
  36. package/dist/{chunk-cypg8qwn.js → chunk-s11e8aq9.js} +1 -1
  37. package/dist/{chunk-zmazqcb8.js → chunk-s3jyec9k.js} +1 -1
  38. package/dist/{chunk-r38xq7fp.js → chunk-skd72bn4.js} +2 -2
  39. package/dist/{chunk-nrt99ptw.js → chunk-t2py7vc3.js} +1 -1
  40. package/dist/{chunk-2fhk4e68.js → chunk-t83m2pkm.js} +1 -1
  41. package/dist/{chunk-223makqc.js → chunk-tnm0nez5.js} +1 -1
  42. package/dist/{chunk-pajk5680.js → chunk-vw83y4we.js} +2 -2
  43. package/dist/{chunk-c8e2deyp.js → chunk-vzbcdxd5.js} +1 -1
  44. package/dist/{chunk-57t402mn.js → chunk-washyj03.js} +1 -1
  45. package/dist/{chunk-e7gs18rc.js → chunk-wbp4vbm0.js} +1 -1
  46. package/dist/{chunk-esjcyxa9.js → chunk-xytgvfbf.js} +2 -2
  47. package/dist/{chunk-4spaszfn.js → chunk-zdq7emrd.js} +322 -322
  48. package/dist/{chunk-eqzc88et.js → chunk-zz2yxsf9.js} +1 -1
  49. package/dist/cli.js +7 -7
  50. package/dist/component-library.d.ts +0 -31
  51. package/dist/component-library.js +279 -17
  52. package/dist/craft-entry.js +1 -1
  53. package/dist/craft.js +1 -1
  54. package/dist/process.js +25 -3
  55. package/dist/pwa.js +1 -1
  56. package/dist/ssg.js +2 -2
  57. package/dist/theme-tokens.js +9 -5
  58. package/dist/variable-extractor.d.ts +31 -0
  59. package/dist/variable-extractor.js +9 -5
  60. package/package.json +5 -5
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Xe as F$}from"./chunk-zmazqcb8.js";import{Yf as u7,ag as z$,bg as h6,cg as E6,eg as B1,fg as d6,gg as J5,hg as H$,ig as O$,jg as u6,kg as m6,og as B5}from"./chunk-esjcyxa9.js";import{aj as f5}from"./chunk-9jbssgem.js";import{qj as l1,rj as I1,sj as R1,tj as i$,uj as a$,vj as a5,xj as r5}from"./chunk-e4g8wz6t.js";import{Uj as K$,Vj as _$}from"./chunk-nrt99ptw.js";import{wk as m5,xk as p5}from"./chunk-v7aa7v85.js";import{Dk as o7,Ek as t7}from"./chunk-c0n802j1.js";import{Yk as U1}from"./chunk-223makqc.js";import{rl as A5,sl as U8}from"./chunk-77p1kjg2.js";import{Am as n0,Ho as M0,Jp as V0,Ro as o0,Sm as y6,Vl as O8,Wm as G5,Zm as T1,Zn as W$,_m as C1,dr as U$,fp as p7,hq as G6,io as j$,iq as x1,ko as v6,lo as A6,mm as d7,mp as g6,mq as t0,np as f6,qr as T$,sr as s0,tr as w0,xr as T0}from"./chunk-4spaszfn.js";import{Es as Z5,Ys as B,dt as B$,et as L$,it as J0}from"./chunk-r38xq7fp.js";import{nt as u0}from"./chunk-y2f41kaq.js";import{$u as O6,Du as r1,Gu as H6,Ou as e$,Qu as $5,Tu as s1,Xu as X5,_u as G$,lv as J6}from"./chunk-avwywzsj.js";import{Dw as V6,Yv as Y5,Zv as M6,bw as D6,cw as w6,rw as T6,sw as C6,tw as k6,uw as x6,vw as S6,ww as P6,yw as b6}from"./chunk-yg5r7bnm.js";import{Nw as r}from"./chunk-ejqpq0wc.js";var s5={read:($)=>{try{return JSON.parse($)}catch{return $}},write:($)=>{return JSON.stringify($)}};function J3($,X,Z={}){let{storage:Q="local",serializer:Y=s5,mergeDefaults:J=!1,listenToStorageChanges:G=!0}=Z,W=new Set,K=typeof window<"u",_=()=>{if(!K)return null;return Q==="session"?sessionStorage:localStorage},U=()=>{let L=_();if(!L)return X;try{let O=L.getItem($);if(O===null)return X;let A=Y.read(O);if(J&&typeof X==="object"&&X!==null)return{...X,...A};return A}catch{return X}},F=(L)=>{let O=_();if(!O)return;try{if(L===null||L===void 0)O.removeItem($);else O.setItem($,Y.write(L))}catch(A){console.warn(`[useStorage] Failed to write key "${$}":`,A)}},z=U(),j=(L,O)=>{for(let A of W)try{A(L,O)}catch(V){console.error("[useStorage] Subscriber error:",V)}};if(K&&G){let L=(A)=>{if(A.key===$&&A.storageArea===_()){let V=z;try{z=A.newValue?Y.read(A.newValue):X}catch(E){console.warn(`[useStorage] Failed to read key "${$}" from a cross-tab update:`,E);return}j(z,V)}};window.addEventListener("storage",L);let O=globalThis.onDestroy;if(typeof O==="function")O(()=>window.removeEventListener("storage",L))}let H={get value(){return z},set value(L){let O=z;z=L,F(L),j(L,O)},get:()=>z,set:(L)=>{H.value=L},remove:()=>{let L=_();if(L){L.removeItem($);let O=z;z=X,j(X,O)}},subscribe:(L)=>{return W.add(L),L(z,void 0),()=>W.delete(L)}};return H}function n5($,X,Z,Q,Y={}){let{serializer:J=s5,mergeDefaults:G=!1,listenToStorageChanges:W=!0}=Y,K=typeof window<"u",_=()=>{if(!K)return null;return $==="session"?sessionStorage:localStorage},U=(j)=>{if(j===null||j===void 0)return Q;try{let H=J.read(j);if(G&&typeof Q==="object"&&Q!==null)return{...Q,...H};return H}catch(H){return console.warn(`[${X}] Failed to read key "${Z}":`,H),Q}},z=a5((()=>{let j=_();if(!j)return Q;try{return U(j.getItem(Z))}catch(H){return console.warn(`[${X}] Cannot read "${Z}":`,H),Q}})());if(r5(()=>{let j=z(),H=_();if(!H)return;try{if(j===null||j===void 0)H.removeItem(Z);else H.setItem(Z,J.write(j))}catch(L){console.warn(`[${X}] Cannot persist "${Z}":`,L)}}),K&&W){let j=(L)=>{if(L.key!==Z)return;if(L.storageArea&&L.storageArea!==_())return;z.set(U(L.newValue))};window.addEventListener("storage",j);let H=globalThis.onDestroy;if(typeof H==="function")H(()=>window.removeEventListener("storage",j))}return z}function G3($,X,Z){return n5("local","useLocalStorage",$,X,Z)}function W3($,X,Z){return n5("session","useSessionStorage",$,X,Z)}function K3($="local"){if(typeof window>"u")return;($==="session"?sessionStorage:localStorage).clear()}function _3($="local"){if(typeof window>"u")return[];let X=$==="session"?sessionStorage:localStorage;return Object.keys(X)}function U3($="local"){if(typeof window>"u")return 0;let X=$==="session"?sessionStorage:localStorage,Z=0;for(let Q in X)if(Object.prototype.hasOwnProperty.call(X,Q))Z+=(Q.length+(X.getItem(Q)?.length||0))*2;return Z}var t=null;function c1($,X,Z=new WeakSet){if(Object.is($,X))return!0;if(typeof $!=="object"||typeof X!=="object"||$===null||X===null)return!1;if(Z.has($))return!0;if(Z.add($),$ instanceof Date&&X instanceof Date)return $.getTime()===X.getTime();if($ instanceof RegExp&&X instanceof RegExp)return $.source===X.source&&$.flags===X.flags;if(Array.isArray($)){if(!Array.isArray(X)||$.length!==X.length)return!1;for(let J=0;J<$.length;J++)if(!c1($[J],X[J],Z))return!1;return!0}if(Array.isArray(X))return!1;if($ instanceof Map){if(!(X instanceof Map)||$.size!==X.size)return!1;for(let[J,G]of $)if(!X.has(J)||!c1(G,X.get(J),Z))return!1;return!0}if(X instanceof Map)return!1;if($ instanceof Set){if(!(X instanceof Set)||$.size!==X.size)return!1;for(let J of $)if(!X.has(J))return!1;return!0}if(X instanceof Set)return!1;let Q=Object.keys($),Y=Object.keys(X);if(Q.length!==Y.length)return!1;for(let J of Q){if(!Object.prototype.hasOwnProperty.call(X,J))return!1;if(!c1($[J],X[J],Z))return!1}return!0}function YJ($){t=$}function JJ(){return t}function GJ(){return{isMounted:!1,isUnmounted:!1,hooks:{beforeMount:[],mounted:[],beforeUpdate:[],updated:[],beforeUnmount:[],unmounted:[]},effects:[],scope:B3()}}function B3(){return{refs:new Map,effects:new Set,cleanups:[]}}function WJ($){let X=new Set,Z=new Set,Q=$,Y=Symbol("ref"),J={get value(){let G=l1();if(G)Z.add(G);return Q},set value(G){if(!Object.is(G,Q)){let W=Q;Q=G;for(let K of X)K(G,W);for(let K of Z)if(i$())a$(K);else K()}},subscribe(G){return X.add(G),()=>{X.delete(G)}}};if(t)t.scope.refs.set(Y,J);return J}var o5=new WeakMap;function L3($){let X=o5.get($);if(X)return X;let Z=new Map,Q=(G)=>{let W=Z.get(G);if(!W)return;for(let K of[...W])if(i$())a$(K);else K()},Y=(G,W)=>{if(!Z.has(G))Z.set(G,new Set);return Z.get(G).add(W),()=>{Z.get(G)?.delete(W)}},J=new Proxy($,{get(G,W,K){let _=Reflect.get(G,W,K),U=l1();if(U)Y(W,U);if(_!==null&&typeof _==="object"&&!Array.isArray(_)){let F=Object.getPrototypeOf(_);if(F===Object.prototype||F===null)return L3(_)}return _},set(G,W,K,_){let U=Reflect.get(G,W,_),F=Reflect.set(G,W,K,_);if(!Object.is(K,U))Q(W);return F},deleteProperty(G,W){let K=Reflect.deleteProperty(G,W);return Q(W),K}});return o5.set($,J),J}function KJ($){let X,Z=!0,Q=new Set,Y=new Set,J=()=>{Z=!0,G()},G=()=>{if(Z){let K=X,_=I1(J);if(X=$(),R1(_),Z=!1,!Object.is(X,K)){for(let U of Q)U(X,K);for(let U of Y)U()}}},W=I1(J);return X=$(),Z=!1,R1(W),{get value(){let K=l1();if(K)Y.add(K);return G(),X},set value(K){console.warn("[stx] Computed properties are readonly")},subscribe(K){return Q.add(K),()=>{Q.delete(K)}}}}function F3($){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(()=>{requestAnimationFrame($)});return}setTimeout($,0)}function _J($,X,Z={}){let{immediate:Q=!1,deep:Y=!1,flush:J="post"}=Z,G,W,K=!1,_=()=>{if(K)return;let H=j();if((Y?!c1(H,G):!Object.is(H,G))||Q)if(X(H,G),Y&&H!==null&&typeof H==="object")try{G=structuredClone(H)}catch{G=H}else G=H},U=(H)=>{if(J==="sync")H();else if(J==="pre")Promise.resolve().then(H);else F3(H)},F=!1,z=()=>{if(K||F)return;F=!0,U(()=>{F=!1,_()})},j=()=>{if(typeof $==="function"){let H=I1(z);try{return $()}finally{R1(H)}}return $.value};if(typeof $!=="function"){let H=$.subscribe(()=>{U(_)});W=()=>{K=!0,H()}}else W=()=>{K=!0};if(G=j(),Q)U(_);if(t)t.scope.cleanups.push(()=>W?.());return()=>W?.()}function UJ($,X,Z={}){let Q=[],Y=$.map((J)=>J.value);for(let J of $){let G=J.subscribe(()=>{let W=$.map((K)=>K.value);X(W,Y),Y=[...W]});Q.push(G)}if(Z.immediate){let J=$.map((G)=>G.value);X(J,Y)}return()=>{for(let J of Q)J()}}function BJ($){let X,Z=!1,Q=()=>{if(Z)return;if(X)X();let Y=I1(Q);X=$(),R1(Y)};if(Q(),t)t.scope.cleanups.push(()=>{if(Z=!0,X)X()});return()=>{if(Z=!0,X)X()}}function LJ($){if(t)t.hooks.beforeMount.push($);else console.warn("[stx] onBeforeMount called outside of component setup")}function FJ($){if(t)t.hooks.mounted.push($);else console.warn("[stx] onMounted called outside of component setup")}function zJ($){if(t)t.hooks.beforeUpdate.push($);else console.warn("[stx] onBeforeUpdate called outside of component setup")}function jJ($){if(t)t.hooks.updated.push($);else console.warn("[stx] onUpdated called outside of component setup")}function HJ($){if(t)t.hooks.beforeUnmount.push($);else console.warn("[stx] onBeforeUnmount called outside of component setup")}function OJ($){if(t)t.hooks.unmounted.push($);else console.warn("[stx] onUnmounted called outside of component setup")}async function Y1($,X){let Z=$.hooks[X];for(let Q of Z)await Q()}async function AJ($){await Y1($,"beforeMount"),$.isMounted=!0,await Y1($,"mounted")}async function qJ($){if(!$.isMounted||$.isUnmounted)return;await Y1($,"beforeUpdate"),await Y1($,"updated")}async function NJ($){if($.isUnmounted)return;await Y1($,"beforeUnmount");for(let X of $.scope.cleanups)X();$.isUnmounted=!0,await Y1($,"unmounted")}function MJ(){return`
2
+ import{Xe as z$}from"./chunk-s3jyec9k.js";import{Yf as i7,ag as j$,bg as c6,cg as T6,eg as B1,fg as l6,gg as K5,hg as O$,ig as A$,jg as i6,kg as a6,og as z5}from"./chunk-xytgvfbf.js";import{aj as u5}from"./chunk-9jbssgem.js";import{qj as l1,rj as I1,sj as R1,tj as a$,uj as s$,vj as n5,xj as o5}from"./chunk-e4g8wz6t.js";import{Uj as _$,Vj as U$}from"./chunk-t2py7vc3.js";import{wk as l5,xk as i5}from"./chunk-v7aa7v85.js";import{Dk as Z3,Ek as Q3}from"./chunk-c0n802j1.js";import{Yk as U1}from"./chunk-tnm0nez5.js";import{rl as M5,sl as j8}from"./chunk-hfvknn03.js";import{Am as n0,Ho as M0,Jp as V0,Ro as o0,Sm as d6,Vl as V8,Wm as _5,Zm as T1,Zn as K$,_m as C1,dr as B$,fp as s7,hq as _6,io as H$,iq as x1,ko as u6,lo as E6,mm as l7,mp as m6,mq as t0,np as p6,qr as C$,sr as r0,tr as w0,xr as T0}from"./chunk-zdq7emrd.js";import{Es as J5,Ys as B,dt as L$,et as F$,it as J0}from"./chunk-skd72bn4.js";import{nt as u0}from"./chunk-y2f41kaq.js";import{$u as V6,Du as s1,Gu as M6,Ou as Z5,Qu as Q5,Tu as r1,Xu as Y5,_u as W$,lv as K6}from"./chunk-avwywzsj.js";import{Dw as w6,Yv as W5,Zv as D6,bw as x6,cw as S6,rw as P6,sw as b6,tw as y6,uw as v6,vw as g6,ww as f6,yw as h6}from"./chunk-yg5r7bnm.js";import{Nw as s}from"./chunk-ejqpq0wc.js";var t5={read:($)=>{try{return JSON.parse($)}catch{return $}},write:($)=>{return JSON.stringify($)}};function U3($,X,Z={}){let{storage:Q="local",serializer:Y=t5,mergeDefaults:J=!1,listenToStorageChanges:G=!0}=Z,W=new Set,K=typeof window<"u",_=()=>{if(!K)return null;return Q==="session"?sessionStorage:localStorage},U=()=>{let L=_();if(!L)return X;try{let O=L.getItem($);if(O===null)return X;let A=Y.read(O);if(J&&typeof X==="object"&&X!==null)return{...X,...A};return A}catch{return X}},F=(L)=>{let O=_();if(!O)return;try{if(L===null||L===void 0)O.removeItem($);else O.setItem($,Y.write(L))}catch(A){console.warn(`[useStorage] Failed to write key "${$}":`,A)}},z=U(),j=(L,O)=>{for(let A of W)try{A(L,O)}catch(M){console.error("[useStorage] Subscriber error:",M)}};if(K&&G){let L=(A)=>{if(A.key===$&&A.storageArea===_()){let M=z;try{z=A.newValue?Y.read(A.newValue):X}catch(V){console.warn(`[useStorage] Failed to read key "${$}" from a cross-tab update:`,V);return}j(z,M)}};window.addEventListener("storage",L);let O=globalThis.onDestroy;if(typeof O==="function")O(()=>window.removeEventListener("storage",L))}let H={get value(){return z},set value(L){let O=z;z=L,F(L),j(L,O)},get:()=>z,set:(L)=>{H.value=L},remove:()=>{let L=_();if(L){L.removeItem($);let O=z;z=X,j(X,O)}},subscribe:(L)=>{return W.add(L),L(z,void 0),()=>W.delete(L)}};return H}function e5($,X,Z,Q,Y={}){let{serializer:J=t5,mergeDefaults:G=!1,listenToStorageChanges:W=!0}=Y,K=typeof window<"u",_=()=>{if(!K)return null;return $==="session"?sessionStorage:localStorage},U=(j)=>{if(j===null||j===void 0)return Q;try{let H=J.read(j);if(G&&typeof Q==="object"&&Q!==null)return{...Q,...H};return H}catch(H){return console.warn(`[${X}] Failed to read key "${Z}":`,H),Q}},z=n5((()=>{let j=_();if(!j)return Q;try{return U(j.getItem(Z))}catch(H){return console.warn(`[${X}] Cannot read "${Z}":`,H),Q}})());if(o5(()=>{let j=z(),H=_();if(!H)return;try{if(j===null||j===void 0)H.removeItem(Z);else H.setItem(Z,J.write(j))}catch(L){console.warn(`[${X}] Cannot persist "${Z}":`,L)}}),K&&W){let j=(L)=>{if(L.key!==Z)return;if(L.storageArea&&L.storageArea!==_())return;z.set(U(L.newValue))};window.addEventListener("storage",j);let H=globalThis.onDestroy;if(typeof H==="function")H(()=>window.removeEventListener("storage",j))}return z}function B3($,X,Z){return e5("local","useLocalStorage",$,X,Z)}function L3($,X,Z){return e5("session","useSessionStorage",$,X,Z)}function F3($="local"){if(typeof window>"u")return;($==="session"?sessionStorage:localStorage).clear()}function z3($="local"){if(typeof window>"u")return[];let X=$==="session"?sessionStorage:localStorage;return Object.keys(X)}function j3($="local"){if(typeof window>"u")return 0;let X=$==="session"?sessionStorage:localStorage,Z=0;for(let Q in X)if(Object.prototype.hasOwnProperty.call(X,Q))Z+=(Q.length+(X.getItem(Q)?.length||0))*2;return Z}var t=null;function c1($,X,Z=new WeakSet){if(Object.is($,X))return!0;if(typeof $!=="object"||typeof X!=="object"||$===null||X===null)return!1;if(Z.has($))return!0;if(Z.add($),$ instanceof Date&&X instanceof Date)return $.getTime()===X.getTime();if($ instanceof RegExp&&X instanceof RegExp)return $.source===X.source&&$.flags===X.flags;if(Array.isArray($)){if(!Array.isArray(X)||$.length!==X.length)return!1;for(let J=0;J<$.length;J++)if(!c1($[J],X[J],Z))return!1;return!0}if(Array.isArray(X))return!1;if($ instanceof Map){if(!(X instanceof Map)||$.size!==X.size)return!1;for(let[J,G]of $)if(!X.has(J)||!c1(G,X.get(J),Z))return!1;return!0}if(X instanceof Map)return!1;if($ instanceof Set){if(!(X instanceof Set)||$.size!==X.size)return!1;for(let J of $)if(!X.has(J))return!1;return!0}if(X instanceof Set)return!1;let Q=Object.keys($),Y=Object.keys(X);if(Q.length!==Y.length)return!1;for(let J of Q){if(!Object.prototype.hasOwnProperty.call(X,J))return!1;if(!c1($[J],X[J],Z))return!1}return!0}function UJ($){t=$}function BJ(){return t}function LJ(){return{isMounted:!1,isUnmounted:!1,hooks:{beforeMount:[],mounted:[],beforeUpdate:[],updated:[],beforeUnmount:[],unmounted:[]},effects:[],scope:H3()}}function H3(){return{refs:new Map,effects:new Set,cleanups:[]}}function FJ($){let X=new Set,Z=new Set,Q=$,Y=Symbol("ref"),J={get value(){let G=l1();if(G)Z.add(G);return Q},set value(G){if(!Object.is(G,Q)){let W=Q;Q=G;for(let K of X)K(G,W);for(let K of Z)if(a$())s$(K);else K()}},subscribe(G){return X.add(G),()=>{X.delete(G)}}};if(t)t.scope.refs.set(Y,J);return J}var $6=new WeakMap;function O3($){let X=$6.get($);if(X)return X;let Z=new Map,Q=(G)=>{let W=Z.get(G);if(!W)return;for(let K of[...W])if(a$())s$(K);else K()},Y=(G,W)=>{if(!Z.has(G))Z.set(G,new Set);return Z.get(G).add(W),()=>{Z.get(G)?.delete(W)}},J=new Proxy($,{get(G,W,K){let _=Reflect.get(G,W,K),U=l1();if(U)Y(W,U);if(_!==null&&typeof _==="object"&&!Array.isArray(_)){let F=Object.getPrototypeOf(_);if(F===Object.prototype||F===null)return O3(_)}return _},set(G,W,K,_){let U=Reflect.get(G,W,_),F=Reflect.set(G,W,K,_);if(!Object.is(K,U))Q(W);return F},deleteProperty(G,W){let K=Reflect.deleteProperty(G,W);return Q(W),K}});return $6.set($,J),J}function zJ($){let X,Z=!0,Q=new Set,Y=new Set,J=()=>{Z=!0,G()},G=()=>{if(Z){let K=X,_=I1(J);if(X=$(),R1(_),Z=!1,!Object.is(X,K)){for(let U of Q)U(X,K);for(let U of Y)U()}}},W=I1(J);return X=$(),Z=!1,R1(W),{get value(){let K=l1();if(K)Y.add(K);return G(),X},set value(K){console.warn("[stx] Computed properties are readonly")},subscribe(K){return Q.add(K),()=>{Q.delete(K)}}}}function A3($){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(()=>{requestAnimationFrame($)});return}setTimeout($,0)}function jJ($,X,Z={}){let{immediate:Q=!1,deep:Y=!1,flush:J="post"}=Z,G,W,K=!1,_=()=>{if(K)return;let H=j();if((Y?!c1(H,G):!Object.is(H,G))||Q)if(X(H,G),Y&&H!==null&&typeof H==="object")try{G=structuredClone(H)}catch{G=H}else G=H},U=(H)=>{if(J==="sync")H();else if(J==="pre")Promise.resolve().then(H);else A3(H)},F=!1,z=()=>{if(K||F)return;F=!0,U(()=>{F=!1,_()})},j=()=>{if(typeof $==="function"){let H=I1(z);try{return $()}finally{R1(H)}}return $.value};if(typeof $!=="function"){let H=$.subscribe(()=>{U(_)});W=()=>{K=!0,H()}}else W=()=>{K=!0};if(G=j(),Q)U(_);if(t)t.scope.cleanups.push(()=>W?.());return()=>W?.()}function HJ($,X,Z={}){let Q=[],Y=$.map((J)=>J.value);for(let J of $){let G=J.subscribe(()=>{let W=$.map((K)=>K.value);X(W,Y),Y=[...W]});Q.push(G)}if(Z.immediate){let J=$.map((G)=>G.value);X(J,Y)}return()=>{for(let J of Q)J()}}function OJ($){let X,Z=!1,Q=()=>{if(Z)return;if(X)X();let Y=I1(Q);X=$(),R1(Y)};if(Q(),t)t.scope.cleanups.push(()=>{if(Z=!0,X)X()});return()=>{if(Z=!0,X)X()}}function AJ($){if(t)t.hooks.beforeMount.push($);else console.warn("[stx] onBeforeMount called outside of component setup")}function NJ($){if(t)t.hooks.mounted.push($);else console.warn("[stx] onMounted called outside of component setup")}function qJ($){if(t)t.hooks.beforeUpdate.push($);else console.warn("[stx] onBeforeUpdate called outside of component setup")}function MJ($){if(t)t.hooks.updated.push($);else console.warn("[stx] onUpdated called outside of component setup")}function VJ($){if(t)t.hooks.beforeUnmount.push($);else console.warn("[stx] onBeforeUnmount called outside of component setup")}function EJ($){if(t)t.hooks.unmounted.push($);else console.warn("[stx] onUnmounted called outside of component setup")}async function Y1($,X){let Z=$.hooks[X];for(let Q of Z)await Q()}async function IJ($){await Y1($,"beforeMount"),$.isMounted=!0,await Y1($,"mounted")}async function RJ($){if(!$.isMounted||$.isUnmounted)return;await Y1($,"beforeUpdate"),await Y1($,"updated")}async function DJ($){if($.isUnmounted)return;await Y1($,"beforeUnmount");for(let X of $.scope.cleanups)X();$.isUnmounted=!0,await Y1($,"unmounted")}function wJ(){return`
3
3
  <script data-stx-client-runtime>
4
4
  (function() {
5
5
  'use strict';
@@ -178,11 +178,11 @@ import{Xe as F$}from"./chunk-zmazqcb8.js";import{Yf as u7,ag as z$,bg as h6,cg a
178
178
  });
179
179
  window.provide = provide;
180
180
  })();
181
- </script>`}function J1($,X){if(typeof window>"u")return X;return window[$]??X}function i1($,X){if(typeof window>"u")return;window[$]=X}function t5($){let Z=J1("__STX_STORES__",{})[$];if(!Z)throw Error(`Store "${$}" not found. Make sure it's defined with defineStore().`);return Z}function EJ($){return t5($)}function IJ($,X=5000){return new Promise((Z,Q)=>{let Y=Date.now(),J=()=>{let G=t5($);if(G)Z(G);else if(Date.now()-Y>X)Q(Error(`Timeout waiting for store "${$}"`));else requestAnimationFrame(J)};J()})}function z3(){return J1("__STX_ROUTE_PARAMS__",{})}function j3($){return z3()[$]}function RJ($){let X=j3($);if(X===void 0)throw Error(`Route parameter "${$}" not found`);return X}function H3(){return J1("__STX_MIDDLEWARE_STATE__",{})}function DJ($){return H3()[$]}function wJ(){if(typeof window>"u")return;if(!J1("__STX_STORES__",null))i1("__STX_STORES__",{})}function TJ($,X){let Z=J1("__STX_STORES__",{});Z[$]=X,i1("__STX_STORES__",Z)}function CJ(){return J1("__STX_STORE_STATE__",null)}function kJ($){i1("__STX_ROUTE_PARAMS__",$)}function xJ($){i1("__STX_MIDDLEWARE_STATE__",$)}function O3(){return typeof window>"u"}function A3(){return typeof window<"u"}function SJ($){if(A3())$()}function PJ($){if(O3())$()}async function q3($){try{let X=await Bun.file($).text(),Z=N3(X),Q=M3(X,$),Y=V3(X,Z),J=E3(X,Z);return{file:$,metrics:Z,issues:Q,suggestions:Y,performance:J}}catch(X){throw Error(`Failed to analyze template ${$}: ${X instanceof Error?X.message:String(X)}`)}}function N3($){let X=$.split(`
181
+ </script>`}function J1($,X){if(typeof window>"u")return X;return window[$]??X}function i1($,X){if(typeof window>"u")return;window[$]=X}function X6($){let Z=J1("__STX_STORES__",{})[$];if(!Z)throw Error(`Store "${$}" not found. Make sure it's defined with defineStore().`);return Z}function CJ($){return X6($)}function kJ($,X=5000){return new Promise((Z,Q)=>{let Y=Date.now(),J=()=>{let G=X6($);if(G)Z(G);else if(Date.now()-Y>X)Q(Error(`Timeout waiting for store "${$}"`));else requestAnimationFrame(J)};J()})}function N3(){return J1("__STX_ROUTE_PARAMS__",{})}function q3($){return N3()[$]}function xJ($){let X=q3($);if(X===void 0)throw Error(`Route parameter "${$}" not found`);return X}function M3(){return J1("__STX_MIDDLEWARE_STATE__",{})}function SJ($){return M3()[$]}function PJ(){if(typeof window>"u")return;if(!J1("__STX_STORES__",null))i1("__STX_STORES__",{})}function bJ($,X){let Z=J1("__STX_STORES__",{});Z[$]=X,i1("__STX_STORES__",Z)}function yJ(){return J1("__STX_STORE_STATE__",null)}function vJ($){i1("__STX_ROUTE_PARAMS__",$)}function gJ($){i1("__STX_MIDDLEWARE_STATE__",$)}function V3(){return typeof window>"u"}function E3(){return typeof window<"u"}function fJ($){if(E3())$()}function hJ($){if(V3())$()}async function I3($){try{let X=await Bun.file($).text(),Z=R3(X),Q=D3(X,$),Y=w3(X,Z),J=T3(X,Z);return{file:$,metrics:Z,issues:Q,suggestions:Y,performance:J}}catch(X){throw Error(`Failed to analyze template ${$}: ${X instanceof Error?X.message:String(X)}`)}}function R3($){let X=$.split(`
182
182
  `),Z=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i),Y=(Z?Z[1]:"").split(`
183
- `).length,J={conditionals:($.match(/@(if|unless|elseif|else|endif|endunless)\b/g)||[]).length,loops:($.match(/@(foreach|for|endforeach|endfor|while|endwhile)\b/g)||[]).length,includes:($.match(/@(include|component|extends|section|yield)\b/g)||[]).length,custom:0,total:0};J.total=J.conditionals+J.loops+J.includes+J.custom;let G=($.match(/\{\{[\s\S]*?\}\}/g)||[]).length,W=($.match(/\{!![\s\S]*?!!\}/g)||[]).length,K=($.match(/@(?:if|unless|elseif|foreach|for|while)\s*\([^)]+\)/g)||[]).length,_=G+W+K,U=($.match(/<[A-Z][^>]*>/g)||[]).length,F=($.match(/@(?:layout|extends)\(/g)||[]).length,z=0,j=0;for(let O of X)if(/@(?:if|unless|foreach|for|while|section)\b/.test(O)&&!/@end/.test(O)&&!/@else/.test(O))j++,z=Math.max(z,j);else if(/@end(?:if|unless|foreach|for|while|section)\b/.test(O))j--;let H=z>=4?3:0,L=Math.min(10,Math.ceil(J.total*0.5+_*0.1+U*0.3+(Y>10?Y*0.05:0)+H));return{lines:X.length,characters:$.length,directives:J,expressions:_,components:U,layouts:F,scriptLines:Y,complexity:L}}function M3($,X){let Z=[],Q=e5($,"if","endif");if(Q>0)Z.push({type:"error",category:"syntax",message:`Found ${Q} unmatched @if directive(s)`,suggestion:"Ensure every @if has a corresponding @endif"});let Y=e5($,"foreach","endforeach");if(Y>0)Z.push({type:"error",category:"syntax",message:`Found ${Y} unmatched @foreach directive(s)`,suggestion:"Ensure every @foreach has a corresponding @endforeach"});let J=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(J&&J.length>0)Z.push({type:"warning",category:"performance",message:"Nested loops detected which may impact performance",suggestion:"Consider preprocessing data or using more efficient data structures"});let G=($.match(/\{!![\s\S]*?!!\}/g)||[]).length;if(G>0)Z.push({type:"warning",category:"security",message:`Found ${G} raw output expression(s) {!! !!}`,suggestion:"Ensure raw outputs are properly sanitized to prevent XSS"});let W=$.match(/<img[^>]*>/g);if(W){let U=W.filter((F)=>!F.includes("alt="));if(U.length>0)Z.push({type:"warning",category:"accessibility",message:`Found ${U.length} image(s) without alt attributes`,suggestion:"Add alt attributes to all images for screen reader accessibility"})}let K=$.split(`
184
- `).filter((U)=>U.length>120);if(K.length>0)Z.push({type:"info",category:"maintainability",message:`Found ${K.length} line(s) longer than 120 characters`,suggestion:"Consider breaking long lines for better readability"});let _=($.match(/style\s*=\s*["'][^"']*["']/g)||[]).length;if(_>3)Z.push({type:"info",category:"maintainability",message:`Found ${_} inline style attributes`,suggestion:"Consider moving styles to CSS classes for better maintainability"});return Z}function V3($,X){let Z=[];if(X.complexity>7)Z.push({type:"refactor",message:"Template complexity is high. Consider breaking into smaller components.",impact:"high",effort:"medium"});else if(X.complexity>5&&X.directives.total>8)Z.push({type:"optimization",message:"Template has moderate complexity. Consider component extraction for reusability.",impact:"medium",effort:"low"});if(X.lines>100&&X.components===0)Z.push({type:"refactor",message:"Large template with no components. Consider extracting reusable parts into components.",impact:"medium",effort:"medium"});if(X.expressions>20)Z.push({type:"optimization",message:"Many template expressions detected. Consider preprocessing some data in the script section.",impact:"medium",effort:"low"});let Q=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(Q&&Q.length>0)Z.push({type:"optimization",message:"Nested loops detected. Consider preprocessing data or optimizing data structures.",impact:"high",effort:"medium"});if(X.directives.total===0&&X.expressions<5)Z.push({type:"optimization",message:"Template appears static. Consider enabling aggressive caching.",impact:"high",effort:"low"});if(X.scriptLines>50)Z.push({type:"refactor",message:"Large script section. Consider moving complex logic to external modules.",impact:"medium",effort:"medium"});return Z}function E3($,X){let Z=1;if(Z+=X.directives.conditionals*0.1,Z+=X.directives.loops*0.5,Z+=X.directives.includes*2,Z+=X.expressions*0.05,Z+=X.components*1,X.scriptLines>10)Z+=X.scriptLines*0.1;let Q;if(X.expressions===0&&X.directives.total===0)Q="high";else if(X.expressions<5&&X.directives.total<3)Q="medium";else Q="low";let Y=[];if(Z>10)Y.push("Consider optimizing template complexity");if(Q==="low"&&X.directives.total>5)Y.push("Reduce dynamic content for better caching");if(X.components===0&&X.lines>40)Y.push("Extract components to improve reusability and performance");return{estimatedRenderTime:Math.round(Z*100)/100,complexityScore:X.complexity,cacheability:Q,recommendations:Y}}function e5($,X,Z){let Q=$.replace(/<!--[\s\S]*?-->/g,""),Y=(Q.match(new RegExp(`@${X}\\b`,"g"))||[]).length,J=(Q.match(new RegExp(`@${Z}\\b`,"g"))||[]).length;return Math.abs(Y-J)}async function yJ($=["**/*.stx"],X){let Z=[],Q=[];for(let J of $){let G=await Array.fromAsync(new Bun.Glob(J).scan({cwd:X||process.cwd(),onlyFiles:!0,absolute:!0}));Q.push(...G.filter((W)=>W.endsWith(".stx")))}for(let J of Q)try{let G=await q3(J);Z.push(G)}catch(G){console.warn(`Failed to analyze ${J}:`,G)}let Y=I3(Z);return{results:Z,summary:Y}}function I3($){let X=$.length,Z=$.reduce((_,U)=>_+U.metrics.lines,0),Q=X>0?$.reduce((_,U)=>_+U.metrics.complexity,0)/X:0,Y=$.reduce((_,U)=>_+U.issues.length,0),J={};$.forEach((_)=>{_.issues.forEach((U)=>{J[U.category]=(J[U.category]||0)+1})});let G=X>0?$.reduce((_,U)=>_+U.performance.estimatedRenderTime,0)/X:0,W=Math.max(1,Math.min(10,Math.round(10-G/2-Q/2))),K=[];if(Q>6)K.push("Project has high average complexity. Consider refactoring complex templates.");if(Y>X*2)K.push("High number of issues detected. Run detailed analysis on individual files.");if(J.security>0)K.push("Security issues found. Review raw output usage and input sanitization.");return{totalFiles:X,totalLines:Z,avgComplexity:Math.round(Q*100)/100,totalIssues:Y,issuesByCategory:J,performanceScore:W,recommendations:K}}import a1 from"path";var $6=/<script\b[^>]*\bserver\b/i,R3=/<script\b[^>]*\bclient\b/i;async function hJ($){let X=performance.now(),Z=await s0($),Q=$||Z.root||process.cwd(),Y=[Z.build?.pagesDir||Z.pagesDir||"pages",Z.componentsDir||"components",Z.layoutsDir||"layouts",Z.partialsDir||"partials"].map((W)=>a1.resolve(Q,W)),J=[],G=0;for(let W of Y){let K=await X6(W);for(let _ of K){G++;let U=await Bun.file(_).text();if($6.test(U))J.push(a1.relative(Q,_))}}return{mode:J.length>0?"ssr":"ssg",serverScriptFiles:J,totalFilesScanned:G,scanDurationMs:Math.round(performance.now()-X)}}async function dJ($){let X=await s0($),Z=$||X.root||process.cwd(),Q=a1.resolve(Z,X.componentsDir||"components"),Y=[],J=await X6(Q);for(let G of J){let W=await Bun.file(G).text(),K=$6.test(W),_=R3.test(W)||/<script\b(?![^>]*\bserver\b)[^>]*>/i.test(W)&&!K;if(K&&_){let U=a1.relative(Z,G);Y.push({file:U,message:`Component "${U}" has both <script server> and <script client>. `+"Components should be server OR client \u2014 compose them via props/slots."})}}return Y}async function X6($){let X=[];try{let Z=new Bun.Glob("**/*.stx");for await(let Q of Z.scan({cwd:$,absolute:!0}))X.push(Q)}catch{}return X}var Z6={treeShake:!0,deadCodeElimination:!0,constantFolding:!0,stringPooling:!1,minifyHtml:!0,removeDevCode:!0,constants:{},preserveDirectives:[],target:"production"},Q6=["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty","extends","section","endsection","yield","parent","include","includeIf","includeWhen","includeFirst","once","endonce","push","endpush","prepend","endprepend","stack","component","endcomponent","slot","endslot","props","auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole","csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file","translate","lang","choice","meta","title","seo","jsonld","canonical","robots","sitemap","ts","endts","js","endjs","css","endcss","markdown","endmarkdown","verbatim","endverbatim","env","production","debug","isset","endisset","empty","endempty"];function Y6($){let X=new Map,Z=/@(\w+)/g,Q,Y=1,J=0;while((Q=Z.exec($))!==null){let G=Q[1],W=$.slice(J,Q.index);Y+=(W.match(/\n/g)||[]).length,J=Q.index;let K=Q.index-$.lastIndexOf(`
185
- `,Q.index-1);if(Q6.includes(G)){let _=X.get(G);if(_)_.count++,_.locations.push({line:Y,column:K});else X.set(G,{name:G,count:1,locations:[{line:Y,column:K}]})}}return Array.from(X.values())}function D3($,X=[]){let Z=Y6($),Q=new Set(Z.map((Y)=>Y.name));for(let Y of X)Q.add(Y);for(let Y of Array.from(Q))if(!Y.startsWith("end"))Q.add(`end${Y}`);return Q6.filter((Y)=>!Q.has(Y))}function w3($){let X=[],Z={conditionals:["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","isset","endisset"],loops:["for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty"],includes:["include","includeIf","includeWhen","includeFirst","once","endonce","extends","section","endsection","yield","parent","push","endpush","prepend","endprepend","stack"],components:["component","endcomponent","slot","endslot","props"],auth:["auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole"],forms:["csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file"],i18n:["translate","lang","choice"],seo:["meta","title","seo","jsonld","canonical","robots","sitemap"]},Q=new Set;for(let J of $)for(let[G,W]of Object.entries(Z))if(W.includes(J)){Q.add(G);break}for(let J of Q)X.push(`import { process${b3(J)} } from './${J}'`);let Y=$.filter((J)=>!J.startsWith("end")).map((J)=>` '${J}': true`).join(`,
183
+ `).length,J={conditionals:($.match(/@(if|unless|elseif|else|endif|endunless)\b/g)||[]).length,loops:($.match(/@(foreach|for|endforeach|endfor|while|endwhile)\b/g)||[]).length,includes:($.match(/@(include|component|extends|section|yield)\b/g)||[]).length,custom:0,total:0};J.total=J.conditionals+J.loops+J.includes+J.custom;let G=($.match(/\{\{[\s\S]*?\}\}/g)||[]).length,W=($.match(/\{!![\s\S]*?!!\}/g)||[]).length,K=($.match(/@(?:if|unless|elseif|foreach|for|while)\s*\([^)]+\)/g)||[]).length,_=G+W+K,U=($.match(/<[A-Z][^>]*>/g)||[]).length,F=($.match(/@(?:layout|extends)\(/g)||[]).length,z=0,j=0;for(let O of X)if(/@(?:if|unless|foreach|for|while|section)\b/.test(O)&&!/@end/.test(O)&&!/@else/.test(O))j++,z=Math.max(z,j);else if(/@end(?:if|unless|foreach|for|while|section)\b/.test(O))j--;let H=z>=4?3:0,L=Math.min(10,Math.ceil(J.total*0.5+_*0.1+U*0.3+(Y>10?Y*0.05:0)+H));return{lines:X.length,characters:$.length,directives:J,expressions:_,components:U,layouts:F,scriptLines:Y,complexity:L}}function D3($,X){let Z=[],Q=Z6($,"if","endif");if(Q>0)Z.push({type:"error",category:"syntax",message:`Found ${Q} unmatched @if directive(s)`,suggestion:"Ensure every @if has a corresponding @endif"});let Y=Z6($,"foreach","endforeach");if(Y>0)Z.push({type:"error",category:"syntax",message:`Found ${Y} unmatched @foreach directive(s)`,suggestion:"Ensure every @foreach has a corresponding @endforeach"});let J=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(J&&J.length>0)Z.push({type:"warning",category:"performance",message:"Nested loops detected which may impact performance",suggestion:"Consider preprocessing data or using more efficient data structures"});let G=($.match(/\{!![\s\S]*?!!\}/g)||[]).length;if(G>0)Z.push({type:"warning",category:"security",message:`Found ${G} raw output expression(s) {!! !!}`,suggestion:"Ensure raw outputs are properly sanitized to prevent XSS"});let W=$.match(/<img[^>]*>/g);if(W){let U=W.filter((F)=>!F.includes("alt="));if(U.length>0)Z.push({type:"warning",category:"accessibility",message:`Found ${U.length} image(s) without alt attributes`,suggestion:"Add alt attributes to all images for screen reader accessibility"})}let K=$.split(`
184
+ `).filter((U)=>U.length>120);if(K.length>0)Z.push({type:"info",category:"maintainability",message:`Found ${K.length} line(s) longer than 120 characters`,suggestion:"Consider breaking long lines for better readability"});let _=($.match(/style\s*=\s*["'][^"']*["']/g)||[]).length;if(_>3)Z.push({type:"info",category:"maintainability",message:`Found ${_} inline style attributes`,suggestion:"Consider moving styles to CSS classes for better maintainability"});return Z}function w3($,X){let Z=[];if(X.complexity>7)Z.push({type:"refactor",message:"Template complexity is high. Consider breaking into smaller components.",impact:"high",effort:"medium"});else if(X.complexity>5&&X.directives.total>8)Z.push({type:"optimization",message:"Template has moderate complexity. Consider component extraction for reusability.",impact:"medium",effort:"low"});if(X.lines>100&&X.components===0)Z.push({type:"refactor",message:"Large template with no components. Consider extracting reusable parts into components.",impact:"medium",effort:"medium"});if(X.expressions>20)Z.push({type:"optimization",message:"Many template expressions detected. Consider preprocessing some data in the script section.",impact:"medium",effort:"low"});let Q=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(Q&&Q.length>0)Z.push({type:"optimization",message:"Nested loops detected. Consider preprocessing data or optimizing data structures.",impact:"high",effort:"medium"});if(X.directives.total===0&&X.expressions<5)Z.push({type:"optimization",message:"Template appears static. Consider enabling aggressive caching.",impact:"high",effort:"low"});if(X.scriptLines>50)Z.push({type:"refactor",message:"Large script section. Consider moving complex logic to external modules.",impact:"medium",effort:"medium"});return Z}function T3($,X){let Z=1;if(Z+=X.directives.conditionals*0.1,Z+=X.directives.loops*0.5,Z+=X.directives.includes*2,Z+=X.expressions*0.05,Z+=X.components*1,X.scriptLines>10)Z+=X.scriptLines*0.1;let Q;if(X.expressions===0&&X.directives.total===0)Q="high";else if(X.expressions<5&&X.directives.total<3)Q="medium";else Q="low";let Y=[];if(Z>10)Y.push("Consider optimizing template complexity");if(Q==="low"&&X.directives.total>5)Y.push("Reduce dynamic content for better caching");if(X.components===0&&X.lines>40)Y.push("Extract components to improve reusability and performance");return{estimatedRenderTime:Math.round(Z*100)/100,complexityScore:X.complexity,cacheability:Q,recommendations:Y}}function Z6($,X,Z){let Q=$.replace(/<!--[\s\S]*?-->/g,""),Y=(Q.match(new RegExp(`@${X}\\b`,"g"))||[]).length,J=(Q.match(new RegExp(`@${Z}\\b`,"g"))||[]).length;return Math.abs(Y-J)}async function uJ($=["**/*.stx"],X){let Z=[],Q=[];for(let J of $){let G=await Array.fromAsync(new Bun.Glob(J).scan({cwd:X||process.cwd(),onlyFiles:!0,absolute:!0}));Q.push(...G.filter((W)=>W.endsWith(".stx")))}for(let J of Q)try{let G=await I3(J);Z.push(G)}catch(G){console.warn(`Failed to analyze ${J}:`,G)}let Y=C3(Z);return{results:Z,summary:Y}}function C3($){let X=$.length,Z=$.reduce((_,U)=>_+U.metrics.lines,0),Q=X>0?$.reduce((_,U)=>_+U.metrics.complexity,0)/X:0,Y=$.reduce((_,U)=>_+U.issues.length,0),J={};$.forEach((_)=>{_.issues.forEach((U)=>{J[U.category]=(J[U.category]||0)+1})});let G=X>0?$.reduce((_,U)=>_+U.performance.estimatedRenderTime,0)/X:0,W=Math.max(1,Math.min(10,Math.round(10-G/2-Q/2))),K=[];if(Q>6)K.push("Project has high average complexity. Consider refactoring complex templates.");if(Y>X*2)K.push("High number of issues detected. Run detailed analysis on individual files.");if(J.security>0)K.push("Security issues found. Review raw output usage and input sanitization.");return{totalFiles:X,totalLines:Z,avgComplexity:Math.round(Q*100)/100,totalIssues:Y,issuesByCategory:J,performanceScore:W,recommendations:K}}import a1 from"path";var Q6=/<script\b[^>]*\bserver\b/i,k3=/<script\b[^>]*\bclient\b/i;async function lJ($){let X=performance.now(),Z=await r0($),Q=$||Z.root||process.cwd(),Y=[Z.build?.pagesDir||Z.pagesDir||"pages",Z.componentsDir||"components",Z.layoutsDir||"layouts",Z.partialsDir||"partials"].map((W)=>a1.resolve(Q,W)),J=[],G=0;for(let W of Y){let K=await Y6(W);for(let _ of K){G++;let U=await Bun.file(_).text();if(Q6.test(U))J.push(a1.relative(Q,_))}}return{mode:J.length>0?"ssr":"ssg",serverScriptFiles:J,totalFilesScanned:G,scanDurationMs:Math.round(performance.now()-X)}}async function iJ($){let X=await r0($),Z=$||X.root||process.cwd(),Q=a1.resolve(Z,X.componentsDir||"components"),Y=[],J=await Y6(Q);for(let G of J){let W=await Bun.file(G).text(),K=Q6.test(W),_=k3.test(W)||/<script\b(?![^>]*\bserver\b)[^>]*>/i.test(W)&&!K;if(K&&_){let U=a1.relative(Z,G);Y.push({file:U,message:`Component "${U}" has both <script server> and <script client>. `+"Components should be server OR client \u2014 compose them via props/slots."})}}return Y}async function Y6($){let X=[];try{let Z=new Bun.Glob("**/*.stx");for await(let Q of Z.scan({cwd:$,absolute:!0}))X.push(Q)}catch{}return X}var J6={treeShake:!0,deadCodeElimination:!0,constantFolding:!0,stringPooling:!1,minifyHtml:!0,removeDevCode:!0,constants:{},preserveDirectives:[],target:"production"},G6=["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty","extends","section","endsection","yield","parent","include","includeIf","includeWhen","includeFirst","once","endonce","push","endpush","prepend","endprepend","stack","component","endcomponent","slot","endslot","props","auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole","csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file","translate","lang","choice","meta","title","seo","jsonld","canonical","robots","sitemap","ts","endts","js","endjs","css","endcss","markdown","endmarkdown","verbatim","endverbatim","env","production","debug","isset","endisset","empty","endempty"];function W6($){let X=new Map,Z=/@(\w+)/g,Q,Y=1,J=0;while((Q=Z.exec($))!==null){let G=Q[1],W=$.slice(J,Q.index);Y+=(W.match(/\n/g)||[]).length,J=Q.index;let K=Q.index-$.lastIndexOf(`
185
+ `,Q.index-1);if(G6.includes(G)){let _=X.get(G);if(_)_.count++,_.locations.push({line:Y,column:K});else X.set(G,{name:G,count:1,locations:[{line:Y,column:K}]})}}return Array.from(X.values())}function x3($,X=[]){let Z=W6($),Q=new Set(Z.map((Y)=>Y.name));for(let Y of X)Q.add(Y);for(let Y of Array.from(Q))if(!Y.startsWith("end"))Q.add(`end${Y}`);return G6.filter((Y)=>!Q.has(Y))}function S3($){let X=[],Z={conditionals:["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","isset","endisset"],loops:["for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty"],includes:["include","includeIf","includeWhen","includeFirst","once","endonce","extends","section","endsection","yield","parent","push","endpush","prepend","endprepend","stack"],components:["component","endcomponent","slot","endslot","props"],auth:["auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole"],forms:["csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file"],i18n:["translate","lang","choice"],seo:["meta","title","seo","jsonld","canonical","robots","sitemap"]},Q=new Set;for(let J of $)for(let[G,W]of Object.entries(Z))if(W.includes(J)){Q.add(G);break}for(let J of Q)X.push(`import { process${h3(J)} } from './${J}'`);let Y=$.filter((J)=>!J.startsWith("end")).map((J)=>` '${J}': true`).join(`,
186
186
  `);return`// Tree-shaken directive bundle
187
187
  // Only includes: ${$.join(", ")}
188
188
  ${X.join(`
@@ -195,10 +195,10 @@ ${Y}
195
195
  export function isDirectiveActive(name: string): boolean {
196
196
  return name in activeDirectives
197
197
  }
198
- `}function T3($,X={}){let Z=[],Q=/@if\(([^)]+)\)[\s\S]*?@endif/g,Y=$.matchAll(Q);for(let _ of Y){let U=_[1].trim();if(r$(U,X)===!1)Z.push({start:_.index,end:_.index+_[0].length,reason:`@if condition always false: ${U}`})}let J=/@unless\(([^)]+)\)[\s\S]*?@endunless/g,G=$.matchAll(J);for(let _ of G){let U=_[1].trim();if(r$(U,X)===!0)Z.push({start:_.index,end:_.index+_[0].length,reason:`@unless condition always true: ${U}`})}let W=/@env\(['"]development['"]\)[\s\S]*?@endenv/g;if(X.__ENV__==="production"){let _=$.matchAll(W);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Development-only code in production build"})}let K=/@debug[\s\S]*?@enddebug/g;if(X.__ENV__==="production"){let _=$.matchAll(K);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Debug code in production build"})}return Z}function C3($,X={}){let Z=T3($,X),Q=[];Z.sort((J,G)=>G.start-J.start);let Y=$;for(let J of Z)Y=Y.slice(0,J.start)+Y.slice(J.end),Q.push(J.reason);return{content:Y,removed:Q}}function r$($,X){if($==="true")return!0;if($==="false")return!1;if($==="null")return null;if(/^\d+$/.test($))return Number.parseInt($,10);if(/^\d+\.\d+$/.test($))return Number.parseFloat($);if(/^['"].*['"]$/.test($))return $.slice(1,-1);if($ in X)return X[$];let Z=$.match(/^(\w+)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/);if(Z){let[,Q,Y,J]=Z,G=Q in X?X[Q]:void 0,W=r$(J,X);if(G!==void 0&&W!==void 0)switch(Y){case"==":case"===":return G===W;case"!=":case"!==":return G!==W;case">":return G>W;case"<":return G<W;case">=":return G>=W;case"<=":return G<=W}}return}function k3($,X){let Z=[],Q=$;return Q=Q.replace(/\{\{\s*(\w+)\s*\}\}/g,(Y,J)=>{if(J in X)return Z.push(`{{ ${J} }} -> ${X[J]}`),String(X[J]);return Y}),Q=Q.replace(/\{\{\s*(\d+)\s*([+\-*])\s*(\d+)\s*\}\}/g,(Y,J,G,W)=>{let K=Number.parseInt(J,10),_=Number.parseInt(W,10),U;switch(G){case"+":U=K+_;break;case"-":U=K-_;break;case"*":U=K*_;break;default:return Y}return Z.push(`{{ ${J} ${G} ${W} }} -> ${U}`),String(U)}),{content:Q,folded:Z}}function x3($){let X=$,Z=[],Q=0;X=X.replace(/<(pre|code|script|style)([^>]*)>([\s\S]*?)<\/\1>/gi,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{([\s\S]*?)\}\}/g,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{--([\s\S]*?)--\}\}/g,""),X=X.replace(/<!--[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/^\s+/gm,""),X=X.replace(/\s+$/gm,""),X=X.replace(/\s{2,}/g," ");for(let{marker:Y,content:J}of Z){let G=X.indexOf(Y);if(G!==-1)X=X.slice(0,G)+J+X.slice(G+Y.length)}return X.trim()}function S3($){let X=new Map,Z=new Map,Q=/(['"])([^'"]{10,})\1/g,Y;while((Y=Q.exec($))!==null){let W=Y[2];Z.set(W,(Z.get(W)||0)+1)}let J=0,G=$;for(let[W,K]of Z)if(K>1){let _=`__STR_${J++}__`;X.set(_,W);let U=W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),F=new RegExp(`(['"])${U}\\1`,"g");G=G.replace(F,_)}return{content:G,pool:X,count:X.size}}function P3($,X={}){let Z={...Z6,...X},Q=new Blob([$]).size,Y=$,J=[],G=[],W=[],K=[],_=0;if(Z.target==="production")Z.constants={...Z.constants,__ENV__:"production"};if(Z.deadCodeElimination){let z=C3(Y,Z.constants);if(Y=z.content,z.removed.length>0)J.push("Dead code elimination"),G.push(...z.removed.map((j)=>`Removed: ${j}`))}if(Z.constantFolding&&Object.keys(Z.constants).length>0){let z=k3(Y,Z.constants);if(Y=z.content,K=z.folded,K.length>0)J.push("Constant folding")}if(Z.treeShake){if(W=D3(Y,Z.preserveDirectives),W.length>0)J.push("Tree shaking")}if(Z.stringPooling){let z=S3(Y);if(Y=z.content,_=z.count,_>0)J.push("String pooling")}if(Z.minifyHtml){let z=x3(Y);if(z.length<Y.length)Y=z,J.push("HTML minification")}let U=new Blob([Y]).size,F=Q>0?Math.round((1-U/Q)*100):0;return{content:Y,originalSize:Q,optimizedSize:U,reduction:F,appliedOptimizations:J,removedDirectives:W,foldedConstants:K,pooledStrings:_,warnings:G}}async function mJ($,X={}){let Z={...Z6,...X},Q=new Map,Y=[],J=0,G=0,W=new Set;for(let[F,z]of $){let j=P3(z,Z);Q.set(F,j),J+=j.originalSize,G+=j.optimizedSize,Y.push(...j.warnings.map((L)=>`${F}: ${L}`));let H=Y6(z);for(let L of H)W.add(L.name)}let K;if(Z.treeShake)K=w3(Array.from(W));let _;if(Z.stringPooling)_=new Map;let U=J>0?Math.round((1-G/J)*100):0;return{templates:Q,directiveBundle:K,stringPool:_,totalOriginalSize:J,totalOptimizedSize:G,overallReduction:U,warnings:Y}}function b3($){return $.charAt(0).toUpperCase()+$.slice(1)}function W6($,X){let Z={},Q=$.trim();if(Q.startsWith("{"))Q=Q.slice(1);if(Q.endsWith("}"))Q=Q.slice(0,-1);if(Q=Q.trim(),!Q)return Z;let Y=0;while(Y<Q.length){while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Y>=Q.length)break;let J="";if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)J+=Q[Y+1],Y+=2;else J+=Q[Y],Y++;Y++}else while(Y<Q.length&&/[\w$]/.test(Q[Y]))J+=Q[Y],Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===":")Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;let G,W=Y;if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;let _="";while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)_+=Q[Y+1],Y+=2;else _+=Q[Y],Y++;Y++,G=_}else if(Q[Y]==="{"){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="{")K++;else if(Q[Y]==="}")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);G=W6(_,X)}else if(Q[Y]==="["){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="[")K++;else if(Q[Y]==="]")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);try{G=JSON.parse(_.replace(/'/g,'"'))}catch{G=_}}else{let K="";while(Y<Q.length&&Q[Y]!==","&&!/\s/.test(Q[Y]))K+=Q[Y],Y++;if(K=K.trim(),K==="true")G=!0;else if(K==="false")G=!1;else if(K==="null")G=null;else if(K==="undefined")G=void 0;else if(/^-?\d+(\.\d+)?$/.test(K))G=Number(K);else if(K in X)G=X[K];else G=K}if(J)Z[J]=G;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===",")Y++}return Z}function aJ($,X,Z){let Q=[];for(let[Y,J]of Object.entries(X)){let G=$[Y];if(J.required&&(G===void 0||G===null)){Q.push(`Component "${Z}": Missing required prop "${Y}"`);continue}if(G===void 0||G===null)continue;let W=Array.isArray(J.type)?J.type:[J.type];if(!W.includes("any")){let K=y3(G);if(!W.includes(K))Q.push(`Component "${Z}": Prop "${Y}" expected ${W.join(" | ")}, got ${K}`)}if(J.validator&&!J.validator(G))Q.push(`Component "${Z}": Prop "${Y}" failed custom validation`)}return Q}function rJ($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0&&Y.default!==void 0)Z[Q]=typeof Y.default==="function"?Y.default():Y.default;return Z}function y3($){if(Array.isArray($))return"array";if($===null)return"null";return typeof $}var v3={name:"component",handler:async($,X,Z,Q)=>{if(X.length<1)return s1("Component","component directive requires at least the component name",r1.INVALID_DIRECTIVE_SYNTAX);let Y=X[0].replace(/['"]/g,""),J={};if(X.length>1)try{let U=X.slice(1).join(",").trim();if(U.startsWith("{")){if(J=J6(U,Z),Object.keys(J).length===0)J=W6(U,Z)}else{let F=U.trim(),z=Z[F];if(z&&typeof z==="object"&&!Array.isArray(z))J=z}}catch(U){let F=U instanceof Error?U.message:String(U);return console.error("Component props parsing error:",F),s1("Component",`Error parsing component props: ${F}`,r1.EVALUATION_ERROR)}let G=Z.__stx_options||{},W=G.componentsDir||"components",K=new Set;if(!Z.__processedComponents)Z.__processedComponents=new Set;let _=Z.__processedComponents;try{return await G6(Y,J,"",W,Z,Q,G,_,K)}catch(U){console.error("Component rendering error:",U);let F=U instanceof Error?U.message:String(U);return s1("Component",`Error rendering component: ${F}`,r1.COMPONENT_RENDER_ERROR)}},hasEndTag:!1};function sJ(){return[v3]}import{mkdir as g3,readFile as f3,readdir as h3,stat as K6,writeFile as d3}from"fs/promises";import U0 from"path";var F6=new Set(["constructor","connectedCallback","disconnectedCallback","attributeChangedCallback","adoptedCallback"]);function u3($){return $.replace(/\.stx$/i,"").split(/[^a-z0-9]+/i).filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join("")}function s$($){return $.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}function m3($){return/^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test($)&&!$.startsWith("xml")&&!/[A-Z]/.test($)}function p3($){if($===!0)return"open";if($==="open"||$==="closed")return $;return!1}async function c3($){let X=[];async function Z(Q){let Y=await h3(Q,{withFileTypes:!0});Y.sort((J,G)=>J.name.localeCompare(G.name));for(let J of Y){let G=U0.join(Q,J.name);if(J.isDirectory()){if(!J.name.startsWith(".")&&J.name!=="node_modules")await Z(G)}else if(J.isFile()&&J.name.endsWith(".stx")&&!/\.(?:test|spec)\.stx$/i.test(J.name))X.push(G)}}return await Z($),X}function l3($,X){let Z=$.match(/<script\b(?=[^>]*(?:\bcomponent\b|\bstx:component\b))[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return{};let Q=Z[1].trim();if(!Q)return{};try{return JSON.parse(Q)}catch(Y){throw Error(`${X}: <script component> must contain JSON metadata (${Y.message})`)}}function i3($,X){let Z={},Q=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)];for(let Y of Q){if(!/\bclient\b/i.test(Y[1])||/\bcomponent\b|\bstx:component\b/i.test(Y[1]))continue;let J;try{J=new Bun.Transpiler({loader:"ts"}).transformSync(Y[2])}catch(K){throw Error(`${X}: failed to transpile <script client> (${K.message})`)}let G=/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)\s*\{/g,W;while(W=G.exec(J)){let K=W[1];if(F6.has(K))throw Error(`${X}: client method "${K}" is reserved`);let _=G.lastIndex,U=1,F="",z=!1,j=_;for(;j<J.length&&U>0;j++){let L=J[j];if(z){z=!1;continue}if(F){if(L==="\\")z=!0;else if(L===F)F="";continue}if(L==='"'||L==="'"||L==="`")F=L;else if(L==="{")U++;else if(L==="}")U--}if(U!==0)throw Error(`${X}: unterminated client function "${K}"`);let H=W[0].includes("async")?"async ":"";Z[K]=`${H}${K}(${W[2]}) {${J.slice(_,j-1)}}`,G.lastIndex=j}}return Z}function a3($){let X=$.match(/<template\b(?![^>]*\bshadowrootmode\b)[^>]*>([\s\S]*?)<\/template>/i);return(X?X[1]:$).replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"").trim()}function _6($){return[...$.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((X)=>X[1].trim()).filter(Boolean).join(`
198
+ `}function P3($,X={}){let Z=[],Q=/@if\(([^)]+)\)[\s\S]*?@endif/g,Y=$.matchAll(Q);for(let _ of Y){let U=_[1].trim();if(r$(U,X)===!1)Z.push({start:_.index,end:_.index+_[0].length,reason:`@if condition always false: ${U}`})}let J=/@unless\(([^)]+)\)[\s\S]*?@endunless/g,G=$.matchAll(J);for(let _ of G){let U=_[1].trim();if(r$(U,X)===!0)Z.push({start:_.index,end:_.index+_[0].length,reason:`@unless condition always true: ${U}`})}let W=/@env\(['"]development['"]\)[\s\S]*?@endenv/g;if(X.__ENV__==="production"){let _=$.matchAll(W);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Development-only code in production build"})}let K=/@debug[\s\S]*?@enddebug/g;if(X.__ENV__==="production"){let _=$.matchAll(K);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Debug code in production build"})}return Z}function b3($,X={}){let Z=P3($,X),Q=[];Z.sort((J,G)=>G.start-J.start);let Y=$;for(let J of Z)Y=Y.slice(0,J.start)+Y.slice(J.end),Q.push(J.reason);return{content:Y,removed:Q}}function r$($,X){if($==="true")return!0;if($==="false")return!1;if($==="null")return null;if(/^\d+$/.test($))return Number.parseInt($,10);if(/^\d+\.\d+$/.test($))return Number.parseFloat($);if(/^['"].*['"]$/.test($))return $.slice(1,-1);if($ in X)return X[$];let Z=$.match(/^(\w+)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/);if(Z){let[,Q,Y,J]=Z,G=Q in X?X[Q]:void 0,W=r$(J,X);if(G!==void 0&&W!==void 0)switch(Y){case"==":case"===":return G===W;case"!=":case"!==":return G!==W;case">":return G>W;case"<":return G<W;case">=":return G>=W;case"<=":return G<=W}}return}function y3($,X){let Z=[],Q=$;return Q=Q.replace(/\{\{\s*(\w+)\s*\}\}/g,(Y,J)=>{if(J in X)return Z.push(`{{ ${J} }} -> ${X[J]}`),String(X[J]);return Y}),Q=Q.replace(/\{\{\s*(\d+)\s*([+\-*])\s*(\d+)\s*\}\}/g,(Y,J,G,W)=>{let K=Number.parseInt(J,10),_=Number.parseInt(W,10),U;switch(G){case"+":U=K+_;break;case"-":U=K-_;break;case"*":U=K*_;break;default:return Y}return Z.push(`{{ ${J} ${G} ${W} }} -> ${U}`),String(U)}),{content:Q,folded:Z}}function v3($){let X=$,Z=[],Q=0;X=X.replace(/<(pre|code|script|style)([^>]*)>([\s\S]*?)<\/\1>/gi,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{([\s\S]*?)\}\}/g,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{--([\s\S]*?)--\}\}/g,""),X=X.replace(/<!--[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/^\s+/gm,""),X=X.replace(/\s+$/gm,""),X=X.replace(/\s{2,}/g," ");for(let{marker:Y,content:J}of Z){let G=X.indexOf(Y);if(G!==-1)X=X.slice(0,G)+J+X.slice(G+Y.length)}return X.trim()}function g3($){let X=new Map,Z=new Map,Q=/(['"])([^'"]{10,})\1/g,Y;while((Y=Q.exec($))!==null){let W=Y[2];Z.set(W,(Z.get(W)||0)+1)}let J=0,G=$;for(let[W,K]of Z)if(K>1){let _=`__STR_${J++}__`;X.set(_,W);let U=W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),F=new RegExp(`(['"])${U}\\1`,"g");G=G.replace(F,_)}return{content:G,pool:X,count:X.size}}function f3($,X={}){let Z={...J6,...X},Q=new Blob([$]).size,Y=$,J=[],G=[],W=[],K=[],_=0;if(Z.target==="production")Z.constants={...Z.constants,__ENV__:"production"};if(Z.deadCodeElimination){let z=b3(Y,Z.constants);if(Y=z.content,z.removed.length>0)J.push("Dead code elimination"),G.push(...z.removed.map((j)=>`Removed: ${j}`))}if(Z.constantFolding&&Object.keys(Z.constants).length>0){let z=y3(Y,Z.constants);if(Y=z.content,K=z.folded,K.length>0)J.push("Constant folding")}if(Z.treeShake){if(W=x3(Y,Z.preserveDirectives),W.length>0)J.push("Tree shaking")}if(Z.stringPooling){let z=g3(Y);if(Y=z.content,_=z.count,_>0)J.push("String pooling")}if(Z.minifyHtml){let z=v3(Y);if(z.length<Y.length)Y=z,J.push("HTML minification")}let U=new Blob([Y]).size,F=Q>0?Math.round((1-U/Q)*100):0;return{content:Y,originalSize:Q,optimizedSize:U,reduction:F,appliedOptimizations:J,removedDirectives:W,foldedConstants:K,pooledStrings:_,warnings:G}}async function sJ($,X={}){let Z={...J6,...X},Q=new Map,Y=[],J=0,G=0,W=new Set;for(let[F,z]of $){let j=f3(z,Z);Q.set(F,j),J+=j.originalSize,G+=j.optimizedSize,Y.push(...j.warnings.map((L)=>`${F}: ${L}`));let H=W6(z);for(let L of H)W.add(L.name)}let K;if(Z.treeShake)K=S3(Array.from(W));let _;if(Z.stringPooling)_=new Map;let U=J>0?Math.round((1-G/J)*100):0;return{templates:Q,directiveBundle:K,stringPool:_,totalOriginalSize:J,totalOptimizedSize:G,overallReduction:U,warnings:Y}}function h3($){return $.charAt(0).toUpperCase()+$.slice(1)}function U6($,X){let Z={},Q=$.trim();if(Q.startsWith("{"))Q=Q.slice(1);if(Q.endsWith("}"))Q=Q.slice(0,-1);if(Q=Q.trim(),!Q)return Z;let Y=0;while(Y<Q.length){while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Y>=Q.length)break;let J="";if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)J+=Q[Y+1],Y+=2;else J+=Q[Y],Y++;Y++}else while(Y<Q.length&&/[\w$]/.test(Q[Y]))J+=Q[Y],Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===":")Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;let G,W=Y;if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;let _="";while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)_+=Q[Y+1],Y+=2;else _+=Q[Y],Y++;Y++,G=_}else if(Q[Y]==="{"){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="{")K++;else if(Q[Y]==="}")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);G=U6(_,X)}else if(Q[Y]==="["){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="[")K++;else if(Q[Y]==="]")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);try{G=JSON.parse(_.replace(/'/g,'"'))}catch{G=_}}else{let K="";while(Y<Q.length&&Q[Y]!==","&&!/\s/.test(Q[Y]))K+=Q[Y],Y++;if(K=K.trim(),K==="true")G=!0;else if(K==="false")G=!1;else if(K==="null")G=null;else if(K==="undefined")G=void 0;else if(/^-?\d+(\.\d+)?$/.test(K))G=Number(K);else if(K in X)G=X[K];else G=K}if(J)Z[J]=G;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===",")Y++}return Z}function eJ($,X,Z){let Q=[];for(let[Y,J]of Object.entries(X)){let G=$[Y];if(J.required&&(G===void 0||G===null)){Q.push(`Component "${Z}": Missing required prop "${Y}"`);continue}if(G===void 0||G===null)continue;let W=Array.isArray(J.type)?J.type:[J.type];if(!W.includes("any")){let K=d3(G);if(!W.includes(K))Q.push(`Component "${Z}": Prop "${Y}" expected ${W.join(" | ")}, got ${K}`)}if(J.validator&&!J.validator(G))Q.push(`Component "${Z}": Prop "${Y}" failed custom validation`)}return Q}function $G($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0&&Y.default!==void 0)Z[Q]=typeof Y.default==="function"?Y.default():Y.default;return Z}function d3($){if(Array.isArray($))return"array";if($===null)return"null";return typeof $}var u3={name:"component",handler:async($,X,Z,Q)=>{if(X.length<1)return r1("Component","component directive requires at least the component name",s1.INVALID_DIRECTIVE_SYNTAX);let Y=X[0].replace(/['"]/g,""),J={};if(X.length>1)try{let U=X.slice(1).join(",").trim();if(U.startsWith("{")){if(J=K6(U,Z),Object.keys(J).length===0)J=U6(U,Z)}else{let F=U.trim(),z=Z[F];if(z&&typeof z==="object"&&!Array.isArray(z))J=z}}catch(U){let F=U instanceof Error?U.message:String(U);return console.error("Component props parsing error:",F),r1("Component",`Error parsing component props: ${F}`,s1.EVALUATION_ERROR)}let G=Z.__stx_options||{},W=G.componentsDir||"components",K=new Set;if(!Z.__processedComponents)Z.__processedComponents=new Set;let _=Z.__processedComponents;try{return await _6(Y,J,"",W,Z,Q,G,_,K)}catch(U){console.error("Component rendering error:",U);let F=U instanceof Error?U.message:String(U);return r1("Component",`Error rendering component: ${F}`,s1.COMPONENT_RENDER_ERROR)}},hasEndTag:!1};function XG(){return[u3]}import{mkdir as m3,readFile as p3,readdir as c3,stat as B6,writeFile as l3}from"fs/promises";import U0 from"path";function O6($){if($==="connectedCallback")return`method "${$}" is reserved; define "onConnect" instead, which the element calls once it is connected, rendered and bound`;if($==="disconnectedCallback")return`method "${$}" is reserved; define "onDisconnect" instead, which the element calls as it leaves the DOM, before it releases its own listeners`;return`method "${$}" is reserved`}var A6=new Set(["constructor","connectedCallback","disconnectedCallback","attributeChangedCallback","adoptedCallback"]);function i3($){return $.replace(/\.stx$/i,"").split(/[^a-z0-9]+/i).filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join("")}function t$($){return $.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}function a3($){return/^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test($)&&!$.startsWith("xml")&&!/[A-Z]/.test($)}function s3($){if($===!0)return"open";if($==="open"||$==="closed")return $;return!1}async function r3($){let X=[];async function Z(Q){let Y=await c3(Q,{withFileTypes:!0});Y.sort((J,G)=>J.name.localeCompare(G.name));for(let J of Y){let G=U0.join(Q,J.name);if(J.isDirectory()){if(!J.name.startsWith(".")&&J.name!=="node_modules")await Z(G)}else if(J.isFile()&&J.name.endsWith(".stx")&&!/\.(?:test|spec)\.stx$/i.test(J.name))X.push(G)}}return await Z($),X}function n3($,X){let Z=$.match(/<script\b(?=[^>]*(?:\bcomponent\b|\bstx:component\b))[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return{};let Q=Z[1].trim();if(!Q)return{};try{return JSON.parse(Q)}catch(Y){throw Error(`${X}: <script component> must contain JSON metadata (${Y.message})`)}}function o3($,X){let Z={},Q=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)];for(let Y of Q){if(!/\bclient\b/i.test(Y[1])||/\bcomponent\b|\bstx:component\b/i.test(Y[1]))continue;let J;try{J=new Bun.Transpiler({loader:"ts"}).transformSync(Y[2])}catch(K){throw Error(`${X}: failed to transpile <script client> (${K.message})`)}let G=/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)\s*\{/g,W;while(W=G.exec(J)){let K=W[1];if(A6.has(K))throw Error(`${X}: client ${O6(K)}`);let _=G.lastIndex,U=1,F="",z=!1,j=_;for(;j<J.length&&U>0;j++){let L=J[j];if(z){z=!1;continue}if(F){if(L==="\\")z=!0;else if(L===F)F="";continue}if(L==='"'||L==="'"||L==="`")F=L;else if(L==="{")U++;else if(L==="}")U--}if(U!==0)throw Error(`${X}: unterminated client function "${K}"`);let H=W[0].includes("async")?"async ":"";Z[K]=`${H}${K}(${W[2]}) {${J.slice(_,j-1)}}`,G.lastIndex=j}}return Z}function t3($){let X=$.match(/<template\b(?![^>]*\bshadowrootmode\b)[^>]*>([\s\S]*?)<\/template>/i);return(X?X[1]:$).replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"").trim()}function L6($){return[...$.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((X)=>X[1].trim()).filter(Boolean).join(`
199
199
 
200
- `)}function r3($){if(!$)return null;let X=$.replace(/\s*\|\s*(?:undefined|null)\b/g,"").trim();if(/^string$/.test(X))return"string";if(/^number$/.test(X))return"number";if(/^boolean$/.test(X))return"boolean";if(/^(?:'[^']*'|"[^"]*")(?:\s*\|\s*(?:'[^']*'|"[^"]*"))*$/.test(X))return"string";return"object"}function s3($){if($===void 0)return"object";if($==="true"||$==="false")return"boolean";if(/^-?\d+(?:\.\d+)?$/.test($))return"number";if(/^['"`]/.test($))return"string";return"object"}function n3($){if($==="true")return!0;if($==="false")return!1;if(/^-?\d+(?:\.\d+)?$/.test($))return Number($);if(/^['"`]/.test($))return $.slice(1,-1);try{return JSON.parse($)}catch{return}}function o3($){let X=[],Z=0,Q=$.replace(/\{\{--[\s\S]*?--\}\}/g,""),Y=/@(if|elseif|else|endif|foreach|endforeach)\s*/g,J,G=(K)=>{if(Q[K]!=="(")return null;let _=0,U="";for(let F=K;F<Q.length;F++){let z=Q[F];if(U!==""){if(z==="\\")F++;else if(z===U)U="";continue}if(z==="'"||z==='"'||z==="`"){U=z;continue}if(z==="(")_++;else if(z===")"){if(_--,_===0)return{expression:Q.slice(K+1,F),end:F+1}}}return null},W=(K)=>{if(K==="")return;let _=0,U=/\{!!\s*([\s\S]*?)\s*!!\}|\{\{\s*([\s\S]*?)\s*\}\}/g,F;while(F=U.exec(K)){if(F.index>_)X.push(`out += ${JSON.stringify(K.slice(_,F.index))};`);X.push(F[1]!==void 0?`out += __raw(${F[1]});`:`out += __escape(${F[2]});`),_=F.index+F[0].length}if(_<K.length)X.push(`out += ${JSON.stringify(K.slice(_))};`)};while(J=Y.exec(Q)){W(Q.slice(Z,J.index)),Z=J.index+J[0].length;let _=J[1]==="if"||J[1]==="elseif"||J[1]==="foreach"?G(Z):null;if(_)Z=_.end,Y.lastIndex=_.end;let U=_?.expression;switch(J[1]){case"if":X.push(`if (${U}) {`);break;case"elseif":X.push(`} else if (${U}) {`);break;case"else":X.push("} else {");break;case"endif":case"endforeach":X.push("}");break;case"foreach":{let F=/^([\s\S]+?)\s+as\s+(?:([A-Za-z_$][\w$]*)\s*=>\s*)?([A-Za-z_$][\w$]*)$/.exec((U||"").trim());if(!F){X.push(`out += ${JSON.stringify(J[0]+(_?`(${U})`:""))};`);break}let[,z,j,H]=F;X.push(j?`for (const [${j}, ${H}] of __entries(${z})) {`:`for (const ${H} of __values(${z})) {`);break}}}return W(Q.slice(Z)),X.join(`
201
- `)}function t3($){let X=$.trim().replace(/^\{/,"").replace(/\}$/,""),Z=[],Q=0;while(Q<X.length){let Y=/\s*([A-Za-z_$][\w$]*)\s*:/y;Y.lastIndex=Q;let J=Y.exec(X);if(!J)break;Q=Y.lastIndex;let G=0,W="",K=Q;while(Q<X.length){let U=X[Q];if(W){if(U==="\\")Q++;else if(U===W)W=""}else if(U==="'"||U==='"'||U==="`")W=U;else if(U==="{"||U==="["||U==="(")G++;else if(U==="}"||U==="]"||U===")")G--;else if(U===","&&G===0)break;Q++}let _=X.slice(K,Q).trim();if(_)Z.push([J[1],_]);Q++}return Z}function e3($,X,Z){let Y=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)].find((z)=>!/\bcomponent\b|\bstx:component\b|\bclient\b/i.test(z[1]));if(!Y)return{imports:[],body:"",propNames:[],defaults:{},declared:{}};let J=Y[2],G=[],W=[],K={},_={};J=J.replace(/^\s*import\s+[\s\S]*?from\s*['"][^'"]+['"];?\s*$/gm,(z)=>{if(/from\s*['"]stx['"]/.test(z))return"";return G.push(z.trim().replace(/(from\s*['"])(\.[^'"]*)(['"])/,(j,H,L,O)=>{let A=U0.resolve(U0.dirname(X),L),V=U0.relative(Z,A);return`${H}${V.startsWith(".")?V:`./${V}`}${O}`})),""});let F=/const\s*\{([^}]*)\}\s*=\s*(?:withDefaults\s*\(\s*)?defineProps\s*<[^>]*>\s*\(\s*\)\s*(?:,\s*(\{[\s\S]*?\})\s*,?\s*\))?/.exec(J);if(F){for(let z of F[1].split(",")){let j=z.split(":")[0].trim();if(j)W.push(j)}for(let[z,j]of t3(F[2]||""))K[z]=j;J=J.replace(F[0],"")}for(let z of J.matchAll(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{([\s\S]*?)\n\}/g))for(let j of z[1].matchAll(/^\s*(?:\/\*\*[\s\S]*?\*\/\s*)?([A-Za-z_$][\w$]*)\??\s*:\s*([^\n;]+)/gm))_[j[1]]=j[2].trim();return J=J.replace(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{[\s\S]*?\n\}/g,""),{imports:G,body:J.trim(),propNames:W,defaults:K,declared:_}}function $4($){let X=new Set;return{template:$.replace(/\s@([a-z][\w:-]*)(\.[\w.-]+)?\s*=\s*(["'])([A-Za-z_$][\w$]*)\3/gi,(Q,Y,J,G,W)=>{let K=Y.toLowerCase();X.add(K);let _=(J||"").split(".").filter(Boolean).join(" ");return` data-stx-on-${K}="${W}"${_?` data-stx-mod-${K}="${_}"`:""}`}),eventTypes:[...X].sort()}}function X4($){let X=[];return{template:$.replace(/\s:([a-z][\w:-]*)\s*=\s*(["'])([\w$.]+)\2/gi,(Q,Y,J,G)=>{let W=X.length;return X.push({id:W,name:Y,expression:G}),` data-stx-bind-${W}=""`}),bindings:X}}function Z4($){let X=new Set;for(let Z of $.matchAll(/<slot\b([^>]*)>/gi))X.add(Z[1].match(/\bname\s*=\s*["']([^"']+)["']/i)?.[1]||"");return[...X].map((Z)=>({name:Z}))}function Q4($){return[...new Set([...$.matchAll(/(--[a-z0-9_-]+)\s*:/gi)].map((X)=>X[1]))].sort().map((X)=>({name:X}))}function U6($,X){if(!X||!new Set(["string","number","boolean","object","array"]).has(X.type))throw Error(`Property "${$}" must declare one of: string, number, boolean, object, array`);return{...X,reflect:X.reflect??X.attribute!==!1}}async function Y4($,X,Z){let Q=U0.isAbsolute(X.file)?X.file:U0.resolve($,X.file),Y=await f3(Q,"utf8"),J=l3(Y,Q),G=U0.basename(Q,".stx"),W=X.name||J.name||u3(G),K=`${s$(Z.prefix||"stx")}-${s$(G)}`,_=X.tag||J.tag||K;if(!W||!/^[A-Za-z_$][\w$]*$/.test(W))throw Error(`${Q}: invalid component class name "${W}"`);if(!m3(_))throw Error(`${Q}: invalid custom-element tag "${_}"; tags must be lowercase and contain a hyphen`);let U=X.properties||J.properties||J.props||{},F=Object.fromEntries(Object.entries(U).map(([E,q])=>[E,U6(E,q)])),z=$4(a3(Y)),j=X4(z.template),H=e3(Y,Q,U0.resolve(Z.outputDir)),L=o3(j.template);for(let E of H.propNames){if(F[E])continue;let q=H.defaults[E];F[E]=U6(E,{type:r3(H.declared[E])??s3(q),...q===void 0?{}:{default:n3(q)}})}let O=J.methods||{},A=X.methods||{},V=i3(Y,Q);return{file:U0.relative($,Q),sourcePath:Q,name:W,tag:_,description:X.description||J.description||"",template:j.template,styles:_6(Y),shadowMode:p3(X.shadowDOM??J.shadowDOM??Z.shadowDOM),progressive:X.progressive??J.progressive??Z.progressive??!0,properties:F,events:X.events||J.events||{},methods:{...O,...A,...V},eventTypes:z.eventTypes,bindings:j.bindings,slots:Z4(j.template),cssProperties:Q4(_6(Y)),scope:H,render:L}}function J4(){let $=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),X=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}");return`const HTMLElementBase = globalThis.HTMLElement || class {};
200
+ `)}function e3($){if(!$)return null;let X=$.replace(/\s*\|\s*(?:undefined|null)\b/g,"").trim();if(/^string$/.test(X))return"string";if(/^number$/.test(X))return"number";if(/^boolean$/.test(X))return"boolean";if(/^(?:'[^']*'|"[^"]*")(?:\s*\|\s*(?:'[^']*'|"[^"]*"))*$/.test(X))return"string";return"object"}function $4($){if($===void 0)return"object";if($==="true"||$==="false")return"boolean";if(/^-?\d+(?:\.\d+)?$/.test($))return"number";if(/^['"`]/.test($))return"string";return"object"}function X4($){if($==="true")return!0;if($==="false")return!1;if(/^-?\d+(?:\.\d+)?$/.test($))return Number($);if(/^['"`]/.test($))return $.slice(1,-1);try{return JSON.parse($)}catch{return}}function Z4($){let X=[],Z=0,Q=$.replace(/\{\{--[\s\S]*?--\}\}/g,""),Y=/@(if|elseif|else|endif|foreach|endforeach)\s*/g,J,G=(K)=>{if(Q[K]!=="(")return null;let _=0,U="";for(let F=K;F<Q.length;F++){let z=Q[F];if(U!==""){if(z==="\\")F++;else if(z===U)U="";continue}if(z==="'"||z==='"'||z==="`"){U=z;continue}if(z==="(")_++;else if(z===")"){if(_--,_===0)return{expression:Q.slice(K+1,F),end:F+1}}}return null},W=(K)=>{if(K==="")return;let _=0,U=/\{!!\s*([\s\S]*?)\s*!!\}|\{\{\s*([\s\S]*?)\s*\}\}/g,F;while(F=U.exec(K)){if(F.index>_)X.push(`out += ${JSON.stringify(K.slice(_,F.index))};`);X.push(F[1]!==void 0?`out += __raw(${F[1]});`:`out += __escape(${F[2]});`),_=F.index+F[0].length}if(_<K.length)X.push(`out += ${JSON.stringify(K.slice(_))};`)};while(J=Y.exec(Q)){W(Q.slice(Z,J.index)),Z=J.index+J[0].length;let _=J[1]==="if"||J[1]==="elseif"||J[1]==="foreach"?G(Z):null;if(_)Z=_.end,Y.lastIndex=_.end;let U=_?.expression;switch(J[1]){case"if":X.push(`if (${U}) {`);break;case"elseif":X.push(`} else if (${U}) {`);break;case"else":X.push("} else {");break;case"endif":case"endforeach":X.push("}");break;case"foreach":{let F=/^([\s\S]+?)\s+as\s+(?:([A-Za-z_$][\w$]*)\s*=>\s*)?([A-Za-z_$][\w$]*)$/.exec((U||"").trim());if(!F){X.push(`out += ${JSON.stringify(J[0]+(_?`(${U})`:""))};`);break}let[,z,j,H]=F;X.push(j?`for (const [${j}, ${H}] of __entries(${z})) {`:`for (const ${H} of __values(${z})) {`);break}}}return W(Q.slice(Z)),X.join(`
201
+ `)}function n1($,X,Z,Q){if($[X]!==Z)return-1;let Y=0,J=null;for(let G=X;G<$.length;G++){let W=$[G];if(J){if(W==="\\"){G++;continue}if(W===J)J=null;continue}if(W==="'"||W==='"'||W==="`"){J=W;continue}if(W===Z)Y++;else if(W===Q){if(Q===">"&&$[G-1]==="=")continue;if(Y--,Y===0)return G+1}}return-1}function n$($,X,Z){let Q=Z?"([{<":"([{",Y=Z?")]}>":")]}",J=[],G=0,W=null,K="";for(let _=0;_<$.length;_++){let U=$[_];if(W){if(K+=U,U==="\\"){K+=$[++_]??"";continue}if(U===W)W=null;continue}if(U==="'"||U==='"'||U==="`"){W=U,K+=U;continue}if(Q.includes(U))G++;else if(Y.includes(U))G--;if(G===0&&X.includes(U)){J.push(K),K="";continue}K+=U}return J.push(K),J.map((_)=>_.trim()).filter(Boolean)}function Q4($){let X=0,Z=null;for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Z){if(Y==="\\"){Q++;continue}if(Y===Z)Z=null;continue}if(Y==="'"||Y==='"'||Y==="`"){Z=Y;continue}if("([{".includes(Y))X++;else if(")]}".includes(Y))X--;if(X!==0||Y!=="=")continue;let J=$[Q-1];if($[Q+1]==="="||J==="="||J==="!"||J==="<"||J===">")continue;return Q}return-1}function F6($){switch($.trim()){case"String":return"string";case"Number":return"number";case"Boolean":return"boolean";case"Array":return"unknown[]";case"Object":return"Record<string, unknown>";default:return}}function Y4($){let X=/\bdefineProps\b/.exec($);if(!X)return null;let Z=/(?:^|[\s;{}()])(const|let|var)\s+/g,Q=-1;for(let A=Z.exec($);A&&A.index<X.index;A=Z.exec($))Q=A.index+A[0].indexOf(A[1]);if(Q===-1)return null;let Y={},J={},G=[],W=Q+(/^(?:const|let|var)\s+/.exec($.slice(Q))?.[0].length??0),K=()=>{while(W<$.length&&/\s/.test($[W]))W++},_;if($[W]==="{"){let A=n1($,W,"{","}");if(A===-1)return null;_=$.slice(W,A),W=A}else{let A=/^[A-Za-z_$][\w$]*/.exec($.slice(W));if(!A)return null;_=A[0],W+=A[0].length}if(K(),$[W]!=="=")return null;W++,K();let U=/^withDefaults\s*\(\s*/.exec($.slice(W)),F=Boolean(U);if(U)W+=U[0].length;let z=/^defineProps\b/.exec($.slice(W));if(!z)return null;W+=z[0].length;let j="";if(K(),$[W]==="<"){let A=n1($,W,"<",">");if(A===-1)return null;j=$.slice(W+1,A-1).trim(),W=A}if(K(),$[W]!=="(")return null;let H=n1($,W,"(",")");if(H===-1)return null;let L=$.slice(W+1,H-1).trim();if(W=H,F){if(K(),$[W]===",")W++,K();if($[W]==="{"){let A=n1($,W,"{","}");if(A===-1)return null;for(let[M,V]of o$($.slice(W,A)))J[M]=V;W=A}if(K(),$[W]===",")W++,K();if($[W]===")")W++}if($[W]===";")W++;let O=/^[A-Za-z_$][\w$]*$/.test(j)?j:void 0;if(j.startsWith("{"))for(let A of n$(j.replace(/^\{/,"").replace(/\}$/,""),",;",!0)){let M=/^(?:readonly\s+)?([A-Za-z_$][\w$]*)\s*\??\s*:\s*([\s\S]+)$/.exec(A);if(M)Y[M[1]]=M[2].trim()}if(L.startsWith("{"))for(let[A,M]of o$(L)){if(G.push(A),!M.startsWith("{")){let V=F6(M);if(V)Y[A]=V;continue}for(let[V,N]of o$(M))if(V==="default")J[A]=N;else if(V==="type"){let q=F6(N);if(q)Y[A]=q}}else if(L.startsWith("["))for(let A of n$(L.slice(1,-1),",",!1))G.push(A.replace(/^['"`]/,"").replace(/['"`]$/,""));if(_.startsWith("{")){G.length=0;for(let A of n$(_.replace(/^\{/,"").replace(/\}$/,""),",",!1)){let M=Q4(A),N=(M===-1?A:A.slice(0,M)).split(":")[0].trim().replace(/^\.\.\./,"");if(!N)continue;if(G.push(N),M!==-1)J[N]=A.slice(M+1).trim()}}else if(G.length===0)G.push(...Object.keys(Y));return{text:$.slice(Q,W),propNames:G,defaults:J,declared:Y,typeName:O}}function o$($){let X=$.trim().replace(/^\{/,"").replace(/\}$/,""),Z=[],Q=0;while(Q<X.length){let Y=/\s*([A-Za-z_$][\w$]*)\s*:/y;Y.lastIndex=Q;let J=Y.exec(X);if(!J)break;Q=Y.lastIndex;let G=0,W="",K=Q;while(Q<X.length){let U=X[Q];if(W){if(U==="\\")Q++;else if(U===W)W=""}else if(U==="'"||U==='"'||U==="`")W=U;else if(U==="{"||U==="["||U==="(")G++;else if(U==="}"||U==="]"||U===")")G--;else if(U===","&&G===0)break;Q++}let _=X.slice(K,Q).trim();if(_)Z.push([J[1],_]);Q++}return Z}function J4($,X,Z){let Y=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)].find((z)=>!/\bcomponent\b|\bstx:component\b|\bclient\b/i.test(z[1]));if(!Y)return{imports:[],body:"",propNames:[],defaults:{},declared:{}};let J=Y[2],G=[],W=[],K={},_={};J=J.replace(/^\s*import\s+[\s\S]*?from\s*['"][^'"]+['"];?\s*$/gm,(z)=>{if(/from\s*['"]stx['"]/.test(z))return"";return G.push(z.trim().replace(/(from\s*['"])(\.[^'"]*)(['"])/,(j,H,L,O)=>{let A=U0.resolve(U0.dirname(X),L),M=U0.relative(Z,A);return`${H}${M.startsWith(".")?M:`./${M}`}${O}`})),""});let U=Y4(J);if(U)W.push(...U.propNames),Object.assign(K,U.defaults),Object.assign(_,U.declared),J=J.replace(U.text,"");let F={};for(let z of J.matchAll(/(?:export\s+)?interface\s+([A-Za-z_$][\w$]*)\s*\{([\s\S]*?)\n\}/g)){let j=[];for(let H of z[2].matchAll(/^\s*(?:\/\*\*[\s\S]*?\*\/\s*)?([A-Za-z_$][\w$]*)\??\s*:\s*([^\n;]+)/gm))_[H[1]]=H[2].trim(),j.push(H[1]);F[z[1]]=j}if(U&&U.propNames.length===0&&U.typeName){for(let z of F[U.typeName]??[])if(!W.includes(z))W.push(z)}return J=J.replace(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{[\s\S]*?\n\}/g,""),{imports:G,body:J.trim(),propNames:W,defaults:K,declared:_}}function G4($){let X=new Set;return{template:$.replace(/\s@([a-z][\w:-]*)(\.[\w.-]+)?\s*=\s*(["'])([A-Za-z_$][\w$]*)\3/gi,(Q,Y,J,G,W)=>{let K=Y.toLowerCase();X.add(K);let _=(J||"").split(".").filter(Boolean).join(" ");return` data-stx-on-${K}="${W}"${_?` data-stx-mod-${K}="${_}"`:""}`}),eventTypes:[...X].sort()}}function W4($){let X=[];return{template:$.replace(/\s:([a-z][\w:-]*)\s*=\s*(["'])([\w$.]+)\2/gi,(Q,Y,J,G)=>{let W=X.length;return X.push({id:W,name:Y,expression:G}),` data-stx-bind-${W}=""`}),bindings:X}}function K4($){let X=new Set;for(let Z of $.matchAll(/<slot\b([^>]*)>/gi))X.add(Z[1].match(/\bname\s*=\s*["']([^"']+)["']/i)?.[1]||"");return[...X].map((Z)=>({name:Z}))}function _4($){return[...new Set([...$.matchAll(/(--[a-z0-9_-]+)\s*:/gi)].map((X)=>X[1]))].sort().map((X)=>({name:X}))}function z6($,X){if(!X||!new Set(["string","number","boolean","object","array"]).has(X.type))throw Error(`Property "${$}" must declare one of: string, number, boolean, object, array`);return{...X,reflect:X.reflect??X.attribute!==!1}}async function U4($,X,Z){let Q=U0.isAbsolute(X.file)?X.file:U0.resolve($,X.file),Y=await p3(Q,"utf8"),J=n3(Y,Q),G=U0.basename(Q,".stx"),W=X.name||J.name||i3(G),K=`${t$(Z.prefix||"stx")}-${t$(G)}`,_=X.tag||J.tag||K;if(!W||!/^[A-Za-z_$][\w$]*$/.test(W))throw Error(`${Q}: invalid component class name "${W}"`);if(!a3(_))throw Error(`${Q}: invalid custom-element tag "${_}"; tags must be lowercase and contain a hyphen`);let U=X.properties||J.properties||J.props||{},F=Object.fromEntries(Object.entries(U).map(([V,N])=>[V,z6(V,N)])),z=G4(t3(Y)),j=W4(z.template),H=J4(Y,Q,U0.resolve(Z.outputDir)),L=Z4(j.template);for(let V of H.propNames){if(F[V])continue;let N=H.defaults[V];F[V]=z6(V,{type:e3(H.declared[V])??$4(N),...N===void 0?{}:{default:X4(N)}})}let O=J.methods||{},A=X.methods||{},M=o3(Y,Q);return{file:U0.relative($,Q),sourcePath:Q,name:W,tag:_,description:X.description||J.description||"",template:j.template,styles:L6(Y),shadowMode:s3(X.shadowDOM??J.shadowDOM??Z.shadowDOM),progressive:X.progressive??J.progressive??Z.progressive??!0,properties:F,events:X.events||J.events||{},methods:{...O,...A,...M},eventTypes:z.eventTypes,bindings:j.bindings,slots:K4(j.template),cssProperties:_4(L6(Y)),scope:H,render:L}}function B4(){let $=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),X=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}");return`const HTMLElementBase = globalThis.HTMLElement || class {};
202
202
 
203
203
  const escapeHTML = (value) => String(value ?? '')
204
204
  .replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')
@@ -290,12 +290,24 @@ export class StxElement extends HTMLElementBase {
290
290
  this.setAttribute?.('hydrated', '');
291
291
  this.dispatchEvent?.(new CustomEvent('stx:hydrated', { bubbles: true, composed: true }));
292
292
  }
293
+ // Called last, so a component that acquires something sees its own rendered
294
+ // markup and its events already bound. Reported rather than rethrown: a
295
+ // component that fails to set up must not take the element down with it.
296
+ try { this.onConnect?.(); }
297
+ catch (error) { console.error('[stx] onConnect failed', error); }
293
298
  }
294
299
 
295
300
  disconnectedCallback() {
296
301
  this._connected = false;
297
- for (const [event, listener] of this._listeners) this.renderRoot.removeEventListener(event, listener);
298
- this._listeners.clear();
302
+ // Called before the framework releases anything, so the element is still
303
+ // intact for a component that needs to read it on the way out, and inside
304
+ // try/finally so a throwing hook cannot leak the framework's own listeners.
305
+ try { this.onDisconnect?.(); }
306
+ catch (error) { console.error('[stx] onDisconnect failed', error); }
307
+ finally {
308
+ for (const [event, listener] of this._listeners) this.renderRoot.removeEventListener(event, listener);
309
+ this._listeners.clear();
310
+ }
299
311
  }
300
312
 
301
313
  attributeChangedCallback(attribute, oldValue, newValue) {
@@ -484,7 +496,7 @@ export function defineComponent(Component, definition) {
484
496
  }
485
497
  return Component;
486
498
  }
487
- `}function G4($){let X=JSON.stringify({tag:$.tag,template:$.template,styles:$.styles,shadowMode:$.shadowMode,progressive:$.progressive,properties:$.properties,eventTypes:$.eventTypes,bindings:$.bindings},null,2),Z=Object.entries($.methods).map(([W,K])=>{if(F6.has(W))throw Error(`${$.sourcePath}: method "${W}" is reserved`);if(/^(?:async\s+)?[A-Za-z_$][\w$]*\s*\(/.test(K.trim()))return` ${K.trim()}`;return` ${W}($event) {
499
+ `}function L4($){let X=JSON.stringify({tag:$.tag,template:$.template,styles:$.styles,shadowMode:$.shadowMode,progressive:$.progressive,properties:$.properties,eventTypes:$.eventTypes,bindings:$.bindings},null,2),Z=Object.entries($.methods).map(([W,K])=>{if(A6.has(W))throw Error(`${$.sourcePath}: ${O6(W)}`);if(/^(?:async\s+)?[A-Za-z_$][\w$]*\s*\(/.test(K.trim()))return` ${K.trim()}`;return` ${W}($event) {
488
500
  ${K}
489
501
  }`}).join(`
490
502
 
@@ -509,8 +521,8 @@ ${Z}${G}
509
521
 
510
522
  defineComponent(${$.name}, ${X});
511
523
  export default ${$.name};
512
- `}function n1($){switch($.type){case"boolean":return"boolean";case"number":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return"string"}}function W4($){let X=Object.entries($.properties).map(([J,G])=>` ${J}${G.required?"":"?"}: ${n1(G)}`).join(`
513
- `),Z=Object.entries($.properties).map(([J,G])=>` ${J}: ${n1(G)}`).join(`
524
+ `}function o1($){switch($.type){case"boolean":return"boolean";case"number":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return"string"}}function F4($){let X=Object.entries($.properties).map(([J,G])=>` ${J}${G.required?"":"?"}: ${o1(G)}`).join(`
525
+ `),Z=Object.entries($.properties).map(([J,G])=>` ${J}: ${o1(G)}`).join(`
514
526
  `),Q=Object.entries($.events).map(([J,G])=>` ${JSON.stringify(J)}: CustomEvent<${G.detailType||"unknown"}>`).join(`
515
527
  `),Y=Object.keys($.methods).map((J)=>` ${J}($event?: Event): unknown`).join(`
516
528
  `);return`export interface ${$.name}Props {
@@ -536,10 +548,10 @@ declare global {
536
548
  }
537
549
 
538
550
  export default ${$.name}
539
- `}function K4($){return`declare global {
551
+ `}function z4($){return`declare global {
540
552
  namespace JSX {
541
553
  interface IntrinsicElements {
542
- ${$.map((Z)=>{let Q=Object.entries(Z.properties).map(([J,G])=>` ${JSON.stringify(J)}?: ${n1(G)}`).join(`
554
+ ${$.map((Z)=>{let Q=Object.entries(Z.properties).map(([J,G])=>` ${JSON.stringify(J)}?: ${o1(G)}`).join(`
543
555
  `),Y=Object.keys(Z.events).map((J)=>{return` ${`on${J.split(/[-:]/).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}?: (event: CustomEvent<${Z.events[J].detailType||"unknown"}>) => void`}).join(`
544
556
  `);return` ${JSON.stringify(Z.tag)}: {
545
557
  ${Q}
@@ -555,9 +567,9 @@ ${Y}
555
567
  }
556
568
 
557
569
  export {}
558
- `}function _4($){return{schemaVersion:"1.0.0",modules:$.map((X)=>({kind:"javascript-module",path:`./${X.tag}.js`,declarations:[{kind:"class",name:X.name,description:X.description||void 0,customElement:!0,tagName:X.tag,members:Object.entries(X.properties).map(([Z,Q])=>({kind:"field",name:Z,description:Q.description,type:{text:n1(Q)},default:Q.default===void 0?void 0:JSON.stringify(Q.default),attribute:Q.attribute===!1?void 0:Q.attribute||s$(Z),reflects:Q.reflect})),events:Object.entries(X.events).map(([Z,Q])=>({name:Z,description:Q.description,type:{text:`CustomEvent<${Q.detailType||"unknown"}>`}})),slots:X.slots,cssProperties:X.cssProperties}],exports:[{kind:"js",name:X.name,declaration:{name:X.name,module:`./${X.tag}.js`}}]}))}}function B6($){if(!$.styles)return"";let X=$.styles.replace(/:host\b/g,":scope");if(/\@scope\s*\(/.test(X))return X;return`@scope (${$.tag}) {
570
+ `}function j4($){return{schemaVersion:"1.0.0",modules:$.map((X)=>({kind:"javascript-module",path:`./${X.tag}.js`,declarations:[{kind:"class",name:X.name,description:X.description||void 0,customElement:!0,tagName:X.tag,members:Object.entries(X.properties).map(([Z,Q])=>({kind:"field",name:Z,description:Q.description,type:{text:o1(Q)},default:Q.default===void 0?void 0:JSON.stringify(Q.default),attribute:Q.attribute===!1?void 0:Q.attribute||t$(Z),reflects:Q.reflect})),events:Object.entries(X.events).map(([Z,Q])=>({name:Z,description:Q.description,type:{text:`CustomEvent<${Q.detailType||"unknown"}>`}})),slots:X.slots,cssProperties:X.cssProperties}],exports:[{kind:"js",name:X.name,declaration:{name:X.name,module:`./${X.tag}.js`}}]}))}}function j6($){if(!$.styles)return"";let X=$.styles.replace(/:host\b/g,":scope");if(/\@scope\s*\(/.test(X))return X;return`@scope (${$.tag}) {
559
571
  ${X}
560
- }`}function L6($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;,])\s*/g,"$1").replace(/;}/g,"}").trim()}function U4($){let X=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),Z=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}"),Q=JSON.stringify('<slot(?:\\s+name=["\\\']([^"\\\']+)["\\\'])?\\s*\\/?>(?:<\\/slot>)?'),Y=Object.fromEntries($.map((G)=>[G.tag,{template:G.template,styles:G.styles,shadowMode:G.shadowMode,properties:G.properties}])),J=$.map((G)=>`export const render${G.name} = (props = {}, slots = {}) => renderComponent('${G.tag}', props, slots);`).join(`
572
+ }`}function H6($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;,])\s*/g,"$1").replace(/;}/g,"}").trim()}function H4($){let X=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),Z=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}"),Q=JSON.stringify('<slot(?:\\s+name=["\\\']([^"\\\']+)["\\\'])?\\s*\\/?>(?:<\\/slot>)?'),Y=Object.fromEntries($.map((G)=>[G.tag,{template:G.template,styles:G.styles,shadowMode:G.shadowMode,properties:G.properties}])),J=$.map((G)=>`export const render${G.name} = (props = {}, slots = {}) => renderComponent('${G.tag}', props, slots);`).join(`
561
573
  `);return`const definitions = ${JSON.stringify(Y,null,2)};
562
574
  const escapeHTML = (value) => String(value ?? '')
563
575
  .replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')
@@ -591,21 +603,21 @@ export function renderComponent(tag, props = {}, slots = {}) {
591
603
  }
592
604
 
593
605
  ${J}
594
- `}async function eJ($){let X=U0.resolve($.inputDir),Z=U0.resolve($.outputDir);if(!(await K6(X).catch(()=>null))?.isDirectory())throw Error(`Component-library input directory does not exist: ${X}`);let Y=$.components?.length?$.components:(await c3(X)).map((L)=>({file:L}));if(!Y.length)throw Error(`No .stx components found in ${X}`);let J=await Promise.all(Y.map((L)=>Y4(X,L,$)));J.sort((L,O)=>L.tag.localeCompare(O.tag));let G=J.filter((L,O)=>J.findIndex((A)=>A.tag===L.tag)!==O);if(G.length)throw Error(`Duplicate custom-element tag: ${G[0].tag}`);let W=J.filter((L,O)=>J.findIndex((A)=>A.name===L.name)!==O);if(W.length)throw Error(`Duplicate component class name: ${W[0].name}`);await g3(Z,{recursive:!0});let K=[],_=async(L,O)=>{let A=U0.join(Z,L);return await d3(A,O.endsWith(`
606
+ `}async function JG($){let X=U0.resolve($.inputDir),Z=U0.resolve($.outputDir);if(!(await B6(X).catch(()=>null))?.isDirectory())throw Error(`Component-library input directory does not exist: ${X}`);let Y=$.components?.length?$.components:(await r3(X)).map((L)=>({file:L}));if(!Y.length)throw Error(`No .stx components found in ${X}`);let J=await Promise.all(Y.map((L)=>U4(X,L,$)));J.sort((L,O)=>L.tag.localeCompare(O.tag));let G=J.filter((L,O)=>J.findIndex((A)=>A.tag===L.tag)!==O);if(G.length)throw Error(`Duplicate custom-element tag: ${G[0].tag}`);let W=J.filter((L,O)=>J.findIndex((A)=>A.name===L.name)!==O);if(W.length)throw Error(`Duplicate component class name: ${W[0].name}`);await m3(Z,{recursive:!0});let K=[],_=async(L,O)=>{let A=U0.join(Z,L);return await l3(A,O.endsWith(`
595
607
  `)?O:`${O}
596
- `,"utf8"),K.push(A),A};await _("runtime.js",J4());for(let L of J){if(await _(`${L.tag}.js`,G4(L)),$.declarations!==!1)await _(`${L.tag}.d.ts`,W4(L));if($.css!==!1&&L.styles){let O=L.shadowMode?L.styles:B6(L);await _(`${L.tag}.css`,$.minify?L6(O):O)}}let U=J.map((L)=>`export { ${L.name}, default as ${L.name}Element } from './${L.tag}.js';`).join(`
597
- `);if(await _("index.js",U),await _("ssr.js",U4(J)),$.declarations!==!1)await _("index.d.ts",J.map((L)=>`export * from './${L.tag}.js'`).join(`
598
- `)),await _("custom-elements.d.ts",K4(J)),await _("ssr.d.ts",`${J.map((L)=>`export declare const render${L.name}: (props?: ${L.name}Props, slots?: Record<string, string>) => string`).join(`
608
+ `,"utf8"),K.push(A),A};await _("runtime.js",B4());for(let L of J){if(await _(`${L.tag}.js`,L4(L)),$.declarations!==!1)await _(`${L.tag}.d.ts`,F4(L));if($.css!==!1&&L.styles){let O=L.shadowMode?L.styles:j6(L);await _(`${L.tag}.css`,$.minify?H6(O):O)}}let U=J.map((L)=>`export { ${L.name}, default as ${L.name}Element } from './${L.tag}.js';`).join(`
609
+ `);if(await _("index.js",U),await _("ssr.js",H4(J)),$.declarations!==!1)await _("index.d.ts",J.map((L)=>`export * from './${L.tag}.js'`).join(`
610
+ `)),await _("custom-elements.d.ts",z4(J)),await _("ssr.d.ts",`${J.map((L)=>`export declare const render${L.name}: (props?: ${L.name}Props, slots?: Record<string, string>) => string`).join(`
599
611
  `)}
600
612
  export declare function renderComponent(tag: string, props?: Record<string, unknown>, slots?: Record<string, string>): string
601
613
  ${J.map((L)=>`import type { ${L.name}Props } from './${L.tag}.js'`).join(`
602
- `)}`);let F;if($.manifest!==!1)F=await _("custom-elements.json",JSON.stringify(_4(J),null,2));let z;if($.css!==!1){let L=J.filter((O)=>!O.shadowMode&&O.styles).map(B6).join(`
614
+ `)}`);let F;if($.manifest!==!1)F=await _("custom-elements.json",JSON.stringify(j4(J),null,2));let z;if($.css!==!1){let L=J.filter((O)=>!O.shadowMode&&O.styles).map(j6).join(`
603
615
 
604
- `);if(L)z=await _("bundle.css",$.minify?L6(L):L)}let j;if($.bundle!==!1){j=U0.join(Z,"bundle.js");let L;try{L=await Bun.build({entrypoints:[U0.join(Z,"index.js")],outdir:Z,naming:"bundle.js",target:"browser",format:"esm",minify:$.minify??!0,sourcemap:$.sourcemap||"none"})}catch(O){let A=O instanceof AggregateError?O.errors:[O],V=A.map((E)=>String(E).trim()).filter(Boolean).join(`
605
- `);throw AggregateError(A,`Failed to bundle component library${V?`
606
- ${V}`:""}`)}if(!L.success){let O=L.logs.map((A)=>String(A).trim()).filter(Boolean).join(`
616
+ `);if(L)z=await _("bundle.css",$.minify?H6(L):L)}let j;if($.bundle!==!1){j=U0.join(Z,"bundle.js");let L;try{L=await Bun.build({entrypoints:[U0.join(Z,"index.js")],outdir:Z,naming:"bundle.js",target:"browser",format:"esm",minify:$.minify??!0,sourcemap:$.sourcemap||"none"})}catch(O){let A=O instanceof AggregateError?O.errors:[O],M=A.map((V)=>String(V).trim()).filter(Boolean).join(`
617
+ `);throw AggregateError(A,`Failed to bundle component library${M?`
618
+ ${M}`:""}`)}if(!L.success){let O=L.logs.map((A)=>String(A).trim()).filter(Boolean).join(`
607
619
  `);throw AggregateError(L.logs,`Failed to bundle component library${O?`
608
- ${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await Promise.all(K.map(async(L)=>(await K6(L)).size));return{components:J.map((L)=>({name:L.name,tag:L.tag,source:L.sourcePath,module:U0.join(Z,`${L.tag}.js`)})),files:K,manifest:F,bundle:j,cssBundle:z,totalBytes:H.reduce((L,O)=>L+O,0)}}var{serve:q4}=globalThis.Bun;import o$ from"fs";import W1 from"path";function o1(){return`
620
+ ${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await Promise.all(K.map(async(L)=>(await B6(L)).size));return{components:J.map((L)=>({name:L.name,tag:L.tag,source:L.sourcePath,module:U0.join(Z,`${L.tag}.js`)})),files:K,manifest:F,bundle:j,cssBundle:z,totalBytes:H.reduce((L,O)=>L+O,0)}}var{serve:R4}=globalThis.Bun;import $5 from"fs";import W1 from"path";function t1(){return`
609
621
  /* Theme selector for code blocks */
610
622
  .theme-selector {
611
623
  margin: 1rem 0;
@@ -655,13 +667,13 @@ ${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await
655
667
 
656
668
  body.dark-mode a {
657
669
  color: #58a6ff;
658
- }`}function t1($){return`
670
+ }`}function e1($){return`
659
671
  <div class="theme-selector">
660
672
  Theme:
661
673
  <select id="themeSelector" onchange="changeTheme()">
662
674
  ${$}
663
675
  </select>
664
- </div>`}function e1(){return`
676
+ </div>`}function $$(){return`
665
677
  function changeTheme() {
666
678
  const theme = document.getElementById('themeSelector').value;
667
679
 
@@ -677,7 +689,7 @@ else {
677
689
  }
678
690
 
679
691
  // Initialize theme on page load
680
- document.addEventListener('DOMContentLoaded', changeTheme);`}function $$($){if(Object.keys($).length===0)return"";return`
692
+ document.addEventListener('DOMContentLoaded', changeTheme);`}function X$($){if(Object.keys($).length===0)return"";return`
681
693
  <div class="frontmatter">
682
694
  <h3>Frontmatter</h3>
683
695
  ${Object.entries($).map(([X,Z])=>`
@@ -685,19 +697,19 @@ else {
685
697
  <span class="frontmatter-label">${X}:</span>
686
698
  <span>${Array.isArray(Z)?Z.join(", "):String(Z)}</span>
687
699
  </div>`).join("")}
688
- </div>`}import z6 from"net";async function B4($){return new Promise((X)=>{let Z=z6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"0.0.0.0")})}async function L4($){return new Promise((X)=>{let Z=z6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"::")})}async function F4($){if(!await B4($))return!1;return await L4($)}async function h0($,X=20){$=Number($);for(let Z=0;Z<X;Z++){let Q=$+Z;if(await F4(Q))return Q}throw Error(`Could not find an available port between ${$} and ${$+X-1}`)}var z4={title:"stx Development",width:1400,height:900,darkMode:!0,hotReload:!0,titlebarHidden:!1,nativeSidebar:!1,sidebarWidth:260,sidebarConfig:void 0};async function j4(){try{let $=await import("./chunk-jekrtm2j.js");if(typeof $.openDevWindow!=="function")return null;return $}catch{return null}}async function G1($,X={}){let Z={...z4,...X},Q=await j4();if(!Q)return console.log(`${B.yellow}\u26A0${B.reset} Native window requested, but @stacksjs/desktop is not available.`),console.log(" Install & build the desktop package to enable --native."),!1;try{let Y=await Q.openDevWindow($,{title:Z.title,width:Z.width,height:Z.height,darkMode:Z.darkMode,hotReload:Z.hotReload,titlebarHidden:Z.titlebarHidden,nativeSidebar:Z.nativeSidebar,sidebarWidth:Z.sidebarWidth,sidebarConfig:Z.sidebarConfig});if(Y&&Z.nativeSidebar)console.log(`${B.green}\u2713${B.reset} Native sidebar enabled (macOS Tahoe style)`);return Y}catch(Y){return console.log(`${B.red}\u2717${B.reset} Could not open native window:`,Y),!1}}function X$($){if($.match(/<Sidebar[\s\S]*?variant=["'](?:tahoe|vibrancy|desktop)["'][\s\S]*?\/>/i)){let Y=$.match(/<script\s+server[^>]*>([\s\S]*?)<\/script>/i);if(Y){let J=Y[1];try{let G=`
700
+ </div>`}import N6 from"net";async function O4($){return new Promise((X)=>{let Z=N6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"0.0.0.0")})}async function A4($){return new Promise((X)=>{let Z=N6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"::")})}async function N4($){if(!await O4($))return!1;return await A4($)}async function h0($,X=20){$=Number($);for(let Z=0;Z<X;Z++){let Q=$+Z;if(await N4(Q))return Q}throw Error(`Could not find an available port between ${$} and ${$+X-1}`)}var q4={title:"stx Development",width:1400,height:900,darkMode:!0,hotReload:!0,titlebarHidden:!1,nativeSidebar:!1,sidebarWidth:260,sidebarConfig:void 0};async function M4(){try{let $=await import("./chunk-jekrtm2j.js");if(typeof $.openDevWindow!=="function")return null;return $}catch{return null}}async function G1($,X={}){let Z={...q4,...X},Q=await M4();if(!Q)return console.log(`${B.yellow}\u26A0${B.reset} Native window requested, but @stacksjs/desktop is not available.`),console.log(" Install & build the desktop package to enable --native."),!1;try{let Y=await Q.openDevWindow($,{title:Z.title,width:Z.width,height:Z.height,darkMode:Z.darkMode,hotReload:Z.hotReload,titlebarHidden:Z.titlebarHidden,nativeSidebar:Z.nativeSidebar,sidebarWidth:Z.sidebarWidth,sidebarConfig:Z.sidebarConfig});if(Y&&Z.nativeSidebar)console.log(`${B.green}\u2713${B.reset} Native sidebar enabled (macOS Tahoe style)`);return Y}catch(Y){return console.log(`${B.red}\u2717${B.reset} Could not open native window:`,Y),!1}}function Z$($){if($.match(/<Sidebar[\s\S]*?variant=["'](?:tahoe|vibrancy|desktop)["'][\s\S]*?\/>/i)){let Y=$.match(/<script\s+server[^>]*>([\s\S]*?)<\/script>/i);if(Y){let J=Y[1];try{let G=`
689
701
  ${J}
690
702
  return typeof sidebarConfig !== 'undefined' ? sidebarConfig : null;
691
- `,K=Function(G)();if(K)return K}catch(G){console.warn("Invalid sidebarConfig:",G)}}return{sections:[]}}let Z=$.match(/@nativeSidebar\s*\(\s*(\{[\s\S]*?\})\s*\)/m);if(Z)try{return JSON.parse(Z[1])}catch{console.warn("Invalid @nativeSidebar configuration")}let Q=$.match(/<script\s+native-sidebar[^>]*>([\s\S]*?)<\/script>/i);if(Q)try{let Y=Q[1].match(/(?:export\s+(?:default\s+)?|const\s+\w+\s*=\s*)(\{[\s\S]*\})/m);if(Y)return Function(`return ${Y[1]}`)()}catch(Y){console.warn("Invalid native-sidebar script configuration:",Y)}return}function n$(){console.log(`
692
- Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in browser`),console.log(` ${B.cyan}c${B.reset} + Enter - Clear console`),console.log(` ${B.cyan}q${B.reset} + Enter (or ${B.cyan}Ctrl+C${B.reset}) - Quit server`),console.log(` ${B.cyan}h${B.reset} + Enter - Show this help`)}function H4($){console.log(`${B.green}Server running at ${B.cyan}${$}${B.reset}`),console.log(`Press ${B.cyan}Ctrl+C${B.reset} to stop the server`),n$()}function O4($){console.log(`${B.dim}Opening ${B.cyan}${$}${B.dim} in your browser...${B.reset}`),Bun.spawn(["open",$],{stderr:"inherit"})}function d0($,X,Z){if(!process.stdin.isTTY)return;process.stdin.setRawMode(!0),process.stdin.setEncoding("utf8"),process.stdin.resume(),n$();let Q="";process.stdin.on("data",(Y)=>{if(Y==="\x03"){if(Z?.onQuit)Z.onQuit();X(),process.exit(0)}if(Q+=Y,Q.endsWith("\r")||Q.endsWith(`
693
- `)){let J=Q.trim().toLowerCase();Q="",A4(J,$,X,Z)}})}function A4($,X,Z,Q){switch($){case"o":if(Q?.onOpen)Q.onOpen();else O4(X);break;case"c":if(Q?.onClear)Q.onClear();else console.clear(),H4(X);break;case"q":if(Q?.onQuit)Q.onQuit();console.log(`${B.yellow}Stopping server...${B.reset}`),Z(),process.exit(0);break;case"h":if(Q?.onHelp)Q.onHelp();else n$();break;default:break}}async function t$($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=W1.resolve($);if(!o$.existsSync(Y))return console.error(`${B.red}Error: File not found: ${B.bright}${Y}${B.reset}`),!1;if(!Y.endsWith(".md"))return console.error(`${B.red}Error: File must have .md extension: ${B.bright}${Y}${B.reset}`),!1;console.log(`${B.blue}Processing${B.reset} ${B.bright}${$}${B.reset}...`);let J=null,G=async()=>{try{let{content:F,data:z}=await T0(Y,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),j=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,H=j?.defaultTheme||"github-dark",L=["github-dark"],O=j?.additionalThemes||[],V=[...new Set([...L,...O])].map((E)=>`<option value="${E}"${E===H?" selected":""}>${E}</option>`).join(`
703
+ `,K=Function(G)();if(K)return K}catch(G){console.warn("Invalid sidebarConfig:",G)}}return{sections:[]}}let Z=$.match(/@nativeSidebar\s*\(\s*(\{[\s\S]*?\})\s*\)/m);if(Z)try{return JSON.parse(Z[1])}catch{console.warn("Invalid @nativeSidebar configuration")}let Q=$.match(/<script\s+native-sidebar[^>]*>([\s\S]*?)<\/script>/i);if(Q)try{let Y=Q[1].match(/(?:export\s+(?:default\s+)?|const\s+\w+\s*=\s*)(\{[\s\S]*\})/m);if(Y)return Function(`return ${Y[1]}`)()}catch(Y){console.warn("Invalid native-sidebar script configuration:",Y)}return}function e$(){console.log(`
704
+ Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in browser`),console.log(` ${B.cyan}c${B.reset} + Enter - Clear console`),console.log(` ${B.cyan}q${B.reset} + Enter (or ${B.cyan}Ctrl+C${B.reset}) - Quit server`),console.log(` ${B.cyan}h${B.reset} + Enter - Show this help`)}function V4($){console.log(`${B.green}Server running at ${B.cyan}${$}${B.reset}`),console.log(`Press ${B.cyan}Ctrl+C${B.reset} to stop the server`),e$()}function E4($){console.log(`${B.dim}Opening ${B.cyan}${$}${B.dim} in your browser...${B.reset}`),Bun.spawn(["open",$],{stderr:"inherit"})}function d0($,X,Z){if(!process.stdin.isTTY)return;process.stdin.setRawMode(!0),process.stdin.setEncoding("utf8"),process.stdin.resume(),e$();let Q="";process.stdin.on("data",(Y)=>{if(Y==="\x03"){if(Z?.onQuit)Z.onQuit();X(),process.exit(0)}if(Q+=Y,Q.endsWith("\r")||Q.endsWith(`
705
+ `)){let J=Q.trim().toLowerCase();Q="",I4(J,$,X,Z)}})}function I4($,X,Z,Q){switch($){case"o":if(Q?.onOpen)Q.onOpen();else E4(X);break;case"c":if(Q?.onClear)Q.onClear();else console.clear(),V4(X);break;case"q":if(Q?.onQuit)Q.onQuit();console.log(`${B.yellow}Stopping server...${B.reset}`),Z(),process.exit(0);break;case"h":if(Q?.onHelp)Q.onHelp();else e$();break;default:break}}async function X5($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=W1.resolve($);if(!$5.existsSync(Y))return console.error(`${B.red}Error: File not found: ${B.bright}${Y}${B.reset}`),!1;if(!Y.endsWith(".md"))return console.error(`${B.red}Error: File must have .md extension: ${B.bright}${Y}${B.reset}`),!1;console.log(`${B.blue}Processing${B.reset} ${B.bright}${$}${B.reset}...`);let J=null,G=async()=>{try{let{content:F,data:z}=await T0(Y,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),j=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,H=j?.defaultTheme||"github-dark",L=["github-dark"],O=j?.additionalThemes||[],M=[...new Set([...L,...O])].map((V)=>`<option value="${V}"${V===H?" selected":""}>${V}</option>`).join(`
694
706
  `);return J=`
695
707
  <!DOCTYPE html>
696
708
  <html lang="en">
697
709
  <head>
698
710
  <meta charset="UTF-8">
699
711
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
700
- <title>${N4(z.title||W1.basename(Y))}</title>
712
+ <title>${D4(z.title||W1.basename(Y))}</title>
701
713
  <!-- Syntax highlighting styles -->
702
714
  <style id="syntax-theme">
703
715
  :root {
@@ -839,26 +851,26 @@ Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in brow
839
851
  min-width: 100px;
840
852
  color: #555;
841
853
  }
842
- ${o1()}
854
+ ${t1()}
843
855
  </style>
844
856
  </head>
845
857
  <body>
846
- ${$$(z)}
847
- ${t1(V)}
858
+ ${X$(z)}
859
+ ${e1(M)}
848
860
 
849
861
  ${F}
850
862
 
851
863
  <script>
852
- ${e1()}
864
+ ${$$()}
853
865
  </script>
854
866
  </body>
855
867
  </html>
856
- `,!0}catch(F){return console.error(`${B.red}Error processing Markdown file:${B.reset}`,F),!1}};if(!await G())return!1;let K=Z;try{if(K=await h0(Z),K!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${K} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${K}/${B.reset}...`);let _=q4({port:K,fetch(F){if(new URL(F.url).pathname==="/")return new Response(J,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}});return new Response("Not Found",{status:404})},error(F){return new Response(`<pre>${F}
868
+ `,!0}catch(F){return console.error(`${B.red}Error processing Markdown file:${B.reset}`,F),!1}};if(!await G())return!1;let K=Z;try{if(K=await h0(Z),K!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${K} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${K}/${B.reset}...`);let _=R4({port:K,fetch(F){if(new URL(F.url).pathname==="/")return new Response(J,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}});return new Response("Not Found",{status:404})},error(F){return new Response(`<pre>${F}
857
869
  ${F.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
858
870
  ${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
859
871
  ${B.bright}\u2192 ${B.cyan}http://localhost:${K}/${B.reset}`),console.log(`
860
872
  ${B.yellow}Routes:${B.reset}`);let U=W1.relative(process.cwd(),Y);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${U}${B.reset}`),console.log(`
861
- Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(_.url.toString(),()=>{if(Q)o$.watch(W1.dirname(Y),{recursive:!0}).close();_.stop()}),X.native)await G1(K,{title:W1.basename(Y,".md")});if(Q){let F=W1.dirname(Y);console.log(`${B.blue}Watching ${B.bright}${F}${B.reset} for changes...`);let z=o$.watch(F,{recursive:!0},async(j,H)=>{if(H&&H.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${H}${B.yellow} changed, reprocessing...${B.reset}`),await G()});process.on("SIGINT",()=>{z.close(),_.stop(),process.exit(0)})}return!0}function N4($){return String($??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var{serve:V4}=globalThis.Bun;import E0 from"fs";import Q0 from"path";class j6{clients=new Set;server=null;options;constructor($={}){this.options={wsPort:$.wsPort??3001,showOverlay:$.showOverlay??!0,reconnectInterval:$.reconnectInterval??1000,maxReconnectAttempts:$.maxReconnectAttempts??10,verbose:$.verbose??!1}}start($){let X=$??this.options.wsPort,Z=20;for(let Q=0;Q<Z;Q++)try{if(this.server=Bun.serve({port:X,fetch(Y,J){if(J.upgrade(Y,{data:{}}))return;return new Response("stx Hot Reload Server",{headers:{"Content-Type":"text/plain"}})},websocket:{open:(Y)=>{if(this.clients.add(Y),this.options.verbose)console.log(`[HMR] Client connected (${this.clients.size} total)`);Y.send(JSON.stringify({type:"connected",timestamp:Date.now()}))},close:(Y)=>{if(this.clients.delete(Y),this.options.verbose)console.log(`[HMR] Client disconnected (${this.clients.size} total)`)},message:(Y,J)=>{let G=typeof J==="string"?J:J.toString();if(G==="ping")return;try{let W=JSON.parse(G);if(W.type==="console"&&Array.isArray(W.args)){let K=W.args.join(" "),U={log:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[34m"}[W.level]??"\x1B[36m";console.log(`${U}[browser]${W.level!=="log"?` ${W.level}`:""}\x1B[0m ${K}`)}}catch{}}}}),this.options.verbose)console.log(`[HMR] WebSocket server started on port ${X}`);return X}catch(Y){if(Y?.code==="EADDRINUSE"){X++;continue}throw Y}throw Error(`Could not find an available port after ${Z} attempts starting from ${$??this.options.wsPort}`)}stop(){for(let $ of this.clients)try{$.close()}catch{}if(this.clients.clear(),this.server)this.server.stop(),this.server=null;if(this.options.verbose)console.log("[HMR] Server stopped")}broadcast($){let X=JSON.stringify($),Z=0;for(let Q of this.clients)try{if(Q.readyState===1)Q.send(X),Z++}catch{this.clients.delete(Q)}if(this.options.verbose&&Z>0)console.log(`[HMR] Broadcast ${$.type} to ${Z} client(s)`)}reload($){if(this.options.verbose)console.log(`[HMR] Sending reload to ${this.clients.size} client(s) for: ${$||"all"}`);this.broadcast({type:"reload",path:$,timestamp:Date.now()})}updateCss($,X){this.broadcast({type:"css-update",path:$,content:X,timestamp:Date.now()})}error($){this.broadcast({type:"error",content:$,timestamp:Date.now()})}get clientCount(){return this.clients.size}get port(){return this.options.wsPort}}function M4($,X={}){let{showOverlay:Z=!0,reconnectInterval:Q=1000,maxReconnectAttempts:Y=10}=X;return`
873
+ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(_.url.toString(),()=>{if(Q)$5.watch(W1.dirname(Y),{recursive:!0}).close();_.stop()}),X.native)await G1(K,{title:W1.basename(Y,".md")});if(Q){let F=W1.dirname(Y);console.log(`${B.blue}Watching ${B.bright}${F}${B.reset} for changes...`);let z=$5.watch(F,{recursive:!0},async(j,H)=>{if(H&&H.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${H}${B.yellow} changed, reprocessing...${B.reset}`),await G()});process.on("SIGINT",()=>{z.close(),_.stop(),process.exit(0)})}return!0}function D4($){return String($??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var{serve:T4}=globalThis.Bun;import E0 from"fs";import Q0 from"path";class q6{clients=new Set;server=null;options;constructor($={}){this.options={wsPort:$.wsPort??3001,showOverlay:$.showOverlay??!0,reconnectInterval:$.reconnectInterval??1000,maxReconnectAttempts:$.maxReconnectAttempts??10,verbose:$.verbose??!1}}start($){let X=$??this.options.wsPort,Z=20;for(let Q=0;Q<Z;Q++)try{if(this.server=Bun.serve({port:X,fetch(Y,J){if(J.upgrade(Y,{data:{}}))return;return new Response("stx Hot Reload Server",{headers:{"Content-Type":"text/plain"}})},websocket:{open:(Y)=>{if(this.clients.add(Y),this.options.verbose)console.log(`[HMR] Client connected (${this.clients.size} total)`);Y.send(JSON.stringify({type:"connected",timestamp:Date.now()}))},close:(Y)=>{if(this.clients.delete(Y),this.options.verbose)console.log(`[HMR] Client disconnected (${this.clients.size} total)`)},message:(Y,J)=>{let G=typeof J==="string"?J:J.toString();if(G==="ping")return;try{let W=JSON.parse(G);if(W.type==="console"&&Array.isArray(W.args)){let K=W.args.join(" "),U={log:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[34m"}[W.level]??"\x1B[36m";console.log(`${U}[browser]${W.level!=="log"?` ${W.level}`:""}\x1B[0m ${K}`)}}catch{}}}}),this.options.verbose)console.log(`[HMR] WebSocket server started on port ${X}`);return X}catch(Y){if(Y?.code==="EADDRINUSE"){X++;continue}throw Y}throw Error(`Could not find an available port after ${Z} attempts starting from ${$??this.options.wsPort}`)}stop(){for(let $ of this.clients)try{$.close()}catch{}if(this.clients.clear(),this.server)this.server.stop(),this.server=null;if(this.options.verbose)console.log("[HMR] Server stopped")}broadcast($){let X=JSON.stringify($),Z=0;for(let Q of this.clients)try{if(Q.readyState===1)Q.send(X),Z++}catch{this.clients.delete(Q)}if(this.options.verbose&&Z>0)console.log(`[HMR] Broadcast ${$.type} to ${Z} client(s)`)}reload($){if(this.options.verbose)console.log(`[HMR] Sending reload to ${this.clients.size} client(s) for: ${$||"all"}`);this.broadcast({type:"reload",path:$,timestamp:Date.now()})}updateCss($,X){this.broadcast({type:"css-update",path:$,content:X,timestamp:Date.now()})}error($){this.broadcast({type:"error",content:$,timestamp:Date.now()})}get clientCount(){return this.clients.size}get port(){return this.options.wsPort}}function w4($,X={}){let{showOverlay:Z=!0,reconnectInterval:Q=1000,maxReconnectAttempts:Y=10}=X;return`
862
874
  <script>
863
875
  (function() {
864
876
  // stx Hot Reload Client
@@ -1057,10 +1069,10 @@ else {
1057
1069
  };
1058
1070
  })();
1059
1071
  </script>
1060
- `}function P0($,X,Z={}){let Q=M4(X,Z),Y=$.lastIndexOf("</body>");if(Y!==-1)return $.slice(0,Y)+Q+$.slice(Y);if($.includes("</html>"))return $.replace("</html>",`${Q}</html>`);return $+Q}function Z$($){let X=$.toLowerCase();return X.endsWith(".css")||X.endsWith(".scss")||X.endsWith(".sass")||X.endsWith(".less")}function Q$($){let X=$.toLowerCase();return[".stx",".html",".htm",".md",".js",".ts",".jsx",".tsx",".json"].some((Q)=>X.endsWith(Q))}function Y$($){return[/^\./,/node_modules/,/\.stx\/output/,/\.stx\/cache/,/~$/,/\.swp$/,/\.swo$/].some((Z)=>Z.test($))}var K1=null;function J$($){if(!K1)K1=new j6($);return K1}function D1(){if(K1)K1.stop(),K1=null}import w1 from"path";var _1={name:"bun-plugin-stx",async setup($){let Z={...await s0(),...$.config?.stx},Q=new Set,Y=Z.webComponents?.enabled?`./${w1.relative(w1.dirname($.config?.outdir||"dist"),Z.webComponents.outputDir||"dist/web-components")}`:"/web-components",J=[];if(Z.webComponents?.enabled)try{let G=await U$(Z,Q);if(J.push(...G),Z.debug&&G.length>0)console.log(`Successfully built ${G.length} web components`)}catch(G){console.error("Failed to build web components:",G)}$.onLoad({filter:/\.stx$/},async({path:G})=>{try{let W=new Set;if(Z.cache&&Z.cachePath){let L=await K$(G,Z);if(L){if(Z.debug)console.log(`Using cached version of ${G}`);return{contents:L,loader:"html"}}}let K=await X5(()=>Bun.file(G).text(),"",(L)=>{throw new $5(`Failed to read stx file: ${G}`,G,void 0,void 0,`File read error: ${L.message}`)});if(!K)throw new $5(`stx file is empty: ${G}`,G);let{scriptContent:_,templateContent:U,allScripts:F}=Z5.time("script-extraction",()=>{let L=K,O=W$(K);if(O)L=O.content.trim();let A=K.match(/<script\b[^>]*>[\s\S]*?<\/script>/gi)||[],V="",E=[];for(let N of A){let I=N.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i)?.[1]||"",M=N.match(/<script\b([^>]*)>/i),w=M?M[1]:"";if(/\bserver\b/i.test(w))V=I;else E.push(N)}let q=L.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"");return{scriptContent:V,templateContent:q,allScripts:E}}),z={__filename:G,__dirname:w1.dirname(G),__stx:{webComponentsPath:Y,builtComponents:J}};await X5(()=>M0(_,z,G),void 0,(L)=>{let O=new e$(`Script execution failed in ${G}: ${L.message}`,G,void 0,void 0,_.substring(0,100));if(G$.log(O,{filePath:G,scriptContent:_}),Z.debug)throw O});let H=await Z5.timeAsync("directive-processing",async()=>{return await V0(U,z,G,Z,W)});if(F.length>0){let{interpolateScriptsInTemplate:L}=await import("./chunk-fp868yhg.js"),O=L(F.join(`
1072
+ `}function P0($,X,Z={}){let Q=w4(X,Z),Y=$.lastIndexOf("</body>");if(Y!==-1)return $.slice(0,Y)+Q+$.slice(Y);if($.includes("</html>"))return $.replace("</html>",`${Q}</html>`);return $+Q}function Q$($){let X=$.toLowerCase();return X.endsWith(".css")||X.endsWith(".scss")||X.endsWith(".sass")||X.endsWith(".less")}function Y$($){let X=$.toLowerCase();return[".stx",".html",".htm",".md",".js",".ts",".jsx",".tsx",".json"].some((Q)=>X.endsWith(Q))}function J$($){return[/^\./,/node_modules/,/\.stx\/output/,/\.stx\/cache/,/~$/,/\.swp$/,/\.swo$/].some((Z)=>Z.test($))}var K1=null;function G$($){if(!K1)K1=new q6($);return K1}function D1(){if(K1)K1.stop(),K1=null}import w1 from"path";var _1={name:"bun-plugin-stx",async setup($){let Z={...await r0(),...$.config?.stx},Q=new Set,Y=Z.webComponents?.enabled?`./${w1.relative(w1.dirname($.config?.outdir||"dist"),Z.webComponents.outputDir||"dist/web-components")}`:"/web-components",J=[];if(Z.webComponents?.enabled)try{let G=await B$(Z,Q);if(J.push(...G),Z.debug&&G.length>0)console.log(`Successfully built ${G.length} web components`)}catch(G){console.error("Failed to build web components:",G)}$.onLoad({filter:/\.stx$/},async({path:G})=>{try{let W=new Set;if(Z.cache&&Z.cachePath){let L=await _$(G,Z);if(L){if(Z.debug)console.log(`Using cached version of ${G}`);return{contents:L,loader:"html"}}}let K=await Y5(()=>Bun.file(G).text(),"",(L)=>{throw new Q5(`Failed to read stx file: ${G}`,G,void 0,void 0,`File read error: ${L.message}`)});if(!K)throw new Q5(`stx file is empty: ${G}`,G);let{scriptContent:_,templateContent:U,allScripts:F}=J5.time("script-extraction",()=>{let L=K,O=K$(K);if(O)L=O.content.trim();let A=K.match(/<script\b[^>]*>[\s\S]*?<\/script>/gi)||[],M="",V=[];for(let q of A){let I=q.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i)?.[1]||"",E=q.match(/<script\b([^>]*)>/i),w=E?E[1]:"";if(/\bserver\b/i.test(w))M=I;else V.push(q)}let N=L.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"");return{scriptContent:M,templateContent:N,allScripts:V}}),z={__filename:G,__dirname:w1.dirname(G),__stx:{webComponentsPath:Y,builtComponents:J}};await Y5(()=>M0(_,z,G),void 0,(L)=>{let O=new Z5(`Script execution failed in ${G}: ${L.message}`,G,void 0,void 0,_.substring(0,100));if(W$.log(O,{filePath:G,scriptContent:_}),Z.debug)throw O});let H=await J5.timeAsync("directive-processing",async()=>{return await V0(U,z,G,Z,W)});if(F.length>0){let{interpolateScriptsInTemplate:L}=await import("./chunk-1xts7768.js"),O=L(F.join(`
1061
1073
  `),z),A=H.search(/<\/body>/i);if(A!==-1)H=H.slice(0,A)+O+`
1062
1074
  `+H.slice(A);else H+=`
1063
- ${O}`}if(H=await A6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await _$(G,H,W,Z),Z.debug)console.log(`Cached template ${G} with ${W.size} dependencies`)}return{contents:H,loader:"html"}}catch(W){let K=W instanceof Error?W:new e$(`Plugin processing failed: ${String(W)}`,G);if(G$.log(K,{filePath:G,buildConfig:$.config}),O6.logDetailedError(K,{filePath:G,plugin:"bun-plugin-stx"}),Z.debug)console.error("stx Plugin Error:",K);let _=K,U=_.line||null,F=_.context||null;return{contents:Z.debug||H6()?`<!DOCTYPE html>
1075
+ ${O}`}if(H=await E6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await U$(G,H,W,Z),Z.debug)console.log(`Cached template ${G} with ${W.size} dependencies`)}return{contents:H,loader:"html"}}catch(W){let K=W instanceof Error?W:new Z5(`Plugin processing failed: ${String(W)}`,G);if(W$.log(K,{filePath:G,buildConfig:$.config}),V6.logDetailedError(K,{filePath:G,plugin:"bun-plugin-stx"}),Z.debug)console.error("stx Plugin Error:",K);let _=K,U=_.line||null,F=_.context||null;return{contents:Z.debug||M6()?`<!DOCTYPE html>
1064
1076
  <html lang="en">
1065
1077
  <head>
1066
1078
  <meta charset="UTF-8">
@@ -1120,12 +1132,12 @@ ${O}`}if(H=await A6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await _
1120
1132
  <h1>Something went wrong</h1>
1121
1133
  <p>An internal error occurred. Please try again later.</p>
1122
1134
  </body>
1123
- </html>`,loader:"html"}}})}};async function E4($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=Q0.resolve($);if(!E0.existsSync(W))return console.error(`${B.red}Error: File not found: ${B.bright}${W}${B.reset}`),!1;if(W.endsWith(".md"))return t$(W,X);else if(!W.endsWith(".stx"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${W}${B.reset}. Only .stx and .md files are supported.`),!1;let K=u0(process.cwd(),"output");E0.mkdirSync(K,{recursive:!0}),console.log(`${B.blue}Building ${B.bright}${$}${B.reset}...`);let _=null,U=async()=>{try{let I={name:"public-assets",setup(T){T.onResolve({filter:/^\/(images|fonts|assets|public)\//},(f)=>{return{path:f.path,external:!0}})}},M=await Bun.build({entrypoints:[W],outdir:K,plugins:[I,_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!M.success)return console.error(`${B.red}Build failed:${B.reset}`,M.logs),!1;let w=M.outputs.find((T)=>T.path.endsWith(".html"));if(!w)return console.error(`${B.red}No HTML output found${B.reset}`),!1;return _=await Bun.file(w.path).text(),!0}catch(I){return console.error(`${B.red}Error building stx file:${B.reset}`,I),!1}};if(!await U())return!1;let z=Q0.dirname(W);await B$(z);let j=Z;try{if(j=await h0(Z),j!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${j} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let I=X.hmrPort||j+1;J=J$({wsPort:I,verbose:!1}),G=J.start(I)}let H={},L=null,O;try{let{loadStxConfig:I}=await import("./chunk-1vtdege3.js"),M=await I();if(O=X.stxOptions?.serverApi??M.serverApi,M?.apiRouter)L=M?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(M?.apiRoutes){H=M.apiRoutes;let w=Object.keys(H).length;if(w>0)console.log(`${B.blue}Loaded ${B.bright}${w} API route${w>1?"s":""}${B.reset}`)}if(M?.broadcasting?.enabled)try{let{startBroadcasting:w,loadChannels:D}=await import("./chunk-n5657hm3.js"),T=M.broadcasting;await w(T);let f=T.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${f}/ws${B.reset}`);let c=Q0.join(process.cwd(),"channels.ts");if(E0.existsSync(c))try{let v=await D(c);console.log(`${B.blue}Loaded ${B.bright}${v} broadcast channel${v!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(v){console.warn(`${B.yellow}Failed to load channels.ts: ${v.message}${B.reset}`)}}catch(w){console.warn(`${B.yellow}Broadcasting failed to start: ${w.message}${B.reset}`)}}catch{}let{createServerApi:A,isServerApiSource:V}=await import("./chunk-9qtf2b1p.js"),E=await A(process.cwd(),O);if(console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${j}/${B.reset}...`),Y)console.log(`${B.magenta}Hot reload enabled on ws://localhost:${G}${B.reset}`);let q=V4({port:j,async fetch(I){return F$(I,await(async()=>{let M=new URL(I.url);if([K,Q0.dirname(W),Q0.join(process.cwd(),"public")].some((v)=>V(Q0.join(v,M.pathname),process.cwd(),O)))return new Response("Not Found",{status:404});if(L)try{let v=await L.handleRequest(I);if(v.status!==404)return v}catch{}if(H[M.pathname])try{return await H[M.pathname](I)}catch(v){return new Response(JSON.stringify({error:v.message}),{status:500,headers:{"Content-Type":"application/json"}})}let w=await E(I);if(w)return w;if(M.pathname==="/")return(async()=>{let S=await J0(_||"");if(Y)S=P0(S,G);if(X.native)if(S.includes("<head>"))S=S.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>");else S="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+S;if(X.titlebarHidden)if(S.includes("<head>"))S=S.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>");else S=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${S}`;return S})().then((S)=>new Response(S,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}}));let D=Q0.join(K,M.pathname);if(E0.existsSync(D)&&E0.statSync(D).isFile()){let v=Bun.file(D),S=Q0.extname(D).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let T=Q0.dirname(W),f=Q0.join(T,M.pathname);if(E0.existsSync(f)&&E0.statSync(f).isFile()){let v=Bun.file(f),S=Q0.extname(f).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let c=Q0.join(process.cwd(),"public",M.pathname);if(E0.existsSync(c)&&E0.statSync(c).isFile()){let v=Bun.file(c),S=Q0.extname(c).toLowerCase(),k="application/octet-stream";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}return new Response("Not Found",{status:404})})())},error(I){return new Response(`<pre>${I}
1135
+ </html>`,loader:"html"}}})}};async function C4($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=Q0.resolve($);if(!E0.existsSync(W))return console.error(`${B.red}Error: File not found: ${B.bright}${W}${B.reset}`),!1;if(W.endsWith(".md"))return X5(W,X);else if(!W.endsWith(".stx"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${W}${B.reset}. Only .stx and .md files are supported.`),!1;let K=u0(process.cwd(),"output");E0.mkdirSync(K,{recursive:!0}),console.log(`${B.blue}Building ${B.bright}${$}${B.reset}...`);let _=null,U=async()=>{try{let I={name:"public-assets",setup(T){T.onResolve({filter:/^\/(images|fonts|assets|public)\//},(f)=>{return{path:f.path,external:!0}})}},E=await Bun.build({entrypoints:[W],outdir:K,plugins:[I,_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!E.success)return console.error(`${B.red}Build failed:${B.reset}`,E.logs),!1;let w=E.outputs.find((T)=>T.path.endsWith(".html"));if(!w)return console.error(`${B.red}No HTML output found${B.reset}`),!1;return _=await Bun.file(w.path).text(),!0}catch(I){return console.error(`${B.red}Error building stx file:${B.reset}`,I),!1}};if(!await U())return!1;let z=Q0.dirname(W);await L$(z);let j=Z;try{if(j=await h0(Z),j!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${j} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let I=X.hmrPort||j+1;J=G$({wsPort:I,verbose:!1}),G=J.start(I)}let H={},L=null,O;try{let{loadStxConfig:I}=await import("./chunk-bxwanj4g.js"),E=await I();if(O=X.stxOptions?.serverApi??E.serverApi,E?.apiRouter)L=E?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(E?.apiRoutes){H=E.apiRoutes;let w=Object.keys(H).length;if(w>0)console.log(`${B.blue}Loaded ${B.bright}${w} API route${w>1?"s":""}${B.reset}`)}if(E?.broadcasting?.enabled)try{let{startBroadcasting:w,loadChannels:D}=await import("./chunk-n5657hm3.js"),T=E.broadcasting;await w(T);let f=T.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${f}/ws${B.reset}`);let c=Q0.join(process.cwd(),"channels.ts");if(E0.existsSync(c))try{let v=await D(c);console.log(`${B.blue}Loaded ${B.bright}${v} broadcast channel${v!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(v){console.warn(`${B.yellow}Failed to load channels.ts: ${v.message}${B.reset}`)}}catch(w){console.warn(`${B.yellow}Broadcasting failed to start: ${w.message}${B.reset}`)}}catch{}let{createServerApi:A,isServerApiSource:M}=await import("./chunk-akb6mgrb.js"),V=await A(process.cwd(),O);if(console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${j}/${B.reset}...`),Y)console.log(`${B.magenta}Hot reload enabled on ws://localhost:${G}${B.reset}`);let N=T4({port:j,async fetch(I){return z$(I,await(async()=>{let E=new URL(I.url);if([K,Q0.dirname(W),Q0.join(process.cwd(),"public")].some((v)=>M(Q0.join(v,E.pathname),process.cwd(),O)))return new Response("Not Found",{status:404});if(L)try{let v=await L.handleRequest(I);if(v.status!==404)return v}catch{}if(H[E.pathname])try{return await H[E.pathname](I)}catch(v){return new Response(JSON.stringify({error:v.message}),{status:500,headers:{"Content-Type":"application/json"}})}let w=await V(I);if(w)return w;if(E.pathname==="/")return(async()=>{let S=await J0(_||"");if(Y)S=P0(S,G);if(X.native)if(S.includes("<head>"))S=S.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>");else S="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+S;if(X.titlebarHidden)if(S.includes("<head>"))S=S.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>");else S=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${S}`;return S})().then((S)=>new Response(S,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}}));let D=Q0.join(K,E.pathname);if(E0.existsSync(D)&&E0.statSync(D).isFile()){let v=Bun.file(D),S=Q0.extname(D).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),s0=H0.transformSync(G0);return new Response(s0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let T=Q0.dirname(W),f=Q0.join(T,E.pathname);if(E0.existsSync(f)&&E0.statSync(f).isFile()){let v=Bun.file(f),S=Q0.extname(f).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),s0=H0.transformSync(G0);return new Response(s0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let c=Q0.join(process.cwd(),"public",E.pathname);if(E0.existsSync(c)&&E0.statSync(c).isFile()){let v=Bun.file(c),S=Q0.extname(c).toLowerCase(),k="application/octet-stream";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),s0=H0.transformSync(G0);return new Response(s0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}return new Response("Not Found",{status:404})})())},error(I){return new Response(`<pre>${I}
1124
1136
  ${I.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
1125
1137
  ${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
1126
1138
  ${B.bright}\u2192 ${B.cyan}http://localhost:${j}/${B.reset}`),console.log(`
1127
- ${B.yellow}Routes:${B.reset}`);let N=Q0.relative(process.cwd(),W);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${N}${B.reset}`),console.log(`
1128
- Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(q.url.toString(),()=>{if(Q)E0.watch(Q0.dirname(W),{recursive:!0}).close();q.stop()}),X.native){let I=await Bun.file(W).text(),M=X$(I);await G1(j,{title:Q0.basename(W,".stx"),titlebarHidden:X.titlebarHidden===!0,nativeSidebar:!!M,sidebarConfig:M})}if(Q){let I=Q0.dirname(W);console.log(`${B.blue}Watching ${B.bright}${I}${B.reset} for changes...`);let M=E0.watch(I,{recursive:!0},async(w,D)=>{if(!D||Y$(D))return;if(Q$(D)){console.log(`${B.yellow}File ${B.bright}${D}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0();let T=await U();if(await L$(z),Y&&J)if(T)J.reload(D);else J.error("Build failed - check console for details")}else if(Z$(D)){if(console.log(`${B.cyan}CSS ${B.bright}${D}${B.cyan} changed${B.reset}`),Y&&J)J.updateCss(D)}});process.on("SIGINT",()=>{if(M.close(),J)D1();q.stop(),process.exit(0)})}return!0}var{serve:I4}=globalThis.Bun;import m0 from"fs";import B0 from"path";var q6=`
1139
+ ${B.yellow}Routes:${B.reset}`);let q=Q0.relative(process.cwd(),W);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${q}${B.reset}`),console.log(`
1140
+ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(N.url.toString(),()=>{if(Q)E0.watch(Q0.dirname(W),{recursive:!0}).close();N.stop()}),X.native){let I=await Bun.file(W).text(),E=Z$(I);await G1(j,{title:Q0.basename(W,".stx"),titlebarHidden:X.titlebarHidden===!0,nativeSidebar:!!E,sidebarConfig:E})}if(Q){let I=Q0.dirname(W);console.log(`${B.blue}Watching ${B.bright}${I}${B.reset} for changes...`);let E=E0.watch(I,{recursive:!0},async(w,D)=>{if(!D||J$(D))return;if(Y$(D)){console.log(`${B.yellow}File ${B.bright}${D}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0();let T=await U();if(await F$(z),Y&&J)if(T)J.reload(D);else J.error("Build failed - check console for details")}else if(Q$(D)){if(console.log(`${B.cyan}CSS ${B.bright}${D}${B.cyan} changed${B.reset}`),Y&&J)J.updateCss(D)}});process.on("SIGINT",()=>{if(E.close(),J)D1();N.stop(),process.exit(0)})}return!0}var{serve:k4}=globalThis.Bun;import m0 from"fs";import B0 from"path";var I6=`
1129
1141
  <script data-stx-helpers>
1130
1142
  (function() {
1131
1143
  'use strict'
@@ -1436,14 +1448,14 @@ else {
1436
1448
 
1437
1449
  })()
1438
1450
  </script>
1439
- `;V6();function I6($){if($.length===0)return"";if($.length===1)return $[0];let X=$.map((Q)=>Q.split(B0.sep)),Z=[];for(let Q=0;Q<X[0].length;Q++){let Y=X[0][Q];if(X.every((J)=>J[Q]===Y))Z.push(Y);else break}return Z.join(B0.sep)}async function R4($,X={}){let Z=X.port||3000,Q=X.watch!==!1;for(let H of $){let L=B0.resolve(H);if(!m0.existsSync(L))return console.error(`${B.red}Error: File not found: ${B.bright}${L}${B.reset}`),!1;if(!L.endsWith(".stx")&&!L.endsWith(".md"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${L}${B.reset}. Only .stx and .md files are supported.`),!1}let Y=u0(process.cwd(),"output");m0.mkdirSync(Y,{recursive:!0});let J=I6($.map((H)=>B0.dirname(B0.resolve(H))));console.log(`${B.blue}Processing ${B.bright}${$.length}${B.reset} files...`);let G={},W=[],K=async()=>{try{for(let H of $){let L=B0.resolve(H);if(L.endsWith(".md"))try{let{content:A,data:V}=await T0(L,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),E=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,q=E?.defaultTheme||"github-dark",N=["github-dark"],I=E?.additionalThemes||[],w=[...new Set([...N,...I])].map((c)=>`<option value="${c}"${c===q?" selected":""}>${c}</option>`).join(`
1451
+ `;w6();function C6($){if($.length===0)return"";if($.length===1)return $[0];let X=$.map((Q)=>Q.split(B0.sep)),Z=[];for(let Q=0;Q<X[0].length;Q++){let Y=X[0][Q];if(X.every((J)=>J[Q]===Y))Z.push(Y);else break}return Z.join(B0.sep)}async function x4($,X={}){let Z=X.port||3000,Q=X.watch!==!1;for(let H of $){let L=B0.resolve(H);if(!m0.existsSync(L))return console.error(`${B.red}Error: File not found: ${B.bright}${L}${B.reset}`),!1;if(!L.endsWith(".stx")&&!L.endsWith(".md"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${L}${B.reset}. Only .stx and .md files are supported.`),!1}let Y=u0(process.cwd(),"output");m0.mkdirSync(Y,{recursive:!0});let J=C6($.map((H)=>B0.dirname(B0.resolve(H))));console.log(`${B.blue}Processing ${B.bright}${$.length}${B.reset} files...`);let G={},W=[],K=async()=>{try{for(let H of $){let L=B0.resolve(H);if(L.endsWith(".md"))try{let{content:A,data:M}=await T0(L,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),V=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,N=V?.defaultTheme||"github-dark",q=["github-dark"],I=V?.additionalThemes||[],w=[...new Set([...q,...I])].map((c)=>`<option value="${c}"${c===N?" selected":""}>${c}</option>`).join(`
1440
1452
  `),D=`
1441
1453
  <!DOCTYPE html>
1442
1454
  <html lang="en">
1443
1455
  <head>
1444
1456
  <meta charset="UTF-8">
1445
1457
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
1446
- <title>${N6(V.title||B0.basename(L))}</title>
1458
+ <title>${R6(M.title||B0.basename(L))}</title>
1447
1459
  <!-- Syntax highlighting styles -->
1448
1460
  <style id="syntax-theme">
1449
1461
  :root {
@@ -1585,34 +1597,34 @@ else {
1585
1597
  min-width: 100px;
1586
1598
  color: #555;
1587
1599
  }
1588
- ${o1()}
1600
+ ${t1()}
1589
1601
  </style>
1590
1602
  </head>
1591
1603
  <body>
1592
- ${$$(V)}
1593
- ${t1(w)}
1604
+ ${X$(M)}
1605
+ ${e1(w)}
1594
1606
 
1595
1607
  ${A}
1596
1608
 
1597
1609
  <script>
1598
- ${e1()}
1610
+ ${$$()}
1599
1611
  </script>
1600
1612
  </body>
1601
1613
  </html>
1602
- `,f=`/${B0.relative(J,L).replace(/\.md$/,"")}`;if(f.endsWith("/index"))f=f.slice(0,-6)||"/";G[f||"/"]={filePath:L,content:D,fileType:"md"}}catch(A){console.error(`${B.red}Error processing Markdown file ${B.bright}${H}${B.reset}:`,A);continue}else{let A={name:"public-assets",setup(N){N.onResolve({filter:/^\/(images|fonts|assets|public)\//},(I)=>{return{path:I.path,external:!0}})}},V;try{let N=await Bun.build({entrypoints:[L],outdir:Y,plugins:[A,_1],define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!N.success){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:`,U1(N.logs,L));continue}let I=N.outputs.find((M)=>M.path.endsWith(".html"));if(!I){console.error(`${B.red}No HTML output found for ${B.bright}${H}${B.reset}`);continue}V=await Bun.file(I.path).text()}catch(N){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:
1603
- ${U1(N,L)}`);continue}let q=`/${B0.relative(J,L).replace(/\.stx$/,"")}`;if(q.endsWith("/index"))q=q.slice(0,-6)||"/";if(q.includes("[")){let{regex:N,params:I}=M6(q);W.push({pattern:N,paramNames:I,filePath:L,routeTemplate:q,fileType:"stx"}),G[q]={filePath:L,content:V,fileType:"stx"}}else G[q||"/"]={filePath:L,content:V,fileType:"stx"}}}if(Object.keys(G).length===0)return console.error(`${B.red}No files were successfully processed${B.reset}`),!1;return!0}catch(H){return console.error(`${B.red}Error processing files:${B.reset}`,U1(H)),!1}};if(!await K())return!1;let U=Z;try{if(U=await h0(Z),U!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${U} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${U}/${B.reset}...`);let F=I4({port:U,async fetch(H){let L=new URL(H.url),O=B0.join(process.cwd(),"public",L.pathname);if(m0.existsSync(O)&&m0.statSync(O).isFile()){let E=Bun.file(O),q=B0.extname(O).toLowerCase(),N="application/octet-stream";if(q===".ts"||q===".tsx"){let I=new Bun.Transpiler({loader:q===".tsx"?"tsx":"ts"}),M=await E.text(),w=I.transformSync(M);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(q){case".html":N="text/html";break;case".css":N="text/css";break;case".js":N="text/javascript";break;case".json":N="application/json";break;case".png":N="image/png";break;case".jpg":case".jpeg":N="image/jpeg";break;case".gif":N="image/gif";break;case".svg":N="image/svg+xml";break;case".ico":N="image/x-icon";break;case".woff":N="font/woff";break;case".woff2":N="font/woff2";break;case".ttf":N="font/ttf";break;case".otf":N="font/otf";break;case".eot":N="application/vnd.ms-fontobject";break}return new Response(E,{headers:{"Content-Type":N}})}let A=G[L.pathname];if(!A&&!L.pathname.endsWith("/"))A=G[`${L.pathname}/`];if(!A)for(let E of W){let q=L.pathname.match(E.pattern);if(q){let N=G[E.routeTemplate];if(N){let I={};for(let D=0;D<E.paramNames.length;D++)I[E.paramNames[D]]=decodeURIComponent(q[D+1]);let M=N.content,w=`<script>window.__routeParams = ${JSON.stringify(I)};</script>`;if(M.includes("</head>"))M=M.replace("</head>",`${w}
1604
- </head>`);else M=w+M;A={...N,content:M}}break}}if(A)return J0(A.content).then((E)=>{if(E.includes("</head>"))E=E.replace("</head>",`${q6}
1605
- </head>`);return new Response(E,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})});let V=B0.join(Y,L.pathname);if(m0.existsSync(V)&&m0.statSync(V).isFile()){let E=Bun.file(V),q=B0.extname(V).toLowerCase(),N="text/plain";if(q===".ts"||q===".tsx"){let I=new Bun.Transpiler({loader:q===".tsx"?"tsx":"ts"}),M=await E.text(),w=I.transformSync(M);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(q){case".html":N="text/html";break;case".css":N="text/css";break;case".js":N="text/javascript";break;case".json":N="application/json";break;case".png":N="image/png";break;case".jpg":case".jpeg":N="image/jpeg";break;case".gif":N="image/gif";break;case".svg":N="image/svg+xml";break;case".ico":N="image/x-icon";break;case".woff":N="font/woff";break;case".woff2":N="font/woff2";break;case".ttf":N="font/ttf";break;case".otf":N="font/otf";break;case".eot":N="application/vnd.ms-fontobject";break}return new Response(E,{headers:{"Content-Type":N}})}if(L.pathname!=="/"&&G["/"]){let E=E6(H);return J0(G["/"].content).then((q)=>{if(E){let N=q.match(/<main[^>]*>([\s\S]*?)<\/main>/i);if(N){let I=q.match(/<title[^>]*>([\s\S]*?)<\/title>/i),M=I?I[1]:"",w=`<!DOCTYPE html><html><head><title>${N6(M)}</title></head><body><main>${N[1]}</main></body></html>`;return new Response(w,{headers:{"Content-Type":"text/html","X-STX-Partial":"true",...B1(),"Cache-Control":z$,Pragma:"no-cache",Expires:"0"}})}}return new Response(q,{headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})})}return new Response("Not Found",{status:404})},error(H){return new Response(`<pre>${H}
1614
+ `,f=`/${B0.relative(J,L).replace(/\.md$/,"")}`;if(f.endsWith("/index"))f=f.slice(0,-6)||"/";G[f||"/"]={filePath:L,content:D,fileType:"md"}}catch(A){console.error(`${B.red}Error processing Markdown file ${B.bright}${H}${B.reset}:`,A);continue}else{let A={name:"public-assets",setup(q){q.onResolve({filter:/^\/(images|fonts|assets|public)\//},(I)=>{return{path:I.path,external:!0}})}},M;try{let q=await Bun.build({entrypoints:[L],outdir:Y,plugins:[A,_1],define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!q.success){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:`,U1(q.logs,L));continue}let I=q.outputs.find((E)=>E.path.endsWith(".html"));if(!I){console.error(`${B.red}No HTML output found for ${B.bright}${H}${B.reset}`);continue}M=await Bun.file(I.path).text()}catch(q){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:
1615
+ ${U1(q,L)}`);continue}let N=`/${B0.relative(J,L).replace(/\.stx$/,"")}`;if(N.endsWith("/index"))N=N.slice(0,-6)||"/";if(N.includes("[")){let{regex:q,params:I}=D6(N);W.push({pattern:q,paramNames:I,filePath:L,routeTemplate:N,fileType:"stx"}),G[N]={filePath:L,content:M,fileType:"stx"}}else G[N||"/"]={filePath:L,content:M,fileType:"stx"}}}if(Object.keys(G).length===0)return console.error(`${B.red}No files were successfully processed${B.reset}`),!1;return!0}catch(H){return console.error(`${B.red}Error processing files:${B.reset}`,U1(H)),!1}};if(!await K())return!1;let U=Z;try{if(U=await h0(Z),U!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${U} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${U}/${B.reset}...`);let F=k4({port:U,async fetch(H){let L=new URL(H.url),O=B0.join(process.cwd(),"public",L.pathname);if(m0.existsSync(O)&&m0.statSync(O).isFile()){let V=Bun.file(O),N=B0.extname(O).toLowerCase(),q="application/octet-stream";if(N===".ts"||N===".tsx"){let I=new Bun.Transpiler({loader:N===".tsx"?"tsx":"ts"}),E=await V.text(),w=I.transformSync(E);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(N){case".html":q="text/html";break;case".css":q="text/css";break;case".js":q="text/javascript";break;case".json":q="application/json";break;case".png":q="image/png";break;case".jpg":case".jpeg":q="image/jpeg";break;case".gif":q="image/gif";break;case".svg":q="image/svg+xml";break;case".ico":q="image/x-icon";break;case".woff":q="font/woff";break;case".woff2":q="font/woff2";break;case".ttf":q="font/ttf";break;case".otf":q="font/otf";break;case".eot":q="application/vnd.ms-fontobject";break}return new Response(V,{headers:{"Content-Type":q}})}let A=G[L.pathname];if(!A&&!L.pathname.endsWith("/"))A=G[`${L.pathname}/`];if(!A)for(let V of W){let N=L.pathname.match(V.pattern);if(N){let q=G[V.routeTemplate];if(q){let I={};for(let D=0;D<V.paramNames.length;D++)I[V.paramNames[D]]=decodeURIComponent(N[D+1]);let E=q.content,w=`<script>window.__routeParams = ${JSON.stringify(I)};</script>`;if(E.includes("</head>"))E=E.replace("</head>",`${w}
1616
+ </head>`);else E=w+E;A={...q,content:E}}break}}if(A)return J0(A.content).then((V)=>{if(V.includes("</head>"))V=V.replace("</head>",`${I6}
1617
+ </head>`);return new Response(V,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})});let M=B0.join(Y,L.pathname);if(m0.existsSync(M)&&m0.statSync(M).isFile()){let V=Bun.file(M),N=B0.extname(M).toLowerCase(),q="text/plain";if(N===".ts"||N===".tsx"){let I=new Bun.Transpiler({loader:N===".tsx"?"tsx":"ts"}),E=await V.text(),w=I.transformSync(E);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(N){case".html":q="text/html";break;case".css":q="text/css";break;case".js":q="text/javascript";break;case".json":q="application/json";break;case".png":q="image/png";break;case".jpg":case".jpeg":q="image/jpeg";break;case".gif":q="image/gif";break;case".svg":q="image/svg+xml";break;case".ico":q="image/x-icon";break;case".woff":q="font/woff";break;case".woff2":q="font/woff2";break;case".ttf":q="font/ttf";break;case".otf":q="font/otf";break;case".eot":q="application/vnd.ms-fontobject";break}return new Response(V,{headers:{"Content-Type":q}})}if(L.pathname!=="/"&&G["/"]){let V=T6(H);return J0(G["/"].content).then((N)=>{if(V){let q=N.match(/<main[^>]*>([\s\S]*?)<\/main>/i);if(q){let I=N.match(/<title[^>]*>([\s\S]*?)<\/title>/i),E=I?I[1]:"",w=`<!DOCTYPE html><html><head><title>${R6(E)}</title></head><body><main>${q[1]}</main></body></html>`;return new Response(w,{headers:{"Content-Type":"text/html","X-STX-Partial":"true",...B1(),"Cache-Control":j$,Pragma:"no-cache",Expires:"0"}})}}return new Response(N,{headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})})}return new Response("Not Found",{status:404})},error(H){return new Response(`<pre>${H}
1606
1618
  ${H.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
1607
1619
  ${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
1608
1620
  ${B.bright}\u2192 ${B.cyan}http://localhost:${U}/${B.reset}`),console.log(`
1609
- ${B.yellow}Routes:${B.reset}`);let z=new Set(W.map((H)=>H.routeTemplate)),j=Object.entries(G).filter(([H])=>!z.has(H)).sort(([H],[L])=>H.localeCompare(L)).map(([H,L])=>({route:H==="/"?"/":H,filePath:B0.relative(process.cwd(),L.filePath),fileType:L.fileType}));for(let H of W){let L=H.routeTemplate.replace(/\[([^\]]+)\]/g,":$1");j.push({route:L,filePath:B0.relative(process.cwd(),H.filePath),fileType:"stx"})}if(j.sort((H,L)=>H.route.localeCompare(L.route)),j.forEach((H,L)=>{let A=L===j.length-1?"\u2514\u2500 ":"\u251C\u2500 ",V=H.fileType==="md"?`${B.magenta}(markdown)${B.reset}`:"";console.log(` ${B.green}${A}${H.route}${B.reset} \u2192 ${B.bright}${H.filePath}${B.reset} ${V}`)}),console.log(`
1610
- Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(F.url.toString(),()=>{if(Q)m0.watch(J,{recursive:!0}).close();F.stop()}),Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let H=m0.watch(J,{recursive:!0},async(L,O)=>{if(!O)return;if(O.endsWith(".stx")||O.endsWith(".js")||O.endsWith(".ts")||O.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${O}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0(),await K()});process.on("SIGINT",()=>{H.close(),F.stop(),process.exit(0)})}return!0}function N6($){return String($??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var{serve:D4}=globalThis.Bun;import e from"fs";import m from"path";async function R6($){try{return G5(await Bun.file($).text())}catch{return}}function Q5($){let X=Bun.file($),Z=m.extname($).toLowerCase(),Q={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject"},J=[".js",".css",".json"].includes(Z)?{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}:{};return new Response(X,{headers:{"Content-Type":Q[Z]||"application/octet-stream",...J}})}async function w4($=".",X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=m.resolve($),{loadStxConfig:K}=await import("./chunk-1vtdege3.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-9qtf2b1p.js"),z=X.stxOptions?.serverApi??_.serverApi,j=await U(W,z),H=_.root&&_.root!=="."?m.join(W,_.root):W,L=X.pagesDir||_.pagesDir||"pages",O=m.join(H,L);if(!e.existsSync(O)&&!_._layerPageDirs?.some((R)=>e.existsSync(R)))return console.error(`${B.red}Error: No '${L}' directory found${B.reset}`),console.log(`${B.dim}Looked in: ${B.bright}${O}${B.reset}`),console.log(`${B.dim}Run stx dev from the app directory, pass it as an argument (stx dev <dir>),${B.reset}`),console.log(`${B.dim}point at another directory with --pages <dir>, or set pagesDir in stx.config.ts.${B.reset}`),console.log(`${B.dim}Starting fresh? Create ${L}/index.stx for the homepage.${B.reset}`),!1;let A=j$(H,{pagesDir:L,pagesDirs:_._layerPageDirs?[O,..._._layerPageDirs.slice(1)]:void 0});if(A.length===0)return console.error(`${B.red}Error: No page files found in ${B.bright}${O}${B.reset}`),!1;console.log(`${B.blue}Found ${B.bright}${A.length}${B.blue} routes${B.reset}`);let V=_?._pluginPageDirs||[],E=[];for(let{dir:R,prefix:x}of V)if(e.existsSync(R)){let P=j$(m.dirname(R),{pagesDir:m.basename(R)});for(let y of P){let Z0=x==="/"?y.pattern:`${x}${y.pattern==="/"?"":y.pattern}`;E.push({route:{...y,pattern:Z0},prefix:x})}if(P.length>0)console.log(`${B.blue}Plugin pages: ${B.bright}${P.length}${B.blue} routes at ${B.cyan}${x}${B.reset}`)}let q=new Map,N=null,I=null;if(X.stxOptions?.shell!==!1){if(I=await d6(W,X.stxOptions?.shell),I){if(N=await J5(I,X.stxOptions||{}),N)console.log(`${B.blue}Using app shell: ${B.bright}${m.relative(W,I)}${B.reset} ${B.dim}(deprecated: use layouts/default.stx instead)${B.reset}`)}}T6(),await k6(W);let M=C6();if(M.length>0)console.log(`${B.blue}Loaded ${B.bright}${M.length}${B.blue} middleware: ${B.dim}${M.join(", ")}${B.reset}`);let w={},D=null;try{let{loadStxConfig:R}=await import("./chunk-1vtdege3.js"),x=await R(W);if(x?.apiRouter)D=x?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(x?.apiRoutes){w=x.apiRoutes;let P=Object.keys(w).length;if(P>0)console.log(`${B.blue}Loaded ${B.bright}${P} API route${P>1?"s":""}${B.reset}`)}if(x?.broadcasting?.enabled)try{let{startBroadcasting:P,loadChannels:y}=await import("./chunk-n5657hm3.js"),Z0=x.broadcasting;await P(Z0);let R0=Z0.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${R0}/ws${B.reset}`);let g0=m.join(process.cwd(),"channels.ts");if(e.existsSync(g0))try{let p=await y(g0);console.log(`${B.blue}Loaded ${B.bright}${p} broadcast channel${p!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(p){console.warn(`${B.yellow}Failed to load channels.ts: ${p.message}${B.reset}`)}}catch(P){console.warn(`${B.yellow}Broadcasting failed to start: ${P.message}${B.reset}`)}}catch{}let T=u0(W,"output");e.mkdirSync(T,{recursive:!0});let f=new Map,c=new Set,v=async(R)=>{let x=D6(O,R);if(!x)return null;try{let P=await Bun.build({entrypoints:[x],outdir:T,plugins:[_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!P.success)return null;let y=P.outputs.find((Z0)=>Z0.path.endsWith(".html"));if(!y)return null;return await Bun.file(y.path).text()}catch{return null}},S=new Map,k=async(R,x)=>{try{let{processDirectives:P,extractVariables:y,defaultConfig:Z0,loadStxConfig:R0,injectRouterScript:g0}=await import("./chunk-1vtdege3.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-qr3zcm87.js"),Y0=await R0(W),f0=(i)=>{if(!i)return i;if(m.isAbsolute(i))return i;return m.resolve(W,i)},C={...Z0,...Y0,...X.stxOptions,autoShell:!0};if(X.debugDirectives)C.debug=!0;C.partialsDir=f0(C.partialsDir),C.componentsDir=f0(C.componentsDir),C.layoutsDir=f0(C.layoutsDir),C.storesDir=f0(C.storesDir||"stores"),C.cachePath=f0(C.cachePath)??u0(W,"cache");let X0=!x&&!X.profile,a=C.cache!==!1;if(a&&X0){let i=h.get(R.filePath);if(i)try{if((await e.promises.stat(R.filePath)).mtime.getTime()<=i.mtime){let N0=!0;for(let _0 of i.dependencies){if(!e.existsSync(_0)){N0=!1;break}if((await e.promises.stat(_0)).mtime.getTime()>i.mtime){N0=!1;break}}if(N0){let _0=i.output;if(N)_0=O$(_0,{preserveHead:!0});let E1=S.get(R.filePath);return{route:R,content:_0,status:E1?.status??await R6(R.filePath),headers:E1?.headers}}}}catch{}let A0=await p(R.filePath,C);if(A0){let q0=A0;if(N)q0=O$(q0,{preserveHead:!0});let N0=S.get(R.filePath);return{route:R,content:q0,status:N0?.status??await R6(R.filePath),headers:N0?.headers}}}let o=a?await g(R.filePath):await Bun.file(R.filePath).text(),K0=G5(o),{classifyAllScripts:d}=await import("./chunk-1vtdege3.js"),O0=d(o),D0=O0.server.map((i)=>i.content),s=o;for(let i of O0.server)s=s.replace(i.fullTag,"");let n={__filename:R.filePath,__dirname:m.dirname(R.filePath),__stx_options:C,params:x??{},__stx_runtime_head:{}};for(let i of D0)try{await y(i,n,R.filePath)}catch(A0){if(X.stxOptions?.debug)console.error("[stx] variable extraction error",R.filePath,A0?.message||A0)}let S0=new Set,j0;if(X.profile){let i=performance.now();j0=await P(s,n,R.filePath,C,S0);let A0=performance.now()-i,q0=m.relative(W,R.filePath)||R.filePath;console.log(`[stx:profile] ${q0} \u2192 ${A0.toFixed(2)}ms`)}else j0=await P(s,n,R.filePath,C,S0);if(!N)j0=await g0(j0,{router:C.router});{let{interpolateScriptExpressions:i}=await import("./chunk-fp868yhg.js");j0=j0.replace(/<script\b([^>]*)>([\s\S]*?)<\/script>/g,(A0,q0,N0)=>{if(!/function\s+__stx_setup_/.test(N0))return A0;return`<script${q0}>${i(N0,n)}</script>`})}if(N)j0=O$(j0,{preserveHead:!0});if(a&&X0)await u(R.filePath,j0,S0,C);let{extractStreamBoundaries:Y3}=await import("./chunk-b5mnam29.js"),Q1=Y3(n),V1=n.__streamTemplates;if(V1&&typeof V1==="object"&&Object.keys(V1).length>0){let i=n.streamBoundaries||{},A0={...C,autoShell:!1},q0=Object.keys(V1).map((_0)=>({id:_0,render:async()=>{let E1=typeof i[_0]==="function"?await i[_0]():void 0;return P(V1[_0],{...n,$boundary:E1},R.filePath,A0,new Set)}})),N0=new Set(q0.map((_0)=>_0.id));Q1=[...(Q1||[]).filter((_0)=>!N0.has(_0.id)),...q0]}if(Q1&&Q1.length>0)c.add(R.pattern);else Q1=void 0;let l5=T1(n),i5=C1(n);if(X0)S.set(R.filePath,{status:l5,headers:i5});return{route:R,content:j0,status:l5??K0,headers:i5,boundaries:Q1}}catch(P){return console.error(`${B.red}Error building ${B.bright}${R.pattern}${B.reset}:`,P),null}},H0=8,G0=async()=>{f.clear(),q.clear();for(let R=0;R<A.length;R+=H0){let x=A.slice(R,R+H0),P=await Promise.all(x.map((y)=>k(y)));for(let y of P)if(y)f.set(y.route.pattern,y)}for(let R=0;R<E.length;R+=H0){let x=E.slice(R,R+H0),P=await Promise.all(x.map(({route:y})=>k(y)));for(let y of P)if(y)q.set(y.route.pattern,y)}return f.size>0};if(console.log(`${B.blue}Building pages...${B.reset}`),!await G0())return console.error(`${B.red}No pages were successfully built${B.reset}`),!1;await B$(W);let v0=Z;try{if(v0=await h0(Z),v0!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${v0} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let R=X.hmrPort||v0+1;J=J$({wsPort:R,verbose:!1}),G=J.start(R)}let z0=(R,x)=>{let y=`<script data-stx-route-params>(function(){var p=${JSON.stringify(x).replace(/</g,"\\u003C").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")};window.__stx_rp=p;if(window.stx){window.stx._rp=p;if(window.stx.setRouteParams)window.stx.setRouteParams(p)}})()</script>`;if(R.includes("</head>"))return R.replace("</head>",`${y}</head>`);if(R.includes("<body"))return R.replace(/<body([^>]*)>/,`<body$1>${y}`);return y+R};console.log(`${B.blue}Starting server...${B.reset}`);let Z1=D4({port:v0,async fetch(R){let x=new URL(R.url),P=_?.publicDir||"public",y=m.join(W,P,x.pathname),Z0=m.join(W,x.pathname),R0=m.join(T,x.pathname);if([y,Z0,R0].some((C)=>F(C,W,z)))return new Response("Not Found",{status:404});let[g0,p,u]=await Promise.all([e.promises.stat(y).catch(()=>null),e.promises.stat(Z0).catch(()=>null),e.promises.stat(R0).catch(()=>null)]);if(g0?.isFile()&&!F(y,W,z))return Q5(y);if(p?.isFile()&&!F(Z0,W,z))return Q5(Z0);if(u?.isFile()&&!F(R0,W,z))return Q5(R0);if(x.pathname.startsWith("/_stx/component/")){let C=decodeURIComponent(x.pathname.slice(16));if(C)try{let X0=`<${C} />`,a={...buildConfig,autoShell:!1},o=await processDirectives(X0,{},m.join(W,"components",`${C}.stx`),a,new Set);return new Response(o,{headers:{"Content-Type":"text/html"}})}catch(X0){return new Response(`<div class="stx-async-error">${X0.message}</div>`,{status:500,headers:{"Content-Type":"text/html"}})}}if(x.pathname==="/_stx/img"){let{handleImageRequest:C}=await import("./chunk-hke0k33t.js"),X0=await C(R,{publicDir:m.join(W,P),cacheDir:u0(W,"cache","img")});if(X0)return X0}if(D)try{let C=await D.handleRequest(R);if(C.status!==404)return C}catch{}if(w[x.pathname])try{return await w[x.pathname](R)}catch(C){return new Response(JSON.stringify({error:C.message}),{status:500,headers:{"Content-Type":"application/json"}})}let g=await j(R);if(g)return g;let h=Y5(x.pathname,A);if(h){let C=f.get(h.route.pattern),X0=c.has(h.route.pattern);if(h.route.isDynamic&&Object.keys(h.params).length>0||X0){let a=await k(h.route,h.params);if(a)C=a}if(C){let a=C.status??200,o=C.headers??{},K0=(h.route.filePath?y6(await Bun.file(h.route.filePath).text().catch(()=>"")):null)??{};if(K0.validate){if(!await K0.validate({params:h.params})){let D0=await v(404);if(D0){let s=D0;if(s=await J0(s,W),Y)s=P0(s,G);return new Response(s,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})}}if(K0.middleware){let O0=x6(x.pathname,h.params,K0,x.search),D0=S6(O0,null,R,{isServer:!0}),s=await P6(K0.middleware,D0);if(s.redirect){let n=s.redirect.path,S0=s.redirect.options.redirectCode||302,j0=new Headers(s.responseHeaders);return j0.set("Location",n),new Response(null,{status:S0,headers:j0})}if(s.abort){let{statusCode:n,message:S0}=s.abort.error;return new Response(`<!DOCTYPE html><html><head><title>Error ${n}</title></head><body><h1>Error ${n}</h1><p>${S0}</p></body></html>`,{status:n,headers:{"Content-Type":"text/html"}})}if(Object.keys(s.state).length>0){let n=`<script>(function(){var s=typeof stx!=='undefined'?stx:{};s._ms=${JSON.stringify(s.state)};if(s.setMiddlewareState)s.setMiddlewareState(s._ms);})()</script>`;C.content=C.content.replace("</head>",`${n}</head>`)}}let d=C.content;if(N&&u6(R)){let O0=b6(d),D0=v6(d),s=d.match(/<title[^>]*>([\s\S]*?)<\/title>/i),n=s?h6(s[1].trim()):"";if(Object.keys(h.params).length>0)d=z0(d,h.params);d=await J0(d,W);let S0=_?.router?.container||"main";return d=m6(d,S0),new Response(d,{status:a,headers:{"Content-Type":"text/html","X-STX-Fragment":"true","X-STX-Layout":O0.layout,"X-STX-Layout-Group":O0.group,"X-STX-Runtime":D0?"true":"false",...n&&{"X-STX-Title":encodeURIComponent(n)},[g6]:f6(),...B1(),"Cache-Control":z$}})}if(N)d=H$(N,d);if(Object.keys(h.params).length>0)d=z0(d,h.params);if(d=await J0(d,W),Y)d=P0(d,G);if(X.native)if(d.includes("<head>"))d=d.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else d="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+d;if(X.titlebarHidden)if(d.includes("<head>"))d=d.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else d=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${d}`;if(C.boundaries&&C.boundaries.length>0){let{renderStreamingPage:O0,streamToResponse:D0}=await import("./chunk-b5mnam29.js");return D0(O0(d,C.boundaries,{timeoutMs:30000}),{status:a,headers:{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}return new Response(d,{status:a,headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0",...o}})}}if(E.length>0){let C=E.map((a)=>a.route),X0=Y5(x.pathname,C);if(X0){let a=q.get(X0.route.pattern);if(a){let o=a.content;if(N)o=H$(N,o);if(Object.keys(X0.params).length>0)o=z0(o,X0.params);if(o=await J0(o,W),Y)o=P0(o,G);return new Response(o,{status:a.status??200,headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}for(let{prefix:a}of V)if(a!=="/"&&x.pathname.startsWith(a)){let o=q.get(a)||q.get(a+"/");if(o){let K0=o.content;if(N)K0=H$(N,K0);if(K0=await J0(K0,W),Y)K0=P0(K0,G);return new Response(K0,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}}let Y0=f.get("/");if(Y0){let C=Y0.content;if(C=await J0(C,W),Y)C=P0(C,G);if(X.native)if(C.includes("<head>"))C=C.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else C="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+C;return new Response(C,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}let f0=await v(404);if(f0){let C=f0;if(C=await J0(C,W),Y)C=P0(C,G);return new Response(C,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})},async error(R){let x=await v(500);if(x)return new Response(x,{status:500,headers:{"Content-Type":"text/html"}});return new Response(`<pre>${R}
1621
+ ${B.yellow}Routes:${B.reset}`);let z=new Set(W.map((H)=>H.routeTemplate)),j=Object.entries(G).filter(([H])=>!z.has(H)).sort(([H],[L])=>H.localeCompare(L)).map(([H,L])=>({route:H==="/"?"/":H,filePath:B0.relative(process.cwd(),L.filePath),fileType:L.fileType}));for(let H of W){let L=H.routeTemplate.replace(/\[([^\]]+)\]/g,":$1");j.push({route:L,filePath:B0.relative(process.cwd(),H.filePath),fileType:"stx"})}if(j.sort((H,L)=>H.route.localeCompare(L.route)),j.forEach((H,L)=>{let A=L===j.length-1?"\u2514\u2500 ":"\u251C\u2500 ",M=H.fileType==="md"?`${B.magenta}(markdown)${B.reset}`:"";console.log(` ${B.green}${A}${H.route}${B.reset} \u2192 ${B.bright}${H.filePath}${B.reset} ${M}`)}),console.log(`
1622
+ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(F.url.toString(),()=>{if(Q)m0.watch(J,{recursive:!0}).close();F.stop()}),Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let H=m0.watch(J,{recursive:!0},async(L,O)=>{if(!O)return;if(O.endsWith(".stx")||O.endsWith(".js")||O.endsWith(".ts")||O.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${O}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0(),await K()});process.on("SIGINT",()=>{H.close(),F.stop(),process.exit(0)})}return!0}function R6($){return String($??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var{serve:S4}=globalThis.Bun;import e from"fs";import m from"path";async function k6($){try{return _5(await Bun.file($).text())}catch{return}}function G5($){let X=Bun.file($),Z=m.extname($).toLowerCase(),Q={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject"},J=[".js",".css",".json"].includes(Z)?{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}:{};return new Response(X,{headers:{"Content-Type":Q[Z]||"application/octet-stream",...J}})}async function P4($=".",X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=m.resolve($),{loadStxConfig:K}=await import("./chunk-bxwanj4g.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-akb6mgrb.js"),z=X.stxOptions?.serverApi??_.serverApi,j=await U(W,z),H=_.root&&_.root!=="."?m.join(W,_.root):W,L=X.pagesDir||_.pagesDir||"pages",O=m.join(H,L);if(!e.existsSync(O)&&!_._layerPageDirs?.some((R)=>e.existsSync(R)))return console.error(`${B.red}Error: No '${L}' directory found${B.reset}`),console.log(`${B.dim}Looked in: ${B.bright}${O}${B.reset}`),console.log(`${B.dim}Run stx dev from the app directory, pass it as an argument (stx dev <dir>),${B.reset}`),console.log(`${B.dim}point at another directory with --pages <dir>, or set pagesDir in stx.config.ts.${B.reset}`),console.log(`${B.dim}Starting fresh? Create ${L}/index.stx for the homepage.${B.reset}`),!1;let A=H$(H,{pagesDir:L,pagesDirs:_._layerPageDirs?[O,..._._layerPageDirs.slice(1)]:void 0});if(A.length===0)return console.error(`${B.red}Error: No page files found in ${B.bright}${O}${B.reset}`),!1;console.log(`${B.blue}Found ${B.bright}${A.length}${B.blue} routes${B.reset}`);let M=_?._pluginPageDirs||[],V=[];for(let{dir:R,prefix:x}of M)if(e.existsSync(R)){let P=H$(m.dirname(R),{pagesDir:m.basename(R)});for(let y of P){let Z0=x==="/"?y.pattern:`${x}${y.pattern==="/"?"":y.pattern}`;V.push({route:{...y,pattern:Z0},prefix:x})}if(P.length>0)console.log(`${B.blue}Plugin pages: ${B.bright}${P.length}${B.blue} routes at ${B.cyan}${x}${B.reset}`)}let N=new Map,q=null,I=null;if(X.stxOptions?.shell!==!1){if(I=await l6(W,X.stxOptions?.shell),I){if(q=await K5(I,X.stxOptions||{}),q)console.log(`${B.blue}Using app shell: ${B.bright}${m.relative(W,I)}${B.reset} ${B.dim}(deprecated: use layouts/default.stx instead)${B.reset}`)}}P6(),await y6(W);let E=b6();if(E.length>0)console.log(`${B.blue}Loaded ${B.bright}${E.length}${B.blue} middleware: ${B.dim}${E.join(", ")}${B.reset}`);let w={},D=null;try{let{loadStxConfig:R}=await import("./chunk-bxwanj4g.js"),x=await R(W);if(x?.apiRouter)D=x?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(x?.apiRoutes){w=x.apiRoutes;let P=Object.keys(w).length;if(P>0)console.log(`${B.blue}Loaded ${B.bright}${P} API route${P>1?"s":""}${B.reset}`)}if(x?.broadcasting?.enabled)try{let{startBroadcasting:P,loadChannels:y}=await import("./chunk-n5657hm3.js"),Z0=x.broadcasting;await P(Z0);let R0=Z0.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${R0}/ws${B.reset}`);let g0=m.join(process.cwd(),"channels.ts");if(e.existsSync(g0))try{let p=await y(g0);console.log(`${B.blue}Loaded ${B.bright}${p} broadcast channel${p!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(p){console.warn(`${B.yellow}Failed to load channels.ts: ${p.message}${B.reset}`)}}catch(P){console.warn(`${B.yellow}Broadcasting failed to start: ${P.message}${B.reset}`)}}catch{}let T=u0(W,"output");e.mkdirSync(T,{recursive:!0});let f=new Map,c=new Set,v=async(R)=>{let x=x6(O,R);if(!x)return null;try{let P=await Bun.build({entrypoints:[x],outdir:T,plugins:[_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!P.success)return null;let y=P.outputs.find((Z0)=>Z0.path.endsWith(".html"));if(!y)return null;return await Bun.file(y.path).text()}catch{return null}},S=new Map,k=async(R,x)=>{try{let{processDirectives:P,extractVariables:y,defaultConfig:Z0,loadStxConfig:R0,injectRouterScript:g0}=await import("./chunk-bxwanj4g.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-1djdz98r.js"),Y0=await R0(W),f0=(i)=>{if(!i)return i;if(m.isAbsolute(i))return i;return m.resolve(W,i)},C={...Z0,...Y0,...X.stxOptions,autoShell:!0};if(X.debugDirectives)C.debug=!0;C.partialsDir=f0(C.partialsDir),C.componentsDir=f0(C.componentsDir),C.layoutsDir=f0(C.layoutsDir),C.storesDir=f0(C.storesDir||"stores"),C.cachePath=f0(C.cachePath)??u0(W,"cache");let X0=!x&&!X.profile,a=C.cache!==!1;if(a&&X0){let i=h.get(R.filePath);if(i)try{if((await e.promises.stat(R.filePath)).mtime.getTime()<=i.mtime){let q0=!0;for(let _0 of i.dependencies){if(!e.existsSync(_0)){q0=!1;break}if((await e.promises.stat(_0)).mtime.getTime()>i.mtime){q0=!1;break}}if(q0){let _0=i.output;if(q)_0=A$(_0,{preserveHead:!0});let E1=S.get(R.filePath);return{route:R,content:_0,status:E1?.status??await k6(R.filePath),headers:E1?.headers}}}}catch{}let A0=await p(R.filePath,C);if(A0){let N0=A0;if(q)N0=A$(N0,{preserveHead:!0});let q0=S.get(R.filePath);return{route:R,content:N0,status:q0?.status??await k6(R.filePath),headers:q0?.headers}}}let o=a?await g(R.filePath):await Bun.file(R.filePath).text(),K0=_5(o),{classifyAllScripts:d}=await import("./chunk-bxwanj4g.js"),O0=d(o),D0=O0.server.map((i)=>i.content),r=o;for(let i of O0.server)r=r.replace(i.fullTag,"");let n={__filename:R.filePath,__dirname:m.dirname(R.filePath),__stx_options:C,params:x??{},__stx_runtime_head:{}};for(let i of D0)try{await y(i,n,R.filePath)}catch(A0){if(X.stxOptions?.debug)console.error("[stx] variable extraction error",R.filePath,A0?.message||A0)}let S0=new Set,j0;if(X.profile){let i=performance.now();j0=await P(r,n,R.filePath,C,S0);let A0=performance.now()-i,N0=m.relative(W,R.filePath)||R.filePath;console.log(`[stx:profile] ${N0} \u2192 ${A0.toFixed(2)}ms`)}else j0=await P(r,n,R.filePath,C,S0);if(!q)j0=await g0(j0,{router:C.router});{let{interpolateScriptExpressions:i}=await import("./chunk-1xts7768.js");j0=j0.replace(/<script\b([^>]*)>([\s\S]*?)<\/script>/g,(A0,N0,q0)=>{if(!/function\s+__stx_setup_/.test(q0))return A0;return`<script${N0}>${i(q0,n)}</script>`})}if(q)j0=A$(j0,{preserveHead:!0});if(a&&X0)await u(R.filePath,j0,S0,C);let{extractStreamBoundaries:_3}=await import("./chunk-es275g3w.js"),Q1=_3(n),V1=n.__streamTemplates;if(V1&&typeof V1==="object"&&Object.keys(V1).length>0){let i=n.streamBoundaries||{},A0={...C,autoShell:!1},N0=Object.keys(V1).map((_0)=>({id:_0,render:async()=>{let E1=typeof i[_0]==="function"?await i[_0]():void 0;return P(V1[_0],{...n,$boundary:E1},R.filePath,A0,new Set)}})),q0=new Set(N0.map((_0)=>_0.id));Q1=[...(Q1||[]).filter((_0)=>!q0.has(_0.id)),...N0]}if(Q1&&Q1.length>0)c.add(R.pattern);else Q1=void 0;let s5=T1(n),r5=C1(n);if(X0)S.set(R.filePath,{status:s5,headers:r5});return{route:R,content:j0,status:s5??K0,headers:r5,boundaries:Q1}}catch(P){return console.error(`${B.red}Error building ${B.bright}${R.pattern}${B.reset}:`,P),null}},H0=8,G0=async()=>{f.clear(),N.clear();for(let R=0;R<A.length;R+=H0){let x=A.slice(R,R+H0),P=await Promise.all(x.map((y)=>k(y)));for(let y of P)if(y)f.set(y.route.pattern,y)}for(let R=0;R<V.length;R+=H0){let x=V.slice(R,R+H0),P=await Promise.all(x.map(({route:y})=>k(y)));for(let y of P)if(y)N.set(y.route.pattern,y)}return f.size>0};if(console.log(`${B.blue}Building pages...${B.reset}`),!await G0())return console.error(`${B.red}No pages were successfully built${B.reset}`),!1;await L$(W);let v0=Z;try{if(v0=await h0(Z),v0!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${v0} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let R=X.hmrPort||v0+1;J=G$({wsPort:R,verbose:!1}),G=J.start(R)}let z0=(R,x)=>{let y=`<script data-stx-route-params>(function(){var p=${JSON.stringify(x).replace(/</g,"\\u003C").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")};window.__stx_rp=p;if(window.stx){window.stx._rp=p;if(window.stx.setRouteParams)window.stx.setRouteParams(p)}})()</script>`;if(R.includes("</head>"))return R.replace("</head>",`${y}</head>`);if(R.includes("<body"))return R.replace(/<body([^>]*)>/,`<body$1>${y}`);return y+R};console.log(`${B.blue}Starting server...${B.reset}`);let Z1=S4({port:v0,async fetch(R){let x=new URL(R.url),P=_?.publicDir||"public",y=m.join(W,P,x.pathname),Z0=m.join(W,x.pathname),R0=m.join(T,x.pathname);if([y,Z0,R0].some((C)=>F(C,W,z)))return new Response("Not Found",{status:404});let[g0,p,u]=await Promise.all([e.promises.stat(y).catch(()=>null),e.promises.stat(Z0).catch(()=>null),e.promises.stat(R0).catch(()=>null)]);if(g0?.isFile()&&!F(y,W,z))return G5(y);if(p?.isFile()&&!F(Z0,W,z))return G5(Z0);if(u?.isFile()&&!F(R0,W,z))return G5(R0);if(x.pathname.startsWith("/_stx/component/")){let C=decodeURIComponent(x.pathname.slice(16));if(C)try{let X0=`<${C} />`,a={...buildConfig,autoShell:!1},o=await processDirectives(X0,{},m.join(W,"components",`${C}.stx`),a,new Set);return new Response(o,{headers:{"Content-Type":"text/html"}})}catch(X0){return new Response(`<div class="stx-async-error">${X0.message}</div>`,{status:500,headers:{"Content-Type":"text/html"}})}}if(x.pathname==="/_stx/img"){let{handleImageRequest:C}=await import("./chunk-hke0k33t.js"),X0=await C(R,{publicDir:m.join(W,P),cacheDir:u0(W,"cache","img")});if(X0)return X0}if(D)try{let C=await D.handleRequest(R);if(C.status!==404)return C}catch{}if(w[x.pathname])try{return await w[x.pathname](R)}catch(C){return new Response(JSON.stringify({error:C.message}),{status:500,headers:{"Content-Type":"application/json"}})}let g=await j(R);if(g)return g;let h=W5(x.pathname,A);if(h){let C=f.get(h.route.pattern),X0=c.has(h.route.pattern);if(h.route.isDynamic&&Object.keys(h.params).length>0||X0){let a=await k(h.route,h.params);if(a)C=a}if(C){let a=C.status??200,o=C.headers??{},K0=(h.route.filePath?d6(await Bun.file(h.route.filePath).text().catch(()=>"")):null)??{};if(K0.validate){if(!await K0.validate({params:h.params})){let D0=await v(404);if(D0){let r=D0;if(r=await J0(r,W),Y)r=P0(r,G);return new Response(r,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})}}if(K0.middleware){let O0=v6(x.pathname,h.params,K0,x.search),D0=g6(O0,null,R,{isServer:!0}),r=await f6(K0.middleware,D0);if(r.redirect){let n=r.redirect.path,S0=r.redirect.options.redirectCode||302,j0=new Headers(r.responseHeaders);return j0.set("Location",n),new Response(null,{status:S0,headers:j0})}if(r.abort){let{statusCode:n,message:S0}=r.abort.error;return new Response(`<!DOCTYPE html><html><head><title>Error ${n}</title></head><body><h1>Error ${n}</h1><p>${S0}</p></body></html>`,{status:n,headers:{"Content-Type":"text/html"}})}if(Object.keys(r.state).length>0){let n=`<script>(function(){var s=typeof stx!=='undefined'?stx:{};s._ms=${JSON.stringify(r.state)};if(s.setMiddlewareState)s.setMiddlewareState(s._ms);})()</script>`;C.content=C.content.replace("</head>",`${n}</head>`)}}let d=C.content;if(q&&i6(R)){let O0=h6(d),D0=u6(d),r=d.match(/<title[^>]*>([\s\S]*?)<\/title>/i),n=r?c6(r[1].trim()):"";if(Object.keys(h.params).length>0)d=z0(d,h.params);d=await J0(d,W);let S0=_?.router?.container||"main";return d=a6(d,S0),new Response(d,{status:a,headers:{"Content-Type":"text/html","X-STX-Fragment":"true","X-STX-Layout":O0.layout,"X-STX-Layout-Group":O0.group,"X-STX-Runtime":D0?"true":"false",...n&&{"X-STX-Title":encodeURIComponent(n)},[m6]:p6(),...B1(),"Cache-Control":j$}})}if(q)d=O$(q,d);if(Object.keys(h.params).length>0)d=z0(d,h.params);if(d=await J0(d,W),Y)d=P0(d,G);if(X.native)if(d.includes("<head>"))d=d.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else d="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+d;if(X.titlebarHidden)if(d.includes("<head>"))d=d.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else d=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${d}`;if(C.boundaries&&C.boundaries.length>0){let{renderStreamingPage:O0,streamToResponse:D0}=await import("./chunk-es275g3w.js");return D0(O0(d,C.boundaries,{timeoutMs:30000}),{status:a,headers:{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}return new Response(d,{status:a,headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0",...o}})}}if(V.length>0){let C=V.map((a)=>a.route),X0=W5(x.pathname,C);if(X0){let a=N.get(X0.route.pattern);if(a){let o=a.content;if(q)o=O$(q,o);if(Object.keys(X0.params).length>0)o=z0(o,X0.params);if(o=await J0(o,W),Y)o=P0(o,G);return new Response(o,{status:a.status??200,headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}for(let{prefix:a}of M)if(a!=="/"&&x.pathname.startsWith(a)){let o=N.get(a)||N.get(a+"/");if(o){let K0=o.content;if(q)K0=O$(q,K0);if(K0=await J0(K0,W),Y)K0=P0(K0,G);return new Response(K0,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}}let Y0=f.get("/");if(Y0){let C=Y0.content;if(C=await J0(C,W),Y)C=P0(C,G);if(X.native)if(C.includes("<head>"))C=C.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else C="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+C;return new Response(C,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}let f0=await v(404);if(f0){let C=f0;if(C=await J0(C,W),Y)C=P0(C,G);return new Response(C,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})},async error(R){let x=await v(500);if(x)return new Response(x,{status:500,headers:{"Content-Type":"text/html"}});return new Response(`<pre>${R}
1611
1623
  ${R.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});if(console.clear(),console.log(`
1612
1624
  ${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
1613
1625
  ${B.bright}\u2192 ${B.cyan}http://localhost:${v0}/${B.reset}`),Y)console.log(`${B.dim} HMR: ws://localhost:${G}${B.reset}`);console.log(`
1614
- ${B.yellow}Routes:${B.reset}`);let W0=[...w6(A,W)];for(let{route:R}of E)W0.push(`${R.pattern}`);if(W0.forEach((R,x)=>{let y=x===W0.length-1?"\u2514\u2500 ":"\u251C\u2500 ";console.log(` ${B.green}${y}${B.reset}${R}`)}),console.log(`
1615
- Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.url.toString(),()=>{if(J)D1();Z1.stop()}),X.native){let R,x=m.join(O,"index.stx");if(e.existsSync(x)){let y=await Bun.file(x).text();R=X$(y)}let P=_?.app?.window??{};await G1(v0,{title:_?.app?.head?.title||m.basename(W)||"stx App",width:P.width,height:P.height,darkMode:P.darkMode,hotReload:P.hotReload,titlebarHidden:P.titlebarHidden??X.titlebarHidden===!0,nativeSidebar:!!R,sidebarConfig:R})}if(Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let R=(p)=>{return p.startsWith("public/")||p.startsWith("public\\")},x=(p)=>{let u=p.toLowerCase();return u.endsWith(".stx")||u.endsWith(".html")||u.endsWith(".md")},P=new Map,y=()=>{let p=new Set([W,..._._layerGraph?.layers.map((u)=>u.root)??[],..._._layerGraph?.configDependencies.map((u)=>m.dirname(u))??[]].filter((u)=>e.existsSync(u)).map((u)=>e.realpathSync(u)));for(let u of _._layerGraph?.layers??[])for(let g of Object.values(u.resources)){if(!e.existsSync(g))continue;let h=e.realpathSync(g);if(![...p].some((Y0)=>h===Y0||h.startsWith(`${Y0}${m.sep}`)))p.add(h)}for(let[u,g]of P)if(!p.has(u))g.close(),P.delete(u);for(let u of p)if(!P.has(u)&&e.existsSync(u))P.set(u,e.watch(u,{recursive:!0},(g,h)=>{R0(u,g,h).catch((Y0)=>console.error("[stx] Layer rebuild failed:",Y0))}))},Z0=Promise.resolve(),R0=(p,u,g)=>{return Z0=Z0.catch(()=>{}).then(()=>g0(p,u,g)),Z0},g0=async(p,u,g)=>{if(!g||Y$(g))return;if(Q$(g)){if(_._layerGraph){let h=await K(W);Object.assign(_,h),A.splice(0,A.length,...j$(H,{pagesDir:L,pagesDirs:h._layerPageDirs?[O,...h._layerPageDirs.slice(1)]:void 0})),y()}if(R(g)){if(console.log(`${B.cyan}${g} changed${B.reset}`),Y&&J)J.reload(g)}else if(x(g)){console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-qr3zcm87.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(I&&g){if(m.resolve(p,g)===I||m.basename(I)===g){let Y0=await J5(I,X.stxOptions||{});if(Y0)N=Y0}}if(await G0(),await L$(W),Y&&J)J.reload(g)}else{console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-qr3zcm87.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(await G0(),Y&&J)J.reload(g)}}else if(Z$(g)){if(console.log(`${B.cyan}CSS ${g} changed${B.reset}`),Y&&J)J.updateCss(g)}};y(),process.on("SIGINT",()=>{for(let p of P.values())p.close();if(J)D1();Z1.stop(),process.exit(0)})}return!0}var b={enabled:!1,components:new Map,stores:new Map,events:[],performance:[],selectedComponent:null,selectedStore:null,maxEvents:1000,maxPerformance:500};function T4($={}){if(typeof window>"u")return;b.enabled=!0,b.maxEvents=$.maxEvents||1000,b.maxPerformance=$.maxPerformance||500,window.__STX_DEVTOOLS__={getState:()=>b,getComponents:()=>Array.from(b.components.values()),getComponent:(X)=>b.components.get(X),getStores:()=>Array.from(b.stores.values()),getStore:(X)=>b.stores.get(X),getEvents:()=>b.events,getPerformance:()=>b.performance,selectComponent:(X)=>K5(X),selectStore:(X)=>k4(X),inspectElement:(X)=>x4(X),highlightComponent:(X)=>a6(X),clearHighlight:()=>r6(),logComponentTree:()=>S4(),logStoreState:(X)=>P4(X),timeTravel:(X,Z)=>b4(X,Z)},v4(),y4(),console.log("%c[STX DevTools] Enabled","color: #10b981; font-weight: bold;")}function C4(){b.enabled=!1,delete window.__STX_DEVTOOLS__;let $=document.getElementById("stx-devtools-panel");if($)$.remove();console.log("%c[STX DevTools] Disabled","color: #ef4444;")}function p6($){if(!b.enabled)return;let X=b.components.get($);if(X){if(X.parentId){let Z=b.components.get(X.parentId);if(Z)Z.children=Z.children.filter((Q)=>Q!==$)}b.components.delete($),W5({timestamp:Date.now(),type:"component:unmounted",componentId:$,payload:{name:X.name}})}}function l6($,X,Z={},Q=[]){if(!b.enabled)return;let Y={id:$,state:X,getters:Z,actions:Q,history:[{timestamp:Date.now(),type:"state",name:"__init__",newValue:X}]};b.stores.set($,Y),W5({timestamp:Date.now(),type:"store:registered",payload:{id:$,state:X}})}function i6($,X,Z,Q,Y="state"){if(!b.enabled)return;let J=b.stores.get($);if(J){let G={timestamp:Date.now(),type:Y,name:X,oldValue:Z,newValue:Q,stack:Error().stack};if(J.history.push(G),J.history.length>100)J.history=J.history.slice(-100);if(Y==="state")J.state={...J.state,[X]:Q};W5({timestamp:Date.now(),type:`store:${Y}`,payload:{storeId:$,name:X,oldValue:Z,newValue:Q}})}}function W5($){if(!b.enabled)return;if(b.events.push($),b.events.length>b.maxEvents)b.events=b.events.slice(-b.maxEvents);if(typeof window<"u")window.dispatchEvent(new CustomEvent("stx:devtools:event",{detail:$}))}function K5($){b.selectedComponent=$;let X=b.components.get($);if(X)a6($),console.log("%c[STX DevTools] Selected component:","color: #3b82f6;",X);return X}function k4($){b.selectedStore=$;let X=b.stores.get($);if(X)console.log("%c[STX DevTools] Selected store:","color: #8b5cf6;",X);return X}function x4($){let X=$;while(X){let Z=X.getAttribute("data-stx-component-id");if(Z)return K5(Z);X=X.parentElement}console.log("%c[STX DevTools] No component found for element","color: #f59e0b;");return}function a6($){r6();let X=b.components.get($);if(X?.element){let Z=document.createElement("div");Z.id="stx-devtools-highlight",Z.style.cssText=`
1626
+ ${B.yellow}Routes:${B.reset}`);let W0=[...S6(A,W)];for(let{route:R}of V)W0.push(`${R.pattern}`);if(W0.forEach((R,x)=>{let y=x===W0.length-1?"\u2514\u2500 ":"\u251C\u2500 ";console.log(` ${B.green}${y}${B.reset}${R}`)}),console.log(`
1627
+ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.url.toString(),()=>{if(J)D1();Z1.stop()}),X.native){let R,x=m.join(O,"index.stx");if(e.existsSync(x)){let y=await Bun.file(x).text();R=Z$(y)}let P=_?.app?.window??{};await G1(v0,{title:_?.app?.head?.title||m.basename(W)||"stx App",width:P.width,height:P.height,darkMode:P.darkMode,hotReload:P.hotReload,titlebarHidden:P.titlebarHidden??X.titlebarHidden===!0,nativeSidebar:!!R,sidebarConfig:R})}if(Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let R=(p)=>{return p.startsWith("public/")||p.startsWith("public\\")},x=(p)=>{let u=p.toLowerCase();return u.endsWith(".stx")||u.endsWith(".html")||u.endsWith(".md")},P=new Map,y=()=>{let p=new Set([W,..._._layerGraph?.layers.map((u)=>u.root)??[],..._._layerGraph?.configDependencies.map((u)=>m.dirname(u))??[]].filter((u)=>e.existsSync(u)).map((u)=>e.realpathSync(u)));for(let u of _._layerGraph?.layers??[])for(let g of Object.values(u.resources)){if(!e.existsSync(g))continue;let h=e.realpathSync(g);if(![...p].some((Y0)=>h===Y0||h.startsWith(`${Y0}${m.sep}`)))p.add(h)}for(let[u,g]of P)if(!p.has(u))g.close(),P.delete(u);for(let u of p)if(!P.has(u)&&e.existsSync(u))P.set(u,e.watch(u,{recursive:!0},(g,h)=>{R0(u,g,h).catch((Y0)=>console.error("[stx] Layer rebuild failed:",Y0))}))},Z0=Promise.resolve(),R0=(p,u,g)=>{return Z0=Z0.catch(()=>{}).then(()=>g0(p,u,g)),Z0},g0=async(p,u,g)=>{if(!g||J$(g))return;if(Y$(g)){if(_._layerGraph){let h=await K(W);Object.assign(_,h),A.splice(0,A.length,...H$(H,{pagesDir:L,pagesDirs:h._layerPageDirs?[O,...h._layerPageDirs.slice(1)]:void 0})),y()}if(R(g)){if(console.log(`${B.cyan}${g} changed${B.reset}`),Y&&J)J.reload(g)}else if(x(g)){console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-1djdz98r.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(I&&g){if(m.resolve(p,g)===I||m.basename(I)===g){let Y0=await K5(I,X.stxOptions||{});if(Y0)q=Y0}}if(await G0(),await F$(W),Y&&J)J.reload(g)}else{console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-1djdz98r.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(await G0(),Y&&J)J.reload(g)}}else if(Q$(g)){if(console.log(`${B.cyan}CSS ${g} changed${B.reset}`),Y&&J)J.updateCss(g)}};y(),process.on("SIGINT",()=>{for(let p of P.values())p.close();if(J)D1();Z1.stop(),process.exit(0)})}return!0}var b={enabled:!1,components:new Map,stores:new Map,events:[],performance:[],selectedComponent:null,selectedStore:null,maxEvents:1000,maxPerformance:500};function b4($={}){if(typeof window>"u")return;b.enabled=!0,b.maxEvents=$.maxEvents||1000,b.maxPerformance=$.maxPerformance||500,window.__STX_DEVTOOLS__={getState:()=>b,getComponents:()=>Array.from(b.components.values()),getComponent:(X)=>b.components.get(X),getStores:()=>Array.from(b.stores.values()),getStore:(X)=>b.stores.get(X),getEvents:()=>b.events,getPerformance:()=>b.performance,selectComponent:(X)=>B5(X),selectStore:(X)=>v4(X),inspectElement:(X)=>g4(X),highlightComponent:(X)=>t6(X),clearHighlight:()=>e6(),logComponentTree:()=>f4(),logStoreState:(X)=>h4(X),timeTravel:(X,Z)=>d4(X,Z)},m4(),u4(),console.log("%c[STX DevTools] Enabled","color: #10b981; font-weight: bold;")}function y4(){b.enabled=!1,delete window.__STX_DEVTOOLS__;let $=document.getElementById("stx-devtools-panel");if($)$.remove();console.log("%c[STX DevTools] Disabled","color: #ef4444;")}function s6($){if(!b.enabled)return;let X=b.components.get($);if(X){if(X.parentId){let Z=b.components.get(X.parentId);if(Z)Z.children=Z.children.filter((Q)=>Q!==$)}b.components.delete($),U5({timestamp:Date.now(),type:"component:unmounted",componentId:$,payload:{name:X.name}})}}function n6($,X,Z={},Q=[]){if(!b.enabled)return;let Y={id:$,state:X,getters:Z,actions:Q,history:[{timestamp:Date.now(),type:"state",name:"__init__",newValue:X}]};b.stores.set($,Y),U5({timestamp:Date.now(),type:"store:registered",payload:{id:$,state:X}})}function o6($,X,Z,Q,Y="state"){if(!b.enabled)return;let J=b.stores.get($);if(J){let G={timestamp:Date.now(),type:Y,name:X,oldValue:Z,newValue:Q,stack:Error().stack};if(J.history.push(G),J.history.length>100)J.history=J.history.slice(-100);if(Y==="state")J.state={...J.state,[X]:Q};U5({timestamp:Date.now(),type:`store:${Y}`,payload:{storeId:$,name:X,oldValue:Z,newValue:Q}})}}function U5($){if(!b.enabled)return;if(b.events.push($),b.events.length>b.maxEvents)b.events=b.events.slice(-b.maxEvents);if(typeof window<"u")window.dispatchEvent(new CustomEvent("stx:devtools:event",{detail:$}))}function B5($){b.selectedComponent=$;let X=b.components.get($);if(X)t6($),console.log("%c[STX DevTools] Selected component:","color: #3b82f6;",X);return X}function v4($){b.selectedStore=$;let X=b.stores.get($);if(X)console.log("%c[STX DevTools] Selected store:","color: #8b5cf6;",X);return X}function g4($){let X=$;while(X){let Z=X.getAttribute("data-stx-component-id");if(Z)return B5(Z);X=X.parentElement}console.log("%c[STX DevTools] No component found for element","color: #f59e0b;");return}function t6($){e6();let X=b.components.get($);if(X?.element){let Z=document.createElement("div");Z.id="stx-devtools-highlight",Z.style.cssText=`
1616
1628
  position: absolute;
1617
1629
  background: rgba(59, 130, 246, 0.2);
1618
1630
  border: 2px solid #3b82f6;
@@ -1630,7 +1642,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1630
1642
  font-family: monospace;
1631
1643
  border-radius: 4px;
1632
1644
  white-space: nowrap;
1633
- `,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function r6(){let $=document.getElementById("stx-devtools-highlight");if($)$.remove()}function S4(){console.group("%c[STX DevTools] Component Tree","color: #10b981; font-weight: bold;");let $=Array.from(b.components.values()).filter((Z)=>!Z.parentId);function X(Z,Q){let Y=" ".repeat(Q);if(console.log(`${Y}%c<${Z.name}>%c id=${Z.id} renders=${Z.renderCount}`,"color: #3b82f6;","color: #6b7280;"),Object.keys(Z.props).length>0)console.log(`${Y} props:`,Z.props);if(Object.keys(Z.state).length>0)console.log(`${Y} state:`,Z.state);for(let J of Z.children){let G=b.components.get(J);if(G)X(G,Q+1)}}for(let Z of $)X(Z,0);console.groupEnd()}function P4($){console.group("%c[STX DevTools] Store State","color: #8b5cf6; font-weight: bold;");let X=$?[b.stores.get($)].filter(Boolean):Array.from(b.stores.values());for(let Z of X)if(Z)console.group(`Store: ${Z.id}`),console.log("State:",Z.state),console.log("Getters:",Z.getters),console.log("Actions:",Z.actions),console.log("History:",Z.history),console.groupEnd();console.groupEnd()}function b4($,X){let Z=b.stores.get(X);if(!Z)return;if($<0||$>=Z.history.length){console.warn("[STX DevTools] Invalid history index");return}let Q={};for(let Y=0;Y<=$;Y++){let J=Z.history[Y];if(J.type==="state"&&J.name!=="__init__")Q[J.name]=J.newValue;else if(J.name==="__init__")Object.assign(Q,J.newValue)}if(console.log(`%c[STX DevTools] Time traveled to index ${$}`,"color: #f59e0b;",Q),typeof window<"u"&&window.__STX_STORES__){let J=window.__STX_STORES__[X];if(J&&typeof J.$patch==="function")J.$patch(Q)}}function y4(){if(typeof MutationObserver>"u")return;new MutationObserver((X)=>{for(let Z of X)Z.removedNodes.forEach((Q)=>{if(Q instanceof HTMLElement){let Y=Q.getAttribute("data-stx-component-id");if(Y)p6(Y);Q.querySelectorAll("[data-stx-component-id]").forEach((J)=>{let G=J.getAttribute("data-stx-component-id");if(G)p6(G)})}})}).observe(document.body,{childList:!0,subtree:!0})}function v4(){if(typeof document>"u")return;if(document.getElementById("stx-devtools-panel"))return;let $=document.createElement("div");$.id="stx-devtools-panel",$.innerHTML=`
1645
+ `,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function e6(){let $=document.getElementById("stx-devtools-highlight");if($)$.remove()}function f4(){console.group("%c[STX DevTools] Component Tree","color: #10b981; font-weight: bold;");let $=Array.from(b.components.values()).filter((Z)=>!Z.parentId);function X(Z,Q){let Y=" ".repeat(Q);if(console.log(`${Y}%c<${Z.name}>%c id=${Z.id} renders=${Z.renderCount}`,"color: #3b82f6;","color: #6b7280;"),Object.keys(Z.props).length>0)console.log(`${Y} props:`,Z.props);if(Object.keys(Z.state).length>0)console.log(`${Y} state:`,Z.state);for(let J of Z.children){let G=b.components.get(J);if(G)X(G,Q+1)}}for(let Z of $)X(Z,0);console.groupEnd()}function h4($){console.group("%c[STX DevTools] Store State","color: #8b5cf6; font-weight: bold;");let X=$?[b.stores.get($)].filter(Boolean):Array.from(b.stores.values());for(let Z of X)if(Z)console.group(`Store: ${Z.id}`),console.log("State:",Z.state),console.log("Getters:",Z.getters),console.log("Actions:",Z.actions),console.log("History:",Z.history),console.groupEnd();console.groupEnd()}function d4($,X){let Z=b.stores.get(X);if(!Z)return;if($<0||$>=Z.history.length){console.warn("[STX DevTools] Invalid history index");return}let Q={};for(let Y=0;Y<=$;Y++){let J=Z.history[Y];if(J.type==="state"&&J.name!=="__init__")Q[J.name]=J.newValue;else if(J.name==="__init__")Object.assign(Q,J.newValue)}if(console.log(`%c[STX DevTools] Time traveled to index ${$}`,"color: #f59e0b;",Q),typeof window<"u"&&window.__STX_STORES__){let J=window.__STX_STORES__[X];if(J&&typeof J.$patch==="function")J.$patch(Q)}}function u4(){if(typeof MutationObserver>"u")return;new MutationObserver((X)=>{for(let Z of X)Z.removedNodes.forEach((Q)=>{if(Q instanceof HTMLElement){let Y=Q.getAttribute("data-stx-component-id");if(Y)s6(Y);Q.querySelectorAll("[data-stx-component-id]").forEach((J)=>{let G=J.getAttribute("data-stx-component-id");if(G)s6(G)})}})}).observe(document.body,{childList:!0,subtree:!0})}function m4(){if(typeof document>"u")return;if(document.getElementById("stx-devtools-panel"))return;let $=document.createElement("div");$.id="stx-devtools-panel",$.innerHTML=`
1634
1646
  <style>
1635
1647
  #stx-devtools-panel {
1636
1648
  position: fixed;
@@ -1739,7 +1751,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1739
1751
  <div id="stx-devtools-content">
1740
1752
  <div id="stx-devtools-components-tab"></div>
1741
1753
  </div>
1742
- `,document.body.appendChild($);let X=$.querySelector("#stx-devtools-header"),Z=$.querySelector("#stx-devtools-toggle");X?.addEventListener("click",()=>{if($.classList.toggle("open"),Z)Z.textContent=$.classList.contains("open")?"\u25BC":"\u25B2"});let Q=$.querySelectorAll(".stx-devtools-tab");Q.forEach((Y)=>{Y.addEventListener("click",()=>{Q.forEach((J)=>J.classList.remove("active")),Y.classList.add("active"),c6(Y.getAttribute("data-tab")||"components")})}),setInterval(()=>{let Y=$.querySelector(".stx-devtools-tab.active");if(Y&&$.classList.contains("open"))c6(Y.getAttribute("data-tab")||"components")},1000)}function c6($){let X=document.getElementById("stx-devtools-content");if(!X)return;switch($){case"components":X.innerHTML=g4();break;case"stores":X.innerHTML=f4();break;case"events":X.innerHTML=h4();break}X.querySelectorAll(".stx-devtools-component").forEach((Z)=>{Z.addEventListener("click",()=>{let Q=Z.getAttribute("data-id");if(Q)K5(Q)})})}function g4(){let X=Array.from(b.components.values()).filter((Q)=>!Q.parentId);function Z(Q,Y){let J=Q.children.map((G)=>b.components.get(G)).filter(Boolean).map((G)=>Z(G,Y+1)).join("");return`
1754
+ `,document.body.appendChild($);let X=$.querySelector("#stx-devtools-header"),Z=$.querySelector("#stx-devtools-toggle");X?.addEventListener("click",()=>{if($.classList.toggle("open"),Z)Z.textContent=$.classList.contains("open")?"\u25BC":"\u25B2"});let Q=$.querySelectorAll(".stx-devtools-tab");Q.forEach((Y)=>{Y.addEventListener("click",()=>{Q.forEach((J)=>J.classList.remove("active")),Y.classList.add("active"),r6(Y.getAttribute("data-tab")||"components")})}),setInterval(()=>{let Y=$.querySelector(".stx-devtools-tab.active");if(Y&&$.classList.contains("open"))r6(Y.getAttribute("data-tab")||"components")},1000)}function r6($){let X=document.getElementById("stx-devtools-content");if(!X)return;switch($){case"components":X.innerHTML=p4();break;case"stores":X.innerHTML=c4();break;case"events":X.innerHTML=l4();break}X.querySelectorAll(".stx-devtools-component").forEach((Z)=>{Z.addEventListener("click",()=>{let Q=Z.getAttribute("data-id");if(Q)B5(Q)})})}function p4(){let X=Array.from(b.components.values()).filter((Q)=>!Q.parentId);function Z(Q,Y){let J=Q.children.map((G)=>b.components.get(G)).filter(Boolean).map((G)=>Z(G,Y+1)).join("");return`
1743
1755
  <div class="stx-devtools-component ${b.selectedComponent===Q.id?"selected":""}"
1744
1756
  data-id="${Q.id}"
1745
1757
  style="padding-left: ${Y*16+8}px">
@@ -1747,25 +1759,25 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1747
1759
  <span class="stx-devtools-component-id">${Q.id}</span>
1748
1760
  </div>
1749
1761
  ${J}
1750
- `}if(X.length===0)return'<div style="color: #6b7280; padding: 8px;">No components registered</div>';return X.map((Q)=>Z(Q,0)).join("")}function f4(){let $=Array.from(b.stores.values());if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No stores registered</div>';return $.map((X)=>`
1762
+ `}if(X.length===0)return'<div style="color: #6b7280; padding: 8px;">No components registered</div>';return X.map((Q)=>Z(Q,0)).join("")}function c4(){let $=Array.from(b.stores.values());if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No stores registered</div>';return $.map((X)=>`
1751
1763
  <div class="stx-devtools-section">
1752
1764
  <div class="stx-devtools-section-title">${X.id}</div>
1753
1765
  <div class="stx-devtools-json">${JSON.stringify(X.state,null,2)}</div>
1754
1766
  </div>
1755
- `).join("")}function h4(){let $=b.events.slice(-20).reverse();if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No events recorded</div>';return $.map((X)=>`
1767
+ `).join("")}function l4(){let $=b.events.slice(-20).reverse();if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No events recorded</div>';return $.map((X)=>`
1756
1768
  <div style="padding: 4px 0; border-bottom: 1px solid #374151;">
1757
1769
  <span style="color: #60a5fa;">${X.type}</span>
1758
1770
  <span style="color: #6b7280; font-size: 10px; margin-left: 8px;">
1759
1771
  ${new Date(X.timestamp).toLocaleTimeString()}
1760
1772
  </span>
1761
1773
  </div>
1762
- `).join("")}import _5 from"fs";import k1 from"path";async function d4($){try{let Z=(await Bun.file($).text()).match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return[];let Q=Z[1],Y=[],J=/\/\*\*\s*([\s\S]*?)\s*\*\/\s*(?:(?:const|let|var)\s*)?(?:([\w$]+)\s*=|module\.exports\.([\w$]+)\s*=|\s*([\w$]+)\s*:)/g,G;while((G=J.exec(Q))!==null){let W=G[1],K=G[2]||G[3]||G[4];if(!K)continue;let _={name:K},U=W.match(/@type\s+\{([^}]+)\}/i);if(U)_.type=U[1].trim();if(W.match(/@required/i))_.required=!0;let z=W.match(/@default\s+(.+?)(?:\s+|$)/i);if(z)_.default=z[1].trim();let j=W.split(`
1763
- `).map((H)=>H.trim().replace(/^\*\s*/,"")).filter((H)=>!H.startsWith("@")&&H.length>0);_.description=j.join(" ").trim(),Y.push(_)}if(Y.length===0){let W=Q.match(/module\.exports\s*=\s*\{([^}]+)\}/i);if(W){let _=W[1].split(",").map((U)=>U.trim()).filter(Boolean);for(let U of _){let[F]=U.split(":").map((z)=>z.trim());if(F)Y.push({name:F})}}}return Y}catch(X){return console.error(`Error extracting props from ${$}:`,X),[]}}async function u4($){try{let X=await Bun.file($).text(),Z=X.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||X.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//);if(Z)return Z[1].split(`
1764
- `).map((Q)=>Q.trim().replace(/^\*\s*/,"")).join(" ").trim();return""}catch{return""}}async function m4($,X=!1,Z){let Q=k1.basename($,".stx"),Y=await d4($),J=await u4($),G="";if(X&&Z)G=`<${Z}></${Z}>`;else{let W=Y.map((K)=>{if(K.type==="boolean")return`:${K.name}="true"`;return`${K.name}="value"`}).join(`
1774
+ `).join("")}import L5 from"fs";import k1 from"path";async function i4($){try{let Z=(await Bun.file($).text()).match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return[];let Q=Z[1],Y=[],J=/\/\*\*\s*([\s\S]*?)\s*\*\/\s*(?:(?:const|let|var)\s*)?(?:([\w$]+)\s*=|module\.exports\.([\w$]+)\s*=|\s*([\w$]+)\s*:)/g,G;while((G=J.exec(Q))!==null){let W=G[1],K=G[2]||G[3]||G[4];if(!K)continue;let _={name:K},U=W.match(/@type\s+\{([^}]+)\}/i);if(U)_.type=U[1].trim();if(W.match(/@required/i))_.required=!0;let z=W.match(/@default\s+(.+?)(?:\s+|$)/i);if(z)_.default=z[1].trim();let j=W.split(`
1775
+ `).map((H)=>H.trim().replace(/^\*\s*/,"")).filter((H)=>!H.startsWith("@")&&H.length>0);_.description=j.join(" ").trim(),Y.push(_)}if(Y.length===0){let W=Q.match(/module\.exports\s*=\s*\{([^}]+)\}/i);if(W){let _=W[1].split(",").map((U)=>U.trim()).filter(Boolean);for(let U of _){let[F]=U.split(":").map((z)=>z.trim());if(F)Y.push({name:F})}}}return Y}catch(X){return console.error(`Error extracting props from ${$}:`,X),[]}}async function a4($){try{let X=await Bun.file($).text(),Z=X.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||X.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//);if(Z)return Z[1].split(`
1776
+ `).map((Q)=>Q.trim().replace(/^\*\s*/,"")).join(" ").trim();return""}catch{return""}}async function s4($,X=!1,Z){let Q=k1.basename($,".stx"),Y=await i4($),J=await a4($),G="";if(X&&Z)G=`<${Z}></${Z}>`;else{let W=Y.map((K)=>{if(K.type==="boolean")return`:${K.name}="true"`;return`${K.name}="value"`}).join(`
1765
1777
  `);G=`<${Q}
1766
1778
  ${W}
1767
- />`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}async function s6($){try{if(!await x1($))return console.warn(`Components directory does not exist: ${$}`),[];let X=await _5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){let Y=k1.join($,Q.name);if(Q.isDirectory()){let J=await s6(Y);Z.push(...J)}else if(Q.isFile()&&Q.name.endsWith(".stx"))Z.push(Y)}return Z}catch(X){return console.error(`Error finding component files in ${$}:`,X),[]}}async function p4($,X){try{if(!await x1($))return[];let Z=await s6($),Q=[],Y=new Map;if(X?.components?.length)for(let J of X.components)Y.set(J.file,J);for(let J of Z){let G=Y.get(J),W=!!G,K=G?.tag,_=await m4(J,W,K);Q.push(_)}return Q}catch(Z){return console.error("Error generating component docs:",Z),[]}}async function c4($){try{if(!await x1($))return[];let X=await _5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){if(!Q.isFile()||!Q.name.endsWith(".stx"))continue;let Y=k1.join($,Q.name),J=await Bun.file(Y).text(),G=k1.basename(Y,".stx"),W=J.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||J.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//),K=W?W[1].split(`
1768
- `).map((L)=>L.trim().replace(/^\*\s*/,"")).join(" ").trim():"",_=/@component\(\s*['"]([^'"]+)['"]/g,U=/<([A-Z][a-zA-Z0-9]*|[a-z]+-[a-z0-9-]+)(?:\s[^>]*)?\/?>|\{\{\s*slot\s*\}\}/g,F=new Set,z;while((z=_.exec(J))!==null)F.add(z[1]);while((z=U.exec(J))!==null)if(z[1]&&z[1]!=="slot")F.add(z[1]);let j=/@([a-z]+)(?:\s*\(|\s+|$)/g,H=new Set;while((z=j.exec(J))!==null)H.add(z[1]);Z.push({name:G,path:Y,description:K,components:[...F],directives:[...H]})}return Z}catch(X){return console.error("Error generating template docs:",X),[]}}async function l4($=[]){try{let X=[{name:"if",description:"Conditionally render content based on a condition",hasEndTag:!0,example:`@if(user.isLoggedIn)
1779
+ />`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}async function $8($){try{if(!await x1($))return console.warn(`Components directory does not exist: ${$}`),[];let X=await L5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){let Y=k1.join($,Q.name);if(Q.isDirectory()){let J=await $8(Y);Z.push(...J)}else if(Q.isFile()&&Q.name.endsWith(".stx"))Z.push(Y)}return Z}catch(X){return console.error(`Error finding component files in ${$}:`,X),[]}}async function r4($,X){try{if(!await x1($))return[];let Z=await $8($),Q=[],Y=new Map;if(X?.components?.length)for(let J of X.components)Y.set(J.file,J);for(let J of Z){let G=Y.get(J),W=!!G,K=G?.tag,_=await s4(J,W,K);Q.push(_)}return Q}catch(Z){return console.error("Error generating component docs:",Z),[]}}async function n4($){try{if(!await x1($))return[];let X=await L5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){if(!Q.isFile()||!Q.name.endsWith(".stx"))continue;let Y=k1.join($,Q.name),J=await Bun.file(Y).text(),G=k1.basename(Y,".stx"),W=J.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||J.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//),K=W?W[1].split(`
1780
+ `).map((L)=>L.trim().replace(/^\*\s*/,"")).join(" ").trim():"",_=/@component\(\s*['"]([^'"]+)['"]/g,U=/<([A-Z][a-zA-Z0-9]*|[a-z]+-[a-z0-9-]+)(?:\s[^>]*)?\/?>|\{\{\s*slot\s*\}\}/g,F=new Set,z;while((z=_.exec(J))!==null)F.add(z[1]);while((z=U.exec(J))!==null)if(z[1]&&z[1]!=="slot")F.add(z[1]);let j=/@([a-z]+)(?:\s*\(|\s+|$)/g,H=new Set;while((z=j.exec(J))!==null)H.add(z[1]);Z.push({name:G,path:Y,description:K,components:[...F],directives:[...H]})}return Z}catch(X){return console.error("Error generating template docs:",X),[]}}async function o4($=[]){try{let X=[{name:"if",description:"Conditionally render content based on a condition",hasEndTag:!0,example:`@if(user.isLoggedIn)
1769
1781
  <p>Welcome, {{ user.name }}!</p>
1770
1782
  @endif`},{name:"else",description:"Provides an alternative if a condition is not met",hasEndTag:!1,example:`@if(user.isLoggedIn)
1771
1783
  <p>Welcome back!</p>
@@ -1785,7 +1797,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1785
1797
  <p>Page {{ page }}</p>
1786
1798
  @endwhile`},{name:"component",description:"Include a component in the template",hasEndTag:!1,example:'@component("alert", { type: "warning", title: "Warning", message: "This is a warning" })'},{name:"include",description:"Include a partial template",hasEndTag:!1,example:'@include("partials/header")'},{name:"raw",description:"Display content without processing expressions",hasEndTag:!0,example:`@raw
1787
1799
  {{ This will be displayed as-is }}
1788
- @endraw`},{name:"translate",description:"Translate a string using the i18n system",hasEndTag:!1,example:'@translate("welcome.message", { name: user.name })'},{name:"t",description:"Short alias for translate directive",hasEndTag:!1,example:'@t("welcome.message", { name: user.name })'}];for(let Z of $)X.push({name:Z.name,description:Z.description||"",hasEndTag:Z.hasEndTag||!1,example:""});return X}catch(X){return console.error("Error generating directive docs:",X),[]}}function i4($=[],X=[],Z=[],Q){let Y=`# stx Documentation
1800
+ @endraw`},{name:"translate",description:"Translate a string using the i18n system",hasEndTag:!1,example:'@translate("welcome.message", { name: user.name })'},{name:"t",description:"Short alias for translate directive",hasEndTag:!1,example:'@t("welcome.message", { name: user.name })'}];for(let Z of $)X.push({name:Z.name,description:Z.description||"",hasEndTag:Z.hasEndTag||!1,example:""});return X}catch(X){return console.error("Error generating directive docs:",X),[]}}function t4($=[],X=[],Z=[],Q){let Y=`# stx Documentation
1789
1801
 
1790
1802
  `;if(Q)Y+=`${Q}
1791
1803
 
@@ -1827,7 +1839,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1827
1839
 
1828
1840
  `,Y+=`#### Example
1829
1841
 
1830
- `,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function a4($=[],X=[],Z=[],Q){let Y=`<!DOCTYPE html>
1842
+ `,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function e4($=[],X=[],Z=[],Q){let Y=`<!DOCTYPE html>
1831
1843
  <html lang="en">
1832
1844
  <head>
1833
1845
  <meta charset="UTF-8">
@@ -1898,15 +1910,15 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
1898
1910
  <td>@${J.name}</td>
1899
1911
  <td>${J.description||"-"}</td>
1900
1912
  <td>${J.hasEndTag?"Yes":"No"}</td>
1901
- </tr>`;Y+="</tbody></table>";for(let J of Z)if(J.example)Y+=`<h3>@${J.name}</h3>`,Y+=`<p>${J.description||""}</p>`,Y+="<h4>Example</h4>",Y+=`<pre><code>${J.example.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}</code></pre>`}return Y+="</body></html>",Y}function r4($=[],X=[],Z=[],Q){return JSON.stringify({components:$,templates:X,directives:Z,extraContent:Q||""},null,2)}async function s4($){try{let{componentsDir:X,templatesDir:Z,webComponentsConfig:Q,customDirectives:Y,config:J}=$;if(!J.enabled)return!1;let G=J.outputDir||"docs";if(await _5.promises.mkdir(G,{recursive:!0}),console.log("Generating documentation..."),X)console.log(`Components directory: ${X}`);if(Z)console.log(`Templates directory: ${Z}`);console.log(`Output directory: ${G}`);let W=[];if(J.components!==!1&&X)console.log("Generating component documentation..."),W=await p4(X,Q),console.log(`Found ${W.length} components`);let K=[];if(J.templates!==!1&&Z)console.log("Generating template documentation..."),K=await c4(Z),console.log(`Found ${K.length} templates`);let _=[];if(J.directives!==!1)console.log("Generating directive documentation..."),_=await l4(Y),console.log(`Found ${_.length} directives`);let U=J.format||"markdown",F=J.extraContent,z="",j="";switch(U){case"markdown":z=i4(W,K,_,F),j="md";break;case"html":z=a4(W,K,_,F),j="html";break;case"json":z=r4(W,K,_,F),j="json";break;default:throw Error(`Unsupported documentation format: ${U}`)}let H=k1.join(G,`stx-docs.${j}`);return await Bun.write(H,z),console.log(`Documentation generated: ${H}`),!0}catch(X){return console.error("Error generating documentation:",X),!1}}async function vW($){let X={enabled:!0,outputDir:$.output||"docs",format:$.format||"markdown",components:$.components!==!1,templates:$.templates!==!1,directives:$.directives!==!1,extraContent:$.extraContent},Z=$.componentsDir||w0.componentsDir,Q=$.templatesDir||".";return s4({componentsDir:Z,templatesDir:Q,webComponentsConfig:w0.webComponents,customDirectives:w0.customDirectives,config:X})}import L1 from"process";function S1(){if(typeof globalThis<"u"&&"caches"in globalThis&&"CF"in globalThis)return{platform:"cloudflare",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","r2","d1","durable-objects","queues"]};if(typeof globalThis<"u"&&"Deno"in globalThis)return{platform:"deno",version:globalThis.Deno.version?.deno,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","deploy","ffi"]};if(typeof globalThis<"u"&&"Bun"in globalThis)return{platform:"bun",version:globalThis.Bun.version,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["sqlite","ffi","native-modules"]};if(typeof globalThis<"u"&&"EdgeRuntime"in globalThis)return{platform:"vercel",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["edge-config","blob"]};if(typeof globalThis<"u"&&"Netlify"in globalThis)return{platform:"netlify",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!1,capabilities:["blobs","edge-functions"]};if(typeof globalThis<"u"&&"fastly"in globalThis)return{platform:"fastly",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["dictionary","backend","geolocation"]};if(L1.versions?.node)return{platform:"node",version:L1.versions.node,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["fs","child-process","native-modules"]};return{platform:"unknown",supportsStreaming:!1,supportsCrypto:!1,supportsKV:!1,supportsCache:!1,capabilities:[]}}function dW(){let $=S1();return["cloudflare","deno","vercel","netlify","fastly"].includes($.platform)}function uW(){return S1().platform!=="unknown"}function n4($){return{get(X){if($&&X in $){let Z=$[X];return typeof Z==="string"?Z:void 0}if(typeof globalThis<"u"&&"Deno"in globalThis)return globalThis.Deno.env.get(X);if(L1.env)return L1.env[X];return},getOrThrow(X){let Z=this.get(X);if(Z===void 0)throw Error(`Environment variable "${X}" is not set`);return Z},has(X){return this.get(X)!==void 0},all(){let X={};if($){for(let[Z,Q]of Object.entries($))if(typeof Q==="string")X[Z]=Q}if(typeof globalThis<"u"&&"Deno"in globalThis){let Z=globalThis.Deno.env.toObject();Object.assign(X,Z)}if(L1.env){for(let[Z,Q]of Object.entries(L1.env))if(Q!==void 0)X[Z]=Q}return X}}}function o4($){let X=S1();if(X.platform==="cloudflare"&&$)return $;if(X.platform==="deno"&&"Deno"in globalThis)return t4();if(X.platform==="node"||X.platform==="bun")return e4();return}function t4(){let $=null,X=async()=>{if(!$)$=await globalThis.Deno.openKv();return $};return{async get(Z){return(await(await X()).get(["stx",Z])).value},async getWithMetadata(Z){let Q=await X(),Y=await Q.get(["stx",Z]),J=await Q.get(["stx-meta",Z]);return{value:Y.value,metadata:J.value}},async put(Z,Q,Y){let J=await X(),G=Y?.expirationTtl?Y.expirationTtl*1000:void 0;if(await J.set(["stx",Z],Q,G?{expireIn:G}:void 0),Y?.metadata)await J.set(["stx-meta",Z],Y.metadata,G?{expireIn:G}:void 0)},async delete(Z){let Q=await X();await Q.delete(["stx",Z]),await Q.delete(["stx-meta",Z])},async list(Z){let Q=await X(),Y=Z?.prefix?["stx",Z.prefix]:["stx"],J=Q.list({prefix:Y,limit:Z?.limit||100}),G=[];for await(let W of J){let _=W.key.slice(1).join("/");if(!_.startsWith("stx-meta/"))G.push({name:_})}return{keys:G,list_complete:!0}}}}function e4(){let $=new Map,X=()=>{let Z=Date.now();for(let[Q,Y]of $.entries())if(Y.expiration&&Y.expiration<Z)$.delete(Q)};return{async get(Z){X();let Q=$.get(Z);if(!Q)return null;if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),null;return Q.value},async getWithMetadata(Z){X();let Q=$.get(Z);if(!Q)return{value:null,metadata:null};if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),{value:null,metadata:null};return{value:Q.value,metadata:Q.metadata||null}},async put(Z,Q,Y){let J=Y?.expiration?Y.expiration*1000:Y?.expirationTtl?Date.now()+Y.expirationTtl*1000:void 0;$.set(Z,{value:Q,metadata:Y?.metadata,expiration:J})},async delete(Z){$.delete(Z)},async list(Z){X();let Q=[];for(let[Y,J]of $.entries()){if(Z?.prefix&&!Y.startsWith(Z.prefix))continue;if(Q.push({name:Y,expiration:J.expiration,metadata:J.metadata}),Z?.limit&&Q.length>=Z.limit)break}return{keys:Q,list_complete:!0}}}}function $X(){let $=S1();if($.platform==="cloudflare"&&"caches"in globalThis)return XX();if($.supportsStreaming)return ZX();return}function XX(){return{async match($){return(await caches.default).match($)},async put($,X){await(await caches.default).put($,X.clone())},async delete($){return(await caches.default).delete($)}}}function ZX(){let $=new Map,X=60000;return{async match(Z){let Q=Z.url,Y=$.get(Q);if(!Y)return;if(Date.now()>Y.expiration){$.delete(Q);return}return Y.response.clone()},async put(Z,Q){let Y=Z.url,J=Q.headers.get("Cache-Control"),G=60000;if(J){let W=J.match(/max-age=(\d+)/);if(W)G=Number.parseInt(W[1],10)*1000}$.set(Y,{response:Q.clone(),expiration:Date.now()+G})},async delete(Z){return $.delete(Z.url)}}}function QX(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`}function YX($,X){if(X.platform==="cloudflare"){let Z=$.cf;if(Z)return{city:Z.city,country:Z.country,countryCode:Z.country,region:Z.region,latitude:Z.latitude?Number.parseFloat(Z.latitude):void 0,longitude:Z.longitude?Number.parseFloat(Z.longitude):void 0,timezone:Z.timezone}}if(X.platform==="vercel"){let Z={},Q=$.headers.get("x-vercel-ip-city"),Y=$.headers.get("x-vercel-ip-country"),J=$.headers.get("x-vercel-ip-country-region"),G=$.headers.get("x-vercel-ip-latitude"),W=$.headers.get("x-vercel-ip-longitude");if(Q)Z.city=decodeURIComponent(Q);if(Y)Z.countryCode=Y;if(J)Z.region=J;if(G)Z.latitude=Number.parseFloat(G);if(W)Z.longitude=Number.parseFloat(W);return Object.keys(Z).length>0?Z:void 0}if(X.platform==="netlify"){let Z={},Q=$.headers.get("x-nf-geo-city"),Y=$.headers.get("x-nf-geo-country");if(Q)Z.city=Q;if(Y)Z.countryCode=Y;return Object.keys(Z).length>0?Z:void 0}return}function U5($,X,Z){let Q=new Headers($.headers);if(X.origins==="*")Q.set("Access-Control-Allow-Origin","*");else if(X.origins&&Z&&X.origins.includes(Z))Q.set("Access-Control-Allow-Origin",Z),Q.set("Vary","Origin");if(X.methods)Q.set("Access-Control-Allow-Methods",X.methods.join(", "));if(X.headers)Q.set("Access-Control-Allow-Headers",X.headers.join(", "));if(X.exposeHeaders)Q.set("Access-Control-Expose-Headers",X.exposeHeaders.join(", "));if(X.credentials)Q.set("Access-Control-Allow-Credentials","true");if(X.maxAge)Q.set("Access-Control-Max-Age",String(X.maxAge));return new Response($.body,{status:$.status,statusText:$.statusText,headers:Q})}function A$($){let X=S1();return async(Z,Q)=>{let Y=performance.now(),J=QX(),G={runtime:X,platform:Q||{},requestId:J,geo:YX(Z,X),timing:{start:Y,getElapsed:()=>performance.now()-Y},kv:o4(Q?.KV),cache:$X(),env:n4(Q?.env)};try{if(Z.method==="OPTIONS"&&$.cors){let K=new Response(null,{status:204});return K=U5(K,$.cors,Z.headers.get("Origin")||void 0),K}if($.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)){let _=await G.cache.match(Z);if(_){let U=new Response(_.body,_);return U.headers.set("X-Cache","HIT"),U.headers.set("X-Request-Id",J),$.cors?U5(U,$.cors,Z.headers.get("Origin")||void 0):U}}}let W;if($.middleware&&$.middleware.length>0)W=await JX(Z,G,$.middleware,async()=>{let K=await $.render(Z,G);return typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K});else{let K=await $.render(Z,G);W=typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K}if(W.headers.set("X-Request-Id",J),W.headers.set("X-Response-Time",`${G.timing.getElapsed().toFixed(2)}ms`),$.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)&&W.status===200){let _=$.cache.ttl||60,U=W.clone();U.headers.set("Cache-Control",`public, max-age=${_}`),await G.cache.put(Z,U),W.headers.set("X-Cache","MISS")}}if($.cors)W=U5(W,$.cors,Z.headers.get("Origin")||void 0);return W}catch(W){let K=W instanceof Error?W:Error(String(W));if($.onError)return $.onError(K,Z);return new Response(`Internal Server Error: ${K.message}`,{status:500,headers:{"Content-Type":"text/plain","X-Request-Id":J}})}}}function n6($,X){let Q=new URL($.url).pathname;if(X.excludePaths){for(let Y of X.excludePaths)if(Y.test(Q))return!1}if(X.includePaths){for(let Y of X.includePaths)if(Y.test(Q))return!0;return!1}return!0}async function JX($,X,Z,Q){let Y=0,J=async()=>{if(Y>=Z.length)return Q();let G=Z[Y];return Y++,G($,X,J)};return J()}function mW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","text/html; charset=utf-8"),Z.set("Transfer-Encoding","chunked"),new Response($,{...X,headers:Z})}function pW(){let $=new TextEncoder;return new TransformStream({transform(X,Z){Z.enqueue($.encode(X))}})}function cW($){let X=new TextEncoder;return new ReadableStream({async start(Z){for await(let Q of $)Z.enqueue(X.encode(Q));Z.close()}})}function lW($){let X=A$($);return{async fetch(Z,Q,Y){return X(Z,{env:Q,ctx:Y,KV:Q.KV})}}}function iW($){let X=A$($);return(Z)=>X(Z,{})}function aW($){let X=A$($);return(Z)=>X(Z,{})}function rW($){let X=A$($);return(Z,Q)=>{return X(Z,{netlifyContext:Q})}}function sW($){let X=$.headers.get("Cookie");if(!X)return{};let Z={};for(let Q of X.split(";")){let[Y,J]=Q.split("=").map((G)=>G.trim());if(Y&&J)Z[Y]=decodeURIComponent(J)}return Z}function nW($,X,Z){return B5($,X,Z)}function oW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify($),{...X,headers:Z})}function tW($,X=302){return new Response(null,{status:X,headers:{Location:$}})}function eW($="Not Found"){return new Response($,{status:404,headers:{"Content-Type":"text/plain"}})}var t6={indentSize:2,useTabs:!1,maxLineLength:120,normalizeWhitespace:!0,sortAttributes:!1,trimTrailingWhitespace:!0};function GX($,X={}){let Z={...t6,...X};if($.trim()==="")return`
1902
- `;let Q=$;if(Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=KX(Q,Z),Q=LX(Q,Z),Q=_X(Q,Z),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,""),Q=Q.replace(/(\S)[ \t]+(<\/[^>]+>)/g,"$1$2");if(Q=Q.replace(/\r\n/g,`
1913
+ </tr>`;Y+="</tbody></table>";for(let J of Z)if(J.example)Y+=`<h3>@${J.name}</h3>`,Y+=`<p>${J.description||""}</p>`,Y+="<h4>Example</h4>",Y+=`<pre><code>${J.example.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}</code></pre>`}return Y+="</body></html>",Y}function $X($=[],X=[],Z=[],Q){return JSON.stringify({components:$,templates:X,directives:Z,extraContent:Q||""},null,2)}async function XX($){try{let{componentsDir:X,templatesDir:Z,webComponentsConfig:Q,customDirectives:Y,config:J}=$;if(!J.enabled)return!1;let G=J.outputDir||"docs";if(await L5.promises.mkdir(G,{recursive:!0}),console.log("Generating documentation..."),X)console.log(`Components directory: ${X}`);if(Z)console.log(`Templates directory: ${Z}`);console.log(`Output directory: ${G}`);let W=[];if(J.components!==!1&&X)console.log("Generating component documentation..."),W=await r4(X,Q),console.log(`Found ${W.length} components`);let K=[];if(J.templates!==!1&&Z)console.log("Generating template documentation..."),K=await n4(Z),console.log(`Found ${K.length} templates`);let _=[];if(J.directives!==!1)console.log("Generating directive documentation..."),_=await o4(Y),console.log(`Found ${_.length} directives`);let U=J.format||"markdown",F=J.extraContent,z="",j="";switch(U){case"markdown":z=t4(W,K,_,F),j="md";break;case"html":z=e4(W,K,_,F),j="html";break;case"json":z=$X(W,K,_,F),j="json";break;default:throw Error(`Unsupported documentation format: ${U}`)}let H=k1.join(G,`stx-docs.${j}`);return await Bun.write(H,z),console.log(`Documentation generated: ${H}`),!0}catch(X){return console.error("Error generating documentation:",X),!1}}async function mW($){let X={enabled:!0,outputDir:$.output||"docs",format:$.format||"markdown",components:$.components!==!1,templates:$.templates!==!1,directives:$.directives!==!1,extraContent:$.extraContent},Z=$.componentsDir||w0.componentsDir,Q=$.templatesDir||".";return XX({componentsDir:Z,templatesDir:Q,webComponentsConfig:w0.webComponents,customDirectives:w0.customDirectives,config:X})}import L1 from"process";function S1(){if(typeof globalThis<"u"&&"caches"in globalThis&&"CF"in globalThis)return{platform:"cloudflare",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","r2","d1","durable-objects","queues"]};if(typeof globalThis<"u"&&"Deno"in globalThis)return{platform:"deno",version:globalThis.Deno.version?.deno,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","deploy","ffi"]};if(typeof globalThis<"u"&&"Bun"in globalThis)return{platform:"bun",version:globalThis.Bun.version,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["sqlite","ffi","native-modules"]};if(typeof globalThis<"u"&&"EdgeRuntime"in globalThis)return{platform:"vercel",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["edge-config","blob"]};if(typeof globalThis<"u"&&"Netlify"in globalThis)return{platform:"netlify",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!1,capabilities:["blobs","edge-functions"]};if(typeof globalThis<"u"&&"fastly"in globalThis)return{platform:"fastly",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["dictionary","backend","geolocation"]};if(L1.versions?.node)return{platform:"node",version:L1.versions.node,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["fs","child-process","native-modules"]};return{platform:"unknown",supportsStreaming:!1,supportsCrypto:!1,supportsKV:!1,supportsCache:!1,capabilities:[]}}function iW(){let $=S1();return["cloudflare","deno","vercel","netlify","fastly"].includes($.platform)}function aW(){return S1().platform!=="unknown"}function ZX($){return{get(X){if($&&X in $){let Z=$[X];return typeof Z==="string"?Z:void 0}if(typeof globalThis<"u"&&"Deno"in globalThis)return globalThis.Deno.env.get(X);if(L1.env)return L1.env[X];return},getOrThrow(X){let Z=this.get(X);if(Z===void 0)throw Error(`Environment variable "${X}" is not set`);return Z},has(X){return this.get(X)!==void 0},all(){let X={};if($){for(let[Z,Q]of Object.entries($))if(typeof Q==="string")X[Z]=Q}if(typeof globalThis<"u"&&"Deno"in globalThis){let Z=globalThis.Deno.env.toObject();Object.assign(X,Z)}if(L1.env){for(let[Z,Q]of Object.entries(L1.env))if(Q!==void 0)X[Z]=Q}return X}}}function QX($){let X=S1();if(X.platform==="cloudflare"&&$)return $;if(X.platform==="deno"&&"Deno"in globalThis)return YX();if(X.platform==="node"||X.platform==="bun")return JX();return}function YX(){let $=null,X=async()=>{if(!$)$=await globalThis.Deno.openKv();return $};return{async get(Z){return(await(await X()).get(["stx",Z])).value},async getWithMetadata(Z){let Q=await X(),Y=await Q.get(["stx",Z]),J=await Q.get(["stx-meta",Z]);return{value:Y.value,metadata:J.value}},async put(Z,Q,Y){let J=await X(),G=Y?.expirationTtl?Y.expirationTtl*1000:void 0;if(await J.set(["stx",Z],Q,G?{expireIn:G}:void 0),Y?.metadata)await J.set(["stx-meta",Z],Y.metadata,G?{expireIn:G}:void 0)},async delete(Z){let Q=await X();await Q.delete(["stx",Z]),await Q.delete(["stx-meta",Z])},async list(Z){let Q=await X(),Y=Z?.prefix?["stx",Z.prefix]:["stx"],J=Q.list({prefix:Y,limit:Z?.limit||100}),G=[];for await(let W of J){let _=W.key.slice(1).join("/");if(!_.startsWith("stx-meta/"))G.push({name:_})}return{keys:G,list_complete:!0}}}}function JX(){let $=new Map,X=()=>{let Z=Date.now();for(let[Q,Y]of $.entries())if(Y.expiration&&Y.expiration<Z)$.delete(Q)};return{async get(Z){X();let Q=$.get(Z);if(!Q)return null;if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),null;return Q.value},async getWithMetadata(Z){X();let Q=$.get(Z);if(!Q)return{value:null,metadata:null};if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),{value:null,metadata:null};return{value:Q.value,metadata:Q.metadata||null}},async put(Z,Q,Y){let J=Y?.expiration?Y.expiration*1000:Y?.expirationTtl?Date.now()+Y.expirationTtl*1000:void 0;$.set(Z,{value:Q,metadata:Y?.metadata,expiration:J})},async delete(Z){$.delete(Z)},async list(Z){X();let Q=[];for(let[Y,J]of $.entries()){if(Z?.prefix&&!Y.startsWith(Z.prefix))continue;if(Q.push({name:Y,expiration:J.expiration,metadata:J.metadata}),Z?.limit&&Q.length>=Z.limit)break}return{keys:Q,list_complete:!0}}}}function GX(){let $=S1();if($.platform==="cloudflare"&&"caches"in globalThis)return WX();if($.supportsStreaming)return KX();return}function WX(){return{async match($){return(await caches.default).match($)},async put($,X){await(await caches.default).put($,X.clone())},async delete($){return(await caches.default).delete($)}}}function KX(){let $=new Map,X=60000;return{async match(Z){let Q=Z.url,Y=$.get(Q);if(!Y)return;if(Date.now()>Y.expiration){$.delete(Q);return}return Y.response.clone()},async put(Z,Q){let Y=Z.url,J=Q.headers.get("Cache-Control"),G=60000;if(J){let W=J.match(/max-age=(\d+)/);if(W)G=Number.parseInt(W[1],10)*1000}$.set(Y,{response:Q.clone(),expiration:Date.now()+G})},async delete(Z){return $.delete(Z.url)}}}function _X(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`}function UX($,X){if(X.platform==="cloudflare"){let Z=$.cf;if(Z)return{city:Z.city,country:Z.country,countryCode:Z.country,region:Z.region,latitude:Z.latitude?Number.parseFloat(Z.latitude):void 0,longitude:Z.longitude?Number.parseFloat(Z.longitude):void 0,timezone:Z.timezone}}if(X.platform==="vercel"){let Z={},Q=$.headers.get("x-vercel-ip-city"),Y=$.headers.get("x-vercel-ip-country"),J=$.headers.get("x-vercel-ip-country-region"),G=$.headers.get("x-vercel-ip-latitude"),W=$.headers.get("x-vercel-ip-longitude");if(Q)Z.city=decodeURIComponent(Q);if(Y)Z.countryCode=Y;if(J)Z.region=J;if(G)Z.latitude=Number.parseFloat(G);if(W)Z.longitude=Number.parseFloat(W);return Object.keys(Z).length>0?Z:void 0}if(X.platform==="netlify"){let Z={},Q=$.headers.get("x-nf-geo-city"),Y=$.headers.get("x-nf-geo-country");if(Q)Z.city=Q;if(Y)Z.countryCode=Y;return Object.keys(Z).length>0?Z:void 0}return}function F5($,X,Z){let Q=new Headers($.headers);if(X.origins==="*")Q.set("Access-Control-Allow-Origin","*");else if(X.origins&&Z&&X.origins.includes(Z))Q.set("Access-Control-Allow-Origin",Z),Q.set("Vary","Origin");if(X.methods)Q.set("Access-Control-Allow-Methods",X.methods.join(", "));if(X.headers)Q.set("Access-Control-Allow-Headers",X.headers.join(", "));if(X.exposeHeaders)Q.set("Access-Control-Expose-Headers",X.exposeHeaders.join(", "));if(X.credentials)Q.set("Access-Control-Allow-Credentials","true");if(X.maxAge)Q.set("Access-Control-Max-Age",String(X.maxAge));return new Response($.body,{status:$.status,statusText:$.statusText,headers:Q})}function N$($){let X=S1();return async(Z,Q)=>{let Y=performance.now(),J=_X(),G={runtime:X,platform:Q||{},requestId:J,geo:UX(Z,X),timing:{start:Y,getElapsed:()=>performance.now()-Y},kv:QX(Q?.KV),cache:GX(),env:ZX(Q?.env)};try{if(Z.method==="OPTIONS"&&$.cors){let K=new Response(null,{status:204});return K=F5(K,$.cors,Z.headers.get("Origin")||void 0),K}if($.cache?.enabled&&Z.method==="GET"&&G.cache){if(X8(Z,$.cache)){let _=await G.cache.match(Z);if(_){let U=new Response(_.body,_);return U.headers.set("X-Cache","HIT"),U.headers.set("X-Request-Id",J),$.cors?F5(U,$.cors,Z.headers.get("Origin")||void 0):U}}}let W;if($.middleware&&$.middleware.length>0)W=await BX(Z,G,$.middleware,async()=>{let K=await $.render(Z,G);return typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K});else{let K=await $.render(Z,G);W=typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K}if(W.headers.set("X-Request-Id",J),W.headers.set("X-Response-Time",`${G.timing.getElapsed().toFixed(2)}ms`),$.cache?.enabled&&Z.method==="GET"&&G.cache){if(X8(Z,$.cache)&&W.status===200){let _=$.cache.ttl||60,U=W.clone();U.headers.set("Cache-Control",`public, max-age=${_}`),await G.cache.put(Z,U),W.headers.set("X-Cache","MISS")}}if($.cors)W=F5(W,$.cors,Z.headers.get("Origin")||void 0);return W}catch(W){let K=W instanceof Error?W:Error(String(W));if($.onError)return $.onError(K,Z);return new Response(`Internal Server Error: ${K.message}`,{status:500,headers:{"Content-Type":"text/plain","X-Request-Id":J}})}}}function X8($,X){let Q=new URL($.url).pathname;if(X.excludePaths){for(let Y of X.excludePaths)if(Y.test(Q))return!1}if(X.includePaths){for(let Y of X.includePaths)if(Y.test(Q))return!0;return!1}return!0}async function BX($,X,Z,Q){let Y=0,J=async()=>{if(Y>=Z.length)return Q();let G=Z[Y];return Y++,G($,X,J)};return J()}function sW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","text/html; charset=utf-8"),Z.set("Transfer-Encoding","chunked"),new Response($,{...X,headers:Z})}function rW(){let $=new TextEncoder;return new TransformStream({transform(X,Z){Z.enqueue($.encode(X))}})}function nW($){let X=new TextEncoder;return new ReadableStream({async start(Z){for await(let Q of $)Z.enqueue(X.encode(Q));Z.close()}})}function oW($){let X=N$($);return{async fetch(Z,Q,Y){return X(Z,{env:Q,ctx:Y,KV:Q.KV})}}}function tW($){let X=N$($);return(Z)=>X(Z,{})}function eW($){let X=N$($);return(Z)=>X(Z,{})}function $2($){let X=N$($);return(Z,Q)=>{return X(Z,{netlifyContext:Q})}}function X2($){let X=$.headers.get("Cookie");if(!X)return{};let Z={};for(let Q of X.split(";")){let[Y,J]=Q.split("=").map((G)=>G.trim());if(Y&&J)Z[Y]=decodeURIComponent(J)}return Z}function Z2($,X,Z){return z5($,X,Z)}function Q2($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify($),{...X,headers:Z})}function Y2($,X=302){return new Response(null,{status:X,headers:{Location:$}})}function J2($="Not Found"){return new Response($,{status:404,headers:{"Content-Type":"text/plain"}})}var Q8={indentSize:2,useTabs:!1,maxLineLength:120,normalizeWhitespace:!0,sortAttributes:!1,trimTrailingWhitespace:!0};function LX($,X={}){let Z={...Q8,...X};if($.trim()==="")return`
1914
+ `;let Q=$;if(Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=zX(Q,Z),Q=AX(Q,Z),Q=jX(Q,Z),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,""),Q=Q.replace(/(\S)[ \t]+(<\/[^>]+>)/g,"$1$2");if(Q=Q.replace(/\r\n/g,`
1903
1915
  `).replace(/\r/g,`
1904
1916
  `),!Q.endsWith(`
1905
1917
  `))Q+=`
1906
- `;return Q}function X2($,X={}){let Z={...t6,...X};if($.trim()==="")return`
1918
+ `;return Q}function W2($,X={}){let Z={...Q8,...X};if($.trim()==="")return`
1907
1919
  `;let Q=$;if(Q=Q.replace(/^( *)```(html|stx)\n([\s\S]*?)^( *)```/gm,(Y,J,G,W,K)=>{let _=W.split(`
1908
1920
  `),U=_.filter((L)=>L.trim().length>0);if(U.length===0)return Y;let F=Math.min(...U.map((L)=>{let O=L.match(/^( *)/);return O?O[1].length:0})),z=_.map((L)=>{if(L.trim().length===0)return"";return L.substring(F)}).join(`
1909
- `),H=GX(z,Z).trimEnd().split(`
1921
+ `),H=LX(z,Z).trimEnd().split(`
1910
1922
  `).map((L)=>{if(L.trim().length===0)return"";return J+L}).join(`
1911
1923
  `);return`${J}\`\`\`${G}
1912
1924
  ${H}
@@ -1914,7 +1926,7 @@ ${J}\`\`\``}),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=Q.replac
1914
1926
  `).replace(/\r/g,`
1915
1927
  `),!Q.endsWith(`
1916
1928
  `))Q+=`
1917
- `;return Q}function WX($){let X=$,Z=[],Q="__PROTECTED_BLOCK_";return X=X.replace(/(<(?:pre|code|textarea)[^>]*>)([\s\S]*?)(<\/(?:pre|code|textarea)>)/gi,(Y)=>{let J=Z.length;return Z.push(Y),`${Q}${J}__`}),X=X.replace(/(@(?:if|foreach|for|while|unless|section|component|slot|push|prepend|error|auth|guest|can)(?:\((?:[^()'"]|'[^']*'|"[^"]*"|\((?:[^()'"]|'[^']*'|"[^"]*")*\))*\))?)/g,`
1929
+ `;return Q}function FX($){let X=$,Z=[],Q="__PROTECTED_BLOCK_";return X=X.replace(/(<(?:pre|code|textarea)[^>]*>)([\s\S]*?)(<\/(?:pre|code|textarea)>)/gi,(Y)=>{let J=Z.length;return Z.push(Y),`${Q}${J}__`}),X=X.replace(/(@(?:if|foreach|for|while|unless|section|component|slot|push|prepend|error|auth|guest|can)(?:\((?:[^()'"]|'[^']*'|"[^"]*"|\((?:[^()'"]|'[^']*'|"[^"]*")*\))*\))?)/g,`
1918
1930
  $1
1919
1931
  `),X=X.replace(/(@end\w+)/g,`
1920
1932
  $1
@@ -1928,10 +1940,10 @@ ${G}`}),X=X.replace(/(<\/[^>]+>)(?=<|$)/g,(Y,J,G,W)=>{let K=W.substring(Math.max
1928
1940
  `}),X=X.replace(new RegExp(`${Q}(\\d+)__`,"g"),(Y,J)=>{return Z[Number.parseInt(J,10)]}),X=X.replace(/\n{2,}/g,`
1929
1941
  `),X=X.split(`
1930
1942
  `).map((Y)=>Y.trim()).join(`
1931
- `),X=X.replace(/^\n+/,"").replace(/\n+$/,""),X}function KX($,X){let Q=WX($).split(`
1932
- `),Y=[],J=0,G=!1,W=X.useTabs?"\t":" ".repeat(X.indentSize);for(let K=0;K<Q.length;K++){let _=Q[K],U=_.trim();if(U===""){Y.push("");continue}let F=U.match(/<script\b/i),z=U.match(/<\/script>/i);if(G&&!z){Y.push(_);continue}let j=U===">";if(o6(U)&&!U.startsWith("<")&&!U.startsWith("@")){Y.push(W.repeat(J)+U);continue}let H=U.startsWith("@end"),L=U.startsWith("@else")||U.startsWith("@elseif"),O=U.startsWith("@")&&BX(U),A=U.startsWith("<!DOCTYPE")||U.startsWith("<!doctype"),V=U.startsWith("<!--"),E=U.startsWith("</"),q=U.startsWith("<")&&!E&&!V&&!A,N=U.includes("/>")||UX(U),I=o6(U);if(E||H)J=Math.max(0,J-1);let M=L?Math.max(0,J-1):J;if(j)Y.push(_);else Y.push(W.repeat(M)+U);if(q&&!N&&!I&&!j||O)J++;if(F)G=!0;if(z)G=!1}return Y.join(`
1933
- `)}function _X($,X){if($=$.replace(/@(if|elseif|foreach|for|while)\s*\(\s*([^)]+)\s*\)/g,(Z,Q,Y)=>{let J=Y.trim().replace(/\s+/g," ");return`@${Q}(${J})`}),$=$.replace(/@(csrf|method)\s*\(\s*([^)]*)\s*\)/g,(Z,Q,Y)=>{if(Y.trim()==="")return`@${Q}`;return`@${Q}(${Y.trim()})`}),X.normalizeWhitespace)$=$.replace(/\{\{\s*([^}]+)\s*\}\}/g,(Z,Q)=>{return`{{ ${Q.trim()} }}`}),$=$.replace(/\{!!\s*([^!]+)\s*!!\}/g,(Z,Q)=>{return`{!! ${Q.trim()} !!}`});return $}function UX($){let X=["br","hr","img","input","meta","link","area","base","col","embed","source","track","wbr"];if($.includes("/>"))return!0;let Z=$.match(/<(\w+)/);if(Z){let Q=Z[1];return X.includes(Q.toLowerCase())}return!1}function o6($){return/<(\w+)(?:\s[^>]*)?>[\s\S]*?<\/\1>/.test($)}function BX($){let X=["if","unless","foreach","for","while","section","push","component","slot","markdown","wrap","error"];for(let Z of X)if($.startsWith(`@${Z}`))return!$.includes(`@end${Z}`);return!1}function LX($,X){if(!X.sortAttributes)return $;return $.replace(/<(\w+)([^>]*)>/g,(Z,Q,Y)=>{if(!Y.trim())return Z;if(Y.includes("<")||Y.includes(`
1934
- `)||Y.includes("@"))return Z;let J=/(\w+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,G=[],W;while((W=J.exec(Y))!==null)G.push({name:W[1],value:W[2]});G.sort((_,U)=>{if(_.name==="id")return-1;if(U.name==="id")return 1;if(_.name==="class")return-1;if(U.name==="class")return 1;return _.name.localeCompare(U.name)});let K=G.map((_)=>_.value?`${_.name}=${_.value}`:_.name).join(" ");return`<${Q}${K?` ${K}`:""}>`})}import e6 from"fs";import L5 from"path";var J2={basic:{description:"Simple page with script, style, and template sections"},component:{description:"Reusable component with props and slots"},layout:{description:"Layout template with sections and yields"},blog:{description:"Blog post with frontmatter-style variables"},api:{description:"API endpoint template with JSON response"},app:{description:"Full app with stores and components"}};async function G2($="index.stx",X={}){try{let Z=X.force||!1,Q=L5.resolve(process.cwd(),$);if(await Bun.file(Q).exists()){if(!Z)throw Error(`File ${$} already exists. Use --force to overwrite.`);console.warn(`File ${$} already exists. Overwriting...`)}let Y=L5.dirname(Q);if(!e6.existsSync(Y))e6.mkdirSync(Y,{recursive:!0});let J;if(X.template){let G=L5.resolve(process.cwd(),X.template);if(!await Bun.file(G).exists())throw Error(`Template file ${X.template} does not exist.`);if(!G.endsWith(".stx"))console.warn(`Warning: Template file ${X.template} does not have a .stx extension. Using it anyway.`);J=await Bun.file(G).text(),console.warn(`Using template from ${X.template}`)}else if(X.preset)J=$8(X.preset),console.warn(`Using '${X.preset}' preset template`);else J=$8("basic");return await Bun.write(Q,J),console.warn(`Created new stx file: ${$}`),!0}catch(Z){return console.error(`Error creating file: ${Z instanceof Error?Z.message:String(Z)}`),!1}}function $8($){switch($){case"basic":return X8();case"component":return FX();case"layout":return zX();case"blog":return jX();case"api":return HX();case"app":return OX();default:return X8()}}function X8(){return`<script>
1943
+ `),X=X.replace(/^\n+/,"").replace(/\n+$/,""),X}function zX($,X){let Q=FX($).split(`
1944
+ `),Y=[],J=0,G=!1,W=X.useTabs?"\t":" ".repeat(X.indentSize);for(let K=0;K<Q.length;K++){let _=Q[K],U=_.trim();if(U===""){Y.push("");continue}let F=U.match(/<script\b/i),z=U.match(/<\/script>/i);if(G&&!z){Y.push(_);continue}let j=U===">";if(Z8(U)&&!U.startsWith("<")&&!U.startsWith("@")){Y.push(W.repeat(J)+U);continue}let H=U.startsWith("@end"),L=U.startsWith("@else")||U.startsWith("@elseif"),O=U.startsWith("@")&&OX(U),A=U.startsWith("<!DOCTYPE")||U.startsWith("<!doctype"),M=U.startsWith("<!--"),V=U.startsWith("</"),N=U.startsWith("<")&&!V&&!M&&!A,q=U.includes("/>")||HX(U),I=Z8(U);if(V||H)J=Math.max(0,J-1);let E=L?Math.max(0,J-1):J;if(j)Y.push(_);else Y.push(W.repeat(E)+U);if(N&&!q&&!I&&!j||O)J++;if(F)G=!0;if(z)G=!1}return Y.join(`
1945
+ `)}function jX($,X){if($=$.replace(/@(if|elseif|foreach|for|while)\s*\(\s*([^)]+)\s*\)/g,(Z,Q,Y)=>{let J=Y.trim().replace(/\s+/g," ");return`@${Q}(${J})`}),$=$.replace(/@(csrf|method)\s*\(\s*([^)]*)\s*\)/g,(Z,Q,Y)=>{if(Y.trim()==="")return`@${Q}`;return`@${Q}(${Y.trim()})`}),X.normalizeWhitespace)$=$.replace(/\{\{\s*([^}]+)\s*\}\}/g,(Z,Q)=>{return`{{ ${Q.trim()} }}`}),$=$.replace(/\{!!\s*([^!]+)\s*!!\}/g,(Z,Q)=>{return`{!! ${Q.trim()} !!}`});return $}function HX($){let X=["br","hr","img","input","meta","link","area","base","col","embed","source","track","wbr"];if($.includes("/>"))return!0;let Z=$.match(/<(\w+)/);if(Z){let Q=Z[1];return X.includes(Q.toLowerCase())}return!1}function Z8($){return/<(\w+)(?:\s[^>]*)?>[\s\S]*?<\/\1>/.test($)}function OX($){let X=["if","unless","foreach","for","while","section","push","component","slot","markdown","wrap","error"];for(let Z of X)if($.startsWith(`@${Z}`))return!$.includes(`@end${Z}`);return!1}function AX($,X){if(!X.sortAttributes)return $;return $.replace(/<(\w+)([^>]*)>/g,(Z,Q,Y)=>{if(!Y.trim())return Z;if(Y.includes("<")||Y.includes(`
1946
+ `)||Y.includes("@"))return Z;let J=/(\w+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,G=[],W;while((W=J.exec(Y))!==null)G.push({name:W[1],value:W[2]});G.sort((_,U)=>{if(_.name==="id")return-1;if(U.name==="id")return 1;if(_.name==="class")return-1;if(U.name==="class")return 1;return _.name.localeCompare(U.name)});let K=G.map((_)=>_.value?`${_.name}=${_.value}`:_.name).join(" ");return`<${Q}${K?` ${K}`:""}>`})}import Y8 from"fs";import j5 from"path";var B2={basic:{description:"Simple page with script, style, and template sections"},component:{description:"Reusable component with props and slots"},layout:{description:"Layout template with sections and yields"},blog:{description:"Blog post with frontmatter-style variables"},api:{description:"API endpoint template with JSON response"},app:{description:"Full app with stores and components"}};async function L2($="index.stx",X={}){try{let Z=X.force||!1,Q=j5.resolve(process.cwd(),$);if(await Bun.file(Q).exists()){if(!Z)throw Error(`File ${$} already exists. Use --force to overwrite.`);console.warn(`File ${$} already exists. Overwriting...`)}let Y=j5.dirname(Q);if(!Y8.existsSync(Y))Y8.mkdirSync(Y,{recursive:!0});let J;if(X.template){let G=j5.resolve(process.cwd(),X.template);if(!await Bun.file(G).exists())throw Error(`Template file ${X.template} does not exist.`);if(!G.endsWith(".stx"))console.warn(`Warning: Template file ${X.template} does not have a .stx extension. Using it anyway.`);J=await Bun.file(G).text(),console.warn(`Using template from ${X.template}`)}else if(X.preset)J=J8(X.preset),console.warn(`Using '${X.preset}' preset template`);else J=J8("basic");return await Bun.write(Q,J),console.warn(`Created new stx file: ${$}`),!0}catch(Z){return console.error(`Error creating file: ${Z instanceof Error?Z.message:String(Z)}`),!1}}function J8($){switch($){case"basic":return G8();case"component":return NX();case"layout":return qX();case"blog":return MX();case"api":return VX();case"app":return EX();default:return G8()}}function G8(){return`<script>
1935
1947
  const title = "My stx Page"
1936
1948
  const description = "A page built with stx"
1937
1949
  const features = [
@@ -1956,7 +1968,7 @@ const features = [
1956
1968
  </div>
1957
1969
  @endforeach
1958
1970
  </main>
1959
- @endsection`}function FX(){return`{{-- Component: Card --}}
1971
+ @endsection`}function NX(){return`{{-- Component: Card --}}
1960
1972
  {{-- Props: title, variant, collapsible --}}
1961
1973
  {{-- Usage: @component('card', { title: "Hello", variant: "primary", collapsible: true }) Content @endcomponent --}}
1962
1974
  <script>
@@ -2001,7 +2013,7 @@ const features = [
2001
2013
  .card.collapsed .card__toggle { transform: rotate(-90deg); }
2002
2014
  .card__body { padding: 1rem; }
2003
2015
  .card.collapsed .card__body { display: none; }
2004
- </style>`}function zX(){return`<!DOCTYPE html>
2016
+ </style>`}function qX(){return`<!DOCTYPE html>
2005
2017
  <html lang="en">
2006
2018
  <head>
2007
2019
  <meta charset="UTF-8">
@@ -2052,7 +2064,7 @@ const features = [
2052
2064
 
2053
2065
  @yield('scripts')
2054
2066
  </body>
2055
- </html>`}function jX(){return`<script>
2067
+ </html>`}function MX(){return`<script>
2056
2068
  // Article metadata
2057
2069
  const title = "My Blog Post"
2058
2070
  const author = "Your Name"
@@ -2097,7 +2109,7 @@ const features = [
2097
2109
  <p>Wrap up your thoughts here.</p>
2098
2110
  </div>
2099
2111
  </article>
2100
- @endsection`}function HX(){return`<script>
2112
+ @endsection`}function VX(){return`<script>
2101
2113
  // API endpoint configuration
2102
2114
  const endpoint = "/api/data"
2103
2115
  const method = "GET"
@@ -2132,7 +2144,7 @@ const features = [
2132
2144
  }
2133
2145
  @else
2134
2146
  {{ JSON.stringify(data, null, 2) }}
2135
- @endif`}function OX(){return`<!DOCTYPE html>
2147
+ @endif`}function EX(){return`<!DOCTYPE html>
2136
2148
  <html lang="en">
2137
2149
  <head>
2138
2150
  <meta charset="UTF-8">
@@ -2357,8 +2369,8 @@ const features = [
2357
2369
  })();
2358
2370
  </script>
2359
2371
  </body>
2360
- </html>`}import{createHash as AX}from"crypto";import{existsSync as P1,mkdirSync as qX,readFileSync as F5,writeFileSync as NX,readdirSync as MX,statSync as VX}from"fs";import{basename as b1,dirname as b0,extname as y1,join as C0,relative as Z8}from"path";import{gzipSync as EX}from"zlib";var Q8={outDir:"dist",publicPath:"/",sourcemaps:!0,minify:{js:!0,css:!0,html:!0,dropConsole:!0,dropDebugger:!0,mangle:!0},splitting:{vendor:!0,minSize:20000,maxSize:250000,chunkNames:"deterministic"},css:{extract:!0,minify:!0,filename:"assets/[name].[hash].css"},assets:{inlineLimit:4096,filename:"assets/[name].[hash][ext]",hash:!0,hashLength:8,include:["png","jpg","jpeg","gif","svg","webp","woff","woff2","ttf","eot"]},compression:{gzip:!0,brotli:!0,threshold:1024,deleteOriginal:!1}};class z5{config;startTime=0;outputs=[];chunks=[];assets=[];warnings=[];errors=[];moduleGraph=new Map;assetHashes=new Map;constructor($){this.config={...Q8,...$}}async build(){this.startTime=Date.now(),this.outputs=[],this.chunks=[],this.assets=[],this.warnings=[],this.errors=[];try{this.ensureDir(this.config.outDir),await this.runPluginHook("setup"),await this.runPluginHook("buildStart");let $=this.collectEntries();for(let[Z,Q]of $)await this.buildEntry(Z,Q);if(this.config.css?.extract)await this.extractCss();if(await this.processAssets(),this.config.splitting)await this.performCodeSplitting();if(this.config.minify)await this.minifyOutputs();if(this.config.sourcemaps)await this.generateSourceMaps();if(await this.fingerprintAssets(),this.config.compression)await this.compressOutputs();if(this.config.analyze)await this.analyzeBundle();let X=this.getResult();return await this.runPluginHook("buildEnd",X),X}catch($){return this.errors.push(String($)),this.getResult()}}collectEntries(){let $=new Map,{entry:X}=this.config;if(typeof X==="string")$.set("main",X);else if(Array.isArray(X))X.forEach((Z,Q)=>{let Y=b1(Z,y1(Z));$.set(Y,Z)});else if(typeof X==="object")Object.entries(X).forEach(([Z,Q])=>{$.set(Z,Q)});return $}async buildEntry($,X){if(!await Bun.file(X).exists()){this.errors.push(`Entry point not found: ${X}`);return}let Z=await Bun.file(X).text(),Q=y1(X),Y=Z,J="js";if(Q===".stx"||Q===".html")J="html",Y=await this.processTemplate(Z,X);else if(Q===".css")J="css",Y=await this.processCss(Z,X);else if(Q===".js"||Q===".ts")J="js",Y=await this.processScript(Z,X);Y=await this.runPluginTransform(Y,X);let G=this.generateHash(Y),W=this.getOutputName($,J,G),K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,Y),this.outputs.push({path:K,type:J,size:Buffer.byteLength(Y),hash:G,sources:[X],isEntry:!0})}resolveRelativePath($,X){if(X.startsWith("/"))return C0(b0($),"..",X);return C0(b0($),X)}async processTemplate($,X){let Z=$,Q=[],Y=[];if(Z=Z.replace(/<script\b([^>]*)\bstx-inline\b([^>]*)(?:><\/script>|><\/script>|\/>)/gi,(J,G,W)=>{let K=(G+W).match(/src=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=F5(_,"utf-8");Q.push(`// Source: ${K[1]}
2361
- ${U}`)}else this.warnings.push(`External script not found: ${_}`)}return""}),Z=Z.replace(/<link\b([^>]*)\bstx-inline\b([^>]*)(?:\/>|>)/gi,(J,G,W)=>{let K=(G+W).match(/href=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=F5(_,"utf-8");Y.push(`/* Source: ${K[1]} */
2372
+ </html>`}import{createHash as IX}from"crypto";import{existsSync as P1,mkdirSync as RX,readFileSync as H5,writeFileSync as DX,readdirSync as wX,statSync as TX}from"fs";import{basename as b1,dirname as b0,extname as y1,join as C0,relative as W8}from"path";import{gzipSync as CX}from"zlib";var K8={outDir:"dist",publicPath:"/",sourcemaps:!0,minify:{js:!0,css:!0,html:!0,dropConsole:!0,dropDebugger:!0,mangle:!0},splitting:{vendor:!0,minSize:20000,maxSize:250000,chunkNames:"deterministic"},css:{extract:!0,minify:!0,filename:"assets/[name].[hash].css"},assets:{inlineLimit:4096,filename:"assets/[name].[hash][ext]",hash:!0,hashLength:8,include:["png","jpg","jpeg","gif","svg","webp","woff","woff2","ttf","eot"]},compression:{gzip:!0,brotli:!0,threshold:1024,deleteOriginal:!1}};class O5{config;startTime=0;outputs=[];chunks=[];assets=[];warnings=[];errors=[];moduleGraph=new Map;assetHashes=new Map;constructor($){this.config={...K8,...$}}async build(){this.startTime=Date.now(),this.outputs=[],this.chunks=[],this.assets=[],this.warnings=[],this.errors=[];try{this.ensureDir(this.config.outDir),await this.runPluginHook("setup"),await this.runPluginHook("buildStart");let $=this.collectEntries();for(let[Z,Q]of $)await this.buildEntry(Z,Q);if(this.config.css?.extract)await this.extractCss();if(await this.processAssets(),this.config.splitting)await this.performCodeSplitting();if(this.config.minify)await this.minifyOutputs();if(this.config.sourcemaps)await this.generateSourceMaps();if(await this.fingerprintAssets(),this.config.compression)await this.compressOutputs();if(this.config.analyze)await this.analyzeBundle();let X=this.getResult();return await this.runPluginHook("buildEnd",X),X}catch($){return this.errors.push(String($)),this.getResult()}}collectEntries(){let $=new Map,{entry:X}=this.config;if(typeof X==="string")$.set("main",X);else if(Array.isArray(X))X.forEach((Z,Q)=>{let Y=b1(Z,y1(Z));$.set(Y,Z)});else if(typeof X==="object")Object.entries(X).forEach(([Z,Q])=>{$.set(Z,Q)});return $}async buildEntry($,X){if(!await Bun.file(X).exists()){this.errors.push(`Entry point not found: ${X}`);return}let Z=await Bun.file(X).text(),Q=y1(X),Y=Z,J="js";if(Q===".stx"||Q===".html")J="html",Y=await this.processTemplate(Z,X);else if(Q===".css")J="css",Y=await this.processCss(Z,X);else if(Q===".js"||Q===".ts")J="js",Y=await this.processScript(Z,X);Y=await this.runPluginTransform(Y,X);let G=this.generateHash(Y),W=this.getOutputName($,J,G),K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,Y),this.outputs.push({path:K,type:J,size:Buffer.byteLength(Y),hash:G,sources:[X],isEntry:!0})}resolveRelativePath($,X){if(X.startsWith("/"))return C0(b0($),"..",X);return C0(b0($),X)}async processTemplate($,X){let Z=$,Q=[],Y=[];if(Z=Z.replace(/<script\b([^>]*)\bstx-inline\b([^>]*)(?:><\/script>|><\/script>|\/>)/gi,(J,G,W)=>{let K=(G+W).match(/src=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=H5(_,"utf-8");Q.push(`// Source: ${K[1]}
2373
+ ${U}`)}else this.warnings.push(`External script not found: ${_}`)}return""}),Z=Z.replace(/<link\b([^>]*)\bstx-inline\b([^>]*)(?:\/>|>)/gi,(J,G,W)=>{let K=(G+W).match(/href=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=H5(_,"utf-8");Y.push(`/* Source: ${K[1]} */
2362
2374
  ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""}),Z=Z.replace(/<script\b(?![^>]*\bstx-inline\b)([^>]*)>([\s\S]*?)<\/script>/gi,(J,G,W)=>{if(/\bsrc=/.test(G))return J;if(W.trim())Q.push(W);return""}),Z=Z.replace(/<style\b[^>]*>([\s\S]*?)<\/style>/gi,(J,G)=>{if(G.trim())Y.push(G);return""}),Q.length>0){let J=Q.join(`
2363
2375
 
2364
2376
  `),G=this.generateHash(J).slice(0,8),W=`assets/app.${G}.js`,K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,J),this.outputs.push({path:K,type:"js",size:Buffer.byteLength(J),hash:G,sources:[X]});let _=Z.lastIndexOf("</body>");if(_!==-1)Z=Z.slice(0,_)+`<script src="${this.config.publicPath}${W}"></script>
@@ -2366,7 +2378,7 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
2366
2378
 
2367
2379
  `),G=this.generateHash(J).slice(0,8),W=`assets/app.${G}.css`,K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,J),this.outputs.push({path:K,type:"css",size:Buffer.byteLength(J),hash:G,sources:[X]}),Z=Z.replace("</head>",`<link rel="stylesheet" href="${this.config.publicPath}${W}">
2368
2380
  </head>`)}return Z}async processCss($,X){let Z=$;if(typeof this.config.minify==="object"&&this.config.minify.css)Z=this.minifyCss(Z);return Z}async processScript($,X){let Z=$;if(this.config.define)for(let[Q,Y]of Object.entries(this.config.define))Z=Z.replace(new RegExp(Q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),Y);return Z}async extractCss(){let $=[];for(let J of this.outputs)if(J.type==="css"){let G=await Bun.file(J.path).text();$.push(G)}if($.length===0)return;let X=$.join(`
2369
- `),Z=this.generateHash(X).slice(0,8),Q=(this.config.css?.filename||"assets/[name].[hash].css").replace("[name]","styles").replace("[hash]",Z),Y=C0(this.config.outDir,Q);this.ensureDir(b0(Y)),await Bun.write(Y,X),this.outputs.push({path:Y,type:"css",size:Buffer.byteLength(X),hash:Z})}async processAssets(){let $=C0(b0(this.config.outDir),"public");if(!P1($))return;let X=this.config.assets||{},Z=X.include||[];this.walkDir($,(Q)=>{let Y=y1(Q).slice(1).toLowerCase();if(!Z.includes(Y))return;let J=F5(Q),G=J.length;if(X.inlineLimit&&G<X.inlineLimit)return;let W=X.hash?this.generateHash(J).slice(0,X.hashLength||8):"",K=(X.filename||"assets/[name].[hash][ext]").replace("[name]",b1(Q,y1(Q))).replace("[hash]",W).replace("[ext]",y1(Q)),_=C0(this.config.outDir,K);this.ensureDir(b0(_)),NX(_,J),this.assetHashes.set(Q,K),this.assets.push({name:b1(Q),file:K,size:G,source:Q}),this.outputs.push({path:_,type:"asset",size:G,hash:W,sources:[Q]})})}async performCodeSplitting(){if((typeof this.config.splitting==="object"?this.config.splitting:{}).vendor){let X=[];this.chunks.push({name:"vendor",file:"assets/vendor.js",size:0,modules:X,isVendor:!0,imports:[],dynamicImports:[]})}}async minifyOutputs(){let $=typeof this.config.minify==="object"?this.config.minify:{};for(let X of this.outputs){let Z=await Bun.file(X.path).text(),Q=Z;if(X.type==="js"&&$.js)Q=this.minifyJs(Z);else if(X.type==="css"&&$.css)Q=this.minifyCss(Z);else if(X.type==="html"&&$.html)Q=this.minifyHtml(Z);if(Q!==Z)await Bun.write(X.path,Q),X.size=Buffer.byteLength(Q)}}minifyJs($){let X=typeof this.config.minify==="object"?this.config.minify:{},Z=$;if(Z=Z.replace(/\/\*[\s\S]*?\*\//g,""),Z=Z.replace(/\/\/.*$/gm,""),X.dropConsole)Z=Z.replace(/console\.(log|debug|info|warn)\([^)]*\);?/g,"");if(X.dropDebugger)Z=Z.replace(/debugger;?/g,"");return Z=Z.replace(/\s+/g," "),Z=Z.replace(/\s*([{};,:])\s*/g,"$1"),Z=Z.replace(/;\}/g,"}"),Z.trim()}minifyCss($){let X=$;return X=X.replace(/\/\*[\s\S]*?\*\//g,""),X=X.replace(/\s+/g," "),X=X.replace(/\s*([{};:,>+~])\s*/g,"$1"),X=X.replace(/;}/g,"}"),X=X.replace(/[^{}]+\{\s*\}/g,""),X.trim()}minifyHtml($){let X=$;return X=X.replace(/<!--(?!\[if)[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/\s+>/g,">"),X=X.replace(/<\s+/g,"<"),X=X.replace(/\s{2,}/g," "),X.trim()}async generateSourceMaps(){if(!this.config.sourcemaps)return;for(let $ of this.outputs)if($.type==="js"||$.type==="css"){let X=await Bun.file($.path).text(),Z=[];for(let W of $.sources||[])if(await Bun.file(W).exists())Z.push(await Bun.file(W).text());else Z.push(null);let Q={version:3,file:b1($.path),sources:$.sources||[],sourcesContent:Z,mappings:"",names:[]},Y=`${$.path}.map`;await Bun.write(Y,JSON.stringify(Q));let J=new Uint8Array([10,47,47,35,32,115,111,117,114,99,101,77,97,112,112,105,110,103,85,82,76,61]),G=this.config.sourcemaps==="inline"?`data:application/json;base64,${Buffer.from(JSON.stringify(Q)).toString("base64")}`:b1(Y);if(this.config.sourcemaps!=="hidden")await Bun.write($.path,Buffer.concat([Buffer.from(X),Buffer.from(J),Buffer.from(G)]));this.outputs.push({path:Y,type:"map",size:VX(Y).size})}}async fingerprintAssets(){for(let $ of this.outputs)if($.type==="html"){let X=await Bun.file($.path).text();for(let[Z,Q]of this.assetHashes){let Y=Z8(b0($.path),Z);X=X.replace(new RegExp(Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),`${this.config.publicPath}${Q}`)}await Bun.write($.path,X)}}async compressOutputs(){let $=this.config.compression||{},X=$.threshold||1024;for(let Z of this.outputs){if(Z.type==="map")continue;if(Z.size<X)continue;let Q=Buffer.from(await Bun.file(Z.path).arrayBuffer());if($.gzip){let Y=EX(Q,{level:9}),J=`${Z.path}.gz`;await Bun.write(J,Y),Z.gzipSize=Y.length}if($.brotli)try{let{brotliCompressSync:Y}=await import("zlib"),J=Y(Q);await Bun.write(`${Z.path}.br`,J)}catch{}}}async analyzeBundle(){let $=typeof this.config.analyze==="object"?this.config.analyze:{},X=$.format||"text",Z={outputs:this.outputs.map((G)=>({path:Z8(this.config.outDir,G.path),type:G.type,size:G.size,gzipSize:G.gzipSize,sizeFormatted:this.formatSize(G.size),gzipSizeFormatted:G.gzipSize?this.formatSize(G.gzipSize):void 0})),chunks:this.chunks,assets:this.assets,totalSize:this.outputs.reduce((G,W)=>G+W.size,0),totalGzipSize:this.outputs.reduce((G,W)=>G+(W.gzipSize||0),0)},Q;if(X==="json")Q=JSON.stringify(Z,null,2);else if(X==="html")Q=this.generateAnalysisHtml(Z);else Q=this.generateAnalysisText(Z);let Y=$.filename||`bundle-analysis.${X==="html"?"html":X==="json"?"json":"txt"}`,J=C0(this.config.outDir,Y);await Bun.write(J,Q),console.log(`
2381
+ `),Z=this.generateHash(X).slice(0,8),Q=(this.config.css?.filename||"assets/[name].[hash].css").replace("[name]","styles").replace("[hash]",Z),Y=C0(this.config.outDir,Q);this.ensureDir(b0(Y)),await Bun.write(Y,X),this.outputs.push({path:Y,type:"css",size:Buffer.byteLength(X),hash:Z})}async processAssets(){let $=C0(b0(this.config.outDir),"public");if(!P1($))return;let X=this.config.assets||{},Z=X.include||[];this.walkDir($,(Q)=>{let Y=y1(Q).slice(1).toLowerCase();if(!Z.includes(Y))return;let J=H5(Q),G=J.length;if(X.inlineLimit&&G<X.inlineLimit)return;let W=X.hash?this.generateHash(J).slice(0,X.hashLength||8):"",K=(X.filename||"assets/[name].[hash][ext]").replace("[name]",b1(Q,y1(Q))).replace("[hash]",W).replace("[ext]",y1(Q)),_=C0(this.config.outDir,K);this.ensureDir(b0(_)),DX(_,J),this.assetHashes.set(Q,K),this.assets.push({name:b1(Q),file:K,size:G,source:Q}),this.outputs.push({path:_,type:"asset",size:G,hash:W,sources:[Q]})})}async performCodeSplitting(){if((typeof this.config.splitting==="object"?this.config.splitting:{}).vendor){let X=[];this.chunks.push({name:"vendor",file:"assets/vendor.js",size:0,modules:X,isVendor:!0,imports:[],dynamicImports:[]})}}async minifyOutputs(){let $=typeof this.config.minify==="object"?this.config.minify:{};for(let X of this.outputs){let Z=await Bun.file(X.path).text(),Q=Z;if(X.type==="js"&&$.js)Q=this.minifyJs(Z);else if(X.type==="css"&&$.css)Q=this.minifyCss(Z);else if(X.type==="html"&&$.html)Q=this.minifyHtml(Z);if(Q!==Z)await Bun.write(X.path,Q),X.size=Buffer.byteLength(Q)}}minifyJs($){let X=typeof this.config.minify==="object"?this.config.minify:{},Z=$;if(Z=Z.replace(/\/\*[\s\S]*?\*\//g,""),Z=Z.replace(/\/\/.*$/gm,""),X.dropConsole)Z=Z.replace(/console\.(log|debug|info|warn)\([^)]*\);?/g,"");if(X.dropDebugger)Z=Z.replace(/debugger;?/g,"");return Z=Z.replace(/\s+/g," "),Z=Z.replace(/\s*([{};,:])\s*/g,"$1"),Z=Z.replace(/;\}/g,"}"),Z.trim()}minifyCss($){let X=$;return X=X.replace(/\/\*[\s\S]*?\*\//g,""),X=X.replace(/\s+/g," "),X=X.replace(/\s*([{};:,>+~])\s*/g,"$1"),X=X.replace(/;}/g,"}"),X=X.replace(/[^{}]+\{\s*\}/g,""),X.trim()}minifyHtml($){let X=$;return X=X.replace(/<!--(?!\[if)[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/\s+>/g,">"),X=X.replace(/<\s+/g,"<"),X=X.replace(/\s{2,}/g," "),X.trim()}async generateSourceMaps(){if(!this.config.sourcemaps)return;for(let $ of this.outputs)if($.type==="js"||$.type==="css"){let X=await Bun.file($.path).text(),Z=[];for(let W of $.sources||[])if(await Bun.file(W).exists())Z.push(await Bun.file(W).text());else Z.push(null);let Q={version:3,file:b1($.path),sources:$.sources||[],sourcesContent:Z,mappings:"",names:[]},Y=`${$.path}.map`;await Bun.write(Y,JSON.stringify(Q));let J=new Uint8Array([10,47,47,35,32,115,111,117,114,99,101,77,97,112,112,105,110,103,85,82,76,61]),G=this.config.sourcemaps==="inline"?`data:application/json;base64,${Buffer.from(JSON.stringify(Q)).toString("base64")}`:b1(Y);if(this.config.sourcemaps!=="hidden")await Bun.write($.path,Buffer.concat([Buffer.from(X),Buffer.from(J),Buffer.from(G)]));this.outputs.push({path:Y,type:"map",size:TX(Y).size})}}async fingerprintAssets(){for(let $ of this.outputs)if($.type==="html"){let X=await Bun.file($.path).text();for(let[Z,Q]of this.assetHashes){let Y=W8(b0($.path),Z);X=X.replace(new RegExp(Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),`${this.config.publicPath}${Q}`)}await Bun.write($.path,X)}}async compressOutputs(){let $=this.config.compression||{},X=$.threshold||1024;for(let Z of this.outputs){if(Z.type==="map")continue;if(Z.size<X)continue;let Q=Buffer.from(await Bun.file(Z.path).arrayBuffer());if($.gzip){let Y=CX(Q,{level:9}),J=`${Z.path}.gz`;await Bun.write(J,Y),Z.gzipSize=Y.length}if($.brotli)try{let{brotliCompressSync:Y}=await import("zlib"),J=Y(Q);await Bun.write(`${Z.path}.br`,J)}catch{}}}async analyzeBundle(){let $=typeof this.config.analyze==="object"?this.config.analyze:{},X=$.format||"text",Z={outputs:this.outputs.map((G)=>({path:W8(this.config.outDir,G.path),type:G.type,size:G.size,gzipSize:G.gzipSize,sizeFormatted:this.formatSize(G.size),gzipSizeFormatted:G.gzipSize?this.formatSize(G.gzipSize):void 0})),chunks:this.chunks,assets:this.assets,totalSize:this.outputs.reduce((G,W)=>G+W.size,0),totalGzipSize:this.outputs.reduce((G,W)=>G+(W.gzipSize||0),0)},Q;if(X==="json")Q=JSON.stringify(Z,null,2);else if(X==="html")Q=this.generateAnalysisHtml(Z);else Q=this.generateAnalysisText(Z);let Y=$.filename||`bundle-analysis.${X==="html"?"html":X==="json"?"json":"txt"}`,J=C0(this.config.outDir,Y);await Bun.write(J,Q),console.log(`
2370
2382
  \uD83D\uDCCA Bundle Analysis`),console.log("\u2500".repeat(50));for(let G of Z.outputs){let W=G.gzipSizeFormatted?` (gzip: ${G.gzipSizeFormatted})`:"";console.log(` ${G.path}: ${G.sizeFormatted}${W}`)}console.log("\u2500".repeat(50)),console.log(` Total: ${this.formatSize(Z.totalSize)} (gzip: ${this.formatSize(Z.totalGzipSize)})`),console.log("")}generateAnalysisHtml($){return`<!DOCTYPE html>
2371
2383
  <html>
2372
2384
  <head>
@@ -2407,14 +2419,14 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
2407
2419
  </table>
2408
2420
  </body>
2409
2421
  </html>`}generateAnalysisText($){let X=["Bundle Analysis","=".repeat(50),""];for(let Z of $.outputs)X.push(`${Z.path}`),X.push(` Size: ${Z.sizeFormatted}${Z.gzipSizeFormatted?` (gzip: ${Z.gzipSizeFormatted})`:""}`),X.push("");return X.push("=".repeat(50)),X.push(`Total: ${this.formatSize($.totalSize)} (gzip: ${this.formatSize($.totalGzipSize)})`),X.join(`
2410
- `)}async runPluginHook($,X){if(!this.config.plugins)return;for(let Z of this.config.plugins){let Q=Z[$];if(typeof Q==="function")await Q.call(Z,X||this)}}async runPluginTransform($,X){if(!this.config.plugins)return $;let Z=$;for(let Q of this.config.plugins)if(Q.transform){let Y=await Q.transform(Z,X);if(Y!=null)Z=Y}return Z}generateHash($){return AX("sha256").update($).digest("hex")}getOutputName($,X,Z){let Q=X==="html"?".html":X==="css"?".css":X==="js"?".js":"";return`${$}.${Z.slice(0,8)}${Q}`}formatSize($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(2)} KB`;return`${($/1048576).toFixed(2)} MB`}ensureDir($){if(!P1($))qX($,{recursive:!0})}walkDir($,X){if(!P1($))return;let Z=MX($,{withFileTypes:!0});for(let Q of Z){let Y=C0($,Q.name);if(Q.isDirectory())this.walkDir(Y,X);else X(Y)}}getResult(){let $=Date.now()-this.startTime,X=this.outputs.reduce((Q,Y)=>Q+Y.size,0),Z=this.outputs.reduce((Q,Y)=>Q+(Y.gzipSize||0),0);return{outputs:this.outputs,duration:$,totalSize:X,gzipSize:Z,chunks:this.chunks,assets:this.assets,warnings:this.warnings,errors:this.errors}}}async function F2($){return new z5($).build()}function z2($){return new z5($)}function j2($){return{...Q8,...$}}function IX($){return $}var A2="f9c3713";import{existsSync as v1,mkdirSync as j5}from"fs";import{join as p0,dirname as RX}from"path";import{execSync as Y8}from"child_process";var I2={default:{description:"Standard stx project with pages, components, and stores",features:["Pages","Components","Layouts","Stores","Dev server"]},minimal:{description:"Minimal setup with just the essentials",features:["Single page","Basic styles"]},full:{description:"Full-featured project with all stx capabilities",features:["Pages","Components","Layouts","Stores","API routes","PWA","i18n","Testing"]},blog:{description:"Blog template with markdown support",features:["Blog layout","Post pages","Tags","RSS feed","Markdown"]},dashboard:{description:"Admin dashboard template",features:["Sidebar","Charts","Tables","Forms","Auth pages"]},landing:{description:"Marketing landing page template",features:["Hero section","Features","Pricing","CTA","Contact form"]}};async function R2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.template||"default",Y=p0(process.cwd(),$);if(v1(Y))return Z.success=!1,Z.message=`Directory ${$} already exists`,Z;try{j5(Y,{recursive:!0});let J=DX(Q);for(let W of J)j5(p0(Y,W),{recursive:!0});let G=wX(Q,$,X);for(let[W,K]of Object.entries(G)){let _=p0(Y,W);g1(RX(_)),await Bun.write(_,K),Z.files.push(W)}if(!X.skipGit)try{Y8("git init",{cwd:Y,stdio:"ignore"}),await Bun.write(p0(Y,".gitignore"),vX()),Z.files.push(".gitignore")}catch{Z.errors.push("Failed to initialize git repository")}if(!X.skipInstall){let W=X.packageManager||QZ();try{console.log(`
2411
- Installing dependencies with ${W}...`),Y8(`${W} install`,{cwd:Y,stdio:"inherit"})}catch{Z.errors.push("Failed to install dependencies")}}Z.message=`Created project: ${$}`,console.log(`
2422
+ `)}async runPluginHook($,X){if(!this.config.plugins)return;for(let Z of this.config.plugins){let Q=Z[$];if(typeof Q==="function")await Q.call(Z,X||this)}}async runPluginTransform($,X){if(!this.config.plugins)return $;let Z=$;for(let Q of this.config.plugins)if(Q.transform){let Y=await Q.transform(Z,X);if(Y!=null)Z=Y}return Z}generateHash($){return IX("sha256").update($).digest("hex")}getOutputName($,X,Z){let Q=X==="html"?".html":X==="css"?".css":X==="js"?".js":"";return`${$}.${Z.slice(0,8)}${Q}`}formatSize($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(2)} KB`;return`${($/1048576).toFixed(2)} MB`}ensureDir($){if(!P1($))RX($,{recursive:!0})}walkDir($,X){if(!P1($))return;let Z=wX($,{withFileTypes:!0});for(let Q of Z){let Y=C0($,Q.name);if(Q.isDirectory())this.walkDir(Y,X);else X(Y)}}getResult(){let $=Date.now()-this.startTime,X=this.outputs.reduce((Q,Y)=>Q+Y.size,0),Z=this.outputs.reduce((Q,Y)=>Q+(Y.gzipSize||0),0);return{outputs:this.outputs,duration:$,totalSize:X,gzipSize:Z,chunks:this.chunks,assets:this.assets,warnings:this.warnings,errors:this.errors}}}async function N2($){return new O5($).build()}function q2($){return new O5($)}function M2($){return{...K8,...$}}function kX($){return $}var I2="f9c3713";import{existsSync as v1,mkdirSync as A5}from"fs";import{join as p0,dirname as xX}from"path";import{execSync as _8}from"child_process";var k2={default:{description:"Standard stx project with pages, components, and stores",features:["Pages","Components","Layouts","Stores","Dev server"]},minimal:{description:"Minimal setup with just the essentials",features:["Single page","Basic styles"]},full:{description:"Full-featured project with all stx capabilities",features:["Pages","Components","Layouts","Stores","API routes","PWA","i18n","Testing"]},blog:{description:"Blog template with markdown support",features:["Blog layout","Post pages","Tags","RSS feed","Markdown"]},dashboard:{description:"Admin dashboard template",features:["Sidebar","Charts","Tables","Forms","Auth pages"]},landing:{description:"Marketing landing page template",features:["Hero section","Features","Pricing","CTA","Contact form"]}};async function x2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.template||"default",Y=p0(process.cwd(),$);if(v1(Y))return Z.success=!1,Z.message=`Directory ${$} already exists`,Z;try{A5(Y,{recursive:!0});let J=SX(Q);for(let W of J)A5(p0(Y,W),{recursive:!0});let G=PX(Q,$,X);for(let[W,K]of Object.entries(G)){let _=p0(Y,W);g1(xX(_)),await Bun.write(_,K),Z.files.push(W)}if(!X.skipGit)try{_8("git init",{cwd:Y,stdio:"ignore"}),await Bun.write(p0(Y,".gitignore"),mX()),Z.files.push(".gitignore")}catch{Z.errors.push("Failed to initialize git repository")}if(!X.skipInstall){let W=X.packageManager||_Z();try{console.log(`
2423
+ Installing dependencies with ${W}...`),_8(`${W} install`,{cwd:Y,stdio:"inherit"})}catch{Z.errors.push("Failed to install dependencies")}}Z.message=`Created project: ${$}`,console.log(`
2412
2424
  \u2705 ${Z.message}
2413
2425
 
2414
2426
  Next steps:
2415
2427
  cd ${$}
2416
2428
  ${X.packageManager||"bun"} run dev
2417
- `)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function DX($){let X=["pages","components","layouts","partials","public"];switch($){case"minimal":return["src","public"];case"full":return[...X,"src/stores","src/api","src/i18n","src/utils","test"];case"blog":return[...X,"src/posts","src/utils"];case"dashboard":return[...X,"src/stores","src/api","src/utils"];case"landing":return[...X,"src/sections"];default:return[...X,"src/stores"]}}function wX($,X,Z){let Q={};if(Q["package.json"]=SX(X,$,Z),Q["stx.config.ts"]=PX($,Z),Q["README.md"]=yX(X,$),Z.typescript!==!1)Q["tsconfig.json"]=bX();switch($){case"minimal":Q["src/index.stx"]=gX();break;case"blog":Q["pages/index.stx"]=uX(),Q["pages/[slug].stx"]=mX(),Q["layouts/app.stx"]=pX(),Q["components/PostCard.stx"]=cX();break;case"dashboard":Q["pages/index.stx"]=lX(),Q["pages/settings.stx"]=iX(),Q["layouts/app.stx"]=aX(),Q["components/Sidebar.stx"]=rX(),Q["components/StatsCard.stx"]=sX(),Q["src/stores/dashboard.ts"]=nX();break;case"landing":Q["pages/index.stx"]=oX(),Q["layouts/app.stx"]=tX(),Q["src/sections/Hero.stx"]=eX(),Q["src/sections/Features.stx"]=$Z(),Q["src/sections/Pricing.stx"]=XZ(),Q["components/Button.stx"]=ZZ();break;case"full":Q["pages/index.stx"]=J8(),Q["pages/about.stx"]=fX(),Q["layouts/app.stx"]=G8(),Q["components/Header.stx"]=W8(),Q["components/Footer.stx"]=K8(),Q["src/stores/app.ts"]=_8(),Q["src/i18n/en.json"]=hX("en"),Q["test/example.test.ts"]=dX();break;default:Q["pages/index.stx"]=J8(),Q["layouts/app.stx"]=G8(),Q["components/Header.stx"]=W8(),Q["components/Footer.stx"]=K8(),Q["src/stores/app.ts"]=_8()}return Q}async function D2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"components",Y=H5($),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Component ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=TX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created component: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create component: ${G}`}return Z}async function w2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"pages",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Page ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=CX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created page: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create page: ${G}`}return Z}async function T2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"src/stores",Y=YZ($),J=p0(Q,`${Y}.ts`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Store ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=kX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created store: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create store: ${G}`}return Z}async function C2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"layouts",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Layout ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=xX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created layout: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create layout: ${G}`}return Z}function TX($,X){let Z=[];if(Z.push(`{{-- Component: ${$} --}}`),X.props!==!1)Z.push(`<script>
2429
+ `)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function SX($){let X=["pages","components","layouts","partials","public"];switch($){case"minimal":return["src","public"];case"full":return[...X,"src/stores","src/api","src/i18n","src/utils","test"];case"blog":return[...X,"src/posts","src/utils"];case"dashboard":return[...X,"src/stores","src/api","src/utils"];case"landing":return[...X,"src/sections"];default:return[...X,"src/stores"]}}function PX($,X,Z){let Q={};if(Q["package.json"]=fX(X,$,Z),Q["stx.config.ts"]=hX($,Z),Q["README.md"]=uX(X,$),Z.typescript!==!1)Q["tsconfig.json"]=dX();switch($){case"minimal":Q["src/index.stx"]=pX();break;case"blog":Q["pages/index.stx"]=aX(),Q["pages/[slug].stx"]=sX(),Q["layouts/app.stx"]=rX(),Q["components/PostCard.stx"]=nX();break;case"dashboard":Q["pages/index.stx"]=oX(),Q["pages/settings.stx"]=tX(),Q["layouts/app.stx"]=eX(),Q["components/Sidebar.stx"]=$Z(),Q["components/StatsCard.stx"]=XZ(),Q["src/stores/dashboard.ts"]=ZZ();break;case"landing":Q["pages/index.stx"]=QZ(),Q["layouts/app.stx"]=YZ(),Q["src/sections/Hero.stx"]=JZ(),Q["src/sections/Features.stx"]=GZ(),Q["src/sections/Pricing.stx"]=WZ(),Q["components/Button.stx"]=KZ();break;case"full":Q["pages/index.stx"]=U8(),Q["pages/about.stx"]=cX(),Q["layouts/app.stx"]=B8(),Q["components/Header.stx"]=L8(),Q["components/Footer.stx"]=F8(),Q["src/stores/app.ts"]=z8(),Q["src/i18n/en.json"]=lX("en"),Q["test/example.test.ts"]=iX();break;default:Q["pages/index.stx"]=U8(),Q["layouts/app.stx"]=B8(),Q["components/Header.stx"]=L8(),Q["components/Footer.stx"]=F8(),Q["src/stores/app.ts"]=z8()}return Q}async function S2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"components",Y=N5($),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Component ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=bX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created component: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create component: ${G}`}return Z}async function P2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"pages",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Page ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=yX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created page: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create page: ${G}`}return Z}async function b2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"src/stores",Y=UZ($),J=p0(Q,`${Y}.ts`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Store ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=vX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created store: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create store: ${G}`}return Z}async function y2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"layouts",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Layout ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=gX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created layout: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create layout: ${G}`}return Z}function bX($,X){let Z=[];if(Z.push(`{{-- Component: ${$} --}}`),X.props!==!1)Z.push(`<script>
2418
2430
  // Props
2419
2431
  const title = props.title || '${$}'
2420
2432
  const variant = props.variant || 'default'
@@ -2444,7 +2456,7 @@ const variant = props.variant || 'default'
2444
2456
  margin-top: 0.5rem;
2445
2457
  }
2446
2458
  </style>`);return Z.join(`
2447
- `)}function CX($,X){let Z=H5($.replace(/-/g," ")),Q=[];if(Q.push(`<script>
2459
+ `)}function yX($,X){let Z=N5($.replace(/-/g," ")),Q=[];if(Q.push(`<script>
2448
2460
  const title = '${Z}'
2449
2461
  const description = 'Page description'
2450
2462
  </script>
@@ -2457,7 +2469,7 @@ const description = 'Page description'
2457
2469
  <p>{{ description }}</p>
2458
2470
  </div>
2459
2471
  @endsection`),Q.join(`
2460
- `)}function kX($,X){let Z=`${$}Store`,Q=`${H5($)}State`,Y=`import { defineStore } from 'stx'
2472
+ `)}function vX($,X){let Z=`${$}Store`,Q=`${N5($)}State`,Y=`import { defineStore } from 'stx'
2461
2473
 
2462
2474
  interface ${Q} {
2463
2475
  // Add your state properties here
@@ -2505,7 +2517,7 @@ finally {
2505
2517
  ],
2506
2518
  },
2507
2519
  `;return Y+=`})
2508
- `,Y}function xX($,X){let Z=`<!DOCTYPE html>
2520
+ `,Y}function gX($,X){let Z=`<!DOCTYPE html>
2509
2521
  <html lang="en">
2510
2522
  <head>
2511
2523
  <meta charset="UTF-8">
@@ -2552,7 +2564,7 @@ finally {
2552
2564
 
2553
2565
  `;return Z+=` @yield('scripts')
2554
2566
  </body>
2555
- </html>`,Z}function SX($,X,Z){let Q={name:$,version:"0.0.1",type:"module",scripts:{dev:"stx dev pages/index.stx",build:"stx build",preview:"stx serve dist"},dependencies:{stx:"latest"},devDependencies:{}};if(Z.typescript!==!1)Q.devDependencies.typescript="^5.0.0";if(Z.tailwind)Q.devDependencies.tailwindcss="^3.0.0";if(X==="full")Q.scripts.test="bun test",Q.scripts.lint="bun run lint";return JSON.stringify(Q,null,2)}function PX($,X){return`import { defineConfig } from 'stx'
2567
+ </html>`,Z}function fX($,X,Z){let Q={name:$,version:"0.0.1",type:"module",scripts:{dev:"stx dev pages/index.stx",build:"stx build",preview:"stx serve dist"},dependencies:{stx:"latest"},devDependencies:{}};if(Z.typescript!==!1)Q.devDependencies.typescript="^5.0.0";if(Z.tailwind)Q.devDependencies.tailwindcss="^3.0.0";if(X==="full")Q.scripts.test="bun test",Q.scripts.lint="bun run lint";return JSON.stringify(Q,null,2)}function hX($,X){return`import { defineConfig } from 'stx'
2556
2568
 
2557
2569
  export default defineConfig({
2558
2570
  // Template directories
@@ -2573,7 +2585,7 @@ ${X.pwa?` pwa: { enabled: true },
2573
2585
  // Analytics (configure when ready)
2574
2586
  // analytics: { enabled: true, driver: 'fathom', fathom: { siteId: 'YOUR_SITE_ID' } },
2575
2587
  })
2576
- `}function bX(){return JSON.stringify({compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"bundler",strict:!0,skipLibCheck:!0,esModuleInterop:!0,types:["bun-types"]},include:["src/**/*","test/**/*"]},null,2)}function yX($,X){return`# ${$}
2588
+ `}function dX(){return JSON.stringify({compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"bundler",strict:!0,skipLibCheck:!0,esModuleInterop:!0,types:["bun-types"]},include:["src/**/*","test/**/*"]},null,2)}function uX($,X){return`# ${$}
2577
2589
 
2578
2590
  A stx project created with the \`${X}\` template.
2579
2591
 
@@ -2605,7 +2617,7 @@ src/
2605
2617
 
2606
2618
  - [stx Documentation](https://stx.dev/docs)
2607
2619
  - [stx GitHub](https://github.com/stacksjs/stx)
2608
- `}function vX(){return`# Dependencies
2620
+ `}function mX(){return`# Dependencies
2609
2621
  node_modules/
2610
2622
  .bun/
2611
2623
 
@@ -2630,7 +2642,7 @@ Thumbs.db
2630
2642
 
2631
2643
  # Logs
2632
2644
  *.log
2633
- `}function gX(){return`<!DOCTYPE html>
2645
+ `}function pX(){return`<!DOCTYPE html>
2634
2646
  <html lang="en">
2635
2647
  <head>
2636
2648
  <meta charset="UTF-8">
@@ -2646,7 +2658,7 @@ Thumbs.db
2646
2658
  <p>Edit <code>src/index.stx</code> to get started.</p>
2647
2659
  </body>
2648
2660
  </html>
2649
- `}function J8(){return`<script>
2661
+ `}function U8(){return`<script>
2650
2662
  const title = 'Welcome to stx'
2651
2663
  const features = [
2652
2664
  { icon: '\u26A1', name: 'Fast', desc: 'Built on Bun for blazing speed' },
@@ -2675,7 +2687,7 @@ const features = [
2675
2687
  @endforeach
2676
2688
  </div>
2677
2689
  @endsection
2678
- `}function fX(){return`<script>
2690
+ `}function cX(){return`<script>
2679
2691
  const title = 'About'
2680
2692
  </script>
2681
2693
 
@@ -2687,7 +2699,7 @@ const title = 'About'
2687
2699
  <h1>{{ title }}</h1>
2688
2700
  <p>This is the about page.</p>
2689
2701
  @endsection
2690
- `}function G8(){return`<!DOCTYPE html>
2702
+ `}function B8(){return`<!DOCTYPE html>
2691
2703
  <html lang="en">
2692
2704
  <head>
2693
2705
  <meta charset="UTF-8">
@@ -2710,7 +2722,7 @@ const title = 'About'
2710
2722
  @yield('scripts')
2711
2723
  </body>
2712
2724
  </html>
2713
- `}function W8(){return`<header class="header">
2725
+ `}function L8(){return`<header class="header">
2714
2726
  <nav class="nav container">
2715
2727
  <a href="/" class="logo">stx</a>
2716
2728
  <div class="nav-links">
@@ -2727,7 +2739,7 @@ const title = 'About'
2727
2739
  .nav-links a { color: rgba(255,255,255,0.8); margin-left: 1.5rem; text-decoration: none; }
2728
2740
  .nav-links a:hover { color: white; }
2729
2741
  </style>
2730
- `}function K8(){return`<footer class="footer">
2742
+ `}function F8(){return`<footer class="footer">
2731
2743
  <div class="container">
2732
2744
  <p>&copy; {{ new Date().getFullYear() }} Built with stx</p>
2733
2745
  </div>
@@ -2736,7 +2748,7 @@ const title = 'About'
2736
2748
  <style scoped>
2737
2749
  .footer { background: #f8f9fa; padding: 2rem 0; margin-top: 4rem; text-align: center; color: #666; }
2738
2750
  </style>
2739
- `}function _8(){return`import { defineStore } from 'stx'
2751
+ `}function z8(){return`import { defineStore } from 'stx'
2740
2752
 
2741
2753
  interface AppState {
2742
2754
  theme: 'light' | 'dark'
@@ -2763,14 +2775,14 @@ export const appStore = defineStore('app', {
2763
2775
  strategies: [{ key: 'app-preferences', storage: localStorage }],
2764
2776
  },
2765
2777
  })
2766
- `}function hX($){return JSON.stringify({common:{welcome:"Welcome",home:"Home",about:"About",contact:"Contact"},messages:{loading:"Loading...",error:"An error occurred"}},null,2)}function dX(){return`import { describe, expect, it } from 'bun:test'
2778
+ `}function lX($){return JSON.stringify({common:{welcome:"Welcome",home:"Home",about:"About",contact:"Contact"},messages:{loading:"Loading...",error:"An error occurred"}},null,2)}function iX(){return`import { describe, expect, it } from 'bun:test'
2767
2779
 
2768
2780
  describe('Example', () => {
2769
2781
  it('should work', () => {
2770
2782
  expect(1 + 1).toBe(2)
2771
2783
  })
2772
2784
  })
2773
- `}function uX(){return"<!-- Blog index -->"}function mX(){return"<!-- Blog post -->"}function pX(){return`<!DOCTYPE html>
2785
+ `}function aX(){return"<!-- Blog index -->"}function sX(){return"<!-- Blog post -->"}function rX(){return`<!DOCTYPE html>
2774
2786
  <html lang="en">
2775
2787
  <head>
2776
2788
  <meta charset="UTF-8">
@@ -2810,7 +2822,7 @@ describe('Example', () => {
2810
2822
  </footer>
2811
2823
  @yield('scripts')
2812
2824
  </body>
2813
- </html>`}function cX(){return"<!-- Post card -->"}function lX(){return"<!-- Dashboard index -->"}function iX(){return"<!-- Settings -->"}function aX(){return`<!DOCTYPE html>
2825
+ </html>`}function nX(){return"<!-- Post card -->"}function oX(){return"<!-- Dashboard index -->"}function tX(){return"<!-- Settings -->"}function eX(){return`<!DOCTYPE html>
2814
2826
  <html lang="en">
2815
2827
  <head>
2816
2828
  <meta charset="UTF-8">
@@ -2846,7 +2858,7 @@ describe('Example', () => {
2846
2858
  </div>
2847
2859
  @yield('scripts')
2848
2860
  </body>
2849
- </html>`}function rX(){return"<!-- Sidebar -->"}function sX(){return"<!-- Stats card -->"}function nX(){return"// Dashboard store"}function oX(){return"<!-- Landing page -->"}function tX(){return`<!DOCTYPE html>
2861
+ </html>`}function $Z(){return"<!-- Sidebar -->"}function XZ(){return"<!-- Stats card -->"}function ZZ(){return"// Dashboard store"}function QZ(){return"<!-- Landing page -->"}function YZ(){return`<!DOCTYPE html>
2850
2862
  <html lang="en">
2851
2863
  <head>
2852
2864
  <meta charset="UTF-8">
@@ -2881,17 +2893,17 @@ describe('Example', () => {
2881
2893
  </footer>
2882
2894
  @yield('scripts')
2883
2895
  </body>
2884
- </html>`}function eX(){return"<!-- Hero section -->"}function $Z(){return"<!-- Features -->"}function XZ(){return"<!-- Pricing -->"}function ZZ(){return"<!-- Button -->"}function g1($){if(!v1($))j5($,{recursive:!0})}function QZ(){if(v1("bun.lockb"))return"bun";if(v1("pnpm-lock.yaml"))return"pnpm";if(v1("yarn.lock"))return"yarn";return"bun"}function H5($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toUpperCase())}function YZ($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toLowerCase())}function e0($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[\s_]+/g,"-").toLowerCase()}var{serve:JZ}=globalThis.Bun;import f1 from"fs";import I0 from"path";function u2($,X=200,Z={}){return new Response($,{status:X,headers:{"Content-Type":"text/html; charset=utf-8",...Z}})}async function O5($){let{loadStxConfig:X}=await import("./chunk-8rhjt6fh.js");return{...await X($.configDir??process.cwd()),...$.stxOptions??{}}}async function GZ($={}){let{port:X=3000,root:Z=".",watch:Q=!0,onRequest:Y,routes:J={},middleware:G=[],on404:W,onError:K}=$,_=I0.resolve(Z),U=await O5($),F=I0.resolve($.configDir??process.cwd()),z=await A5(F,U.serverApi),j=new Map;async function H(q){let N=f1.statSync(q),I=`${q}:${N.mtimeMs}`,M=j.get(I);if(M)return{content:M.content,status:M.status,headers:M.headers};for(let W0 of j.keys())if(W0.startsWith(`${q}:`)&&W0!==I)j.delete(W0);let w=await Bun.file(q).text(),D=w,T=W$(w);if(T)D=T.content.trim();let f=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,c=[],v=[],S;while((S=f.exec(w))!==null){let W0=S[1],R=S[2],x=S[0];if(W0.includes("server"))v.push(R);else c.push(x)}let k=w.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)||[],H0=D.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,""),G0={__filename:q,__dirname:I0.dirname(q),__stx_options:U};for(let W0 of v)await M0(W0,G0,q);let z0=await V0(H0,G0,q,U,new Set);if(k.length>0){let W0=k.join(`
2896
+ </html>`}function JZ(){return"<!-- Hero section -->"}function GZ(){return"<!-- Features -->"}function WZ(){return"<!-- Pricing -->"}function KZ(){return"<!-- Button -->"}function g1($){if(!v1($))A5($,{recursive:!0})}function _Z(){if(v1("bun.lockb"))return"bun";if(v1("pnpm-lock.yaml"))return"pnpm";if(v1("yarn.lock"))return"yarn";return"bun"}function N5($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toUpperCase())}function UZ($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toLowerCase())}function e0($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[\s_]+/g,"-").toLowerCase()}var{serve:BZ}=globalThis.Bun;import f1 from"fs";import I0 from"path";function a2($,X=200,Z={}){return new Response($,{status:X,headers:{"Content-Type":"text/html; charset=utf-8",...Z}})}async function q5($){let{loadStxConfig:X}=await import("./chunk-3pggfwbf.js");return{...await X($.configDir??process.cwd()),...$.stxOptions??{}}}async function LZ($={}){let{port:X=3000,root:Z=".",watch:Q=!0,onRequest:Y,routes:J={},middleware:G=[],on404:W,onError:K}=$,_=I0.resolve(Z),U=await q5($),F=I0.resolve($.configDir??process.cwd()),z=await M5(F,U.serverApi),j=new Map;async function H(N){let q=f1.statSync(N),I=`${N}:${q.mtimeMs}`,E=j.get(I);if(E)return{content:E.content,status:E.status,headers:E.headers};for(let W0 of j.keys())if(W0.startsWith(`${N}:`)&&W0!==I)j.delete(W0);let w=await Bun.file(N).text(),D=w,T=K$(w);if(T)D=T.content.trim();let f=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,c=[],v=[],S;while((S=f.exec(w))!==null){let W0=S[1],R=S[2],x=S[0];if(W0.includes("server"))v.push(R);else c.push(x)}let k=w.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)||[],H0=D.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,""),G0={__filename:N,__dirname:I0.dirname(N),__stx_options:U};for(let W0 of v)await M0(W0,G0,N);let z0=await V0(H0,G0,N,U,new Set);if(k.length>0){let W0=k.join(`
2885
2897
  `);if(z0.match(/(<\/head>)/i))z0=z0.replace(/(<\/head>)/i,`${W0}
2886
- $1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-fp868yhg.js"),R=W0(c.join(`
2898
+ $1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-1xts7768.js"),R=W0(c.join(`
2887
2899
  `),G0);if(z0.match(/(<\/body>)/i))z0=z0.replace(/(<\/body>)/i,`${R}
2888
2900
  $1`);else z0+=`
2889
- ${R}`}let Z1=T1(G0),l$=C1(G0);return j.set(I,{content:z0,mtime:N.mtimeMs,status:Z1,headers:l$}),{content:z0,status:Z1,headers:l$}}async function L(q){let N=f1.statSync(q),I=`${q}:${N.mtimeMs}`,M=j.get(I);if(M)return M.content;let{content:w}=await T0(q,U);return j.set(I,{content:w,mtime:N.mtimeMs}),w}function O(q){let N=q.startsWith("/")?q.slice(1):q,I=[N,`${N}.stx`,`${N}.md`,`${N}.html`,I0.join(N,"index.stx"),I0.join(N,"index.md"),I0.join(N,"index.html")];for(let M of[_,...U._layerPageDirs??[]])for(let w of I){let D=I0.resolve(M,w);if(!D.startsWith(`${I0.resolve(M)}${I0.sep}`))continue;if(f1.existsSync(D)&&f1.statSync(D).isFile())return D}return null}async function A(q){if(U._layerGraph){let M=await O5($);if(M._layerGraph!==U._layerGraph)Object.assign(U,M),j.clear()}let N=new URL(q.url),I=async()=>{if(J[N.pathname])return await J[N.pathname](q);if(Y){let D=await Y(q);if(D)return D}if(U.apiRouter){let D=await U.apiRouter.handleRequest(q);if(D.status!==404)return D}if(U.apiRoutes?.[N.pathname])return U.apiRoutes[N.pathname](q);let M=await z(q);if(M)return M;let w=O(N.pathname);if(!w||U8(w,F,U.serverApi)){if(W)return await W(q);return new Response("Not Found",{status:404})}try{let D,T="text/html",f,c;if(w.endsWith(".stx")){let v=await H(w);D=v.content,f=v.status,c=v.headers}else if(w.endsWith(".md"))D=await L(w);else if(w.endsWith(".html"))D=await Bun.file(w).text();else if(w.endsWith(".css"))D=await Bun.file(w).text(),T="text/css";else if(w.endsWith(".js"))D=await Bun.file(w).text(),T="text/javascript";else if(w.endsWith(".json"))D=await Bun.file(w).text(),T="application/json";else return new Response(Bun.file(w));return new Response(D,{status:f??200,headers:{"Content-Type":T,...c}})}catch(D){if(K)return await K(D,q);let T=D instanceof Error?D.message:String(D),c=U?.debug===!0?`<h1>Error</h1><pre>${T}
2890
- ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An error occurred while processing your request.</p>";return new Response(c,{status:500,headers:{"Content-Type":"text/html"}})}};for(let M=G.length-1;M>=0;M--){let w=G[M],D=I;I=async()=>await w(q,D)}return await I()}let V=JZ({port:X,fetch:async(q)=>F$(q,await A(q))}),E=null;if(Q)E=f1.watch(_,{recursive:!0},(q,N)=>{if(N&&(N.endsWith(".stx")||N.endsWith(".md")||N.endsWith(".html")))j.clear()});return{server:V,url:V.url.toString(),stop(){if(E)E.close();V.stop()}}}async function m2($,X={}){let Z=I0.resolve($);if(!await Bun.file(Z).exists())throw Error(`File not found: ${Z}`);let Q=Z.endsWith(".md"),Y=Z.endsWith(".stx");if(!Q&&!Y)throw Error(`Unsupported file type: ${Z}. Only .stx and .md files are supported.`);let J=await O5(X);return await GZ({...X,root:I0.dirname(Z),routes:{"/":async()=>{let G,W=200,K;if(Q){let{content:_}=await T0(Z,J);G=_}else{let _=await Bun.file(Z).text(),U=[],F=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,z;while((z=F.exec(_))!==null)if(z[1].includes("server"))U.push(z[2]);let j=U.join(`
2891
- `),H=_.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),L={__stx_options:J};if(j.trim())await M0(j,L,Z);G=await V0(H,L,Z,J,new Set),W=T1(L)??200,K=C1(L)}return new Response(G,{status:W,headers:{"Content-Type":"text/html",...K}})},...X.routes}})}function WZ($){return $}function KZ($){return $}import{existsSync as _Z,readFileSync as UZ}from"fs";var BZ={strict:!1,allowAny:!0,checkPropertyAccess:!0,checkFunctionCalls:!0,includeBuiltins:!0},B8={console:{kind:"object",properties:{log:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},error:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},warn:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}}}},Math:{kind:"object",properties:{abs:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},floor:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},ceil:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},round:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},max:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},min:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},random:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},PI:{kind:"primitive",value:"number"},E:{kind:"primitive",value:"number"}}},JSON:{kind:"object",properties:{stringify:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},parse:{kind:"function",params:[{name:"text",type:{kind:"primitive",value:"string"}}],returnType:{kind:"primitive",value:"any"}}}},Date:{kind:"function",returnType:{kind:"object",properties:{getTime:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},toISOString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}},toLocaleDateString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}}}}},Array:{kind:"object",properties:{isArray:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},from:{kind:"function",params:[{name:"arrayLike",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},Object:{kind:"object",properties:{keys:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"string"}}},values:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}},entries:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},String:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},Number:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"number"}},Boolean:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},props:{kind:"object",properties:{}},slot:{kind:"primitive",value:"string"},loop:{kind:"object",properties:{index:{kind:"primitive",value:"number"},iteration:{kind:"primitive",value:"number"},first:{kind:"primitive",value:"boolean"},last:{kind:"primitive",value:"boolean"},even:{kind:"primitive",value:"boolean"},odd:{kind:"primitive",value:"boolean"},count:{kind:"primitive",value:"number"},remaining:{kind:"primitive",value:"number"},depth:{kind:"primitive",value:"number"},parent:{kind:"object",properties:{}}}}};class L8{options;variables=new Map;errors=[];warnings=[];currentFile="";constructor($={}){if(this.options={...BZ,...$},this.options.includeBuiltins)Object.entries(B8).forEach(([X,Z])=>{this.variables.set(X,Z)});if(this.options.customTypes)Object.entries(this.options.customTypes).forEach(([X,Z])=>{this.variables.set(X,Z)})}checkFile($){if(this.currentFile=$,this.errors=[],this.warnings=[],!_Z($))return this.errors.push({message:`File not found: ${$}`,file:$,line:0,column:0,expression:"",severity:"error"}),this.getResult();let X=UZ($,"utf-8");return this.checkTemplate(X,$)}checkTemplate($,X="<inline>"){this.currentFile=X,this.errors=[],this.warnings=[];let Z=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Z)this.analyzeScript(Z[1],$.indexOf(Z[0]));return this.checkDirectives($),this.checkExpressions($),this.getResult()}analyzeScript($,X){let Z=$.split(`
2901
+ ${R}`}let Z1=T1(G0),i$=C1(G0);return j.set(I,{content:z0,mtime:q.mtimeMs,status:Z1,headers:i$}),{content:z0,status:Z1,headers:i$}}async function L(N){let q=f1.statSync(N),I=`${N}:${q.mtimeMs}`,E=j.get(I);if(E)return E.content;let{content:w}=await T0(N,U);return j.set(I,{content:w,mtime:q.mtimeMs}),w}function O(N){let q=N.startsWith("/")?N.slice(1):N,I=[q,`${q}.stx`,`${q}.md`,`${q}.html`,I0.join(q,"index.stx"),I0.join(q,"index.md"),I0.join(q,"index.html")];for(let E of[_,...U._layerPageDirs??[]])for(let w of I){let D=I0.resolve(E,w);if(!D.startsWith(`${I0.resolve(E)}${I0.sep}`))continue;if(f1.existsSync(D)&&f1.statSync(D).isFile())return D}return null}async function A(N){if(U._layerGraph){let E=await q5($);if(E._layerGraph!==U._layerGraph)Object.assign(U,E),j.clear()}let q=new URL(N.url),I=async()=>{if(J[q.pathname])return await J[q.pathname](N);if(Y){let D=await Y(N);if(D)return D}if(U.apiRouter){let D=await U.apiRouter.handleRequest(N);if(D.status!==404)return D}if(U.apiRoutes?.[q.pathname])return U.apiRoutes[q.pathname](N);let E=await z(N);if(E)return E;let w=O(q.pathname);if(!w||j8(w,F,U.serverApi)){if(W)return await W(N);return new Response("Not Found",{status:404})}try{let D,T="text/html",f,c;if(w.endsWith(".stx")){let v=await H(w);D=v.content,f=v.status,c=v.headers}else if(w.endsWith(".md"))D=await L(w);else if(w.endsWith(".html"))D=await Bun.file(w).text();else if(w.endsWith(".css"))D=await Bun.file(w).text(),T="text/css";else if(w.endsWith(".js"))D=await Bun.file(w).text(),T="text/javascript";else if(w.endsWith(".json"))D=await Bun.file(w).text(),T="application/json";else return new Response(Bun.file(w));return new Response(D,{status:f??200,headers:{"Content-Type":T,...c}})}catch(D){if(K)return await K(D,N);let T=D instanceof Error?D.message:String(D),c=U?.debug===!0?`<h1>Error</h1><pre>${T}
2902
+ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An error occurred while processing your request.</p>";return new Response(c,{status:500,headers:{"Content-Type":"text/html"}})}};for(let E=G.length-1;E>=0;E--){let w=G[E],D=I;I=async()=>await w(N,D)}return await I()}let M=BZ({port:X,fetch:async(N)=>z$(N,await A(N))}),V=null;if(Q)V=f1.watch(_,{recursive:!0},(N,q)=>{if(q&&(q.endsWith(".stx")||q.endsWith(".md")||q.endsWith(".html")))j.clear()});return{server:M,url:M.url.toString(),stop(){if(V)V.close();M.stop()}}}async function s2($,X={}){let Z=I0.resolve($);if(!await Bun.file(Z).exists())throw Error(`File not found: ${Z}`);let Q=Z.endsWith(".md"),Y=Z.endsWith(".stx");if(!Q&&!Y)throw Error(`Unsupported file type: ${Z}. Only .stx and .md files are supported.`);let J=await q5(X);return await LZ({...X,root:I0.dirname(Z),routes:{"/":async()=>{let G,W=200,K;if(Q){let{content:_}=await T0(Z,J);G=_}else{let _=await Bun.file(Z).text(),U=[],F=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,z;while((z=F.exec(_))!==null)if(z[1].includes("server"))U.push(z[2]);let j=U.join(`
2903
+ `),H=_.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),L={__stx_options:J};if(j.trim())await M0(j,L,Z);G=await V0(H,L,Z,J,new Set),W=T1(L)??200,K=C1(L)}return new Response(G,{status:W,headers:{"Content-Type":"text/html",...K}})},...X.routes}})}function FZ($){return $}function zZ($){return $}import{existsSync as jZ,readFileSync as HZ}from"fs";var OZ={strict:!1,allowAny:!0,checkPropertyAccess:!0,checkFunctionCalls:!0,includeBuiltins:!0},H8={console:{kind:"object",properties:{log:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},error:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},warn:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}}}},Math:{kind:"object",properties:{abs:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},floor:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},ceil:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},round:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},max:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},min:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},random:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},PI:{kind:"primitive",value:"number"},E:{kind:"primitive",value:"number"}}},JSON:{kind:"object",properties:{stringify:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},parse:{kind:"function",params:[{name:"text",type:{kind:"primitive",value:"string"}}],returnType:{kind:"primitive",value:"any"}}}},Date:{kind:"function",returnType:{kind:"object",properties:{getTime:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},toISOString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}},toLocaleDateString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}}}}},Array:{kind:"object",properties:{isArray:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},from:{kind:"function",params:[{name:"arrayLike",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},Object:{kind:"object",properties:{keys:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"string"}}},values:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}},entries:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},String:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},Number:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"number"}},Boolean:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},props:{kind:"object",properties:{}},slot:{kind:"primitive",value:"string"},loop:{kind:"object",properties:{index:{kind:"primitive",value:"number"},iteration:{kind:"primitive",value:"number"},first:{kind:"primitive",value:"boolean"},last:{kind:"primitive",value:"boolean"},even:{kind:"primitive",value:"boolean"},odd:{kind:"primitive",value:"boolean"},count:{kind:"primitive",value:"number"},remaining:{kind:"primitive",value:"number"},depth:{kind:"primitive",value:"number"},parent:{kind:"object",properties:{}}}}};class O8{options;variables=new Map;errors=[];warnings=[];currentFile="";constructor($={}){if(this.options={...OZ,...$},this.options.includeBuiltins)Object.entries(H8).forEach(([X,Z])=>{this.variables.set(X,Z)});if(this.options.customTypes)Object.entries(this.options.customTypes).forEach(([X,Z])=>{this.variables.set(X,Z)})}checkFile($){if(this.currentFile=$,this.errors=[],this.warnings=[],!jZ($))return this.errors.push({message:`File not found: ${$}`,file:$,line:0,column:0,expression:"",severity:"error"}),this.getResult();let X=HZ($,"utf-8");return this.checkTemplate(X,$)}checkTemplate($,X="<inline>"){this.currentFile=X,this.errors=[],this.warnings=[];let Z=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Z)this.analyzeScript(Z[1],$.indexOf(Z[0]));return this.checkDirectives($),this.checkExpressions($),this.getResult()}analyzeScript($,X){let Z=$.split(`
2892
2904
  `),Q=this.getLineNumber(X);for(let Y=0;Y<Z.length;Y++){let J=Z[Y],G=Q+Y;this.extractTypedVariables(J,G),this.extractInterfaces(J,Z,Y,G),this.extractTypeAliases(J,G)}}extractTypedVariables($,X){let Z=$.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*:\s*([^=]+?)\s*=/);if(Z){let[,J,G]=Z,W=this.parseTypeAnnotation(G.trim());this.variables.set(J,W);return}let Q=$.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(.+)/);if(Q){let[,J,G]=Q,W=this.inferType(G.trim());this.variables.set(J,W);return}let Y=$.match(/(?:export\s+)?function\s+(\w+)\s*\(([^)]*)\)(?:\s*:\s*(\w+))?/);if(Y){let[,J,G,W]=Y,K=this.parseParams(G),_=W?this.parseTypeAnnotation(W):{kind:"primitive",value:"any"};this.variables.set(J,{kind:"function",params:K,returnType:_})}}extractInterfaces($,X,Z,Q){let Y=$.match(/(?:export\s+)?interface\s+(\w+)\s*\{/);if(Y){let[,J]=Y,G={},W=1,K=Z+1;while(K<X.length&&W>0){let _=X[K].trim();if(_.includes("{"))W++;if(_.includes("}"))W--;let U=_.match(/(\w+)\??\s*:\s*([^;]+)/);if(U&&W>0){let[,F,z]=U;G[F]=this.parseTypeAnnotation(z.trim())}K++}this.variables.set(J,{kind:"object",name:J,properties:G})}}extractTypeAliases($,X){let Z=$.match(/(?:export\s+)?type\s+(\w+)\s*=\s*(.+)/);if(Z){let[,Q,Y]=Z,J=this.parseTypeAnnotation(Y.trim());J.name=Q,this.variables.set(Q,J)}}parseTypeAnnotation($){let X=$.trim();if(X.includes("|"))return{kind:"union",types:X.split("|").map((J)=>this.parseTypeAnnotation(J.trim()))};if(X.includes("&"))return{kind:"intersection",types:X.split("&").map((J)=>this.parseTypeAnnotation(J.trim()))};if(X.endsWith("[]"))return{kind:"array",elementType:this.parseTypeAnnotation(X.slice(0,-2))};let Z=X.match(/^Array<(.+)>$/);if(Z)return{kind:"array",elementType:this.parseTypeAnnotation(Z[1])};if(X.startsWith("{")&&X.endsWith("}")){let Y={},J=X.slice(1,-1).trim();if(J){let G=this.splitByComma(J);for(let W of G){let K=W.match(/(\w+)\??\s*:\s*(.+)/);if(K){let[,_,U]=K;Y[_]=this.parseTypeAnnotation(U.trim())}}}return{kind:"object",properties:Y}}if(X.startsWith('"')||X.startsWith("'"))return{kind:"literal",value:X.slice(1,-1)};if(/^\d+$/.test(X))return{kind:"literal",value:X};if(X==="true"||X==="false")return{kind:"literal",value:X};if(["string","number","boolean","null","undefined","any","unknown","void","never"].includes(X))return{kind:"primitive",value:X};if(this.variables.has(X))return this.variables.get(X);return{kind:"primitive",value:"any"}}inferType($){let X=$.trim().replace(/;$/,"");if(X.startsWith('"')&&X.endsWith('"')||X.startsWith("'")&&X.endsWith("'")||X.startsWith("`")&&X.endsWith("`"))return{kind:"primitive",value:"string"};if(/^-?\d+(\.\d+)?$/.test(X))return{kind:"primitive",value:"number"};if(X==="true"||X==="false")return{kind:"primitive",value:"boolean"};if(X==="null")return{kind:"primitive",value:"null"};if(X==="undefined")return{kind:"primitive",value:"undefined"};if(X.startsWith("[")){let Z=X.slice(1,-1).trim();if(Z){let Q=this.splitByComma(Z)[0];if(Q)return{kind:"array",elementType:this.inferType(Q.trim())}}return{kind:"array",elementType:{kind:"primitive",value:"any"}}}if(X.startsWith("{")){let Z={},Q=this.extractObjectLiteral(X);for(let[Y,J]of Object.entries(Q))Z[Y]=this.inferType(J);return{kind:"object",properties:Z}}if(X.includes("=>")){let Z=X.match(/^\(([^)]*)\)\s*(?::\s*(\w+))?\s*=>/);if(Z){let Q=this.parseParams(Z[1]),Y=Z[2]?this.parseTypeAnnotation(Z[2]):{kind:"primitive",value:"any"};return{kind:"function",params:Q,returnType:Y}}}if(/^\w+$/.test(X)&&this.variables.has(X))return this.variables.get(X);if(X.includes("."))return this.resolvePropertyAccess(X);if(X.includes("(")){let Z=X.split("(")[0],Q=this.variables.get(Z);if(Q?.kind==="function"&&Q.returnType)return Q.returnType}return{kind:"primitive",value:"any"}}parseParams($){if(!$.trim())return[];let X=[],Z=this.splitByComma($);for(let Q of Z){let Y=Q.trim(),J=Y.includes("?"),G=Y.match(/(\w+)\??\s*(?::\s*([^=]+))?(?:\s*=)?/);if(G){let[,W,K]=G,_=K?this.parseTypeAnnotation(K.trim()):{kind:"primitive",value:"any"};X.push({name:W,type:_,optional:J})}}return X}checkExpressions($){let X=/\{\{([\s\S]*?)\}\}/g,Z;while((Z=X.exec($))!==null){let Y=Z[1].trim(),J=Z.index,G=this.getLineNumber(J,$),W=this.getColumn(J,$);if(!Y)continue;if(Y.startsWith("!")||Y.endsWith("!"))continue;this.checkExpression(Y,G,W)}let Q=/\{!!([\s\S]*?)!!\}/g;while((Z=Q.exec($))!==null){let Y=Z[1].trim(),J=Z.index,G=this.getLineNumber(J,$),W=this.getColumn(J,$);if(!Y)continue;this.checkExpression(Y,G,W)}}checkExpression($,X,Z){if($.includes("?")&&$.includes(":")){let J=$.split("?");this.checkExpression(J[0].trim(),X,Z);let G=J.slice(1).join("?").split(":");if(G.length>=2)this.checkExpression(G[0].trim(),X,Z),this.checkExpression(G.slice(1).join(":").trim(),X,Z);return}for(let J of["&&","||","??"])if($.includes(J)){$.split(J).forEach((W)=>this.checkExpression(W.trim(),X,Z));return}for(let J of["===","!==","==","!=",">=","<=",">","<"])if($.includes(J)){$.split(J).forEach((W)=>this.checkExpression(W.trim(),X,Z));return}if($.startsWith("!")){this.checkExpression($.slice(1).trim(),X,Z);return}if(this.isLiteral($))return;let Q=$.match(/^(\w+(?:\.\w+)*)\s*\(/);if(Q){let J=Q[1],G=this.resolvePropertyAccess(J);if(G.kind!=="function"&&G.value!=="any")this.addWarning(`'${J}' is not a function`,X,Z,$);return}if($.includes(".")){if(this.resolvePropertyAccess($).value==="undefined"&&this.options.checkPropertyAccess)this.addWarning(`Property access '${$}' may be undefined`,X,Z,$);return}let Y=$.match(/^\w+/)?.[0];if(Y&&!this.variables.has(Y))this.addError(`Variable '${Y}' is not defined`,X,Z,$)}checkDirectives($){let X=/@if\s*\(([^)]+)\)/g,Z;while((Z=X.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}let Q=/@foreach\s*\((\w+)\s+(?:as|in)\s+(\w+)(?:\s*,\s*(\w+))?\)/g;while((Z=Q.exec($))!==null){let[,G,W,K]=Z,_=Z.index,U=this.getLineNumber(_,$),F=this.getColumn(_,$);if(!this.variables.has(G))this.addError(`Collection '${G}' is not defined`,U,F,Z[0]);else{let z=this.variables.get(G);if(z.kind==="array"&&z.elementType)this.variables.set(W,z.elementType);else this.variables.set(W,{kind:"primitive",value:"any"});if(K)this.variables.set(K,{kind:"primitive",value:"number"})}}let Y=/@unless\s*\(([^)]+)\)/g;while((Z=Y.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}let J=/@switch\s*\(([^)]+)\)/g;while((Z=J.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}}resolvePropertyAccess($){let X=$.split("."),Z=this.variables.get(X[0])||{kind:"primitive",value:"any"};for(let Q=1;Q<X.length;Q++){let Y=X[Q].replace(/\(\)$/,"");if(Z.kind==="object"&&Z.properties)if(Z.properties[Y])Z=Z.properties[Y];else if(!this.options.allowAny)return{kind:"primitive",value:"undefined"};else Z={kind:"primitive",value:"any"};else if(Z.kind==="array"&&Z.elementType)if(["length"].includes(Y))Z={kind:"primitive",value:"number"};else if(["map","filter","find","forEach","some","every","reduce"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"any"}};else if(["join"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"string"}};else Z={kind:"primitive",value:"any"};else if(Z.kind==="primitive"&&Z.value==="string")if(["length"].includes(Y))Z={kind:"primitive",value:"number"};else if(["toUpperCase","toLowerCase","trim","slice","substring"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"string"}};else if(["split"].includes(Y))Z={kind:"function",returnType:{kind:"array",elementType:{kind:"primitive",value:"string"}}};else Z={kind:"primitive",value:"any"};else Z={kind:"primitive",value:"any"}}return Z}isLiteral($){let X=$.trim();if(X.startsWith('"')&&X.endsWith('"')||X.startsWith("'")&&X.endsWith("'")||X.startsWith("`")&&X.endsWith("`"))return!0;if(/^-?\d+(\.\d+)?$/.test(X))return!0;if(X==="true"||X==="false")return!0;if(X==="null"||X==="undefined")return!0;return!1}extractObjectLiteral($){let X={},Z=$.slice(1,-1).trim();if(!Z)return X;let Q=this.splitByComma(Z);for(let Y of Q){let J=Y.indexOf(":");if(J>0){let G=Y.slice(0,J).trim(),W=Y.slice(J+1).trim();X[G]=W}}return X}splitByComma($){let X=[],Z="",Q=0,Y=null;for(let J=0;J<$.length;J++){let G=$[J],W=J>0?$[J-1]:"";if((G==='"'||G==="'"||G==="`")&&W!=="\\"){if(Y===G)Y=null;else if(!Y)Y=G}if(!Y){if(G==="{"||G==="["||G==="(")Q++;if(G==="}"||G==="]"||G===")")Q--;if(G===","&&Q===0){X.push(Z.trim()),Z="";continue}}Z+=G}if(Z.trim())X.push(Z.trim());return X}getLineNumber($,X){return((X||"").slice(0,$).match(/\n/g)||[]).length+1}getColumn($,X){let Q=X.slice(0,$).lastIndexOf(`
2893
- `);return $-Q}addError($,X,Z,Q,Y,J){this.errors.push({message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"error"})}addWarning($,X,Z,Q,Y,J){let G={message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"warning"};if(this.options.strict)this.errors.push(G);else this.warnings.push(G)}getResult(){return{valid:this.errors.length===0,errors:this.errors,warnings:this.warnings,variables:new Map(this.variables)}}addVariable($,X){this.variables.set($,X)}reset(){if(this.errors=[],this.warnings=[],this.variables.clear(),this.options.includeBuiltins)Object.entries(B8).forEach(([$,X])=>{this.variables.set($,X)})}}function F8($){return new L8($)}function l2($,X){return F8(X).checkFile($)}function i2($,X){return F8(X).checkTemplate($)}function a2($){let X=[];for(let Z of $.errors){if(X.push(`\x1B[31merror\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");if(Z.expected&&Z.received)X.push(` expected: ${Z.expected}`),X.push(` received: ${Z.received}`);X.push("")}for(let Z of $.warnings){if(X.push(`\x1B[33mwarning\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");X.push("")}if($.valid)X.push("\x1B[32m\u2713 No type errors found\x1B[0m");else X.push(`\x1B[31m\u2717 Found ${$.errors.length} error(s) and ${$.warnings.length} warning(s)\x1B[0m`);return X.join(`
2894
- `)}var N5=typeof window<"u"&&typeof document<"u";async function q5($,X,Z){if(!N5)return;try{let Q=$.getAttribute("data-island-id"),Y=document.querySelector(`script[data-island-props="${Q}"]`),J=Y?JSON.parse(Y.textContent||"{}"):{},G=await Z(),W=G.default||G.hydrate;if(typeof W!=="function"){console.error(`Island handler for "${X}" does not export a valid hydration function`);return}await W($,J),$.setAttribute("data-hydrated","true")}catch(Q){console.error(`Failed to hydrate island "${X}":`,Q)}}function s2($){if(!N5)return;let X=document.querySelectorAll("[data-island]"),Z=[];if(X.forEach((Q)=>{let Y=Q.getAttribute("data-island"),J=Q.getAttribute("data-priority")||"lazy";if(!Y||!$[Y]||Q.getAttribute("data-hydrated")==="true")return;if(J==="eager")q5(Q,Y,$[Y]);else Z.push([Q,Y])}),Z.length>0&&"IntersectionObserver"in window){let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target,W=G.getAttribute("data-island");if(W&&$[W]&&G.getAttribute("data-hydrated")!=="true")q5(G,W,$[W]),Q.unobserve(G)}})},{rootMargin:"200px",threshold:0});Z.forEach(([Y])=>{Q.observe(Y)})}else setTimeout(()=>{Z.forEach(([Q,Y])=>{if(Q.getAttribute("data-hydrated")!=="true")q5(Q,Y,$[Y])})},1000)}function n2($){if(!N5)return;Object.entries($).forEach(([X,Z])=>{try{let Y=Z.toString().match(/import\(['"](.+)['"]\)/);if(Y&&Y[1]){let J=document.createElement("link");J.rel="modulepreload",J.href=Y[1],J.setAttribute("data-island-module",X),document.head.appendChild(J)}}catch(Q){console.warn(`Failed to preload island handler for "${X}":`,Q)}})}var z1=typeof window<"u"&&typeof document<"u",V5={color:"#6366f1",initialColor:"",height:"3px",duration:2000,throttle:200,autoFinish:!0,zIndex:999999},F0=null,k0=0,h1=!1,M5=null,F1=null,y0=null;function z8($){if(!z1)return null;let X=document.getElementById("stx-loading-indicator");if(X)X.remove();let Z=document.createElement("div");Z.id="stx-loading-indicator";let Q=$.initialColor?`linear-gradient(to right, ${$.initialColor}, ${$.color})`:$.color;Z.style.cssText=`
2905
+ `);return $-Q}addError($,X,Z,Q,Y,J){this.errors.push({message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"error"})}addWarning($,X,Z,Q,Y,J){let G={message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"warning"};if(this.options.strict)this.errors.push(G);else this.warnings.push(G)}getResult(){return{valid:this.errors.length===0,errors:this.errors,warnings:this.warnings,variables:new Map(this.variables)}}addVariable($,X){this.variables.set($,X)}reset(){if(this.errors=[],this.warnings=[],this.variables.clear(),this.options.includeBuiltins)Object.entries(H8).forEach(([$,X])=>{this.variables.set($,X)})}}function A8($){return new O8($)}function o2($,X){return A8(X).checkFile($)}function t2($,X){return A8(X).checkTemplate($)}function e2($){let X=[];for(let Z of $.errors){if(X.push(`\x1B[31merror\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");if(Z.expected&&Z.received)X.push(` expected: ${Z.expected}`),X.push(` received: ${Z.received}`);X.push("")}for(let Z of $.warnings){if(X.push(`\x1B[33mwarning\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");X.push("")}if($.valid)X.push("\x1B[32m\u2713 No type errors found\x1B[0m");else X.push(`\x1B[31m\u2717 Found ${$.errors.length} error(s) and ${$.warnings.length} warning(s)\x1B[0m`);return X.join(`
2906
+ `)}var E5=typeof window<"u"&&typeof document<"u";async function V5($,X,Z){if(!E5)return;try{let Q=$.getAttribute("data-island-id"),Y=document.querySelector(`script[data-island-props="${Q}"]`),J=Y?JSON.parse(Y.textContent||"{}"):{},G=await Z(),W=G.default||G.hydrate;if(typeof W!=="function"){console.error(`Island handler for "${X}" does not export a valid hydration function`);return}await W($,J),$.setAttribute("data-hydrated","true")}catch(Q){console.error(`Failed to hydrate island "${X}":`,Q)}}function XK($){if(!E5)return;let X=document.querySelectorAll("[data-island]"),Z=[];if(X.forEach((Q)=>{let Y=Q.getAttribute("data-island"),J=Q.getAttribute("data-priority")||"lazy";if(!Y||!$[Y]||Q.getAttribute("data-hydrated")==="true")return;if(J==="eager")V5(Q,Y,$[Y]);else Z.push([Q,Y])}),Z.length>0&&"IntersectionObserver"in window){let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target,W=G.getAttribute("data-island");if(W&&$[W]&&G.getAttribute("data-hydrated")!=="true")V5(G,W,$[W]),Q.unobserve(G)}})},{rootMargin:"200px",threshold:0});Z.forEach(([Y])=>{Q.observe(Y)})}else setTimeout(()=>{Z.forEach(([Q,Y])=>{if(Q.getAttribute("data-hydrated")!=="true")V5(Q,Y,$[Y])})},1000)}function ZK($){if(!E5)return;Object.entries($).forEach(([X,Z])=>{try{let Y=Z.toString().match(/import\(['"](.+)['"]\)/);if(Y&&Y[1]){let J=document.createElement("link");J.rel="modulepreload",J.href=Y[1],J.setAttribute("data-island-module",X),document.head.appendChild(J)}}catch(Q){console.warn(`Failed to preload island handler for "${X}":`,Q)}})}var z1=typeof window<"u"&&typeof document<"u",R5={color:"#6366f1",initialColor:"",height:"3px",duration:2000,throttle:200,autoFinish:!0,zIndex:999999},F0=null,k0=0,h1=!1,I5=null,F1=null,y0=null;function N8($){if(!z1)return null;let X=document.getElementById("stx-loading-indicator");if(X)X.remove();let Z=document.createElement("div");Z.id="stx-loading-indicator";let Q=$.initialColor?`linear-gradient(to right, ${$.initialColor}, ${$.color})`:$.color;Z.style.cssText=`
2895
2907
  position: fixed;
2896
2908
  top: 0;
2897
2909
  left: 0;
@@ -2922,7 +2934,7 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
2922
2934
  0% { transform: translateX(-100%); }
2923
2935
  100% { transform: translateX(100%); }
2924
2936
  }
2925
- `,document.head.appendChild(J)}return document.body.appendChild(Z),Z}function q$($,X){if(!z1||!F0)return;if(k0=Math.min(Math.max($,0),100),M5)cancelAnimationFrame(M5);M5=requestAnimationFrame(()=>{if(!F0)return;F0.style.opacity=k0>0?"1":"0",F0.style.transform=`scaleX(${k0/100})`})}function LZ($){if(!z1)return;if(h1=!0,k0=0,!F0)F0=z8($);if(F1)clearTimeout(F1);if(y0)clearInterval(y0);q$(10,$),y0=setInterval(()=>{if(!h1)return;let X=90-k0,Z=Math.max(0.5,X*0.1);if(k0<90)q$(k0+Z,$)},$.throttle)}function FZ($){if(!z1)return;if(h1=!1,y0)clearInterval(y0),y0=null;q$(100,$),F1=setTimeout(()=>{if(F0)F0.style.opacity="0";setTimeout(()=>{if(k0=0,F0)F0.style.transform="scaleX(0)"},300)},200)}function zZ(){if(!z1)return;if(h1=!1,k0=0,y0)clearInterval(y0),y0=null;if(F1)clearTimeout(F1),F1=null;if(F0)F0.style.opacity="0",F0.style.transform="scaleX(0)"}function jZ($){let X={...V5,...$};return{start:()=>LZ(X),set:(Z)=>q$(Z,X),finish:()=>FZ(X),clear:()=>zZ(),get state(){return{isLoading:h1,progress:k0,error:!1}}}}var $1=null;function t2($){if(!z1)return;if($1)$1(),$1=null;let X={...V5,...$},Z=jZ(X);F0=z8(X);let Q=!1,Y=(U)=>{let z=U.target.closest("a");if(!z)return;let j=z.getAttribute("href");if(!j)return;if(j.startsWith("http")||j.startsWith("#")||j.startsWith("mailto:")||j.startsWith("tel:")||z.target==="_blank"||z.hasAttribute("download"))return;Q=!0,Z.start()},J=()=>{if(!Q)Z.start(),Q=!0},G=()=>{if(Q||X.autoFinish)Z.finish(),Q=!1};document.addEventListener("click",Y),window.addEventListener("popstate",J),window.addEventListener("load",G);let W=window.fetch,K=0,_=async function(...U){let F=typeof U[0]==="string"?U[0]:U[0].url,z=F.includes("/api/")||F.startsWith("/api");if(z){if(K++,K===1&&!Q)Z.start()}try{return await W.apply(this,U)}finally{if(z){if(K--,K===0&&!Q)Z.finish()}}};window.fetch=_,$1=()=>{if(document.removeEventListener("click",Y),window.removeEventListener("popstate",J),window.removeEventListener("load",G),window.fetch===_)window.fetch=W}}function e2(){if($1)$1(),$1=null}function $K($){let X={...V5,...$},Z=X.initialColor?`linear-gradient(to right, ${X.initialColor}, ${X.color})`:X.color;return`
2937
+ `,document.head.appendChild(J)}return document.body.appendChild(Z),Z}function q$($,X){if(!z1||!F0)return;if(k0=Math.min(Math.max($,0),100),I5)cancelAnimationFrame(I5);I5=requestAnimationFrame(()=>{if(!F0)return;F0.style.opacity=k0>0?"1":"0",F0.style.transform=`scaleX(${k0/100})`})}function AZ($){if(!z1)return;if(h1=!0,k0=0,!F0)F0=N8($);if(F1)clearTimeout(F1);if(y0)clearInterval(y0);q$(10,$),y0=setInterval(()=>{if(!h1)return;let X=90-k0,Z=Math.max(0.5,X*0.1);if(k0<90)q$(k0+Z,$)},$.throttle)}function NZ($){if(!z1)return;if(h1=!1,y0)clearInterval(y0),y0=null;q$(100,$),F1=setTimeout(()=>{if(F0)F0.style.opacity="0";setTimeout(()=>{if(k0=0,F0)F0.style.transform="scaleX(0)"},300)},200)}function qZ(){if(!z1)return;if(h1=!1,k0=0,y0)clearInterval(y0),y0=null;if(F1)clearTimeout(F1),F1=null;if(F0)F0.style.opacity="0",F0.style.transform="scaleX(0)"}function MZ($){let X={...R5,...$};return{start:()=>AZ(X),set:(Z)=>q$(Z,X),finish:()=>NZ(X),clear:()=>qZ(),get state(){return{isLoading:h1,progress:k0,error:!1}}}}var $1=null;function YK($){if(!z1)return;if($1)$1(),$1=null;let X={...R5,...$},Z=MZ(X);F0=N8(X);let Q=!1,Y=(U)=>{let z=U.target.closest("a");if(!z)return;let j=z.getAttribute("href");if(!j)return;if(j.startsWith("http")||j.startsWith("#")||j.startsWith("mailto:")||j.startsWith("tel:")||z.target==="_blank"||z.hasAttribute("download"))return;Q=!0,Z.start()},J=()=>{if(!Q)Z.start(),Q=!0},G=()=>{if(Q||X.autoFinish)Z.finish(),Q=!1};document.addEventListener("click",Y),window.addEventListener("popstate",J),window.addEventListener("load",G);let W=window.fetch,K=0,_=async function(...U){let F=typeof U[0]==="string"?U[0]:U[0].url,z=F.includes("/api/")||F.startsWith("/api");if(z){if(K++,K===1&&!Q)Z.start()}try{return await W.apply(this,U)}finally{if(z){if(K--,K===0&&!Q)Z.finish()}}};window.fetch=_,$1=()=>{if(document.removeEventListener("click",Y),window.removeEventListener("popstate",J),window.removeEventListener("load",G),window.fetch===_)window.fetch=W}}function JK(){if($1)$1(),$1=null}function GK($){let X={...R5,...$},Z=X.initialColor?`linear-gradient(to right, ${X.initialColor}, ${X.color})`:X.color;return`
2926
2938
  <div id="stx-loading-indicator" style="
2927
2939
  position: fixed;
2928
2940
  top: 0;
@@ -3016,11 +3028,11 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
3016
3028
  window.addEventListener('load', function() { window.stxLoading.finish(); });
3017
3029
  })();
3018
3030
  </script>
3019
- `}function ZK($,X){let Z=[],Q=`${X}=`;for(let Y=0;Y<$.length;Y++){let J=$[Y];if(J.startsWith(Q)){let G=J.slice(Q.length);if(G)Z.push(G);continue}if(J===X){let G=$[Y+1];if(G!==void 0&&!G.startsWith("-"))Z.push(G),Y++}}return Z}class j8{instances=new Map;componentsByFile=new Map;stateSnapshots=new Map;config;constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??this.defaultSerializeState.bind(this),deserializeState:$.deserializeState??this.defaultDeserializeState.bind(this)}}register($){if(this.instances.set($.id,$),!this.componentsByFile.has($.name))this.componentsByFile.set($.name,new Set);if(this.componentsByFile.get($.name).add($.id),this.config.verbose)console.log(`[HMR] Registered component: ${$.name} (${$.id})`)}unregister($){let X=this.instances.get($);if(!X)return;if(this.componentsByFile.get(X.name)?.delete($),this.componentsByFile.get(X.name)?.size===0)this.componentsByFile.delete(X.name);if(this.stateSnapshots.delete($),X.cleanup?.(),this.instances.delete($),this.config.verbose)console.log(`[HMR] Unregistered component: ${X.name} (${$})`)}getInstancesByFile($){let X=this.componentsByFile.get($)||new Set;return Array.from(X).map((Z)=>this.instances.get(Z)).filter(Boolean)}getInstance($){return this.instances.get($)}captureState($){let X=this.instances.get($);if(!X||!this.config.preserveState)return;let Z=this.config.serializeState(X);if(this.stateSnapshots.set($,Z),this.config.verbose)console.log(`[HMR] Captured state for: ${X.name}`)}restoreState($){let X=this.instances.get($),Z=this.stateSnapshots.get($);if(!X||!Z||!this.config.preserveState)return!1;if(Date.now()-Z.timestamp>this.config.maxStateAge){if(this.stateSnapshots.delete($),this.config.verbose)console.log(`[HMR] State expired for: ${X.name}`);return!1}try{if(this.config.deserializeState(Z,X),this.config.verbose)console.log(`[HMR] Restored state for: ${X.name}`);return!0}catch(Q){return console.error(`[HMR] Failed to restore state for ${X.name}:`,Q),!1}}defaultSerializeState($){let X={},Z={};if($.element)$.element.querySelectorAll("[data-stx-ref]").forEach((Y)=>{let J=Y.getAttribute("data-stx-ref"),G=Y.getAttribute("data-stx-value");if(J&&G)try{X[J]=JSON.parse(G)}catch{X[J]=G}});return{refs:X,reactiveObjects:Z,custom:$.state?.custom||{},timestamp:Date.now()}}defaultDeserializeState($,X){if(X.element)Object.entries($.refs).forEach(([Z,Q])=>{let Y=X.element.querySelector(`[data-stx-ref="${Z}"]`);if(Y)Y.setAttribute("data-stx-value",JSON.stringify(Q)),Y.dispatchEvent(new CustomEvent("stx:state-restored",{detail:{name:Z,value:Q},bubbles:!0}))});X.state={...$,timestamp:Date.now()}}getAllInstances(){return Array.from(this.instances.values())}clear(){for(let $ of this.instances.values())$.cleanup?.();this.instances.clear(),this.componentsByFile.clear(),this.stateSnapshots.clear()}}class H8{registry;config;pendingUpdates=new Map;updateQueue=Promise.resolve();constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??(()=>({refs:{},reactiveObjects:{},custom:{},timestamp:Date.now()})),deserializeState:$.deserializeState??(()=>{})},this.registry=new j8(this.config)}register($){this.registry.register($)}unregister($){this.registry.unregister($)}async handleUpdate($){return this.updateQueue=this.updateQueue.then(()=>this.processUpdate($)),this.updateQueue}async processUpdate($){let X=this.registry.getInstancesByFile($.file);if(X.length===0){if(this.config.verbose)console.log(`[HMR] No instances found for: ${$.file}`);return}if(this.config.verbose)console.log(`[HMR] Updating ${X.length} instance(s) of: ${$.file}`);for(let Z of X)await this.updateInstance(Z,$);if(typeof window<"u"&&typeof window.dispatchEvent==="function")window.dispatchEvent(new CustomEvent("stx:hmr-update",{detail:{file:$.file,count:X.length}}))}async updateInstance($,X){this.registry.captureState($.id);let Z=!1,Q=$.element?.innerHTML||"";try{if($.element?.dispatchEvent(new CustomEvent("stx:before-hmr-update",{bubbles:!0})),$.cleanup?.(),X.type==="style")await this.updateStyles($,X);else await this.updateComponent($,X);let Y=this.registry.restoreState($.id);if(!Y&&$.setup)await $.setup();$.element?.dispatchEvent(new CustomEvent("stx:after-hmr-update",{detail:{stateRestored:Y},bubbles:!0}))}catch(Y){if(Z=!0,console.error(`[HMR] Error updating component ${$.name}:`,Y),this.config.errorRecovery){if($.element&&Q)$.element.innerHTML=Q,console.log(`[HMR] Recovered previous state for: ${$.name}`);$.element?.dispatchEvent(new CustomEvent("stx:hmr-error",{detail:{error:Y},bubbles:!0}))}}if(!Z&&this.config.verbose)console.log(`[HMR] Successfully updated: ${$.name}`)}async updateComponent($,X){if(!$.element)return;let{html:Z,script:Q}=this.parseComponentCode(X.code);if(Z)$.element.innerHTML=Z;if(Q)await this.executeScript(Q,$);if($.render)$.element.innerHTML=$.render();this.reinitializeInteractivity($)}async updateStyles($,X){if(!$.element)return;let Z=X.code.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(!Z)return;let Q=Z[1],Y=$.id,J=document.querySelector(`style[data-stx-component="${Y}"]`);if(!J)J=document.createElement("style"),J.setAttribute("data-stx-component",Y),document.head.appendChild(J);if(J.textContent=Q,this.config.verbose)console.log(`[HMR] Updated styles for: ${$.name}`)}parseComponentCode($){let X=$,Z="",Q="",Y=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Y)Z=Y[1],X=X.replace(Y[0],"");let J=$.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(J)Q=J[1],X=X.replace(J[0],"");return{html:X.trim(),script:Z.trim(),style:Q.trim()}}async executeScript($,X){try{let Z={element:X.element,props:X.props,...typeof window<"u"?window.stx:{}},Q=`
3031
+ `}function KK($,X){let Z=[],Q=`${X}=`;for(let Y=0;Y<$.length;Y++){let J=$[Y];if(J.startsWith(Q)){let G=J.slice(Q.length);if(G)Z.push(G);continue}if(J===X){let G=$[Y+1];if(G!==void 0&&!G.startsWith("-"))Z.push(G),Y++}}return Z}class q8{instances=new Map;componentsByFile=new Map;stateSnapshots=new Map;config;constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??this.defaultSerializeState.bind(this),deserializeState:$.deserializeState??this.defaultDeserializeState.bind(this)}}register($){if(this.instances.set($.id,$),!this.componentsByFile.has($.name))this.componentsByFile.set($.name,new Set);if(this.componentsByFile.get($.name).add($.id),this.config.verbose)console.log(`[HMR] Registered component: ${$.name} (${$.id})`)}unregister($){let X=this.instances.get($);if(!X)return;if(this.componentsByFile.get(X.name)?.delete($),this.componentsByFile.get(X.name)?.size===0)this.componentsByFile.delete(X.name);if(this.stateSnapshots.delete($),X.cleanup?.(),this.instances.delete($),this.config.verbose)console.log(`[HMR] Unregistered component: ${X.name} (${$})`)}getInstancesByFile($){let X=this.componentsByFile.get($)||new Set;return Array.from(X).map((Z)=>this.instances.get(Z)).filter(Boolean)}getInstance($){return this.instances.get($)}captureState($){let X=this.instances.get($);if(!X||!this.config.preserveState)return;let Z=this.config.serializeState(X);if(this.stateSnapshots.set($,Z),this.config.verbose)console.log(`[HMR] Captured state for: ${X.name}`)}restoreState($){let X=this.instances.get($),Z=this.stateSnapshots.get($);if(!X||!Z||!this.config.preserveState)return!1;if(Date.now()-Z.timestamp>this.config.maxStateAge){if(this.stateSnapshots.delete($),this.config.verbose)console.log(`[HMR] State expired for: ${X.name}`);return!1}try{if(this.config.deserializeState(Z,X),this.config.verbose)console.log(`[HMR] Restored state for: ${X.name}`);return!0}catch(Q){return console.error(`[HMR] Failed to restore state for ${X.name}:`,Q),!1}}defaultSerializeState($){let X={},Z={};if($.element)$.element.querySelectorAll("[data-stx-ref]").forEach((Y)=>{let J=Y.getAttribute("data-stx-ref"),G=Y.getAttribute("data-stx-value");if(J&&G)try{X[J]=JSON.parse(G)}catch{X[J]=G}});return{refs:X,reactiveObjects:Z,custom:$.state?.custom||{},timestamp:Date.now()}}defaultDeserializeState($,X){if(X.element)Object.entries($.refs).forEach(([Z,Q])=>{let Y=X.element.querySelector(`[data-stx-ref="${Z}"]`);if(Y)Y.setAttribute("data-stx-value",JSON.stringify(Q)),Y.dispatchEvent(new CustomEvent("stx:state-restored",{detail:{name:Z,value:Q},bubbles:!0}))});X.state={...$,timestamp:Date.now()}}getAllInstances(){return Array.from(this.instances.values())}clear(){for(let $ of this.instances.values())$.cleanup?.();this.instances.clear(),this.componentsByFile.clear(),this.stateSnapshots.clear()}}class M8{registry;config;pendingUpdates=new Map;updateQueue=Promise.resolve();constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??(()=>({refs:{},reactiveObjects:{},custom:{},timestamp:Date.now()})),deserializeState:$.deserializeState??(()=>{})},this.registry=new q8(this.config)}register($){this.registry.register($)}unregister($){this.registry.unregister($)}async handleUpdate($){return this.updateQueue=this.updateQueue.then(()=>this.processUpdate($)),this.updateQueue}async processUpdate($){let X=this.registry.getInstancesByFile($.file);if(X.length===0){if(this.config.verbose)console.log(`[HMR] No instances found for: ${$.file}`);return}if(this.config.verbose)console.log(`[HMR] Updating ${X.length} instance(s) of: ${$.file}`);for(let Z of X)await this.updateInstance(Z,$);if(typeof window<"u"&&typeof window.dispatchEvent==="function")window.dispatchEvent(new CustomEvent("stx:hmr-update",{detail:{file:$.file,count:X.length}}))}async updateInstance($,X){this.registry.captureState($.id);let Z=!1,Q=$.element?.innerHTML||"";try{if($.element?.dispatchEvent(new CustomEvent("stx:before-hmr-update",{bubbles:!0})),$.cleanup?.(),X.type==="style")await this.updateStyles($,X);else await this.updateComponent($,X);let Y=this.registry.restoreState($.id);if(!Y&&$.setup)await $.setup();$.element?.dispatchEvent(new CustomEvent("stx:after-hmr-update",{detail:{stateRestored:Y},bubbles:!0}))}catch(Y){if(Z=!0,console.error(`[HMR] Error updating component ${$.name}:`,Y),this.config.errorRecovery){if($.element&&Q)$.element.innerHTML=Q,console.log(`[HMR] Recovered previous state for: ${$.name}`);$.element?.dispatchEvent(new CustomEvent("stx:hmr-error",{detail:{error:Y},bubbles:!0}))}}if(!Z&&this.config.verbose)console.log(`[HMR] Successfully updated: ${$.name}`)}async updateComponent($,X){if(!$.element)return;let{html:Z,script:Q}=this.parseComponentCode(X.code);if(Z)$.element.innerHTML=Z;if(Q)await this.executeScript(Q,$);if($.render)$.element.innerHTML=$.render();this.reinitializeInteractivity($)}async updateStyles($,X){if(!$.element)return;let Z=X.code.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(!Z)return;let Q=Z[1],Y=$.id,J=document.querySelector(`style[data-stx-component="${Y}"]`);if(!J)J=document.createElement("style"),J.setAttribute("data-stx-component",Y),document.head.appendChild(J);if(J.textContent=Q,this.config.verbose)console.log(`[HMR] Updated styles for: ${$.name}`)}parseComponentCode($){let X=$,Z="",Q="",Y=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Y)Z=Y[1],X=X.replace(Y[0],"");let J=$.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(J)Q=J[1],X=X.replace(J[0],"");return{html:X.trim(),script:Z.trim(),style:Q.trim()}}async executeScript($,X){try{let Z={element:X.element,props:X.props,...typeof window<"u"?window.stx:{}},Q=`
3020
3032
  return (async function() {
3021
3033
  ${$}
3022
3034
  })()
3023
- `;await Function(...Object.keys(Z),Q)(...Object.values(Z))}catch(Z){throw console.error("[HMR] Script execution error:",Z),Z}}reinitializeInteractivity($){if(!$.element)return;$.element.querySelectorAll("[data-stx-events]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-events");if(!Q)return;try{let Y=JSON.parse(Q);for(let[J,G]of Object.entries(Y))if(typeof window<"u"&&window.stx?.[G])Z.addEventListener(J,window.stx[G])}catch{}}),$.element.dispatchEvent(new CustomEvent("stx:reinitialize",{bubbles:!0}))}getRegistry(){return this.registry}async refresh($){let X=this.registry.getInstancesByFile($);for(let Z of X)if(Z.render&&Z.element)this.registry.captureState(Z.id),Z.element.innerHTML=Z.render(),this.registry.restoreState(Z.id),this.reinitializeInteractivity(Z)}}function YK($){return`
3035
+ `;await Function(...Object.keys(Z),Q)(...Object.values(Z))}catch(Z){throw console.error("[HMR] Script execution error:",Z),Z}}reinitializeInteractivity($){if(!$.element)return;$.element.querySelectorAll("[data-stx-events]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-events");if(!Q)return;try{let Y=JSON.parse(Q);for(let[J,G]of Object.entries(Y))if(typeof window<"u"&&window.stx?.[G])Z.addEventListener(J,window.stx[G])}catch{}}),$.element.dispatchEvent(new CustomEvent("stx:reinitialize",{bubbles:!0}))}getRegistry(){return this.registry}async refresh($){let X=this.registry.getInstancesByFile($);for(let Z of X)if(Z.render&&Z.element)this.registry.captureState(Z.id),Z.element.innerHTML=Z.render(),this.registry.restoreState(Z.id),this.reinitializeInteractivity(Z)}}function UK($){return`
3024
3036
  <script data-stx-hmr-client>
3025
3037
  (function() {
3026
3038
  'use strict';
@@ -3247,7 +3259,7 @@ else {
3247
3259
  };
3248
3260
  })();
3249
3261
  </script>
3250
- `}function JK($,X,Z,Q){return`
3262
+ `}function BK($,X,Z,Q){return`
3251
3263
  <div data-stx-component="${$}" data-stx-name="${X}">
3252
3264
  ${Z}
3253
3265
  </div>
@@ -3287,8 +3299,8 @@ else {
3287
3299
  observer.observe(document.body, { childList: true, subtree: true });
3288
3300
  })();
3289
3301
  </script>
3290
- `}var j1=null;function GK($){if(!j1)j1=new H8($);return j1}function WK(){if(j1)j1.getRegistry().clear(),j1=null}function HZ($){let X={refs:$.refs||{},reactive:$.reactive||{},props:$.props||{},routeParams:$.routeParams||{},stores:$.stores||{},meta:$.meta||{},timestamp:Date.now()};return X.checksum=A8(X),JSON.stringify(X).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/'/g,"\\u0027")}function A8($){let X=JSON.stringify({refs:Object.keys($.refs||{}),reactive:Object.keys($.reactive||{}),props:Object.keys($.props||{})}),Z=0;for(let Q=0;Q<X.length;Q++){let Y=X.charCodeAt(Q);Z=(Z<<5)-Z+Y,Z=Z&Z}return Math.abs(Z).toString(36)}function OZ($){return`<script id="__STX_STATE__" type="application/json">${HZ($)}</script>`}function UK($){if($.length===0)return"";return`data-stx-events='${JSON.stringify($)}'`}function AZ(){if(typeof window>"u")return null;let $=document.getElementById("__STX_STATE__");if(!$)return null;try{let X=JSON.parse($.textContent||"{}");if(X.checksum){if(A8(X)!==X.checksum)console.warn("[Hydration] State checksum mismatch - state may be corrupted")}return X}catch(X){return console.error("[Hydration] Failed to parse state:",X),null}}class q8{state=null;options;root=null;isHydrated=!1;pendingComponents=new Map;hydratedComponents=new Set;constructor($={}){this.options={root:$.root||"#app",strict:$.strict??!1,onHydrating:$.onHydrating||(()=>{}),onHydrated:$.onHydrated||(()=>{}),onError:$.onError||console.error,performance:$.performance??!1,timeout:$.timeout??1e4}}async hydrate(){if(typeof window>"u")return;if(this.isHydrated)return;let $=this.options.performance?performance.now():0;try{this.root=typeof this.options.root==="string"?document.querySelector(this.options.root)||document.body:this.options.root,this.state=AZ(),this.options.onHydrating(),this.root.classList.add("stx-hydrating");let X=new Promise((Z,Q)=>{setTimeout(()=>Q(Error("Hydration timeout")),this.options.timeout)});if(await Promise.race([this.runHydration(),X]),this.isHydrated=!0,this.root.classList.remove("stx-hydrating"),this.root.classList.add("stx-hydrated"),this.options.performance){let Z=performance.now()-$;console.log(`[Hydration] Completed in ${Z.toFixed(2)}ms`)}this.options.onHydrated(),window.dispatchEvent(new CustomEvent("stx:hydrated"))}catch(X){this.root?.classList.remove("stx-hydrating"),this.root?.classList.add("stx-hydration-error"),this.options.onError(X),window.dispatchEvent(new CustomEvent("stx:hydration-error",{detail:{error:X}}))}}async runHydration(){if(!this.root)return;this.restoreGlobalState(),await this.hydrateComponents(),this.bindEventHandlers(),this.initializeReactiveBindings(),this.setupRouterIntegration()}restoreGlobalState(){if(!this.state)return;let $=window.stx;if(!$)return;if(this.state.routeParams&&$.setRouteParams)$.setRouteParams(this.state.routeParams);if(this.state.stores&&$.registerStore)Object.entries(this.state.stores).forEach(([X,Z])=>{$.registerStore(X,Z)});window.dispatchEvent(new CustomEvent("stx:state-restored",{detail:this.state}))}async hydrateComponents(){if(!this.root)return;let $=this.root.querySelectorAll("[data-stx-component]");for(let X of Array.from($)){let Z=X.getAttribute("data-stx-component"),Q=X.getAttribute("data-stx-name")||Z,Y=X.getAttribute("data-stx-hydrate")||"eager",J=X.getAttribute("data-stx-props");if(!Z)continue;let G={id:Z,name:Q||Z,strategy:Y,props:J?JSON.parse(J):{},events:[]};switch(this.pendingComponents.set(Z,G),G.strategy){case"eager":await this.hydrateComponent(X,G);break;case"lazy":case"visible":this.setupVisibleHydration(X,G);break;case"idle":this.setupIdleHydration(X,G);break;case"interaction":this.setupInteractionHydration(X,G);break}}}async hydrateComponent($,X){if(this.hydratedComponents.has(X.id))return;try{let Z=this.state?.refs[X.id]||this.state?.reactive[X.id]||{};this.restoreComponentState($,Z),this.bindComponentEvents($),this.initializeComponentReactivity($,X),this.hydratedComponents.add(X.id),$.classList.add("stx-hydrated"),$.setAttribute("data-hydrated","true"),$.dispatchEvent(new CustomEvent("stx:component-hydrated",{detail:{id:X.id,name:X.name},bubbles:!0}))}catch(Z){if(console.error(`[Hydration] Failed to hydrate component ${X.id}:`,Z),$.classList.add("stx-hydration-error"),this.options.strict)throw Z}}restoreComponentState($,X){if(!X||typeof X!=="object")return;$.querySelectorAll("[data-stx-bind]").forEach((Q)=>{let Y=Q.getAttribute("data-stx-bind");if(!Y||!X[Y])return;let J=X[Y];if(Q instanceof HTMLInputElement)if(Q.type==="checkbox"||Q.type==="radio")Q.checked=Boolean(J);else Q.value=String(J);else if(Q instanceof HTMLSelectElement)Q.value=String(J);else if(Q instanceof HTMLTextAreaElement)Q.value=String(J);else Q.textContent=String(J)})}setupVisibleHydration($,X){if(!("IntersectionObserver"in window)){this.hydrateComponent($,X);return}let Z=new IntersectionObserver((Q)=>{Q.forEach((Y)=>{if(Y.isIntersecting)Z.disconnect(),this.hydrateComponent($,X)})},{rootMargin:"100px",threshold:0});Z.observe($)}setupIdleHydration($,X){let Z=()=>this.hydrateComponent($,X);if("requestIdleCallback"in window)window.requestIdleCallback(Z,{timeout:2000});else setTimeout(Z,200)}setupInteractionHydration($,X){let Z=["mouseenter","touchstart","focusin"],Q=()=>{Z.forEach((Y)=>$.removeEventListener(Y,Q)),this.hydrateComponent($,X)};Z.forEach((Y)=>{$.addEventListener(Y,Q,{once:!0,passive:!0})})}bindEventHandlers(){if(!this.root)return;this.root.querySelectorAll("[data-stx-events]").forEach((X)=>this.bindElementEvents(X)),this.bindDirectiveEvents()}bindElementEvents($){let X=$.getAttribute("data-stx-events");if(!X)return;try{JSON.parse(X).forEach((Q)=>{this.bindSingleEvent($,Q)})}catch(Z){console.error("[Hydration] Failed to parse events:",Z)}}bindDirectiveEvents(){if(!this.root)return;["click","submit","input","change","focus","blur","keydown","keyup","keypress","mouseenter","mouseleave","touchstart","touchend","scroll","resize"].forEach((X)=>{let Z=`data-stx-on-${X}`;this.root.querySelectorAll(`[${Z}]`).forEach((Y)=>{let J=Y.getAttribute(Z);if(!J)return;this.bindSingleEvent(Y,{type:X,handler:J,modifiers:this.parseModifiers(Y,X)})})})}parseModifiers($,X){let Z=[],Q=$.getAttribute(`data-stx-${X}-modifiers`);if(Q)Z.push(...Q.split(",").map((Y)=>Y.trim()));return Z}bindSingleEvent($,X){let Z=this.resolveHandler(X.handler);if(!Z){console.warn(`[Hydration] Handler not found: ${X.handler}`);return}let Q=(G)=>{if(X.modifiers?.includes("prevent")||X.preventDefault)G.preventDefault();if(X.modifiers?.includes("stop")||X.stopPropagation)G.stopPropagation();try{Z.call($,G)}catch(W){console.error("[Hydration] Event handler error:",W)}},Y={};if(X.modifiers?.includes("once"))Y.once=!0;let J=X.modifiers??[];if(O8(X.type,{passive:J.includes("passive"),prevent:J.includes("prevent")||X.preventDefault,nonpassive:J.includes("nonpassive")}))Y.passive=!0;if(X.modifiers?.includes("capture"))Y.capture=!0;$.addEventListener(X.type,Q,Y)}resolveHandler($){let X=window.stx;if(X&&X[$])return X[$];if(window[$])return window[$];try{if($.match(/^\w+\+\+$/)||$.match(/^\w+--$/)){let Y=$.replace(/[+-]+$/,"");return()=>{if(X&&X[Y]){if(typeof X[Y].value<"u")if($.includes("++"))X[Y].value++;else X[Y].value--}}}let Z=$.match(/^(\w+)\s*=\s*(.+)$/);if(Z){let[,Y,J]=Z;return()=>{if(X&&X[Y]){let G=Function(`return ${J}`)();if(typeof X[Y].value<"u")X[Y].value=G}}}let Q=$.match(/^(\w+)\((.*)\)$/);if(Q){let[,Y,J]=Q;return(G)=>{let W=X?.[Y]||window[Y];if(W){let K=J?Function("$event",`return [${J}]`)(G):[];W(...K)}}}return(Y)=>{Function("$event","stx",$)(Y,X)}}catch{return null}}bindComponentEvents($){$.querySelectorAll("[data-stx-events]").forEach((Z)=>{this.bindElementEvents(Z)})}initializeComponentReactivity($,X){if(!window.stx)return;$.querySelectorAll("[data-stx-reactive]").forEach((Y)=>{let J=Y.getAttribute("data-stx-reactive");if(!J)return;this.setupReactiveBinding(Y,J)})}initializeReactiveBindings(){if(!this.root)return;this.getTextNodesWithExpressions(this.root).forEach(({node:Z,expressions:Q})=>{Q.forEach((Y)=>{this.setupTextNodeBinding(Z,Y)})}),this.root.querySelectorAll("[data-stx-bind-attrs]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-bind-attrs");if(!Q)return;try{let Y=JSON.parse(Q);Object.entries(Y).forEach(([J,G])=>{this.setupAttributeBinding(Z,J,G)})}catch{}})}getTextNodesWithExpressions($){let X=[],Z=document.createTreeWalker($,NodeFilter.SHOW_TEXT),Q;while(Q=Z.nextNode()){let J=(Q.textContent||"").match(/\{\{\s*([^}]+)\s*\}\}/g);if(J)X.push({node:Q,expressions:J.map((G)=>G.replace(/\{\{\s*|\s*\}\}/g,""))})}return X}setupTextNodeBinding($,X){let Z=window.stx;if(!Z)return;let Q=$.textContent||"",Y=()=>{try{let G=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=Q.replace(new RegExp(`\\{\\{\\s*${X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*\\}\\}`),String(G))}catch{}};Y();let J=X.match(/^(\w+)(\.value)?$/);if(J&&Z[J[1]]?.subscribe)Z[J[1]].subscribe(Y)}setupAttributeBinding($,X,Z){let Q=window.stx;if(!Q)return;let Y=()=>{try{let G=Function("stx",`with(stx) { return ${Z} }`)(Q);if(typeof G==="boolean")if(G)$.setAttribute(X,"");else $.removeAttribute(X);else $.setAttribute(X,String(G))}catch{}};Y();let J=Z.match(/^(\w+)(\.value)?$/);if(J&&Q[J[1]]?.subscribe)Q[J[1]].subscribe(Y)}setupReactiveBinding($,X){let Z=window.stx;if(!Z)return;let Q=()=>{try{let J=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=String(J)}catch{}};Q();let Y=X.match(/^(\w+)(\.value)?$/);if(Y&&Z[Y[1]]?.subscribe)Z[Y[1]].subscribe(Q)}setupRouterIntegration(){window.addEventListener("stx:navigate",($)=>{let{url:X}=$.detail||{};if(X){if(window.stx?.setRouteParams){let Q=new URL(X,window.location.origin)}}}),window.addEventListener("stx:load",()=>{this.hydrateComponents(),this.bindEventHandlers()})}get hydrated(){return this.isHydrated}getState(){return this.state}async hydrateById($){let X=this.pendingComponents.get($),Z=document.querySelector(`[data-stx-component="${$}"]`);if(X&&Z)await this.hydrateComponent(Z,X)}}function BK($){return`
3291
- ${$?OZ($):""}
3302
+ `}var j1=null;function LK($){if(!j1)j1=new M8($);return j1}function FK(){if(j1)j1.getRegistry().clear(),j1=null}function VZ($){let X={refs:$.refs||{},reactive:$.reactive||{},props:$.props||{},routeParams:$.routeParams||{},stores:$.stores||{},meta:$.meta||{},timestamp:Date.now()};return X.checksum=E8(X),JSON.stringify(X).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/'/g,"\\u0027")}function E8($){let X=JSON.stringify({refs:Object.keys($.refs||{}),reactive:Object.keys($.reactive||{}),props:Object.keys($.props||{})}),Z=0;for(let Q=0;Q<X.length;Q++){let Y=X.charCodeAt(Q);Z=(Z<<5)-Z+Y,Z=Z&Z}return Math.abs(Z).toString(36)}function EZ($){return`<script id="__STX_STATE__" type="application/json">${VZ($)}</script>`}function HK($){if($.length===0)return"";return`data-stx-events='${JSON.stringify($)}'`}function IZ(){if(typeof window>"u")return null;let $=document.getElementById("__STX_STATE__");if(!$)return null;try{let X=JSON.parse($.textContent||"{}");if(X.checksum){if(E8(X)!==X.checksum)console.warn("[Hydration] State checksum mismatch - state may be corrupted")}return X}catch(X){return console.error("[Hydration] Failed to parse state:",X),null}}class I8{state=null;options;root=null;isHydrated=!1;pendingComponents=new Map;hydratedComponents=new Set;constructor($={}){this.options={root:$.root||"#app",strict:$.strict??!1,onHydrating:$.onHydrating||(()=>{}),onHydrated:$.onHydrated||(()=>{}),onError:$.onError||console.error,performance:$.performance??!1,timeout:$.timeout??1e4}}async hydrate(){if(typeof window>"u")return;if(this.isHydrated)return;let $=this.options.performance?performance.now():0;try{this.root=typeof this.options.root==="string"?document.querySelector(this.options.root)||document.body:this.options.root,this.state=IZ(),this.options.onHydrating(),this.root.classList.add("stx-hydrating");let X=new Promise((Z,Q)=>{setTimeout(()=>Q(Error("Hydration timeout")),this.options.timeout)});if(await Promise.race([this.runHydration(),X]),this.isHydrated=!0,this.root.classList.remove("stx-hydrating"),this.root.classList.add("stx-hydrated"),this.options.performance){let Z=performance.now()-$;console.log(`[Hydration] Completed in ${Z.toFixed(2)}ms`)}this.options.onHydrated(),window.dispatchEvent(new CustomEvent("stx:hydrated"))}catch(X){this.root?.classList.remove("stx-hydrating"),this.root?.classList.add("stx-hydration-error"),this.options.onError(X),window.dispatchEvent(new CustomEvent("stx:hydration-error",{detail:{error:X}}))}}async runHydration(){if(!this.root)return;this.restoreGlobalState(),await this.hydrateComponents(),this.bindEventHandlers(),this.initializeReactiveBindings(),this.setupRouterIntegration()}restoreGlobalState(){if(!this.state)return;let $=window.stx;if(!$)return;if(this.state.routeParams&&$.setRouteParams)$.setRouteParams(this.state.routeParams);if(this.state.stores&&$.registerStore)Object.entries(this.state.stores).forEach(([X,Z])=>{$.registerStore(X,Z)});window.dispatchEvent(new CustomEvent("stx:state-restored",{detail:this.state}))}async hydrateComponents(){if(!this.root)return;let $=this.root.querySelectorAll("[data-stx-component]");for(let X of Array.from($)){let Z=X.getAttribute("data-stx-component"),Q=X.getAttribute("data-stx-name")||Z,Y=X.getAttribute("data-stx-hydrate")||"eager",J=X.getAttribute("data-stx-props");if(!Z)continue;let G={id:Z,name:Q||Z,strategy:Y,props:J?JSON.parse(J):{},events:[]};switch(this.pendingComponents.set(Z,G),G.strategy){case"eager":await this.hydrateComponent(X,G);break;case"lazy":case"visible":this.setupVisibleHydration(X,G);break;case"idle":this.setupIdleHydration(X,G);break;case"interaction":this.setupInteractionHydration(X,G);break}}}async hydrateComponent($,X){if(this.hydratedComponents.has(X.id))return;try{let Z=this.state?.refs[X.id]||this.state?.reactive[X.id]||{};this.restoreComponentState($,Z),this.bindComponentEvents($),this.initializeComponentReactivity($,X),this.hydratedComponents.add(X.id),$.classList.add("stx-hydrated"),$.setAttribute("data-hydrated","true"),$.dispatchEvent(new CustomEvent("stx:component-hydrated",{detail:{id:X.id,name:X.name},bubbles:!0}))}catch(Z){if(console.error(`[Hydration] Failed to hydrate component ${X.id}:`,Z),$.classList.add("stx-hydration-error"),this.options.strict)throw Z}}restoreComponentState($,X){if(!X||typeof X!=="object")return;$.querySelectorAll("[data-stx-bind]").forEach((Q)=>{let Y=Q.getAttribute("data-stx-bind");if(!Y||!X[Y])return;let J=X[Y];if(Q instanceof HTMLInputElement)if(Q.type==="checkbox"||Q.type==="radio")Q.checked=Boolean(J);else Q.value=String(J);else if(Q instanceof HTMLSelectElement)Q.value=String(J);else if(Q instanceof HTMLTextAreaElement)Q.value=String(J);else Q.textContent=String(J)})}setupVisibleHydration($,X){if(!("IntersectionObserver"in window)){this.hydrateComponent($,X);return}let Z=new IntersectionObserver((Q)=>{Q.forEach((Y)=>{if(Y.isIntersecting)Z.disconnect(),this.hydrateComponent($,X)})},{rootMargin:"100px",threshold:0});Z.observe($)}setupIdleHydration($,X){let Z=()=>this.hydrateComponent($,X);if("requestIdleCallback"in window)window.requestIdleCallback(Z,{timeout:2000});else setTimeout(Z,200)}setupInteractionHydration($,X){let Z=["mouseenter","touchstart","focusin"],Q=()=>{Z.forEach((Y)=>$.removeEventListener(Y,Q)),this.hydrateComponent($,X)};Z.forEach((Y)=>{$.addEventListener(Y,Q,{once:!0,passive:!0})})}bindEventHandlers(){if(!this.root)return;this.root.querySelectorAll("[data-stx-events]").forEach((X)=>this.bindElementEvents(X)),this.bindDirectiveEvents()}bindElementEvents($){let X=$.getAttribute("data-stx-events");if(!X)return;try{JSON.parse(X).forEach((Q)=>{this.bindSingleEvent($,Q)})}catch(Z){console.error("[Hydration] Failed to parse events:",Z)}}bindDirectiveEvents(){if(!this.root)return;["click","submit","input","change","focus","blur","keydown","keyup","keypress","mouseenter","mouseleave","touchstart","touchend","scroll","resize"].forEach((X)=>{let Z=`data-stx-on-${X}`;this.root.querySelectorAll(`[${Z}]`).forEach((Y)=>{let J=Y.getAttribute(Z);if(!J)return;this.bindSingleEvent(Y,{type:X,handler:J,modifiers:this.parseModifiers(Y,X)})})})}parseModifiers($,X){let Z=[],Q=$.getAttribute(`data-stx-${X}-modifiers`);if(Q)Z.push(...Q.split(",").map((Y)=>Y.trim()));return Z}bindSingleEvent($,X){let Z=this.resolveHandler(X.handler);if(!Z){console.warn(`[Hydration] Handler not found: ${X.handler}`);return}let Q=(G)=>{if(X.modifiers?.includes("prevent")||X.preventDefault)G.preventDefault();if(X.modifiers?.includes("stop")||X.stopPropagation)G.stopPropagation();try{Z.call($,G)}catch(W){console.error("[Hydration] Event handler error:",W)}},Y={};if(X.modifiers?.includes("once"))Y.once=!0;let J=X.modifiers??[];if(V8(X.type,{passive:J.includes("passive"),prevent:J.includes("prevent")||X.preventDefault,nonpassive:J.includes("nonpassive")}))Y.passive=!0;if(X.modifiers?.includes("capture"))Y.capture=!0;$.addEventListener(X.type,Q,Y)}resolveHandler($){let X=window.stx;if(X&&X[$])return X[$];if(window[$])return window[$];try{if($.match(/^\w+\+\+$/)||$.match(/^\w+--$/)){let Y=$.replace(/[+-]+$/,"");return()=>{if(X&&X[Y]){if(typeof X[Y].value<"u")if($.includes("++"))X[Y].value++;else X[Y].value--}}}let Z=$.match(/^(\w+)\s*=\s*(.+)$/);if(Z){let[,Y,J]=Z;return()=>{if(X&&X[Y]){let G=Function(`return ${J}`)();if(typeof X[Y].value<"u")X[Y].value=G}}}let Q=$.match(/^(\w+)\((.*)\)$/);if(Q){let[,Y,J]=Q;return(G)=>{let W=X?.[Y]||window[Y];if(W){let K=J?Function("$event",`return [${J}]`)(G):[];W(...K)}}}return(Y)=>{Function("$event","stx",$)(Y,X)}}catch{return null}}bindComponentEvents($){$.querySelectorAll("[data-stx-events]").forEach((Z)=>{this.bindElementEvents(Z)})}initializeComponentReactivity($,X){if(!window.stx)return;$.querySelectorAll("[data-stx-reactive]").forEach((Y)=>{let J=Y.getAttribute("data-stx-reactive");if(!J)return;this.setupReactiveBinding(Y,J)})}initializeReactiveBindings(){if(!this.root)return;this.getTextNodesWithExpressions(this.root).forEach(({node:Z,expressions:Q})=>{Q.forEach((Y)=>{this.setupTextNodeBinding(Z,Y)})}),this.root.querySelectorAll("[data-stx-bind-attrs]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-bind-attrs");if(!Q)return;try{let Y=JSON.parse(Q);Object.entries(Y).forEach(([J,G])=>{this.setupAttributeBinding(Z,J,G)})}catch{}})}getTextNodesWithExpressions($){let X=[],Z=document.createTreeWalker($,NodeFilter.SHOW_TEXT),Q;while(Q=Z.nextNode()){let J=(Q.textContent||"").match(/\{\{\s*([^}]+)\s*\}\}/g);if(J)X.push({node:Q,expressions:J.map((G)=>G.replace(/\{\{\s*|\s*\}\}/g,""))})}return X}setupTextNodeBinding($,X){let Z=window.stx;if(!Z)return;let Q=$.textContent||"",Y=()=>{try{let G=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=Q.replace(new RegExp(`\\{\\{\\s*${X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*\\}\\}`),String(G))}catch{}};Y();let J=X.match(/^(\w+)(\.value)?$/);if(J&&Z[J[1]]?.subscribe)Z[J[1]].subscribe(Y)}setupAttributeBinding($,X,Z){let Q=window.stx;if(!Q)return;let Y=()=>{try{let G=Function("stx",`with(stx) { return ${Z} }`)(Q);if(typeof G==="boolean")if(G)$.setAttribute(X,"");else $.removeAttribute(X);else $.setAttribute(X,String(G))}catch{}};Y();let J=Z.match(/^(\w+)(\.value)?$/);if(J&&Q[J[1]]?.subscribe)Q[J[1]].subscribe(Y)}setupReactiveBinding($,X){let Z=window.stx;if(!Z)return;let Q=()=>{try{let J=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=String(J)}catch{}};Q();let Y=X.match(/^(\w+)(\.value)?$/);if(Y&&Z[Y[1]]?.subscribe)Z[Y[1]].subscribe(Q)}setupRouterIntegration(){window.addEventListener("stx:navigate",($)=>{let{url:X}=$.detail||{};if(X){if(window.stx?.setRouteParams){let Q=new URL(X,window.location.origin)}}}),window.addEventListener("stx:load",()=>{this.hydrateComponents(),this.bindEventHandlers()})}get hydrated(){return this.isHydrated}getState(){return this.state}async hydrateById($){let X=this.pendingComponents.get($),Z=document.querySelector(`[data-stx-component="${$}"]`);if(X&&Z)await this.hydrateComponent(Z,X)}}function OK($){return`
3303
+ ${$?EZ($):""}
3292
3304
  <script data-stx-hydration-runtime>
3293
3305
  (function() {
3294
3306
  'use strict';
@@ -3385,7 +3397,7 @@ else {
3385
3397
  }
3386
3398
  })();
3387
3399
  </script>
3388
- `}var E5=null;function qZ($){if(!E5)E5=new q8($);return E5}async function LK($){await qZ($).hydrate()}function FK(){return`
3400
+ `}var D5=null;function RZ($){if(!D5)D5=new I8($);return D5}async function AK($){await RZ($).hydrate()}function NK(){return`
3389
3401
  <style data-stx-hydration-styles>
3390
3402
  /* Pre-hydration state */
3391
3403
  [data-stx-component]:not(.stx-hydrated) {
@@ -3418,9 +3430,9 @@ else {
3418
3430
  }
3419
3431
  }
3420
3432
  </style>
3421
- `}import N8 from"path";V6();class NZ{store=new Map;async get($){let X=this.store.get($);if(!X||X.expires<=Date.now()){if(X)this.store.delete($);return null}return{...X.data}}async set($,X,Z){this.store.set($,{data:{...X},expires:Date.now()+Z*1000})}async delete($){this.store.delete($)}}function MZ($,X){for(let Z of $.getSetCookie())X.append("Set-Cookie",Z);$.forEach((Z,Q)=>{if(Q.toLowerCase()!=="set-cookie")X.set(Q,Z)})}async function VK($,X={},Z={}){let Q=Z.viewsDir||"./views",Y=Z.layoutsDir||"./layouts",J=!$.includes("<")&&!$.includes("@"),G,W;if(J){if(W=N8.resolve(Q,$),!W.endsWith(".stx"))W+=".stx";if(!await Bun.file(W).exists())return new Response(`Template not found: ${$}`,{status:500});G=await Bun.file(W).text()}else G=$,W="inline-template.stx";let K={...X,props:X,__filename:W,__dirname:N8.dirname(W)};if(Z.ctx)K.csrf_token=Z.ctx.csrfToken,K.csrf_field=`<input type="hidden" name="_token" value="${Z.ctx.csrfToken}">`,K.old=Z.ctx.old,K.errors=Z.ctx.errors,K.session=Z.ctx.session,K.user=Z.ctx.user(),K.isAuthenticated=Z.ctx.isAuthenticated();let _=G.match(/<script\s+server\b[^>]*>([\s\S]*?)<\/script>/i);if(_){let H=_[1];G=G.replace(/<script\s+server\b[^>]*>[\s\S]*?<\/script>/gi,""),await M0(H,K,W)}let U={layoutsDir:Y,...Z.stxOptions},z=await V0(G,K,W,U,new Set),j=new Headers({"Content-Type":"text/html; charset=utf-8"});if(Z.ctx)MZ(Z.ctx.responseHeaders,j);return new Response(z,{headers:j})}var d1={stores:new Map,subscriptions:new Map};function VZ($,X){d1.stores.set($,X)}function V8($){return d1.stores.get($)}function EZ($){return d1.stores.has($)}function IZ(){return Array.from(d1.stores.keys())}var H1=new Map;function M8($){if($==="memory")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};if(typeof window>"u")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};return $==="local"?window.localStorage:window.sessionStorage}function RZ($,X){let Z={};for(let Q of X){let Y=Q.split("."),J=$,G=Z,W=!0;for(let K=0;K<Y.length-1;K++){let _=Y[K];if(J&&typeof J==="object"&&_ in J){if(J=J[_],!(_ in G))G[_]={};G=G[_]}else{W=!1;break}}if(W&&J&&typeof J==="object"){let K=Y[Y.length-1];if(K in J)G[K]=J[K]}}return Z}function E8($,X={}){let{name:Z,persist:Q,devtools:Y=!1,middleware:J=[],equals:G=(O,A)=>O===A}=X,W=$,K=new Set,_=null;if(Q){let O=M8(Q.storage||"local"),A=Q.key||`stx-store:${Z||"unnamed"}`,V=Q.deserialize||JSON.parse;try{let E=O.getItem(A);if(E){let q=V(E);if(Q.paths&&typeof q==="object"&&q!==null)W={...$,...q};else W=q}}catch{}}let U=(O)=>{if(!Q)return;let A=M8(Q.storage||"local"),V=Q.key||`stx-store:${Z||"unnamed"}`,E=Q.serialize||JSON.stringify,q=Q.paths&&typeof O==="object"&&O!==null?RZ(O,Q.paths):O;if(Q.debounce){if(_)clearTimeout(_);_=setTimeout(()=>{A.setItem(V,E(q))},Q.debounce)}else A.setItem(V,E(q))},F=(O,A)=>{for(let V of K)try{V(O,A)}catch(E){console.error("[stx-store] Subscriber error:",E)}},z=Y?(O,A)=>{if(i6(Z||"unnamed",O,W,A),typeof window<"u")window.__STX_DEVTOOLS__?.onStoreChange?.(Z||"unnamed",O,A)}:()=>{},j=(O)=>{let A=W;if(!G(O,A))W=O,U(O),F(O,A),z("set",O)},H=j,L={get:()=>W,set:(O)=>{if(typeof O==="function")H(O(W));else H(O)},subscribe:(O)=>{return K.add(O),()=>{K.delete(O)}},update:(O)=>{if(typeof W!=="object"||W===null)throw Error("update() can only be used with object stores");let A=typeof O==="function"?O(W):O;L.set({...W,...A})},reset:()=>{L.set($),z("reset",$)},name:Z,destroy:()=>{if(K.clear(),_)clearTimeout(_);if(Z)d1.stores.delete(Z)}};for(let O of J.reverse())H=O(j,()=>W,L)(H);if(Z){if(VZ(Z,L),Y)l6(Z,W??{},{},[])}return L}function DZ($){let X=typeof $==="string"?V8($):$;if(!X)throw Error(`Store "${$}" not found`);return X.get()}function wZ($,X,Z){if(typeof X==="function"){if(typeof window<"u"&&window.stx?.defineStore)return window.stx.defineStore($,X,Z);return X()}let Q=X,{state:Y,getters:J={},actions:G={},persist:W,devtools:K=!0}=Q,_=typeof Y==="function"?Y():Y,U=W===!0?{storage:"local",key:`stx-store:${$}`}:W||void 0,F=E8(_,{name:$,persist:U,devtools:K}),z=new Proxy({},{get(j,H){let L=String(H);if(L==="$state")return F.get();if(L==="$subscribe")return F.subscribe;if(L==="$reset")return F.reset;if(L==="$patch")return(A)=>{if(typeof A==="function"){let E={...F.get()};A(E),F.set(E)}else F.update(A)};if(L==="_store")return F;if(L==="$id")return $;if(L in J)return J[L](F.get());if(L in G)return(...A)=>{return G[L].apply(z,A)};let O=F.get();if(O&&typeof O==="object"&&L in O)return O[L];return},set(j,H,L){let O=String(H);if(O.startsWith("$")||O==="_store")return!1;let A=F.get();if(A&&typeof A==="object")return F.set({...A,[O]:L}),!0;return!1},has(j,H){let L=String(H),O=F.get();return L.startsWith("$")||L==="_store"||L in J||L in G||O&&typeof O==="object"&&L in O},ownKeys(){let j=F.get();return[...j&&typeof j==="object"?Object.keys(j):[],...Object.keys(J),...Object.keys(G),"$state","$subscribe","$reset","$patch","$id"]},getOwnPropertyDescriptor(j,H){return{enumerable:!0,configurable:!0,get:()=>this.get(j,H,z)}}});return TZ.set($,z),z}var TZ=new Map;function CZ($){if(typeof window>"u")return;let X=window;X.__STX_STORES__=X.__STX_STORES__||{};for(let[Z,Q]of Object.entries($))X.__STX_STORES__[Z]=Q;window.dispatchEvent(new CustomEvent("stx:stores-ready",{detail:Object.keys($)}))}function l($,X={}){let Z=[];for(let[Y,J]of Object.entries(X)){if(J===void 0||J===null)continue;if(Array.isArray(J))Z.push(`${Y}=${encodeURIComponent(J.join(","))}`);else if(typeof J==="boolean"){if(J)Z.push(`${Y}=true`)}else Z.push(`${Y}=${encodeURIComponent(String(J))}`)}if(Z.length===0)return $;let Q=$.includes("?")?"&":"?";return`${$}${Q}${Z.join("&")}`}function I8($){let X=$.indexOf("?");if(X===-1)return{src:$,params:{}};let Z=$.slice(0,X),Q=$.slice(X+1),Y={};for(let J of Q.split("&")){let[G,W]=J.split("="),K=W?decodeURIComponent(W):"";if(K==="true")Y[G]=!0;else if(K==="false")Y[G]=!1;else if(/^-?\d+$/.test(K))Y[G]=Number.parseInt(K,10);else if(/^-?\d+\.\d+$/.test(K))Y[G]=Number.parseFloat(K);else if(K.includes(","))Y[G]=K.split(",");else Y[G]=K}return{src:Z,params:Y}}function I5(...$){let X={};for(let Z of $)if(Z)Object.assign(X,Z);return X}function R8($,X,Z,Q){let Y={w:X};if(Z)Y.h=Z;if(Q)Y.fit=Q;return l($,Y)}function D8($,X,Z,Q="center"){return l($,{w:X,h:Z,fit:"crop",crop:Q})}function w8($,X,Z="center"){return l($,{w:X,h:X,fit:"crop",crop:Z})}function T8($,X,Z){return l($,{w:X,h:Z,fit:"max"})}function C8($,X,Z){return l($,{w:X,h:Z,fit:"crop"})}function k8($,X){return l($,{blur:Math.min(2000,Math.max(0,X))})}function x8($,X){return l($,{sharp:Math.min(100,Math.max(0,X))})}function S8($){return l($,{sat:-100})}function P8($,X=100){return l($,{sepia:Math.min(100,Math.max(0,X))})}function b8($){return l($,{invert:!0})}function y8($,X){return l($,{bri:Math.min(100,Math.max(-100,X))})}function v8($,X){return l($,{con:Math.min(100,Math.max(-100,X))})}function g8($,X){return l($,{sat:Math.min(100,Math.max(-100,X))})}function f8($,X){return l($,{rot:(X%360+360)%360})}function h8($){return l($,{flip:"h"})}function d8($){return l($,{flip:"v"})}function u8($,X,Z){let Q={fm:X};if(Z!==void 0)Q.q=Z;return l($,Q)}function m8($,X){return l($,{q:Math.min(100,Math.max(1,X))})}function p8($,X=["format","compress"]){return l($,{auto:X})}function c8($,X,Z={}){return l($,{mark:X,markx:Z.x,marky:Z.y,markalpha:Z.alpha,markscale:Z.scale,markalign:Z.align})}var R5={web:{fm:"webp",q:80,auto:["format","compress"]},highQuality:{q:95},thumb:{w:150,h:150,fit:"crop",crop:"center"},avatar:{w:200,h:200,fit:"crop",crop:"faces"},social:{w:1200,h:630,fit:"crop"},preview:{w:400,q:70},placeholder:{w:20,blur:200,q:20}};function l8($,X,Z){return l($,I5(R5[X],Z))}function i8($,X,Z){return X.map((Q)=>l($,{...Z,w:Q}))}function a8($,X,Z=[1,2,3],Q){return Z.map((Y)=>l($,{...Q,w:Math.round(X*Y),dpr:Y}))}function r8($){let X=[];if($.w!==void 0&&($.w<1||$.w>16383))X.push("Width must be between 1 and 16383");if($.h!==void 0&&($.h<1||$.h>16383))X.push("Height must be between 1 and 16383");if($.q!==void 0&&($.q<1||$.q>100))X.push("Quality must be between 1 and 100");if($.blur!==void 0&&($.blur<0||$.blur>2000))X.push("Blur must be between 0 and 2000");if($.rot!==void 0&&($.rot<0||$.rot>359))X.push("Rotation must be between 0 and 359");if($.dpr!==void 0&&($.dpr<1||$.dpr>5))X.push("DPR must be between 1 and 5");return{valid:X.length===0,errors:X}}function s8($){let X={...$};if(X.w!==void 0)X.w=Math.min(16383,Math.max(1,X.w));if(X.h!==void 0)X.h=Math.min(16383,Math.max(1,X.h));if(X.q!==void 0)X.q=Math.min(100,Math.max(1,X.q));if(X.blur!==void 0)X.blur=Math.min(2000,Math.max(0,X.blur));if(X.rot!==void 0)X.rot=(X.rot%360+360)%360;if(X.dpr!==void 0)X.dpr=Math.min(5,Math.max(1,X.dpr));return X}function o8($){let{endpoint:X,accept:Z,maxSize:Q,maxFiles:Y=1,fieldName:J="file",preview:G=!1,dropzone:W=!0,multiple:K=!1,autoUpload:_=!0,showProgress:U=!0,disabled:F=!1,placeholder:z="Drop files here or click to select",label:j}=$,H=$.class||"",L=$.style||"",O=$.id||`stx-upload-${Math.random().toString(36).slice(2,8)}`,A=Array.isArray(Z)?Z.join(","):Z,V=`
3433
+ `}import R8 from"path";w6();class DZ{store=new Map;async get($){let X=this.store.get($);if(!X||X.expires<=Date.now()){if(X)this.store.delete($);return null}return{...X.data}}async set($,X,Z){this.store.set($,{data:{...X},expires:Date.now()+Z*1000})}async delete($){this.store.delete($)}}function wZ($,X){for(let Z of $.getSetCookie())X.append("Set-Cookie",Z);$.forEach((Z,Q)=>{if(Q.toLowerCase()!=="set-cookie")X.set(Q,Z)})}async function TK($,X={},Z={}){let Q=Z.viewsDir||"./views",Y=Z.layoutsDir||"./layouts",J=!$.includes("<")&&!$.includes("@"),G,W;if(J){if(W=R8.resolve(Q,$),!W.endsWith(".stx"))W+=".stx";if(!await Bun.file(W).exists())return new Response(`Template not found: ${$}`,{status:500});G=await Bun.file(W).text()}else G=$,W="inline-template.stx";let K={...X,props:X,__filename:W,__dirname:R8.dirname(W)};if(Z.ctx)K.csrf_token=Z.ctx.csrfToken,K.csrf_field=`<input type="hidden" name="_token" value="${Z.ctx.csrfToken}">`,K.old=Z.ctx.old,K.errors=Z.ctx.errors,K.session=Z.ctx.session,K.user=Z.ctx.user(),K.isAuthenticated=Z.ctx.isAuthenticated();let _=G.match(/<script\s+server\b[^>]*>([\s\S]*?)<\/script>/i);if(_){let H=_[1];G=G.replace(/<script\s+server\b[^>]*>[\s\S]*?<\/script>/gi,""),await M0(H,K,W)}let U={layoutsDir:Y,...Z.stxOptions},z=await V0(G,K,W,U,new Set),j=new Headers({"Content-Type":"text/html; charset=utf-8"});if(Z.ctx)wZ(Z.ctx.responseHeaders,j);return new Response(z,{headers:j})}var d1={stores:new Map,subscriptions:new Map};function TZ($,X){d1.stores.set($,X)}function w8($){return d1.stores.get($)}function CZ($){return d1.stores.has($)}function kZ(){return Array.from(d1.stores.keys())}var H1=new Map;function D8($){if($==="memory")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};if(typeof window>"u")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};return $==="local"?window.localStorage:window.sessionStorage}function xZ($,X){let Z={};for(let Q of X){let Y=Q.split("."),J=$,G=Z,W=!0;for(let K=0;K<Y.length-1;K++){let _=Y[K];if(J&&typeof J==="object"&&_ in J){if(J=J[_],!(_ in G))G[_]={};G=G[_]}else{W=!1;break}}if(W&&J&&typeof J==="object"){let K=Y[Y.length-1];if(K in J)G[K]=J[K]}}return Z}function T8($,X={}){let{name:Z,persist:Q,devtools:Y=!1,middleware:J=[],equals:G=(O,A)=>O===A}=X,W=$,K=new Set,_=null;if(Q){let O=D8(Q.storage||"local"),A=Q.key||`stx-store:${Z||"unnamed"}`,M=Q.deserialize||JSON.parse;try{let V=O.getItem(A);if(V){let N=M(V);if(Q.paths&&typeof N==="object"&&N!==null)W={...$,...N};else W=N}}catch{}}let U=(O)=>{if(!Q)return;let A=D8(Q.storage||"local"),M=Q.key||`stx-store:${Z||"unnamed"}`,V=Q.serialize||JSON.stringify,N=Q.paths&&typeof O==="object"&&O!==null?xZ(O,Q.paths):O;if(Q.debounce){if(_)clearTimeout(_);_=setTimeout(()=>{A.setItem(M,V(N))},Q.debounce)}else A.setItem(M,V(N))},F=(O,A)=>{for(let M of K)try{M(O,A)}catch(V){console.error("[stx-store] Subscriber error:",V)}},z=Y?(O,A)=>{if(o6(Z||"unnamed",O,W,A),typeof window<"u")window.__STX_DEVTOOLS__?.onStoreChange?.(Z||"unnamed",O,A)}:()=>{},j=(O)=>{let A=W;if(!G(O,A))W=O,U(O),F(O,A),z("set",O)},H=j,L={get:()=>W,set:(O)=>{if(typeof O==="function")H(O(W));else H(O)},subscribe:(O)=>{return K.add(O),()=>{K.delete(O)}},update:(O)=>{if(typeof W!=="object"||W===null)throw Error("update() can only be used with object stores");let A=typeof O==="function"?O(W):O;L.set({...W,...A})},reset:()=>{L.set($),z("reset",$)},name:Z,destroy:()=>{if(K.clear(),_)clearTimeout(_);if(Z)d1.stores.delete(Z)}};for(let O of J.reverse())H=O(j,()=>W,L)(H);if(Z){if(TZ(Z,L),Y)n6(Z,W??{},{},[])}return L}function SZ($){let X=typeof $==="string"?w8($):$;if(!X)throw Error(`Store "${$}" not found`);return X.get()}function PZ($,X,Z){if(typeof X==="function"){if(typeof window<"u"&&window.stx?.defineStore)return window.stx.defineStore($,X,Z);return X()}let Q=X,{state:Y,getters:J={},actions:G={},persist:W,devtools:K=!0}=Q,_=typeof Y==="function"?Y():Y,U=W===!0?{storage:"local",key:`stx-store:${$}`}:W||void 0,F=T8(_,{name:$,persist:U,devtools:K}),z=new Proxy({},{get(j,H){let L=String(H);if(L==="$state")return F.get();if(L==="$subscribe")return F.subscribe;if(L==="$reset")return F.reset;if(L==="$patch")return(A)=>{if(typeof A==="function"){let V={...F.get()};A(V),F.set(V)}else F.update(A)};if(L==="_store")return F;if(L==="$id")return $;if(L in J)return J[L](F.get());if(L in G)return(...A)=>{return G[L].apply(z,A)};let O=F.get();if(O&&typeof O==="object"&&L in O)return O[L];return},set(j,H,L){let O=String(H);if(O.startsWith("$")||O==="_store")return!1;let A=F.get();if(A&&typeof A==="object")return F.set({...A,[O]:L}),!0;return!1},has(j,H){let L=String(H),O=F.get();return L.startsWith("$")||L==="_store"||L in J||L in G||O&&typeof O==="object"&&L in O},ownKeys(){let j=F.get();return[...j&&typeof j==="object"?Object.keys(j):[],...Object.keys(J),...Object.keys(G),"$state","$subscribe","$reset","$patch","$id"]},getOwnPropertyDescriptor(j,H){return{enumerable:!0,configurable:!0,get:()=>this.get(j,H,z)}}});return bZ.set($,z),z}var bZ=new Map;function yZ($){if(typeof window>"u")return;let X=window;X.__STX_STORES__=X.__STX_STORES__||{};for(let[Z,Q]of Object.entries($))X.__STX_STORES__[Z]=Q;window.dispatchEvent(new CustomEvent("stx:stores-ready",{detail:Object.keys($)}))}function l($,X={}){let Z=[];for(let[Y,J]of Object.entries(X)){if(J===void 0||J===null)continue;if(Array.isArray(J))Z.push(`${Y}=${encodeURIComponent(J.join(","))}`);else if(typeof J==="boolean"){if(J)Z.push(`${Y}=true`)}else Z.push(`${Y}=${encodeURIComponent(String(J))}`)}if(Z.length===0)return $;let Q=$.includes("?")?"&":"?";return`${$}${Q}${Z.join("&")}`}function C8($){let X=$.indexOf("?");if(X===-1)return{src:$,params:{}};let Z=$.slice(0,X),Q=$.slice(X+1),Y={};for(let J of Q.split("&")){let[G,W]=J.split("="),K=W?decodeURIComponent(W):"";if(K==="true")Y[G]=!0;else if(K==="false")Y[G]=!1;else if(/^-?\d+$/.test(K))Y[G]=Number.parseInt(K,10);else if(/^-?\d+\.\d+$/.test(K))Y[G]=Number.parseFloat(K);else if(K.includes(","))Y[G]=K.split(",");else Y[G]=K}return{src:Z,params:Y}}function w5(...$){let X={};for(let Z of $)if(Z)Object.assign(X,Z);return X}function k8($,X,Z,Q){let Y={w:X};if(Z)Y.h=Z;if(Q)Y.fit=Q;return l($,Y)}function x8($,X,Z,Q="center"){return l($,{w:X,h:Z,fit:"crop",crop:Q})}function S8($,X,Z="center"){return l($,{w:X,h:X,fit:"crop",crop:Z})}function P8($,X,Z){return l($,{w:X,h:Z,fit:"max"})}function b8($,X,Z){return l($,{w:X,h:Z,fit:"crop"})}function y8($,X){return l($,{blur:Math.min(2000,Math.max(0,X))})}function v8($,X){return l($,{sharp:Math.min(100,Math.max(0,X))})}function g8($){return l($,{sat:-100})}function f8($,X=100){return l($,{sepia:Math.min(100,Math.max(0,X))})}function h8($){return l($,{invert:!0})}function d8($,X){return l($,{bri:Math.min(100,Math.max(-100,X))})}function u8($,X){return l($,{con:Math.min(100,Math.max(-100,X))})}function m8($,X){return l($,{sat:Math.min(100,Math.max(-100,X))})}function p8($,X){return l($,{rot:(X%360+360)%360})}function c8($){return l($,{flip:"h"})}function l8($){return l($,{flip:"v"})}function i8($,X,Z){let Q={fm:X};if(Z!==void 0)Q.q=Z;return l($,Q)}function a8($,X){return l($,{q:Math.min(100,Math.max(1,X))})}function s8($,X=["format","compress"]){return l($,{auto:X})}function r8($,X,Z={}){return l($,{mark:X,markx:Z.x,marky:Z.y,markalpha:Z.alpha,markscale:Z.scale,markalign:Z.align})}var T5={web:{fm:"webp",q:80,auto:["format","compress"]},highQuality:{q:95},thumb:{w:150,h:150,fit:"crop",crop:"center"},avatar:{w:200,h:200,fit:"crop",crop:"faces"},social:{w:1200,h:630,fit:"crop"},preview:{w:400,q:70},placeholder:{w:20,blur:200,q:20}};function n8($,X,Z){return l($,w5(T5[X],Z))}function o8($,X,Z){return X.map((Q)=>l($,{...Z,w:Q}))}function t8($,X,Z=[1,2,3],Q){return Z.map((Y)=>l($,{...Q,w:Math.round(X*Y),dpr:Y}))}function e8($){let X=[];if($.w!==void 0&&($.w<1||$.w>16383))X.push("Width must be between 1 and 16383");if($.h!==void 0&&($.h<1||$.h>16383))X.push("Height must be between 1 and 16383");if($.q!==void 0&&($.q<1||$.q>100))X.push("Quality must be between 1 and 100");if($.blur!==void 0&&($.blur<0||$.blur>2000))X.push("Blur must be between 0 and 2000");if($.rot!==void 0&&($.rot<0||$.rot>359))X.push("Rotation must be between 0 and 359");if($.dpr!==void 0&&($.dpr<1||$.dpr>5))X.push("DPR must be between 1 and 5");return{valid:X.length===0,errors:X}}function $7($){let X={...$};if(X.w!==void 0)X.w=Math.min(16383,Math.max(1,X.w));if(X.h!==void 0)X.h=Math.min(16383,Math.max(1,X.h));if(X.q!==void 0)X.q=Math.min(100,Math.max(1,X.q));if(X.blur!==void 0)X.blur=Math.min(2000,Math.max(0,X.blur));if(X.rot!==void 0)X.rot=(X.rot%360+360)%360;if(X.dpr!==void 0)X.dpr=Math.min(5,Math.max(1,X.dpr));return X}function Z7($){let{endpoint:X,accept:Z,maxSize:Q,maxFiles:Y=1,fieldName:J="file",preview:G=!1,dropzone:W=!0,multiple:K=!1,autoUpload:_=!0,showProgress:U=!0,disabled:F=!1,placeholder:z="Drop files here or click to select",label:j}=$,H=$.class||"",L=$.style||"",O=$.id||`stx-upload-${Math.random().toString(36).slice(2,8)}`,A=Array.isArray(Z)?Z.join(","):Z,M=`
3422
3434
  <div id="${O}" class="stx-upload${W?" stx-upload-dropzone":""}${F?" stx-upload-disabled":""}${H?" "+H:""}"${L?` style="${L}"`:""}>
3423
- ${j?`<label class="stx-upload-label">${n8(j)}</label>`:""}
3435
+ ${j?`<label class="stx-upload-label">${X7(j)}</label>`:""}
3424
3436
  <div class="stx-upload-area" data-stx-upload-area>
3425
3437
  <input
3426
3438
  type="file"
@@ -3435,14 +3447,14 @@ else {
3435
3447
  <svg class="stx-upload-icon" viewBox="0 0 24 24" width="48" height="48">
3436
3448
  <path fill="currentColor" d="M9 16h6v-6h4l-7-7-7 7h4v6zm-4 2h14v2H5v-2z"/>
3437
3449
  </svg>
3438
- <span class="stx-upload-text">${n8(z)}</span>
3439
- ${Q?`<span class="stx-upload-hint">Max size: ${OQ(Q)}</span>`:""}
3450
+ <span class="stx-upload-text">${X7(z)}</span>
3451
+ ${Q?`<span class="stx-upload-hint">Max size: ${EQ(Q)}</span>`:""}
3440
3452
  </div>
3441
3453
  </div>
3442
3454
  ${G?'<div class="stx-upload-previews" data-stx-upload-previews></div>':""}
3443
3455
  ${U?'<div class="stx-upload-progress" data-stx-upload-progress style="display:none;"><div class="stx-upload-progress-bar"></div><span class="stx-upload-progress-text">0%</span></div>':""}
3444
3456
  </div>
3445
- `.trim(),E=`
3457
+ `.trim(),V=`
3446
3458
  (function() {
3447
3459
  var container = document.getElementById('${O}');
3448
3460
  if (!container) return;
@@ -3455,7 +3467,7 @@ else {
3455
3467
  var progressText = progress ? progress.querySelector('.stx-upload-progress-text') : null;
3456
3468
 
3457
3469
  var config = {
3458
- endpoint: '${HQ(X)}',
3470
+ endpoint: '${VQ(X)}',
3459
3471
  fieldName: '${J}',
3460
3472
  maxSize: ${Q||"null"},
3461
3473
  maxFiles: ${Y},
@@ -3577,7 +3589,7 @@ else {
3577
3589
  return '\uD83D\uDCC1';
3578
3590
  }
3579
3591
  })();
3580
- `.trim(),q=`
3592
+ `.trim(),N=`
3581
3593
  .stx-upload {
3582
3594
  font-family: system-ui, -apple-system, sans-serif;
3583
3595
  }
@@ -3707,7 +3719,7 @@ else {
3707
3719
  opacity: 0.5;
3708
3720
  pointer-events: none;
3709
3721
  }
3710
- `.trim();return{html:V,script:E,css:q}}function n8($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function HQ($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function OQ($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(1)} MB`}async function D5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({url:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to sign URL: ${_.status} ${_.statusText}`);let U=await _.json();return{url:U.url||U.signedUrl,signature:U.signature,expires:U.expires||Date.now()+J*1000,oneTimeUse:U.oneTimeUse||G}}async function w5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({urls:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to batch sign URLs: ${_.status} ${_.statusText}`);let U=await _.json(),F=new Map,z=new Map;if(Array.isArray(U.results))for(let j of U.results)if(j.error)z.set(j.url,j.error);else F.set(j.url||j.originalUrl,{url:j.signedUrl||j.url,signature:j.signature,expires:j.expires||Date.now()+J*1000,oneTimeUse:j.oneTimeUse||G});else if(typeof U.signatures==="object"){for(let[j,H]of Object.entries(U.signatures)){let L=H;F.set(j,{url:L.signedUrl||L.url||j,signature:L.signature,expires:L.expires||Date.now()+J*1000,oneTimeUse:G})}if(U.errors)for(let[j,H]of Object.entries(U.errors))z.set(j,H)}return{signatures:F,errors:z}}async function t8($,X,Z=10){let Q=new Map,Y=new Map,J=[];for(let W=0;W<$.length;W+=Z)J.push($.slice(W,W+Z));let G=await Promise.all(J.map((W)=>w5(W,X)));for(let W of G){for(let[K,_]of W.signatures)Q.set(K,_);for(let[K,_]of W.errors)Y.set(K,_)}return{signatures:Q,errors:Y}}function T5($){return $.expires>Date.now()}function C5($){return Math.max(0,$.expires-Date.now())}function k5($,X=300000){return C5($)<X}async function m1($){if($.check)return await $.check();return!0}function N$($){let X={};if($.role)X.role=$.role;if($.permission)X.permission=$.permission;if($.userId)X.userId=$.userId;return X}var u1=new Map;async function e8($,X){let Z=`${$}:${X.endpoint}`,Q=u1.get(Z);if(Q&&T5(Q)&&!k5(Q))return Q;let Y=await D5($,X);return u1.set(Z,Y),Y}function $7(){u1.clear()}function X7(){let $=0,X=Date.now();for(let[Z,Q]of u1)if(Q.expires<=X)u1.delete(Z),$++;return $}function M$(){return`
3722
+ `.trim();return{html:M,script:V,css:N}}function X7($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function VQ($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function EQ($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(1)} MB`}async function C5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({url:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to sign URL: ${_.status} ${_.statusText}`);let U=await _.json();return{url:U.url||U.signedUrl,signature:U.signature,expires:U.expires||Date.now()+J*1000,oneTimeUse:U.oneTimeUse||G}}async function k5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({urls:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to batch sign URLs: ${_.status} ${_.statusText}`);let U=await _.json(),F=new Map,z=new Map;if(Array.isArray(U.results))for(let j of U.results)if(j.error)z.set(j.url,j.error);else F.set(j.url||j.originalUrl,{url:j.signedUrl||j.url,signature:j.signature,expires:j.expires||Date.now()+J*1000,oneTimeUse:j.oneTimeUse||G});else if(typeof U.signatures==="object"){for(let[j,H]of Object.entries(U.signatures)){let L=H;F.set(j,{url:L.signedUrl||L.url||j,signature:L.signature,expires:L.expires||Date.now()+J*1000,oneTimeUse:G})}if(U.errors)for(let[j,H]of Object.entries(U.errors))z.set(j,H)}return{signatures:F,errors:z}}async function Q7($,X,Z=10){let Q=new Map,Y=new Map,J=[];for(let W=0;W<$.length;W+=Z)J.push($.slice(W,W+Z));let G=await Promise.all(J.map((W)=>k5(W,X)));for(let W of G){for(let[K,_]of W.signatures)Q.set(K,_);for(let[K,_]of W.errors)Y.set(K,_)}return{signatures:Q,errors:Y}}function x5($){return $.expires>Date.now()}function S5($){return Math.max(0,$.expires-Date.now())}function P5($,X=300000){return S5($)<X}async function m1($){if($.check)return await $.check();return!0}function M$($){let X={};if($.role)X.role=$.role;if($.permission)X.permission=$.permission;if($.userId)X.userId=$.userId;return X}var u1=new Map;async function Y7($,X){let Z=`${$}:${X.endpoint}`,Q=u1.get(Z);if(Q&&x5(Q)&&!P5(Q))return Q;let Y=await C5($,X);return u1.set(Z,Y),Y}function J7(){u1.clear()}function G7(){let $=0,X=Date.now();for(let[Z,Q]of u1)if(Q.expires<=X)u1.delete(Z),$++;return $}function V$(){return`
3711
3723
  (function() {
3712
3724
  'use strict';
3713
3725
 
@@ -3781,7 +3793,7 @@ catch (error) {
3781
3793
  }
3782
3794
  };
3783
3795
  })();
3784
- `.trim()}async function Q7($){let{src:X,alt:Z="",signatureEndpoint:Q="/api/sign",signatureConfig:Y={},auth:J,fallback:G,oneTimeUse:W=!0}=$,K=$.class,_=$.style;if(J){if(!await m1(J)){if(G)return{html:`<img src="${$0(G)}" alt="${$0(Z)}"${K?` class="${$0(K)}"`:""}${_?` style="${$0(_)}"`:""} />`};return{html:"<!-- Protected content: access denied -->"}}}let U={endpoint:Q,oneTimeUse:W,...Y,params:J?N$(J):Y.params},F=`stx-protected-${Math.random().toString(36).slice(2,8)}`,z=[`id="${F}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Q)}"`,`alt="${$0(Z)}"`];if(G)z.push(`data-fallback="${$0(G)}"`),z.push(`src="${$0(G)}"`);else z.push('src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"');if(K)z.push(`class="${$0(K)}"`);if(_)z.push(`style="${$0(_)}"`);let j=`
3796
+ `.trim()}async function K7($){let{src:X,alt:Z="",signatureEndpoint:Q="/api/sign",signatureConfig:Y={},auth:J,fallback:G,oneTimeUse:W=!0}=$,K=$.class,_=$.style;if(J){if(!await m1(J)){if(G)return{html:`<img src="${$0(G)}" alt="${$0(Z)}"${K?` class="${$0(K)}"`:""}${_?` style="${$0(_)}"`:""} />`};return{html:"<!-- Protected content: access denied -->"}}}let U={endpoint:Q,oneTimeUse:W,...Y,params:J?M$(J):Y.params},F=`stx-protected-${Math.random().toString(36).slice(2,8)}`,z=[`id="${F}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Q)}"`,`alt="${$0(Z)}"`];if(G)z.push(`data-fallback="${$0(G)}"`),z.push(`src="${$0(G)}"`);else z.push('src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"');if(K)z.push(`class="${$0(K)}"`);if(_)z.push(`style="${$0(_)}"`);let j=`
3785
3797
  (function() {
3786
3798
  var el = document.getElementById('${F}');
3787
3799
  if (!el) return;
@@ -3792,7 +3804,7 @@ catch (error) {
3792
3804
  expirationSeconds: ${Y.expirationSeconds||3600}
3793
3805
  });
3794
3806
  })();
3795
- `.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function Y7($){let{src:X,signatureEndpoint:Z="/api/sign",signatureConfig:Q={},auth:Y,fallback:J,oneTimeUse:G=!0,poster:W,controls:K=!0,autoplay:_=!1,muted:U=!1,loop:F=!1}=$,z=$.class,j=$.style,H=$.alt;if(Y){if(!await m1(Y))return{html:"<!-- Protected video: access denied -->"}}let L=`stx-protected-video-${Math.random().toString(36).slice(2,8)}`,O=[`id="${L}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Z)}"`];if(W)O.push(`poster="${$0(W)}"`);if(K)O.push("controls");if(_)O.push("autoplay");if(U)O.push("muted");if(F)O.push("loop");if(z)O.push(`class="${$0(z)}"`);if(j)O.push(`style="${$0(j)}"`);if(J)O.push(`data-fallback="${$0(J)}"`);let A=`
3807
+ `.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function _7($){let{src:X,signatureEndpoint:Z="/api/sign",signatureConfig:Q={},auth:Y,fallback:J,oneTimeUse:G=!0,poster:W,controls:K=!0,autoplay:_=!1,muted:U=!1,loop:F=!1}=$,z=$.class,j=$.style,H=$.alt;if(Y){if(!await m1(Y))return{html:"<!-- Protected video: access denied -->"}}let L=`stx-protected-video-${Math.random().toString(36).slice(2,8)}`,O=[`id="${L}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Z)}"`];if(W)O.push(`poster="${$0(W)}"`);if(K)O.push("controls");if(_)O.push("autoplay");if(U)O.push("muted");if(F)O.push("loop");if(z)O.push(`class="${$0(z)}"`);if(j)O.push(`style="${$0(j)}"`);if(J)O.push(`data-fallback="${$0(J)}"`);let A=`
3796
3808
  (function() {
3797
3809
  var el = document.getElementById('${L}');
3798
3810
  if (!el) return;
@@ -3803,7 +3815,7 @@ catch (error) {
3803
3815
  expirationSeconds: ${Q.expirationSeconds||3600}
3804
3816
  });
3805
3817
  })();
3806
- `.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function J7($,X){let Z=/data-protected-src="([^"]+)"/g,Q=[],Y;while((Y=Z.exec($))!==null)Q.push(Y[1]);if(Q.length===0)return{html:$,script:""};let J=M$()+`
3818
+ `.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function U7($,X){let Z=/data-protected-src="([^"]+)"/g,Q=[],Y;while((Y=Z.exec($))!==null)Q.push(Y[1]);if(Q.length===0)return{html:$,script:""};let J=V$()+`
3807
3819
 
3808
3820
  `;return J+=`
3809
3821
  (function() {
@@ -3835,12 +3847,12 @@ else if (el.dataset.fallback) {
3835
3847
  });
3836
3848
  });
3837
3849
  })();
3838
- `.trim(),{html:$,script:J}}function G7($,X,Z){if(X.src)return{src:String(X.src),alt:String(X.alt||""),signatureEndpoint:String(X.signatureEndpoint||"/api/sign"),auth:X.auth,fallback:X.fallback?String(X.fallback):void 0,oneTimeUse:X.oneTimeUse!==!1};let Q=$.trim();if(Q.startsWith("@protected(")||Q.startsWith("("))Q=Q.replace(/^@protected\(/,"").replace(/^\(/,"").replace(/\)$/,"");let Y=AQ(Q);return{src:Z7(Y[0],Z)||"",alt:Z7(Y[1],Z)||"",...typeof Y[2]==="object"?Y[2]:{}}}function AQ($){let X=[],Z="",Q=!1,Y="",J=0;for(let G=0;G<$.length;G++){let W=$[G],K=G>0?$[G-1]:"";if((W==='"'||W==="'")&&K!=="\\"){if(!Q)Q=!0,Y=W;else if(W===Y)Q=!1;else Z+=W;continue}if(!Q){if(W==="{")J++;if(W==="}")J--;if(W===","&&J===0){X.push(Z.trim()),Z="";continue}}Z+=W}if(Z.trim())X.push(Z.trim());return X}function Z7($,X){if(typeof $!=="string")return $;let Z=$.trim();if(Z.startsWith('"')&&Z.endsWith('"')||Z.startsWith("'")&&Z.endsWith("'"))return Z.slice(1,-1);if(X[Z]!==void 0)return X[Z];if(Z.startsWith("{"))try{return JSON.parse(Z)}catch{}return Z}function $0($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function qQ($){let{src:X,apiKey:Z,bucket:Q,allowedTypes:Y,maxFileSize:J,multiple:G=!1,customStyles:W={},callbacks:K={}}=$,_=`stx-media-manager-${Math.random().toString(36).slice(2,8)}`,U={container:`#${_}`};if(Z)U.apiKey=Z;if(Q)U.bucket=Q;if(Y)U.allowedTypes=Y;if(J)U.maxFileSize=J;if(G)U.multiple=G;if(Object.keys(W).length>0)U.styles=W;let F=`<div id="${_}" class="stx-media-manager"></div>`,z=Object.entries(K).filter(([,H])=>H).map(([H,L])=>{return`manager.on('${H.replace(/^on/,"").toLowerCase()}', ${L});`}).join(`
3850
+ `.trim(),{html:$,script:J}}function B7($,X,Z){if(X.src)return{src:String(X.src),alt:String(X.alt||""),signatureEndpoint:String(X.signatureEndpoint||"/api/sign"),auth:X.auth,fallback:X.fallback?String(X.fallback):void 0,oneTimeUse:X.oneTimeUse!==!1};let Q=$.trim();if(Q.startsWith("@protected(")||Q.startsWith("("))Q=Q.replace(/^@protected\(/,"").replace(/^\(/,"").replace(/\)$/,"");let Y=IQ(Q);return{src:W7(Y[0],Z)||"",alt:W7(Y[1],Z)||"",...typeof Y[2]==="object"?Y[2]:{}}}function IQ($){let X=[],Z="",Q=!1,Y="",J=0;for(let G=0;G<$.length;G++){let W=$[G],K=G>0?$[G-1]:"";if((W==='"'||W==="'")&&K!=="\\"){if(!Q)Q=!0,Y=W;else if(W===Y)Q=!1;else Z+=W;continue}if(!Q){if(W==="{")J++;if(W==="}")J--;if(W===","&&J===0){X.push(Z.trim()),Z="";continue}}Z+=W}if(Z.trim())X.push(Z.trim());return X}function W7($,X){if(typeof $!=="string")return $;let Z=$.trim();if(Z.startsWith('"')&&Z.endsWith('"')||Z.startsWith("'")&&Z.endsWith("'"))return Z.slice(1,-1);if(X[Z]!==void 0)return X[Z];if(Z.startsWith("{"))try{return JSON.parse(Z)}catch{}return Z}function $0($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function RQ($){let{src:X,apiKey:Z,bucket:Q,allowedTypes:Y,maxFileSize:J,multiple:G=!1,customStyles:W={},callbacks:K={}}=$,_=`stx-media-manager-${Math.random().toString(36).slice(2,8)}`,U={container:`#${_}`};if(Z)U.apiKey=Z;if(Q)U.bucket=Q;if(Y)U.allowedTypes=Y;if(J)U.maxFileSize=J;if(G)U.multiple=G;if(Object.keys(W).length>0)U.styles=W;let F=`<div id="${_}" class="stx-media-manager"></div>`,z=Object.entries(K).filter(([,H])=>H).map(([H,L])=>{return`manager.on('${H.replace(/^on/,"").toLowerCase()}', ${L});`}).join(`
3839
3851
  `),j=`
3840
3852
  (function() {
3841
3853
  // Load media manager script
3842
3854
  var script = document.createElement('script');
3843
- script.src = '${W7(X)}';
3855
+ script.src = '${L7(X)}';
3844
3856
  script.async = true;
3845
3857
 
3846
3858
  script.onload = function() {
@@ -3857,12 +3869,12 @@ else if (el.dataset.fallback) {
3857
3869
  };
3858
3870
 
3859
3871
  script.onerror = function() {
3860
- console.error('[stx] Failed to load media manager from:', '${W7(X)}');
3872
+ console.error('[stx] Failed to load media manager from:', '${L7(X)}');
3861
3873
  };
3862
3874
 
3863
3875
  document.head.appendChild(script);
3864
3876
  })();
3865
- `.trim();return{html:F,script:j}}function NQ($){let{accept:X="image/*",multiple:Z=!1,onSelect:Q="handleMediaSelect"}=$,Y=`stx-picker-${Math.random().toString(36).slice(2,8)}`,J=`
3877
+ `.trim();return{html:F,script:j}}function DQ($){let{accept:X="image/*",multiple:Z=!1,onSelect:Q="handleMediaSelect"}=$,Y=`stx-picker-${Math.random().toString(36).slice(2,8)}`,J=`
3866
3878
  <div id="${Y}" class="stx-media-picker" style="display:none;">
3867
3879
  <div class="stx-media-picker-backdrop"></div>
3868
3880
  <div class="stx-media-picker-modal">
@@ -4051,7 +4063,7 @@ else {
4051
4063
  border: none;
4052
4064
  color: white;
4053
4065
  }
4054
- `.trim();return{html:J,script:G,css:W}}function W7($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var U7={root:null,rootMargin:"50px 0px",threshold:0,useNative:!0,selector:"[data-stx-lazy]"};function x5(){return"loading"in HTMLImageElement.prototype}function S5(){return"IntersectionObserver"in window}function B7($={}){let X={...U7,...$},Z=document.querySelectorAll(X.selector);if(Z.length===0)return()=>{};if(X.useNative&&x5())return Z.forEach((Y)=>{if(Y.tagName==="IMG"||Y.tagName==="IFRAME")c0(Y,X)}),()=>{};if(!S5())return Z.forEach((Y)=>c0(Y,X)),()=>{};let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target;c0(G,X),Q.unobserve(G)}})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold});return Z.forEach((Y)=>Q.observe(Y)),()=>{Q.disconnect()}}function c0($,X={}){let{onLoad:Z,onLoaded:Q,onError:Y}=X;if(Z)Z($);let J=$.tagName==="IMG",G=$.tagName==="VIDEO",W=$.tagName==="IFRAME";if(J)K7($,Q,Y);else if(G)_7($,Q,Y);else if(W)MQ($,Q,Y);else{let K=$.querySelector("img[data-src], img[data-srcset]"),_=$.querySelector("video[data-src]");if(K)K7(K,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});else if(_)_7(_,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});$.querySelectorAll("source[data-srcset]").forEach((F)=>{let z=F;if(z.dataset.srcset)z.srcset=z.dataset.srcset,delete z.dataset.srcset;if(z.dataset.sizes)z.sizes=z.dataset.sizes,delete z.dataset.sizes})}}function K7($,X,Z){let Q=()=>{$.classList.add("stx-img-loaded"),$.style.opacity="1";let J=$.closest(".stx-img-placeholder");if(J)J.classList.add("stx-img-loaded");if(X)X($)},Y=()=>{if($.classList.add("stx-img-error"),Z)Z($,Error(`Failed to load image: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.srcset)$.srcset=$.dataset.srcset,delete $.dataset.srcset;if($.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.sizes)$.sizes=$.dataset.sizes,delete $.dataset.sizes}function _7($,X,Z){let Q=()=>{if($.classList.add("stx-video-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-video-error"),Z)Z($,Error(`Failed to load video: ${$.src}`))};if($.addEventListener("loadeddata",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.querySelectorAll("source[data-src]").forEach((G)=>{let W=G;if(W.dataset.src)W.src=W.dataset.src,delete W.dataset.src}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.poster)$.poster=$.dataset.poster,delete $.dataset.poster;$.load()}function MQ($,X,Z){let Q=()=>{if($.classList.add("stx-iframe-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-iframe-error"),Z)Z($,Error(`Failed to load iframe: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src}function L7($){c0($,{})}function F7($="[data-stx-lazy]"){document.querySelectorAll($).forEach((Z)=>c0(Z,{}))}function z7($={}){let X={...U7,...$};return new IntersectionObserver((Z,Q)=>{Z.forEach((Y)=>{if(Y.isIntersecting)c0(Y.target,X),Q.unobserve(Y.target)})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold})}function j7($,X){$.observe(X)}function H7($){$.disconnect()}function V$(){return`
4066
+ `.trim();return{html:J,script:G,css:W}}function L7($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}var j7={root:null,rootMargin:"50px 0px",threshold:0,useNative:!0,selector:"[data-stx-lazy]"};function b5(){return"loading"in HTMLImageElement.prototype}function y5(){return"IntersectionObserver"in window}function H7($={}){let X={...j7,...$},Z=document.querySelectorAll(X.selector);if(Z.length===0)return()=>{};if(X.useNative&&b5())return Z.forEach((Y)=>{if(Y.tagName==="IMG"||Y.tagName==="IFRAME")c0(Y,X)}),()=>{};if(!y5())return Z.forEach((Y)=>c0(Y,X)),()=>{};let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target;c0(G,X),Q.unobserve(G)}})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold});return Z.forEach((Y)=>Q.observe(Y)),()=>{Q.disconnect()}}function c0($,X={}){let{onLoad:Z,onLoaded:Q,onError:Y}=X;if(Z)Z($);let J=$.tagName==="IMG",G=$.tagName==="VIDEO",W=$.tagName==="IFRAME";if(J)F7($,Q,Y);else if(G)z7($,Q,Y);else if(W)wQ($,Q,Y);else{let K=$.querySelector("img[data-src], img[data-srcset]"),_=$.querySelector("video[data-src]");if(K)F7(K,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});else if(_)z7(_,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});$.querySelectorAll("source[data-srcset]").forEach((F)=>{let z=F;if(z.dataset.srcset)z.srcset=z.dataset.srcset,delete z.dataset.srcset;if(z.dataset.sizes)z.sizes=z.dataset.sizes,delete z.dataset.sizes})}}function F7($,X,Z){let Q=()=>{$.classList.add("stx-img-loaded"),$.style.opacity="1";let J=$.closest(".stx-img-placeholder");if(J)J.classList.add("stx-img-loaded");if(X)X($)},Y=()=>{if($.classList.add("stx-img-error"),Z)Z($,Error(`Failed to load image: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.srcset)$.srcset=$.dataset.srcset,delete $.dataset.srcset;if($.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.sizes)$.sizes=$.dataset.sizes,delete $.dataset.sizes}function z7($,X,Z){let Q=()=>{if($.classList.add("stx-video-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-video-error"),Z)Z($,Error(`Failed to load video: ${$.src}`))};if($.addEventListener("loadeddata",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.querySelectorAll("source[data-src]").forEach((G)=>{let W=G;if(W.dataset.src)W.src=W.dataset.src,delete W.dataset.src}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.poster)$.poster=$.dataset.poster,delete $.dataset.poster;$.load()}function wQ($,X,Z){let Q=()=>{if($.classList.add("stx-iframe-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-iframe-error"),Z)Z($,Error(`Failed to load iframe: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src}function O7($){c0($,{})}function A7($="[data-stx-lazy]"){document.querySelectorAll($).forEach((Z)=>c0(Z,{}))}function N7($={}){let X={...j7,...$};return new IntersectionObserver((Z,Q)=>{Z.forEach((Y)=>{if(Y.isIntersecting)c0(Y.target,X),Q.unobserve(Y.target)})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold})}function q7($,X){$.observe(X)}function M7($){$.disconnect()}function E$(){return`
4055
4067
  (function() {
4056
4068
  'use strict';
4057
4069
 
@@ -4141,7 +4153,7 @@ else {
4141
4153
  window.STX.lazyLoad = loadElement;
4142
4154
  window.STX.initLazyLoading = init;
4143
4155
  })();
4144
- `.trim()}var VQ={duration:300,easing:"ease-out",removePlaceholder:!1,loadedClass:"stx-img-loaded",loadingClass:"stx-img-loading"};function P5($,X={}){let Z={...VQ,...X},Q=$.closest(".stx-img-placeholder");if(!Q){EQ($,Z);return}if(Q.style.setProperty("--stx-img-transition-duration",`${Z.duration}ms`),Q.style.setProperty("--stx-img-transition-easing",Z.easing),Z.loadingClass)Q.classList.add(Z.loadingClass);if($.complete&&$.naturalWidth>0)O7($,Q,Z);else $.addEventListener("load",()=>O7($,Q,Z),{once:!0}),$.addEventListener("error",()=>IQ($,Q,Z),{once:!0})}function EQ($,X){let Z=()=>{$.style.transition=`opacity ${X.duration}ms ${X.easing}`,$.style.opacity="1",$.classList.remove(X.loadingClass),$.classList.add(X.loadedClass)};if($.complete&&$.naturalWidth>0)Z();else $.style.opacity="0",$.classList.add(X.loadingClass),$.addEventListener("load",Z,{once:!0})}function O7($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);if(Z.loadedClass)X.classList.add(Z.loadedClass);if($.style.opacity="1",Z.removePlaceholder)setTimeout(()=>{X.style.backgroundImage="none"},Z.duration)}function IQ($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);X.classList.add("stx-img-error"),$.classList.add("stx-img-error")}function A7($,X){let Z=E$($),Q=X.getContext("2d");if(!Q)return;X.width=Z.w,X.height=Z.h;let Y=Q.createImageData(Z.w,Z.h);Y.data.set(Z.rgba),Q.putImageData(Y,0,0)}function E$($){let X=$[0]|$[1]<<8|$[2]<<16,Z=(X&63)/63,Q=(X>>6&63)/31.5-1,Y=(X>>12&63)/31.5-1,J=(X>>18&31)/31,G=X>>23!==0,W=$[3]|$[4]<<8,K=(W>>3&63)/63,_=(W>>9&63)/63,U=W>>15!==0,F=Math.max(3,U?G?5:7:G?5:5),z=Math.max(3,U?G?5:5:G?5:7),j=32,H=32,L=new Uint8ClampedArray(4096);for(let O=0;O<32;O++)for(let A=0;A<32;A++){let V=(O*32+A)*4,E=A/31,q=O/31,N=Z+(E-0.5)*J*0.5+(q-0.5)*J*0.5,I=Q*(1-E*0.3),M=Y*(1-q*0.3),w=N-0.6666666666666666*I,D=(3*N-w+M)/2,T=D-M;L[V]=Math.max(0,Math.min(255,Math.round(D*255))),L[V+1]=Math.max(0,Math.min(255,Math.round(T*255))),L[V+2]=Math.max(0,Math.min(255,Math.round(w*255))),L[V+3]=255}return{w:32,h:32,rgba:L}}function q7($){let X=E$($),Z=document.createElement("canvas");Z.width=X.w,Z.height=X.h;let Q=Z.getContext("2d");if(!Q)return"";let Y=Q.createImageData(X.w,X.h);return Y.data.set(X.rgba),Q.putImageData(Y,0,0),Z.toDataURL("image/png")}function N7($){let X=atob($),Z=new Uint8Array(X.length);for(let Q=0;Q<X.length;Q++)Z[Q]=X.charCodeAt(Q);return Z}function M7($,X,Z=300){return new Promise((Q)=>{$.style.transition=`opacity ${Z}ms ease-out`,X.style.transition=`opacity ${Z}ms ease-out`,X.style.opacity="0",X.offsetWidth,$.style.opacity="0",X.style.opacity="1",setTimeout(Q,Z)})}function V7($={}){document.querySelectorAll("[data-stx-blur-up], .stx-img-placeholder img").forEach((Z)=>{P5(Z,$)})}function I$(){return`
4156
+ `.trim()}var TQ={duration:300,easing:"ease-out",removePlaceholder:!1,loadedClass:"stx-img-loaded",loadingClass:"stx-img-loading"};function v5($,X={}){let Z={...TQ,...X},Q=$.closest(".stx-img-placeholder");if(!Q){CQ($,Z);return}if(Q.style.setProperty("--stx-img-transition-duration",`${Z.duration}ms`),Q.style.setProperty("--stx-img-transition-easing",Z.easing),Z.loadingClass)Q.classList.add(Z.loadingClass);if($.complete&&$.naturalWidth>0)V7($,Q,Z);else $.addEventListener("load",()=>V7($,Q,Z),{once:!0}),$.addEventListener("error",()=>kQ($,Q,Z),{once:!0})}function CQ($,X){let Z=()=>{$.style.transition=`opacity ${X.duration}ms ${X.easing}`,$.style.opacity="1",$.classList.remove(X.loadingClass),$.classList.add(X.loadedClass)};if($.complete&&$.naturalWidth>0)Z();else $.style.opacity="0",$.classList.add(X.loadingClass),$.addEventListener("load",Z,{once:!0})}function V7($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);if(Z.loadedClass)X.classList.add(Z.loadedClass);if($.style.opacity="1",Z.removePlaceholder)setTimeout(()=>{X.style.backgroundImage="none"},Z.duration)}function kQ($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);X.classList.add("stx-img-error"),$.classList.add("stx-img-error")}function E7($,X){let Z=I$($),Q=X.getContext("2d");if(!Q)return;X.width=Z.w,X.height=Z.h;let Y=Q.createImageData(Z.w,Z.h);Y.data.set(Z.rgba),Q.putImageData(Y,0,0)}function I$($){let X=$[0]|$[1]<<8|$[2]<<16,Z=(X&63)/63,Q=(X>>6&63)/31.5-1,Y=(X>>12&63)/31.5-1,J=(X>>18&31)/31,G=X>>23!==0,W=$[3]|$[4]<<8,K=(W>>3&63)/63,_=(W>>9&63)/63,U=W>>15!==0,F=Math.max(3,U?G?5:7:G?5:5),z=Math.max(3,U?G?5:5:G?5:7),j=32,H=32,L=new Uint8ClampedArray(4096);for(let O=0;O<32;O++)for(let A=0;A<32;A++){let M=(O*32+A)*4,V=A/31,N=O/31,q=Z+(V-0.5)*J*0.5+(N-0.5)*J*0.5,I=Q*(1-V*0.3),E=Y*(1-N*0.3),w=q-0.6666666666666666*I,D=(3*q-w+E)/2,T=D-E;L[M]=Math.max(0,Math.min(255,Math.round(D*255))),L[M+1]=Math.max(0,Math.min(255,Math.round(T*255))),L[M+2]=Math.max(0,Math.min(255,Math.round(w*255))),L[M+3]=255}return{w:32,h:32,rgba:L}}function I7($){let X=I$($),Z=document.createElement("canvas");Z.width=X.w,Z.height=X.h;let Q=Z.getContext("2d");if(!Q)return"";let Y=Q.createImageData(X.w,X.h);return Y.data.set(X.rgba),Q.putImageData(Y,0,0),Z.toDataURL("image/png")}function R7($){let X=atob($),Z=new Uint8Array(X.length);for(let Q=0;Q<X.length;Q++)Z[Q]=X.charCodeAt(Q);return Z}function D7($,X,Z=300){return new Promise((Q)=>{$.style.transition=`opacity ${Z}ms ease-out`,X.style.transition=`opacity ${Z}ms ease-out`,X.style.opacity="0",X.offsetWidth,$.style.opacity="0",X.style.opacity="1",setTimeout(Q,Z)})}function w7($={}){document.querySelectorAll("[data-stx-blur-up], .stx-img-placeholder img").forEach((Z)=>{v5(Z,$)})}function R$(){return`
4145
4157
  (function() {
4146
4158
  'use strict';
4147
4159
 
@@ -4203,7 +4215,7 @@ else {
4203
4215
  window.STX.initBlurUp = initBlurUp;
4204
4216
  window.STX.initAllBlurUp = init;
4205
4217
  })();
4206
- `.trim()}function R$(){return`
4218
+ `.trim()}function D$(){return`
4207
4219
  .stx-img-placeholder {
4208
4220
  position: relative;
4209
4221
  overflow: hidden;
@@ -4240,7 +4252,7 @@ else {
4240
4252
  .stx-img-error {
4241
4253
  opacity: 0.5;
4242
4254
  }
4243
- `.trim()}var RQ={method:"POST",fieldName:"file",timeout:60000,withCredentials:!1};function b5($,X={}){if(X.maxSize&&$.size>X.maxSize)return{valid:!1,error:`File size (${E7($.size)}) exceeds maximum (${E7(X.maxSize)})`,code:"FILE_TOO_LARGE"};if(X.accept&&X.accept.length>0){if(!X.accept.some((Q)=>{if(Q.endsWith("/*")){let Y=Q.slice(0,-1);return $.type.startsWith(Y)}return $.type===Q}))return{valid:!1,error:`File type "${$.type}" is not allowed`,code:"INVALID_TYPE"}}return{valid:!0}}function E7($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(2)} MB`}async function y5($,X,Z){let Q={...RQ,...X},Y=b5($,Q);if(!Y.valid)return{success:!1,error:Y.error,name:$.name,size:$.size,type:$.type};if(Q.chunkSize&&$.size>Q.chunkSize)return wQ($,Q,Z);return DQ($,Q,Z)}async function DQ($,X,Z){return new Promise((Q)=>{let Y=new XMLHttpRequest,J=Date.now(),G=0,W=J;Y.upload.addEventListener("progress",(_)=>{if(_.lengthComputable&&Z){let U=Date.now(),F=(U-W)/1000,z=_.loaded-G,j=F>0?z/F:0,H=_.total-_.loaded,L=j>0?H/j*1000:void 0;G=_.loaded,W=U,Z({file:$,loaded:_.loaded,total:_.total,percent:Math.round(_.loaded/_.total*100),speed:j,timeRemaining:L})}}),Y.addEventListener("load",()=>{if(Y.status>=200&&Y.status<300)try{let _=JSON.parse(Y.responseText);Q({success:!0,url:_.url,id:_.id,name:$.name,size:$.size,type:$.type,data:_})}catch{Q({success:!0,name:$.name,size:$.size,type:$.type})}else Q({success:!1,error:`Upload failed with status ${Y.status}`,name:$.name,size:$.size,type:$.type})}),Y.addEventListener("error",()=>{Q({success:!1,error:"Network error during upload",name:$.name,size:$.size,type:$.type})}),Y.addEventListener("timeout",()=>{Q({success:!1,error:"Upload timed out",name:$.name,size:$.size,type:$.type})});let K=new FormData;if(K.append(X.fieldName||"file",$),X.formData)for(let[_,U]of Object.entries(X.formData))K.append(_,U);if(Y.open(X.method||"POST",X.endpoint),Y.timeout=X.timeout||60000,Y.withCredentials=X.withCredentials||!1,X.headers)for(let[_,U]of Object.entries(X.headers))Y.setRequestHeader(_,U);Y.send(K)})}async function wQ($,X,Z){let Q=X.chunkSize,Y=Math.ceil($.size/Q),J=0,G;for(let W=0;W<Y;W++){let K=W*Q,_=Math.min(K+Q,$.size),U=$.slice(K,_),F=new FormData;if(F.append(X.fieldName||"file",U,$.name),F.append("chunk",String(W)),F.append("totalChunks",String(Y)),F.append("fileName",$.name),F.append("fileSize",String($.size)),F.append("fileType",$.type),G)F.append("uploadId",G);if(X.formData)for(let[z,j]of Object.entries(X.formData))F.append(z,j);try{let z=await fetch(X.endpoint,{method:X.method||"POST",headers:X.headers,credentials:X.withCredentials?"include":"same-origin",body:F});if(!z.ok)return{success:!1,error:`Chunk ${W+1}/${Y} failed with status ${z.status}`,name:$.name,size:$.size,type:$.type};let j=await z.json();if(!G&&j.uploadId)G=j.uploadId;if(J=_,Z)Z({file:$,loaded:J,total:$.size,percent:Math.round(J/$.size*100),chunk:W+1,totalChunks:Y});if(W===Y-1)return{success:!0,url:j.url,id:j.id||G,name:$.name,size:$.size,type:$.type,data:j}}catch(z){return{success:!1,error:`Chunk upload failed: ${z}`,name:$.name,size:$.size,type:$.type}}}return{success:!1,error:"Unknown error during chunked upload",name:$.name,size:$.size,type:$.type}}async function I7($,X,Z,Q){let Y=[];for(let J of $){let G=await y5(J,X,(W)=>{if(Z)Z(J,W)});if(Y.push(G),Q)Q(J,G)}return Y}function R7($,X=200){return new Promise((Z,Q)=>{if(!$.type.startsWith("image/")){Q(Error("File is not an image"));return}let Y=new FileReader;Y.onload=(J)=>{let G=new Image;G.onload=()=>{let W=document.createElement("canvas"),K=G.width,_=G.height;if(K>X||_>X)if(K>_)_=Math.round(_*X/K),K=X;else K=Math.round(K*X/_),_=X;W.width=K,W.height=_;let U=W.getContext("2d");if(U)U.drawImage(G,0,0,K,_),Z(W.toDataURL("image/jpeg",0.7));else Q(Error("Could not get canvas context"))},G.onerror=()=>Q(Error("Could not load image")),G.src=J.target?.result},Y.onerror=()=>Q(Error("Could not read file")),Y.readAsDataURL($)})}function D7($){return new Promise((X,Z)=>{if(!$.type.startsWith("video/")){Z(Error("File is not a video"));return}let Q=document.createElement("video"),Y=document.createElement("canvas");Q.preload="metadata",Q.muted=!0,Q.playsInline=!0,Q.onloadeddata=()=>{Q.currentTime=0.1},Q.onseeked=()=>{Y.width=Q.videoWidth,Y.height=Q.videoHeight;let J=Y.getContext("2d");if(J)J.drawImage(Q,0,0),X(Y.toDataURL("image/jpeg",0.7));else Z(Error("Could not get canvas context"));URL.revokeObjectURL(Q.src)},Q.onerror=()=>{URL.revokeObjectURL(Q.src),Z(Error("Could not load video"))},Q.src=URL.createObjectURL($)})}function D$(){return`
4255
+ `.trim()}var xQ={method:"POST",fieldName:"file",timeout:60000,withCredentials:!1};function g5($,X={}){if(X.maxSize&&$.size>X.maxSize)return{valid:!1,error:`File size (${T7($.size)}) exceeds maximum (${T7(X.maxSize)})`,code:"FILE_TOO_LARGE"};if(X.accept&&X.accept.length>0){if(!X.accept.some((Q)=>{if(Q.endsWith("/*")){let Y=Q.slice(0,-1);return $.type.startsWith(Y)}return $.type===Q}))return{valid:!1,error:`File type "${$.type}" is not allowed`,code:"INVALID_TYPE"}}return{valid:!0}}function T7($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(2)} MB`}async function f5($,X,Z){let Q={...xQ,...X},Y=g5($,Q);if(!Y.valid)return{success:!1,error:Y.error,name:$.name,size:$.size,type:$.type};if(Q.chunkSize&&$.size>Q.chunkSize)return PQ($,Q,Z);return SQ($,Q,Z)}async function SQ($,X,Z){return new Promise((Q)=>{let Y=new XMLHttpRequest,J=Date.now(),G=0,W=J;Y.upload.addEventListener("progress",(_)=>{if(_.lengthComputable&&Z){let U=Date.now(),F=(U-W)/1000,z=_.loaded-G,j=F>0?z/F:0,H=_.total-_.loaded,L=j>0?H/j*1000:void 0;G=_.loaded,W=U,Z({file:$,loaded:_.loaded,total:_.total,percent:Math.round(_.loaded/_.total*100),speed:j,timeRemaining:L})}}),Y.addEventListener("load",()=>{if(Y.status>=200&&Y.status<300)try{let _=JSON.parse(Y.responseText);Q({success:!0,url:_.url,id:_.id,name:$.name,size:$.size,type:$.type,data:_})}catch{Q({success:!0,name:$.name,size:$.size,type:$.type})}else Q({success:!1,error:`Upload failed with status ${Y.status}`,name:$.name,size:$.size,type:$.type})}),Y.addEventListener("error",()=>{Q({success:!1,error:"Network error during upload",name:$.name,size:$.size,type:$.type})}),Y.addEventListener("timeout",()=>{Q({success:!1,error:"Upload timed out",name:$.name,size:$.size,type:$.type})});let K=new FormData;if(K.append(X.fieldName||"file",$),X.formData)for(let[_,U]of Object.entries(X.formData))K.append(_,U);if(Y.open(X.method||"POST",X.endpoint),Y.timeout=X.timeout||60000,Y.withCredentials=X.withCredentials||!1,X.headers)for(let[_,U]of Object.entries(X.headers))Y.setRequestHeader(_,U);Y.send(K)})}async function PQ($,X,Z){let Q=X.chunkSize,Y=Math.ceil($.size/Q),J=0,G;for(let W=0;W<Y;W++){let K=W*Q,_=Math.min(K+Q,$.size),U=$.slice(K,_),F=new FormData;if(F.append(X.fieldName||"file",U,$.name),F.append("chunk",String(W)),F.append("totalChunks",String(Y)),F.append("fileName",$.name),F.append("fileSize",String($.size)),F.append("fileType",$.type),G)F.append("uploadId",G);if(X.formData)for(let[z,j]of Object.entries(X.formData))F.append(z,j);try{let z=await fetch(X.endpoint,{method:X.method||"POST",headers:X.headers,credentials:X.withCredentials?"include":"same-origin",body:F});if(!z.ok)return{success:!1,error:`Chunk ${W+1}/${Y} failed with status ${z.status}`,name:$.name,size:$.size,type:$.type};let j=await z.json();if(!G&&j.uploadId)G=j.uploadId;if(J=_,Z)Z({file:$,loaded:J,total:$.size,percent:Math.round(J/$.size*100),chunk:W+1,totalChunks:Y});if(W===Y-1)return{success:!0,url:j.url,id:j.id||G,name:$.name,size:$.size,type:$.type,data:j}}catch(z){return{success:!1,error:`Chunk upload failed: ${z}`,name:$.name,size:$.size,type:$.type}}}return{success:!1,error:"Unknown error during chunked upload",name:$.name,size:$.size,type:$.type}}async function C7($,X,Z,Q){let Y=[];for(let J of $){let G=await f5(J,X,(W)=>{if(Z)Z(J,W)});if(Y.push(G),Q)Q(J,G)}return Y}function k7($,X=200){return new Promise((Z,Q)=>{if(!$.type.startsWith("image/")){Q(Error("File is not an image"));return}let Y=new FileReader;Y.onload=(J)=>{let G=new Image;G.onload=()=>{let W=document.createElement("canvas"),K=G.width,_=G.height;if(K>X||_>X)if(K>_)_=Math.round(_*X/K),K=X;else K=Math.round(K*X/_),_=X;W.width=K,W.height=_;let U=W.getContext("2d");if(U)U.drawImage(G,0,0,K,_),Z(W.toDataURL("image/jpeg",0.7));else Q(Error("Could not get canvas context"))},G.onerror=()=>Q(Error("Could not load image")),G.src=J.target?.result},Y.onerror=()=>Q(Error("Could not read file")),Y.readAsDataURL($)})}function x7($){return new Promise((X,Z)=>{if(!$.type.startsWith("video/")){Z(Error("File is not a video"));return}let Q=document.createElement("video"),Y=document.createElement("canvas");Q.preload="metadata",Q.muted=!0,Q.playsInline=!0,Q.onloadeddata=()=>{Q.currentTime=0.1},Q.onseeked=()=>{Y.width=Q.videoWidth,Y.height=Q.videoHeight;let J=Y.getContext("2d");if(J)J.drawImage(Q,0,0),X(Y.toDataURL("image/jpeg",0.7));else Z(Error("Could not get canvas context"));URL.revokeObjectURL(Q.src)},Q.onerror=()=>{URL.revokeObjectURL(Q.src),Z(Error("Could not load video"))},Q.src=URL.createObjectURL($)})}function w$(){return`
4244
4256
  (function() {
4245
4257
  'use strict';
4246
4258
 
@@ -4308,18 +4320,18 @@ else {
4308
4320
  return { valid: true };
4309
4321
  };
4310
4322
  })();
4311
- `.trim()}function w7(){return{script:[V$(),I$(),D$()].join(`
4323
+ `.trim()}function S7(){return{script:[E$(),R$(),w$()].join(`
4312
4324
 
4313
- `),css:R$()}}function TQ(){let{script:$,css:X}=w7(),Z=$.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim(),Q=X.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim();return{script:Z,css:Q}}var d_={enabled:!0,image:{enabled:!0,defaultWidths:[320,480,640,768,1024,1280,1536,1920],defaultFormats:["avif","webp","jpeg"],defaultQuality:80,placeholderStrategy:"thumbhash",lazyByDefault:!0,enableDpr:!0,defaultDpr:[1,2,3]},video:{enabled:!0,lazyByDefault:!0,defaultControls:!0},upload:{enabled:!0,maxSize:10485760,allowedTypes:["image/*","video/*","audio/*","application/pdf"],maxConcurrent:3},protected:{enabled:!0,expirationSeconds:3600,batchSize:10},cache:{enabled:!0,directory:".stx/media-cache",maxAge:30,maxSize:500}};import w$ from"fs";import X1 from"path";async function T7($,X={},Z={}){let Q=await Bun.file($).text(),Y=Q.match(/<script\s+server\s*>([\s\S]*?)<\/script>/i),J=Y?Y[1]:"",G=Y?Q.replace(/<script\s+server\s*>[\s\S]*?<\/script>/i,""):Q;G=G.replace(/<script\s+client\s*>/gi,"<script>");let W={__filename:$,__dirname:X1.dirname($),props:X,...X};if(J)await M0(J,W,$);let K={...T$,...Z};return await V0(G,W,$,K,new Set)}async function CQ($){let X=performance.now(),Z={success:!0,views:[],errors:[],duration:0},{viewsDir:Q,outputDir:Y,componentsDir:J=X1.join(Q,"components"),layoutsDir:G=X1.join(Q,"layouts"),partialsDir:W=X1.join(Q,"partials"),globalProps:K={},placeholders:_={},views:U,debug:F=!1,generateManifest:z=!0}=$;if(F)console.log("Building STX views..."),console.log(` Source: ${Q}`),console.log(` Output: ${Y}`);w$.mkdirSync(Y,{recursive:!0});let j={componentsDir:J,layoutsDir:G,partialsDir:W,debug:F},H;if(U&&U.length>0)H=U;else H=w$.readdirSync(Q).filter((O)=>O.endsWith(".stx")).map((O)=>({input:O}));for(let L of H){let O=X1.join(Q,L.input),A=L.output||L.input.replace(/\.stx$/,".html"),V=X1.join(Y,A);if(F)console.log(` Building ${L.input}...`);try{let E={...K,...L.props,..._},q=await T7(O,E,j);await Bun.write(V,q),Z.views.push(A)}catch(E){let q=E instanceof Error?E.message:String(E);if(Z.errors.push({file:L.input,error:q}),Z.success=!1,F)console.error(` Error: ${q}`)}}if(z){let L={buildTime:new Date().toISOString(),views:Z.views,placeholders:_,errors:Z.errors.length>0?Z.errors:void 0};await Bun.write(X1.join(Y,"manifest.json"),JSON.stringify(L,null,2))}if(Z.duration=performance.now()-X,F)if(Z.success)console.log(`
4325
+ `),css:D$()}}function bQ(){let{script:$,css:X}=S7(),Z=$.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim(),Q=X.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim();return{script:Z,css:Q}}var i_={enabled:!0,image:{enabled:!0,defaultWidths:[320,480,640,768,1024,1280,1536,1920],defaultFormats:["avif","webp","jpeg"],defaultQuality:80,placeholderStrategy:"thumbhash",lazyByDefault:!0,enableDpr:!0,defaultDpr:[1,2,3]},video:{enabled:!0,lazyByDefault:!0,defaultControls:!0},upload:{enabled:!0,maxSize:10485760,allowedTypes:["image/*","video/*","audio/*","application/pdf"],maxConcurrent:3},protected:{enabled:!0,expirationSeconds:3600,batchSize:10},cache:{enabled:!0,directory:".stx/media-cache",maxAge:30,maxSize:500}};import T$ from"fs";import X1 from"path";async function P7($,X={},Z={}){let Q=await Bun.file($).text(),Y=Q.match(/<script\s+server\s*>([\s\S]*?)<\/script>/i),J=Y?Y[1]:"",G=Y?Q.replace(/<script\s+server\s*>[\s\S]*?<\/script>/i,""):Q;G=G.replace(/<script\s+client\s*>/gi,"<script>");let W={__filename:$,__dirname:X1.dirname($),props:X,...X};if(J)await M0(J,W,$);let K={...C$,...Z};return await V0(G,W,$,K,new Set)}async function yQ($){let X=performance.now(),Z={success:!0,views:[],errors:[],duration:0},{viewsDir:Q,outputDir:Y,componentsDir:J=X1.join(Q,"components"),layoutsDir:G=X1.join(Q,"layouts"),partialsDir:W=X1.join(Q,"partials"),globalProps:K={},placeholders:_={},views:U,debug:F=!1,generateManifest:z=!0}=$;if(F)console.log("Building STX views..."),console.log(` Source: ${Q}`),console.log(` Output: ${Y}`);T$.mkdirSync(Y,{recursive:!0});let j={componentsDir:J,layoutsDir:G,partialsDir:W,debug:F},H;if(U&&U.length>0)H=U;else H=T$.readdirSync(Q).filter((O)=>O.endsWith(".stx")).map((O)=>({input:O}));for(let L of H){let O=X1.join(Q,L.input),A=L.output||L.input.replace(/\.stx$/,".html"),M=X1.join(Y,A);if(F)console.log(` Building ${L.input}...`);try{let V={...K,...L.props,..._},N=await P7(O,V,j);await Bun.write(M,N),Z.views.push(A)}catch(V){let N=V instanceof Error?V.message:String(V);if(Z.errors.push({file:L.input,error:N}),Z.success=!1,F)console.error(` Error: ${N}`)}}if(z){let L={buildTime:new Date().toISOString(),views:Z.views,placeholders:_,errors:Z.errors.length>0?Z.errors:void 0};await Bun.write(X1.join(Y,"manifest.json"),JSON.stringify(L,null,2))}if(Z.duration=performance.now()-X,F)if(Z.success)console.log(`
4314
4326
  \u2705 Built ${Z.views.length} views in ${Z.duration.toFixed(0)}ms`);else console.log(`
4315
- \u26A0\uFE0F Built ${Z.views.length} views with ${Z.errors.length} errors`);return Z}function Z9($,X){let Z=w$.watch($.viewsDir,{recursive:!0},async(Q,Y)=>{if(!Y)return;if(Y.endsWith(".stx")||Y.endsWith(".ts")||Y.endsWith(".js")){if($.debug)console.log(`
4316
- File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=>Z.close()}}async function Q9($,X={},Z={}){let Q={...Z,skipDefaultSeoTags:!0,skipSignalsRuntime:!0},Y=await T7($,X,Q);Y=await kQ(Y),Y=Y.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),Y=Y.replace(/<style\b([^>]*)>[\s\S]*?<\/style>/gi,(G,W)=>/\bdata-(?:css=["']generated["']|stx-)/i.test(W)?"":G),Y=Y.replace(/<!--\s*stx SEO Tags\s*-->/gi,""),Y=Y.replace(/\n\s*\n\s*\n/g,`
4327
+ \u26A0\uFE0F Built ${Z.views.length} views with ${Z.errors.length} errors`);return Z}function K9($,X){let Z=T$.watch($.viewsDir,{recursive:!0},async(Q,Y)=>{if(!Y)return;if(Y.endsWith(".stx")||Y.endsWith(".ts")||Y.endsWith(".js")){if($.debug)console.log(`
4328
+ File changed: ${Y}, rebuilding...`);let J=await yQ($);X?.(J)}});return{close:()=>Z.close()}}async function _9($,X={},Z={}){let Q={...Z,skipDefaultSeoTags:!0,skipSignalsRuntime:!0},Y=await P7($,X,Q);Y=await vQ(Y),Y=Y.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),Y=Y.replace(/<style\b([^>]*)>[\s\S]*?<\/style>/gi,(G,W)=>/\bdata-(?:css=["']generated["']|stx-)/i.test(W)?"":G),Y=Y.replace(/<!--\s*stx SEO Tags\s*-->/gi,""),Y=Y.replace(/\n\s*\n\s*\n/g,`
4317
4329
 
4318
- `).trim();let J=PQ(Y);return{html:Y,text:J}}async function kQ($){try{let{generateCss:X,extractClassNames:Z}=await import("./chunk-jnbg3e4r.js");if(Z($).size===0)return $;let Y=await X($);if(!Y)return $;let J=xQ(Y);if(J.size===0)return $;return $.replace(/(<[a-z][a-z0-9]*)((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s+)class\s*=\s*"([^"]*)"((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s*)(\/?>)/gi,(G,W,K,_,U,F)=>{let z=_.split(/\s+/).filter(Boolean),j=[];for(let A of z){let V=J.get(A);if(V)j.push(V)}if(j.length===0)return`${W}${K}class="${_}"${U}${F}`;let H=j.join("; "),O=`${K}${U}`.match(/style\s*=\s*"([^"]*)"/);if(O){let A=`${H}; ${O[1]}`,V=K.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`),E=U.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`);return`${W}${V}class="${_}"${E}${F}`}return`${W}${K}class="${_}" style="${H}"${U}${F}`})}catch{return $}}function xQ($){let X=new Map,Z=/\.([a-zA-Z0-9_-]+(?:\\:[a-zA-Z0-9_-]+)*)\s*\{([^}]+)\}/g,Q=Z.exec($);while(Q!==null){let Y=Q[1].replace(/\\/g,""),J=Q[2].split(";").map((G)=>G.trim()).filter(Boolean).join("; ");if(J)X.set(Y,J);Q=Z.exec($)}return X}function SQ($,X){let Z=X.replace(/<[^>]*>/g,"").replace(/\s+/g," ").trim(),Q=$.replace(/&amp;/g,"&").trim();if(!Q||Q.startsWith("#")||/^javascript:/i.test(Q))return Z;let Y=Q.replace(/^mailto:/i,"").replace(/^https?:\/\//i,"").replace(/\/$/,"");if(!Z)return Q.replace(/^mailto:/i,"");if(Z.replace(/^https?:\/\//i,"").replace(/\/$/,"")===Y)return Z;return`${Z} (${Q.replace(/^mailto:/i,"")})`}function PQ($){return $.replace(/<head\b[\s\S]*?<\/head>/gi,"").replace(/<(style|script)\b[\s\S]*?<\/\1>/gi,"").replace(/<(div|span|p)\b[^>]*\bstyle="[^"]*display:\s*none[^"]*"[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<a\b[^>]*?\bhref\s*=\s*(?:"([^"]*)"|'([^']*)')[^>]*>([\s\S]*?)<\/a>/gi,(X,Z,Q,Y)=>SQ(Z??Q??"",Y)).replace(/<br\s*\/?>/gi,`
4330
+ `).trim();let J=hQ(Y);return{html:Y,text:J}}async function vQ($){try{let{generateCss:X,extractClassNames:Z}=await import("./chunk-864m3xp2.js");if(Z($).size===0)return $;let Y=await X($);if(!Y)return $;let J=gQ(Y);if(J.size===0)return $;return $.replace(/(<[a-z][a-z0-9]*)((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s+)class\s*=\s*"([^"]*)"((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s*)(\/?>)/gi,(G,W,K,_,U,F)=>{let z=_.split(/\s+/).filter(Boolean),j=[];for(let A of z){let M=J.get(A);if(M)j.push(M)}if(j.length===0)return`${W}${K}class="${_}"${U}${F}`;let H=j.join("; "),O=`${K}${U}`.match(/style\s*=\s*"([^"]*)"/);if(O){let A=`${H}; ${O[1]}`,M=K.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`),V=U.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`);return`${W}${M}class="${_}"${V}${F}`}return`${W}${K}class="${_}" style="${H}"${U}${F}`})}catch{return $}}function gQ($){let X=new Map,Z=/\.([a-zA-Z0-9_-]+(?:\\:[a-zA-Z0-9_-]+)*)\s*\{([^}]+)\}/g,Q=Z.exec($);while(Q!==null){let Y=Q[1].replace(/\\/g,""),J=Q[2].split(";").map((G)=>G.trim()).filter(Boolean).join("; ");if(J)X.set(Y,J);Q=Z.exec($)}return X}function fQ($,X){let Z=X.replace(/<[^>]*>/g,"").replace(/\s+/g," ").trim(),Q=$.replace(/&amp;/g,"&").trim();if(!Q||Q.startsWith("#")||/^javascript:/i.test(Q))return Z;let Y=Q.replace(/^mailto:/i,"").replace(/^https?:\/\//i,"").replace(/\/$/,"");if(!Z)return Q.replace(/^mailto:/i,"");if(Z.replace(/^https?:\/\//i,"").replace(/\/$/,"")===Y)return Z;return`${Z} (${Q.replace(/^mailto:/i,"")})`}function hQ($){return $.replace(/<head\b[\s\S]*?<\/head>/gi,"").replace(/<(style|script)\b[\s\S]*?<\/\1>/gi,"").replace(/<(div|span|p)\b[^>]*\bstyle="[^"]*display:\s*none[^"]*"[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<a\b[^>]*?\bhref\s*=\s*(?:"([^"]*)"|'([^']*)')[^>]*>([\s\S]*?)<\/a>/gi,(X,Z,Q,Y)=>fQ(Z??Q??"",Y)).replace(/<br\s*\/?>/gi,`
4319
4331
  `).replace(/<\/(p|div|h[1-6]|li|tr)>/gi,`
4320
4332
  `).replace(/<\/td>/gi,"\t").replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&copy;/g,"(c)").replace(/&middot;/g,"-").replace(/\n\s*\n\s*\n/g,`
4321
4333
 
4322
- `).trim()}function bQ($){return $.replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function yQ($){let X={};for(let Z of Object.keys($))if(!Z.startsWith("__"))X[Z]=$[Z];return X}function J9($){let{template:X,context:Z={},title:Q="stx App"}=$,Y=yQ(Z),J=bQ(JSON.stringify(Y));return`<!DOCTYPE html>
4334
+ `).trim()}function dQ($){return $.replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function uQ($){let X={};for(let Z of Object.keys($))if(!Z.startsWith("__"))X[Z]=$[Z];return X}function B9($){let{template:X,context:Z={},title:Q="stx App"}=$,Y=uQ(Z),J=dQ(JSON.stringify(Y));return`<!DOCTYPE html>
4323
4335
  <html lang="en">
4324
4336
  <head>
4325
4337
  <meta charset="UTF-8">
@@ -4339,8 +4351,8 @@ File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=
4339
4351
  }
4340
4352
  </script>
4341
4353
  </body>
4342
- </html>`}var A1=Symbol.for("stx.Fragment"),vQ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),k7=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]),x7={className:"class",htmlFor:"for",tabIndex:"tabindex",autoFocus:"autofocus",autoPlay:"autoplay",crossOrigin:"crossorigin",dateTime:"datetime",encType:"enctype",formAction:"formaction",formEncType:"formenctype",formMethod:"formmethod",formNoValidate:"formnovalidate",formTarget:"formtarget",frameBorder:"frameborder",hrefLang:"hreflang",httpEquiv:"http-equiv",inputMode:"inputmode",maxLength:"maxlength",mediaGroup:"mediagroup",minLength:"minlength",noModule:"nomodule",noValidate:"novalidate",playsInline:"playsinline",readOnly:"readonly",rowSpan:"rowspan",colSpan:"colspan",srcDoc:"srcdoc",srcLang:"srclang",srcSet:"srcset",useMap:"usemap"};function gQ($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function v5($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function S7($){if($==null||typeof $==="boolean")return[];if(!Array.isArray($))return[C7($)];return $.flat(1/0).map(C7).filter((X)=>X!=="")}function C7($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return $;if(typeof $==="number")return String($);return $}function q1($,X,Z){let{children:Q,ref:Y,key:J,...G}=X||{};return{type:$,props:Object.keys(G).length>0?G:null,children:S7(Q),key:Z??J??void 0,ref:Y??void 0}}var fQ=q1,hQ=q1;function P7($){return Object.entries($).filter(([,X])=>X!=null&&X!==!1).map(([X,Z])=>{let Q=X.replace(/[A-Z]/g,(J)=>`-${J.toLowerCase()}`),Y=typeof Z==="number"&&!Q.startsWith("--")&&Q!=="opacity"&&Q!=="z-index"&&Q!=="flex-grow"&&Q!=="flex-shrink"&&Q!=="order"&&Q!=="font-weight"&&Q!=="line-height"?`${Z}px`:String(Z);return`${Q}: ${Y}`}).join("; ")}function g5($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter(Boolean).map(g5).join(" ");if(typeof $==="object"&&$!==null)return Object.entries($).filter(([,X])=>X).map(([X])=>X).join(" ");return""}function dQ($){if(!$)return"";let X=[];for(let[Z,Q]of Object.entries($)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;if(Z.startsWith("on")&&typeof Q==="function")continue;let Y=x7[Z]||Z;if(Y==="class"||Y==="className"){let J=g5(Q);if(J)X.push(` class="${v5(J)}"`);continue}if(Y==="style"){let J=typeof Q==="string"?Q:P7(Q);if(J)X.push(` style="${v5(J)}"`);continue}if(k7.has(Y)){if(Q)X.push(` ${Y}`);continue}if(Q!=null&&Q!==!1)X.push(` ${Y}="${v5(String(Q))}"`)}return X.join("")}function O1($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return gQ($);if(typeof $==="number")return String($);if(Array.isArray($))return $.map(O1).join("");if($.type===A1)return $.children.map(O1).join("");if(typeof $.type==="function"){let J=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});return O1(J)}let X=$.type,Z=dQ($.props),Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)return`<${X}${Z}>${Q}</${X}>`;if(vQ.has(X))return`<${X}${Z}>`;let Y=$.children.map(O1).join("");return`<${X}${Z}>${Y}</${X}>`}function uQ($){return new ReadableStream({start(X){X.enqueue(O1($)),X.close()}})}function mQ($,X){if(!X)return;for(let[Z,Q]of Object.entries(X)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;let Y=x7[Z]||Z;if(Z.startsWith("on")&&typeof Q==="function"){let J=Z.slice(2).toLowerCase();$.addEventListener(J,Q);continue}if(Y==="class"||Y==="className"){let J=g5(Q);if(J)$.setAttribute("class",J);continue}if(Y==="style"){let J=typeof Q==="string"?Q:P7(Q);if(J)$.setAttribute("style",J);continue}if(k7.has(Y)){if(Q)$.setAttribute(Y,"");continue}if(Q!=null&&Q!==!1)$.setAttribute(Y,String(Q))}}function p1($,X){if($==null||typeof $==="boolean")return;if(typeof $==="string"){X.appendChild(document.createTextNode($));return}if(typeof $==="number"){X.appendChild(document.createTextNode(String($)));return}if(Array.isArray($)){for(let Y of $)p1(Y,X);return}if($.type===A1){for(let Y of $.children)p1(Y,X);return}if(typeof $.type==="function"){let Y=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});p1(Y,X);return}let Z=document.createElement($.type);mQ(Z,$.props);let Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)Z.innerHTML=Q;else for(let Y of $.children)p1(Y,Z);if($.ref){if(typeof $.ref==="function")$.ref(Z)}X.appendChild(Z)}function pQ($){if($.when)return q1(A1,{children:$.children});return $.fallback??null}function cQ($){let X=$.each;if(!X||X.length===0)return $.fallback??null;let Z=Array.isArray($.children)?$.children[0]:$.children,Q=X.map((Y,J)=>Z(Y,J));return q1(A1,{children:Q})}function lQ($){return q1(A1,{children:$.children})}function iQ($,X,...Z){let{key:Q,ref:Y,...J}=X||{};return{type:$,props:Object.keys(J).length>0?J:{},children:S7(Z.length===1?Z[0]:Z),key:Q??void 0,ref:Y??void 0}}function b7($,X){let Z=new Set,Q=new Map,Y=new Map,J={globalProperties:{},performance:!1,compilerOptions:{}},G={config:J,_components:Q,_directives:Y,_installedPlugins:Z,use(W,...K){if(Z.has(W))return G;if(Z.add(W),typeof W==="function")W(G,...K);else if(typeof W.install==="function")W.install(G,...K);return G},provide(W,K){return f5(W,K),G},component(W,K){if(!K)return Q.get(W);return Q.set(W,K),G},directive(W,K){if(!K)return Y.get(W);return Y.set(W,K),G},mount(W){if(typeof document<"u"){let K=globalThis.__stx_globals||(globalThis.__stx_globals={});Object.assign(K,J.globalProperties),document.querySelectorAll("[v-cloak]").forEach((_)=>{_.removeAttribute("v-cloak")})}return G},unmount(){Q.clear(),Y.clear(),Z.clear()}};return G}function aQ($){return class extends HTMLElement{_component;_shadow;constructor(){super();this._shadow=this.attachShadow({mode:"open"}),this._component=$}connectedCallback(){if(this._component?.render){let X=this._component.render();if(typeof X==="string")this._shadow.innerHTML=X}else if(this._component?.template)this._shadow.innerHTML=this._component.template;else if(typeof this._component==="string")this._shadow.innerHTML=this._component}disconnectedCallback(){this._shadow.innerHTML=""}}}function rQ($,...X){let Z=X[0]??{},Q=new Set,Y=String($).replace(/(\/)?:([^/?*]+)([?*])?/g,(W,K,_,U)=>{let F=Z[_];if(Q.add(_),F===void 0||F===null||F===""){if(U==="?")return"";return W}let z=Array.isArray(F)?F.map((j)=>encodeURIComponent(String(j))).join("/"):U==="*"?String(F).split("/").map((j)=>encodeURIComponent(j)).join("/"):encodeURIComponent(String(F));return`${K??""}${z}`}),J=Object.keys(Z).filter((W)=>!Q.has(W));if(J.length===0)return Y;let G=new URLSearchParams;for(let W of J){let K=Z[W];if(Array.isArray(K))K.forEach((_)=>G.append(W,String(_)));else if(K!==void 0&&K!==null)G.set(W,String(K))}return`${Y}?${G.toString()}`}import N1 from"fs";import l0 from"path";function y7($){try{return N1.statSync($).mtimeMs}catch{return null}}function C$($,X){let Z=Math.max(0,Math.round((X-$)/1000));if(Z<60)return`${Z}s ago`;if(Z<3600)return`${Math.round(Z/60)}m ago`;return`${Math.round(Z/3600)}h ago`}function sQ($,X){try{return globalThis.Bun?.resolveSync($,X)??null}catch{return null}}function v7($,X="stx"){let Z=l0.resolve($);for(let Q=0;Q<10;Q++){let Y=l0.join(Z,"pantry","@stacksjs",X);if(N1.existsSync(Y))return Y;let J=l0.dirname(Z);if(J===Z)break;Z=J}return null}async function nQ($={}){let X=$.cwd?l0.resolve($.cwd):process.cwd(),Z=$.resolve??sQ,Q=Date.now(),Y=[],J=Z("@stacksjs/stx",X);Y.push(J?{name:"@stacksjs/stx resolves to",status:"ok",detail:J}:{name:"@stacksjs/stx resolves to",status:"info",detail:"not resolvable from here (running inside the stx repo, or not installed)"});let G=Z("bun-plugin-stx",X);if(G)Y.push({name:"bun-plugin-stx resolves to",status:"ok",detail:G});let W=v7(X,"stx");if(!W)Y.push({name:"pantry",status:"info",detail:"no pantry/@stacksjs/stx found \u2014 standard install (nothing to rebuild)"});else{let K=l0.join(W,"src/signals.ts"),_=[l0.join(W,"dist/index.js"),l0.join(W,"dist/signals.js")].find((H)=>N1.existsSync(H))||null,U=y7(K),F=_?y7(_):null;if(U==null)Y.push({name:"pantry dist freshness",status:"info",detail:`found pantry at ${W} but no src/signals.ts to compare`});else if(F==null)Y.push({name:"pantry dist freshness",status:"error",detail:"pantry has src but no built dist \u2014 the dev server will resolve nothing (or a stale copy elsewhere)",fix:`cd ${W} && bun build.ts`});else if(F<U){let H=Math.round((U-F)/1000);Y.push({name:"pantry dist freshness",status:"error",detail:`dist (${C$(F,Q)}) is OLDER than src/signals.ts (${C$(U,Q)}) by ${H}s \u2014 your edit isn't built`,fix:`cd ${W} && bun build.ts`})}else Y.push({name:"pantry dist freshness",status:"ok",detail:`dist rebuilt after src (src ${C$(U,Q)}, dist ${C$(F,Q)})`});let z=l0.join(X,"node_modules/@stacksjs/stx"),j=null;try{j=N1.lstatSync(z)}catch{j=null}if(!j)Y.push({name:"node_modules \u2192 pantry",status:"info",detail:"node_modules/@stacksjs/stx not present (not installed here)"});else if(j.isSymbolicLink()){let H=null;try{H=N1.realpathSync(z)}catch{}let L=(()=>{try{return N1.realpathSync(W)}catch{return W}})();Y.push(H===L?{name:"node_modules \u2192 pantry",status:"ok",detail:"symlinked to pantry"}:{name:"node_modules \u2192 pantry",status:"warn",detail:`symlinked to ${H||"(dangling)"}, not pantry`})}else Y.push({name:"node_modules \u2192 pantry",status:"warn",detail:"is a real directory, NOT symlinked to pantry \u2014 edits to pantry src/dist won't be resolved",fix:"rm -rf node_modules/@stacksjs/stx && ln -s ../../pantry/@stacksjs/stx node_modules/@stacksjs/stx"})}if(Y.push({name:"dev runtime cache",status:"info",detail:"cleared automatically on source edits by the dev watcher (clearDevCaches, #1745 item C)"}),$.generateRuntime)try{let _=$.generateRuntime().length;Y.push(_>1000?{name:"signals runtime",status:"ok",detail:`generated ${_.toLocaleString()} chars`}:{name:"signals runtime",status:"warn",detail:`generated only ${_} chars \u2014 suspiciously short`})}catch(K){Y.push({name:"signals runtime",status:"error",detail:`failed to generate: ${K.message}`})}return{checks:Y,ok:!Y.some((K)=>K.status==="error")}}function oQ($){let X={ok:"\u2713",warn:"\u26A0",error:"\u2717",info:"\xB7"},Z=["stx runtime resolution:"];for(let Q of $.checks)if(Z.push(` ${X[Q.status]} ${Q.name}: ${Q.detail}`),Q.fix)Z.push(` \u2192 ${Q.fix}`);return Z.push(""),Z.push($.ok?"\u2713 All framework-runtime layers are aligned.":"\u2717 A runtime layer is stale \u2014 see the fixes above."),Z.join(`
4343
- `)}var{Glob:jY}=globalThis.Bun;import{cpSync as a7,existsSync as m$,mkdirSync as r7,readFileSync as s7,readdirSync as HY,rmSync as OY,statSync as AY,unlinkSync as qY,writeFileSync as d$}from"fs";import{dirname as NY,join as x0,relative as MY}from"path";import n7 from"process";import i0 from"path";function f7($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function h7($,X,Z){let Q=f7(X),Y=Z?f7(Z):"";return`<!DOCTYPE html>
4354
+ </html>`}var A1=Symbol.for("stx.Fragment"),mQ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),y7=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]),v7={className:"class",htmlFor:"for",tabIndex:"tabindex",autoFocus:"autofocus",autoPlay:"autoplay",crossOrigin:"crossorigin",dateTime:"datetime",encType:"enctype",formAction:"formaction",formEncType:"formenctype",formMethod:"formmethod",formNoValidate:"formnovalidate",formTarget:"formtarget",frameBorder:"frameborder",hrefLang:"hreflang",httpEquiv:"http-equiv",inputMode:"inputmode",maxLength:"maxlength",mediaGroup:"mediagroup",minLength:"minlength",noModule:"nomodule",noValidate:"novalidate",playsInline:"playsinline",readOnly:"readonly",rowSpan:"rowspan",colSpan:"colspan",srcDoc:"srcdoc",srcLang:"srclang",srcSet:"srcset",useMap:"usemap"};function pQ($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function h5($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function g7($){if($==null||typeof $==="boolean")return[];if(!Array.isArray($))return[b7($)];return $.flat(1/0).map(b7).filter((X)=>X!=="")}function b7($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return $;if(typeof $==="number")return String($);return $}function N1($,X,Z){let{children:Q,ref:Y,key:J,...G}=X||{};return{type:$,props:Object.keys(G).length>0?G:null,children:g7(Q),key:Z??J??void 0,ref:Y??void 0}}var cQ=N1,lQ=N1;function f7($){return Object.entries($).filter(([,X])=>X!=null&&X!==!1).map(([X,Z])=>{let Q=X.replace(/[A-Z]/g,(J)=>`-${J.toLowerCase()}`),Y=typeof Z==="number"&&!Q.startsWith("--")&&Q!=="opacity"&&Q!=="z-index"&&Q!=="flex-grow"&&Q!=="flex-shrink"&&Q!=="order"&&Q!=="font-weight"&&Q!=="line-height"?`${Z}px`:String(Z);return`${Q}: ${Y}`}).join("; ")}function d5($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter(Boolean).map(d5).join(" ");if(typeof $==="object"&&$!==null)return Object.entries($).filter(([,X])=>X).map(([X])=>X).join(" ");return""}function iQ($){if(!$)return"";let X=[];for(let[Z,Q]of Object.entries($)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;if(Z.startsWith("on")&&typeof Q==="function")continue;let Y=v7[Z]||Z;if(Y==="class"||Y==="className"){let J=d5(Q);if(J)X.push(` class="${h5(J)}"`);continue}if(Y==="style"){let J=typeof Q==="string"?Q:f7(Q);if(J)X.push(` style="${h5(J)}"`);continue}if(y7.has(Y)){if(Q)X.push(` ${Y}`);continue}if(Q!=null&&Q!==!1)X.push(` ${Y}="${h5(String(Q))}"`)}return X.join("")}function O1($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return pQ($);if(typeof $==="number")return String($);if(Array.isArray($))return $.map(O1).join("");if($.type===A1)return $.children.map(O1).join("");if(typeof $.type==="function"){let J=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});return O1(J)}let X=$.type,Z=iQ($.props),Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)return`<${X}${Z}>${Q}</${X}>`;if(mQ.has(X))return`<${X}${Z}>`;let Y=$.children.map(O1).join("");return`<${X}${Z}>${Y}</${X}>`}function aQ($){return new ReadableStream({start(X){X.enqueue(O1($)),X.close()}})}function sQ($,X){if(!X)return;for(let[Z,Q]of Object.entries(X)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;let Y=v7[Z]||Z;if(Z.startsWith("on")&&typeof Q==="function"){let J=Z.slice(2).toLowerCase();$.addEventListener(J,Q);continue}if(Y==="class"||Y==="className"){let J=d5(Q);if(J)$.setAttribute("class",J);continue}if(Y==="style"){let J=typeof Q==="string"?Q:f7(Q);if(J)$.setAttribute("style",J);continue}if(y7.has(Y)){if(Q)$.setAttribute(Y,"");continue}if(Q!=null&&Q!==!1)$.setAttribute(Y,String(Q))}}function p1($,X){if($==null||typeof $==="boolean")return;if(typeof $==="string"){X.appendChild(document.createTextNode($));return}if(typeof $==="number"){X.appendChild(document.createTextNode(String($)));return}if(Array.isArray($)){for(let Y of $)p1(Y,X);return}if($.type===A1){for(let Y of $.children)p1(Y,X);return}if(typeof $.type==="function"){let Y=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});p1(Y,X);return}let Z=document.createElement($.type);sQ(Z,$.props);let Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)Z.innerHTML=Q;else for(let Y of $.children)p1(Y,Z);if($.ref){if(typeof $.ref==="function")$.ref(Z)}X.appendChild(Z)}function rQ($){if($.when)return N1(A1,{children:$.children});return $.fallback??null}function nQ($){let X=$.each;if(!X||X.length===0)return $.fallback??null;let Z=Array.isArray($.children)?$.children[0]:$.children,Q=X.map((Y,J)=>Z(Y,J));return N1(A1,{children:Q})}function oQ($){return N1(A1,{children:$.children})}function tQ($,X,...Z){let{key:Q,ref:Y,...J}=X||{};return{type:$,props:Object.keys(J).length>0?J:{},children:g7(Z.length===1?Z[0]:Z),key:Q??void 0,ref:Y??void 0}}function h7($,X){let Z=new Set,Q=new Map,Y=new Map,J={globalProperties:{},performance:!1,compilerOptions:{}},G={config:J,_components:Q,_directives:Y,_installedPlugins:Z,use(W,...K){if(Z.has(W))return G;if(Z.add(W),typeof W==="function")W(G,...K);else if(typeof W.install==="function")W.install(G,...K);return G},provide(W,K){return u5(W,K),G},component(W,K){if(!K)return Q.get(W);return Q.set(W,K),G},directive(W,K){if(!K)return Y.get(W);return Y.set(W,K),G},mount(W){if(typeof document<"u"){let K=globalThis.__stx_globals||(globalThis.__stx_globals={});Object.assign(K,J.globalProperties),document.querySelectorAll("[v-cloak]").forEach((_)=>{_.removeAttribute("v-cloak")})}return G},unmount(){Q.clear(),Y.clear(),Z.clear()}};return G}function eQ($){return class extends HTMLElement{_component;_shadow;constructor(){super();this._shadow=this.attachShadow({mode:"open"}),this._component=$}connectedCallback(){if(this._component?.render){let X=this._component.render();if(typeof X==="string")this._shadow.innerHTML=X}else if(this._component?.template)this._shadow.innerHTML=this._component.template;else if(typeof this._component==="string")this._shadow.innerHTML=this._component}disconnectedCallback(){this._shadow.innerHTML=""}}}function $Y($,...X){let Z=X[0]??{},Q=new Set,Y=String($).replace(/(\/)?:([^/?*]+)([?*])?/g,(W,K,_,U)=>{let F=Z[_];if(Q.add(_),F===void 0||F===null||F===""){if(U==="?")return"";return W}let z=Array.isArray(F)?F.map((j)=>encodeURIComponent(String(j))).join("/"):U==="*"?String(F).split("/").map((j)=>encodeURIComponent(j)).join("/"):encodeURIComponent(String(F));return`${K??""}${z}`}),J=Object.keys(Z).filter((W)=>!Q.has(W));if(J.length===0)return Y;let G=new URLSearchParams;for(let W of J){let K=Z[W];if(Array.isArray(K))K.forEach((_)=>G.append(W,String(_)));else if(K!==void 0&&K!==null)G.set(W,String(K))}return`${Y}?${G.toString()}`}import q1 from"fs";import l0 from"path";function d7($){try{return q1.statSync($).mtimeMs}catch{return null}}function k$($,X){let Z=Math.max(0,Math.round((X-$)/1000));if(Z<60)return`${Z}s ago`;if(Z<3600)return`${Math.round(Z/60)}m ago`;return`${Math.round(Z/3600)}h ago`}function XY($,X){try{return globalThis.Bun?.resolveSync($,X)??null}catch{return null}}function u7($,X="stx"){let Z=l0.resolve($);for(let Q=0;Q<10;Q++){let Y=l0.join(Z,"pantry","@stacksjs",X);if(q1.existsSync(Y))return Y;let J=l0.dirname(Z);if(J===Z)break;Z=J}return null}async function ZY($={}){let X=$.cwd?l0.resolve($.cwd):process.cwd(),Z=$.resolve??XY,Q=Date.now(),Y=[],J=Z("@stacksjs/stx",X);Y.push(J?{name:"@stacksjs/stx resolves to",status:"ok",detail:J}:{name:"@stacksjs/stx resolves to",status:"info",detail:"not resolvable from here (running inside the stx repo, or not installed)"});let G=Z("bun-plugin-stx",X);if(G)Y.push({name:"bun-plugin-stx resolves to",status:"ok",detail:G});let W=u7(X,"stx");if(!W)Y.push({name:"pantry",status:"info",detail:"no pantry/@stacksjs/stx found \u2014 standard install (nothing to rebuild)"});else{let K=l0.join(W,"src/signals.ts"),_=[l0.join(W,"dist/index.js"),l0.join(W,"dist/signals.js")].find((H)=>q1.existsSync(H))||null,U=d7(K),F=_?d7(_):null;if(U==null)Y.push({name:"pantry dist freshness",status:"info",detail:`found pantry at ${W} but no src/signals.ts to compare`});else if(F==null)Y.push({name:"pantry dist freshness",status:"error",detail:"pantry has src but no built dist \u2014 the dev server will resolve nothing (or a stale copy elsewhere)",fix:`cd ${W} && bun build.ts`});else if(F<U){let H=Math.round((U-F)/1000);Y.push({name:"pantry dist freshness",status:"error",detail:`dist (${k$(F,Q)}) is OLDER than src/signals.ts (${k$(U,Q)}) by ${H}s \u2014 your edit isn't built`,fix:`cd ${W} && bun build.ts`})}else Y.push({name:"pantry dist freshness",status:"ok",detail:`dist rebuilt after src (src ${k$(U,Q)}, dist ${k$(F,Q)})`});let z=l0.join(X,"node_modules/@stacksjs/stx"),j=null;try{j=q1.lstatSync(z)}catch{j=null}if(!j)Y.push({name:"node_modules \u2192 pantry",status:"info",detail:"node_modules/@stacksjs/stx not present (not installed here)"});else if(j.isSymbolicLink()){let H=null;try{H=q1.realpathSync(z)}catch{}let L=(()=>{try{return q1.realpathSync(W)}catch{return W}})();Y.push(H===L?{name:"node_modules \u2192 pantry",status:"ok",detail:"symlinked to pantry"}:{name:"node_modules \u2192 pantry",status:"warn",detail:`symlinked to ${H||"(dangling)"}, not pantry`})}else Y.push({name:"node_modules \u2192 pantry",status:"warn",detail:"is a real directory, NOT symlinked to pantry \u2014 edits to pantry src/dist won't be resolved",fix:"rm -rf node_modules/@stacksjs/stx && ln -s ../../pantry/@stacksjs/stx node_modules/@stacksjs/stx"})}if(Y.push({name:"dev runtime cache",status:"info",detail:"cleared automatically on source edits by the dev watcher (clearDevCaches, #1745 item C)"}),$.generateRuntime)try{let _=$.generateRuntime().length;Y.push(_>1000?{name:"signals runtime",status:"ok",detail:`generated ${_.toLocaleString()} chars`}:{name:"signals runtime",status:"warn",detail:`generated only ${_} chars \u2014 suspiciously short`})}catch(K){Y.push({name:"signals runtime",status:"error",detail:`failed to generate: ${K.message}`})}return{checks:Y,ok:!Y.some((K)=>K.status==="error")}}function QY($){let X={ok:"\u2713",warn:"\u26A0",error:"\u2717",info:"\xB7"},Z=["stx runtime resolution:"];for(let Q of $.checks)if(Z.push(` ${X[Q.status]} ${Q.name}: ${Q.detail}`),Q.fix)Z.push(` \u2192 ${Q.fix}`);return Z.push(""),Z.push($.ok?"\u2713 All framework-runtime layers are aligned.":"\u2717 A runtime layer is stale \u2014 see the fixes above."),Z.join(`
4355
+ `)}var{Glob:MY}=globalThis.Bun;import{cpSync as t7,existsSync as p$,mkdirSync as e7,readFileSync as $3,readdirSync as VY,rmSync as EY,statSync as IY,unlinkSync as RY,writeFileSync as u$}from"fs";import{dirname as DY,join as x0,relative as wY}from"path";import X3 from"process";import i0 from"path";function p7($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function c7($,X,Z){let Q=p7(X),Y=Z?p7(Z):"";return`<!DOCTYPE html>
4344
4356
  <html>
4345
4357
  <head>
4346
4358
  <title>stx Error</title>
@@ -4356,53 +4368,53 @@ File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=
4356
4368
  ${Y?`<div class="file-path">File: ${Y}</div>`:""}
4357
4369
  <pre>${Q}</pre>
4358
4370
  </body>
4359
- </html>`}function g7($){return{name:"bun-plugin-stx",async setup(X){let Z={};try{Z=await s0(process.cwd())}catch{}let Q={...T$,...Z,...$},Y=new Set;if(!X.config.root&&X.config.entrypoints?.length){let K=X.config.entrypoints.map((_)=>i0.dirname(i0.resolve(_))).reduce((_,U)=>{let F=_.split(i0.sep),z=U.split(i0.sep),j=0;while(j<F.length&&j<z.length&&F[j]===z[j])j++;return F.slice(0,j).join(i0.sep)});X.config.root=K}let J=Q.webComponents?.enabled?`./${i0.relative(i0.dirname(X.config?.outdir||"dist"),Q.webComponents.outputDir||"dist/web-components")}`:"/web-components",G=[];if(Q.webComponents?.enabled)try{let W=await U$(Q,Y);if(G.push(...W),Q.debug&&W.length>0)console.log(`Successfully built ${W.length} web components`)}catch(W){console.error("Failed to build web components:",W)}X.onResolve({filter:/^\//},(W)=>{if(W.path.startsWith("//"))return null;if(!W.importer)return null;return{external:!0,path:W.path}}),X.onLoad({filter:/\.md$/},async(W)=>{let K=W.path;try{let{content:_,data:U}=await T0(K,Q);return{contents:`// ${K}
4371
+ </html>`}function m7($){return{name:"bun-plugin-stx",async setup(X){let Z={};try{Z=await r0(process.cwd())}catch{}let Q={...C$,...Z,...$},Y=new Set;if(!X.config.root&&X.config.entrypoints?.length){let K=X.config.entrypoints.map((_)=>i0.dirname(i0.resolve(_))).reduce((_,U)=>{let F=_.split(i0.sep),z=U.split(i0.sep),j=0;while(j<F.length&&j<z.length&&F[j]===z[j])j++;return F.slice(0,j).join(i0.sep)});X.config.root=K}let J=Q.webComponents?.enabled?`./${i0.relative(i0.dirname(X.config?.outdir||"dist"),Q.webComponents.outputDir||"dist/web-components")}`:"/web-components",G=[];if(Q.webComponents?.enabled)try{let W=await B$(Q,Y);if(G.push(...W),Q.debug&&W.length>0)console.log(`Successfully built ${W.length} web components`)}catch(W){console.error("Failed to build web components:",W)}X.onResolve({filter:/^\//},(W)=>{if(W.path.startsWith("//"))return null;if(!W.importer)return null;return{external:!0,path:W.path}}),X.onLoad({filter:/\.md$/},async(W)=>{let K=W.path;try{let{content:_,data:U}=await T0(K,Q);return{contents:`// ${K}
4360
4372
  const content = ${JSON.stringify(_)};
4361
4373
  const data = ${JSON.stringify(U)};
4362
4374
 
4363
4375
  export { content, data };
4364
4376
  export { content as default };
4365
- `,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=h7("Markdown Processing Error",_.message||"Unknown error",K);return{contents:`// ${K}
4377
+ `,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=c7("Markdown Processing Error",_.message||"Unknown error",K);return{contents:`// ${K}
4366
4378
  const content = ${JSON.stringify(U)};
4367
4379
  const data = {};
4368
4380
 
4369
4381
  export { content, data };
4370
4382
  export { content as default };
4371
- `,loader:"js"}}}),X.onLoad({filter:/\.(jsx|tsx)$/},async(W)=>{let K=W.path;try{let _=await Bun.file(K).text(),U=K.endsWith(".tsx")?"tsx":"jsx";return{contents:new Bun.Transpiler({loader:U,jsxOptimizationInline:!0}).transformSync(_),loader:"js"}}catch(_){return console.error("JSX Processing Error:",_),{contents:"export default function() { return null; }",loader:"js"}}}),X.onLoad({filter:/\.stx$/},async({path:W})=>{try{let K=new Set;if(Q.cache&&Q.cachePath){let V=await K$(W,Q);if(V){if(Q.debug)console.log(`Using cached version of ${W}`);return{contents:V,loader:"html"}}}let _=await Bun.file(W).text(),U=_,F=_.match(/<template\b[^>]*>([\s\S]*?)<\/template>/i);if(F)U=F[1].trim();let z=u7(_),j=z.client.map((V)=>V.fullTag),H=z.server.map((V)=>V.content),L=U;for(let V of H){let E=V.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(new RegExp(`<script\\b[^>]*>${E}<\\/script>`,"gi"),"")}for(let V of j){let E=V.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(E,"")}let O={__filename:W,__dirname:i0.dirname(W),__stx:{webComponentsPath:J,builtComponents:G},__stx_options:Q,__stx_sfc_mode:!0};for(let V of H)await M0(V,O,W);let A=L;if(A=await V0(A,O,W,Q,K),j.length>0){let V=O.__stx_event_bindings||[],q=(await Promise.all(j.map(async(I)=>{let M=I.match(/<script\b[^>]*>([\s\S]*?)<\/script>/);if(!M)return I;return d7(M[1],{eventBindings:V,templateContent:A})}))).join(`
4372
- `);if(A.match(/(<\/body>)/i))A=A.replace(/(<\/body>)/i,`${q}
4383
+ `,loader:"js"}}}),X.onLoad({filter:/\.(jsx|tsx)$/},async(W)=>{let K=W.path;try{let _=await Bun.file(K).text(),U=K.endsWith(".tsx")?"tsx":"jsx";return{contents:new Bun.Transpiler({loader:U,jsxOptimizationInline:!0}).transformSync(_),loader:"js"}}catch(_){return console.error("JSX Processing Error:",_),{contents:"export default function() { return null; }",loader:"js"}}}),X.onLoad({filter:/\.stx$/},async({path:W})=>{try{let K=new Set;if(Q.cache&&Q.cachePath){let M=await _$(W,Q);if(M){if(Q.debug)console.log(`Using cached version of ${W}`);return{contents:M,loader:"html"}}}let _=await Bun.file(W).text(),U=_,F=_.match(/<template\b[^>]*>([\s\S]*?)<\/template>/i);if(F)U=F[1].trim();let z=i7(_),j=z.client.map((M)=>M.fullTag),H=z.server.map((M)=>M.content),L=U;for(let M of H){let V=M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(new RegExp(`<script\\b[^>]*>${V}<\\/script>`,"gi"),"")}for(let M of j){let V=M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(V,"")}let O={__filename:W,__dirname:i0.dirname(W),__stx:{webComponentsPath:J,builtComponents:G},__stx_options:Q,__stx_sfc_mode:!0};for(let M of H)await M0(M,O,W);let A=L;if(A=await V0(A,O,W,Q,K),j.length>0){let M=O.__stx_event_bindings||[],N=(await Promise.all(j.map(async(I)=>{let E=I.match(/<script\b[^>]*>([\s\S]*?)<\/script>/);if(!E)return I;return l7(E[1],{eventBindings:M,templateContent:A})}))).join(`
4384
+ `);if(A.match(/(<\/body>)/i))A=A.replace(/(<\/body>)/i,`${N}
4373
4385
  $1`);else A+=`
4374
- ${q}`;O.__stx_event_bindings=[]}if(K.forEach((V)=>Y.add(V)),Q.cache&&Q.cachePath){if(await _$(W,A,K,Q),Q.debug)console.log(`Cached template ${W} with ${K.size} dependencies`)}return{contents:A,loader:"html"}}catch(K){return console.error("stx Plugin Error:",K),{contents:h7("stx Rendering Error",K.message||String(K),W),loader:"html"}}})}}}var m7=g7;function tQ($,X){if(!$)return $;if(/^[a-z][a-z0-9+.-]*:/i.test($)||$.startsWith("//"))return $;return`${X}${$.startsWith("/")?"":"/"}${$}`}function k$($,X,Z={},Q="/"){let Y=X.seo??{},J=Z.title??Y.title??X.name,G=Z.description??Y.description??X.description??"",W=X.url.replace(/\/$/,""),K=`${W}${Q}`,_=tQ(Z.image??Y.image,W),U=Y.siteName??X.name,F=Y.type??"website",z=Y.locale??"en_US",j=[];if(Y.favicon){let T=Y.favicon.toLowerCase().split(".").pop(),f=T==="svg"?"image/svg+xml":T==="ico"?"image/x-icon":T==="png"?"image/png":T==="jpg"||T==="jpeg"?"image/jpeg":"";j.push(`<link rel="icon"${f?` type="${f}"`:""} href="${L0(Y.favicon)}">`)}if(j.push(`<title>${eQ(J)}</title>`,`<link rel="canonical" href="${L0(K)}">`,`<meta name="description" content="${L0(G)}">`,`<meta property="og:title" content="${L0(J)}">`,`<meta property="og:description" content="${L0(G)}">`,`<meta property="og:type" content="${L0(F)}">`,`<meta property="og:url" content="${L0(K)}">`,`<meta property="og:site_name" content="${L0(U)}">`,`<meta property="og:locale" content="${L0(z)}">`,`<meta name="twitter:card" content="${_?"summary_large_image":"summary"}">`,`<meta name="twitter:title" content="${L0(J)}">`,`<meta name="twitter:description" content="${L0(G)}">`),_)j.push(`<meta property="og:image" content="${L0(_)}">`),j.push(`<meta name="twitter:image" content="${L0(_)}">`);if(Y.twitter)j.push(`<meta name="twitter:site" content="@${L0(Y.twitter.replace(/^@/,""))}">`),j.push(`<meta name="twitter:creator" content="@${L0(Y.twitter.replace(/^@/,""))}">`);let H=/<!--\s*stx SEO Tags\s*-->[\s\S]*?<meta\s+name="twitter:description"[^>]*>\s*/i;if(H.test($))$=$.replace(H,"");$=$.replace(/<!--\s*SEO\s*-->[\s\S]*?<!--\s*\/SEO\s*-->\s*/g,""),$=$.replace(/<meta\s+name="title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+property="og:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+property="og:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"");let L=$.search(/<\/head>/i),O=L===-1?$:$.slice(0,L),A=/^(?:stx App|stx Project|Document|Untitled)$/i,V=/<title[^>]*>([\s\S]*?)<\/title>/i.exec(O)?.[1]?.trim(),E=V===void 0||V===""||A.test(V),q=(T)=>{if(/^<title[\s>]/i.test(T))return/<title[\s>]/i.test(O)&&!E;if(/rel="canonical"/i.test(T))return/<link[^>]+rel=["']canonical["']/i.test(O);let v=/(?:property|name)="([^"]+)"/i.exec(T)?.[1];if(!v)return!1;return new RegExp(`<meta[^>]+(?:property|name)=["']${v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}["']`,"i").test(O)},N=j.filter((T)=>!q(T));if(N.length===0)return $;let I=$,M=N.find((T)=>/^<title[\s>]/i.test(T));if(M&&E&&/<title[^>]*>[\s\S]*?<\/title>/i.test(I)){if(I=I.replace(/<title[^>]*>[\s\S]*?<\/title>/i,()=>M),N=N.filter((T)=>T!==M),N.length===0)return I}let w=`<!-- SEO -->
4375
- ${N.join(`
4386
+ ${N}`;O.__stx_event_bindings=[]}if(K.forEach((M)=>Y.add(M)),Q.cache&&Q.cachePath){if(await U$(W,A,K,Q),Q.debug)console.log(`Cached template ${W} with ${K.size} dependencies`)}return{contents:A,loader:"html"}}catch(K){return console.error("stx Plugin Error:",K),{contents:c7("stx Rendering Error",K.message||String(K),W),loader:"html"}}})}}}var a7=m7;function YY($,X){if(!$)return $;if(/^[a-z][a-z0-9+.-]*:/i.test($)||$.startsWith("//"))return $;return`${X}${$.startsWith("/")?"":"/"}${$}`}function x$($,X,Z={},Q="/"){let Y=X.seo??{},J=Z.title??Y.title??X.name,G=Z.description??Y.description??X.description??"",W=X.url.replace(/\/$/,""),K=`${W}${Q}`,_=YY(Z.image??Y.image,W),U=Y.siteName??X.name,F=Y.type??"website",z=Y.locale??"en_US",j=[];if(Y.favicon){let T=Y.favicon.toLowerCase().split(".").pop(),f=T==="svg"?"image/svg+xml":T==="ico"?"image/x-icon":T==="png"?"image/png":T==="jpg"||T==="jpeg"?"image/jpeg":"";j.push(`<link rel="icon"${f?` type="${f}"`:""} href="${L0(Y.favicon)}">`)}if(j.push(`<title>${JY(J)}</title>`,`<link rel="canonical" href="${L0(K)}">`,`<meta name="description" content="${L0(G)}">`,`<meta property="og:title" content="${L0(J)}">`,`<meta property="og:description" content="${L0(G)}">`,`<meta property="og:type" content="${L0(F)}">`,`<meta property="og:url" content="${L0(K)}">`,`<meta property="og:site_name" content="${L0(U)}">`,`<meta property="og:locale" content="${L0(z)}">`,`<meta name="twitter:card" content="${_?"summary_large_image":"summary"}">`,`<meta name="twitter:title" content="${L0(J)}">`,`<meta name="twitter:description" content="${L0(G)}">`),_)j.push(`<meta property="og:image" content="${L0(_)}">`),j.push(`<meta name="twitter:image" content="${L0(_)}">`);if(Y.twitter)j.push(`<meta name="twitter:site" content="@${L0(Y.twitter.replace(/^@/,""))}">`),j.push(`<meta name="twitter:creator" content="@${L0(Y.twitter.replace(/^@/,""))}">`);let H=/<!--\s*stx SEO Tags\s*-->[\s\S]*?<meta\s+name="twitter:description"[^>]*>\s*/i;if(H.test($))$=$.replace(H,"");$=$.replace(/<!--\s*SEO\s*-->[\s\S]*?<!--\s*\/SEO\s*-->\s*/g,""),$=$.replace(/<meta\s+name="title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+property="og:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+property="og:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"");let L=$.search(/<\/head>/i),O=L===-1?$:$.slice(0,L),A=/^(?:stx App|stx Project|Document|Untitled)$/i,M=/<title[^>]*>([\s\S]*?)<\/title>/i.exec(O)?.[1]?.trim(),V=M===void 0||M===""||A.test(M),N=(T)=>{if(/^<title[\s>]/i.test(T))return/<title[\s>]/i.test(O)&&!V;if(/rel="canonical"/i.test(T))return/<link[^>]+rel=["']canonical["']/i.test(O);let v=/(?:property|name)="([^"]+)"/i.exec(T)?.[1];if(!v)return!1;return new RegExp(`<meta[^>]+(?:property|name)=["']${v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}["']`,"i").test(O)},q=j.filter((T)=>!N(T));if(q.length===0)return $;let I=$,E=q.find((T)=>/^<title[\s>]/i.test(T));if(E&&V&&/<title[^>]*>[\s\S]*?<\/title>/i.test(I)){if(I=I.replace(/<title[^>]*>[\s\S]*?<\/title>/i,()=>E),q=q.filter((T)=>T!==E),q.length===0)return I}let w=`<!-- SEO -->
4387
+ ${q.join(`
4376
4388
  `)}
4377
4389
  <!-- /SEO -->`,D=I.search(/<\/head>/i);if(D!==-1)return`${I.slice(0,D)}${w}
4378
4390
  ${I.slice(D)}`;if(/<head[^>]*>/i.test(I))return I.replace(/<head([^>]*)>/i,`<head$1>
4379
4391
  ${w}`);return`${w}
4380
- ${I}`}function L0($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function eQ($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function x$($,X){let Z=$.url.replace(/\/$/,""),Q=new Date().toISOString().slice(0,10);return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',X.filter((J)=>J.page?.sitemap!==!1).map((J)=>{let G=`${Z}${J.path}`,W=J.page?.priority??(J.path==="/"?1:0.8),K=J.page?.changefreq??"monthly";return[" <url>",` <loc>${$Y(G)}</loc>`,` <lastmod>${Q}</lastmod>`,` <changefreq>${K}</changefreq>`,` <priority>${W.toFixed(1)}</priority>`," </url>"].join(`
4392
+ ${I}`}function L0($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function JY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function S$($,X){let Z=$.url.replace(/\/$/,""),Q=new Date().toISOString().slice(0,10);return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',X.filter((J)=>J.page?.sitemap!==!1).map((J)=>{let G=`${Z}${J.path}`,W=J.page?.priority??(J.path==="/"?1:0.8),K=J.page?.changefreq??"monthly";return[" <url>",` <loc>${GY(G)}</loc>`,` <lastmod>${Q}</lastmod>`,` <changefreq>${K}</changefreq>`,` <priority>${W.toFixed(1)}</priority>`," </url>"].join(`
4381
4393
  `)}).join(`
4382
4394
  `),"</urlset>",""].join(`
4383
- `)}function $Y($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function S$($){let X=$.robots??"allow";if(X===!1)return null;if(typeof X==="string"&&X!=="allow"&&X!=="disallow")return X.endsWith(`
4395
+ `)}function GY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function P$($){let X=$.robots??"allow";if(X===!1)return null;if(typeof X==="string"&&X!=="allow"&&X!=="disallow")return X.endsWith(`
4384
4396
  `)?X:`${X}
4385
4397
  `;let Z=$.sitemap!==!1?`Sitemap: ${$.url.replace(/\/$/,"")}/sitemap.xml
4386
4398
  `:"";if(X==="disallow")return["User-agent: *","Disallow: /","",Z].filter(Boolean).join(`
4387
4399
  `);return["User-agent: *","Allow: /","",Z].filter(Boolean).join(`
4388
- `)}var M1=null;async function XY(){if(M1!==null)return M1;try{let $=await import("./chunk-1yh6pq6b.js");if(typeof $.getRouterScript==="function")M1=$.getRouterScript();else M1=""}catch{M1=""}return M1}async function h5($,X){let Z=await XY();if(!Z)return $;let Q={interceptAllLinks:!0,container:"main",...X},J=`${`<script>window.__stxRouterConfig=${JSON.stringify(Q)};</script>
4400
+ `)}var M1=null;async function WY(){if(M1!==null)return M1;try{let $=await import("./chunk-1yh6pq6b.js");if(typeof $.getRouterScript==="function")M1=$.getRouterScript();else M1=""}catch{M1=""}return M1}async function m5($,X){let Z=await WY();if(!Z)return $;let Q={interceptAllLinks:!0,container:"main",...X},J=`${`<script>window.__stxRouterConfig=${JSON.stringify(Q)};</script>
4389
4401
  `}<script>${Z}</script>`;if(/<\/body>/i.test($))return $.replace(/<\/body>/i,`${J}
4390
4402
  </body>`);return`${$}
4391
- ${J}`}var ZY=`window.__stxThemeIcon=function(isDark){try{var want=isDark?'dark':'light';var pick=document.querySelector('link[rel~="icon"][media*="prefers-color-scheme: '+want+'"]');if(!pick)return;var live=document.querySelector('link[rel~="icon"]:not([media])');if(!live){live=document.createElement('link');live.setAttribute('rel','icon');document.head.appendChild(live)}if(pick.type)live.setAttribute('type',pick.type);var href=pick.getAttribute('href');if(live.getAttribute('href')!==href)live.setAttribute('href',href)}catch(e){}};`,QY=($,X,Z,Q)=>`(function(){${ZY}function read(){try{var k=${JSON.stringify(X)};var t=localStorage.getItem(k);return t===null?(${JSON.stringify($)}==='dark'||(${JSON.stringify($)}==='auto'&&window.matchMedia('(prefers-color-scheme: dark)').matches)):t==='dark'}catch(e){return ${JSON.stringify($)}==='dark'}}function apply(){var isDark=read();var html=document.documentElement;html.classList[isDark?'add':'remove']('dark');var color=isDark?${JSON.stringify(Q)}:${JSON.stringify(Z)};if(!document.head)return;var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(!tc){tc=document.createElement('meta');tc.setAttribute('name','theme-color');tc.setAttribute('data-stx-theme-meta','1')}tc.setAttribute('content',color);if(tc!==document.head.firstChild){document.head.insertBefore(tc,document.head.firstChild)}if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)}apply();window.addEventListener('stx:navigate',apply);window.addEventListener('popstate',apply)})();`,YY=($,X,Z)=>`document.addEventListener('click',function(e){var t=e.target&&e.target.closest&&e.target.closest('#theme-toggle');if(!t)return;var html=document.documentElement;var isDark=html.classList.toggle('dark');try{localStorage.setItem(${JSON.stringify($)},isDark?'dark':'light')}catch(e){}var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(tc)tc.setAttribute('content',isDark?${JSON.stringify(Z)}:${JSON.stringify(X)});if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)});`;function P$($,X){if(X.theme===!1)return $;let Z=$.includes(p7),Q=typeof X.theme==="object"&&X.theme!==null?X.theme:{},Y=Q.default??"dark",J=Q.storageKey??"theme",G=Q.colors?.light??"#ffffff",W=Q.colors?.dark??"#000000";if(Y==="dark"&&!Z){if(!/<html\b[^>]*\bclass=/.test($))$=$.replace(/<html\b([^>]*)>/i,'<html$1 class="dark">');else if(!/<html\b[^>]*\bclass="[^"]*\bdark\b/.test($))$=$.replace(/<html\b([^>]*\bclass=")([^"]*)(")/i,"<html$1$2 dark$3")}if(!$.includes("data-stx-theme-meta")&&/<head\b[^>]*>/i.test($)){let K=['<meta name="color-scheme" content="dark light" data-stx-theme-meta="1">',`<meta name="theme-color" media="(prefers-color-scheme: light)" content="${G}" data-stx-theme-meta="1">`,`<meta name="theme-color" media="(prefers-color-scheme: dark)" content="${W}" data-stx-theme-meta="1">`].join(`
4403
+ ${J}`}var KY=`window.__stxThemeIcon=function(isDark){try{var want=isDark?'dark':'light';var pick=document.querySelector('link[rel~="icon"][media*="prefers-color-scheme: '+want+'"]');if(!pick)return;var live=document.querySelector('link[rel~="icon"]:not([media])');if(!live){live=document.createElement('link');live.setAttribute('rel','icon');document.head.appendChild(live)}if(pick.type)live.setAttribute('type',pick.type);var href=pick.getAttribute('href');if(live.getAttribute('href')!==href)live.setAttribute('href',href)}catch(e){}};`,_Y=($,X,Z,Q)=>`(function(){${KY}function read(){try{var k=${JSON.stringify(X)};var t=localStorage.getItem(k);return t===null?(${JSON.stringify($)}==='dark'||(${JSON.stringify($)}==='auto'&&window.matchMedia('(prefers-color-scheme: dark)').matches)):t==='dark'}catch(e){return ${JSON.stringify($)}==='dark'}}function apply(){var isDark=read();var html=document.documentElement;html.classList[isDark?'add':'remove']('dark');var color=isDark?${JSON.stringify(Q)}:${JSON.stringify(Z)};if(!document.head)return;var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(!tc){tc=document.createElement('meta');tc.setAttribute('name','theme-color');tc.setAttribute('data-stx-theme-meta','1')}tc.setAttribute('content',color);if(tc!==document.head.firstChild){document.head.insertBefore(tc,document.head.firstChild)}if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)}apply();window.addEventListener('stx:navigate',apply);window.addEventListener('popstate',apply)})();`,UY=($,X,Z)=>`document.addEventListener('click',function(e){var t=e.target&&e.target.closest&&e.target.closest('#theme-toggle');if(!t)return;var html=document.documentElement;var isDark=html.classList.toggle('dark');try{localStorage.setItem(${JSON.stringify($)},isDark?'dark':'light')}catch(e){}var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(tc)tc.setAttribute('content',isDark?${JSON.stringify(Z)}:${JSON.stringify(X)});if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)});`;function b$($,X){if(X.theme===!1)return $;let Z=$.includes(s7),Q=typeof X.theme==="object"&&X.theme!==null?X.theme:{},Y=Q.default??"dark",J=Q.storageKey??"theme",G=Q.colors?.light??"#ffffff",W=Q.colors?.dark??"#000000";if(Y==="dark"&&!Z){if(!/<html\b[^>]*\bclass=/.test($))$=$.replace(/<html\b([^>]*)>/i,'<html$1 class="dark">');else if(!/<html\b[^>]*\bclass="[^"]*\bdark\b/.test($))$=$.replace(/<html\b([^>]*\bclass=")([^"]*)(")/i,"<html$1$2 dark$3")}if(!$.includes("data-stx-theme-meta")&&/<head\b[^>]*>/i.test($)){let K=['<meta name="color-scheme" content="dark light" data-stx-theme-meta="1">',`<meta name="theme-color" media="(prefers-color-scheme: light)" content="${G}" data-stx-theme-meta="1">`,`<meta name="theme-color" media="(prefers-color-scheme: dark)" content="${W}" data-stx-theme-meta="1">`].join(`
4392
4404
  `);$=$.replace(/<head\b([^>]*)>/i,`<head$1>
4393
- ${K}`)}if(!Z&&!$.includes("__stxThemeGuard")&&/<head\b[^>]*>/i.test($)){let _=`<script data-stx-theme-guard="1">${`window.__STX_COLOR_MODE__=window.__STX_COLOR_MODE__||${JSON.stringify({storageKey:J,initialMode:Y,darkClass:"dark"})};`}${QY(Y,J,G,W)};window.__stxThemeGuard=1;</script>`;$=$.replace(/<head\b([^>]*)>/i,`<head$1>
4394
- ${_}`)}if(!Z&&!$.includes("__stxThemeToggle")&&/<\/body>/i.test($)){let K=`<script data-stx-theme-toggle="1">${YY(J,G,W)};window.__stxThemeToggle=1;</script>`;$=$.replace(/<\/body>/i,`${K}
4395
- </body>`)}return $}async function c7($,X){if($.length===0)return{succeeded:[],failed:[]};try{return await X($),{succeeded:[...$],failed:[]}}catch{}let Z=[],Q=[];for(let Y of $)try{await X([Y]),Z.push(Y)}catch(J){Q.push({entrypoint:Y,error:U1(J,Y)})}return{succeeded:Z,failed:Q}}import{existsSync as JY,readFileSync as GY}from"fs";import{join as WY,resolve as KY}from"path";import _Y from"process";function y$($,X=_Y.cwd()){let Z=$.i18n;if(!Z||!Array.isArray(Z.locales)||Z.locales.length===0)return null;let Q=Z.defaultLocale??Z.locales[0],Y=UY(Z,X);return{locales:Z.locales,defaultLocale:Q,labels:Z.labels??Object.fromEntries(Z.locales.map((J)=>[J,J.toUpperCase()])),translations:Y,pickerSelector:Z.pickerSelector??"#lang-picker"}}function UY($,X){let Z=$.translations??{},Q={},Y=$.translationsDir,J=Y===!1?null:KY(X,typeof Y==="string"&&Y?Y:"translations"),G=$.format??"json";for(let W of $.locales){let K=J?BY(J,W,G):{};Q[W]={...K,...Z[W]??{}}}return Q}function BY($,X,Z){let Q=Z==="json"?[`${X}.json`]:[`${X}.${Z}`,`${X}.${Z==="yaml"?"yml":"yaml"}`];for(let Y of Q){let J=WY($,Y);if(!JY(J))continue;try{let G=GY(J,"utf8"),W=Z==="json"?JSON.parse(G):LY(G);return l7(W)}catch{continue}}return{}}function l7($,X="",Z={}){if(!$||typeof $!=="object")return Z;for(let[Q,Y]of Object.entries($)){let J=X?`${X}.${Q}`:Q;if(Y&&typeof Y==="object"&&!Array.isArray(Y))l7(Y,J,Z);else if(typeof Y==="string")Z[J]=Y;else if(typeof Y==="number"||typeof Y==="boolean")Z[J]=String(Y)}return Z}function LY($){let X={},Z=[{obj:X,indent:-1}];for(let Q of $.split(`
4396
- `)){let Y=Q.replace(/#.*$/,"").trimEnd();if(!Y.trim())continue;let J=Y.search(/\S/);if(J===-1)continue;while(Z.length>1&&Z[Z.length-1].indent>=J)Z.pop();let G=Z[Z.length-1].obj,W=Y.match(/^(\s*)(\S[^:]*):\s*(.*)$/);if(!W)continue;let[,,K,_]=W,U=K.trim(),F=_.trim();if(F==="")G[U]={},Z.push({obj:G[U],indent:J});else G[U]=FY(F)}return X}function FY($){if($.startsWith("'")&&$.endsWith("'")||$.startsWith('"')&&$.endsWith('"'))return $.slice(1,-1);return $}function d5($,X,Z){let Q=$.translations[X]?.[Z];if(typeof Q==="string")return Q;let Y=$.translations[$.defaultLocale]?.[Z];if(typeof Y==="string")return Y;return Z}function v$($,X,Z){return $.replace(/\{t(!?):([a-zA-Z][\w.-]*)\}/g,(Q,Y,J)=>{let G=d5(X,Z,J);return Y==="!"?G:zY(G)})}function a0($,X,Z){if(X===Z)return $;if($==="/")return`/${X}/`;if($==="/404.html")return`/${X}/404.html`;return`/${X}${$}`}function i7($,X){for(let Z of X){if($===`/${Z}`||$===`/${Z}/`)return{locale:Z,path:"/"};if($.startsWith(`/${Z}/`))return{locale:Z,path:$.slice(Z.length+1)}}return{locale:null,path:$}}function g$($,X,Z){let Q=$.replace(/\/$/,""),Y=[];for(let G of Z.locales){let W=`${Q}${a0(X,G,Z.defaultLocale)}`;Y.push(`<link rel="alternate" hreflang="${b$(G)}" href="${b$(W)}">`)}let J=`${Q}${a0(X,Z.defaultLocale,Z.defaultLocale)}`;return Y.push(`<link rel="alternate" hreflang="x-default" href="${b$(J)}">`),Y.join(`
4397
- `)}function f$($,X){let Z=`<meta name="stx-layout-group" content="i18n:${b$(X)}">`;if(/<meta name="stx-layout-group"[^>]*>/i.test($))return $.replace(/<meta name="stx-layout-group"[^>]*>/i,Z);if(/<\/head>/i.test($))return $.replace(/<\/head>/i,`${Z}
4405
+ ${K}`)}if(!Z&&!$.includes("__stxThemeGuard")&&/<head\b[^>]*>/i.test($)){let _=`<script data-stx-theme-guard="1">${`window.__STX_COLOR_MODE__=window.__STX_COLOR_MODE__||${JSON.stringify({storageKey:J,initialMode:Y,darkClass:"dark"})};`}${_Y(Y,J,G,W)};window.__stxThemeGuard=1;</script>`;$=$.replace(/<head\b([^>]*)>/i,`<head$1>
4406
+ ${_}`)}if(!Z&&!$.includes("__stxThemeToggle")&&/<\/body>/i.test($)){let K=`<script data-stx-theme-toggle="1">${UY(J,G,W)};window.__stxThemeToggle=1;</script>`;$=$.replace(/<\/body>/i,`${K}
4407
+ </body>`)}return $}async function r7($,X){if($.length===0)return{succeeded:[],failed:[]};try{return await X($),{succeeded:[...$],failed:[]}}catch{}let Z=[],Q=[];for(let Y of $)try{await X([Y]),Z.push(Y)}catch(J){Q.push({entrypoint:Y,error:U1(J,Y)})}return{succeeded:Z,failed:Q}}import{existsSync as BY,readFileSync as LY}from"fs";import{join as FY,resolve as zY}from"path";import jY from"process";function v$($,X=jY.cwd()){let Z=$.i18n;if(!Z||!Array.isArray(Z.locales)||Z.locales.length===0)return null;let Q=Z.defaultLocale??Z.locales[0],Y=HY(Z,X);return{locales:Z.locales,defaultLocale:Q,labels:Z.labels??Object.fromEntries(Z.locales.map((J)=>[J,J.toUpperCase()])),translations:Y,pickerSelector:Z.pickerSelector??"#lang-picker"}}function HY($,X){let Z=$.translations??{},Q={},Y=$.translationsDir,J=Y===!1?null:zY(X,typeof Y==="string"&&Y?Y:"translations"),G=$.format??"json";for(let W of $.locales){let K=J?OY(J,W,G):{};Q[W]={...K,...Z[W]??{}}}return Q}function OY($,X,Z){let Q=Z==="json"?[`${X}.json`]:[`${X}.${Z}`,`${X}.${Z==="yaml"?"yml":"yaml"}`];for(let Y of Q){let J=FY($,Y);if(!BY(J))continue;try{let G=LY(J,"utf8"),W=Z==="json"?JSON.parse(G):AY(G);return n7(W)}catch{continue}}return{}}function n7($,X="",Z={}){if(!$||typeof $!=="object")return Z;for(let[Q,Y]of Object.entries($)){let J=X?`${X}.${Q}`:Q;if(Y&&typeof Y==="object"&&!Array.isArray(Y))n7(Y,J,Z);else if(typeof Y==="string")Z[J]=Y;else if(typeof Y==="number"||typeof Y==="boolean")Z[J]=String(Y)}return Z}function AY($){let X={},Z=[{obj:X,indent:-1}];for(let Q of $.split(`
4408
+ `)){let Y=Q.replace(/#.*$/,"").trimEnd();if(!Y.trim())continue;let J=Y.search(/\S/);if(J===-1)continue;while(Z.length>1&&Z[Z.length-1].indent>=J)Z.pop();let G=Z[Z.length-1].obj,W=Y.match(/^(\s*)(\S[^:]*):\s*(.*)$/);if(!W)continue;let[,,K,_]=W,U=K.trim(),F=_.trim();if(F==="")G[U]={},Z.push({obj:G[U],indent:J});else G[U]=NY(F)}return X}function NY($){if($.startsWith("'")&&$.endsWith("'")||$.startsWith('"')&&$.endsWith('"'))return $.slice(1,-1);return $}function p5($,X,Z){let Q=$.translations[X]?.[Z];if(typeof Q==="string")return Q;let Y=$.translations[$.defaultLocale]?.[Z];if(typeof Y==="string")return Y;return Z}function g$($,X,Z){return $.replace(/\{t(!?):([a-zA-Z][\w.-]*)\}/g,(Q,Y,J)=>{let G=p5(X,Z,J);return Y==="!"?G:qY(G)})}function a0($,X,Z){if(X===Z)return $;if($==="/")return`/${X}/`;if($==="/404.html")return`/${X}/404.html`;return`/${X}${$}`}function o7($,X){for(let Z of X){if($===`/${Z}`||$===`/${Z}/`)return{locale:Z,path:"/"};if($.startsWith(`/${Z}/`))return{locale:Z,path:$.slice(Z.length+1)}}return{locale:null,path:$}}function f$($,X,Z){let Q=$.replace(/\/$/,""),Y=[];for(let G of Z.locales){let W=`${Q}${a0(X,G,Z.defaultLocale)}`;Y.push(`<link rel="alternate" hreflang="${y$(G)}" href="${y$(W)}">`)}let J=`${Q}${a0(X,Z.defaultLocale,Z.defaultLocale)}`;return Y.push(`<link rel="alternate" hreflang="x-default" href="${y$(J)}">`),Y.join(`
4409
+ `)}function h$($,X){let Z=`<meta name="stx-layout-group" content="i18n:${y$(X)}">`;if(/<meta name="stx-layout-group"[^>]*>/i.test($))return $.replace(/<meta name="stx-layout-group"[^>]*>/i,Z);if(/<\/head>/i.test($))return $.replace(/<\/head>/i,`${Z}
4398
4410
  </head>`);return`${Z}
4399
- ${$}`}function h$($,X){return`<script data-stx-lang-picker="1">window.__stxI18n=${JSON.stringify({locales:$.locales,defaultLocale:$.defaultLocale,current:X,pickerSelector:$.pickerSelector})};(function(){function cfg(){return window.__stxI18n}function localeFromPath(p){var d=cfg();for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/')return c;if(p.indexOf('/'+c+'/')===0)return c}return d.defaultLocale}function localePathFor(loc,p){var d=cfg();var stripped=p;for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/'){stripped='/';break}if(p.indexOf('/'+c+'/')===0){stripped=p.slice(c.length+1);break}}if(loc===d.defaultLocale)return stripped;if(stripped==='/')return '/'+loc+'/';return '/'+loc+stripped}cfg().localizeHref=function(href){try{var u=new URL(href,location.origin);if(u.origin!==location.origin)return href;return localePathFor(localeFromPath(location.pathname),u.pathname)+(u.search||'')+(u.hash||'')}catch(_){return href}};function syncFromUrl(){var d=cfg();var loc=localeFromPath(location.pathname);d.current=loc;var picker=document.querySelector(d.pickerSelector);if(picker){var btns=picker.querySelectorAll('[data-lang]');for(var i=0;i<btns.length;i++){var b=btns[i];if(b.getAttribute('data-lang')===loc)b.setAttribute('aria-current','true');else b.removeAttribute('aria-current')}}if(document.documentElement.lang!==loc)document.documentElement.lang=loc}function onLangClick(e){var d=cfg();var btn=e.target&&e.target.closest&&e.target.closest('[data-lang]');if(!btn)return;var picker=document.querySelector(d.pickerSelector);if(!picker||!picker.contains(btn))return;e.preventDefault();e.stopPropagation();var loc=btn.getAttribute('data-lang');if(!loc||loc===localeFromPath(location.pathname))return;var dest=localePathFor(loc,location.pathname);var r=window.__stxRouter;if(r&&r.navigate)r.navigate(dest,true,true);else location.assign(dest)}syncFromUrl();if(window.__stxLangPickerBound){document.removeEventListener('click',window.__stxLangPickerClick,true);window.removeEventListener('stx:navigate',window.__stxLangPickerSync);window.removeEventListener('popstate',window.__stxLangPickerSync)}window.__stxLangPickerClick=onLangClick;window.__stxLangPickerSync=syncFromUrl;window.__stxLangPickerBound=1;document.addEventListener('click',onLangClick,true);window.addEventListener('stx:navigate',syncFromUrl);window.addEventListener('popstate',syncFromUrl)})();</script>`}function b$($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function zY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}async function e7($){let X=Date.now(),Z=$.pagesDir??"pages",Q=$.outDir??"dist",Y=$.publicDir??"public";if(!$.noClean)OY(Q,{recursive:!0,force:!0});r7(Q,{recursive:!0});let J=new jY(`${Z}/**/*.stx`),G=await Array.fromAsync(J.scan(".")),W=$.excludeDirs??["layouts","partials","components"],K=[],_=G.filter((q)=>{let N=q.slice(Z.length).replace(/^[\\/]+/,"");if(N.split(/[\\/]/).slice(0,-1).some((M)=>W.includes(M)))return K.push(q),!1;return!N.split(/[\\/]/).some((M)=>M.startsWith("_"))});if(K.length>0)console.warn(`[stx] ${K.length} file(s) under ${Z}/ skipped as non-pages: ${W.join(", ")}`);if(_.length===0)throw Error(`No .stx files found in ${Z}/`);let U=await c7(_,(q)=>Bun.build({entrypoints:q,outdir:Q,plugins:[m7()],naming:{entry:"[name].[ext]"}}));if(U.failed.length>0){for(let{entrypoint:q,error:N}of U.failed)console.error(`[stx] failed to build ${q}:
4400
- ${N}`);if(U.succeeded.length===0)throw Error(`Build failed: none of the ${_.length} page(s) could be built`);console.error(`[stx] ${U.failed.length} of ${_.length} page(s) skipped; the rest were built.`)}IY(Q);let F=c5(Q).filter((q)=>q.endsWith(".html")),z=y$($,n7.cwd()),j=new Set(F.map(u$));for(let q of F){let N=x0(Q,q),I=s7(N,"utf8"),M=u$(q),w=z?z.locales:[$.seo?.locale?.split(/[_-]/)[0]??"en"];for(let D of w){let T=I;if(T=RY(T),z)T=v$(T,z,D);if(T=await J0(T,n7.cwd()),T=k$(T,$,$.pages?.[M],M),z)T=DY(T,$,z,D,M),T=wY(T,D,z.defaultLocale,j),T=f$(T,D);if(T=P$(T,$),T=TY(T),z)T=T.replace(/<\/body>/i,`${h$(z,D)}
4401
- </body>`);if($.spa!==!1)T=await h5(T,$.router);let f=z?EY(M,D,z.defaultLocale):q,c=x0(Q,f);if(r7(VY(c),{recursive:!0}),d$(c,T),z&&D!==z.defaultLocale&&f!==q);}}let H=m5(Q);if(H.assets>0)console.log(`[stx] externalized ${H.assets} asset(s) from ${H.pages} page(s) (${(H.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);let L=p5(Q);if(L.assets>0)console.log(`[stx] externalized ${L.assets} repeated asset(s) from ${L.pages} page(s) (${(L.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);if(m$(Y))a7(Y,Q,{recursive:!0});let O=t7();if(O)a7(O,x0(Q,o7),{recursive:!0});let A=x0(Q,"404.html");if(!m$(A)&&m$(x0(Q,"index.html"))){let q=s7(x0(Q,"index.html"),"utf8").replace(/<title>[^<]*<\/title>/i,`<title>404 \u2014 ${CY($.name)}</title>`);d$(A,q)}if($.sitemap!==!1){let q=[],N=F.filter((M)=>M!=="404.html").map(u$),I=z?z.locales:[null];for(let M of N){let w=$.pages?.[M];for(let D of I){let T=D&&z?a0(M,D,z.defaultLocale):M;q.push({path:T,page:w})}}d$(x0(Q,"sitemap.xml"),x$($,q))}let V=S$($);if(V!==null)d$(x0(Q,"robots.txt"),V);let E=F.map(u$);return{outDir:Q,pages:E,durationMs:Date.now()-X}}function VY($){return NY($)}function EY($,X,Z){let Q=a0($,X,Z);if(Q==="/")return"index.html";let Y=Q.replace(/^\//,"").replace(/\/$/,"");if(!Y.includes("/")){if(X!==Z&&Y===X)return`${X}/index.html`;return`${Y}.html`}return`${Y}.html`.replace(/\.html\.html$/,".html")}function u$($){if($==="index.html")return"/";return`/${$.replace(/\.html$/,"").replace(/\/index$/,"")}`}function c5($,X=$){let Z=[];if(!m$($))return Z;for(let Q of HY($,{withFileTypes:!0})){let Y=x0($,Q.name);if(Q.isDirectory())Z.push(...c5(Y,X));else Z.push(MY(X,Y))}return Z}function IY($){for(let X of c5($)){if(!/^chunk-.*\.js(?:\.map)?$/.test(X))continue;let Z=x0($,X);try{if(AY(Z).size===0)qY(Z)}catch{}}}function RY($){return $.replace(/<script[^>]*src=["']\.\/chunk-[^"']*\.js["'][^>]*><\/script>\s*/g,"")}function DY($,X,Z,Q,Y){if(!Z)return $;if(/<html\b[^>]*\blang=/i.test($))$=$.replace(/<html\b([^>]*)\blang="[^"]*"/i,`<html$1lang="${Q}"`);else $=$.replace(/<html\b([^>]*)>/i,`<html$1 lang="${Q}">`);let J=`${X.url.replace(/\/$/,"")}${a0(Y,Q,Z.defaultLocale)}`;if(/<link rel="canonical"/.test($))$=$.replace(/<link rel="canonical"[^>]*>/,`<link rel="canonical" href="${u5(J)}">`);let G=Q.includes("_")||Q.includes("-")?Q:Q.toLowerCase();if(/<meta property="og:locale"/.test($))$=$.replace(/<meta property="og:locale"[^>]*>/,`<meta property="og:locale" content="${u5(G)}">`);if(/<meta property="og:url"/.test($))$=$.replace(/<meta property="og:url"[^>]*>/,`<meta property="og:url" content="${u5(J)}">`);let W=g$(X.url,Y,Z);if(!$.includes("hreflang="))$=$.replace(/<link rel="canonical"[^>]*>/,(K)=>`${W}
4402
- ${K}`);return $}function u5($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function wY($,X,Z,Q){if(X===Z)return $;return $.replace(/<a\b([^>]*?)\bhref="(\/[^"]*)"([^>]*)>/gi,(Y,J,G,W)=>{if(G.startsWith("//"))return Y;if(G===`/${X}`||G===`/${X}/`||G.startsWith(`/${X}/`))return Y;let K=G.match(/^(\/[^?#]*)(.*)$/);if(!K)return Y;let[,_,U]=K,F=_==="/"?"/":_.replace(/\/$/,"");if(!Q.has(F))return Y;let z=F==="/"?`/${X}/`:`/${X}${F}`;return`<a${J}href="${z}${U}"${W}>`})}function TY($){if(/<main\b/i.test($)||/\bdata-stx-content\b/i.test($))return $;let X=$.match(/<body\b[^>]*>/i),Z=$.search(/<\/body\s*>/i);if(!X||Z<0)return $;let Q=X.index+X[0].length,Y=$.slice(Q,Z),J=0,G=[...Y.matchAll(/<\/nav>/gi)];if(G.length>0){let z=G[G.length-1];J=z.index+z[0].length}let W=Y.length,K=Y.search(/<footer\b/i);if(K!==-1)W=Math.min(W,K);let _=Y.search(/<script\b[^>]*data-stx-(?:theme-toggle|reparent-progress)\b/i);if(_!==-1)W=Math.min(W,_);if(W<=J)return $;let U=Y.slice(J,W);if(!U.trim())return $;let F=`${Y.slice(0,J)}
4411
+ ${$}`}function d$($,X){return`<script data-stx-lang-picker="1">window.__stxI18n=${JSON.stringify({locales:$.locales,defaultLocale:$.defaultLocale,current:X,pickerSelector:$.pickerSelector})};(function(){function cfg(){return window.__stxI18n}function localeFromPath(p){var d=cfg();for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/')return c;if(p.indexOf('/'+c+'/')===0)return c}return d.defaultLocale}function localePathFor(loc,p){var d=cfg();var stripped=p;for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/'){stripped='/';break}if(p.indexOf('/'+c+'/')===0){stripped=p.slice(c.length+1);break}}if(loc===d.defaultLocale)return stripped;if(stripped==='/')return '/'+loc+'/';return '/'+loc+stripped}cfg().localizeHref=function(href){try{var u=new URL(href,location.origin);if(u.origin!==location.origin)return href;return localePathFor(localeFromPath(location.pathname),u.pathname)+(u.search||'')+(u.hash||'')}catch(_){return href}};function syncFromUrl(){var d=cfg();var loc=localeFromPath(location.pathname);d.current=loc;var picker=document.querySelector(d.pickerSelector);if(picker){var btns=picker.querySelectorAll('[data-lang]');for(var i=0;i<btns.length;i++){var b=btns[i];if(b.getAttribute('data-lang')===loc)b.setAttribute('aria-current','true');else b.removeAttribute('aria-current')}}if(document.documentElement.lang!==loc)document.documentElement.lang=loc}function onLangClick(e){var d=cfg();var btn=e.target&&e.target.closest&&e.target.closest('[data-lang]');if(!btn)return;var picker=document.querySelector(d.pickerSelector);if(!picker||!picker.contains(btn))return;e.preventDefault();e.stopPropagation();var loc=btn.getAttribute('data-lang');if(!loc||loc===localeFromPath(location.pathname))return;var dest=localePathFor(loc,location.pathname);var r=window.__stxRouter;if(r&&r.navigate)r.navigate(dest,true,true);else location.assign(dest)}syncFromUrl();if(window.__stxLangPickerBound){document.removeEventListener('click',window.__stxLangPickerClick,true);window.removeEventListener('stx:navigate',window.__stxLangPickerSync);window.removeEventListener('popstate',window.__stxLangPickerSync)}window.__stxLangPickerClick=onLangClick;window.__stxLangPickerSync=syncFromUrl;window.__stxLangPickerBound=1;document.addEventListener('click',onLangClick,true);window.addEventListener('stx:navigate',syncFromUrl);window.addEventListener('popstate',syncFromUrl)})();</script>`}function y$($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function qY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}async function Y3($){let X=Date.now(),Z=$.pagesDir??"pages",Q=$.outDir??"dist",Y=$.publicDir??"public";if(!$.noClean)EY(Q,{recursive:!0,force:!0});e7(Q,{recursive:!0});let J=new MY(`${Z}/**/*.stx`),G=await Array.fromAsync(J.scan(".")),W=$.excludeDirs??["layouts","partials","components"],K=[],_=G.filter((N)=>{let q=N.slice(Z.length).replace(/^[\\/]+/,"");if(q.split(/[\\/]/).slice(0,-1).some((E)=>W.includes(E)))return K.push(N),!1;return!q.split(/[\\/]/).some((E)=>E.startsWith("_"))});if(K.length>0)console.warn(`[stx] ${K.length} file(s) under ${Z}/ skipped as non-pages: ${W.join(", ")}`);if(_.length===0)throw Error(`No .stx files found in ${Z}/`);let U=await r7(_,(N)=>Bun.build({entrypoints:N,outdir:Q,plugins:[a7()],naming:{entry:"[name].[ext]"}}));if(U.failed.length>0){for(let{entrypoint:N,error:q}of U.failed)console.error(`[stx] failed to build ${N}:
4412
+ ${q}`);if(U.succeeded.length===0)throw Error(`Build failed: none of the ${_.length} page(s) could be built`);console.error(`[stx] ${U.failed.length} of ${_.length} page(s) skipped; the rest were built.`)}kY(Q);let F=a5(Q).filter((N)=>N.endsWith(".html")),z=v$($,X3.cwd()),j=new Set(F.map(m$));for(let N of F){let q=x0(Q,N),I=$3(q,"utf8"),E=m$(N),w=z?z.locales:[$.seo?.locale?.split(/[_-]/)[0]??"en"];for(let D of w){let T=I;if(T=xY(T),z)T=g$(T,z,D);if(T=await J0(T,X3.cwd()),T=x$(T,$,$.pages?.[E],E),z)T=SY(T,$,z,D,E),T=PY(T,D,z.defaultLocale,j),T=h$(T,D);if(T=b$(T,$),T=bY(T),z)T=T.replace(/<\/body>/i,`${d$(z,D)}
4413
+ </body>`);if($.spa!==!1)T=await m5(T,$.router);let f=z?CY(E,D,z.defaultLocale):N,c=x0(Q,f);if(e7(TY(c),{recursive:!0}),u$(c,T),z&&D!==z.defaultLocale&&f!==N);}}let H=l5(Q);if(H.assets>0)console.log(`[stx] externalized ${H.assets} asset(s) from ${H.pages} page(s) (${(H.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);let L=i5(Q);if(L.assets>0)console.log(`[stx] externalized ${L.assets} repeated asset(s) from ${L.pages} page(s) (${(L.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);if(p$(Y))t7(Y,Q,{recursive:!0});let O=Q3();if(O)t7(O,x0(Q,Z3),{recursive:!0});let A=x0(Q,"404.html");if(!p$(A)&&p$(x0(Q,"index.html"))){let N=$3(x0(Q,"index.html"),"utf8").replace(/<title>[^<]*<\/title>/i,`<title>404 \u2014 ${yY($.name)}</title>`);u$(A,N)}if($.sitemap!==!1){let N=[],q=F.filter((E)=>E!=="404.html").map(m$),I=z?z.locales:[null];for(let E of q){let w=$.pages?.[E];for(let D of I){let T=D&&z?a0(E,D,z.defaultLocale):E;N.push({path:T,page:w})}}u$(x0(Q,"sitemap.xml"),S$($,N))}let M=P$($);if(M!==null)u$(x0(Q,"robots.txt"),M);let V=F.map(m$);return{outDir:Q,pages:V,durationMs:Date.now()-X}}function TY($){return DY($)}function CY($,X,Z){let Q=a0($,X,Z);if(Q==="/")return"index.html";let Y=Q.replace(/^\//,"").replace(/\/$/,"");if(!Y.includes("/")){if(X!==Z&&Y===X)return`${X}/index.html`;return`${Y}.html`}return`${Y}.html`.replace(/\.html\.html$/,".html")}function m$($){if($==="index.html")return"/";return`/${$.replace(/\.html$/,"").replace(/\/index$/,"")}`}function a5($,X=$){let Z=[];if(!p$($))return Z;for(let Q of VY($,{withFileTypes:!0})){let Y=x0($,Q.name);if(Q.isDirectory())Z.push(...a5(Y,X));else Z.push(wY(X,Y))}return Z}function kY($){for(let X of a5($)){if(!/^chunk-.*\.js(?:\.map)?$/.test(X))continue;let Z=x0($,X);try{if(IY(Z).size===0)RY(Z)}catch{}}}function xY($){return $.replace(/<script[^>]*src=["']\.\/chunk-[^"']*\.js["'][^>]*><\/script>\s*/g,"")}function SY($,X,Z,Q,Y){if(!Z)return $;if(/<html\b[^>]*\blang=/i.test($))$=$.replace(/<html\b([^>]*)\blang="[^"]*"/i,`<html$1lang="${Q}"`);else $=$.replace(/<html\b([^>]*)>/i,`<html$1 lang="${Q}">`);let J=`${X.url.replace(/\/$/,"")}${a0(Y,Q,Z.defaultLocale)}`;if(/<link rel="canonical"/.test($))$=$.replace(/<link rel="canonical"[^>]*>/,`<link rel="canonical" href="${c5(J)}">`);let G=Q.includes("_")||Q.includes("-")?Q:Q.toLowerCase();if(/<meta property="og:locale"/.test($))$=$.replace(/<meta property="og:locale"[^>]*>/,`<meta property="og:locale" content="${c5(G)}">`);if(/<meta property="og:url"/.test($))$=$.replace(/<meta property="og:url"[^>]*>/,`<meta property="og:url" content="${c5(J)}">`);let W=f$(X.url,Y,Z);if(!$.includes("hreflang="))$=$.replace(/<link rel="canonical"[^>]*>/,(K)=>`${W}
4414
+ ${K}`);return $}function c5($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function PY($,X,Z,Q){if(X===Z)return $;return $.replace(/<a\b([^>]*?)\bhref="(\/[^"]*)"([^>]*)>/gi,(Y,J,G,W)=>{if(G.startsWith("//"))return Y;if(G===`/${X}`||G===`/${X}/`||G.startsWith(`/${X}/`))return Y;let K=G.match(/^(\/[^?#]*)(.*)$/);if(!K)return Y;let[,_,U]=K,F=_==="/"?"/":_.replace(/\/$/,"");if(!Q.has(F))return Y;let z=F==="/"?`/${X}/`:`/${X}${F}`;return`<a${J}href="${z}${U}"${W}>`})}function bY($){if(/<main\b/i.test($)||/\bdata-stx-content\b/i.test($))return $;let X=$.match(/<body\b[^>]*>/i),Z=$.search(/<\/body\s*>/i);if(!X||Z<0)return $;let Q=X.index+X[0].length,Y=$.slice(Q,Z),J=0,G=[...Y.matchAll(/<\/nav>/gi)];if(G.length>0){let z=G[G.length-1];J=z.index+z[0].length}let W=Y.length,K=Y.search(/<footer\b/i);if(K!==-1)W=Math.min(W,K);let _=Y.search(/<script\b[^>]*data-stx-(?:theme-toggle|reparent-progress)\b/i);if(_!==-1)W=Math.min(W,_);if(W<=J)return $;let U=Y.slice(J,W);if(!U.trim())return $;let F=`${Y.slice(0,J)}
4403
4415
  <main>${U}</main>
4404
- ${Y.slice(W)}`;return`${$.slice(0,Q)}${F}${$.slice(Z)}`}function CY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function $3($){return $}var kY=new Set(["if","else","elseif","else-if","for","foreach","show","model","html","text","bind","key","ref","once","memo","slot","teleport","cloak","pre","effect","init"]),xY=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function SY($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function PY($){let X=[],Z=/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi,Q;while((Q=Z.exec($))!==null)X.push([Q.index,Q.index+Q[0].length]);return X}function bY($,X){for(let[Z,Q]of $)if(X>=Z&&X<Q)return!0;return!1}function c$($,X){let Z=1,Q=0;for(let Y=0;Y<X&&Y<$.length;Y++)if($[Y]===`
4405
- `)Z++,Q=Y+1;return{line:Z,column:X-Q+1}}function yY($,X,Z){let Q=X.toLowerCase(),Y=$.length,J=1,G=Z;while(G<Y){let W=$.indexOf("<",G);if(W===-1)return-1;if(G=W,$.startsWith("<!--",G)){let U=$.indexOf("-->",G+4);if(U===-1)return-1;G=U+3;continue}if($[G+1]==="/"){let U=/^<\/([a-z][\w-]*)\s*>/i.exec($.slice(G,G+64));if(!U){G++;continue}if(U[1].toLowerCase()===Q){if(J--,G+=U[0].length,J===0)return G;continue}G+=U[0].length;continue}let K=/^<([a-z][\w-]*)\b/i.exec($.slice(G,G+64));if(!K){G++;continue}let _=$.indexOf(">",G);if(_===-1)return-1;if(K[1].toLowerCase()===Q&&$[_-1]!=="/")J++;G=_+1}return-1}function vY($,X,Z){let Q=/@([a-z][\w:-]*)((?:\.[a-z][\w-]*)*)\s*=\s*"([^"]*)"/gi,Y;while((Y=Q.exec($))!==null){if(bY(X,Y.index))continue;let J=Y[1].toLowerCase().split(":")[0];if(kY.has(J))continue;let G=Y[3].trim();if(/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+$/.test(G)){let W=$.indexOf(Y[3],Y.index),{line:K,column:_}=c$($,W<0?Y.index:W);Z.push({ruleId:"stx/no-bare-function-ref-in-event",message:`Event handler @${Y[1]}="${G}" is a member path, which the runtime does not invoke \u2014 it only auto-calls a plain identifier. Call it: @${Y[1]}="${G}($event)".`,line:K,column:_,severity:"error"})}}}function X3($){let X=$.split("/"),Z=[];for(let Q of X){if(Q===""||Q===".")continue;if(Q==="..")Z.pop();else Z.push(Q)}return Z.join("/")}function gY($,X,Z){let Q=X.replace(/\\/g,"/"),Y=Q.indexOf("resources/stores/");if(Y===-1)return;let J=Q.slice(0,Y+16),G=Q.slice(0,Q.lastIndexOf("/")),W=/\b(import|export)\s+(type\s+)?([^'"]*?)\s*from\s*['"]([^'"]+)['"]/g,K;while((K=W.exec($))!==null){if(K[2])continue;let _=K[1],U=K[4],F;if(U.startsWith("."))F=!X3(`${G}/${U}`).startsWith(X3(J));else F=!0;if(F){let{line:z,column:j}=c$($,K.index),H=_==="export"?"Value re-export":"Value import";Z.push({ruleId:"stx/store-value-imports-must-be-local",message:`${H} from "${U}" is outside resources/stores/ and will be stripped from the store bundle. Use \`${_} type\`, or move the value into the stores dir.`,line:z,column:j,severity:"error"})}}}function fY($){let X=$.trim(),Z=(G)=>{let W=G.match(/[A-Za-z_$][\w$]*/g);return W?W:[]},Q=/\bas\s+(.+)$/.exec(X);if(Q){let G=Q[1].trim(),W=/^([A-Za-z_$][\w$]*)\s*=>\s*([A-Za-z_$][\w$]*)/.exec(G);if(W)return[W[1],W[2]];let K=/^\(([^)]*)\)/.exec(G);if(K)return Z(K[1]);let _=/^([A-Za-z_$][\w$]*)/.exec(G);return _?[_[1]]:[]}let Y=/^\(([^)]*)\)\s+(?:in|of)\s+/.exec(X);if(Y)return Z(Y[1]);let J=/^([A-Za-z_$][\w$]*)\s+(?:in|of)\s+/.exec(X);return J?[J[1]]:[]}function hY($,X){let Z=/(?::for|x-for|@for)\s*=\s*"([^"]*)"/gi,Q;while((Q=Z.exec($))!==null){let Y=fY(Q[1]);if(Y.length===0)continue;let J=$.lastIndexOf("<",Q.index);if(J===-1)continue;let G=/^<([a-z][\w-]*)/i.exec($.slice(J,J+64));if(!G)continue;let W=$.indexOf(">",Q.index);if(W===-1)continue;let _=$[W-1]==="/"||xY.has(G[1].toLowerCase())?W+1:yY($,G[1],W+1),U=_===-1?W+1:_,F=$.indexOf(Q[1],Q.index),z=$.slice(J,U);if(F>=0&&F+Q[1].length<=U){let j=F-J;z=z.slice(0,j)+" ".repeat(Q[1].length)+z.slice(j+Q[1].length)}for(let j of Y){let H=new RegExp(`(?<![.\\w$])${SY(j)}\\s*\\(`,"g"),L;while((L=H.exec(z))!==null){let O=J+L.index,{line:A,column:V}=c$($,O);X.push({ruleId:"stx/no-signal-call-in-for-iteration-var",message:`"${j}" is a :for iteration variable, not a signal \u2014 calling it as "${j}()" leaves it as a function and silently breaks comparisons. Use "${j}" directly.`,line:A,column:V,severity:"error"})}}}}function dY($,X){let Z=/<!--([\s\S]*?)-->/g,Q;while((Q=Z.exec($))!==null){let J=Q[1].indexOf("`");if(J!==-1){let G=Q.index+4+J,{line:W,column:K}=c$($,G);X.push({ruleId:"stx/no-backticks-in-html-comments",message:"Backtick inside an HTML comment leaks into the merged setup function and flips the JS parser into template-literal mode. Remove it or rephrase the comment.",line:W,column:K,severity:"error"})}}}function p$($,X){return $?.[X]!==!1}function uY($,X={}){let Z=[],Q=PY($),Y=(X.filePath??"").replace(/\\/g,"/"),J=X.fileKind??(/\/components?\//i.test(Y)?"component":/\/layouts?\//i.test(Y)?"layout":"view");if(p$(X.rules,"stx/no-bare-function-ref-in-event"))vY($,Q,Z);if(Y&&p$(X.rules,"stx/store-value-imports-must-be-local"))gY($,Y,Z);if(p$(X.rules,"stx/no-signal-call-in-for-iteration-var"))hY($,Z);if(p$(X.rules,"stx/no-backticks-in-html-comments"))dY($,Z);Z.sort((W,K)=>W.line-K.line||W.column-K.column);let G=new Set;return Z.filter((W)=>{let K=`${W.ruleId}:${W.line}:${W.column}`;if(G.has(K))return!1;return G.add(K),!0})}function mY($,X){return $.kind===X}function Z3($){if($===String)return"string";if($===Number)return"number";if($===Boolean)return"boolean";if($===Array)return"array";if($===Object)return"object";if($===Function)return"function";if($===Date)return"date";if($===Symbol)return"symbol";if(typeof $==="function"&&$.name)return $.name;return"unknown"}function pY($,X){if($===null||$===void 0)return!0;if(X===String)return typeof $==="string";if(X===Number)return typeof $==="number"&&!Number.isNaN($);if(X===Boolean)return typeof $==="boolean";if(X===Array)return Array.isArray($);if(X===Object)return typeof $==="object"&&!Array.isArray($);if(X===Function)return typeof $==="function";if(X===Date)return $ instanceof Date;if(X===Symbol)return typeof $==="symbol";if(typeof X==="function")return $ instanceof X;return!0}function Q3($,X,Z,Q){let Y=Q?`[${Q}]`:"";if(Z.required&&(X===void 0||X===null))return{prop:$,message:`${Y} Missing required prop: "${$}"`,value:X,expected:Z.type?Z3(Z.type):void 0};if(X===void 0||X===null)return null;if(Z.type){let J=Array.isArray(Z.type)?Z.type:[Z.type];if(!J.some((W)=>pY(X,W))){let W=J.map((K)=>Z3(K)).join(" | ");return{prop:$,message:`${Y} Invalid prop type for "${$}": expected ${W}, got ${typeof X}`,value:X,expected:W}}}if(Z.validator){if(!Z.validator(X))return{prop:$,message:`${Y} Custom validation failed for prop "${$}"`,value:X}}return null}function cY($){let X=globalThis.__STX_CURRENT_PROPS__||{};if(!$)return X;let Z={...X};for(let[Q,Y]of Object.entries($)){let J=typeof Y==="function"||Array.isArray(Y)?{type:Y}:Y||{};if(Z[Q]===void 0&&J.default!==void 0)Z[Q]=typeof J.default==="function"?J.default():J.default}return Z}function lY($,X={}){let{componentName:Z,throwOnError:Q=!1,logWarnings:Y=!0}=X,J=globalThis.__STX_CURRENT_PROPS__||{},G={...J},W={valid:!0,errors:[],warnings:[]};for(let[K,_]of Object.entries($)){let U=typeof _==="function"||Array.isArray(_)?{type:_}:_||{};if(G[K]===void 0&&U.default!==void 0)G[K]=typeof U.default==="function"?U.default():U.default;let F=Q3(K,G[K],U,Z);if(F){if(W.valid=!1,W.errors.push(F),Y)console.warn(F.message)}}for(let K of Object.keys(J))if(!(K in $)){let _=`${Z?`[${Z}]`:""} Unknown prop: "${K}"`;if(W.warnings.push(_),Y)console.warn(_)}if(Q&&!W.valid){let K=W.errors.map((_)=>_.message).join(`
4416
+ ${Y.slice(W)}`;return`${$.slice(0,Q)}${F}${$.slice(Z)}`}function yY($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function J3($){return $}var vY=new Set(["if","else","elseif","else-if","for","foreach","show","model","html","text","bind","key","ref","once","memo","slot","teleport","cloak","pre","effect","init"]),gY=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function fY($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function hY($){let X=[],Z=/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi,Q;while((Q=Z.exec($))!==null)X.push([Q.index,Q.index+Q[0].length]);return X}function dY($,X){for(let[Z,Q]of $)if(X>=Z&&X<Q)return!0;return!1}function l$($,X){let Z=1,Q=0;for(let Y=0;Y<X&&Y<$.length;Y++)if($[Y]===`
4417
+ `)Z++,Q=Y+1;return{line:Z,column:X-Q+1}}function uY($,X,Z){let Q=X.toLowerCase(),Y=$.length,J=1,G=Z;while(G<Y){let W=$.indexOf("<",G);if(W===-1)return-1;if(G=W,$.startsWith("<!--",G)){let U=$.indexOf("-->",G+4);if(U===-1)return-1;G=U+3;continue}if($[G+1]==="/"){let U=/^<\/([a-z][\w-]*)\s*>/i.exec($.slice(G,G+64));if(!U){G++;continue}if(U[1].toLowerCase()===Q){if(J--,G+=U[0].length,J===0)return G;continue}G+=U[0].length;continue}let K=/^<([a-z][\w-]*)\b/i.exec($.slice(G,G+64));if(!K){G++;continue}let _=$.indexOf(">",G);if(_===-1)return-1;if(K[1].toLowerCase()===Q&&$[_-1]!=="/")J++;G=_+1}return-1}function mY($,X,Z){let Q=/@([a-z][\w:-]*)((?:\.[a-z][\w-]*)*)\s*=\s*"([^"]*)"/gi,Y;while((Y=Q.exec($))!==null){if(dY(X,Y.index))continue;let J=Y[1].toLowerCase().split(":")[0];if(vY.has(J))continue;let G=Y[3].trim();if(/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+$/.test(G)){let W=$.indexOf(Y[3],Y.index),{line:K,column:_}=l$($,W<0?Y.index:W);Z.push({ruleId:"stx/no-bare-function-ref-in-event",message:`Event handler @${Y[1]}="${G}" is a member path, which the runtime does not invoke \u2014 it only auto-calls a plain identifier. Call it: @${Y[1]}="${G}($event)".`,line:K,column:_,severity:"error"})}}}function G3($){let X=$.split("/"),Z=[];for(let Q of X){if(Q===""||Q===".")continue;if(Q==="..")Z.pop();else Z.push(Q)}return Z.join("/")}function pY($,X,Z){let Q=X.replace(/\\/g,"/"),Y=Q.indexOf("resources/stores/");if(Y===-1)return;let J=Q.slice(0,Y+16),G=Q.slice(0,Q.lastIndexOf("/")),W=/\b(import|export)\s+(type\s+)?([^'"]*?)\s*from\s*['"]([^'"]+)['"]/g,K;while((K=W.exec($))!==null){if(K[2])continue;let _=K[1],U=K[4],F;if(U.startsWith("."))F=!G3(`${G}/${U}`).startsWith(G3(J));else F=!0;if(F){let{line:z,column:j}=l$($,K.index),H=_==="export"?"Value re-export":"Value import";Z.push({ruleId:"stx/store-value-imports-must-be-local",message:`${H} from "${U}" is outside resources/stores/ and will be stripped from the store bundle. Use \`${_} type\`, or move the value into the stores dir.`,line:z,column:j,severity:"error"})}}}function cY($){let X=$.trim(),Z=(G)=>{let W=G.match(/[A-Za-z_$][\w$]*/g);return W?W:[]},Q=/\bas\s+(.+)$/.exec(X);if(Q){let G=Q[1].trim(),W=/^([A-Za-z_$][\w$]*)\s*=>\s*([A-Za-z_$][\w$]*)/.exec(G);if(W)return[W[1],W[2]];let K=/^\(([^)]*)\)/.exec(G);if(K)return Z(K[1]);let _=/^([A-Za-z_$][\w$]*)/.exec(G);return _?[_[1]]:[]}let Y=/^\(([^)]*)\)\s+(?:in|of)\s+/.exec(X);if(Y)return Z(Y[1]);let J=/^([A-Za-z_$][\w$]*)\s+(?:in|of)\s+/.exec(X);return J?[J[1]]:[]}function lY($,X){let Z=/(?::for|x-for|@for)\s*=\s*"([^"]*)"/gi,Q;while((Q=Z.exec($))!==null){let Y=cY(Q[1]);if(Y.length===0)continue;let J=$.lastIndexOf("<",Q.index);if(J===-1)continue;let G=/^<([a-z][\w-]*)/i.exec($.slice(J,J+64));if(!G)continue;let W=$.indexOf(">",Q.index);if(W===-1)continue;let _=$[W-1]==="/"||gY.has(G[1].toLowerCase())?W+1:uY($,G[1],W+1),U=_===-1?W+1:_,F=$.indexOf(Q[1],Q.index),z=$.slice(J,U);if(F>=0&&F+Q[1].length<=U){let j=F-J;z=z.slice(0,j)+" ".repeat(Q[1].length)+z.slice(j+Q[1].length)}for(let j of Y){let H=new RegExp(`(?<![.\\w$])${fY(j)}\\s*\\(`,"g"),L;while((L=H.exec(z))!==null){let O=J+L.index,{line:A,column:M}=l$($,O);X.push({ruleId:"stx/no-signal-call-in-for-iteration-var",message:`"${j}" is a :for iteration variable, not a signal \u2014 calling it as "${j}()" leaves it as a function and silently breaks comparisons. Use "${j}" directly.`,line:A,column:M,severity:"error"})}}}}function iY($,X){let Z=/<!--([\s\S]*?)-->/g,Q;while((Q=Z.exec($))!==null){let J=Q[1].indexOf("`");if(J!==-1){let G=Q.index+4+J,{line:W,column:K}=l$($,G);X.push({ruleId:"stx/no-backticks-in-html-comments",message:"Backtick inside an HTML comment leaks into the merged setup function and flips the JS parser into template-literal mode. Remove it or rephrase the comment.",line:W,column:K,severity:"error"})}}}function c$($,X){return $?.[X]!==!1}function aY($,X={}){let Z=[],Q=hY($),Y=(X.filePath??"").replace(/\\/g,"/"),J=X.fileKind??(/\/components?\//i.test(Y)?"component":/\/layouts?\//i.test(Y)?"layout":"view");if(c$(X.rules,"stx/no-bare-function-ref-in-event"))mY($,Q,Z);if(Y&&c$(X.rules,"stx/store-value-imports-must-be-local"))pY($,Y,Z);if(c$(X.rules,"stx/no-signal-call-in-for-iteration-var"))lY($,Z);if(c$(X.rules,"stx/no-backticks-in-html-comments"))iY($,Z);Z.sort((W,K)=>W.line-K.line||W.column-K.column);let G=new Set;return Z.filter((W)=>{let K=`${W.ruleId}:${W.line}:${W.column}`;if(G.has(K))return!1;return G.add(K),!0})}function sY($,X){return $.kind===X}function W3($){if($===String)return"string";if($===Number)return"number";if($===Boolean)return"boolean";if($===Array)return"array";if($===Object)return"object";if($===Function)return"function";if($===Date)return"date";if($===Symbol)return"symbol";if(typeof $==="function"&&$.name)return $.name;return"unknown"}function rY($,X){if($===null||$===void 0)return!0;if(X===String)return typeof $==="string";if(X===Number)return typeof $==="number"&&!Number.isNaN($);if(X===Boolean)return typeof $==="boolean";if(X===Array)return Array.isArray($);if(X===Object)return typeof $==="object"&&!Array.isArray($);if(X===Function)return typeof $==="function";if(X===Date)return $ instanceof Date;if(X===Symbol)return typeof $==="symbol";if(typeof X==="function")return $ instanceof X;return!0}function K3($,X,Z,Q){let Y=Q?`[${Q}]`:"";if(Z.required&&(X===void 0||X===null))return{prop:$,message:`${Y} Missing required prop: "${$}"`,value:X,expected:Z.type?W3(Z.type):void 0};if(X===void 0||X===null)return null;if(Z.type){let J=Array.isArray(Z.type)?Z.type:[Z.type];if(!J.some((W)=>rY(X,W))){let W=J.map((K)=>W3(K)).join(" | ");return{prop:$,message:`${Y} Invalid prop type for "${$}": expected ${W}, got ${typeof X}`,value:X,expected:W}}}if(Z.validator){if(!Z.validator(X))return{prop:$,message:`${Y} Custom validation failed for prop "${$}"`,value:X}}return null}function nY($){let X=globalThis.__STX_CURRENT_PROPS__||{};if(!$)return X;let Z={...X};for(let[Q,Y]of Object.entries($)){let J=typeof Y==="function"||Array.isArray(Y)?{type:Y}:Y||{};if(Z[Q]===void 0&&J.default!==void 0)Z[Q]=typeof J.default==="function"?J.default():J.default}return Z}function oY($,X={}){let{componentName:Z,throwOnError:Q=!1,logWarnings:Y=!0}=X,J=globalThis.__STX_CURRENT_PROPS__||{},G={...J},W={valid:!0,errors:[],warnings:[]};for(let[K,_]of Object.entries($)){let U=typeof _==="function"||Array.isArray(_)?{type:_}:_||{};if(G[K]===void 0&&U.default!==void 0)G[K]=typeof U.default==="function"?U.default():U.default;let F=K3(K,G[K],U,Z);if(F){if(W.valid=!1,W.errors.push(F),Y)console.warn(F.message)}}for(let K of Object.keys(J))if(!(K in $)){let _=`${Z?`[${Z}]`:""} Unknown prop: "${K}"`;if(W.warnings.push(_),Y)console.warn(_)}if(Q&&!W.valid){let K=W.errors.map((_)=>_.message).join(`
4406
4418
  `);throw Error(`Prop validation failed:
4407
- ${K}`)}return{props:G,validation:W}}function iY($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0)Z[Q]=typeof Y==="function"?Y():Y;return Z}function aY($){return $}function rY($){return{type:$,required:!0}}function sY($,X){return{type:X,default:$}}function nY($,X={}){return{...X,validator:$}}function oY($,X={}){return{...X,validator:(Z)=>$.includes(Z)}}function tY($,X={}){return{...X,type:Array,validator:(Z)=>{if(!Array.isArray(Z))return!1;return!0}}}function eY($,X={}){return{...X,type:Object}}function $J($,X,Z){if(!X)return $;let Q={};for(let[Y,J]of Object.entries(X)){let G=typeof J==="function"||Array.isArray(J)?{type:J}:J||{},W=$[Y];if(W===void 0&&G.default!==void 0)W=typeof G.default==="function"?G.default():G.default;{let K=Q3(Y,W,G,Z);if(K)console.warn(K.message)}Q[Y]=W}for(let[Y,J]of Object.entries($))if(!(Y in Q))Q[Y]=J;return Q}var TB={};
4408
- export{ZK as o,t$ as p,j6 as q,M4 as r,P0 as s,Z$ as t,Q$ as u,Y$ as v,J$ as w,D1 as x,J3 as y,G3 as z,W3 as A,K3 as B,_3 as C,U3 as D,YJ as E,JJ as F,GJ as G,B3 as H,WJ as I,L3 as J,KJ as K,_J as L,UJ as M,BJ as N,LJ as O,FJ as P,zJ as Q,jJ as R,HJ as S,OJ as T,Y1 as U,AJ as V,qJ as W,NJ as X,MJ as Y,EJ as Z,IJ as _,z3 as $,j3 as aa,RJ as ba,H3 as ca,DJ as da,wJ as ea,TJ as fa,CJ as ga,kJ as ha,xJ as ia,O3 as ja,A3 as ka,SJ as la,PJ as ma,q3 as na,yJ as oa,hJ as pa,dJ as qa,Y6 as ra,D3 as sa,w3 as ta,T3 as ua,C3 as va,r$ as wa,k3 as xa,x3 as ya,S3 as za,P3 as Aa,mJ as Ba,aJ as Ca,rJ as Da,v3 as Ea,sJ as Fa,t3 as Ga,eJ as Ha,T4 as Ia,C4 as Ja,d4 as Ka,u4 as La,m4 as Ma,s6 as Na,p4 as Oa,c4 as Pa,l4 as Qa,i4 as Ra,a4 as Sa,r4 as Ta,s4 as Ua,vW as Va,S1 as Wa,dW as Xa,uW as Ya,n4 as Za,o4 as _a,$X as $a,A$ as ab,mW as bb,pW as cb,cW as db,lW as eb,iW as fb,aW as gb,rW as hb,sW as ib,nW as jb,oW as kb,tW as lb,eW as mb,GX as nb,X2 as ob,J2 as pb,G2 as qb,z5 as rb,F2 as sb,z2 as tb,j2 as ub,IX as vb,A2 as wb,I2 as xb,R2 as yb,D2 as zb,w2 as Ab,T2 as Bb,C2 as Cb,u2 as Db,GZ as Eb,m2 as Fb,WZ as Gb,KZ as Hb,L8 as Ib,F8 as Jb,l2 as Kb,i2 as Lb,a2 as Mb,s2 as Nb,n2 as Ob,jZ as Pb,t2 as Qb,e2 as Rb,$K as Sb,q6 as Tb,H8 as Ub,YK as Vb,JK as Wb,GK as Xb,WK as Yb,HZ as Zb,OZ as _b,UK as $b,AZ as ac,q8 as bc,BK as cc,qZ as dc,LK as ec,FK as fc,NZ as gc,VK as hc,V8 as ic,EZ as jc,IZ as kc,E8 as lc,DZ as mc,wZ as nc,CZ as oc,l as pc,I8 as qc,I5 as rc,R8 as sc,D8 as tc,w8 as uc,T8 as vc,C8 as wc,k8 as xc,x8 as yc,S8 as zc,P8 as Ac,b8 as Bc,y8 as Cc,v8 as Dc,g8 as Ec,f8 as Fc,h8 as Gc,d8 as Hc,u8 as Ic,m8 as Jc,p8 as Kc,c8 as Lc,R5 as Mc,l8 as Nc,i8 as Oc,a8 as Pc,r8 as Qc,s8 as Rc,o8 as Sc,D5 as Tc,w5 as Uc,t8 as Vc,T5 as Wc,C5 as Xc,k5 as Yc,m1 as Zc,N$ as _c,e8 as $c,$7 as ad,X7 as bd,M$ as cd,Q7 as dd,Y7 as ed,J7 as fd,G7 as gd,qQ as hd,NQ as id,x5 as jd,S5 as kd,B7 as ld,c0 as md,L7 as nd,F7 as od,z7 as pd,j7 as qd,H7 as rd,V$ as sd,P5 as td,A7 as ud,E$ as vd,q7 as wd,N7 as xd,M7 as yd,V7 as zd,I$ as Ad,R$ as Bd,b5 as Cd,y5 as Dd,I7 as Ed,R7 as Fd,D7 as Gd,D$ as Hd,w7 as Id,TQ as Jd,d_ as Kd,T7 as Ld,CQ as Md,Z9 as Nd,Q9 as Od,J9 as Pd,A1 as Qd,q1 as Rd,fQ as Sd,hQ as Td,O1 as Ud,uQ as Vd,p1 as Wd,pQ as Xd,cQ as Yd,lQ as Zd,iQ as _d,b7 as $d,aQ as ae,rQ as be,v7 as ce,nQ as de,oQ as ee,k$ as fe,x$ as ge,S$ as he,P$ as ie,y$ as je,d5 as ke,v$ as le,a0 as me,i7 as ne,g$ as oe,f$ as pe,h$ as qe,e7 as re,$3 as se,uY as te,mY as ue,cY as ve,lY as we,iY as xe,aY as ye,rY as ze,sY as Ae,nY as Be,oY as Ce,tY as De,eY as Ee,$J as Fe,TB as Ge,E4 as He,I6 as Ie,R4 as Je,w4 as Ke};
4419
+ ${K}`)}return{props:G,validation:W}}function tY($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0)Z[Q]=typeof Y==="function"?Y():Y;return Z}function eY($){return $}function $J($){return{type:$,required:!0}}function XJ($,X){return{type:X,default:$}}function ZJ($,X={}){return{...X,validator:$}}function QJ($,X={}){return{...X,validator:(Z)=>$.includes(Z)}}function YJ($,X={}){return{...X,type:Array,validator:(Z)=>{if(!Array.isArray(Z))return!1;return!0}}}function JJ($,X={}){return{...X,type:Object}}function GJ($,X,Z){if(!X)return $;let Q={};for(let[Y,J]of Object.entries(X)){let G=typeof J==="function"||Array.isArray(J)?{type:J}:J||{},W=$[Y];if(W===void 0&&G.default!==void 0)W=typeof G.default==="function"?G.default():G.default;{let K=K3(Y,W,G,Z);if(K)console.warn(K.message)}Q[Y]=W}for(let[Y,J]of Object.entries($))if(!(Y in Q))Q[Y]=J;return Q}var bB={};
4420
+ export{KK as o,X5 as p,q6 as q,w4 as r,P0 as s,Q$ as t,Y$ as u,J$ as v,G$ as w,D1 as x,U3 as y,B3 as z,L3 as A,F3 as B,z3 as C,j3 as D,UJ as E,BJ as F,LJ as G,H3 as H,FJ as I,O3 as J,zJ as K,jJ as L,HJ as M,OJ as N,AJ as O,NJ as P,qJ as Q,MJ as R,VJ as S,EJ as T,Y1 as U,IJ as V,RJ as W,DJ as X,wJ as Y,CJ as Z,kJ as _,N3 as $,q3 as aa,xJ as ba,M3 as ca,SJ as da,PJ as ea,bJ as fa,yJ as ga,vJ as ha,gJ as ia,V3 as ja,E3 as ka,fJ as la,hJ as ma,I3 as na,uJ as oa,lJ as pa,iJ as qa,W6 as ra,x3 as sa,S3 as ta,P3 as ua,b3 as va,r$ as wa,y3 as xa,v3 as ya,g3 as za,f3 as Aa,sJ as Ba,eJ as Ca,$G as Da,u3 as Ea,XG as Fa,o$ as Ga,JG as Ha,b4 as Ia,y4 as Ja,i4 as Ka,a4 as La,s4 as Ma,$8 as Na,r4 as Oa,n4 as Pa,o4 as Qa,t4 as Ra,e4 as Sa,$X as Ta,XX as Ua,mW as Va,S1 as Wa,iW as Xa,aW as Ya,ZX as Za,QX as _a,GX as $a,N$ as ab,sW as bb,rW as cb,nW as db,oW as eb,tW as fb,eW as gb,$2 as hb,X2 as ib,Z2 as jb,Q2 as kb,Y2 as lb,J2 as mb,LX as nb,W2 as ob,B2 as pb,L2 as qb,O5 as rb,N2 as sb,q2 as tb,M2 as ub,kX as vb,I2 as wb,k2 as xb,x2 as yb,S2 as zb,P2 as Ab,b2 as Bb,y2 as Cb,a2 as Db,LZ as Eb,s2 as Fb,FZ as Gb,zZ as Hb,O8 as Ib,A8 as Jb,o2 as Kb,t2 as Lb,e2 as Mb,XK as Nb,ZK as Ob,MZ as Pb,YK as Qb,JK as Rb,GK as Sb,I6 as Tb,M8 as Ub,UK as Vb,BK as Wb,LK as Xb,FK as Yb,VZ as Zb,EZ as _b,HK as $b,IZ as ac,I8 as bc,OK as cc,RZ as dc,AK as ec,NK as fc,DZ as gc,TK as hc,w8 as ic,CZ as jc,kZ as kc,T8 as lc,SZ as mc,PZ as nc,yZ as oc,l as pc,C8 as qc,w5 as rc,k8 as sc,x8 as tc,S8 as uc,P8 as vc,b8 as wc,y8 as xc,v8 as yc,g8 as zc,f8 as Ac,h8 as Bc,d8 as Cc,u8 as Dc,m8 as Ec,p8 as Fc,c8 as Gc,l8 as Hc,i8 as Ic,a8 as Jc,s8 as Kc,r8 as Lc,T5 as Mc,n8 as Nc,o8 as Oc,t8 as Pc,e8 as Qc,$7 as Rc,Z7 as Sc,C5 as Tc,k5 as Uc,Q7 as Vc,x5 as Wc,S5 as Xc,P5 as Yc,m1 as Zc,M$ as _c,Y7 as $c,J7 as ad,G7 as bd,V$ as cd,K7 as dd,_7 as ed,U7 as fd,B7 as gd,RQ as hd,DQ as id,b5 as jd,y5 as kd,H7 as ld,c0 as md,O7 as nd,A7 as od,N7 as pd,q7 as qd,M7 as rd,E$ as sd,v5 as td,E7 as ud,I$ as vd,I7 as wd,R7 as xd,D7 as yd,w7 as zd,R$ as Ad,D$ as Bd,g5 as Cd,f5 as Dd,C7 as Ed,k7 as Fd,x7 as Gd,w$ as Hd,S7 as Id,bQ as Jd,i_ as Kd,P7 as Ld,yQ as Md,K9 as Nd,_9 as Od,B9 as Pd,A1 as Qd,N1 as Rd,cQ as Sd,lQ as Td,O1 as Ud,aQ as Vd,p1 as Wd,rQ as Xd,nQ as Yd,oQ as Zd,tQ as _d,h7 as $d,eQ as ae,$Y as be,u7 as ce,ZY as de,QY as ee,x$ as fe,S$ as ge,P$ as he,b$ as ie,v$ as je,p5 as ke,g$ as le,a0 as me,o7 as ne,f$ as oe,h$ as pe,d$ as qe,Y3 as re,J3 as se,aY as te,sY as ue,nY as ve,oY as we,tY as xe,eY as ye,$J as ze,XJ as Ae,ZJ as Be,QJ as Ce,YJ as De,JJ as Ee,GJ as Fe,bB as Ge,C4 as He,C6 as Ie,x4 as Je,P4 as Ke};