@stacksjs/stx 0.2.9 → 0.2.11

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 (128) hide show
  1. package/README.md +16 -11
  2. package/dist/a11y.d.ts +2 -1
  3. package/dist/analyzer.d.ts +4 -0
  4. package/dist/app-shell.d.ts +72 -0
  5. package/dist/app.d.ts +1 -0
  6. package/dist/broadcasting.d.ts +77 -0
  7. package/dist/build-assets.d.ts +32 -0
  8. package/dist/build-mode-detector.d.ts +26 -0
  9. package/dist/build.d.ts +31 -0
  10. package/dist/builtins/icon.d.ts +7 -0
  11. package/dist/builtins/index.d.ts +21 -0
  12. package/dist/builtins/stx-image.d.ts +2 -0
  13. package/dist/builtins/stx-link.d.ts +2 -0
  14. package/dist/builtins/stx-loading-indicator.d.ts +2 -0
  15. package/dist/bundle-analyzer/index.d.ts +2 -0
  16. package/dist/bundle-analyzer.js +20 -20
  17. package/dist/caching.d.ts +27 -0
  18. package/dist/cli.js +3941 -2609
  19. package/dist/client-helpers.d.ts +7 -3
  20. package/dist/client-script-bundler.d.ts +27 -0
  21. package/dist/client-script.d.ts +5 -1
  22. package/dist/client.d.ts +1 -0
  23. package/dist/component-hmr.d.ts +1 -0
  24. package/dist/component-processing.d.ts +107 -0
  25. package/dist/component-registry.d.ts +54 -0
  26. package/dist/component-renderer.d.ts +18 -0
  27. package/dist/components/StxImage.stx +12 -0
  28. package/dist/components/StxLink.stx +18 -8
  29. package/dist/composables/index.d.ts +7 -0
  30. package/dist/composables/use-broadcast-channel.d.ts +1 -0
  31. package/dist/composables/use-channel.d.ts +67 -0
  32. package/dist/composables/use-intersection-observer.d.ts +2 -0
  33. package/dist/composables/use-keyboard.d.ts +1 -0
  34. package/dist/composables/use-mouse.d.ts +1 -0
  35. package/dist/composables/use-router.d.ts +4 -0
  36. package/dist/composables/use-websocket.d.ts +1 -0
  37. package/dist/composables.d.ts +2 -0
  38. package/dist/composition-api.d.ts +1 -0
  39. package/dist/computed.d.ts +1 -0
  40. package/dist/config.d.ts +12 -1
  41. package/dist/craft-bridge.d.ts +6 -3
  42. package/dist/craft-components.d.ts +1 -0
  43. package/dist/craft.js +39 -33
  44. package/dist/deploy/index.d.ts +1 -0
  45. package/dist/dev-server/crosswind.d.ts +2 -5
  46. package/dist/dev-server/native-window.d.ts +19 -1
  47. package/dist/dev-server/serve-app.d.ts +15 -0
  48. package/dist/dev-server/serve-file.d.ts +3 -0
  49. package/dist/dev-server/serve-markdown.d.ts +3 -0
  50. package/dist/dev-server/serve-multi.d.ts +5 -0
  51. package/dist/dev-server/types.d.ts +2 -0
  52. package/dist/dev-server.d.ts +6 -40
  53. package/dist/devtools.d.ts +1 -0
  54. package/dist/directive-api.d.ts +1 -1
  55. package/dist/document-shell.d.ts +33 -0
  56. package/dist/error-boundaries.d.ts +1 -0
  57. package/dist/events.d.ts +1 -0
  58. package/dist/expressions.d.ts +38 -0
  59. package/dist/forms-validation.d.ts +2 -0
  60. package/dist/head.d.ts +1 -0
  61. package/dist/hot-reload.d.ts +1 -0
  62. package/dist/hydration-runtime.d.ts +1 -0
  63. package/dist/hydration.d.ts +1 -0
  64. package/dist/i18n.d.ts +3 -1
  65. package/dist/image-optimization/build-plugin.d.ts +1 -0
  66. package/dist/index.d.ts +22 -1
  67. package/dist/index.js +5569 -4182
  68. package/dist/inline-assets.d.ts +28 -0
  69. package/dist/internal-markdown.d.ts +0 -4
  70. package/dist/jsx-runtime.d.ts +1 -0
  71. package/dist/keep-alive.d.ts +1 -0
  72. package/dist/manifest.d.ts +41 -0
  73. package/dist/markdown.d.ts +1 -0
  74. package/dist/media/client/blur-up.d.ts +1 -0
  75. package/dist/media/client/lazy-load.d.ts +1 -0
  76. package/dist/media/client/upload-handler.d.ts +1 -0
  77. package/dist/media/shared/cache.d.ts +2 -0
  78. package/dist/media/video/index.d.ts +1 -0
  79. package/dist/media/video/processor/thumbnail.d.ts +1 -0
  80. package/dist/misc-directives.d.ts +49 -0
  81. package/dist/parser/directive-parser.d.ts +13 -0
  82. package/dist/performance-utils.d.ts +2 -0
  83. package/dist/placeholder.d.ts +45 -0
  84. package/dist/plugin-system.d.ts +32 -2
  85. package/dist/process.d.ts +11 -1
  86. package/dist/production-builder.d.ts +42 -0
  87. package/dist/production-server.d.ts +19 -0
  88. package/dist/props.d.ts +1 -0
  89. package/dist/pwa.js +3883 -2679
  90. package/dist/reactive.d.ts +2 -16
  91. package/dist/reactivity.d.ts +1 -0
  92. package/dist/router.d.ts +1 -1
  93. package/dist/runtime-injection.d.ts +20 -0
  94. package/dist/runtime.d.ts +2 -2
  95. package/dist/script-classifier.d.ts +35 -0
  96. package/dist/script-validation.d.ts +16 -0
  97. package/dist/server-bindings.d.ts +7 -0
  98. package/dist/server-components.d.ts +4 -0
  99. package/dist/signal-processing.d.ts +109 -0
  100. package/dist/signals-api.d.ts +309 -0
  101. package/dist/signals.d.ts +2 -309
  102. package/dist/spa-shell.d.ts +1 -0
  103. package/dist/ssg.js +3862 -2655
  104. package/dist/ssr.d.ts +1 -0
  105. package/dist/state-management.d.ts +27 -0
  106. package/dist/store-imports.d.ts +24 -0
  107. package/dist/store-loader.d.ts +16 -0
  108. package/dist/story/bun-test.d.ts +1 -0
  109. package/dist/story/compiled-output.d.ts +1 -0
  110. package/dist/story/interactions.d.ts +1 -0
  111. package/dist/story/renderer.d.ts +2 -0
  112. package/dist/story/setup.d.ts +1 -0
  113. package/dist/story/ui/code-panel.d.ts +1 -0
  114. package/dist/stx.d.ts +437 -0
  115. package/dist/style-scoping.d.ts +23 -0
  116. package/dist/template-compiler.d.ts +31 -0
  117. package/dist/template-hydrator.d.ts +18 -0
  118. package/dist/transitions.d.ts +1 -0
  119. package/dist/types/config-types.d.ts +62 -0
  120. package/dist/validator.d.ts +1 -0
  121. package/dist/variable-extractor.d.ts +1 -1
  122. package/dist/view-composers.d.ts +1 -0
  123. package/dist/virtual-scrolling.d.ts +1 -0
  124. package/dist/visual-testing.js +2 -2
  125. package/dist/web-components.d.ts +1 -0
  126. package/dist/x-element.d.ts +1 -0
  127. package/package.json +72 -7
  128. package/stx.d.ts +437 -0
package/dist/craft.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var I=import.meta.require;var _X=`
2
+ var E=import.meta.require;var WX=`
3
3
  <script>
4
4
  (function() {
5
5
  'use strict';
@@ -85,7 +85,8 @@ var I=import.meta.require;var _X=`
85
85
  let data;
86
86
  try {
87
87
  data = event.detail || (typeof event.data === 'string' ? JSON.parse(event.data) : event.data);
88
- } catch (e) {
88
+ }
89
+ catch (e) {
89
90
  return;
90
91
  }
91
92
 
@@ -102,11 +103,13 @@ var I=import.meta.require;var _X=`
102
103
  pending.delete(data.id);
103
104
  if (data.error) {
104
105
  req.reject(new Error(data.error.message));
105
- } else {
106
+ }
107
+ else {
106
108
  req.resolve(data.result);
107
109
  }
108
110
  }
109
- } else if (data.type === 'event' && data.method) {
111
+ }
112
+ else if (data.type === 'event' && data.method) {
110
113
  const listeners = eventListeners.get(data.method) || [];
111
114
  listeners.forEach(fn => fn(data.params));
112
115
  }
@@ -266,7 +269,7 @@ var I=import.meta.require;var _X=`
266
269
  }
267
270
  })();
268
271
  </script>
269
- `;function u(U={}){let{debug:X=!1,timeout:$=30000}=U;return`
272
+ `;function N(U={}){let{debug:X=!1,timeout:$=30000}=U;return`
270
273
  <script>
271
274
  (function() {
272
275
  'use strict';
@@ -352,7 +355,8 @@ var I=import.meta.require;var _X=`
352
355
  let data;
353
356
  try {
354
357
  data = event.detail || (typeof event.data === 'string' ? JSON.parse(event.data) : event.data);
355
- } catch (e) {
358
+ }
359
+ catch (e) {
356
360
  return;
357
361
  }
358
362
 
@@ -369,11 +373,13 @@ var I=import.meta.require;var _X=`
369
373
  pending.delete(data.id);
370
374
  if (data.error) {
371
375
  req.reject(new Error(data.error.message));
372
- } else {
376
+ }
377
+ else {
373
378
  req.resolve(data.result);
374
379
  }
375
380
  }
376
- } else if (data.type === 'event' && data.method) {
381
+ }
382
+ else if (data.type === 'event' && data.method) {
377
383
  const listeners = eventListeners.get(data.method) || [];
378
384
  listeners.forEach(fn => fn(data.params));
379
385
  }
@@ -533,14 +539,14 @@ var I=import.meta.require;var _X=`
533
539
  }
534
540
  })();
535
541
  </script>
536
- `.replace("debug: false,",`debug: ${X},`).replace("timeout: 30000",`timeout: ${$}`)}function LX(){return!1}function AX(U,X={}){let $=/@craft(?:\(([\s\S]*?)\))?/g;return U.replace($,(q,Y)=>{let J={};if(Y)try{J=JSON.parse(Y.replace(/'/g,'"'))}catch{try{J=Function(`return ${Y}`)()}catch{console.warn(`[stx] Invalid @craft config: ${Y}`)}}return u(J)})}function h(U,X={}){if(U.includes("__craftBridgeInitialized"))return U;let $=u(X);if(U.includes("</head>"))return U.replace("</head>",`${$}
542
+ `.replace("debug: false,",`debug: ${X},`).replace("timeout: 30000",`timeout: ${$}`)}function ZX(){return!1}function _X(U,X={}){let $=/@craft(?:\(([\s\S]*?)\))?/g;return U.replace($,(q,Y)=>{let J={};if(Y)try{J=JSON.parse(Y.replace(/'/g,'"'))}catch{try{J=Function(`return ${Y}`)()}catch{console.warn(`[stx] Invalid @craft config: ${Y}`)}}return N(J)})}function v(U,X={}){if(U.includes("__craftBridgeInitialized"))return U;let $=N(X);if(U.includes("</head>"))return U.replace("</head>",`${$}
537
543
  </head>`);if(U.includes("<body"))return U.replace(/(<body[^>]*>)/,`$1
