@stacksjs/stx 0.2.10 → 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
@@ -216,10 +216,43 @@ export declare interface StrictModeConfig {
216
216
  failOnViolation?: boolean
217
217
  allowPatterns?: string[]
218
218
  }
219
+ /**
220
+ * Real-time broadcasting configuration.
221
+ *
222
+ * When enabled, stx starts a ts-broadcasting WebSocket server
223
+ * alongside the dev server so pages can receive push events.
224
+ */
225
+ export declare interface BroadcastingConfig {
226
+ enabled?: boolean
227
+ driver?: 'bun' | 'reverb' | 'pusher' | 'ably' | 'log' | 'null'
228
+ host?: string
229
+ port?: number
230
+ scheme?: 'ws' | 'wss'
231
+ verbose?: boolean
232
+ }
233
+ /**
234
+ * App head configuration — auto-generates the document shell.
235
+ * No .stx file needs to write <!DOCTYPE>, <html>, <head>, or <body>.
236
+ */
237
+ export declare interface AppHeadConfig {
238
+ title?: string
239
+ lang?: string
240
+ meta?: Array<Record<string, string>>
241
+ link?: Array<Record<string, string>>
242
+ script?: Array<{ src?: string, content?: string, [key: string]: any }>
243
+ headRaw?: string
244
+ bodyClass?: string
245
+ bodyAttrs?: Record<string, string>
246
+ }
219
247
  /**
220
248
  * stx configuration options
221
249
  */
