@stacksjs/stx 0.2.10 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -11
- package/dist/a11y.d.ts +2 -1
- package/dist/analyzer.d.ts +4 -0
- package/dist/app-shell.d.ts +72 -0
- package/dist/app.d.ts +1 -0
- package/dist/broadcasting.d.ts +77 -0
- package/dist/build-assets.d.ts +32 -0
- package/dist/build-mode-detector.d.ts +26 -0
- package/dist/build.d.ts +31 -0
- package/dist/builtins/icon.d.ts +7 -0
- package/dist/builtins/index.d.ts +21 -0
- package/dist/builtins/stx-image.d.ts +2 -0
- package/dist/builtins/stx-link.d.ts +2 -0
- package/dist/builtins/stx-loading-indicator.d.ts +2 -0
- package/dist/bundle-analyzer/index.d.ts +2 -0
- package/dist/bundle-analyzer.js +20 -20
- package/dist/caching.d.ts +27 -0
- package/dist/cli.js +3942 -2608
- package/dist/client-helpers.d.ts +7 -3
- package/dist/client-script-bundler.d.ts +27 -0
- package/dist/client-script.d.ts +5 -1
- package/dist/client.d.ts +1 -0
- package/dist/component-hmr.d.ts +1 -0
- package/dist/component-processing.d.ts +107 -0
- package/dist/component-registry.d.ts +54 -0
- package/dist/component-renderer.d.ts +18 -0
- package/dist/components/StxImage.stx +12 -0
- package/dist/components/StxLink.stx +18 -8
- package/dist/composables/index.d.ts +7 -0
- package/dist/composables/use-broadcast-channel.d.ts +1 -0
- package/dist/composables/use-channel.d.ts +67 -0
- package/dist/composables/use-intersection-observer.d.ts +2 -0
- package/dist/composables/use-keyboard.d.ts +1 -0
- package/dist/composables/use-mouse.d.ts +1 -0
- package/dist/composables/use-router.d.ts +4 -0
- package/dist/composables/use-websocket.d.ts +1 -0
- package/dist/composables.d.ts +2 -0
- package/dist/composition-api.d.ts +1 -0
- package/dist/computed.d.ts +1 -0
- package/dist/config.d.ts +12 -1
- package/dist/craft-bridge.d.ts +6 -3
- package/dist/craft-components.d.ts +1 -0
- package/dist/craft.js +39 -33
- package/dist/deploy/index.d.ts +1 -0
- package/dist/dev-server/crosswind.d.ts +2 -5
- package/dist/dev-server/native-window.d.ts +19 -1
- package/dist/dev-server/serve-app.d.ts +15 -0
- package/dist/dev-server/serve-file.d.ts +3 -0
- package/dist/dev-server/serve-markdown.d.ts +3 -0
- package/dist/dev-server/serve-multi.d.ts +5 -0
- package/dist/dev-server/types.d.ts +2 -0
- package/dist/dev-server.d.ts +6 -40
- package/dist/devtools.d.ts +1 -0
- package/dist/directive-api.d.ts +1 -1
- package/dist/document-shell.d.ts +33 -0
- package/dist/error-boundaries.d.ts +1 -0
- package/dist/events.d.ts +1 -0
- package/dist/expressions.d.ts +38 -0
- package/dist/forms-validation.d.ts +2 -0
- package/dist/head.d.ts +1 -0
- package/dist/hot-reload.d.ts +1 -0
- package/dist/hydration-runtime.d.ts +1 -0
- package/dist/hydration.d.ts +1 -0
- package/dist/i18n.d.ts +3 -1
- package/dist/image-optimization/build-plugin.d.ts +1 -0
- package/dist/index.d.ts +22 -1
- package/dist/index.js +5571 -4182
- package/dist/inline-assets.d.ts +28 -0
- package/dist/internal-markdown.d.ts +0 -4
- package/dist/jsx-runtime.d.ts +1 -0
- package/dist/keep-alive.d.ts +1 -0
- package/dist/manifest.d.ts +41 -0
- package/dist/markdown.d.ts +1 -0
- package/dist/media/client/blur-up.d.ts +1 -0
- package/dist/media/client/lazy-load.d.ts +1 -0
- package/dist/media/client/upload-handler.d.ts +1 -0
- package/dist/media/shared/cache.d.ts +2 -0
- package/dist/media/video/index.d.ts +1 -0
- package/dist/media/video/processor/thumbnail.d.ts +1 -0
- package/dist/misc-directives.d.ts +49 -0
- package/dist/parser/directive-parser.d.ts +13 -0
- package/dist/performance-utils.d.ts +2 -0
- package/dist/placeholder.d.ts +45 -0
- package/dist/plugin-system.d.ts +32 -2
- package/dist/process.d.ts +11 -1
- package/dist/production-builder.d.ts +42 -0
- package/dist/production-server.d.ts +19 -0
- package/dist/props.d.ts +1 -0
- package/dist/pwa.js +3883 -2679
- package/dist/reactive.d.ts +2 -16
- package/dist/reactivity.d.ts +1 -0
- package/dist/render.d.ts +2 -1
- package/dist/router.d.ts +1 -1
- package/dist/runtime-injection.d.ts +20 -0
- package/dist/runtime.d.ts +2 -2
- package/dist/script-classifier.d.ts +35 -0
- package/dist/script-validation.d.ts +16 -0
- package/dist/server-bindings.d.ts +7 -0
- package/dist/server-components.d.ts +4 -0
- package/dist/signal-processing.d.ts +109 -0
- package/dist/signals-api.d.ts +309 -0
- package/dist/signals.d.ts +2 -309
- package/dist/spa-shell.d.ts +1 -0
- package/dist/ssg.js +3862 -2655
- package/dist/ssr.d.ts +1 -0
- package/dist/state-management.d.ts +27 -0
- package/dist/store-imports.d.ts +24 -0
- package/dist/store-loader.d.ts +16 -0
- package/dist/story/bun-test.d.ts +1 -0
- package/dist/story/compiled-output.d.ts +1 -0
- package/dist/story/interactions.d.ts +1 -0
- package/dist/story/renderer.d.ts +2 -0
- package/dist/story/setup.d.ts +1 -0
- package/dist/story/ui/code-panel.d.ts +1 -0
- package/dist/stx.d.ts +437 -0
- package/dist/style-scoping.d.ts +23 -0
- package/dist/template-compiler.d.ts +31 -0
- package/dist/template-hydrator.d.ts +18 -0
- package/dist/transitions.d.ts +1 -0
- package/dist/types/config-types.d.ts +62 -0
- package/dist/validator.d.ts +1 -0
- package/dist/variable-extractor.d.ts +1 -1
- package/dist/view-composers.d.ts +1 -0
- package/dist/virtual-scrolling.d.ts +1 -0
- package/dist/visual-testing.js +2 -2
- package/dist/web-components.d.ts +1 -0
- package/dist/x-element.d.ts +1 -0
- package/package.json +19 -7
- package/stx.d.ts +437 -0
package/dist/craft.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
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
|
-
}
|
|
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
|
-
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
106
108
|
req.resolve(data.result);
|
|
107
109
|
}
|
|
108
110
|
}
|
|
109
|
-
}
|
|
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
|
|
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
|
-
}
|
|
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
|
-
}
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
373
378
|
req.resolve(data.result);
|
|
374
379
|
}
|
|
375
380
|
}
|
|
376
|
-
}
|
|
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
|
|
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
|
|
540
|
-
`)}function
|
|
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
|
|
543
|
-
`)}return $.get(X.target)||
|
|
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||""}">`}}},
|
|
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
|
|
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
|
|
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,""");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
|
|
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
|
|
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
|
|
1467
|
-
</head>`)}let G=U.name||
|
|
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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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
|
-
${
|
|
1479
|
-
`,
|
|
1480
|
-
exec "${G}" "$@"`;
|
|
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(
|
|
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(
|
|
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());
|
|
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(
|
|
1532
|
-
`)[0];if($&&
|
|
1533
|
-
exec /usr/share/${$.toLowerCase()}/${$.toLowerCase()} "$@"`;E(Z(K,$.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"),
|
|
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"),
|
|
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`),
|
|
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};
|
package/dist/deploy/index.d.ts
CHANGED
|
@@ -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,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;
|
package/dist/dev-server.d.ts
CHANGED
|
@@ -1,40 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
export
|
|
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';
|
package/dist/devtools.d.ts
CHANGED
|
@@ -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
|
*
|
package/dist/directive-api.d.ts
CHANGED
|
@@ -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
|
|
57
|
+
export declare function defineClientDirective<T = unknown>(name: string): ClientDirectiveDefinition<T>;
|
|
58
58
|
/**
|
|
59
59
|
* Create common built-in directives.
|
|
60
60
|
*/
|