538
- ${$}`);return $+U}var QU=new Map([["craft-button",{name:"Button",zigType:"craft.Button",props:[{name:"variant",type:"string",required:!1,default:"primary"},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onclick",type:"callback",required:!1}],children:"single"}],["craft-text-input",{name:"TextInput",zigType:"craft.TextInput",props:[{name:"value",type:"string",required:!1,default:""},{name:"placeholder",type:"string",required:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-textarea",{name:"TextArea",zigType:"craft.TextArea",props:[{name:"value",type:"string",required:!1,default:""},{name:"placeholder",type:"string",required:!1},{name:"rows",type:"number",required:!1,default:3},{name:"disabled",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-checkbox",{name:"Checkbox",zigType:"craft.Checkbox",props:[{name:"checked",type:"boolean",required:!1,default:!1},{name:"label",type:"string",required:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-select",{name:"Select",zigType:"craft.Select",props:[{name:"value",type:"string",required:!1},{name:"options",type:"array",required:!0},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-slider",{name:"Slider",zigType:"craft.Slider",props:[{name:"value",type:"number",required:!1,default:0},{name:"min",type:"number",required:!1,default:0},{name:"max",type:"number",required:!1,default:100},{name:"step",type:"number",required:!1,default:1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-toggle",{name:"Toggle",zigType:"craft.Toggle",props:[{name:"checked",type:"boolean",required:!1,default:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-modal",{name:"Modal",zigType:"craft.Modal",props:[{name:"open",type:"boolean",required:!1,default:!1},{name:"title",type:"string",required:!1},{name:"closable",type:"boolean",required:!1,default:!0},{name:"onclose",type:"callback",required:!1}],children:"multiple"}],["craft-alert",{name:"Alert",zigType:"craft.Alert",props:[{name:"variant",type:"string",required:!1,default:"info"},{name:"title",type:"string",required:!1},{name:"dismissible",type:"boolean",required:!1,default:!1}],children:"single"}],["craft-progress",{name:"ProgressBar",zigType:"craft.ProgressBar",props:[{name:"value",type:"number",required:!1,default:0},{name:"max",type:"number",required:!1,default:100},{name:"indeterminate",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-spinner",{name:"Spinner",zigType:"craft.Spinner",props:[{name:"size",type:"number",required:!1,default:24}],children:"none"}],["craft-avatar",{name:"Avatar",zigType:"craft.Avatar",props:[{name:"src",type:"string",required:!1},{name:"alt",type:"string",required:!1},{name:"size",type:"number",required:!1,default:40}],children:"none"}],["craft-badge",{name:"Badge",zigType:"craft.Badge",props:[{name:"variant",type:"string",required:!1,default:"default"}],children:"single"}],["craft-card",{name:"Card",zigType:"craft.Card",props:[{name:"padding",type:"number",required:!1,default:16}],children:"multiple"}],["craft-accordion",{name:"Accordion",zigType:"craft.Accordion",props:[{name:"title",type:"string",required:!0},{name:"open",type:"boolean",required:!1,default:!1}],children:"multiple"}],["craft-tabs",{name:"TabView",zigType:"craft.TabView",props:[{name:"activeTab",type:"number",required:!1,default:0},{name:"ontabchange",type:"callback",required:!1}],children:"multiple"}],["craft-tooltip",{name:"Tooltip",zigType:"craft.Tooltip",props:[{name:"content",type:"string",required:!0},{name:"position",type:"string",required:!1,default:"top"}],children:"single"}],["craft-date-picker",{name:"DatePicker",zigType:"craft.DatePicker",props:[{name:"value",type:"string",required:!1},{name:"min",type:"string",required:!1},{name:"max",type:"string",required:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-time-picker",{name:"TimePicker",zigType:"craft.TimePicker",props:[{name:"value",type:"string",required:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-color-picker",{name:"ColorPicker",zigType:"craft.ColorPicker",props:[{name:"value",type:"color",required:!1,default:"#000000"},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-data-table",{name:"DataTable",zigType:"craft.DataTable",props:[{name:"data",type:"array",required:!0},{name:"columns",type:"array",required:!0},{name:"sortable",type:"boolean",required:!1,default:!1},{name:"paginated",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-virtual-list",{name:"VirtualList",zigType:"craft.VirtualList",props:[{name:"items",type:"array",required:!0},{name:"itemHeight",type:"number",required:!1,default:48},{name:"renderItem",type:"callback",required:!0}],children:"none"}],["craft-tree-view",{name:"TreeView",zigType:"craft.TreeView",props:[{name:"data",type:"object",required:!0},{name:"expandable",type:"boolean",required:!1,default:!0}],children:"none"}]]);async function OX(U,X={}){let $=performance.now(),q={target:X.target||"universal",format:X.format||"zig",optimize:X.optimize??!0,treeShake:X.treeShake??!0,hotReload:X.hotReload??!1,debug:X.debug??!1,sourceMaps:X.sourceMaps??!1,bundle:X.bundle??!0,minify:X.minify??!1,components:X.components||QU},Y=typeof U==="string"?GU(U):U,J=WU(Y.tree,q),G=EU(J),Q=q.treeShake?VU(J,G):J,K=new Map;if(q.target==="universal"){let B=["macos","windows","linux","ios","android"];for(let H of B){let O=D(Q,{...q,target:H});K.set(H,O)}}else{let B=D(Q,q);K.set(q.target,B)}let W=IU(Q,q,K),_=MU(Y,Q,q),L={compilationTime:performance.now()-$,totalComponents:S(Y.tree),nativeComponents:y(Q),webComponents:S(Y.tree)-y(Q),bundleSize:W.length,treeShakenSize:q.treeShake?wU(J,Q):W.length,warnings:[],errors:[]},A;if(q.sourceMaps)A=RU(Y,Q);return{code:W,platformCode:K,dependencies:G,manifest:_,sourceMaps:A,stats:L}}function GU(U){let X={type:"fragment",children:[]},$=U.match(/<body[^>]*>([\s\S]*?)<\/body>/i),q=$?$[1]:U;return g(q,X),{id:c(),hash:r(U),tree:X,scripts:jU(U),styles:kU(U),staticParts:new Map,dynamicParts:new Map,dependencies:[],metadata:{hasSlots:!1,hasDynamicContent:U.includes("{{"),hasEventHandlers:U.includes("onclick")||U.includes("onchange"),hasAsyncContent:!1,componentCount:0,maxDepth:0,estimatedSize:U.length}}}function g(U,X){let $=/<(@?[\w-]+)([^>]*)(?:\/>|>([\s\S]*?)<\/\1>)/g,q;while((q=$.exec(U))!==null){let[,Y,J,G]=q,Q=Y.startsWith("@craft-"),K={type:Q?"component":"element",tag:Q?Y.slice(1):Y,props:KU(J),children:[],componentName:Q?Y.slice(1):void 0};if(G){let W=G.replace(/<[^>]+>/g,"").trim();if(W)K.children=K.children??[],K.children.push({type:"text",text:W});g(G,K)}X.children=X.children??[],X.children.push(K)}}function KU(U){let X={},$=/([\w-:@]+)(?:=["']([^"']*)["'])?/g,q;while((q=$.exec(U))!==null){let[,Y,J]=q;X[Y]=J??!0}return X}function WU(U,X){return m(U,X)}function m(U,X){let $=U.componentName?X.components?.get(U.componentName):void 0,q="craft.View";if($)q=$.zigType;else if(U.type==="text")q="craft.Text";else if(U.tag)q=ZU(U.tag);let Y={};if(U.props)for(let[K,W]of Object.entries(U.props))Y[K]=_U(W);let J=[];if(U.children)for(let K of U.children)J.push(m(K,X));let G=new Map;if(U.props){for(let[K,W]of Object.entries(U.props))if(K.startsWith("on")&&typeof W==="string")G.set(K.slice(2).toLowerCase(),W)}let Q=AU(U);return{type:LU(U,$),zigType:q,props:Y,children:J,events:G,styles:Q,id:U.hydrationKey,key:U.props?.key}}function ZU(U){return{div:"craft.View",span:"craft.Text",p:"craft.Text",h1:"craft.Text",h2:"craft.Text",h3:"craft.Text",h4:"craft.Text",h5:"craft.Text",h6:"craft.Text",button:"craft.Button",input:"craft.TextInput",textarea:"craft.TextArea",select:"craft.Select",img:"craft.Image",a:"craft.Link",ul:"craft.List",ol:"craft.List",li:"craft.ListItem",form:"craft.Form",label:"craft.Label",nav:"craft.View",header:"craft.View",footer:"craft.View",main:"craft.View",section:"craft.View",article:"craft.View",aside:"craft.View"}[U.toLowerCase()]||"craft.View"}function _U(U){if(typeof U==="string"){if(U.startsWith("{{")&&U.endsWith("}}"))return{type:"binding",path:U.slice(2,-2).trim()};if(U.includes("(")&&U.includes(")"))return{type:"callback",handler:U};return{type:"literal",value:U}}if(typeof U==="number"||typeof U==="boolean")return{type:"literal",value:U};return{type:"literal",value:String(U)}}function LU(U,X){if(X){let q=X.name.toLowerCase();if(q.includes("button"))return"button";if(q.includes("input")||q.includes("text"))return"input";if(q.includes("image")||q.includes("avatar"))return"image";if(q.includes("list")||q.includes("table"))return"list";if(q.includes("scroll"))return"scroll";return"custom"}if(U.type==="text")return"text";let $=U.tag?.toLowerCase();if($==="button")return"button";if($==="input"||$==="textarea")return"input";if($==="img")return"image";if($==="ul"||$==="ol")return"list";return"view"}function AU(U){let X=U.props?.style,$={},q={};if(X){let Y=X.split(";").filter(Boolean);for(let J of Y){let[G,Q]=J.split(":").map((K)=>K.trim());if(!G||!Q)continue;switch(G){case"display":$.display=Q;break;case"flex-direction":$.flexDirection=Q;break;case"justify-content":$.justifyContent=BU(Q);break;case"align-items":$.alignItems=OU(Q);break;case"gap":$.gap=Number.parseInt(Q,10);break;case"padding":$.padding=Number.parseInt(Q,10);break;case"margin":$.margin=Number.parseInt(Q,10);break;case"width":$.width=Q==="auto"?"auto":Number.parseInt(Q,10);break;case"height":$.height=Q==="auto"?"auto":Number.parseInt(Q,10);break;case"background-color":case"background":q.backgroundColor=Q;break;case"border-color":q.borderColor=Q;break;case"border-width":q.borderWidth=Number.parseInt(Q,10);break;case"border-radius":q.borderRadius=Number.parseInt(Q,10);break;case"opacity":q.opacity=Number.parseFloat(Q);break}}}return{layout:$,appearance:q}}function BU(U){return{"flex-start":"start","flex-end":"end",center:"center","space-between":"between","space-around":"around"}[U]||"start"}function OU(U){return{"flex-start":"start","flex-end":"end",center:"center",stretch:"stretch"}[U]||"start"}function EU(U){let X=[],$=new Set;function q(Y,J){let G=Y.id||c();if($.has(G))return;$.add(G);let Q={id:G,type:"component",path:Y.zigType,dependencies:J?[J]:[],size:d(Y),isStatic:HU(Y)};X.push(Q);for(let K of Y.children)q(K,G)}return q(U),X}function d(U){let X=100;return X+=Object.keys(U.props).length*20,X+=U.events.size*50,X}function HU(U){for(let X of Object.values(U.props))if(X.type!=="literal")return!1;return U.events.size===0}function VU(U,X){return U}function wU(U,X){let $=0;function q(Y){$+=d(Y);for(let J of Y.children)q(J)}return q(X),$}function D(U,X){switch(X.format){case"zig":return f(U,X);case"typescript":return FU(U,X);case"json":return JSON.stringify(U,null,X.minify?0:2);default:return f(U,X)}}function f(U,X){let $=[];return $.push("// Auto-generated by stx compiler"),$.push("// Target: "+X.target),$.push(""),$.push('const std = @import("std");'),$.push('const craft = @import("craft");'),$.push(""),$.push("pub fn render(allocator: std.mem.Allocator) !craft.Element {"),$.push(" return try build(allocator);"),$.push("}"),$.push(""),s(U,$,0),$.join(`
539
- `)}function s(U,X,$){let q=" ".repeat($);if($===0)X.push("fn build(allocator: std.mem.Allocator) !craft.Element {");let Y=`node_${$}`;X.push(`${q} var ${Y} = try ${U.zigType}.init(allocator);`);for(let[J,G]of Object.entries(U.props))if(G.type==="literal"){let Q=typeof G.value==="string"?`"${G.value}"`:String(G.value);X.push(`${q} ${Y}.set${bU(J)}(${Q});`)}for(let J=0;J<U.children.length;J++){let G=U.children[J];if(G.type==="text"){let Q=G.props.text?.type==="literal"?String(G.props.text.value):"";X.push(`${q} try ${Y}.addChild(try craft.Text.init(allocator, "${Q}"));`)}else s(G,X,$+1),X.push(`${q} try ${Y}.addChild(node_${$+1});`)}if($===0)X.push(` return ${Y}.element();`),X.push("}")}function FU(U,X){let $=[];return $.push("// Auto-generated by stx compiler"),$.push("// Target: "+X.target),$.push(""),$.push('import { Craft } from "@stacksjs/craft";'),$.push(""),$.push("export function render(): Craft.Element {"),$.push(" return "+l(U,1)+";"),$.push("}"),$.join(`
540
- `)}function l(U,X){let $=" ".repeat(X),q=[];for(let[Q,K]of Object.entries(U.props))if(K.type==="literal"){let W=typeof K.value==="string"?`"${K.value}"`:String(K.value);q.push(`${Q}: ${W}`)}let Y=q.length>0?`{ ${q.join(", ")} }`:"{}",J=U.children.map((Q)=>Q.type==="text"?`"${Q.props.text?.type==="literal"?Q.props.text.value:""}"`:l(Q,X+1)),G=J.length>0?`,
544
+ ${$}`);return $+U}var YU=new Map([["craft-button",{name:"Button",zigType:"craft.Button",props:[{name:"variant",type:"string",required:!1,default:"primary"},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onclick",type:"callback",required:!1}],children:"single"}],["craft-text-input",{name:"TextInput",zigType:"craft.TextInput",props:[{name:"value",type:"string",required:!1,default:""},{name:"placeholder",type:"string",required:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-textarea",{name:"TextArea",zigType:"craft.TextArea",props:[{name:"value",type:"string",required:!1,default:""},{name:"placeholder",type:"string",required:!1},{name:"rows",type:"number",required:!1,default:3},{name:"disabled",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-checkbox",{name:"Checkbox",zigType:"craft.Checkbox",props:[{name:"checked",type:"boolean",required:!1,default:!1},{name:"label",type:"string",required:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-select",{name:"Select",zigType:"craft.Select",props:[{name:"value",type:"string",required:!1},{name:"options",type:"array",required:!0},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-slider",{name:"Slider",zigType:"craft.Slider",props:[{name:"value",type:"number",required:!1,default:0},{name:"min",type:"number",required:!1,default:0},{name:"max",type:"number",required:!1,default:100},{name:"step",type:"number",required:!1,default:1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-toggle",{name:"Toggle",zigType:"craft.Toggle",props:[{name:"checked",type:"boolean",required:!1,default:!1},{name:"disabled",type:"boolean",required:!1,default:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-modal",{name:"Modal",zigType:"craft.Modal",props:[{name:"open",type:"boolean",required:!1,default:!1},{name:"title",type:"string",required:!1},{name:"closable",type:"boolean",required:!1,default:!0},{name:"onclose",type:"callback",required:!1}],children:"multiple"}],["craft-alert",{name:"Alert",zigType:"craft.Alert",props:[{name:"variant",type:"string",required:!1,default:"info"},{name:"title",type:"string",required:!1},{name:"dismissible",type:"boolean",required:!1,default:!1}],children:"single"}],["craft-progress",{name:"ProgressBar",zigType:"craft.ProgressBar",props:[{name:"value",type:"number",required:!1,default:0},{name:"max",type:"number",required:!1,default:100},{name:"indeterminate",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-spinner",{name:"Spinner",zigType:"craft.Spinner",props:[{name:"size",type:"number",required:!1,default:24}],children:"none"}],["craft-avatar",{name:"Avatar",zigType:"craft.Avatar",props:[{name:"src",type:"string",required:!1},{name:"alt",type:"string",required:!1},{name:"size",type:"number",required:!1,default:40}],children:"none"}],["craft-badge",{name:"Badge",zigType:"craft.Badge",props:[{name:"variant",type:"string",required:!1,default:"default"}],children:"single"}],["craft-card",{name:"Card",zigType:"craft.Card",props:[{name:"padding",type:"number",required:!1,default:16}],children:"multiple"}],["craft-accordion",{name:"Accordion",zigType:"craft.Accordion",props:[{name:"title",type:"string",required:!0},{name:"open",type:"boolean",required:!1,default:!1}],children:"multiple"}],["craft-tabs",{name:"TabView",zigType:"craft.TabView",props:[{name:"activeTab",type:"number",required:!1,default:0},{name:"ontabchange",type:"callback",required:!1}],children:"multiple"}],["craft-tooltip",{name:"Tooltip",zigType:"craft.Tooltip",props:[{name:"content",type:"string",required:!0},{name:"position",type:"string",required:!1,default:"top"}],children:"single"}],["craft-date-picker",{name:"DatePicker",zigType:"craft.DatePicker",props:[{name:"value",type:"string",required:!1},{name:"min",type:"string",required:!1},{name:"max",type:"string",required:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-time-picker",{name:"TimePicker",zigType:"craft.TimePicker",props:[{name:"value",type:"string",required:!1},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-color-picker",{name:"ColorPicker",zigType:"craft.ColorPicker",props:[{name:"value",type:"color",required:!1,default:"#000000"},{name:"onchange",type:"callback",required:!1}],children:"none"}],["craft-data-table",{name:"DataTable",zigType:"craft.DataTable",props:[{name:"data",type:"array",required:!0},{name:"columns",type:"array",required:!0},{name:"sortable",type:"boolean",required:!1,default:!1},{name:"paginated",type:"boolean",required:!1,default:!1}],children:"none"}],["craft-virtual-list",{name:"VirtualList",zigType:"craft.VirtualList",props:[{name:"items",type:"array",required:!0},{name:"itemHeight",type:"number",required:!1,default:48},{name:"renderItem",type:"callback",required:!0}],children:"none"}],["craft-tree-view",{name:"TreeView",zigType:"craft.TreeView",props:[{name:"data",type:"object",required:!0},{name:"expandable",type:"boolean",required:!1,default:!0}],children:"none"}]]);async function wX(U,X={}){let $=performance.now(),q={target:X.target||"universal",format:X.format||"zig",optimize:X.optimize??!0,treeShake:X.treeShake??!0,hotReload:X.hotReload??!1,debug:X.debug??!1,sourceMaps:X.sourceMaps??!1,bundle:X.bundle??!0,minify:X.minify??!1,components:X.components||YU},Y=typeof U==="string"?QU(U):U,J=KU(Y.tree,q),G=AU(J),Q=q.treeShake?OU(J,G):J,K=new Map;if(q.target==="universal"){let L=["macos","windows","linux","ios","android"];for(let B of L){let A=P(Q,{...q,target:B});K.set(B,A)}}else{let L=P(Q,q);K.set(q.target,L)}let W=VU(Q,q,K),_=IU(Y,Q,q),F={compilationTime:performance.now()-$,totalComponents:S(Y.tree),nativeComponents:C(Q),webComponents:S(Y.tree)-C(Q),bundleSize:W.length,treeShakenSize:q.treeShake?EU(J,Q):W.length,warnings:[],errors:[]},w;if(q.sourceMaps)w=MU(Y,Q);return{code:W,platformCode:K,dependencies:G,manifest:_,sourceMaps:w,stats:F}}function QU(U){let X={type:"fragment",children:[]},$=U.match(/<body[^>]*>([\s\S]*?)<\/body>/i),q=$?$[1]:U;return h(q,X),{id:s(),hash:l(U),tree:X,scripts:bU(U),styles:jU(U),staticParts:new Map,dynamicParts:new Map,dependencies:[],metadata:{hasSlots:!1,hasDynamicContent:U.includes("{{"),hasEventHandlers:U.includes("onclick")||U.includes("onchange"),hasAsyncContent:!1,componentCount:0,maxDepth:0,estimatedSize:U.length}}}function h(U,X){let $=/<(@?[\w-]+)([^>]*)(?:\/>|>([\s\S]*?)<\/\1>)/g,q;while((q=$.exec(U))!==null){let[,Y,J,G]=q,Q=Y.startsWith("@craft-"),K={type:Q?"component":"element",tag:Q?Y.slice(1):Y,props:GU(J),children:[],componentName:Q?Y.slice(1):void 0};if(G){let W=G.replace(/<[^>]+>/g,"").trim();if(W)K.children=K.children??[],K.children.push({type:"text",text:W});h(G,K)}X.children=X.children??[],X.children.push(K)}}function GU(U){let X={},$=/([\w-:@]+)(?:=["']([^"']*)["'])?/g,q;while((q=$.exec(U))!==null){let[,Y,J]=q;X[Y]=J??!0}return X}function KU(U,X){return g(U,X)}function g(U,X){let $=U.componentName?X.components?.get(U.componentName):void 0,q="craft.View";if($)q=$.zigType;else if(U.type==="text")q="craft.Text";else if(U.tag)q=WU(U.tag);let Y={};if(U.props)for(let[K,W]of Object.entries(U.props))Y[K]=ZU(W);let J=[];if(U.children)for(let K of U.children)J.push(g(K,X));let G=new Map;if(U.props){for(let[K,W]of Object.entries(U.props))if(K.startsWith("on")&&typeof W==="string")G.set(K.slice(2).toLowerCase(),W)}let Q=FU(U);return{type:_U(U,$),zigType:q,props:Y,children:J,events:G,styles:Q,id:U.hydrationKey,key:U.props?.key}}function WU(U){return{div:"craft.View",span:"craft.Text",p:"craft.Text",h1:"craft.Text",h2:"craft.Text",h3:"craft.Text",h4:"craft.Text",h5:"craft.Text",h6:"craft.Text",button:"craft.Button",input:"craft.TextInput",textarea:"craft.TextArea",select:"craft.Select",img:"craft.Image",a:"craft.Link",ul:"craft.List",ol:"craft.List",li:"craft.ListItem",form:"craft.Form",label:"craft.Label",nav:"craft.View",header:"craft.View",footer:"craft.View",main:"craft.View",section:"craft.View",article:"craft.View",aside:"craft.View"}[U.toLowerCase()]||"craft.View"}function ZU(U){if(typeof U==="string"){if(U.startsWith("{{")&&U.endsWith("}}"))return{type:"binding",path:U.slice(2,-2).trim()};if(U.includes("(")&&U.includes(")"))return{type:"callback",handler:U};return{type:"literal",value:U}}if(typeof U==="number"||typeof U==="boolean")return{type:"literal",value:U};return{type:"literal",value:String(U)}}function _U(U,X){if(X){let q=X.name.toLowerCase();if(q.includes("button"))return"button";if(q.includes("input")||q.includes("text"))return"input";if(q.includes("image")||q.includes("avatar"))return"image";if(q.includes("list")||q.includes("table"))return"list";if(q.includes("scroll"))return"scroll";return"custom"}if(U.type==="text")return"text";let $=U.tag?.toLowerCase();if($==="button")return"button";if($==="input"||$==="textarea")return"input";if($==="img")return"image";if($==="ul"||$==="ol")return"list";return"view"}function FU(U){let X=U.props?.style,$={},q={};if(X){let Y=X.split(";").filter(Boolean);for(let J of Y){let[G,Q]=J.split(":").map((K)=>K.trim());if(!G||!Q)continue;switch(G){case"display":$.display=Q;break;case"flex-direction":$.flexDirection=Q;break;case"justify-content":$.justifyContent=wU(Q);break;case"align-items":$.alignItems=LU(Q);break;case"gap":$.gap=Number.parseInt(Q,10);break;case"padding":$.padding=Number.parseInt(Q,10);break;case"margin":$.margin=Number.parseInt(Q,10);break;case"width":$.width=Q==="auto"?"auto":Number.parseInt(Q,10);break;case"height":$.height=Q==="auto"?"auto":Number.parseInt(Q,10);break;case"background-color":case"background":q.backgroundColor=Q;break;case"border-color":q.borderColor=Q;break;case"border-width":q.borderWidth=Number.parseInt(Q,10);break;case"border-radius":q.borderRadius=Number.parseInt(Q,10);break;case"opacity":q.opacity=Number.parseFloat(Q);break}}}return{layout:$,appearance:q}}function wU(U){return{"flex-start":"start","flex-end":"end",center:"center","space-between":"between","space-around":"around"}[U]||"start"}function LU(U){return{"flex-start":"start","flex-end":"end",center:"center",stretch:"stretch"}[U]||"start"}function AU(U){let X=[],$=new Set;function q(Y,J){let G=Y.id||s();if($.has(G))return;$.add(G);let Q={id:G,type:"component",path:Y.zigType,dependencies:J?[J]:[],size:f(Y),isStatic:BU(Y)};X.push(Q);for(let K of Y.children)q(K,G)}return q(U),X}function f(U){let X=100;return X+=Object.keys(U.props).length*20,X+=U.events.size*50,X}function BU(U){for(let X of Object.values(U.props))if(X.type!=="literal")return!1;return U.events.size===0}function OU(U,X){return U}function EU(U,X){let $=0;function q(Y){$+=f(Y);for(let J of Y.children)q(J)}return q(X),$}function P(U,X){switch(X.format){case"zig":return u(U,X);case"typescript":return HU(U,X);case"json":return JSON.stringify(U,null,X.minify?0:2);default:return u(U,X)}}function u(U,X){let $=[];return $.push("// Auto-generated by stx compiler"),$.push("// Target: "+X.target),$.push(""),$.push('const std = @import("std");'),$.push('const craft = @import("craft");'),$.push(""),$.push("pub fn render(allocator: std.mem.Allocator) !craft.Element {"),$.push(" return try build(allocator);"),$.push("}"),$.push(""),m(U,$,0),$.join(`
545
+ `)}function m(U,X,$){let q=" ".repeat($);if($===0)X.push("fn build(allocator: std.mem.Allocator) !craft.Element {");let Y=`node_${$}`;X.push(`${q} var ${Y} = try ${U.zigType}.init(allocator);`);for(let[J,G]of Object.entries(U.props))if(G.type==="literal"){let Q=typeof G.value==="string"?`"${G.value}"`:String(G.value);X.push(`${q} ${Y}.set${zU(J)}(${Q});`)}for(let J=0;J<U.children.length;J++){let G=U.children[J];if(G.type==="text"){let Q=G.props.text?.type==="literal"?String(G.props.text.value):"";X.push(`${q} try ${Y}.addChild(try craft.Text.init(allocator, "${Q}"));`)}else m(G,X,$+1),X.push(`${q} try ${Y}.addChild(node_${$+1});`)}if($===0)X.push(` return ${Y}.element();`),X.push("}")}function HU(U,X){let $=[];return $.push("// Auto-generated by stx compiler"),$.push("// Target: "+X.target),$.push(""),$.push('import { Craft } from "@stacksjs/craft";'),$.push(""),$.push("export function render(): Craft.Element {"),$.push(" return "+d(U,1)+";"),$.push("}"),$.join(`
546
+ `)}function d(U,X){let $=" ".repeat(X),q=[];for(let[Q,K]of Object.entries(U.props))if(K.type==="literal"){let W=typeof K.value==="string"?`"${K.value}"`:String(K.value);q.push(`${Q}: ${W}`)}let Y=q.length>0?`{ ${q.join(", ")} }`:"{}",J=U.children.map((Q)=>Q.type==="text"?`"${Q.props.text?.type==="literal"?Q.props.text.value:""}"`:d(Q,X+1)),G=J.length>0?`,
541
547
  ${$} [${J.join(`,
542
- ${$} `)}]`:"";return`Craft.create("${U.zigType}", ${Y}${G})`}function IU(U,X,$){if(X.target==="universal"){let q=[];q.push("// Universal entry point"),q.push("");for(let[Y,J]of $)q.push(`// --- ${Y.toUpperCase()} ---`),q.push(`#if ${Y.toUpperCase()}`),q.push(J),q.push("#endif"),q.push("");return q.join(`
543
- `)}return $.get(X.target)||D(U,X)}function MU(U,X,$){let q=[];function Y(J){q.push({name:J.zigType,hash:r(JSON.stringify(J.props)),props:Object.keys(J.props),events:Array.from(J.events.keys()),slots:[],isNative:J.zigType.startsWith("craft.")});for(let G of J.children)Y(G)}return Y(X),{version:"1.0.0",components:q,entry:U.id,assets:[],styles:U.styles}}function RU(U,X){return JSON.stringify({version:3,file:"output.zig",sources:["input.stx"],mappings:""})}var zU=0;function c(){return`id_${++zU}`}function r(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return Math.abs(X).toString(36)}function bU(U){return U.charAt(0).toUpperCase()+U.slice(1)}function jU(U){let X=[],$=/<script[^>]*>([\s\S]*?)<\/script>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function kU(U){let X=[],$=/<style[^>]*>([\s\S]*?)<\/style>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function S(U){let X=U.type==="component"?1:0;if(U.children)for(let $ of U.children)X+=S($);return X}function y(U){let X=U.zigType.startsWith("craft.")?1:0;for(let $ of U.children)X+=y($);return X}function EX(U){return{start:async()=>{console.log("[craft-compiler] Hot reload server started")},stop:async()=>{console.log("[craft-compiler] Hot reload server stopped")},notifyChange:(X)=>{console.log(`[craft-compiler] File changed: ${X}`)}}}var N={button:{nativeType:"craft-button",fallbackTag:"button",fallbackClasses:"craft-button",nativeProps:["variant","size","disabled","loading"]},"text-input":{nativeType:"craft-text-input",fallbackTag:"input",fallbackClasses:"craft-text-input",nativeProps:["placeholder","value","type","disabled","readonly"]},textarea:{nativeType:"craft-textarea",fallbackTag:"textarea",fallbackClasses:"craft-textarea",nativeProps:["placeholder","value","rows","disabled","readonly"]},checkbox:{nativeType:"craft-checkbox",fallbackTag:"input",fallbackClasses:"craft-checkbox",nativeProps:["checked","disabled","label"],render:(U,X)=>{let $=U.checked?"checked":"",q=U.disabled?"disabled":"";return`<label class="craft-checkbox-wrapper">
548
+ ${$} `)}]`:"";return`Craft.create("${U.zigType}", ${Y}${G})`}function VU(U,X,$){if(X.target==="universal"){let q=[];q.push("// Universal entry point"),q.push("");for(let[Y,J]of $)q.push(`// --- ${Y.toUpperCase()} ---`),q.push(`#if ${Y.toUpperCase()}`),q.push(J),q.push("#endif"),q.push("");return q.join(`
549
+ `)}return $.get(X.target)||P(U,X)}function IU(U,X,$){let q=[];function Y(J){q.push({name:J.zigType,hash:l(JSON.stringify(J.props)),props:Object.keys(J.props),events:Array.from(J.events.keys()),slots:[],isNative:J.zigType.startsWith("craft.")});for(let G of J.children)Y(G)}return Y(X),{version:"1.0.0",components:q,entry:U.id,assets:[],styles:U.styles}}function MU(U,X){return JSON.stringify({version:3,file:"output.zig",sources:["input.stx"],mappings:""})}var RU=0;function s(){return`id_${++RU}`}function l(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return Math.abs(X).toString(36)}function zU(U){return U.charAt(0).toUpperCase()+U.slice(1)}function bU(U){let X=[],$=/<script[^>]*>([\s\S]*?)<\/script>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function jU(U){let X=[],$=/<style[^>]*>([\s\S]*?)<\/style>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function S(U){let X=U.type==="component"?1:0;if(U.children)for(let $ of U.children)X+=S($);return X}function C(U){let X=U.zigType.startsWith("craft.")?1:0;for(let $ of U.children)X+=C($);return X}function LX(U){return{start:async()=>{console.log("[craft-compiler] Hot reload server started")},stop:async()=>{console.log("[craft-compiler] Hot reload server stopped")},notifyChange:(X)=>{console.log(`[craft-compiler] File changed: ${X}`)}}}var y={button:{nativeType:"craft-button",fallbackTag:"button",fallbackClasses:"craft-button",nativeProps:["variant","size","disabled","loading"]},"text-input":{nativeType:"craft-text-input",fallbackTag:"input",fallbackClasses:"craft-text-input",nativeProps:["placeholder","value","type","disabled","readonly"]},textarea:{nativeType:"craft-textarea",fallbackTag:"textarea",fallbackClasses:"craft-textarea",nativeProps:["placeholder","value","rows","disabled","readonly"]},checkbox:{nativeType:"craft-checkbox",fallbackTag:"input",fallbackClasses:"craft-checkbox",nativeProps:["checked","disabled","label"],render:(U,X)=>{let $=U.checked?"checked":"",q=U.disabled?"disabled":"";return`<label class="craft-checkbox-wrapper">
544
550
  <input type="checkbox" class="craft-checkbox" ${$} ${q}>
545
551
  <span class="craft-checkbox-label">${X||U.label||""}</span>
546
552
  </label>`}},radio:{nativeType:"craft-radio",fallbackTag:"input",fallbackClasses:"craft-radio",nativeProps:["checked","disabled","name","value","label"]},select:{nativeType:"craft-select",fallbackTag:"select",fallbackClasses:"craft-select",nativeProps:["value","disabled","options","placeholder"]},slider:{nativeType:"craft-slider",fallbackTag:"input",fallbackClasses:"craft-slider",nativeProps:["value","min","max","step","disabled"],render:(U,X)=>{let $=U.min??0,q=U.max??100,Y=U.step??1,J=U.value??50,G=U.disabled?"disabled":"";return`<input type="range" class="craft-slider" min="${$}" max="${q}" step="${Y}" value="${J}" ${G}>`}},label:{nativeType:"craft-label",fallbackTag:"span",fallbackClasses:"craft-label",nativeProps:["text","for"]},badge:{nativeType:"craft-badge",fallbackTag:"span",fallbackClasses:"craft-badge",nativeProps:["variant","size"]},avatar:{nativeType:"craft-avatar",fallbackTag:"div",fallbackClasses:"craft-avatar",nativeProps:["src","alt","size","fallback"],render:(U,X)=>{let $=U.size||40,q=U.src,Y=String(U.alt||""),J=U.fallback||(Y?Y.charAt(0).toUpperCase():"?");if(q)return`<img class="craft-avatar" src="${q}" alt="${Y}" style="width:${$}px;height:${$}px;border-radius:50%">`;return`<div class="craft-avatar craft-avatar-fallback" style="width:${$}px;height:${$}px;border-radius:50%;display:flex;align-items:center;justify-content:center">${J}</div>`}},progress:{nativeType:"craft-progress",fallbackTag:"div",fallbackClasses:"craft-progress",nativeProps:["value","max","variant"],render:(U,X)=>{let $=Number(U.value)||0,q=Number(U.max)||100;return`<div class="craft-progress"><div class="craft-progress-bar" style="width:${Math.min(100,Math.max(0,$/q*100))}%"></div></div>`}},spinner:{nativeType:"craft-spinner",fallbackTag:"div",fallbackClasses:"craft-spinner",nativeProps:["size"],render:(U,X)=>{let $=U.size||24;return`<div class="craft-spinner" style="width:${$}px;height:${$}px"></div>`}},card:{nativeType:"craft-card",fallbackTag:"div",fallbackClasses:"craft-card",nativeProps:["title","subtitle","variant"]},modal:{nativeType:"craft-modal",fallbackTag:"dialog",fallbackClasses:"craft-modal",nativeProps:["open","title","closable","size"],render:(U,X)=>{let $=U.open?"open":"",q=U.title||"";return`<dialog class="craft-modal" ${$}>
@@ -554,7 +560,7 @@ ${$} `)}]`:"";return`Craft.create("${U.zigType}", ${Y}${G})`}function IU(U,X,
554
560
  </details>`}},divider:{nativeType:"craft-divider",fallbackTag:"hr",fallbackClasses:"craft-divider",nativeProps:["orientation","variant"]},table:{nativeType:"craft-table",fallbackTag:"table",fallbackClasses:"craft-table",nativeProps:["columns","rows","sortable","selectable"]},list:{nativeType:"craft-list",fallbackTag:"ul",fallbackClasses:"craft-list",nativeProps:["items","selectable"]},tree:{nativeType:"craft-tree",fallbackTag:"div",fallbackClasses:"craft-tree",nativeProps:["nodes","expandable","selectable"]},alert:{nativeType:"craft-alert",fallbackTag:"div",fallbackClasses:"craft-alert",nativeProps:["variant","title","dismissible"],render:(U,X)=>{let $=U.variant||"info",q=U.title||"";return`<div class="craft-alert craft-alert-${$}" role="alert">
555
561
  ${q?`<div class="craft-alert-title">${q}</div>`:""}
556
562
  <div class="craft-alert-content">${X}</div>
557
- </div>`}},toast:{nativeType:"craft-toast",fallbackTag:"div",fallbackClasses:"craft-toast",nativeProps:["variant","duration","position"]},tooltip:{nativeType:"craft-tooltip",fallbackTag:"span",fallbackClasses:"craft-tooltip",nativeProps:["content","position"],render:(U,X)=>{let $=U.content||"",q=U.position||"top";return`<span class="craft-tooltip" data-tooltip="${$}" data-position="${q}">${X}</span>`}},menu:{nativeType:"craft-menu",fallbackTag:"nav",fallbackClasses:"craft-menu",nativeProps:["items","orientation"]},breadcrumb:{nativeType:"craft-breadcrumb",fallbackTag:"nav",fallbackClasses:"craft-breadcrumb",nativeProps:["items","separator"]},pagination:{nativeType:"craft-pagination",fallbackTag:"nav",fallbackClasses:"craft-pagination",nativeProps:["total","page","pageSize"]},"code-editor":{nativeType:"craft-code-editor",fallbackTag:"textarea",fallbackClasses:"craft-code-editor",nativeProps:["value","language","theme","readonly","lineNumbers"]},"file-browser":{nativeType:"craft-file-browser",fallbackTag:"div",fallbackClasses:"craft-file-browser",nativeProps:["path","showHidden","selectable"]},"color-picker":{nativeType:"craft-color-picker",fallbackTag:"input",fallbackClasses:"craft-color-picker",nativeProps:["value","format"],render:(U,X)=>{return`<input type="color" class="craft-color-picker" value="${U.value||"#000000"}">`}},"date-picker":{nativeType:"craft-date-picker",fallbackTag:"input",fallbackClasses:"craft-date-picker",nativeProps:["value","min","max","format"],render:(U,X)=>{let $=U.value||"",q=U.min||"",Y=U.max||"";return`<input type="date" class="craft-date-picker" value="${$}" min="${q}" max="${Y}">`}},"time-picker":{nativeType:"craft-time-picker",fallbackTag:"input",fallbackClasses:"craft-time-picker",nativeProps:["value","min","max","step"],render:(U,X)=>{return`<input type="time" class="craft-time-picker" value="${U.value||""}">`}}},i=`
563
+ </div>`}},toast:{nativeType:"craft-toast",fallbackTag:"div",fallbackClasses:"craft-toast",nativeProps:["variant","duration","position"]},tooltip:{nativeType:"craft-tooltip",fallbackTag:"span",fallbackClasses:"craft-tooltip",nativeProps:["content","position"],render:(U,X)=>{let $=U.content||"",q=U.position||"top";return`<span class="craft-tooltip" data-tooltip="${$}" data-position="${q}">${X}</span>`}},menu:{nativeType:"craft-menu",fallbackTag:"nav",fallbackClasses:"craft-menu",nativeProps:["items","orientation"]},breadcrumb:{nativeType:"craft-breadcrumb",fallbackTag:"nav",fallbackClasses:"craft-breadcrumb",nativeProps:["items","separator"]},pagination:{nativeType:"craft-pagination",fallbackTag:"nav",fallbackClasses:"craft-pagination",nativeProps:["total","page","pageSize"]},"code-editor":{nativeType:"craft-code-editor",fallbackTag:"textarea",fallbackClasses:"craft-code-editor",nativeProps:["value","language","theme","readonly","lineNumbers"]},"file-browser":{nativeType:"craft-file-browser",fallbackTag:"div",fallbackClasses:"craft-file-browser",nativeProps:["path","showHidden","selectable"]},"color-picker":{nativeType:"craft-color-picker",fallbackTag:"input",fallbackClasses:"craft-color-picker",nativeProps:["value","format"],render:(U,X)=>{return`<input type="color" class="craft-color-picker" value="${U.value||"#000000"}">`}},"date-picker":{nativeType:"craft-date-picker",fallbackTag:"input",fallbackClasses:"craft-date-picker",nativeProps:["value","min","max","format"],render:(U,X)=>{let $=U.value||"",q=U.min||"",Y=U.max||"";return`<input type="date" class="craft-date-picker" value="${$}" min="${q}" max="${Y}">`}},"time-picker":{nativeType:"craft-time-picker",fallbackTag:"input",fallbackClasses:"craft-time-picker",nativeProps:["value","min","max","step"],render:(U,X)=>{return`<input type="time" class="craft-time-picker" value="${U.value||""}">`}}},r=`
558
564
  <style id="craft-component-styles">
559
565
  /* Craft Component Base Styles */
560
566
  .craft-button {
@@ -779,7 +785,7 @@ ${$} `)}]`:"";return`Craft.create("${U.zigType}", ${Y}${G})`}function IU(U,X,
779
785
  .craft-table th { background: #374151; }
780
786
  }
781
787
  </style>
782
- `;function a(U,X={}){let{classPrefix:$="craft"}=X;if(!U.includes("craft-component-styles"))if(U.includes("</head>"))U=U.replace("</head>",`
788
+ `;function i(U,X={}){let{classPrefix:$="craft"}=X;if(!U.includes("craft-component-styles"))if(U.includes("</head>"))U=U.replace("</head>",`
783
789
  <style id="craft-component-styles">
784
790
  /* Craft Component Base Styles */
785
791
  .craft-button {
@@ -1456,15 +1462,15 @@ ${$} `)}]`:"";return`Craft.create("${U.zigType}", ${Y}${G})`}function IU(U,X,
1456
1462
  .craft-table th { background: #374151; }
1457
1463
  }
1458
1464
  </style>
1459
- `+U;return U=U.replace(/<@craft-(\w+[-\w]*)\s*([^>]*?)\/>/g,(q,Y,J)=>{return p(Y,J,"",X,$)}),U=U.replace(/<@craft-(\w+[-\w]*)\s*([^>]*)>([\s\S]*?)<\/@craft-\1>/g,(q,Y,J,G)=>{return p(Y,J,G.trim(),X,$)}),U}function p(U,X,$,q,Y){let J=q.components?.[U]||N[U];if(!J)return console.warn(`[stx] Unknown Craft component: @craft-${U}`),`<div class="${Y}-unknown" data-component="${U}">${$}</div>`;let G=TU(X),Q=[J.fallbackClasses||`${Y}-${U}`];if(G.class)Q.push(G.class),delete G.class;if(J.render)return J.render(G,$);let K=xU(G,J,Q);if(["input","hr","br","img"].includes(J.fallbackTag))return`<${J.fallbackTag} ${K}>`;return`<${J.fallbackTag} ${K}>${$}</${J.fallbackTag}>`}function TU(U){let X={},$=/(?::|@)?(\w+[-\w]*)(?:="([^"]*)")?/g,q;while((q=$.exec(U))!==null){let[Y,J,G]=q;if(Y.startsWith(":"))X[J]=G;else if(Y.startsWith("@"))X[`on${J.charAt(0).toUpperCase()}${J.slice(1)}`]=G;else if(G===void 0)X[J]=!0;else X[J]=G}return X}function xU(U,X,$){let q=[];q.push(`class="${$.join(" ")}"`),q.push(`data-craft="${X.nativeType}"`);for(let[Y,J]of Object.entries(U))if(J===!0)q.push(Y);else if(J!==!1&&J!==void 0&&J!==null){let G=String(J).replace(/"/g,"&quot;");q.push(`${Y}="${G}"`)}return q.join(" ")}function VX(U,X){N[U]=X}function wX(){return{...N}}var R=new Map,z=new Map;function PU(U,X){let $=X?.id||dU(U),q=sU(U),Y=R.get($);if(Y&&Y.hash===q)return Y;let J=CU(U),G=hU(U),Q=fU(U),K=vU(J),{staticParts:W,dynamicParts:_}=uU(J),L=gU(U),A={id:$,hash:q,tree:J,scripts:G,styles:Q,staticParts:W,dynamicParts:_,dependencies:L,metadata:K};return R.set($,A),A}async function IX(U,X={},$={}){let q=performance.now();if($.cache){let Q=`${U.id}:${JSON.stringify(X)}`,K=z.get(Q);if(K&&Date.now()-K.timestamp<($.cacheTTL||60000))return{html:K.html,styles:U.styles.join(`
1465
+ `+U;return U=U.replace(/<@craft-(\w+[-\w]*)\s*([^>]*?)\/>/g,(q,Y,J)=>{return c(Y,J,"",X,$)}),U=U.replace(/<@craft-(\w+[-\w]*)\s*([^>]*)>([\s\S]*?)<\/@craft-\1>/g,(q,Y,J,G)=>{return c(Y,J,G.trim(),X,$)}),U}function c(U,X,$,q,Y){let J=q.components?.[U]||y[U];if(!J)return console.warn(`[stx] Unknown Craft component: @craft-${U}`),`<div class="${Y}-unknown" data-component="${U}">${$}</div>`;let G=kU(X),Q=[J.fallbackClasses||`${Y}-${U}`];if(G.class)Q.push(G.class),delete G.class;if(J.render)return J.render(G,$);let K=TU(G,J,Q);if(["input","hr","br","img"].includes(J.fallbackTag))return`<${J.fallbackTag} ${K}>`;return`<${J.fallbackTag} ${K}>${$}</${J.fallbackTag}>`}function kU(U){let X={},$=/(?::|@)?(\w+[-\w]*)(?:="([^"]*)")?/g,q;while((q=$.exec(U))!==null){let[Y,J,G]=q;if(Y.startsWith(":"))X[J]=G;else if(Y.startsWith("@"))X[`on${J.charAt(0).toUpperCase()}${J.slice(1)}`]=G;else if(G===void 0)X[J]=!0;else X[J]=G}return X}function TU(U,X,$){let q=[];q.push(`class="${$.join(" ")}"`),q.push(`data-craft="${X.nativeType}"`);for(let[Y,J]of Object.entries(U))if(J===!0)q.push(Y);else if(J!==!1&&J!==void 0&&J!==null){let G=String(J).replace(/"/g,"&quot;");q.push(`${Y}="${G}"`)}return q.join(" ")}function BX(U,X){y[U]=X}function OX(){return{...y}}var I=new Map,M=new Map;function xU(U,X){let $=X?.id||mU(U),q=dU(U),Y=I.get($);if(Y&&Y.hash===q)return Y;let J=PU(U),G=uU(U),Q=hU(U),K=NU(J),{staticParts:W,dynamicParts:_}=vU(J),F=gU(U),w={id:$,hash:q,tree:J,scripts:G,styles:Q,staticParts:W,dynamicParts:_,dependencies:F,metadata:K};return I.set($,w),w}async function HX(U,X={},$={}){let q=performance.now();if($.cache){let Q=`${U.id}:${JSON.stringify(X)}`,K=M.get(Q);if(K&&Date.now()-K.timestamp<($.cacheTTL||60000))return{html:K.html,styles:U.styles.join(`
1460
1466
  `),scripts:U.scripts.join(`
1461
- `),metadata:{renderTime:0,cacheHit:!0,totalSize:K.html.length,componentCount:U.metadata.componentCount}}}let Y;if($.streaming)Y=await SU(U.tree,X);else Y=b(U.tree,X);let J;if($.hydrate){let Q=NU(Y,U,X);Y=Q.html,J=Q.data}if($.minify)Y=mU(Y);if($.cache){let Q=`${U.id}:${JSON.stringify(X)}`;z.set(Q,{html:Y,timestamp:Date.now()})}let G=performance.now()-q;return{html:Y,styles:U.styles.join(`
1467
+ `),metadata:{renderTime:0,cacheHit:!0,totalSize:K.html.length,componentCount:U.metadata.componentCount}}}let Y;if($.streaming)Y=await CU(U.tree,X);else Y=R(U.tree,X);let J;if($.hydrate){let Q=DU(Y,U,X);Y=Q.html,J=Q.data}if($.minify)Y=fU(Y);if($.cache){let Q=`${U.id}:${JSON.stringify(X)}`;M.set(Q,{html:Y,timestamp:Date.now()})}let G=performance.now()-q;return{html:Y,styles:U.styles.join(`
1462
1468
  `),scripts:U.scripts.join(`
1463
- `),hydrationData:J,metadata:{renderTime:G,cacheHit:!1,totalSize:Y.length,componentCount:U.metadata.componentCount}}}function MX(U,X){let $=[],q=[],Y=[],J=new Map,G=[];return j(U.tree,(Q,K)=>{if(Q.type==="component"&&Q.componentName){if($U(Q.componentName))$.push(Q.componentName)}if(Q.type==="element"&&Q.tag){let W=rU(Q);if(W)G.push(W);if(Q.props){for(let[_,L]of Object.entries(Q.props))if(_.startsWith("on")&&typeof L==="string"){let A=`handler_${J.size}`;J.set(A,L)}}}if(Q.isStatic&&Q.type==="element")q.push(t(Q));else if(!Q.isStatic&&Q.type!=="text")Y.push(Q.tag||Q.componentName||"unknown")}),{nativeComponents:$,staticHTML:q,dynamicParts:Y,eventHandlers:J,nativeWidgets:G}}function RX(U,X={}){let $=PU(U),q=yU($,X),Y=new Map,J=[];return j($.tree,(G)=>{if(G.type==="component"&&G.componentName){if($U(G.componentName)){J.push(G.componentName);let Q=`<!--craft:${G.componentName}:${G.hydrationKey||"default"}-->`;Y.set(G.hydrationKey||G.componentName,Q)}}}),{staticHTML:q,dynamicPlaceholders:Y,craftComponents:J}}function CU(U){let X={type:"fragment",children:[]},$=X,q=[X],Y=U,J=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);while(Y.length>0){let G=Y.match(/^<(@?[\w-]+)([^>]*)>/);if(G){let[W,_,L]=G,A=DU(L),B=_.startsWith("@craft-"),H=B?_:_.toLowerCase(),O={type:B?"component":"element",tag:H,props:A,children:[],componentName:B?H.slice(1):void 0,isStatic:!o(L),hydrationKey:cU()};if($.children=$.children||[],$.children.push(O),!J.has(H)&&!L.endsWith("/"))q.push(O),$=O;Y=Y.slice(W.length);continue}let Q=Y.match(/^<\/(@?[\w-]+)>/);if(Q){let[W,_]=Q,A=_.startsWith("@craft-")?_:_.toLowerCase();while(q.length>1){let B=q.pop();if($=q[q.length-1],B.tag===A)break}Y=Y.slice(W.length);continue}let K=Y.match(/^[^<]+/);if(K){let W=K[0];if(W.trim()){let _={type:"text",text:W,isStatic:!o(W)};$.children=$.children||[],$.children.push(_)}Y=Y.slice(W.length);continue}Y=Y.slice(1)}return X}function DU(U){let X={},$=/([\w-:@]+)(?:=(?:"([^"]*)"|'([^']*)'|(\S+)))?/g,q;while((q=$.exec(U))!==null){let[,Y,J,G,Q]=q,K=J??G??Q??!0;X[Y]=K}return X}function j(U,X,$=[]){if(X(U,$),U.children)U.children.forEach((q,Y)=>{j(q,X,[...$,`${Y}`])})}function b(U,X){switch(U.type){case"text":return UU(U.text||"",X);case"element":case"component":{let $=U.tag||"div",q=e(U.props||{},X),Y=(U.children||[]).map((J)=>b(J,X)).join("");if(!U.children||U.children.length===0){if(["input","br","hr","img","meta","link"].includes($))return`<${$}${q} />`}return`<${$}${q}>${Y}</${$}>`}case"fragment":return(U.children||[]).map(($)=>b($,X)).join("");case"slot":return`<!--slot:${U.slotName||"default"}-->`;default:return""}}function t(U){if(U.type==="text")return U.text||"";let X=U.tag||"div",$=e(U.props||{},{});return`<${X}${$}></${X}>`}function e(U,X){let $=[];for(let[q,Y]of Object.entries(U))if(Y===!0)$.push(` ${q}`);else if(Y!==!1&&Y!==null&&Y!==void 0){let J=UU(String(Y),X);$.push(` ${q}="${XU(J)}"`)}return $.join("")}async function SU(U,X){return b(U,X)}function yU(U,X){let $=[];return j(U.tree,(q)=>{if(q.isStatic)$.push(b(q,X))}),$.join("")}function NU(U,X,$){let q={templateId:X.id,context:$,dynamicParts:Array.from(X.dynamicParts.entries())},Y=`
1469
+ `),hydrationData:J,metadata:{renderTime:G,cacheHit:!1,totalSize:Y.length,componentCount:U.metadata.componentCount}}}function VX(U,X){let $=[],q=[],Y=[],J=new Map,G=[];return z(U.tree,(Q,K)=>{if(Q.type==="component"&&Q.componentName){if(UU(Q.componentName))$.push(Q.componentName)}if(Q.type==="element"&&Q.tag){let W=cU(Q);if(W)G.push(W);if(Q.props){for(let[_,F]of Object.entries(Q.props))if(_.startsWith("on")&&typeof F==="string"){let w=`handler_${J.size}`;J.set(w,F)}}}if(Q.isStatic&&Q.type==="element")q.push(o(Q));else if(!Q.isStatic&&Q.type!=="text")Y.push(Q.tag||Q.componentName||"unknown")}),{nativeComponents:$,staticHTML:q,dynamicParts:Y,eventHandlers:J,nativeWidgets:G}}function IX(U,X={}){let $=xU(U),q=yU($,X),Y=new Map,J=[];return z($.tree,(G)=>{if(G.type==="component"&&G.componentName){if(UU(G.componentName)){J.push(G.componentName);let Q=`<!--craft:${G.componentName}:${G.hydrationKey||"default"}-->`;Y.set(G.hydrationKey||G.componentName,Q)}}}),{staticHTML:q,dynamicPlaceholders:Y,craftComponents:J}}function PU(U){let X={type:"fragment",children:[]},$=X,q=[X],Y=U,J=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);while(Y.length>0){let G=Y.match(/^<(@?[\w-]+)([^>]*)>/);if(G){let[W,_,F]=G,w=SU(F),L=_.startsWith("@craft-"),B=L?_:_.toLowerCase(),A={type:L?"component":"element",tag:B,props:w,children:[],componentName:L?B.slice(1):void 0,isStatic:!p(F),hydrationKey:lU()};if($.children=$.children||[],$.children.push(A),!J.has(B)&&!F.endsWith("/"))q.push(A),$=A;Y=Y.slice(W.length);continue}let Q=Y.match(/^<\/(@?[\w-]+)>/);if(Q){let[W,_]=Q,w=_.startsWith("@craft-")?_:_.toLowerCase();while(q.length>1){let L=q.pop();if($=q[q.length-1],L.tag===w)break}Y=Y.slice(W.length);continue}let K=Y.match(/^[^<]+/);if(K){let W=K[0];if(W.trim()){let _={type:"text",text:W,isStatic:!p(W)};$.children=$.children||[],$.children.push(_)}Y=Y.slice(W.length);continue}Y=Y.slice(1)}return X}function SU(U){let X={},$=/([\w-:@]+)(?:=(?:"([^"]*)"|'([^']*)'|(\S+)))?/g,q;while((q=$.exec(U))!==null){let[,Y,J,G,Q]=q,K=J??G??Q??!0;X[Y]=K}return X}function z(U,X,$=[]){if(X(U,$),U.children)U.children.forEach((q,Y)=>{z(q,X,[...$,`${Y}`])})}function R(U,X){switch(U.type){case"text":return t(U.text||"",X);case"element":case"component":{let $=U.tag||"div",q=n(U.props||{},X),Y=(U.children||[]).map((J)=>R(J,X)).join("");if(!U.children||U.children.length===0){if(["input","br","hr","img","meta","link"].includes($))return`<${$}${q} />`}return`<${$}${q}>${Y}</${$}>`}case"fragment":return(U.children||[]).map(($)=>R($,X)).join("");case"slot":return`<!--slot:${U.slotName||"default"}-->`;default:return""}}function o(U){if(U.type==="text")return U.text||"";let X=U.tag||"div",$=n(U.props||{},{});return`<${X}${$}></${X}>`}function n(U,X){let $=[];for(let[q,Y]of Object.entries(U))if(Y===!0)$.push(` ${q}`);else if(Y!==!1&&Y!==null&&Y!==void 0){let J=t(String(Y),X);$.push(` ${q}="${e(J)}"`)}return $.join("")}async function CU(U,X){return R(U,X)}function yU(U,X){let $=[];return z(U.tree,(q)=>{if(q.isStatic)$.push(R(q,X))}),$.join("")}function DU(U,X,$){let q={templateId:X.id,context:$,dynamicParts:Array.from(X.dynamicParts.entries())},Y=`
1464
1470
  <script data-craft-hydration>
1465
1471
  window.__CRAFT_HYDRATION__ = ${JSON.stringify(q)};
1466
- </script>`;return{html:U+Y,data:q}}function vU(U){let X=!1,$=!1,q=!1,Y=!1,J=0,G=0;function Q(K,W){if(G=Math.max(G,W),K.type==="slot")X=!0;if(K.type==="component")J++;if(!K.isStatic)$=!0;if(K.props)for(let _ of Object.keys(K.props)){if(_.startsWith("on"))q=!0;if(_==="@async"||_==="data-async")Y=!0}if(K.children)K.children.forEach((_)=>Q(_,W+1))}return Q(U,0),{hasSlots:X,hasDynamicContent:$,hasEventHandlers:q,hasAsyncContent:Y,componentCount:J,maxDepth:G,estimatedSize:JSON.stringify(U).length}}function uU(U){let X=new Map,$=new Map;return j(U,(q,Y)=>{let J=Y.join(".");if(q.isStatic)X.set(J,t(q));else $.set(J,q.tag||q.componentName||"dynamic")}),{staticParts:X,dynamicParts:$}}function hU(U){let X=[],$=/<script[^>]*>([\s\S]*?)<\/script>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function fU(U){let X=[],$=/<style[^>]*>([\s\S]*?)<\/style>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function gU(U){let X=[],$=/@include\s*\(\s*['"]([^'"]+)['"]/g,q;while((q=$.exec(U))!==null)X.push(q[1]);let Y=/@component\s*\(\s*['"]([^'"]+)['"]/g;while((q=Y.exec(U))!==null)X.push(q[1]);let J=/<@craft-[\w-]+/g;while((q=J.exec(U))!==null)X.push(q[0].slice(2));return[...new Set(X)]}function o(U){return/\{\{.*?\}\}|\{\!\!.*?\!\!\}/.test(U)}function UU(U,X){let $=U.replace(/\{\{\s*(.+?)\s*\}\}/g,(q,Y)=>{try{let J=n(Y.trim(),X);return XU(String(J??""))}catch{return""}});return $=$.replace(/\{!!\s*(.+?)\s*!!\}/g,(q,Y)=>{try{let J=n(Y.trim(),X);return String(J??"")}catch{return""}}),$}function n(U,X){if(/^[\w.]+$/.test(U)){let $=U.split("."),q=X;for(let Y of $)if(q&&typeof q==="object"&&Y in q)q=q[Y];else return;return q}try{return Function(...Object.keys(X),`return ${U}`)(...Object.values(X))}catch{return}}function XU(U){return U.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function mU(U){return U.replace(/\s+/g," ").replace(/>\s+</g,"><").replace(/\s+>/g,">").replace(/<\s+/g,"<").trim()}function dU(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return`tpl_${Math.abs(X).toString(36)}`}function sU(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return Math.abs(X).toString(36)}var lU=0;function cU(){return`h_${++lU}`}function $U(U){return["craft-button","craft-text-input","craft-textarea","craft-checkbox","craft-radio","craft-select","craft-slider","craft-toggle","craft-date-picker","craft-time-picker","craft-color-picker","craft-file-input","craft-modal","craft-alert","craft-toast","craft-progress","craft-spinner","craft-avatar","craft-badge","craft-card","craft-accordion","craft-tabs","craft-tooltip","craft-popover","craft-dropdown","craft-context-menu","craft-data-table","craft-virtual-list","craft-tree-view","craft-map","craft-chart","craft-video","craft-audio","craft-webview","craft-canvas","craft-image-viewer","craft-pdf-viewer","craft-code-editor","craft-rich-editor"].includes(U)}function rU(U){let X=U.tag?.toLowerCase(),$=U.props?.type,q={button:{component:"craft-button",confidence:0.95,reason:"Native button provides better touch feedback"},"input:text":{component:"craft-text-input",confidence:0.9,reason:"Native text input has better keyboard handling"},"input:checkbox":{component:"craft-checkbox",confidence:0.95,reason:"Native checkbox follows platform conventions"},"input:range":{component:"craft-slider",confidence:0.9,reason:"Native slider provides smooth interaction"},"input:date":{component:"craft-date-picker",confidence:0.95,reason:"Native date picker provides platform-specific UI"},"input:time":{component:"craft-time-picker",confidence:0.95,reason:"Native time picker provides platform-specific UI"},"input:color":{component:"craft-color-picker",confidence:0.9,reason:"Native color picker provides platform-specific UI"},textarea:{component:"craft-textarea",confidence:0.85,reason:"Native textarea handles multiline input better"},select:{component:"craft-select",confidence:0.9,reason:"Native select provides platform dropdown UI"},progress:{component:"craft-progress",confidence:0.95,reason:"Native progress bar matches platform style"},video:{component:"craft-video",confidence:0.95,reason:"Native video provides hardware acceleration"},audio:{component:"craft-audio",confidence:0.95,reason:"Native audio provides system integration"},dialog:{component:"craft-modal",confidence:0.9,reason:"Native modal provides proper layering and focus"}},Y=$?`${X}:${$}`:X,J=q[Y||""]||q[X||""];if(J)return{htmlSelector:Y||X||"",nativeComponent:J.component,confidence:J.confidence,reason:J.reason};return null}function pU(){R.clear()}function iU(){z.clear()}function zX(){pU(),iU()}function bX(){return{templateCacheSize:R.size,renderCacheSize:z.size,totalEntries:R.size+z.size}}import{existsSync as M,mkdirSync as V,readFileSync as aU,writeFileSync as E,copyFileSync as k,chmodSync as F}from"fs";import{join as Z,basename as oU}from"path";import{spawn as C,execSync as nU}from"child_process";import{tmpdir as JU,homedir as qU,platform as tU}from"os";async function NX(U){let X=Date.now();try{if(!M(U.input))return{success:!1,target:U.target||P(),format:U.format||"app",error:`Input file not found: ${U.input}`};let $=U.target||P(),q=U.format||YX($),Y=U.output||Z(process.cwd(),"dist","native");if(!M(Y))V(Y,{recursive:!0});let J=aU(U.input,"utf-8");if(J=h(J,{debug:U.verbose}),J=a(J),!J.includes("craft-component-styles")){if(J.includes("</head>"))J=J.replace("</head>",`${i}
1467
- </head>`)}let G=U.name||oU(U.input,".stx"),Q=U.version||"1.0.0",K=U.craftPath||await JX();if(!K)return{success:!1,target:$,format:q,error:"Craft binary not found. Please install Craft or specify craftPath."};if(U.verbose)console.log(`\uD83D\uDCE6 Building native app for ${$}...`),console.log(` Input: ${U.input}`),console.log(` Output: ${Y}`),console.log(` Craft: ${K}`);let W;switch($){case"macos":W=await eU(J,G,Q,Y,q,U,K);break;case"windows":W=await UX(J,G,Q,Y,q,U,K);break;case"linux":W=await XX(J,G,Q,Y,q,U,K);break;case"ios":W=await $X(J,G,Q,Y,U,K);break;case"android":W=await qX(J,G,Q,Y,U,K);break;default:W={success:!1,target:$,format:q,error:`Unsupported target: ${$}`}}return W.duration=Date.now()-X,W}catch($){return{success:!1,target:U.target||P(),format:U.format||"app",error:$.message,duration:Date.now()-X}}}async function eU(U,X,$,q,Y,J,G){let Q=J.bundleId||`com.stx.${X.toLowerCase().replace(/[^a-z0-9]/g,"")}`,K=Z(q,`${X}.app`),W=Z(K,"Contents"),_=Z(W,"MacOS"),L=Z(W,"Resources");V(_,{recursive:!0}),V(L,{recursive:!0});let A=Z(L,"index.html");E(A,U);let B="";if(J.sidebar?.enabled&&J.sidebar?.config)B=Z(L,"sidebar-config.json"),E(B,JSON.stringify(J.sidebar.config));let H=J.sidebar?.enabled?`--native-sidebar --sidebar-width ${J.sidebar?.width||240} --sidebar-config "$(cat "$RESOURCES/sidebar-config.json")"`:"",O=`#!/bin/bash
1472
+ </script>`;return{html:U+Y,data:q}}function NU(U){let X=!1,$=!1,q=!1,Y=!1,J=0,G=0;function Q(K,W){if(G=Math.max(G,W),K.type==="slot")X=!0;if(K.type==="component")J++;if(!K.isStatic)$=!0;if(K.props)for(let _ of Object.keys(K.props)){if(_.startsWith("on"))q=!0;if(_==="@async"||_==="data-async")Y=!0}if(K.children)K.children.forEach((_)=>Q(_,W+1))}return Q(U,0),{hasSlots:X,hasDynamicContent:$,hasEventHandlers:q,hasAsyncContent:Y,componentCount:J,maxDepth:G,estimatedSize:JSON.stringify(U).length}}function vU(U){let X=new Map,$=new Map;return z(U,(q,Y)=>{let J=Y.join(".");if(q.isStatic)X.set(J,o(q));else $.set(J,q.tag||q.componentName||"dynamic")}),{staticParts:X,dynamicParts:$}}function uU(U){let X=[],$=/<script[^>]*>([\s\S]*?)<\/script>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function hU(U){let X=[],$=/<style[^>]*>([\s\S]*?)<\/style>/gi,q;while((q=$.exec(U))!==null)X.push(q[1]);return X}function gU(U){let X=[],$=/@include\s*\(\s*['"]([^'"]+)['"]/g,q;while((q=$.exec(U))!==null)X.push(q[1]);let Y=/@component\s*\(\s*['"]([^'"]+)['"]/g;while((q=Y.exec(U))!==null)X.push(q[1]);let J=/<@craft-[\w-]+/g;while((q=J.exec(U))!==null)X.push(q[0].slice(2));return[...new Set(X)]}function p(U){return/\{\{.*?\}\}|\{\!\!.*?\!\!\}/.test(U)}function t(U,X){let $=U.replace(/\{\{\s*(.+?)\s*\}\}/g,(q,Y)=>{try{let J=a(Y.trim(),X);return e(String(J??""))}catch{return""}});return $=$.replace(/\{!!\s*(.+?)\s*!!\}/g,(q,Y)=>{try{let J=a(Y.trim(),X);return String(J??"")}catch{return""}}),$}function a(U,X){if(/^[\w.]+$/.test(U)){let $=U.split("."),q=X;for(let Y of $)if(q&&typeof q==="object"&&Y in q)q=q[Y];else return;return q}try{return Function(...Object.keys(X),`return ${U}`)(...Object.values(X))}catch{return}}function e(U){return U.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function fU(U){return U.replace(/\s+/g," ").replace(/>\s+</g,"><").replace(/\s+>/g,">").replace(/<\s+/g,"<").trim()}function mU(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return`tpl_${Math.abs(X).toString(36)}`}function dU(U){let X=0;for(let $=0;$<U.length;$++){let q=U.charCodeAt($);X=(X<<5)-X+q,X=X&X}return Math.abs(X).toString(36)}var sU=0;function lU(){return`h_${++sU}`}function UU(U){return["craft-button","craft-text-input","craft-textarea","craft-checkbox","craft-radio","craft-select","craft-slider","craft-toggle","craft-date-picker","craft-time-picker","craft-color-picker","craft-file-input","craft-modal","craft-alert","craft-toast","craft-progress","craft-spinner","craft-avatar","craft-badge","craft-card","craft-accordion","craft-tabs","craft-tooltip","craft-popover","craft-dropdown","craft-context-menu","craft-data-table","craft-virtual-list","craft-tree-view","craft-map","craft-chart","craft-video","craft-audio","craft-webview","craft-canvas","craft-image-viewer","craft-pdf-viewer","craft-code-editor","craft-rich-editor"].includes(U)}function cU(U){let X=U.tag?.toLowerCase(),$=U.props?.type,q={button:{component:"craft-button",confidence:0.95,reason:"Native button provides better touch feedback"},"input:text":{component:"craft-text-input",confidence:0.9,reason:"Native text input has better keyboard handling"},"input:checkbox":{component:"craft-checkbox",confidence:0.95,reason:"Native checkbox follows platform conventions"},"input:range":{component:"craft-slider",confidence:0.9,reason:"Native slider provides smooth interaction"},"input:date":{component:"craft-date-picker",confidence:0.95,reason:"Native date picker provides platform-specific UI"},"input:time":{component:"craft-time-picker",confidence:0.95,reason:"Native time picker provides platform-specific UI"},"input:color":{component:"craft-color-picker",confidence:0.9,reason:"Native color picker provides platform-specific UI"},textarea:{component:"craft-textarea",confidence:0.85,reason:"Native textarea handles multiline input better"},select:{component:"craft-select",confidence:0.9,reason:"Native select provides platform dropdown UI"},progress:{component:"craft-progress",confidence:0.95,reason:"Native progress bar matches platform style"},video:{component:"craft-video",confidence:0.95,reason:"Native video provides hardware acceleration"},audio:{component:"craft-audio",confidence:0.95,reason:"Native audio provides system integration"},dialog:{component:"craft-modal",confidence:0.9,reason:"Native modal provides proper layering and focus"}},Y=$?`${X}:${$}`:X,J=q[Y||""]||q[X||""];if(J)return{htmlSelector:Y||X||"",nativeComponent:J.component,confidence:J.confidence,reason:J.reason};return null}function rU(){I.clear()}function iU(){M.clear()}function MX(){rU(),iU()}function RX(){return{templateCacheSize:I.size,renderCacheSize:M.size,totalEntries:I.size+M.size}}import{existsSync as $U,mkdirSync as O,copyFileSync as b,chmodSync as V}from"fs";import{join as Z,basename as pU}from"path";import{spawn as x,execSync as aU}from"child_process";import{tmpdir as qU,homedir as XU,platform as oU}from"os";async function yX(U){let X=Date.now();try{if(!await Bun.file(U.input).exists())return{success:!1,target:U.target||T(),format:U.format||"app",error:`Input file not found: ${U.input}`};let $=U.target||T(),q=U.format||qX($),Y=U.output||Z(process.cwd(),"dist","native");if(!$U(Y))O(Y,{recursive:!0});let J=await Bun.file(U.input).text();if(J=v(J,{debug:U.verbose}),J=i(J),!J.includes("craft-component-styles")){if(J.includes("</head>"))J=J.replace("</head>",`${r}
1473
+ </head>`)}let G=U.name||pU(U.input,".stx"),Q=U.version||"1.0.0",K=U.craftPath||await $X();if(!K)return{success:!1,target:$,format:q,error:"Craft binary not found. Please install Craft or specify craftPath."};if(U.verbose)console.log(`\uD83D\uDCE6 Building native app for ${$}...`),console.log(` Input: ${U.input}`),console.log(` Output: ${Y}`),console.log(` Craft: ${K}`);let W;switch($){case"macos":W=await nU(J,G,Q,Y,q,U,K);break;case"windows":W=await tU(J,G,Q,Y,q,U,K);break;case"linux":W=await eU(J,G,Q,Y,q,U,K);break;case"ios":W=await UX(J,G,Q,Y,U,K);break;case"android":W=await XX(J,G,Q,Y,U,K);break;default:W={success:!1,target:$,format:q,error:`Unsupported target: ${$}`}}return W.duration=Date.now()-X,W}catch($){return{success:!1,target:U.target||T(),format:U.format||"app",error:$.message,duration:Date.now()-X}}}async function nU(U,X,$,q,Y,J,G){let Q=J.bundleId||`com.stx.${X.toLowerCase().replace(/[^a-z0-9]/g,"")}`,K=Z(q,`${X}.app`),W=Z(K,"Contents"),_=Z(W,"MacOS"),F=Z(W,"Resources");O(_,{recursive:!0}),O(F,{recursive:!0});let w=Z(F,"index.html");await Bun.write(w,U);let L="";if(J.sidebar?.enabled&&J.sidebar?.config)L=Z(F,"sidebar-config.json"),await Bun.write(L,JSON.stringify(J.sidebar.config));let B=J.sidebar?.enabled?`--native-sidebar --sidebar-width ${J.sidebar?.width||240} --sidebar-config "$(cat "$RESOURCES/sidebar-config.json")"`:"",A=`#!/bin/bash
1468
1474
  DIR="$( cd "$( dirname "\${BASH_SOURCE[0]}" )" && pwd )"
1469
1475
  RESOURCES="$DIR/../Resources"
1470
1476
  "${G}" --html "$(cat "$RESOURCES/index.html")" \\
@@ -1475,9 +1481,9 @@ RESOURCES="$DIR/../Resources"
1475
1481
  ${J.devTools?"--dev-tools":""} \\
1476
1482
  ${J.window?.frameless?"--frameless":""} \\
1477
1483
  ${J.window?.alwaysOnTop?"--always-on-top":""} \\
1478
- ${H}
1479
- `,w=Z(_,X);E(w,O),F(w,493);let T=Z(_,"craft");try{k(G,T),F(T,493)}catch{let x=`#!/bin/bash
1480
- exec "${G}" "$@"`;E(T,x),F(T,493)}let YU=`<?xml version="1.0" encoding="UTF-8"?>
1484
+ ${B}
1485
+ `,H=Z(_,X);await Bun.write(H,A),V(H,493);let j=Z(_,"craft");try{b(G,j),V(j,493)}catch{let k=`#!/bin/bash
1486
+ exec "${G}" "$@"`;await Bun.write(j,k),V(j,493)}let JU=`<?xml version="1.0" encoding="UTF-8"?>
1481
1487
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
1482
1488
  <plist version="1.0">
1483
1489
  <dict>
@@ -1506,7 +1512,7 @@ exec "${G}" "$@"`;E(T,x),F(T,493)}let YU=`<?xml version="1.0" encoding="UTF-8"?>
1506
1512
  <key>LSUIElement</key>
1507
1513
  <${J.systemTray?"true":"false"}/>
1508
1514
  </dict>
1509
- </plist>`;if(E(Z(W,"Info.plist"),YU),J.icon&&M(J.icon))k(J.icon,Z(L,"AppIcon.icns"));if(Y==="dmg"){let x=Z(q,`${X}-${$}.dmg`),v=await QX(K,x,X);if(!v.success)return{success:!1,target:"macos",format:"dmg",error:v.error};return{success:!0,target:"macos",format:"dmg",outputPath:x}}return{success:!0,target:"macos",format:"app",outputPath:K}}async function UX(U,X,$,q,Y,J,G){let Q=Z(q,X);V(Q,{recursive:!0});let K=Z(Q,"index.html");E(K,U);let W=`@echo off
1515
+ </plist>`;if(await Bun.write(Z(W,"Info.plist"),JU),J.icon&&await Bun.file(J.icon).exists())b(J.icon,Z(F,"AppIcon.icns"));if(Y==="dmg"){let k=Z(q,`${X}-${$}.dmg`),D=await JX(K,k,X);if(!D.success)return{success:!1,target:"macos",format:"dmg",error:D.error};return{success:!0,target:"macos",format:"dmg",outputPath:k}}return{success:!0,target:"macos",format:"app",outputPath:K}}async function tU(U,X,$,q,Y,J,G){let Q=Z(q,X);O(Q,{recursive:!0});let K=Z(Q,"index.html");await Bun.write(K,U);let W=`@echo off
1510
1516
  set DIR=%~dp0
1511
1517
  "${G}" --html-file "%DIR%index.html" ^
1512
1518
  --title "${J.window?.title||X}" ^
@@ -1514,7 +1520,7 @@ set DIR=%~dp0
1514
1520
  --height ${J.window?.height||800} ^
1515
1521
  ${J.systemTray?"--system-tray":""} ^
1516
1522
  ${J.devTools?"--dev-tools":""}
1517
- `;if(E(Z(Q,`${X}.bat`),W),Y==="zip"){let _=Z(q,`${X}-${$}-windows.zip`),L=await GX(Q,_);if(!L.success)return{success:!1,target:"windows",format:"zip",error:L.error};return{success:!0,target:"windows",format:"zip",outputPath:_}}return{success:!0,target:"windows",format:"app",outputPath:Q}}async function XX(U,X,$,q,Y,J,G){let Q=Z(q,X);V(Q,{recursive:!0});let K=Z(Q,"index.html");E(K,U);let W=`#!/bin/bash
1523
+ `;if(await Bun.write(Z(Q,`${X}.bat`),W),Y==="zip"){let _=Z(q,`${X}-${$}-windows.zip`),F=await YX(Q,_);if(!F.success)return{success:!1,target:"windows",format:"zip",error:F.error};return{success:!0,target:"windows",format:"zip",outputPath:_}}return{success:!0,target:"windows",format:"app",outputPath:Q}}async function eU(U,X,$,q,Y,J,G){let Q=Z(q,X);O(Q,{recursive:!0});let K=Z(Q,"index.html");await Bun.write(K,U);let W=`#!/bin/bash
1518
1524
  DIR="$( cd "$( dirname "\${BASH_SOURCE[0]}" )" && pwd )"
1519
1525
  "${G}" --html-file "$DIR/index.html" \\
1520
1526
  --title "${J.window?.title||X}" \\
@@ -1522,15 +1528,15 @@ DIR="$( cd "$( dirname "\${BASH_SOURCE[0]}" )" && pwd )"
1522
1528
  --height ${J.window?.height||800} \\
1523
1529
  ${J.systemTray?"--system-tray":""} \\
1524
1530
  ${J.devTools?"--dev-tools":""}
1525
- `,_=Z(Q,X.toLowerCase());E(_,W),F(_,493);let L=`[Desktop Entry]
1531
+ `,_=Z(Q,X.toLowerCase());await Bun.write(_,W),V(_,493);let F=`[Desktop Entry]
1526
1532
  Type=Application
1527
1533
  Name=${X}
1528
1534
  Exec=${_}
1529
1535
  Terminal=false
1530
1536
  Categories=Utility;
1531
- `;if(E(Z(Q,`${X.toLowerCase()}.desktop`),L),Y==="deb"){let A=Z(q,`${X.toLowerCase()}_${$}_amd64.deb`),B=await KX(Q,A,X,$,J);if(!B.success)return{success:!1,target:"linux",format:"deb",error:B.error};return{success:!0,target:"linux",format:"deb",outputPath:A}}if(Y==="appimage"){let A=Z(q,`${X}-${$}-x86_64.AppImage`),B=await WX(Q,A,X,J);if(!B.success)return{success:!1,target:"linux",format:"appimage",error:B.error};return{success:!0,target:"linux",format:"appimage",outputPath:A}}return{success:!0,target:"linux",format:"app",outputPath:Q}}async function $X(U,X,$,q,Y,J){return{success:!1,target:"ios",format:"ipa",error:`iOS build requires Xcode and additional setup. Use 'stx init:ios ${X}' to create an iOS project.`}}async function qX(U,X,$,q,Y,J){return{success:!1,target:"android",format:"apk",error:`Android build requires Android SDK and additional setup. Use 'stx init:android ${X}' to create an Android project.`}}async function JX(){let U=[Z(process.cwd(),"../../craft/packages/zig/zig-out/bin/craft-minimal"),Z(process.cwd(),"../craft/packages/zig/zig-out/bin/craft-minimal"),Z(qU(),"Code/craft/packages/zig/zig-out/bin/craft-minimal"),"/usr/local/bin/craft","/usr/bin/craft",Z(qU(),".local/bin/craft"),Z(process.env.LOCALAPPDATA||"","craft","craft.exe"),Z(process.env.PROGRAMFILES||"","craft","craft.exe")];for(let X of U)if(M(X))return X;try{let $=nU("which craft 2>/dev/null || where craft 2>nul",{encoding:"utf-8"}).trim().split(`
1532
- `)[0];if($&&M($))return $}catch{}return null}function P(){switch(tU()){case"darwin":return"macos";case"win32":return"windows";default:return"linux"}}function YX(U){switch(U){case"macos":return"app";case"windows":return"zip";case"linux":return"appimage";case"ios":return"ipa";case"android":return"apk";default:return"app"}}async function QX(U,X,$){return new Promise((q)=>{let Y=C("hdiutil",["create","-volname",$,"-srcfolder",U,"-ov","-format","UDZO",X]);Y.on("close",(J)=>{if(J===0)q({success:!0});else q({success:!1,error:`hdiutil exited with code ${J}`})}),Y.on("error",(J)=>{q({success:!1,error:J.message})})})}async function GX(U,X){return new Promise(($)=>{let q=C("zip",["-r",X,"."],{cwd:U});q.on("close",(Y)=>{if(Y===0)$({success:!0});else $({success:!1,error:`zip exited with code ${Y}`})}),q.on("error",(Y)=>{$({success:!1,error:Y.message})})})}async function KX(U,X,$,q,Y){return new Promise((J)=>{try{let G=Z(JU(),`stx-deb-${Date.now()}`),Q=Z(G,"DEBIAN"),K=Z(G,"usr","bin"),W=Z(G,"usr","share","applications"),_=Z(G,"usr","share",$.toLowerCase());V(Q,{recursive:!0}),V(K,{recursive:!0}),V(W,{recursive:!0}),V(_,{recursive:!0});let L=I("fs").readdirSync(U);for(let O of L)k(Z(U,O),Z(_,O));let A=`#!/bin/bash
1533
- exec /usr/share/${$.toLowerCase()}/${$.toLowerCase()} "$@"`;E(Z(K,$.toLowerCase()),A),F(Z(K,$.toLowerCase()),493);let B=`Package: ${$.toLowerCase()}
1537
+ `;if(await Bun.write(Z(Q,`${X.toLowerCase()}.desktop`),F),Y==="deb"){let w=Z(q,`${X.toLowerCase()}_${$}_amd64.deb`),L=await QX(Q,w,X,$,J);if(!L.success)return{success:!1,target:"linux",format:"deb",error:L.error};return{success:!0,target:"linux",format:"deb",outputPath:w}}if(Y==="appimage"){let w=Z(q,`${X}-${$}-x86_64.AppImage`),L=await GX(Q,w,X,J);if(!L.success)return{success:!1,target:"linux",format:"appimage",error:L.error};return{success:!0,target:"linux",format:"appimage",outputPath:w}}return{success:!0,target:"linux",format:"app",outputPath:Q}}async function UX(U,X,$,q,Y,J){return{success:!1,target:"ios",format:"ipa",error:`iOS build requires Xcode and additional setup. Use 'stx init:ios ${X}' to create an iOS project.`}}async function XX(U,X,$,q,Y,J){return{success:!1,target:"android",format:"apk",error:`Android build requires Android SDK and additional setup. Use 'stx init:android ${X}' to create an Android project.`}}async function $X(){let U=[Z(process.cwd(),"../../craft/packages/zig/zig-out/bin/craft-minimal"),Z(process.cwd(),"../craft/packages/zig/zig-out/bin/craft-minimal"),Z(XU(),"Code/craft/packages/zig/zig-out/bin/craft-minimal"),"/usr/local/bin/craft","/usr/bin/craft",Z(XU(),".local/bin/craft"),Z(process.env.LOCALAPPDATA||"","craft","craft.exe"),Z(process.env.PROGRAMFILES||"","craft","craft.exe")];for(let X of U)if(await Bun.file(X).exists())return X;try{let $=aU("which craft 2>/dev/null || where craft 2>nul",{encoding:"utf-8"}).trim().split(`
1538
+ `)[0];if($&&await Bun.file($).exists())return $}catch{}return null}function T(){switch(oU()){case"darwin":return"macos";case"win32":return"windows";default:return"linux"}}function qX(U){switch(U){case"macos":return"app";case"windows":return"zip";case"linux":return"appimage";case"ios":return"ipa";case"android":return"apk";default:return"app"}}async function JX(U,X,$){return new Promise((q)=>{let Y=x("hdiutil",["create","-volname",$,"-srcfolder",U,"-ov","-format","UDZO",X]);Y.on("close",(J)=>{if(J===0)q({success:!0});else q({success:!1,error:`hdiutil exited with code ${J}`})}),Y.on("error",(J)=>{q({success:!1,error:J.message})})})}async function YX(U,X){return new Promise(($)=>{let q=x("zip",["-r",X,"."],{cwd:U});q.on("close",(Y)=>{if(Y===0)$({success:!0});else $({success:!1,error:`zip exited with code ${Y}`})}),q.on("error",(Y)=>{$({success:!1,error:Y.message})})})}async function QX(U,X,$,q,Y){return new Promise((J)=>{try{let G=Z(qU(),`stx-deb-${Date.now()}`),Q=Z(G,"DEBIAN"),K=Z(G,"usr","bin"),W=Z(G,"usr","share","applications"),_=Z(G,"usr","share",$.toLowerCase());O(Q,{recursive:!0}),O(K,{recursive:!0}),O(W,{recursive:!0}),O(_,{recursive:!0});let F=E("fs").readdirSync(U);for(let A of F)b(Z(U,A),Z(_,A));let w=`#!/bin/bash
1539
+ exec /usr/share/${$.toLowerCase()}/${$.toLowerCase()} "$@"`;E("fs").writeFileSync(Z(K,$.toLowerCase()),w),V(Z(K,$.toLowerCase()),493);let L=`Package: ${$.toLowerCase()}
1534
1540
  Version: ${q}
1535
1541
  Section: utils
1536
1542
  Priority: optional
@@ -1538,16 +1544,16 @@ Architecture: amd64
1538
1544
  Depends: libgtk-3-0, libwebkit2gtk-4.0-37
1539
1545
  Maintainer: ${Y.author||"Unknown"}
1540
1546
  Description: ${Y.description||$}
1541
- `;E(Z(Q,"control"),B);let H=C("dpkg-deb",["--build",G,X]);H.on("close",(O)=>{if(I("fs").rmSync(G,{recursive:!0,force:!0}),O===0)J({success:!0});else J({success:!1,error:`dpkg-deb exited with code ${O}`})}),H.on("error",(O)=>{I("fs").rmSync(G,{recursive:!0,force:!0}),J({success:!1,error:O.message})})}catch(G){J({success:!1,error:G.message})}})}async function WX(U,X,$,q){return new Promise((Y)=>{try{let J=Z(JU(),`stx-appimage-${Date.now()}`),G=Z(J,`${$}.AppDir`),Q=Z(G,"usr"),K=Z(Q,"bin"),W=Z(Q,"share");V(K,{recursive:!0}),V(W,{recursive:!0});let _=Z(W,$.toLowerCase());V(_,{recursive:!0});let L=I("fs").readdirSync(U);for(let w of L)k(Z(U,w),Z(_,w));let A=`#!/bin/bash
1547
+ `;E("fs").writeFileSync(Z(Q,"control"),L);let B=x("dpkg-deb",["--build",G,X]);B.on("close",(A)=>{if(E("fs").rmSync(G,{recursive:!0,force:!0}),A===0)J({success:!0});else J({success:!1,error:`dpkg-deb exited with code ${A}`})}),B.on("error",(A)=>{E("fs").rmSync(G,{recursive:!0,force:!0}),J({success:!1,error:A.message})})}catch(G){J({success:!1,error:G.message})}})}async function GX(U,X,$,q){return new Promise((Y)=>{try{let J=Z(qU(),`stx-appimage-${Date.now()}`),G=Z(J,`${$}.AppDir`),Q=Z(G,"usr"),K=Z(Q,"bin"),W=Z(Q,"share");O(K,{recursive:!0}),O(W,{recursive:!0});let _=Z(W,$.toLowerCase());O(_,{recursive:!0});let F=E("fs").readdirSync(U);for(let H of F)b(Z(U,H),Z(_,H));let w=`#!/bin/bash
1542
1548
  SELF=$(readlink -f "$0")
1543
1549
  HERE=\${SELF%/*}
1544
1550
  export PATH="\${HERE}/usr/bin:\${PATH}"
1545
1551
  exec "\${HERE}/usr/share/${$.toLowerCase()}/${$.toLowerCase()}" "$@"
1546
- `;E(Z(G,"AppRun"),A),F(Z(G,"AppRun"),493);let B=`[Desktop Entry]
1552
+ `;E("fs").writeFileSync(Z(G,"AppRun"),w),V(Z(G,"AppRun"),493);let L=`[Desktop Entry]
1547
1553
  Type=Application
1548
1554
  Name=${$}
1549
1555
  Exec=${$.toLowerCase()}
1550
1556
  Terminal=false
1551
1557
  Categories=Utility;
1552
1558
  Icon=${$.toLowerCase()}
1553
- `;E(Z(G,`${$.toLowerCase()}.desktop`),B);let H=Buffer.from([137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1,0,0,0,1,8,2,0,0,0,144,119,83,222,0,0,0,12,73,68,65,84,8,215,99,248,255,255,63,0,5,254,2,254,220,204,89,231,0,0,0,0,73,69,78,68,174,66,96,130]);if(E(Z(G,`${$.toLowerCase()}.png`),H),q.icon&&M(q.icon))k(q.icon,Z(G,`${$.toLowerCase()}.png`));let O=C("appimagetool",[G,X],{env:{...process.env,ARCH:"x86_64"}});O.on("close",(w)=>{if(I("fs").rmSync(J,{recursive:!0,force:!0}),w===0)F(X,493),Y({success:!0});else Y({success:!1,error:`appimagetool exited with code ${w}. Install from https://appimage.github.io/appimagetool/`})}),O.on("error",(w)=>{I("fs").rmSync(J,{recursive:!0,force:!0}),Y({success:!1,error:`appimagetool not found: ${w.message}`})})}catch(J){Y({success:!1,error:J.message})}})}function vX(){return[P()]}function uX(U){switch(U){case"macos":return["app","dmg","pkg"];case"windows":return["app","zip","msi"];case"linux":return["app","deb","rpm","appimage"];case"ios":return["ipa"];case"android":return["apk"];default:return["app"]}}export{IX as renderSSR,VX as registerCraftComponent,AX as processCraftDirective,a as processCraftComponents,RX as prerenderForCraft,LX as isCraftEnvironment,h as injectCraftBridge,bX as getSSRCacheStats,wX as getCraftComponents,vX as getAvailableTargets,uX as getAvailableFormats,MX as generateCraftOptimizations,u as generateCraftBridgeScript,EX as createHotReloadServer,OX as compileToNative,PU as compileTemplate,pU as clearTemplateCache,iU as clearRenderCache,zX as clearAllCaches,NX as buildNative,QU as NATIVE_COMPONENTS,i as CRAFT_COMPONENT_STYLES,N as CRAFT_COMPONENTS,_X as CRAFT_BRIDGE_SCRIPT};
1559
+ `;E("fs").writeFileSync(Z(G,`${$.toLowerCase()}.desktop`),L);let B=Buffer.from([137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1,0,0,0,1,8,2,0,0,0,144,119,83,222,0,0,0,12,73,68,65,84,8,215,99,248,255,255,63,0,5,254,2,254,220,204,89,231,0,0,0,0,73,69,78,68,174,66,96,130]);if(E("fs").writeFileSync(Z(G,`${$.toLowerCase()}.png`),B),q.icon&&$U(q.icon))b(q.icon,Z(G,`${$.toLowerCase()}.png`));let A=x("appimagetool",[G,X],{env:{...process.env,ARCH:"x86_64"}});A.on("close",(H)=>{if(E("fs").rmSync(J,{recursive:!0,force:!0}),H===0)V(X,493),Y({success:!0});else Y({success:!1,error:`appimagetool exited with code ${H}. Install from https://appimage.github.io/appimagetool/`})}),A.on("error",(H)=>{E("fs").rmSync(J,{recursive:!0,force:!0}),Y({success:!1,error:`appimagetool not found: ${H.message}`})})}catch(J){Y({success:!1,error:J.message})}})}function DX(){return[T()]}function NX(U){switch(U){case"macos":return["app","dmg","pkg"];case"windows":return["app","zip","msi"];case"linux":return["app","deb","rpm","appimage"];case"ios":return["ipa"];case"android":return["apk"];default:return["app"]}}export{HX as renderSSR,BX as registerCraftComponent,_X as processCraftDirective,i as processCraftComponents,IX as prerenderForCraft,ZX as isCraftEnvironment,v as injectCraftBridge,RX as getSSRCacheStats,OX as getCraftComponents,DX as getAvailableTargets,NX as getAvailableFormats,VX as generateCraftOptimizations,N as generateCraftBridgeScript,LX as createHotReloadServer,wX as compileToNative,xU as compileTemplate,rU as clearTemplateCache,iU as clearRenderCache,MX as clearAllCaches,yX as buildNative,YU as NATIVE_COMPONENTS,r as CRAFT_COMPONENT_STYLES,y as CRAFT_COMPONENTS,WX as CRAFT_BRIDGE_SCRIPT};
@@ -17,6 +17,7 @@ export declare function deploy(config?: DeployConfig): Promise<DeployResult>;
17
17
  /**
18
18
  * Initialize Netlify configuration for a project
19
19
  */
20
+ // eslint-disable-next-line pickier/no-unused-vars
20
21
  export declare function initNetlify(config?: InitConfig): Promise<{
21
22
  configPath: string
22
23
  siteId?: string
@@ -7,9 +7,6 @@ export declare function loadCrosswind(): Promise<CrosswindModule | null>;
7
7
  * Reset the Crosswind module cache (useful for testing)
8
8
  */
9
9
  export declare function resetCrosswindCache(): void;
10
- /**
11
- * Load crosswind config from the working directory
12
- */
13
10
  export declare function loadCrosswindConfig(cwd: string): Promise<CrosswindConfig | null>;
14
11
  /**
15
12
  * Build Crosswind CSS using the build() API
@@ -31,12 +28,12 @@ export declare function extractClassNames(htmlContent: string): Set<string>;
31
28
  /**
32
29
  * Extract utility classes from HTML content and generate CSS using Crosswind
33
30
  */
34
- export declare function generateCrosswindCSS(htmlContent: string): Promise<string>;
31
+ export declare function generateCrosswindCSS(htmlContent: string, appDir?: string): Promise<string>;
35
32
  /**
36
33
  * Inject generated CSS into HTML content
37
34
  * Tries to inject before </head>, falls back to <body> or prepends
38
35
  */
39
- export declare function injectCrosswindCSS(htmlContent: string): Promise<string>;
36
+ export declare function injectCrosswindCSS(htmlContent: string, appDir?: string): Promise<string>;
40
37
  // Type for Crosswind module
41
38
  declare interface CrosswindModule {
42
39
  CSSGenerator: new (config: CrosswindConfig) => CSSGenerator
@@ -1,4 +1,3 @@
1
- import type { SidebarConfig } from '@stacksjs/desktop';
2
1
  /**
3
2
  * Open a native window for development
4
3
  * Uses the desktop package to create a webview window
@@ -25,6 +24,25 @@ export declare function extractSidebarConfig(templateContent: string): SidebarCo
25
24
  * Default configuration for the native window
26
25
  */
27
26
  export declare const DEFAULT_NATIVE_WINDOW_CONFIG: Required<Omit<NativeWindowConfig, 'sidebarConfig'>> & { sidebarConfig?: SidebarConfig };
27
+ /**
28
+ * Native Window Module
29
+ * Handles opening development windows using the desktop package.
30
+ *
31
+ * All `@stacksjs/desktop` imports are lazy: the package is only loaded when
32
+ * the user actually asks for a native window (`--native`). This keeps the
33
+ * CLI runnable even if `@stacksjs/desktop` isn't built or installed —
34
+ * previously a failed import crashed every `stx dev` invocation with
35
+ * "Cannot find module '@stacksjs/desktop'".
36
+ */
37
+ // Local type-only mirror of the one exported by @stacksjs/desktop.
38
+ // Kept minimal — stx only reads these fields. If the real type grows, the
39
+ // resolved value is still passed through verbatim to openDevWindow().
40
+ export declare interface SidebarConfig {
41
+ sections: Array<{
42
+ title?: string
43
+ items?: Array<{ id: string, label: string, icon?: string, badge?: string | number }>
44
+ }>
45
+ }
28
46
  /**
29
47
  * Configuration for the native development window
30
48
  */
@@ -0,0 +1,15 @@
1
+ import type { DevServerOptions } from './types';
2
+ /**
3
+ * Serve a full STX application with file-based routing
4
+ *
5
+ * Directory structure:
6
+ * pages/
7
+ * index.stx → /
8
+ * about.stx → /about
9
+ * chat/
10
+ * index.stx → /chat
11
+ * [id].stx → /chat/:id (dynamic route)
12
+ * components/ → Shared components
13
+ * public/ → Static assets
14
+ */
15
+ export declare function serveApp(appDir?: string, options?: DevServerOptions): Promise<boolean>;
@@ -0,0 +1,3 @@
1
+ import type { DevServerOptions } from './types';
2
+ // Build and serve a specific stx file
3
+ export declare function serveStxFile(filePath: string, options?: DevServerOptions): Promise<boolean>;
@@ -0,0 +1,3 @@
1
+ import type { DevServerOptions } from './types';
2
+ // Serve a Markdown file directly
3
+ export declare function serveMarkdownFile(filePath: string, options?: DevServerOptions): Promise<boolean>;
@@ -0,0 +1,5 @@
1
+ import type { DevServerOptions } from './types';
2
+ // Helper function to find the common directory for multiple paths
3
+ export declare function findCommonDir(paths: string[]): string;
4
+ // Build and serve multiple files (stx and Markdown)
5
+ export declare function serveMultipleStxFiles(filePaths: string[], options?: DevServerOptions): Promise<boolean>;
@@ -80,8 +80,10 @@ export type WatchEventType = 'change' | 'rename' | 'delete' | 'add';
80
80
  /**
81
81
  * File watcher callback
82
82
  */
83
+ // eslint-disable-next-line pickier/no-unused-vars
83
84
  export type WatchCallback = (eventType: WatchEventType, filename: string) => void;
84
85
  /**
85
86
  * Route handler function
86
87
  */
88
+ // eslint-disable-next-line pickier/no-unused-vars
87
89
  export type RouteHandler = (request: Request) => Promise<Response> | Response;
@@ -1,40 +1,6 @@
1
- import type { SyntaxHighlightTheme } from './types';
2
- // Build and serve a specific stx file
3
- export declare function serveStxFile(filePath: string, options?: DevServerOptions): Promise<boolean>;
4
- // Build and serve multiple files (stx and Markdown)
5
- export declare function serveMultipleStxFiles(filePaths: string[], options?: DevServerOptions): Promise<boolean>;
6
- /**
7
- * Serve a full STX application with file-based routing
8
- *
9
- * Directory structure:
10
- * pages/
11
- * index.stx → /
12
- * about.stx → /about
13
- * chat/
14
- * index.stx → /chat
15
- * [id].stx → /chat/:id (dynamic route)
16
- * components/ → Shared components
17
- * public/ → Static assets
18
- */
19
- export declare function serveApp(appDir?: string, options?: DevServerOptions): Promise<boolean>;
20
- // NOTE: Crosswind CSS, theme selector, port utils, and native window functions
21
- // have been extracted to dev-server/ modules for better organization
22
- // Define types for dev server options
23
- export declare interface DevServerOptions {
24
- port?: number
25
- watch?: boolean
26
- native?: boolean
27
- stxOptions?: any
28
- markdown?: {
29
- syntaxHighlighting?: {
30
- serverSide?: boolean
31
- enabled?: boolean
32
- defaultTheme?: SyntaxHighlightTheme
33
- highlightUnknownLanguages?: boolean
34
- additionalThemes?: SyntaxHighlightTheme[]
35
- }
36
- }
37
- cache?: boolean
38
- hotReload?: boolean
39
- hmrPort?: number
40
- }
1
+ // Re-export all serve functions from focused modules
2
+ export type { DevServerOptions } from './dev-server/types';
3
+ export { serveMarkdownFile } from './dev-server/serve-markdown';
4
+ export { serveStxFile } from './dev-server/serve-file';
5
+ export { serveMultipleStxFiles, findCommonDir } from './dev-server/serve-multi';
6
+ export { serveApp } from './dev-server/serve-app';
@@ -53,6 +53,7 @@ export declare function measurePerformance<T>(name: string, fn: () => T, compone
53
53
  * Measure async execution time.
54
54
  */
55
55
  export declare function measurePerformanceAsync<T>(name: string, fn: () => Promise<T>, componentId?: string): Promise<T>;
56
+ /* eslint-disable no-console, prefer-const, style/max-statements-per-line */
56
57
  /**
57
58
  * STX DevTools Integration
58
59
  *
@@ -54,7 +54,7 @@ export declare function defineDirective<P extends DirectiveParams = DirectivePar
54
54
  /**
55
55
  * Define a client-only directive.
56
56
  */
57
- export declare function defineClientDirective<T = unknown>(name: string, definition: ClientDirectiveDefinition<T> | ((el: HTMLElement, binding: DirectiveBinding<T>) => void)): ClientDirectiveDefinition<T>;
57
+ export declare function defineClientDirective<T = unknown>(name: string): ClientDirectiveDefinition<T>;
58
58
  /**
59
59
  * Create common built-in directives.
60
60
  */