@stacksjs/stx 0.2.94 → 0.2.96

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 (614) hide show
  1. package/dist/a11y.js +598 -2
  2. package/dist/analytics.js +159 -2
  3. package/dist/analyzer.js +240 -2
  4. package/dist/animation.js +688 -2
  5. package/dist/app-shell.js +220 -2
  6. package/dist/app.js +79 -2
  7. package/dist/assets.js +155 -2
  8. package/dist/ast.js +630 -2
  9. package/dist/async-components.js +428 -2
  10. package/dist/auth.js +12 -2
  11. package/dist/broadcasting.js +102 -2
  12. package/dist/browser-composables.js +565 -2
  13. package/dist/build-assets.js +29 -2
  14. package/dist/build-mode-detector.js +50 -2
  15. package/dist/build-optimizer.js +433 -2
  16. package/dist/build-views.js +180 -2
  17. package/dist/build.js +33 -2
  18. package/dist/builtins/drawer.js +37 -2
  19. package/dist/builtins/escape.js +3 -2
  20. package/dist/builtins/icon.js +83 -2
  21. package/dist/builtins/index.js +34 -2
  22. package/dist/builtins/modal.js +38 -2
  23. package/dist/builtins/safe-image.js +51 -2
  24. package/dist/builtins/stx-image.js +200 -2
  25. package/dist/builtins/stx-link.js +41 -2
  26. package/dist/builtins/stx-loading-indicator.js +35 -2
  27. package/dist/builtins/suspense.js +24 -2
  28. package/dist/builtins/toast.js +42 -2
  29. package/dist/builtins/tooltip.js +106 -2
  30. package/dist/builtins/transition-group.js +22 -2
  31. package/dist/bundle-analyzer/collector.js +233 -2
  32. package/dist/bundle-analyzer/index.js +82 -2
  33. package/dist/bundle-analyzer/report.js +318 -2
  34. package/dist/bundle-analyzer/treemap.js +594 -2
  35. package/dist/caching.js +131 -2
  36. package/dist/cli.js +11317 -10982
  37. package/dist/client/directive.js +14 -2
  38. package/dist/client/index.js +2 -2
  39. package/dist/client-helpers.js +312 -2
  40. package/dist/client-script-bundler.js +216 -6
  41. package/dist/client-script.js +754 -2
  42. package/dist/client.js +73 -4
  43. package/dist/component-hmr.js +585 -2
  44. package/dist/component-library.d.ts +6 -0
  45. package/dist/component-library.js +683 -0
  46. package/dist/component-processing.js +613 -2
  47. package/dist/component-registry.js +90 -2
  48. package/dist/component-renderer.js +660 -2
  49. package/dist/components.js +213 -2
  50. package/dist/composables/index.js +220 -2
  51. package/dist/composables/use-battery.js +101 -2
  52. package/dist/composables/use-broadcast-channel.js +80 -2
  53. package/dist/composables/use-channel.js +124 -2
  54. package/dist/composables/use-clipboard.js +79 -2
  55. package/dist/composables/use-color-mode.js +131 -2
  56. package/dist/composables/use-cookie.js +86 -2
  57. package/dist/composables/use-device-orientation.js +181 -2
  58. package/dist/composables/use-event-listener.js +27 -2
  59. package/dist/composables/use-event-source.js +166 -2
  60. package/dist/composables/use-eye-dropper.js +142 -2
  61. package/dist/composables/use-fetch.js +223 -2
  62. package/dist/composables/use-fullscreen.js +110 -2
  63. package/dist/composables/use-geolocation.js +101 -2
  64. package/dist/composables/use-idle.js +182 -2
  65. package/dist/composables/use-intersection-observer.js +168 -2
  66. package/dist/composables/use-keyboard.js +224 -2
  67. package/dist/composables/use-media-query.js +62 -2
  68. package/dist/composables/use-meta.js +48 -2
  69. package/dist/composables/use-mouse.js +286 -2
  70. package/dist/composables/use-mutation-observer.js +129 -2
  71. package/dist/composables/use-network.js +85 -2
  72. package/dist/composables/use-notification.js +94 -2
  73. package/dist/composables/use-permissions.js +132 -2
  74. package/dist/composables/use-query.js +0 -1
  75. package/dist/composables/use-resize-observer.js +157 -2
  76. package/dist/composables/use-router.js +51 -2
  77. package/dist/composables/use-share.js +104 -2
  78. package/dist/composables/use-speech.js +294 -2
  79. package/dist/composables/use-storage.js +130 -2
  80. package/dist/composables/use-text-selection.js +205 -4
  81. package/dist/composables/use-timer.js +183 -2
  82. package/dist/composables/use-utilities.js +176 -2
  83. package/dist/composables/use-wake-lock.js +122 -2
  84. package/dist/composables/use-websocket.js +165 -2
  85. package/dist/composables/use-window.js +163 -2
  86. package/dist/composables.js +552 -2
  87. package/dist/composition-api.js +190 -2
  88. package/dist/computed.js +376 -8
  89. package/dist/conditionals.js +599 -2
  90. package/dist/config.js +751 -2
  91. package/dist/craft-bridge.js +432 -2
  92. package/dist/craft-compiler.js +810 -2
  93. package/dist/craft-components.js +945 -2
  94. package/dist/craft-entry.js +5 -2
  95. package/dist/craft-ssr.js +559 -2
  96. package/dist/csp.js +220 -2
  97. package/dist/csrf.js +38 -2
  98. package/dist/custom-directives.js +136 -2
  99. package/dist/defer.js +156 -2
  100. package/dist/deploy/config-generators.js +214 -2
  101. package/dist/deploy/index.js +203 -2
  102. package/dist/deploy/netlify.js +167 -2
  103. package/dist/dev-server/crosswind.js +379 -2
  104. package/dist/dev-server/index.js +7 -2
  105. package/dist/dev-server/keyboard-shortcuts.js +81 -2
  106. package/dist/dev-server/native-window.js +91 -2
  107. package/dist/dev-server/port-utils.js +40 -2
  108. package/dist/dev-server/serve-app.js +682 -7
  109. package/dist/dev-server/serve-file.js +439 -7
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +424 -17
  112. package/dist/dev-server/terminal-colors.js +45 -2
  113. package/dist/dev-server/theme-selector.js +111 -2
  114. package/dist/dev-server/types.js +43 -2
  115. package/dist/dev-server.js +4 -2
  116. package/dist/devtools.js +462 -18
  117. package/dist/directive-api.js +355 -2
  118. package/dist/docs.js +567 -2
  119. package/dist/doctor.js +123 -2
  120. package/dist/document-shell.js +105 -2
  121. package/dist/dynamic-components.js +78 -2
  122. package/dist/edge-runtime.js +539 -2
  123. package/dist/env.js +9 -2
  124. package/dist/error-boundaries.js +62 -12
  125. package/dist/error-handling.js +1 -2
  126. package/dist/errors/codes.js +97 -2
  127. package/dist/errors/formatter.js +196 -2
  128. package/dist/errors/index.js +44 -2
  129. package/dist/errors/logger.js +250 -2
  130. package/dist/errors/sanitizer.js +181 -2
  131. package/dist/errors/types.js +86 -2
  132. package/dist/events.js +382 -2
  133. package/dist/expressions.js +650 -2
  134. package/dist/formatter.js +265 -2
  135. package/dist/forms-validation.js +510 -4
  136. package/dist/forms.js +709 -2
  137. package/dist/head.js +224 -2
  138. package/dist/heatmap.js +566 -2
  139. package/dist/hot-reload.js +367 -2
  140. package/dist/html-masking.js +73 -2
  141. package/dist/hydration-runtime.js +195 -2
  142. package/dist/hydration.js +654 -2
  143. package/dist/i18n.js +633 -2
  144. package/dist/image-optimization/auto-sibling.js +88 -2
  145. package/dist/image-optimization/build-plugin.js +241 -2
  146. package/dist/image-optimization/component.js +244 -2
  147. package/dist/image-optimization/directive.js +203 -2
  148. package/dist/image-optimization/index.js +54 -2
  149. package/dist/image-optimization/processor.js +262 -2
  150. package/dist/image-optimization/serve.js +102 -2
  151. package/dist/includes.js +733 -2
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +134 -2
  154. package/dist/init.js +505 -2
  155. package/dist/inline-assets.js +82 -2
  156. package/dist/interactive.js +383 -2
  157. package/dist/internal-markdown.js +141 -2
  158. package/dist/island-chunking.js +52 -2
  159. package/dist/js-ts.js +57 -2
  160. package/dist/jsx-runtime.js +289 -2
  161. package/dist/keep-alive.js +421 -2
  162. package/dist/lazy-loader.js +245 -2
  163. package/dist/loading-indicator.js +322 -2
  164. package/dist/loops.js +643 -2
  165. package/dist/manifest.js +31 -2
  166. package/dist/markdown.js +68 -2
  167. package/dist/media/client/blur-up.js +217 -2
  168. package/dist/media/client/index.js +53 -2
  169. package/dist/media/client/lazy-load.js +283 -2
  170. package/dist/media/client/upload-handler.js +354 -2
  171. package/dist/media/image/component.js +574 -2
  172. package/dist/media/image/directive.js +160 -2
  173. package/dist/media/image/editing.js +193 -2
  174. package/dist/media/image/index.js +80 -2
  175. package/dist/media/image/placeholder.js +188 -2
  176. package/dist/media/image/processor/cache.js +51 -2
  177. package/dist/media/image/processor/index.js +3 -2
  178. package/dist/media/image/processor/optimizer.js +202 -2
  179. package/dist/media/image/processor/responsive.js +162 -2
  180. package/dist/media/image/srcset.js +194 -2
  181. package/dist/media/index.js +198 -2
  182. package/dist/media/manager/embed.js +253 -2
  183. package/dist/media/protected/component.js +235 -2
  184. package/dist/media/protected/index.js +20 -2
  185. package/dist/media/protected/signature.js +205 -2
  186. package/dist/media/shared/cache.js +132 -2
  187. package/dist/media/shared/hash.js +35 -2
  188. package/dist/media/shared/index.js +2 -2
  189. package/dist/media/types.js +0 -1
  190. package/dist/media/upload/component.js +320 -2
  191. package/dist/media/upload/index.js +1 -2
  192. package/dist/media/video/directive.js +142 -2
  193. package/dist/media/video/index.js +583 -2
  194. package/dist/media/video/processor/cache.js +52 -2
  195. package/dist/media/video/processor/index.js +4 -2
  196. package/dist/media/video/processor/streaming.js +197 -2
  197. package/dist/media/video/processor/thumbnail.js +134 -2
  198. package/dist/media/video/processor/transcoder.js +283 -2
  199. package/dist/method-spoofing.js +17 -2
  200. package/dist/middleware.js +40 -2
  201. package/dist/misc-directives.js +222 -2
  202. package/dist/native-build.js +511 -2
  203. package/dist/parser/directive-parser.js +239 -2
  204. package/dist/parser/expression-parser.js +358 -2
  205. package/dist/parser/index.js +23 -2
  206. package/dist/parser/tokenizer.js +534 -2
  207. package/dist/partial-hydration.js +427 -2
  208. package/dist/performance-utils.js +430 -2
  209. package/dist/placeholder.js +35 -2
  210. package/dist/plugin-system.js +214 -2
  211. package/dist/plugin.js +173 -2
  212. package/dist/precompiler.js +660 -81
  213. package/dist/process.js +711 -2
  214. package/dist/production-build.js +596 -2
  215. package/dist/production-builder.js +132 -2
  216. package/dist/production-server.js +188 -2
  217. package/dist/props.js +224 -2
  218. package/dist/public-env.js +19 -2
  219. package/dist/pwa/audit.js +255 -2
  220. package/dist/pwa/directives.js +332 -2
  221. package/dist/pwa/icons.js +109 -2
  222. package/dist/pwa/index.js +47 -2
  223. package/dist/pwa/inject.js +102 -2
  224. package/dist/pwa/manifest.js +186 -2
  225. package/dist/pwa/offline.js +259 -2
  226. package/dist/pwa/precache.js +116 -2
  227. package/dist/pwa/service-worker.js +860 -2
  228. package/dist/pwa/workbox-strategies.js +167 -2
  229. package/dist/pwa/workbox.js +382 -2
  230. package/dist/pwa.js +427 -427
  231. package/dist/reactive-bindings.js +266 -2
  232. package/dist/reactive.js +569 -2
  233. package/dist/reactivity.js +559 -2
  234. package/dist/release.js +1 -2
  235. package/dist/render.js +165 -2
  236. package/dist/route-middleware.js +17 -2
  237. package/dist/router.js +9 -2
  238. package/dist/routes.js +14 -2
  239. package/dist/runtime-injection.js +120 -2
  240. package/dist/runtime.js +94 -2
  241. package/dist/safe-evaluator.js +444 -2
  242. package/dist/scaffolding.js +897 -2
  243. package/dist/screenshot.js +87 -2
  244. package/dist/script-classifier.js +32 -2
  245. package/dist/script-validation.js +158 -2
  246. package/dist/seo.js +457 -2
  247. package/dist/serve.js +237 -2
  248. package/dist/server-bindings.js +108 -2
  249. package/dist/server-components.js +338 -11
  250. package/dist/signal-processing.js +946 -2
  251. package/dist/signals-api.js +154 -2
  252. package/dist/signals.js +5287 -2
  253. package/dist/site-builder/build.js +224 -2
  254. package/dist/site-builder/i18n.js +140 -2
  255. package/dist/site-builder/index.js +15 -2
  256. package/dist/site-builder/robots.js +26 -2
  257. package/dist/site-builder/router.js +27 -2
  258. package/dist/site-builder/seo.js +36 -2
  259. package/dist/site-builder/sitemap.js +26 -2
  260. package/dist/site-builder/theme.js +33 -2
  261. package/dist/site-builder/types.js +0 -1
  262. package/dist/slots.js +201 -2
  263. package/dist/source-maps.js +350 -2
  264. package/dist/spa-shell.js +34 -2
  265. package/dist/ssg.js +389 -389
  266. package/dist/ssr.js +355 -2
  267. package/dist/state-management.js +533 -2
  268. package/dist/store-imports.js +13 -2
  269. package/dist/store-loader.js +72 -5
  270. package/dist/stores-client.js +132 -2
  271. package/dist/story/addons.js +261 -2
  272. package/dist/story/analytics.js +235 -2
  273. package/dist/story/auto-stories.js +158 -2
  274. package/dist/story/bookmarks.js +277 -2
  275. package/dist/story/bun-test.js +102 -2
  276. package/dist/story/cli.js +155 -2
  277. package/dist/story/collect/analyzer.js +305 -2
  278. package/dist/story/collect/index.js +27 -2
  279. package/dist/story/collect/parser.js +129 -2
  280. package/dist/story/collect/scanner.js +101 -2
  281. package/dist/story/collect/tree.js +110 -2
  282. package/dist/story/commands/build.js +172 -2
  283. package/dist/story/commands/dev.js +78 -2
  284. package/dist/story/commands/index.js +3 -2
  285. package/dist/story/commands/preview.js +56 -2
  286. package/dist/story/compiled-output.js +151 -2
  287. package/dist/story/composition.js +261 -2
  288. package/dist/story/config-watcher.js +67 -2
  289. package/dist/story/config.js +64 -2
  290. package/dist/story/context.js +27 -2
  291. package/dist/story/controls/index.js +320 -2
  292. package/dist/story/crosswind.js +189 -2
  293. package/dist/story/desktop-preview.js +105 -2
  294. package/dist/story/docs-generator.js +186 -2
  295. package/dist/story/errors.js +239 -2
  296. package/dist/story/figma-export.js +224 -2
  297. package/dist/story/generator.js +165 -2
  298. package/dist/story/hmr.js +131 -2
  299. package/dist/story/hot-swap.js +207 -2
  300. package/dist/story/index.js +49 -2
  301. package/dist/story/interactions.js +225 -2
  302. package/dist/story/keyboard-shortcuts.js +345 -2
  303. package/dist/story/output.js +153 -2
  304. package/dist/story/performance.js +252 -2
  305. package/dist/story/presets.js +289 -2
  306. package/dist/story/props-validation.js +215 -2
  307. package/dist/story/renderer.js +209 -2
  308. package/dist/story/search-index.js +106 -2
  309. package/dist/story/search.js +140 -2
  310. package/dist/story/server.js +965 -2
  311. package/dist/story/setup.js +78 -2
  312. package/dist/story/snapshots.js +170 -2
  313. package/dist/story/testing.js +163 -2
  314. package/dist/story/theme.js +170 -2
  315. package/dist/story/types.js +0 -2
  316. package/dist/story/ui/code-panel.js +175 -2
  317. package/dist/story/ui/controls-panel.js +168 -2
  318. package/dist/story/ui/index.js +4 -2
  319. package/dist/story/ui/navigation.js +250 -2
  320. package/dist/story/ui/preview.js +251 -2
  321. package/dist/story/visual-testing.js +247 -2
  322. package/dist/streaming.js +537 -2
  323. package/dist/strict-lint.js +288 -2
  324. package/dist/style-scoping.js +50 -2
  325. package/dist/suspense.js +398 -2
  326. package/dist/teleport.js +109 -2
  327. package/dist/template-compiler.js +63 -2
  328. package/dist/template-hydrator.js +82 -2
  329. package/dist/template-tag-balance.js +93 -2
  330. package/dist/testing.js +581 -2
  331. package/dist/transitions.js +443 -2
  332. package/dist/type-checker.js +581 -2
  333. package/dist/types/component-types.d.ts +54 -0
  334. package/dist/types/component-types.js +0 -1
  335. package/dist/types/config-types.js +0 -1
  336. package/dist/types/context-types.js +0 -1
  337. package/dist/types/csp-types.js +0 -1
  338. package/dist/types/directive-types.js +3 -2
  339. package/dist/types/index.d.ts +5 -0
  340. package/dist/types/index.js +1 -2
  341. package/dist/types/pwa-types.js +0 -1
  342. package/dist/types.js +1 -2
  343. package/dist/typescript-templates.js +386 -4
  344. package/dist/utils.js +942 -2
  345. package/dist/validator.js +171 -2
  346. package/dist/variable-extractor.js +1094 -2
  347. package/dist/view-composers.js +29 -2
  348. package/dist/virtual-scrolling.js +454 -2
  349. package/dist/visual-editor.js +688 -28
  350. package/dist/vue-template.js +475 -2
  351. package/dist/web-components/css-scoping.js +177 -2
  352. package/dist/web-components/index.js +13 -2
  353. package/dist/web-components/reactive-generator.js +121 -56
  354. package/dist/web-components.js +1447 -2
  355. package/dist/x-element.js +17 -5
  356. package/package.json +6 -7
  357. package/dist/chunk-03c26pjz.js +0 -3
  358. package/dist/chunk-04mvcmcr.js +0 -106
  359. package/dist/chunk-05hgyyqc.js +0 -4
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-0b9w2w1y.js +0 -1
  362. package/dist/chunk-0dz85jrp.js +0 -3
  363. package/dist/chunk-0g4gece6.js +0 -4
  364. package/dist/chunk-0jd0pndq.js +0 -3
  365. package/dist/chunk-0jkwrcwj.js +0 -3
  366. package/dist/chunk-0m9tdm7t.js +0 -71
  367. package/dist/chunk-0qakwen3.js +0 -1
  368. package/dist/chunk-0qnz93q2.js +0 -3
  369. package/dist/chunk-0tatqxj2.js +0 -57
  370. package/dist/chunk-0wdar532.js +0 -102
  371. package/dist/chunk-13yz561y.js +0 -3
  372. package/dist/chunk-174z0cd0.js +0 -3
  373. package/dist/chunk-1mmykse5.js +0 -81
  374. package/dist/chunk-1z2yq9em.js +0 -3
  375. package/dist/chunk-1z5nhbjt.js +0 -90
  376. package/dist/chunk-1zgsgk4b.js +0 -1
  377. package/dist/chunk-25s7bckb.js +0 -171
  378. package/dist/chunk-268adc7r.js +0 -2230
  379. package/dist/chunk-26r6zh3t.js +0 -194
  380. package/dist/chunk-2w3302dh.js +0 -3
  381. package/dist/chunk-2xen423s.js +0 -3
  382. package/dist/chunk-39gm08bn.js +0 -39
  383. package/dist/chunk-3bjtemm6.js +0 -128
  384. package/dist/chunk-3jm3snz8.js +0 -3
  385. package/dist/chunk-3ngm57nt.js +0 -12
  386. package/dist/chunk-3rh7va1z.js +0 -3
  387. package/dist/chunk-3yg9hbmb.js +0 -4
  388. package/dist/chunk-44hd3kab.js +0 -1
  389. package/dist/chunk-46mkpbkk.js +0 -12
  390. package/dist/chunk-48cw2nde.js +0 -2
  391. package/dist/chunk-48r3qe0k.js +0 -3
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4bt81cg3.js +0 -61
  394. package/dist/chunk-4j188175.js +0 -3
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qq8ffke.js +0 -28
  397. package/dist/chunk-50vqeesm.js +0 -142
  398. package/dist/chunk-52agge4n.js +0 -38
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-57p201gb.js +0 -83
  401. package/dist/chunk-5ggw1dyv.js +0 -3
  402. package/dist/chunk-5kt3ay7x.js +0 -10
  403. package/dist/chunk-5p568px4.js +0 -1166
  404. package/dist/chunk-5ppkfyn2.js +0 -3
  405. package/dist/chunk-5q87fgkk.js +0 -3
  406. package/dist/chunk-5qb761h2.js +0 -3
  407. package/dist/chunk-5xvbq2gs.js +0 -30
  408. package/dist/chunk-647849kf.js +0 -34
  409. package/dist/chunk-6b5k6w2q.js +0 -7
  410. package/dist/chunk-6cr3eeh4.js +0 -23
  411. package/dist/chunk-6djgb0hr.js +0 -3
  412. package/dist/chunk-6dqzky7x.js +0 -35
  413. package/dist/chunk-6e4c6g46.js +0 -3
  414. package/dist/chunk-6w03t7h6.js +0 -3
  415. package/dist/chunk-6wn85hn6.js +0 -4
  416. package/dist/chunk-6y4gqs1q.js +0 -169
  417. package/dist/chunk-75rndzbd.js +0 -6
  418. package/dist/chunk-77tga15w.js +0 -3
  419. package/dist/chunk-7a51hkpf.js +0 -3
  420. package/dist/chunk-7b0xdy5h.js +0 -386
  421. package/dist/chunk-7cgmq685.js +0 -33
  422. package/dist/chunk-7dy588as.js +0 -6
  423. package/dist/chunk-7rvh2wwv.js +0 -721
  424. package/dist/chunk-7sm05m0j.js +0 -351
  425. package/dist/chunk-7sqdeqsw.js +0 -1
  426. package/dist/chunk-7xcfy2fn.js +0 -4
  427. package/dist/chunk-82t27pvd.js +0 -5
  428. package/dist/chunk-87kx8byz.js +0 -1115
  429. package/dist/chunk-8fgwhhb8.js +0 -6
  430. package/dist/chunk-8qbax8xn.js +0 -347
  431. package/dist/chunk-91s2hres.js +0 -8
  432. package/dist/chunk-94g3cahw.js +0 -11
  433. package/dist/chunk-957amb71.js +0 -8
  434. package/dist/chunk-95w08s8v.js +0 -3
  435. package/dist/chunk-9agvhp1x.js +0 -93
  436. package/dist/chunk-9tmbrwwx.js +0 -219
  437. package/dist/chunk-9yz5d003.js +0 -51
  438. package/dist/chunk-a3hyn4we.js +0 -79
  439. package/dist/chunk-a69tvya5.js +0 -53
  440. package/dist/chunk-adjcg6wa.js +0 -498
  441. package/dist/chunk-adqh2m9z.js +0 -45
  442. package/dist/chunk-asarebzq.js +0 -292
  443. package/dist/chunk-aw3rp9ac.js +0 -24
  444. package/dist/chunk-b0cyc09a.js +0 -109
  445. package/dist/chunk-b3kkjcdh.js +0 -3
  446. package/dist/chunk-b3prs7y0.js +0 -5
  447. package/dist/chunk-b5zc9y0y.js +0 -90
  448. package/dist/chunk-baa7h4yz.js +0 -3
  449. package/dist/chunk-bgec9r1v.js +0 -5224
  450. package/dist/chunk-bjnjpsgn.js +0 -3
  451. package/dist/chunk-bk8ew8ze.js +0 -24
  452. package/dist/chunk-bn08k7yy.js +0 -3
  453. package/dist/chunk-bpgg59wa.js +0 -3
  454. package/dist/chunk-bwxda6n1.js +0 -3
  455. package/dist/chunk-bykjk6vj.js +0 -4
  456. package/dist/chunk-c53hyw5c.js +0 -477
  457. package/dist/chunk-c7jg8w13.js +0 -3
  458. package/dist/chunk-ca6qd1dx.js +0 -3
  459. package/dist/chunk-cdbwprfv.js +0 -6
  460. package/dist/chunk-ceg2c2q2.js +0 -11
  461. package/dist/chunk-cn409b69.js +0 -3
  462. package/dist/chunk-cn8az1b4.js +0 -1
  463. package/dist/chunk-cp3kwv17.js +0 -8
  464. package/dist/chunk-cpcc11vp.js +0 -5
  465. package/dist/chunk-cr3wbrcr.js +0 -10
  466. package/dist/chunk-cygfdk1n.js +0 -3
  467. package/dist/chunk-cyp4m0vh.js +0 -16
  468. package/dist/chunk-cz25azze.js +0 -4
  469. package/dist/chunk-d77yxcds.js +0 -3
  470. package/dist/chunk-dvfs1h3c.js +0 -117
  471. package/dist/chunk-dyjnn5k8.js +0 -262
  472. package/dist/chunk-dzw95th7.js +0 -3
  473. package/dist/chunk-e0zytzdh.js +0 -179
  474. package/dist/chunk-e53h9qhd.js +0 -84
  475. package/dist/chunk-eds0f8f1.js +0 -3
  476. package/dist/chunk-eh8hact1.js +0 -5
  477. package/dist/chunk-epj957jf.js +0 -4
  478. package/dist/chunk-eqeyaq6g.js +0 -77
  479. package/dist/chunk-fbxt2mrx.js +0 -5
  480. package/dist/chunk-fch9tk1k.js +0 -3
  481. package/dist/chunk-fe7r1mq1.js +0 -9
  482. package/dist/chunk-fhawx87n.js +0 -8
  483. package/dist/chunk-fk51yyrw.js +0 -3
  484. package/dist/chunk-fms20x0n.js +0 -21
  485. package/dist/chunk-fs0qezn5.js +0 -341
  486. package/dist/chunk-fzm3y0r3.js +0 -267
  487. package/dist/chunk-g2hekckm.js +0 -161
  488. package/dist/chunk-g4ps1dj8.js +0 -140
  489. package/dist/chunk-g8b81pzc.js +0 -3
  490. package/dist/chunk-ganag9dm.js +0 -3
  491. package/dist/chunk-gc84b1d2.js +0 -58
  492. package/dist/chunk-gcf5v18y.js +0 -60
  493. package/dist/chunk-ghrx0hn1.js +0 -4
  494. package/dist/chunk-gqpkp459.js +0 -3
  495. package/dist/chunk-h45py5w5.js +0 -2
  496. package/dist/chunk-h5wa62ek.js +0 -145
  497. package/dist/chunk-h82kjdr4.js +0 -83
  498. package/dist/chunk-haecq01c.js +0 -3
  499. package/dist/chunk-hepg894w.js +0 -3
  500. package/dist/chunk-hjdc99kb.js +0 -3
  501. package/dist/chunk-hje9v2zh.js +0 -3
  502. package/dist/chunk-hjv76kcw.js +0 -1
  503. package/dist/chunk-hke99a0v.js +0 -3
  504. package/dist/chunk-hpqr9e3x.js +0 -3
  505. package/dist/chunk-hq5cem49.js +0 -236
  506. package/dist/chunk-hrampcrj.js +0 -3
  507. package/dist/chunk-ht4j68cs.js +0 -3
  508. package/dist/chunk-hxx3za24.js +0 -62
  509. package/dist/chunk-j4s5qwd7.js +0 -4
  510. package/dist/chunk-jbejwejg.js +0 -8
  511. package/dist/chunk-jc0fc4ht.js +0 -11
  512. package/dist/chunk-jcs0ymw7.js +0 -3
  513. package/dist/chunk-jfm69keq.js +0 -231
  514. package/dist/chunk-jfrn43vh.js +0 -2
  515. package/dist/chunk-jjamhxpm.js +0 -139
  516. package/dist/chunk-jjvp4t5w.js +0 -27
  517. package/dist/chunk-jt44av4j.js +0 -3
  518. package/dist/chunk-jt98jhpt.js +0 -10
  519. package/dist/chunk-k8440jxh.js +0 -6
  520. package/dist/chunk-kdxa9epn.js +0 -21
  521. package/dist/chunk-kfd2hf6f.js +0 -3
  522. package/dist/chunk-kgym7ch9.js +0 -8
  523. package/dist/chunk-kh6rfz2v.js +0 -4
  524. package/dist/chunk-kkp6rs2n.js +0 -36
  525. package/dist/chunk-ktkmvaa8.js +0 -1
  526. package/dist/chunk-m59y310j.js +0 -3
  527. package/dist/chunk-mgmyr1b9.js +0 -6
  528. package/dist/chunk-mqwbpamc.js +0 -3
  529. package/dist/chunk-mrehzhxv.js +0 -5
  530. package/dist/chunk-mv03qb75.js +0 -3
  531. package/dist/chunk-mv4fb50w.js +0 -1
  532. package/dist/chunk-mwbng54r.js +0 -2
  533. package/dist/chunk-n46a5g1g.js +0 -3
  534. package/dist/chunk-n944baxp.js +0 -3
  535. package/dist/chunk-nanw7yhz.js +0 -14
  536. package/dist/chunk-nap11ntr.js +0 -21
  537. package/dist/chunk-ncnfa8ae.js +0 -29
  538. package/dist/chunk-ngxfwzq3.js +0 -3
  539. package/dist/chunk-nvwb4x04.js +0 -3
  540. package/dist/chunk-nw34xajc.js +0 -8
  541. package/dist/chunk-payfb24w.js +0 -207
  542. package/dist/chunk-pc31m5x5.js +0 -398
  543. package/dist/chunk-pg1fvqb9.js +0 -167
  544. package/dist/chunk-q60knhjf.js +0 -3
  545. package/dist/chunk-q6h6yvzb.js +0 -10
  546. package/dist/chunk-qd5461tt.js +0 -3
  547. package/dist/chunk-qdc3aav1.js +0 -3
  548. package/dist/chunk-qfwzdffx.js +0 -3
  549. package/dist/chunk-qgxwmagw.js +0 -134
  550. package/dist/chunk-qhdtssn1.js +0 -19
  551. package/dist/chunk-qk584whs.js +0 -3
  552. package/dist/chunk-qm4yppj5.js +0 -57
  553. package/dist/chunk-qwyd9a1d.js +0 -2
  554. package/dist/chunk-qxs6et76.js +0 -196
  555. package/dist/chunk-rb1e4cnb.js +0 -3
  556. package/dist/chunk-rh80q1nd.js +0 -1
  557. package/dist/chunk-rkffm9sy.js +0 -128
  558. package/dist/chunk-rv002yn0.js +0 -14
  559. package/dist/chunk-s6ja2bdg.js +0 -66
  560. package/dist/chunk-sjagg9qz.js +0 -66
  561. package/dist/chunk-sn07azv3.js +0 -3
  562. package/dist/chunk-svahbw0w.js +0 -12
  563. package/dist/chunk-svhtdb0s.js +0 -6
  564. package/dist/chunk-t37dp99j.js +0 -3
  565. package/dist/chunk-tj6zfxeb.js +0 -64
  566. package/dist/chunk-tmgz5t2g.js +0 -3
  567. package/dist/chunk-tr0z0e1g.js +0 -3
  568. package/dist/chunk-tx6br9r4.js +0 -274
  569. package/dist/chunk-v97390pe.js +0 -1
  570. package/dist/chunk-vcr5pzpx.js +0 -233
  571. package/dist/chunk-vdfwv0fp.js +0 -6
  572. package/dist/chunk-vp2395eb.js +0 -3
  573. package/dist/chunk-vpe6napb.js +0 -28
  574. package/dist/chunk-vv9wfz1c.js +0 -12
  575. package/dist/chunk-vw6ejgmy.js +0 -21
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w01y57f5.js +0 -1539
  578. package/dist/chunk-w21mwxdd.js +0 -4
  579. package/dist/chunk-w4n8fqp7.js +0 -216
  580. package/dist/chunk-w959hm8j.js +0 -358
  581. package/dist/chunk-wf7zrjsw.js +0 -138
  582. package/dist/chunk-wk07pwtd.js +0 -321
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wxvyj65q.js +0 -2
  585. package/dist/chunk-x1hjv24z.js +0 -11
  586. package/dist/chunk-x39sfpvm.js +0 -302
  587. package/dist/chunk-x4fze3q2.js +0 -314
  588. package/dist/chunk-x64kb787.js +0 -15
  589. package/dist/chunk-xcb0pbr6.js +0 -4
  590. package/dist/chunk-xhkjhxsp.js +0 -3
  591. package/dist/chunk-xhnpsngj.js +0 -5
  592. package/dist/chunk-xsqbk4yk.js +0 -3
  593. package/dist/chunk-xygc53vr.js +0 -68
  594. package/dist/chunk-y0qg6rrv.js +0 -3
  595. package/dist/chunk-y25pr13j.js +0 -19
  596. package/dist/chunk-y4c744dk.js +0 -3
  597. package/dist/chunk-y4md9hp0.js +0 -3
  598. package/dist/chunk-y5wazw6j.js +0 -7
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y86m1wr4.js +0 -4
  601. package/dist/chunk-yaan98dd.js +0 -3
  602. package/dist/chunk-yach037f.js +0 -32
  603. package/dist/chunk-yexjrg9d.js +0 -7
  604. package/dist/chunk-ygvyc6wv.js +0 -90
  605. package/dist/chunk-yj560gp8.js +0 -8
  606. package/dist/chunk-yn38c15w.js +0 -4
  607. package/dist/chunk-yr1gdceh.js +0 -3
  608. package/dist/chunk-yw2fzq86.js +0 -3
  609. package/dist/chunk-ywkrxp2h.js +0 -147
  610. package/dist/chunk-z37xq5rx.js +0 -3
  611. package/dist/chunk-z4djtgt0.js +0 -71
  612. package/dist/chunk-z8cjr9n9.js +0 -7
  613. package/dist/chunk-znxp3zha.js +0 -71
  614. package/dist/chunk-zt2yag10.js +0 -429