222
250
  export declare interface StxConfig {
251
+ app?: {
252
+ head?: AppHeadConfig
253
+ }
254
+ root?: string
255
+ pagesDir?: string
223
256
  templatesDir?: string
224
257
  defaultTitle?: string
225
258
  defaultDescription?: string
@@ -232,7 +265,13 @@ export declare interface StxConfig {
232
265
  partialsDir: string
233
266
  componentsDir: string
234
267
  layoutsDir?: string
268
+ storesDir?: string
235
269
  defaultLayout?: string
270
+ plugins?: Array<string | [string, Record<string, any>]>
271
+ publicDir?: string
272
+ envFile?: string | boolean
273
+ envPrefix?: string
274
+ css?: string | { config?: string, content?: string[], preflight?: boolean, minify?: boolean }
236
275
  debug: boolean
237
276
  cachePath: string
238
277
  customDirectives?: CustomDirective[]
@@ -261,6 +300,29 @@ export declare interface StxConfig {
261
300
  build?: Partial<BuildConfig>
262
301
  media?: Partial<MediaConfig>
263
302
  strict?: boolean | StrictModeConfig
303
+ buildMode?: 'compile' | 'serve'
304
+ autoShell?: boolean
305
+ outputDir?: string
306
+ shell?: string | false
307
+ broadcasting?: Partial<BroadcastingConfig>
308
+ apiRoutes?: Record<string, (request: Request) => Response | Promise<Response>>
309
+ router?: {
310
+ enabled?: boolean
311
+ container?: string
312
+ linkSelector?: string
313
+ viewTransitions?: boolean
314
+ viewTransitionDuration?: number
315
+ viewTransitionEasing?: string
316
+ scrollToTop?: boolean
317
+ prefetch?: boolean
318
+ cache?: boolean
319
+ cacheTTL?: number
320
+ skipSelectors?: string
321
+ viewTransitionCSS?: Record<string, string>
322
+ progressColor?: string
323
+ progressHeight?: string
324
+ }
325
+ apiRouter?: { handleRequest: (request: Request) => Response | Promise<Response> }
264
326
  }
265
327
  /**
266
328
  * SSG Build configuration for static site generation
@@ -36,6 +36,7 @@ export declare function getPositionInfo(template: string, position: number): { l
36
36
  * @param params - Parameters passed to the directive
37
37
  * @returns Validation errors, if any
38
38
  */
39
+ // eslint-disable-next-line pickier/no-unused-vars
39
40
  export declare function validateDirective(directiveName: string, content: string, params: string[]): TemplateValidationError[];
40
41
  /**
41
42
  * Check if a template has any directives
@@ -19,7 +19,7 @@ export declare function extractVariables(scriptContent: string, context: Record<
19
19
  * @param scriptContent - ES module style script content
20
20
  * @returns CommonJS compatible script
21
21
  */
22
- export declare function convertToCommonJS(scriptContent: string): string;
22
+ export declare function convertToCommonJS(scriptContent: string, filePath?: string): string;
23
23
  /**
24
24
  * Extract script content from an HTML template
25
25
  *
@@ -168,4 +168,5 @@ export declare function clearComposers(): void;
168
168
  * }
169
169
  * ```
170
170
  */
171
+ // eslint-disable-next-line pickier/no-unused-vars
171
172
  export type ViewComposerCallback = (context: Record<string, any>, filePath: string) => void | Promise<void>;
@@ -28,6 +28,7 @@ export declare function processInfiniteListDirectives(template: string, context?
28
28
  * Process @virtualGrid directives for grid virtualization
29
29
  */
30
30
  export declare function processVirtualGridDirectives(template: string, context?: Record<string, unknown>, _filePath?: string): string;
31
+ /* eslint-disable prefer-const, style/max-statements-per-line, no-super-linear-backtracking, regexp/no-unused-capturing-group */
31
32
  /**
32
33
  * Virtual Scrolling Module
33
34
  *
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import B from"fs";import $ from"path";import k from"crypto";var V=[{name:"mobile",width:375,height:667,isMobile:!0,hasTouch:!0},{name:"tablet",width:768,height:1024,isMobile:!0,hasTouch:!0},{name:"desktop",width:1280,height:800,isMobile:!1,hasTouch:!1},{name:"wide",width:1920,height:1080,isMobile:!1,hasTouch:!1}];function J(N={}){let Y={snapshotDir:N.snapshotDir||"__snapshots__",screenshotDir:N.screenshotDir||"__screenshots__",updateSnapshots:N.updateSnapshots||process.env.UPDATE_SNAPSHOTS==="true",threshold:N.threshold??0.01,viewports:N.viewports||V,generateDiff:N.generateDiff??!0,diffDir:N.diffDir||"__diffs__",compare:N.compare||b,ci:N.ci??process.env.CI==="true",retries:N.retries??(N.ci?3:1)};return{async snapshot(M,X){let q=$.join(Y.snapshotDir,`${X}.html`),G=C(M),Q=K(G);if(B.existsSync(q)){let W=await Bun.file(q).text(),Z=K(C(W));if(Q===Z)return{passed:!0,snapshotPath:q,message:"Snapshot matches"};if(Y.updateSnapshots)return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"Snapshot updated"};let F=$.join(Y.diffDir,`${X}.actual.html`),U=$.join(Y.diffDir,`${X}.diff.html`);return await B.promises.mkdir(Y.diffDir,{recursive:!0}),await Bun.write(F,G),await Bun.write(U,I(W,G)),{passed:!1,snapshotPath:q,actualPath:F,diffPath:U,message:"Snapshot does not match"}}return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"New snapshot created"}},async snapshotJson(M,X){let q=$.join(Y.snapshotDir,`${X}.json`),G=JSON.stringify(M,null,2);if(B.existsSync(q)){let Q=await Bun.file(q).text();if(G===Q)return{passed:!0,snapshotPath:q};if(Y.updateSnapshots)return await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"Snapshot updated"};return{passed:!1,snapshotPath:q,message:`JSON snapshot mismatch:
3
- ${z(Q,G)}`}}return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"New snapshot created"}},matchInlineSnapshot(M,X){let q=C(M);if(X===void 0)return{passed:!0,expected:q};let G=C(X);return{passed:q===G,expected:q}},getConfig(){return Y}}}function D(N={}){let Y=J(N),M=Y.getConfig();return{async compareScreenshots(X,q,G="desktop"){let Q=$.join(M.screenshotDir,G,`${X}.png`),W=$.join(M.diffDir,G,`${X}.actual.png`),Z=$.join(M.diffDir,G,`${X}.diff.png`);if(B.existsSync(Q)){let F=await Bun.file(Q).arrayBuffer(),U=Buffer.from(F),_=await M.compare(q,U);if(_.match||_.diffPercentage<=M.threshold)return{viewport:G,passed:!0,baselinePath:Q};if(M.updateSnapshots)return await B.promises.mkdir($.dirname(Q),{recursive:!0}),await Bun.write(Q,q),{viewport:G,passed:!0,baselinePath:Q};if(await B.promises.mkdir($.dirname(W),{recursive:!0}),await Bun.write(W,q),_.diffImage&&M.generateDiff)await Bun.write(Z,_.diffImage);return{viewport:G,passed:!1,baselinePath:Q,actualPath:W,diffPath:M.generateDiff?Z:void 0,diffPercentage:_.diffPercentage}}return await B.promises.mkdir($.dirname(Q),{recursive:!0}),await Bun.write(Q,q),{viewport:G,passed:!0,baselinePath:Q}},async testViewports(X,q,G=M.viewports){let Q=[];for(let W of G){let Z=null;for(let F=0;F<M.retries;F++)try{let U=await q(W),_=await this.compareScreenshots(X,U,W.name);Q.push(_),Z=null;break}catch(U){if(Z=U,F<M.retries-1)await new Promise((_)=>setTimeout(_,100*(F+1)))}if(Z)Q.push({viewport:W.name,passed:!1,baselinePath:"",diffPercentage:100})}return Q},getSnapshotTester(){return Y}}}function L(N={}){let M=D(N).getSnapshotTester(),X=new Map;return{addStory(q){X.set(`${q.component}/${q.name}`,q)},addStories(q){for(let G of q)this.addStory(G)},getStories(){return Array.from(X.values())},getStoriesForComponent(q){return Array.from(X.values()).filter((G)=>G.component===q)},async testStory(q){let G=X.get(q);if(!G)return{name:q,passed:!1,duration:0,snapshots:[],screenshots:[],errors:[Error(`Story not found: ${q}`)]};let Q=Date.now(),W={name:q,passed:!0,duration:0,snapshots:[],screenshots:[],errors:[]};try{let Z=await G.render(),F=await M.snapshot(Z,q.replace(/\//g,"-"));if(W.snapshots.push(F),!F.passed)W.passed=!1}catch(Z){W.passed=!1,W.errors.push(Z)}return W.duration=Date.now()-Q,W},async testAllStories(){let q=[];for(let G of X.keys()){let Q=await this.testStory(G);q.push(Q)}return q},async generateStoryIndex(){let q={};for(let G of X.values()){if(!q[G.component])q[G.component]=[];q[G.component].push({name:G.name,args:G.args})}return JSON.stringify(q,null,2)}}}async function S(N,Y={}){let M={outputDir:Y.outputDir||"visual-test-report",format:Y.format||"html",title:Y.title||"Visual Test Report",includeScreenshots:Y.includeScreenshots??!0};await B.promises.mkdir(M.outputDir,{recursive:!0});let X=N.length,q=N.filter((F)=>F.passed).length,G=X-q,Q=N.reduce((F,U)=>F+U.duration,0);if(M.format==="json"){let F={title:M.title,summary:{total:X,passed:q,failed:G,duration:Q},results:N,generatedAt:new Date().toISOString()},U=$.join(M.outputDir,"report.json");return await Bun.write(U,JSON.stringify(F,null,2)),U}if(M.format==="markdown"){let F=`# ${M.title}
2
+ import B from"fs";import $ from"path";import k from"crypto";var V=[{name:"mobile",width:375,height:667,isMobile:!0,hasTouch:!0},{name:"tablet",width:768,height:1024,isMobile:!0,hasTouch:!0},{name:"desktop",width:1280,height:800,isMobile:!1,hasTouch:!1},{name:"wide",width:1920,height:1080,isMobile:!1,hasTouch:!1}];function J(N={}){let Y={snapshotDir:N.snapshotDir||"__snapshots__",screenshotDir:N.screenshotDir||"__screenshots__",updateSnapshots:N.updateSnapshots||process.env.UPDATE_SNAPSHOTS==="true",threshold:N.threshold??0.01,viewports:N.viewports||V,generateDiff:N.generateDiff??!0,diffDir:N.diffDir||"__diffs__",compare:N.compare||b,ci:N.ci??process.env.CI==="true",retries:N.retries??(N.ci?3:1)};return{async snapshot(M,X){let q=$.join(Y.snapshotDir,`${X}.html`),G=C(M),Q=K(G);if(await Bun.file(q).exists()){let W=await Bun.file(q).text(),Z=K(C(W));if(Q===Z)return{passed:!0,snapshotPath:q,message:"Snapshot matches"};if(Y.updateSnapshots)return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"Snapshot updated"};let F=$.join(Y.diffDir,`${X}.actual.html`),U=$.join(Y.diffDir,`${X}.diff.html`);return await B.promises.mkdir(Y.diffDir,{recursive:!0}),await Bun.write(F,G),await Bun.write(U,I(W,G)),{passed:!1,snapshotPath:q,actualPath:F,diffPath:U,message:"Snapshot does not match"}}return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"New snapshot created"}},async snapshotJson(M,X){let q=$.join(Y.snapshotDir,`${X}.json`),G=JSON.stringify(M,null,2);if(await Bun.file(q).exists()){let Q=await Bun.file(q).text();if(G===Q)return{passed:!0,snapshotPath:q};if(Y.updateSnapshots)return await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"Snapshot updated"};return{passed:!1,snapshotPath:q,message:`JSON snapshot mismatch:
3
+ ${z(Q,G)}`}}return await B.promises.mkdir($.dirname(q),{recursive:!0}),await Bun.write(q,G),{passed:!0,snapshotPath:q,message:"New snapshot created"}},matchInlineSnapshot(M,X){let q=C(M);if(X===void 0)return{passed:!0,expected:q};let G=C(X);return{passed:q===G,expected:q}},getConfig(){return Y}}}function D(N={}){let Y=J(N),M=Y.getConfig();return{async compareScreenshots(X,q,G="desktop"){let Q=$.join(M.screenshotDir,G,`${X}.png`),W=$.join(M.diffDir,G,`${X}.actual.png`),Z=$.join(M.diffDir,G,`${X}.diff.png`);if(await Bun.file(Q).exists()){let F=await Bun.file(Q).arrayBuffer(),U=Buffer.from(F),_=await M.compare(q,U);if(_.match||_.diffPercentage<=M.threshold)return{viewport:G,passed:!0,baselinePath:Q};if(M.updateSnapshots)return await B.promises.mkdir($.dirname(Q),{recursive:!0}),await Bun.write(Q,q),{viewport:G,passed:!0,baselinePath:Q};if(await B.promises.mkdir($.dirname(W),{recursive:!0}),await Bun.write(W,q),_.diffImage&&M.generateDiff)await Bun.write(Z,_.diffImage);return{viewport:G,passed:!1,baselinePath:Q,actualPath:W,diffPath:M.generateDiff?Z:void 0,diffPercentage:_.diffPercentage}}return await B.promises.mkdir($.dirname(Q),{recursive:!0}),await Bun.write(Q,q),{viewport:G,passed:!0,baselinePath:Q}},async testViewports(X,q,G=M.viewports){let Q=[];for(let W of G){let Z=null;for(let F=0;F<M.retries;F++)try{let U=await q(W),_=await this.compareScreenshots(X,U,W.name);Q.push(_),Z=null;break}catch(U){if(Z=U,F<M.retries-1)await new Promise((_)=>setTimeout(_,100*(F+1)))}if(Z)Q.push({viewport:W.name,passed:!1,baselinePath:"",diffPercentage:100})}return Q},getSnapshotTester(){return Y}}}function L(N={}){let M=D(N).getSnapshotTester(),X=new Map;return{addStory(q){X.set(`${q.component}/${q.name}`,q)},addStories(q){for(let G of q)this.addStory(G)},getStories(){return Array.from(X.values())},getStoriesForComponent(q){return Array.from(X.values()).filter((G)=>G.component===q)},async testStory(q){let G=X.get(q);if(!G)return{name:q,passed:!1,duration:0,snapshots:[],screenshots:[],errors:[Error(`Story not found: ${q}`)]};let Q=Date.now(),W={name:q,passed:!0,duration:0,snapshots:[],screenshots:[],errors:[]};try{let Z=await G.render(),F=await M.snapshot(Z,q.replace(/\//g,"-"));if(W.snapshots.push(F),!F.passed)W.passed=!1}catch(Z){W.passed=!1,W.errors.push(Z)}return W.duration=Date.now()-Q,W},async testAllStories(){let q=[];for(let G of X.keys()){let Q=await this.testStory(G);q.push(Q)}return q},async generateStoryIndex(){let q={};for(let G of X.values()){if(!q[G.component])q[G.component]=[];q[G.component].push({name:G.name,args:G.args})}return JSON.stringify(q,null,2)}}}async function S(N,Y={}){let M={outputDir:Y.outputDir||"visual-test-report",format:Y.format||"html",title:Y.title||"Visual Test Report",includeScreenshots:Y.includeScreenshots??!0};await B.promises.mkdir(M.outputDir,{recursive:!0});let X=N.length,q=N.filter((F)=>F.passed).length,G=X-q,Q=N.reduce((F,U)=>F+U.duration,0);if(M.format==="json"){let F={title:M.title,summary:{total:X,passed:q,failed:G,duration:Q},results:N,generatedAt:new Date().toISOString()},U=$.join(M.outputDir,"report.json");return await Bun.write(U,JSON.stringify(F,null,2)),U}if(M.format==="markdown"){let F=`# ${M.title}
4
4
 
5
5
  `;F+=`## Summary
6
6
 
@@ -170,6 +170,7 @@ export declare function generateSFCWebComponent(parsed: ParsedSFCComponent): str
170
170
  * </style>
171
171
  * ```
172
172
  */
173
+ // eslint-disable-next-line pickier/no-unused-vars
173
174
  export declare function webComponentDirectiveHandler(content: string, params: string[], context: Record<string, any>, filePath: string): Promise<string>;
174
175
  /**
175
176
  * Property definition for reactive web components
@@ -1,3 +1,4 @@
1
+ /* eslint-disable prefer-const, style/max-statements-per-line, no-super-linear-backtracking, regexp/no-unused-capturing-group */
1
2
  /**
2
3
  * x-element: Lightweight two-way binding for STX
3
4
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/stx",
3
3
  "type": "module",
4
- "version": "0.2.10",
4
+ "version": "0.2.11",
5
5
  "description": "A performant UI Framework. Powered by Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",
@@ -60,10 +60,73 @@
60
60
  "types": "./dist/bundle-analyzer.d.ts",
61
61
  "import": "./dist/bundle-analyzer.js"
62
62
  },
63
+ "./composables": {
64
+ "bun": "./src/composables/index.ts",
65
+ "types": "./dist/composables/index.d.ts",
66
+ "import": "./dist/composables/index.js"
67
+ },
68
+ "./composables/*": {
69
+ "bun": "./src/composables/*.ts",
70
+ "types": "./dist/composables/*.d.ts",
71
+ "import": "./dist/composables/*.js"
72
+ },
63
73
  "./*": {
64
74
  "import": "./dist/*"
65
75
  }
66
76
  },
77
+ "publishConfig": {
78
+ "exports": {
79
+ ".": {
80
+ "types": "./dist/index.d.ts",
81
+ "import": "./dist/index.js"
82
+ },
83
+ "./jsx-runtime": {
84
+ "types": "./dist/jsx-runtime.d.ts",
85
+ "import": "./dist/jsx-runtime.js"
86
+ },
87
+ "./jsx-dev-runtime": {
88
+ "types": "./dist/jsx-runtime.d.ts",
89
+ "import": "./dist/jsx-runtime.js"
90
+ },
91
+ "./craft": {
92
+ "types": "./dist/craft-entry.d.ts",
93
+ "import": "./dist/craft.js"
94
+ },
95
+ "./database": {
96
+ "types": "./dist/database.d.ts",
97
+ "import": "./dist/database.js"
98
+ },
99
+ "./ssg": {
100
+ "types": "./dist/ssg.d.ts",
101
+ "import": "./dist/ssg.js"
102
+ },
103
+ "./pwa": {
104
+ "types": "./dist/pwa.d.ts",
105
+ "import": "./dist/pwa.js"
106
+ },
107
+ "./visual-testing": {
108
+ "types": "./dist/visual-testing.d.ts",
109
+ "import": "./dist/visual-testing.js"
110
+ },
111
+ "./bundle-analyzer": {
112
+ "types": "./dist/bundle-analyzer.d.ts",
113
+ "import": "./dist/bundle-analyzer.js"
114
+ },
115
+ "./composables": {
116
+ "bun": "./dist/composables/index.js",
117
+ "types": "./dist/composables/index.d.ts",
118
+ "import": "./dist/composables/index.js"
119
+ },
120
+ "./composables/*": {
121
+ "bun": "./dist/composables/*.js",
122
+ "types": "./dist/composables/*.d.ts",
123
+ "import": "./dist/composables/*.js"
124
+ },
125
+ "./*": {
126
+ "import": "./dist/*"
127
+ }
128
+ }
129
+ },
67
130
  "module": "./dist/index.js",
68
131
  "types": "./dist/index.d.ts",
69
132
  "bin": {
@@ -72,7 +135,8 @@
72
135
  "files": [
73
136
  "LICENSE.md",
74
137
  "README.md",
75
- "dist"
138
+ "dist",
139
+ "stx.d.ts"
76
140
  ],
77
141
  "scripts": {
78
142
  "build": "bun run build:css && bun --bun build.ts",
@@ -103,14 +167,15 @@
103
167
  "typecheck": "bun tsc --noEmit"
104
168
  },
105
169
  "dependencies": {
106
- "@cwcss/crosswind": "^0.1.6",
170
+ "@cwcss/crosswind": "^0.2.0",
107
171
  "@stacksjs/clapp": "^0.2.0",
108
- "@stacksjs/desktop": "0.2.10",
109
- "@stacksjs/sanitizer": "0.2.10",
172
+ "@stacksjs/desktop": "0.2.11",
173
+ "@stacksjs/sanitizer": "0.2.11",
110
174
  "@stacksjs/ts-craft": "^0.0.2",
111
- "bun-plugin-stx": "0.2.10",
175
+ "bun-plugin-stx": "0.2.11",
112
176
  "bunfig": "^0.15.6",
113
- "stx-router": "0.2.10",
177
+ "stx-router": "0.2.11",
178
+ "ts-broadcasting": "^0.0.4",
114
179
  "ts-syntax-highlighter": "^0.2.1"
115
180
  }
116
181
  }