@stacksjs/stx 0.2.95 → 0.2.97

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 (612) 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 -2
  109. package/dist/dev-server/serve-file.js +439 -2
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +579 -2
  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 +5 -6
  357. package/dist/chunk-04n64bnt.js +0 -5
  358. package/dist/chunk-06w68hyg.js +0 -7
  359. package/dist/chunk-07y6m5xx.js +0 -3
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-09k66d8a.js +0 -3
  362. package/dist/chunk-0a61y94n.js +0 -24
  363. package/dist/chunk-0b9w2w1y.js +0 -1
  364. package/dist/chunk-0dx4q6yq.js +0 -3
  365. package/dist/chunk-0dz85jrp.js +0 -3
  366. package/dist/chunk-0jd0pndq.js +0 -3
  367. package/dist/chunk-0p0nyq50.js +0 -6
  368. package/dist/chunk-0p1h3p3w.js +0 -3
  369. package/dist/chunk-0qakwen3.js +0 -1
  370. package/dist/chunk-0qnz93q2.js +0 -3
  371. package/dist/chunk-10debkj5.js +0 -71
  372. package/dist/chunk-15nesxgt.js +0 -5224
  373. package/dist/chunk-1sr54zp8.js +0 -3
  374. package/dist/chunk-1v49fwr5.js +0 -3
  375. package/dist/chunk-1xz0w746.js +0 -1539
  376. package/dist/chunk-1z5nhbjt.js +0 -90
  377. package/dist/chunk-1zgsgk4b.js +0 -1
  378. package/dist/chunk-20swzkx3.js +0 -216
  379. package/dist/chunk-27zsyhrd.js +0 -4
  380. package/dist/chunk-29y0hk5z.js +0 -3
  381. package/dist/chunk-2cdvw21b.js +0 -274
  382. package/dist/chunk-2j21d3ka.js +0 -161
  383. package/dist/chunk-2jxbwnkz.js +0 -2
  384. package/dist/chunk-31dr4bys.js +0 -6
  385. package/dist/chunk-35faj94w.js +0 -15
  386. package/dist/chunk-39gm08bn.js +0 -39
  387. package/dist/chunk-3a4qsygv.js +0 -51
  388. package/dist/chunk-3te20hqw.js +0 -3
  389. package/dist/chunk-43t7faps.js +0 -24
  390. package/dist/chunk-44hd3kab.js +0 -1
  391. package/dist/chunk-47kpewks.js +0 -71
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4d2y57k7.js +0 -3
  394. package/dist/chunk-4deg33rw.js +0 -57
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qcy5tx6.js +0 -53
  397. package/dist/chunk-4x7kae4j.js +0 -3
  398. package/dist/chunk-55nwdnsd.js +0 -3
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-5f43yz6z.js +0 -12
  401. package/dist/chunk-5shey2e4.js +0 -3
  402. package/dist/chunk-6b5k6w2q.js +0 -7
  403. package/dist/chunk-6djzdes9.js +0 -14
  404. package/dist/chunk-6e4c6g46.js +0 -3
  405. package/dist/chunk-6eqbxcrd.js +0 -8
  406. package/dist/chunk-7074g241.js +0 -3
  407. package/dist/chunk-7b6s3g65.js +0 -179
  408. package/dist/chunk-7cgmq685.js +0 -33
  409. package/dist/chunk-7dkz6z2s.js +0 -3
  410. package/dist/chunk-7ed3tean.js +0 -3
  411. package/dist/chunk-7gd339hd.js +0 -109
  412. package/dist/chunk-7j5e8sdj.js +0 -3
  413. package/dist/chunk-7n8g0nfn.js +0 -38
  414. package/dist/chunk-7sqdeqsw.js +0 -1
  415. package/dist/chunk-80g54ncj.js +0 -3
  416. package/dist/chunk-8a5bxece.js +0 -4
  417. package/dist/chunk-8ahwt6a4.js +0 -721
  418. package/dist/chunk-8b3z0zd5.js +0 -8
  419. package/dist/chunk-8dhdpa5h.js +0 -4
  420. package/dist/chunk-8n9nnqr6.js +0 -3
  421. package/dist/chunk-8qc1bsym.js +0 -3
  422. package/dist/chunk-8va64c9n.js +0 -3
  423. package/dist/chunk-8vtm0m84.js +0 -3
  424. package/dist/chunk-8xj7c3mf.js +0 -8
  425. package/dist/chunk-988dw6q3.js +0 -9
  426. package/dist/chunk-9b6cec0v.js +0 -321
  427. package/dist/chunk-9cf97f9p.js +0 -3
  428. package/dist/chunk-9ecv8aqj.js +0 -14
  429. package/dist/chunk-9eq3ht5f.js +0 -8
  430. package/dist/chunk-9jtj77jx.js +0 -3
  431. package/dist/chunk-9t14se2t.js +0 -83
  432. package/dist/chunk-9wmq2272.js +0 -3
  433. package/dist/chunk-9zbk5zx5.js +0 -57
  434. package/dist/chunk-a2g2qb2y.js +0 -386
  435. package/dist/chunk-a3hyn4we.js +0 -79
  436. package/dist/chunk-a87qqft6.js +0 -194
  437. package/dist/chunk-ah88wzbg.js +0 -10
  438. package/dist/chunk-akf1r75r.js +0 -102
  439. package/dist/chunk-amaa1bev.js +0 -2
  440. package/dist/chunk-avx8aydt.js +0 -3
  441. package/dist/chunk-ay9qf4zj.js +0 -6
  442. package/dist/chunk-aywxfqev.js +0 -3
  443. package/dist/chunk-azkegjd8.js +0 -61
  444. package/dist/chunk-b77wjyn7.js +0 -84
  445. package/dist/chunk-baf1hfwh.js +0 -231
  446. package/dist/chunk-bdk6g1vj.js +0 -3
  447. package/dist/chunk-bhqgmyqw.js +0 -36
  448. package/dist/chunk-bk3j0n82.js +0 -341
  449. package/dist/chunk-bndmdahk.js +0 -3
  450. package/dist/chunk-bpgg59wa.js +0 -3
  451. package/dist/chunk-bs3gmfxz.js +0 -5
  452. package/dist/chunk-bxc7kjsk.js +0 -32
  453. package/dist/chunk-c7jg8w13.js +0 -3
  454. package/dist/chunk-ckxjqqn9.js +0 -3
  455. package/dist/chunk-cn8az1b4.js +0 -1
  456. package/dist/chunk-d0zjtdw4.js +0 -29
  457. package/dist/chunk-d1qh1x2g.js +0 -3
  458. package/dist/chunk-djddhmcc.js +0 -60
  459. package/dist/chunk-dqn9gyhb.js +0 -21
  460. package/dist/chunk-drjq2zwg.js +0 -3
  461. package/dist/chunk-dvfs1h3c.js +0 -117
  462. package/dist/chunk-e2q9c5vq.js +0 -8
  463. package/dist/chunk-e98v1bc6.js +0 -12
  464. package/dist/chunk-ejayeex8.js +0 -2
  465. package/dist/chunk-ejh8fyak.js +0 -3
  466. package/dist/chunk-ek2w6zvy.js +0 -4
  467. package/dist/chunk-ewa88139.js +0 -6
  468. package/dist/chunk-fjk3x41y.js +0 -3
  469. package/dist/chunk-frg705zq.js +0 -302
  470. package/dist/chunk-fzm3y0r3.js +0 -267
  471. package/dist/chunk-g1vt329s.js +0 -21
  472. package/dist/chunk-g4ps1dj8.js +0 -140
  473. package/dist/chunk-gkzq8zw4.js +0 -23
  474. package/dist/chunk-gz5fmp3q.js +0 -3
  475. package/dist/chunk-h0hjy0kn.js +0 -292
  476. package/dist/chunk-h5jxydqq.js +0 -147
  477. package/dist/chunk-h5wa62ek.js +0 -145
  478. package/dist/chunk-h7aq56qj.js +0 -28
  479. package/dist/chunk-h82kjdr4.js +0 -83
  480. package/dist/chunk-hbehnm18.js +0 -3
  481. package/dist/chunk-hbgxbgam.js +0 -58
  482. package/dist/chunk-hc2mf5h6.js +0 -4
  483. package/dist/chunk-hjm2xab3.js +0 -3
  484. package/dist/chunk-hjv76kcw.js +0 -1
  485. package/dist/chunk-hrnnh4tq.js +0 -142
  486. package/dist/chunk-ht43ds42.js +0 -236
  487. package/dist/chunk-hxx3za24.js +0 -62
  488. package/dist/chunk-hy8820vc.js +0 -6
  489. package/dist/chunk-j447q024.js +0 -28
  490. package/dist/chunk-j58vh0w6.js +0 -314
  491. package/dist/chunk-j8tn8enq.js +0 -3
  492. package/dist/chunk-jc0fc4ht.js +0 -11
  493. package/dist/chunk-jcs0ymw7.js +0 -3
  494. package/dist/chunk-jjamhxpm.js +0 -139
  495. package/dist/chunk-jjb05d21.js +0 -3
  496. package/dist/chunk-jjdq01dv.js +0 -128
  497. package/dist/chunk-jnmgm2xw.js +0 -5
  498. package/dist/chunk-jpndqst5.js +0 -3
  499. package/dist/chunk-jt0ezawy.js +0 -351
  500. package/dist/chunk-jz73j3qs.js +0 -169
  501. package/dist/chunk-k21df0pg.js +0 -10
  502. package/dist/chunk-k848dzsa.js +0 -429
  503. package/dist/chunk-kdfe4t91.js +0 -3
  504. package/dist/chunk-keawsbpn.js +0 -5
  505. package/dist/chunk-kgym7ch9.js +0 -8
  506. package/dist/chunk-khdn7jwe.js +0 -3
  507. package/dist/chunk-km25cwz6.js +0 -3
  508. package/dist/chunk-knm8a8yx.js +0 -398
  509. package/dist/chunk-krqn0ddk.js +0 -3
  510. package/dist/chunk-ktkmvaa8.js +0 -1
  511. package/dist/chunk-kx6eb6ma.js +0 -4
  512. package/dist/chunk-kypas8vy.js +0 -4
  513. package/dist/chunk-m167kjhv.js +0 -4
  514. package/dist/chunk-m491r0rj.js +0 -358
  515. package/dist/chunk-m8448qby.js +0 -11
  516. package/dist/chunk-mgj88zeq.js +0 -64
  517. package/dist/chunk-mhgk632d.js +0 -3
  518. package/dist/chunk-mv4fb50w.js +0 -1
  519. package/dist/chunk-n5kg7fpx.js +0 -7
  520. package/dist/chunk-n98x35xd.js +0 -8
  521. package/dist/chunk-n9dhs1dw.js +0 -106
  522. package/dist/chunk-nd9rmddh.js +0 -6
  523. package/dist/chunk-ngxfwzq3.js +0 -3
  524. package/dist/chunk-nhv099jv.js +0 -19
  525. package/dist/chunk-nm15ccsg.js +0 -5
  526. package/dist/chunk-npfmdb6y.js +0 -71
  527. package/dist/chunk-nvwb4x04.js +0 -3
  528. package/dist/chunk-nw34xajc.js +0 -8
  529. package/dist/chunk-p077sw22.js +0 -3
  530. package/dist/chunk-p1h8065h.js +0 -3
  531. package/dist/chunk-p3e0cqtt.js +0 -34
  532. package/dist/chunk-p3fpb79v.js +0 -477
  533. package/dist/chunk-p52yzjq6.js +0 -498
  534. package/dist/chunk-p73meypx.js +0 -134
  535. package/dist/chunk-pa9zb7ty.js +0 -4
  536. package/dist/chunk-payfb24w.js +0 -207
  537. package/dist/chunk-pcm1vd8w.js +0 -3
  538. package/dist/chunk-pcntd9h4.js +0 -3
  539. package/dist/chunk-pg1fvqb9.js +0 -167
  540. package/dist/chunk-psc3wfcf.js +0 -1115
  541. package/dist/chunk-pznnww6k.js +0 -6
  542. package/dist/chunk-q6zhd9yf.js +0 -3
  543. package/dist/chunk-qa59zejf.js +0 -246
  544. package/dist/chunk-qvrbjpdc.js +0 -3
  545. package/dist/chunk-qygvvygy.js +0 -12
  546. package/dist/chunk-r0jcmpv6.js +0 -68
  547. package/dist/chunk-r5m9xtm7.js +0 -3
  548. package/dist/chunk-rh80q1nd.js +0 -1
  549. package/dist/chunk-rkffm9sy.js +0 -128
  550. package/dist/chunk-rpx5fa65.js +0 -3
  551. package/dist/chunk-rqxf5hns.js +0 -3
  552. package/dist/chunk-rtr974rc.js +0 -30
  553. package/dist/chunk-rvptcndz.js +0 -3
  554. package/dist/chunk-rw26rpek.js +0 -171
  555. package/dist/chunk-rw7937v4.js +0 -19
  556. package/dist/chunk-rwrv9wbf.js +0 -3
  557. package/dist/chunk-rz2ec6g7.js +0 -347
  558. package/dist/chunk-s6ja2bdg.js +0 -66
  559. package/dist/chunk-scpkdrdb.js +0 -4
  560. package/dist/chunk-shv88d2d.js +0 -10
  561. package/dist/chunk-t0c9wvpr.js +0 -3
  562. package/dist/chunk-tffh3b1e.js +0 -35
  563. package/dist/chunk-tg2f1mzq.js +0 -11
  564. package/dist/chunk-trfswy66.js +0 -77
  565. package/dist/chunk-tzwtg722.js +0 -3
  566. package/dist/chunk-v7f8jj15.js +0 -4
  567. package/dist/chunk-v8j49spx.js +0 -3
  568. package/dist/chunk-v97390pe.js +0 -1
  569. package/dist/chunk-vcr5pzpx.js +0 -233
  570. package/dist/chunk-veeerpwa.js +0 -3
  571. package/dist/chunk-vg5kt6az.js +0 -4
  572. package/dist/chunk-vgv7jvyz.js +0 -219
  573. package/dist/chunk-vjbefncc.js +0 -3
  574. package/dist/chunk-vmxjghsm.js +0 -3
  575. package/dist/chunk-vw7vqd76.js +0 -3
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w3b6m427.js +0 -45
  578. package/dist/chunk-wazkqv7n.js +0 -3
  579. package/dist/chunk-wf7zrjsw.js +0 -138
  580. package/dist/chunk-wfg2gm11.js +0 -3
  581. package/dist/chunk-wg9k6h8w.js +0 -12
  582. package/dist/chunk-wkz2vwkr.js +0 -81
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wvf31nzs.js +0 -3
  585. package/dist/chunk-x05nxhyv.js +0 -262
  586. package/dist/chunk-x0770gt9.js +0 -4
  587. package/dist/chunk-x24s4heg.js +0 -1166
  588. package/dist/chunk-x3r64r0c.js +0 -6
  589. package/dist/chunk-x5g9w4hh.js +0 -5
  590. package/dist/chunk-xgkv66q5.js +0 -2230
  591. package/dist/chunk-xqq1vxb6.js +0 -1
  592. package/dist/chunk-xs03kc1h.js +0 -196
  593. package/dist/chunk-xv34zbp4.js +0 -3
  594. package/dist/chunk-xw36p73h.js +0 -90
  595. package/dist/chunk-xyg1r5w0.js +0 -4
  596. package/dist/chunk-xys2sxh6.js +0 -16
  597. package/dist/chunk-y0qg6rrv.js +0 -3
  598. package/dist/chunk-y1k17c8b.js +0 -21
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y6xsqe9a.js +0 -10
  601. package/dist/chunk-yb1t2h8h.js +0 -11
  602. package/dist/chunk-ygvyc6wv.js +0 -90
  603. package/dist/chunk-yj4x5ehw.js +0 -21
  604. package/dist/chunk-yn38c15w.js +0 -4
  605. package/dist/chunk-ynhngsdh.js +0 -3
  606. package/dist/chunk-yrsb6j3z.js +0 -3
  607. package/dist/chunk-yywfvfph.js +0 -2
  608. package/dist/chunk-zcxzdrn7.js +0 -5
  609. package/dist/chunk-zen6ax1y.js +0 -27
  610. package/dist/chunk-zf2pek72.js +0 -3
  611. package/dist/chunk-zk3d0jjf.js +0 -7
  612. package/dist/chunk-zy3rp1ab.js +0 -93
@@ -1,2 +1,897 @@
1
- // @bun
2
- import{$h as f,Wh as a,Xh as b,Yh as c,Zh as d,_h as e}from"./chunk-p3fpb79v.js";import"./chunk-xv34zbp4.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
+ }