@@ -1,2 +1,897 @@
1
- // @bun
2
- import{Th as a,Uh as b,Vh as c,Wh as d,Xh as e,Yh as f}from"./chunk-c53hyw5c.js";import"./chunk-3jm3snz8.js";export{b as createProject,e as addStore,d as addPage,f as addLayout,c as addComponent,a as PROJECT_TEMPLATES};
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { join, dirname, basename } from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ export const PROJECT_TEMPLATES = {
5
+ default: {
6
+ description: "Standard stx project with pages, components, and stores",
7
+ features: ["Pages", "Components", "Layouts", "Stores", "Dev server"]
8
+ },
9
+ minimal: {
10
+ description: "Minimal setup with just the essentials",
11
+ features: ["Single page", "Basic styles"]
12
+ },
13
+ full: {
14
+ description: "Full-featured project with all stx capabilities",
15
+ features: ["Pages", "Components", "Layouts", "Stores", "API routes", "PWA", "i18n", "Testing"]
16
+ },
17
+ blog: {
18
+ description: "Blog template with markdown support",
19
+ features: ["Blog layout", "Post pages", "Tags", "RSS feed", "Markdown"]
20
+ },
21
+ dashboard: {
22
+ description: "Admin dashboard template",
23
+ features: ["Sidebar", "Charts", "Tables", "Forms", "Auth pages"]
24
+ },
25
+ landing: {
26
+ description: "Marketing landing page template",
27
+ features: ["Hero section", "Features", "Pricing", "CTA", "Contact form"]
28
+ }
29
+ };
30
+ export async function createProject(projectName, options = {}) {
31
+ const result = {
32
+ success: !0,
33
+ message: "",
34
+ files: [],
35
+ errors: []
36
+ }, template = options.template || "default", projectPath = join(process.cwd(), projectName);
37
+ if (existsSync(projectPath)) {
38
+ result.success = !1;
39
+ result.message = `Directory ${projectName} already exists`;
40
+ return result;
41
+ }
42
+ try {
43
+ mkdirSync(projectPath, { recursive: !0 });
44
+ const dirs = getProjectDirs(template);
45
+ for (const dir of dirs)
46
+ mkdirSync(join(projectPath, dir), { recursive: !0 });
47
+ const files = getProjectFiles(template, projectName, options);
48
+ for (const [filePath, content] of Object.entries(files)) {
49
+ const fullPath = join(projectPath, filePath);
50
+ ensureDir(dirname(fullPath));
51
+ await Bun.write(fullPath, content);
52
+ result.files.push(filePath);
53
+ }
54
+ if (!options.skipGit)
55
+ try {
56
+ execSync("git init", { cwd: projectPath, stdio: "ignore" });
57
+ await Bun.write(join(projectPath, ".gitignore"), getGitignore());
58
+ result.files.push(".gitignore");
59
+ } catch {
60
+ result.errors.push("Failed to initialize git repository");
61
+ }
62
+ if (!options.skipInstall) {
63
+ const pm = options.packageManager || detectPackageManager();
64
+ try {
65
+ console.log(`
66
+ Installing dependencies with ${pm}...`);
67
+ execSync(`${pm} install`, { cwd: projectPath, stdio: "inherit" });
68
+ } catch {
69
+ result.errors.push("Failed to install dependencies");
70
+ }
71
+ }
72
+ result.message = `Created project: ${projectName}`;
73
+ console.log(`
74
+ \u2705 ${result.message}
75
+
76
+ Next steps:
77
+ cd ${projectName}
78
+ ${options.packageManager || "bun"} run dev
79
+ `);
80
+ } catch (error) {
81
+ result.success = !1;
82
+ result.message = `Failed to create project: ${error}`;
83
+ }
84
+ return result;
85
+ }
86
+ function getProjectDirs(template) {
87
+ const baseDirs = ["pages", "components", "layouts", "partials", "public"];
88
+ switch (template) {
89
+ case "minimal":
90
+ return ["src", "public"];
91
+ case "full":
92
+ return [...baseDirs, "src/stores", "src/api", "src/i18n", "src/utils", "test"];
93
+ case "blog":
94
+ return [...baseDirs, "src/posts", "src/utils"];
95
+ case "dashboard":
96
+ return [...baseDirs, "src/stores", "src/api", "src/utils"];
97
+ case "landing":
98
+ return [...baseDirs, "src/sections"];
99
+ default:
100
+ return [...baseDirs, "src/stores"];
101
+ }
102
+ }
103
+ function getProjectFiles(template, projectName, options) {
104
+ const files = {};
105
+ files["package.json"] = getPackageJson(projectName, template, options);
106
+ files["stx.config.ts"] = getStxConfig(template, options);
107
+ files["README.md"] = getReadme(projectName, template);
108
+ if (options.typescript !== !1)
109
+ files["tsconfig.json"] = getTsConfig();
110
+ switch (template) {
111
+ case "minimal":
112
+ files["src/index.stx"] = getMinimalPage();
113
+ break;
114
+ case "blog":
115
+ files["pages/index.stx"] = getBlogIndexPage();
116
+ files["pages/[slug].stx"] = getBlogPostPage();
117
+ files["layouts/app.stx"] = getBlogLayout();
118
+ files["components/PostCard.stx"] = getPostCardComponent();
119
+ break;
120
+ case "dashboard":
121
+ files["pages/index.stx"] = getDashboardIndexPage();
122
+ files["pages/settings.stx"] = getDashboardSettingsPage();
123
+ files["layouts/app.stx"] = getDashboardLayout();
124
+ files["components/Sidebar.stx"] = getSidebarComponent();
125
+ files["components/StatsCard.stx"] = getStatsCardComponent();
126
+ files["src/stores/dashboard.ts"] = getDashboardStore();
127
+ break;
128
+ case "landing":
129
+ files["pages/index.stx"] = getLandingPage();
130
+ files["layouts/app.stx"] = getLandingLayout();
131
+ files["src/sections/Hero.stx"] = getHeroSection();
132
+ files["src/sections/Features.stx"] = getFeaturesSection();
133
+ files["src/sections/Pricing.stx"] = getPricingSection();
134
+ files["components/Button.stx"] = getButtonComponent();
135
+ break;
136
+ case "full":
137
+ files["pages/index.stx"] = getDefaultIndexPage();
138
+ files["pages/about.stx"] = getAboutPage();
139
+ files["layouts/app.stx"] = getDefaultLayout();
140
+ files["components/Header.stx"] = getHeaderComponent();
141
+ files["components/Footer.stx"] = getFooterComponent();
142
+ files["src/stores/app.ts"] = getAppStore();
143
+ files["src/i18n/en.json"] = getI18nFile("en");
144
+ files["test/example.test.ts"] = getTestFile();
145
+ break;
146
+ default:
147
+ files["pages/index.stx"] = getDefaultIndexPage();
148
+ files["layouts/app.stx"] = getDefaultLayout();
149
+ files["components/Header.stx"] = getHeaderComponent();
150
+ files["components/Footer.stx"] = getFooterComponent();
151
+ files["src/stores/app.ts"] = getAppStore();
152
+ }
153
+ return files;
154
+ }
155
+ export async function addComponent(name, options = {}) {
156
+ const result = { success: !0, message: "", files: [], errors: [] }, dir = options.dir || "components", componentName = toPascalCase(name), filePath = join(dir, `${componentName}.stx`);
157
+ if (await Bun.file(filePath).exists() && !options.force) {
158
+ result.success = !1;
159
+ result.message = `Component ${componentName} already exists. Use --force to overwrite.`;
160
+ return result;
161
+ }
162
+ try {
163
+ ensureDir(dir);
164
+ const content = generateComponent(componentName, options);
165
+ await Bun.write(filePath, content);
166
+ result.files.push(filePath);
167
+ result.message = `Created component: ${filePath}`;
168
+ console.log(`\u2705 ${result.message}`);
169
+ } catch (error) {
170
+ result.success = !1;
171
+ result.message = `Failed to create component: ${error}`;
172
+ }
173
+ return result;
174
+ }
175
+ export async function addPage(name, options = {}) {
176
+ const result = { success: !0, message: "", files: [], errors: [] }, dir = options.dir || "pages", pageName = name.toLowerCase().replace(/\s+/g, "-"), filePath = join(dir, `${pageName}.stx`);
177
+ if (await Bun.file(filePath).exists() && !options.force) {
178
+ result.success = !1;
179
+ result.message = `Page ${pageName} already exists. Use --force to overwrite.`;
180
+ return result;
181
+ }
182
+ try {
183
+ ensureDir(dir);
184
+ const content = generatePage(pageName, options);
185
+ await Bun.write(filePath, content);
186
+ result.files.push(filePath);
187
+ result.message = `Created page: ${filePath}`;
188
+ console.log(`\u2705 ${result.message}`);
189
+ } catch (error) {
190
+ result.success = !1;
191
+ result.message = `Failed to create page: ${error}`;
192
+ }
193
+ return result;
194
+ }
195
+ export async function addStore(name, options = {}) {
196
+ const result = { success: !0, message: "", files: [], errors: [] }, dir = options.dir || "src/stores", storeName = toCamelCase(name), filePath = join(dir, `${storeName}.ts`);
197
+ if (await Bun.file(filePath).exists() && !options.force) {
198
+ result.success = !1;
199
+ result.message = `Store ${storeName} already exists. Use --force to overwrite.`;
200
+ return result;
201
+ }
202
+ try {
203
+ ensureDir(dir);
204
+ const content = generateStore(storeName, options);
205
+ await Bun.write(filePath, content);
206
+ result.files.push(filePath);
207
+ result.message = `Created store: ${filePath}`;
208
+ console.log(`\u2705 ${result.message}`);
209
+ } catch (error) {
210
+ result.success = !1;
211
+ result.message = `Failed to create store: ${error}`;
212
+ }
213
+ return result;
214
+ }
215
+ export async function addLayout(name, options = {}) {
216
+ const result = { success: !0, message: "", files: [], errors: [] }, dir = options.dir || "layouts", layoutName = name.toLowerCase().replace(/\s+/g, "-"), filePath = join(dir, `${layoutName}.stx`);
217
+ if (await Bun.file(filePath).exists() && !options.force) {
218
+ result.success = !1;
219
+ result.message = `Layout ${layoutName} already exists. Use --force to overwrite.`;
220
+ return result;
221
+ }
222
+ try {
223
+ ensureDir(dir);
224
+ const content = generateLayout(layoutName, options);
225
+ await Bun.write(filePath, content);
226
+ result.files.push(filePath);
227
+ result.message = `Created layout: ${filePath}`;
228
+ console.log(`\u2705 ${result.message}`);
229
+ } catch (error) {
230
+ result.success = !1;
231
+ result.message = `Failed to create layout: ${error}`;
232
+ }
233
+ return result;
234
+ }
235
+ function generateComponent(name, options) {
236
+ const lines = [];
237
+ lines.push(`{{-- Component: ${name} --}}`);
238
+ if (options.props !== !1)
239
+ lines.push(`<script>
240
+ // Props
241
+ const title = props.title || '${name}'
242
+ const variant = props.variant || 'default'
243
+ </script>
244
+ `);
245
+ lines.push(`<div class="${toKebabCase(name)} ${toKebabCase(name)}--{{ variant }}">
246
+ <h3>{{ title }}</h3>
247
+ <div class="${toKebabCase(name)}__content">
248
+ {{ slot }}
249
+ </div>
250
+ </div>`);
251
+ if (options.styles !== !1)
252
+ lines.push(`
253
+ <style scoped>
254
+ .${toKebabCase(name)} {
255
+ padding: 1rem;
256
+ border-radius: 8px;
257
+ background: #f8f9fa;
258
+ }
259
+
260
+ .${toKebabCase(name)}--primary {
261
+ border-left: 3px solid #3498db;
262
+ }
263
+
264
+ .${toKebabCase(name)}--success {
265
+ border-left: 3px solid #2ecc71;
266
+ }
267
+
268
+ .${toKebabCase(name)}__content {
269
+ margin-top: 0.5rem;
270
+ }
271
+ </style>`);
272
+ return lines.join(`
273
+ `);
274
+ }
275
+ function generatePage(name, options) {
276
+ const title = toPascalCase(name.replace(/-/g, " ")), lines = [];
277
+ lines.push(`<script>
278
+ const title = '${title}'
279
+ const description = 'Page description'
280
+ </script>
281
+ `);
282
+ if (options.layout)
283
+ lines.push(`@layout('${options.layout}')
284
+ `);
285
+ if (options.dynamic)
286
+ lines.push(`{{-- Dynamic route: /pages/[${name}].stx --}}
287
+ {{-- Access params via props.params --}}
288
+ `);
289
+ lines.push(`@section('content')
290
+ <div class="page-${name}">
291
+ <h1>{{ title }}</h1>
292
+ <p>{{ description }}</p>
293
+ </div>
294
+ @endsection`);
295
+ return lines.join(`
296
+ `);
297
+ }
298
+ function generateStore(name, options) {
299
+ const storeName = `${name}Store`, stateType = `${toPascalCase(name)}State`;
300
+ let content = `import { defineStore } from 'stx'
301
+
302
+ interface ${stateType} {
303
+ // Add your state properties here
304
+ count: number
305
+ loading: boolean
306
+ }
307
+
308
+ export const ${storeName} = defineStore('${name}', {
309
+ state: (): ${stateType} => ({
310
+ count: 0,
311
+ loading: false,
312
+ }),
313
+
314
+ getters: {
315
+ doubleCount(): number {
316
+ return this.count * 2
317
+ },
318
+ },
319
+ `;
320
+ if (options.actions !== !1)
321
+ content += `
322
+ actions: {
323
+ increment() {
324
+ this.count++
325
+ },
326
+
327
+ decrement() {
328
+ this.count--
329
+ },
330
+
331
+ async fetchData() {
332
+ this.loading = true
333
+ try {
334
+ // Add your async logic here
335
+ await new Promise(resolve => setTimeout(resolve, 1000))
336
+ }
337
+ finally {
338
+ this.loading = false
339
+ }
340
+ },
341
+ },
342
+ `;
343
+ if (options.persist)
344
+ content += `
345
+ persist: {
346
+ enabled: true,
347
+ strategies: [
348
+ { key: '${name}', storage: localStorage },
349
+ ],
350
+ },
351
+ `;
352
+ content += `})
353
+ `;
354
+ return content;
355
+ }
356
+ function generateLayout(name, options) {
357
+ let content = `<!DOCTYPE html>
358
+ <html lang="en">
359
+ <head>
360
+ <meta charset="UTF-8">
361
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
362
+ <title>@yield('title', 'My App')</title>
363
+ @yield('head')
364
+ <style>
365
+ * { box-sizing: border-box; margin: 0; padding: 0; }
366
+ body {
367
+ font-family: system-ui, sans-serif;
368
+ min-height: 100vh;
369
+ display: flex;
370
+ flex-direction: column;
371
+ }
372
+ main {
373
+ flex: 1;
374
+ padding: 2rem;
375
+ max-width: 1200px;
376
+ margin: 0 auto;
377
+ width: 100%;
378
+ }
379
+ </style>
380
+ @yield('styles')
381
+ </head>
382
+ <body>
383
+ `;
384
+ if (options.nav !== !1)
385
+ content += ` <header class="header">
386
+ <nav class="nav">
387
+ <a href="/" class="nav__logo">Logo</a>
388
+ <div class="nav__links">
389
+ <a href="/">Home</a>
390
+ <a href="/about">About</a>
391
+ <a href="/contact">Contact</a>
392
+ </div>
393
+ </nav>
394
+ </header>
395
+
396
+ `;
397
+ content += ` <main>
398
+ {{ slot }}
399
+ </main>
400
+
401
+ `;
402
+ if (options.footer !== !1)
403
+ content += ` <footer class="footer">
404
+ <p>&copy; {{ new Date().getFullYear() }} My App. All rights reserved.</p>
405
+ </footer>
406
+
407
+ `;
408
+ content += ` @yield('scripts')
409
+ </body>
410
+ </html>`;
411
+ return content;
412
+ }
413
+ function getPackageJson(name, template, options) {
414
+ const pkg = {
415
+ name,
416
+ version: "0.0.1",
417
+ type: "module",
418
+ scripts: {
419
+ dev: "stx dev pages/index.stx",
420
+ build: "stx build",
421
+ preview: "stx serve dist"
422
+ },
423
+ dependencies: {
424
+ stx: "latest"
425
+ },
426
+ devDependencies: {}
427
+ };
428
+ if (options.typescript !== !1)
429
+ pkg.devDependencies.typescript = "^5.0.0";
430
+ if (options.tailwind)
431
+ pkg.devDependencies.tailwindcss = "^3.0.0";
432
+ if (template === "full") {
433
+ pkg.scripts.test = "bun test";
434
+ pkg.scripts.lint = "bun run lint";
435
+ }
436
+ return JSON.stringify(pkg, null, 2);
437
+ }
438
+ function getStxConfig(template, options) {
439
+ return `import { defineConfig } from 'stx'
440
+
441
+ export default defineConfig({
442
+ // Template directories
443
+ partialsDir: 'partials',
444
+ componentsDir: 'components',
445
+ layoutsDir: 'layouts',
446
+ defaultLayout: 'app',
447
+
448
+ // Development
449
+ debug: process.env.NODE_ENV !== 'production',
450
+ cache: process.env.NODE_ENV === 'production',
451
+
452
+ // Features
453
+ a11y: { enabled: true },
454
+ seo: { enabled: true },
455
+ ${options.pwa ? ` pwa: { enabled: true },
456
+ ` : ""}
457
+ // Analytics (configure when ready)
458
+ // analytics: { enabled: true, driver: 'fathom', fathom: { siteId: 'YOUR_SITE_ID' } },
459
+ })
460
+ `;
461
+ }
462
+ function getTsConfig() {
463
+ return JSON.stringify({
464
+ compilerOptions: {
465
+ target: "ESNext",
466
+ module: "ESNext",
467
+ moduleResolution: "bundler",
468
+ strict: !0,
469
+ skipLibCheck: !0,
470
+ esModuleInterop: !0,
471
+ types: ["bun-types"]
472
+ },
473
+ include: ["src/**/*", "test/**/*"]
474
+ }, null, 2);
475
+ }
476
+ function getReadme(name, template) {
477
+ return `# ${name}
478
+
479
+ A stx project created with the \`${template}\` template.
480
+
481
+ ## Getting Started
482
+
483
+ \`\`\`bash
484
+ # Start development server
485
+ bun run dev
486
+
487
+ # Build for production
488
+ bun run build
489
+
490
+ # Preview production build
491
+ bun run preview
492
+ \`\`\`
493
+
494
+ ## Project Structure
495
+
496
+ \`\`\`
497
+ src/
498
+ \u251C\u2500\u2500 pages/ # Page components (file-based routing)
499
+ \u251C\u2500\u2500 components/ # Reusable components
500
+ \u251C\u2500\u2500 layouts/ # Layout templates
501
+ \u251C\u2500\u2500 stores/ # State management
502
+ \u2514\u2500\u2500 public/ # Static assets
503
+ \`\`\`
504
+
505
+ ## Learn More
506
+
507
+ - [stx Documentation](https://stx.dev/docs)
508
+ - [stx GitHub](https://github.com/stacksjs/stx)
509
+ `;
510
+ }
511
+ function getGitignore() {
512
+ return `# Dependencies
513
+ node_modules/
514
+ .bun/
515
+
516
+ # Build
517
+ dist/
518
+ .stx/
519
+
520
+ # IDE
521
+ .idea/
522
+ .vscode/
523
+ *.swp
524
+ *.swo
525
+
526
+ # OS
527
+ .DS_Store
528
+ Thumbs.db
529
+
530
+ # Environment
531
+ .env
532
+ .env.local
533
+ .env.*.local
534
+
535
+ # Logs
536
+ *.log
537
+ `;
538
+ }
539
+ function getMinimalPage() {
540
+ return `<!DOCTYPE html>
541
+ <html lang="en">
542
+ <head>
543
+ <meta charset="UTF-8">
544
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
545
+ <title>Welcome to stx</title>
546
+ <style>
547
+ body { font-family: system-ui; max-width: 600px; margin: 100px auto; text-align: center; }
548
+ h1 { color: #333; }
549
+ </style>
550
+ </head>
551
+ <body>
552
+ <h1>Welcome to stx</h1>
553
+ <p>Edit <code>src/index.stx</code> to get started.</p>
554
+ </body>
555
+ </html>
556
+ `;
557
+ }
558
+ function getDefaultIndexPage() {
559
+ return `<script>
560
+ const title = 'Welcome to stx'
561
+ const features = [
562
+ { icon: '\u26A1', name: 'Fast', desc: 'Built on Bun for blazing speed' },
563
+ { icon: '\uD83C\uDFA8', name: 'Beautiful', desc: 'Blade-style syntax you know and love' },
564
+ { icon: '\uD83D\uDEE0', name: 'Powerful', desc: 'Full-featured component system' },
565
+ ]
566
+ </script>
567
+
568
+ @section('title')
569
+ {{ title }}
570
+ @endsection
571
+
572
+ @section('content')
573
+ <div class="hero">
574
+ <h1>{{ title }}</h1>
575
+ <p>A modern UI framework with Laravel Blade syntax</p>
576
+ </div>
577
+
578
+ <div class="features">
579
+ @foreach(features as feature)
580
+ <div class="feature">
581
+ <span class="feature__icon">{{ feature.icon }}</span>
582
+ <h3>{{ feature.name }}</h3>
583
+ <p>{{ feature.desc }}</p>
584
+ </div>
585
+ @endforeach
586
+ </div>
587
+ @endsection
588
+ `;
589
+ }
590
+ function getAboutPage() {
591
+ return `<script>
592
+ const title = 'About'
593
+ </script>
594
+
595
+ @section('title')
596
+ {{ title }}
597
+ @endsection
598
+
599
+ @section('content')
600
+ <h1>{{ title }}</h1>
601
+ <p>This is the about page.</p>
602
+ @endsection
603
+ `;
604
+ }
605
+ function getDefaultLayout() {
606
+ return `<!DOCTYPE html>
607
+ <html lang="en">
608
+ <head>
609
+ <meta charset="UTF-8">
610
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
611
+ <title>@yield('title', 'My App')</title>
612
+ @yield('head')
613
+ <style>
614
+ * { box-sizing: border-box; margin: 0; padding: 0; }
615
+ body { font-family: system-ui; color: #333; line-height: 1.6; }
616
+ .container { max-width: 1200px; margin: 0 auto; padding: 0 1rem; }
617
+ </style>
618
+ @yield('styles')
619
+ </head>
620
+ <body>
621
+ @component('Header')@endcomponent
622
+ <main class="container">
623
+ {{ slot }}
624
+ </main>
625
+ @component('Footer')@endcomponent
626
+ @yield('scripts')
627
+ </body>
628
+ </html>
629
+ `;
630
+ }
631
+ function getHeaderComponent() {
632
+ return `<header class="header">
633
+ <nav class="nav container">
634
+ <a href="/" class="logo">stx</a>
635
+ <div class="nav-links">
636
+ <a href="/">Home</a>
637
+ <a href="/about">About</a>
638
+ </div>
639
+ </nav>
640
+ </header>
641
+
642
+ <style scoped>
643
+ .header { background: #2c3e50; padding: 1rem 0; }
644
+ .nav { display: flex; justify-content: space-between; align-items: center; }
645
+ .logo { color: white; font-weight: bold; text-decoration: none; font-size: 1.25rem; }
646
+ .nav-links a { color: rgba(255,255,255,0.8); margin-left: 1.5rem; text-decoration: none; }
647
+ .nav-links a:hover { color: white; }
648
+ </style>
649
+ `;
650
+ }
651
+ function getFooterComponent() {
652
+ return `<footer class="footer">
653
+ <div class="container">
654
+ <p>&copy; {{ new Date().getFullYear() }} Built with stx</p>
655
+ </div>
656
+ </footer>
657
+
658
+ <style scoped>
659
+ .footer { background: #f8f9fa; padding: 2rem 0; margin-top: 4rem; text-align: center; color: #666; }
660
+ </style>
661
+ `;
662
+ }
663
+ function getAppStore() {
664
+ return `import { defineStore } from 'stx'
665
+
666
+ interface AppState {
667
+ theme: 'light' | 'dark'
668
+ sidebarOpen: boolean
669
+ }
670
+
671
+ export const appStore = defineStore('app', {
672
+ state: (): AppState => ({
673
+ theme: 'light',
674
+ sidebarOpen: true,
675
+ }),
676
+
677
+ actions: {
678
+ toggleTheme() {
679
+ this.theme = this.theme === 'light' ? 'dark' : 'light'
680
+ },
681
+ toggleSidebar() {
682
+ this.sidebarOpen = !this.sidebarOpen
683
+ },
684
+ },
685
+
686
+ persist: {
687
+ enabled: true,
688
+ strategies: [{ key: 'app-preferences', storage: localStorage }],
689
+ },
690
+ })
691
+ `;
692
+ }
693
+ function getI18nFile(locale) {
694
+ return JSON.stringify({
695
+ common: {
696
+ welcome: "Welcome",
697
+ home: "Home",
698
+ about: "About",
699
+ contact: "Contact"
700
+ },
701
+ messages: {
702
+ loading: "Loading...",
703
+ error: "An error occurred"
704
+ }
705
+ }, null, 2);
706
+ }
707
+ function getTestFile() {
708
+ return `import { describe, expect, it } from 'bun:test'
709
+
710
+ describe('Example', () => {
711
+ it('should work', () => {
712
+ expect(1 + 1).toBe(2)
713
+ })
714
+ })
715
+ `;
716
+ }
717
+ function getBlogIndexPage() {
718
+ return "<!-- Blog index -->";
719
+ }
720
+ function getBlogPostPage() {
721
+ return "<!-- Blog post -->";
722
+ }
723
+ function getBlogLayout() {
724
+ return `<!DOCTYPE html>
725
+ <html lang="en">
726
+ <head>
727
+ <meta charset="UTF-8">
728
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
729
+ <title>@yield('title', 'My Blog')</title>
730
+ @yield('head')
731
+ <style>
732
+ * { box-sizing: border-box; margin: 0; padding: 0; }
733
+ body { font-family: system-ui, sans-serif; color: #333; line-height: 1.8; }
734
+ .container { max-width: 800px; margin: 0 auto; padding: 0 1rem; }
735
+ .blog-header { background: #1a1a2e; color: white; padding: 1.5rem 0; }
736
+ .blog-header nav { display: flex; justify-content: space-between; align-items: center; }
737
+ .blog-header a { color: rgba(255,255,255,0.8); text-decoration: none; margin-left: 1.5rem; }
738
+ .blog-header a:hover { color: white; }
739
+ .blog-header .logo { font-weight: bold; font-size: 1.25rem; color: white; margin-left: 0; }
740
+ .blog-footer { background: #f8f9fa; padding: 2rem 0; margin-top: 4rem; text-align: center; color: #666; }
741
+ </style>
742
+ @yield('styles')
743
+ </head>
744
+ <body>
745
+ <header class="blog-header">
746
+ <nav class="container">
747
+ <a href="/" class="logo">My Blog</a>
748
+ <div>
749
+ <a href="/">Home</a>
750
+ <a href="/about">About</a>
751
+ </div>
752
+ </nav>
753
+ </header>
754
+ <main class="container" style="padding-top: 2rem;">
755
+ {{ slot }}
756
+ </main>
757
+ <footer class="blog-footer">
758
+ <div class="container">
759
+ <p>&copy; {{ new Date().getFullYear() }} My Blog. All rights reserved.</p>
760
+ </div>
761
+ </footer>
762
+ @yield('scripts')
763
+ </body>
764
+ </html>`;
765
+ }
766
+ function getPostCardComponent() {
767
+ return "<!-- Post card -->";
768
+ }
769
+ function getDashboardIndexPage() {
770
+ return "<!-- Dashboard index -->";
771
+ }
772
+ function getDashboardSettingsPage() {
773
+ return "<!-- Settings -->";
774
+ }
775
+ function getDashboardLayout() {
776
+ return `<!DOCTYPE html>
777
+ <html lang="en">
778
+ <head>
779
+ <meta charset="UTF-8">
780
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
781
+ <title>@yield('title', 'Dashboard')</title>
782
+ @yield('head')
783
+ <style>
784
+ * { box-sizing: border-box; margin: 0; padding: 0; }
785
+ body { font-family: system-ui, sans-serif; color: #333; min-height: 100vh; display: flex; flex-direction: column; }
786
+ .dash-header { background: #2c3e50; color: white; padding: 1rem 1.5rem; display: flex; justify-content: space-between; align-items: center; }
787
+ .dash-header .logo { font-weight: bold; font-size: 1.25rem; color: white; text-decoration: none; }
788
+ .dash-header nav a { color: rgba(255,255,255,0.8); text-decoration: none; margin-left: 1.5rem; }
789
+ .dash-body { display: flex; flex: 1; }
790
+ .dash-sidebar { width: 240px; background: #34495e; color: white; padding: 1.5rem; }
791
+ .dash-sidebar a { color: rgba(255,255,255,0.8); text-decoration: none; display: block; padding: 0.5rem 0; }
792
+ .dash-sidebar a:hover { color: white; }
793
+ .dash-content { flex: 1; padding: 2rem; background: #f5f6fa; }
794
+ </style>
795
+ @yield('styles')
796
+ </head>
797
+ <body>
798
+ <header class="dash-header">
799
+ <a href="/" class="logo">Dashboard</a>
800
+ <nav>
801
+ <a href="/settings">Settings</a>
802
+ </nav>
803
+ </header>
804
+ <div class="dash-body">
805
+ @yield('sidebar')
806
+ <main class="dash-content">
807
+ {{ slot }}
808
+ </main>
809
+ </div>
810
+ @yield('scripts')
811
+ </body>
812
+ </html>`;
813
+ }
814
+ function getSidebarComponent() {
815
+ return "<!-- Sidebar -->";
816
+ }
817
+ function getStatsCardComponent() {
818
+ return "<!-- Stats card -->";
819
+ }
820
+ function getDashboardStore() {
821
+ return "// Dashboard store";
822
+ }
823
+ function getLandingPage() {
824
+ return "<!-- Landing page -->";
825
+ }
826
+ function getLandingLayout() {
827
+ return `<!DOCTYPE html>
828
+ <html lang="en">
829
+ <head>
830
+ <meta charset="UTF-8">
831
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
832
+ <title>@yield('title', 'Welcome')</title>
833
+ @yield('head')
834
+ <style>
835
+ * { box-sizing: border-box; margin: 0; padding: 0; }
836
+ body { font-family: system-ui, sans-serif; color: #333; line-height: 1.6; }
837
+ .landing-header { position: fixed; top: 0; width: 100%; background: rgba(255,255,255,0.95); backdrop-filter: blur(8px); padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; z-index: 100; border-bottom: 1px solid #eee; }
838
+ .landing-header .logo { font-weight: bold; font-size: 1.25rem; color: #333; text-decoration: none; }
839
+ .landing-header nav a { color: #555; text-decoration: none; margin-left: 1.5rem; }
840
+ .landing-header nav a:hover { color: #000; }
841
+ .landing-footer { background: #1a1a2e; color: rgba(255,255,255,0.7); padding: 3rem 2rem; text-align: center; }
842
+ </style>
843
+ @yield('styles')
844
+ </head>
845
+ <body>
846
+ <header class="landing-header">
847
+ <a href="/" class="logo">Brand</a>
848
+ <nav>
849
+ <a href="#features">Features</a>
850
+ <a href="#pricing">Pricing</a>
851
+ <a href="#contact">Contact</a>
852
+ </nav>
853
+ </header>
854
+ <main>
855
+ {{ slot }}
856
+ </main>
857
+ <footer class="landing-footer">
858
+ <p>&copy; {{ new Date().getFullYear() }} Brand. All rights reserved.</p>
859
+ </footer>
860
+ @yield('scripts')
861
+ </body>
862
+ </html>`;
863
+ }
864
+ function getHeroSection() {
865
+ return "<!-- Hero section -->";
866
+ }
867
+ function getFeaturesSection() {
868
+ return "<!-- Features -->";
869
+ }
870
+ function getPricingSection() {
871
+ return "<!-- Pricing -->";
872
+ }
873
+ function getButtonComponent() {
874
+ return "<!-- Button -->";
875
+ }
876
+ function ensureDir(dir) {
877
+ if (!existsSync(dir))
878
+ mkdirSync(dir, { recursive: !0 });
879
+ }
880
+ function detectPackageManager() {
881
+ if (existsSync("bun.lockb"))
882
+ return "bun";
883
+ if (existsSync("pnpm-lock.yaml"))
884
+ return "pnpm";
885
+ if (existsSync("yarn.lock"))
886
+ return "yarn";
887
+ return "bun";
888
+ }
889
+ function toPascalCase(str) {
890
+ return str.replace(/[-_\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : "").replace(/^./, (s) => s.toUpperCase());
891
+ }
892
+ function toCamelCase(str) {
893
+ return str.replace(/[-_\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : "").replace(/^./, (s) => s.toLowerCase());
894
+ }
895
+ function toKebabCase(str) {
896
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
897
+ }