@stacksjs/stx 0.2.95 → 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 (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,428 @@
1
- // @bun
2
- import{Hp as a,Ip as b,Jp as c,Kp as d,Lp as e}from"./chunk-m491r0rj.js";import"./chunk-xv34zbp4.js";export{a as processAsyncDirectives,c as isAsyncComponent,e as generateAsyncComponentRuntime,d as generateAsyncComponentCSS,b as defineAsyncComponent};
1
+ let asyncIdCounter = 0;
2
+ function generateAsyncId() {
3
+ return `async-${++asyncIdCounter}-${Date.now().toString(36)}`;
4
+ }
5
+ export function processAsyncDirectives(template, _context = {}, _filePath) {
6
+ const asyncWithErrorRegex = /@async\s*\(([^)]*)\)\s*([\s\S]*?)@error\s*([\s\S]*?)@endasync/gi, asyncWithoutErrorRegex = /@async\s*\(([^)]*)\)\s*([\s\S]*?)@endasync/gi;
7
+ let result = template;
8
+ result = result.replace(asyncWithErrorRegex, (_match, optionsStr, loadingContent, errorContent) => {
9
+ const asyncId = generateAsyncId(), options = parseAsyncOptions(optionsStr);
10
+ return generateAsyncComponentHtml(asyncId, options, loadingContent.trim(), errorContent.trim());
11
+ });
12
+ result = result.replace(asyncWithoutErrorRegex, (_match, optionsStr, loadingContent) => {
13
+ const asyncId = generateAsyncId(), options = parseAsyncOptions(optionsStr);
14
+ return generateAsyncComponentHtml(asyncId, options, loadingContent.trim(), '<div class="stx-async-error">Failed to load component</div>');
15
+ });
16
+ return result;
17
+ }
18
+ function parseAsyncOptions(optionsStr) {
19
+ const options = {
20
+ component: "",
21
+ timeout: 30000,
22
+ delay: 200,
23
+ suspensible: !0,
24
+ retries: 0
25
+ }, keyValueRegex = /(\w+)\s*:\s*(?:'([^']*)'|"([^"]*)"|(\d+)|(\w+))/g;
26
+ let match;
27
+ while ((match = keyValueRegex.exec(optionsStr)) !== null) {
28
+ const key = match[1], strValue = match[2] || match[3], numValue = match[4], boolOrId = match[5];
29
+ switch (key) {
30
+ case "component":
31
+ options.component = strValue || boolOrId || "";
32
+ break;
33
+ case "timeout":
34
+ options.timeout = numValue ? parseInt(numValue, 10) : 30000;
35
+ break;
36
+ case "delay":
37
+ options.delay = numValue ? parseInt(numValue, 10) : 200;
38
+ break;
39
+ case "suspensible":
40
+ options.suspensible = boolOrId === "true";
41
+ break;
42
+ case "retries":
43
+ options.retries = numValue ? parseInt(numValue, 10) : 0;
44
+ break;
45
+ case "loadingComponent":
46
+ options.loadingComponent = strValue || boolOrId;
47
+ break;
48
+ case "errorComponent":
49
+ options.errorComponent = strValue || boolOrId;
50
+ break;
51
+ }
52
+ }
53
+ return options;
54
+ }
55
+ function generateAsyncComponentHtml(asyncId, options, loadingContent, errorContent) {
56
+ const { component, timeout, delay, suspensible, retries } = options;
57
+ return `
58
+ <div class="stx-async-component" data-async-id="${asyncId}" data-component="${component}" data-status="pending">
59
+ <div class="stx-async-loading" data-async-loading="${asyncId}">
60
+ ${loadingContent}
61
+ </div>
62
+ <div class="stx-async-content" data-async-content="${asyncId}" style="display: none;">
63
+ </div>
64
+ <div class="stx-async-error" data-async-error="${asyncId}" style="display: none;">
65
+ ${errorContent}
66
+ </div>
67
+ </div>
68
+ <script>
69
+ (function() {
70
+ const asyncId = '${asyncId}';
71
+ const componentPath = '${component}';
72
+ const timeout = ${timeout};
73
+ const delay = ${delay};
74
+ const suspensible = ${suspensible};
75
+ const maxRetries = ${retries};
76
+
77
+ const container = document.querySelector('[data-async-id="' + asyncId + '"]');
78
+ const loadingEl = document.querySelector('[data-async-loading="' + asyncId + '"]');
79
+ const contentEl = document.querySelector('[data-async-content="' + asyncId + '"]');
80
+ const errorEl = document.querySelector('[data-async-error="' + asyncId + '"]');
81
+
82
+ if (!container || !loadingEl || !contentEl || !errorEl) return;
83
+
84
+ let attempts = 0;
85
+ let delayTimer = null;
86
+ let timeoutTimer = null;
87
+ let resolved = false;
88
+ let aborted = false;
89
+
90
+ // AbortController + container detachment guards (stacksjs/stx#1720). Without
91
+ // these, an in-flight fetch from a previous page would write innerHTML on
92
+ // a detached container after the user SPA-navigated away, or \u2014 for
93
+ // components removed via :if/parent toggle \u2014 would log a "rejected" state
94
+ // on a node that no longer exists. The router dispatches stx:navigate
95
+ // when a navigation starts; we treat that as a teardown signal. The
96
+ // isConnected check covers non-router unmounts (:if false, parent remove).
97
+ const controller = new AbortController();
98
+ function teardown() {
99
+ if (aborted) return;
100
+ aborted = true;
101
+ controller.abort();
102
+ clearTimeout(delayTimer);
103
+ clearTimeout(timeoutTimer);
104
+ window.removeEventListener('stx:navigate', teardown);
105
+ }
106
+ window.addEventListener('stx:navigate', teardown);
107
+
108
+ // Update state
109
+ function setState(status) {
110
+ container.setAttribute('data-status', status);
111
+ loadingEl.style.display = status === 'loading' ? '' : 'none';
112
+ contentEl.style.display = status === 'resolved' ? '' : 'none';
113
+ errorEl.style.display = status === 'rejected' ? '' : 'none';
114
+ }
115
+
116
+ // Show loading after delay
117
+ function showLoading() {
118
+ if (!resolved) {
119
+ setState('loading');
120
+ }
121
+ }
122
+
123
+ // Load component
124
+ async function loadComponent() {
125
+ attempts++;
126
+
127
+ // Start delay timer for loading state
128
+ delayTimer = setTimeout(showLoading, delay);
129
+
130
+ // Start timeout timer
131
+ timeoutTimer = setTimeout(function() {
132
+ if (!resolved) {
133
+ handleError(new Error('Component load timeout after ' + timeout + 'ms'));
134
+ }
135
+ }, timeout);
136
+
137
+ try {
138
+ // Notify Suspense boundary if suspensible
139
+ if (suspensible && window.STX && window.STX.suspense) {
140
+ window.STX.suspense.register(asyncId);
141
+ }
142
+
143
+ // Fetch the component with the AbortController signal so a teardown
144
+ // (SPA navigation, component unmount) cancels the in-flight request.
145
+ const response = await fetch('/_stx/component/' + encodeURIComponent(componentPath), {
146
+ signal: controller.signal
147
+ });
148
+
149
+ if (!response.ok) {
150
+ throw new Error('Failed to load component: ' + response.statusText);
151
+ }
152
+
153
+ const html = await response.text();
154
+
155
+ // Clear timers
156
+ clearTimeout(delayTimer);
157
+ clearTimeout(timeoutTimer);
158
+
159
+ // Belt-and-suspenders: if the container was removed between the fetch
160
+ // starting and now (e.g. :if flipped to false, or a non-router parent
161
+ // mutation), bail before writing innerHTML on a detached node.
162
+ if (aborted || !container.isConnected) return;
163
+
164
+ resolved = true;
165
+ contentEl.innerHTML = html;
166
+ setState('resolved');
167
+
168
+ // Execute any scripts in the loaded component
169
+ contentEl.querySelectorAll('script').forEach(function(script) {
170
+ const newScript = document.createElement('script');
171
+ if (script.src) {
172
+ newScript.src = script.src;
173
+ }
174
+ else {
175
+ newScript.textContent = script.textContent;
176
+ }
177
+ script.parentNode.replaceChild(newScript, script);
178
+ });
179
+
180
+ // Process signals/bindings on the loaded content ({{ }}, :attr, @event, etc.)
181
+ if (window.stx && window.stx._latestSetup) {
182
+ window.dispatchEvent(new Event('stx:load'));
183
+ }
184
+
185
+ // Notify Suspense boundary
186
+ if (suspensible && window.STX && window.STX.suspense) {
187
+ window.STX.suspense.resolve(asyncId);
188
+ }
189
+
190
+ // Dispatch loaded event
191
+ container.dispatchEvent(new CustomEvent('stx:async:loaded', {
192
+ detail: { asyncId: asyncId, component: componentPath },
193
+ bubbles: true
194
+ }));
195
+
196
+ // Load succeeded \u2014 drop the navigate-teardown listener so it doesn't
197
+ // accumulate per async component across an app's lifetime.
198
+ window.removeEventListener('stx:navigate', teardown);
199
+ }
200
+ catch (error) {
201
+ // AbortError fires when teardown() runs during an in-flight fetch.
202
+ // That's not a load failure \u2014 the component is being unmounted, so
203
+ // don't render the rejected state, don't retry, don't dispatch error.
204
+ if (aborted || (error && error.name === 'AbortError')) return;
205
+ handleError(error);
206
+ }
207
+ }
208
+
209
+ // Handle errors
210
+ function handleError(error) {
211
+ clearTimeout(delayTimer);
212
+ clearTimeout(timeoutTimer);
213
+
214
+ // The container may have been removed (e.g., a non-router :if toggle)
215
+ // between the failure and now. No DOM left to write the error state to.
216
+ if (aborted || !container.isConnected) return;
217
+
218
+ if (attempts < maxRetries) {
219
+ // Retry
220
+ console.warn('[stx:async:' + asyncId + '] Retrying... (' + attempts + '/' + maxRetries + ')');
221
+ setTimeout(loadComponent, 1000 * attempts); // Exponential backoff
222
+ return;
223
+ }
224
+
225
+ resolved = true;
226
+ setState('rejected');
227
+
228
+ // Update error content with error message
229
+ const errorMsgEl = errorEl.querySelector('[data-error-message]');
230
+ if (errorMsgEl) {
231
+ errorMsgEl.textContent = error.message;
232
+ }
233
+
234
+ // Notify Suspense boundary
235
+ if (suspensible && window.STX && window.STX.suspense) {
236
+ window.STX.suspense.reject(asyncId, error);
237
+ }
238
+
239
+ // Dispatch error event
240
+ container.dispatchEvent(new CustomEvent('stx:async:error', {
241
+ detail: { asyncId: asyncId, component: componentPath, error: error },
242
+ bubbles: true
243
+ }));
244
+
245
+ console.error('[stx:async:' + asyncId + ']', error);
246
+
247
+ // Final error state \u2014 no more retries. Drop the navigate listener so it
248
+ // doesn't outlive the (failed) component.
249
+ window.removeEventListener('stx:navigate', teardown);
250
+ }
251
+
252
+ // Retry function
253
+ function retry() {
254
+ resolved = false;
255
+ attempts = 0;
256
+ setState('pending');
257
+ loadComponent();
258
+ }
259
+
260
+ // Expose retry function
261
+ window['$stxAsyncRetry_' + asyncId.replace(/-/g, '_')] = retry;
262
+
263
+ // Make $retry available within the error content
264
+ errorEl.querySelectorAll('[onclick*="$retry"]').forEach(function(el) {
265
+ const onclick = el.getAttribute('onclick');
266
+ if (onclick) {
267
+ el.setAttribute('onclick', onclick.replace(/\\$retry\\(\\)/g, "window['$stxAsyncRetry_" + asyncId.replace(/-/g, '_') + "']()"));
268
+ }
269
+ });
270
+
271
+ // Expose API
272
+ window.STX = window.STX || {};
273
+ window.STX.asyncComponents = window.STX.asyncComponents || {};
274
+ window.STX.asyncComponents[asyncId] = {
275
+ getStatus: function() { return container.getAttribute('data-status'); },
276
+ retry: retry,
277
+ getAttempts: function() { return attempts; }
278
+ };
279
+
280
+ // Start loading
281
+ loadComponent();
282
+ })();
283
+ </script>
284
+ `;
285
+ }
286
+ export function defineAsyncComponent(options) {
287
+ return {
288
+ __asyncComponent: !0,
289
+ ...typeof options === "function" ? { loader: options } : options
290
+ };
291
+ }
292
+ export function isAsyncComponent(value) {
293
+ return typeof value === "object" && value !== null && "__asyncComponent" in value && value.__asyncComponent === !0;
294
+ }
295
+ export function generateAsyncComponentCSS() {
296
+ return `
297
+ /* STX Async Component Styles */
298
+ .stx-async-component {
299
+ position: relative;
300
+ }
301
+
302
+ .stx-async-loading {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: center;
306
+ min-height: 100px;
307
+ }
308
+
309
+ .stx-async-error {
310
+ padding: 1rem;
311
+ border: 1px solid #ef4444;
312
+ border-radius: 0.5rem;
313
+ background-color: #fef2f2;
314
+ color: #991b1b;
315
+ }
316
+
317
+ .stx-async-error button {
318
+ margin-top: 0.5rem;
319
+ padding: 0.5rem 1rem;
320
+ border: 1px solid #ef4444;
321
+ border-radius: 0.25rem;
322
+ background-color: #ef4444;
323
+ color: white;
324
+ cursor: pointer;
325
+ }
326
+
327
+ .stx-async-error button:hover {
328
+ background-color: #dc2626;
329
+ }
330
+
331
+ /* Loading spinner animation */
332
+ @keyframes stx-async-spin {
333
+ to { transform: rotate(360deg); }
334
+ }
335
+
336
+ .stx-async-spinner {
337
+ width: 24px;
338
+ height: 24px;
339
+ border: 2px solid #e5e7eb;
340
+ border-top-color: #3b82f6;
341
+ border-radius: 50%;
342
+ animation: stx-async-spin 0.8s linear infinite;
343
+ }
344
+
345
+ /* Skeleton loading */
346
+ .stx-async-skeleton {
347
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
348
+ background-size: 200% 100%;
349
+ animation: stx-async-shimmer 1.5s infinite;
350
+ border-radius: 0.25rem;
351
+ }
352
+
353
+ @keyframes stx-async-shimmer {
354
+ 0% { background-position: 200% 0; }
355
+ 100% { background-position: -200% 0; }
356
+ }
357
+
358
+ /* Dark mode */
359
+ @media (prefers-color-scheme: dark) {
360
+ .stx-async-error {
361
+ background-color: #450a0a;
362
+ color: #fecaca;
363
+ }
364
+
365
+ .stx-async-skeleton {
366
+ background: linear-gradient(90deg, #374151 25%, #4b5563 50%, #374151 75%);
367
+ background-size: 200% 100%;
368
+ }
369
+ }
370
+ `;
371
+ }
372
+ export function generateAsyncComponentRuntime() {
373
+ return `
374
+ // STX Async Component Runtime
375
+ (function() {
376
+ if (typeof window === 'undefined') return;
377
+
378
+ window.STX = window.STX || {};
379
+ window.STX.asyncComponents = window.STX.asyncComponents || {};
380
+
381
+ // Load a component dynamically
382
+ window.STX.loadComponent = async function(componentPath, targetSelector, options) {
383
+ options = options || {};
384
+ const target = document.querySelector(targetSelector);
385
+ if (!target) {
386
+ throw new Error('Target element not found: ' + targetSelector);
387
+ }
388
+
389
+ const loadingHtml = options.loading || '<div class="stx-async-spinner"></div>';
390
+ target.innerHTML = loadingHtml;
391
+
392
+ try {
393
+ const response = await fetch('/_stx/component/' + encodeURIComponent(componentPath));
394
+ if (!response.ok) {
395
+ throw new Error('Failed to load: ' + response.statusText);
396
+ }
397
+
398
+ const html = await response.text();
399
+ target.innerHTML = html;
400
+
401
+ // Execute scripts
402
+ target.querySelectorAll('script').forEach(function(script) {
403
+ const newScript = document.createElement('script');
404
+ if (script.src) {
405
+ newScript.src = script.src;
406
+ }
407
+ else {
408
+ newScript.textContent = script.textContent;
409
+ }
410
+ script.parentNode.replaceChild(newScript, script);
411
+ });
412
+
413
+ if (options.onLoad) options.onLoad();
414
+ return true;
415
+ }
416
+ catch (error) {
417
+ if (options.error) {
418
+ target.innerHTML = options.error;
419
+ }
420
+ if (options.onError) options.onError(error);
421
+ throw error;
422
+ }
423
+ };
424
+
425
+ console.log('[stx] Async component runtime initialized');
426
+ })();
427
+ `;
428
+ }
package/dist/auth.js CHANGED
@@ -1,2 +1,12 @@
1
- // @bun
2
- import{jz as a}from"./chunk-qvrbjpdc.js";import"./chunk-w3b6m427.js";import"./chunk-xv34zbp4.js";export{a as evaluateAuthExpression};
1
+ import { createSafeFunction, isExpressionSafe, safeEvaluate } from "./safe-evaluator.js";
2
+ export function evaluateAuthExpression(expression, context) {
3
+ try {
4
+ const trimmedExpr = expression.trim();
5
+ if (isExpressionSafe(trimmedExpr))
6
+ return createSafeFunction(trimmedExpr, Object.keys(context))(...Object.values(context));
7
+ else
8
+ return safeEvaluate(trimmedExpr, context);
9
+ } catch {
10
+ return !1;
11
+ }
12
+ }
@@ -1,2 +1,102 @@
1
- // @bun
2
- import{Mp as a,Np as b,Op as c,Pp as d,Qp as e,Rp as f,Sp as g,Tp as h,Up as i,Vp as j,Wp as k,Xp as l}from"./chunk-aywxfqev.js";import"./chunk-xv34zbp4.js";export{g as toUsers,f as toUser,c as stopBroadcasting,b as startBroadcasting,d as loadChannels,a as getBroadcastServer,j as channel,h as broadcastPrivate,i as broadcastPresence,e as broadcast,l as BroadcastServer,k as Broadcast};
1
+ import {
2
+ Broadcast,
3
+ BroadcastServer
4
+ } from "ts-broadcasting";
5
+ let _server = null;
6
+ const _intervals = [];
7
+ export function getBroadcastServer() {
8
+ return _server;
9
+ }
10
+ export async function startBroadcasting(config) {
11
+ if (_server)
12
+ return _server;
13
+ const driver = config.driver ?? "bun", host = config.host ?? "0.0.0.0", port = config.port ?? 6001, scheme = config.scheme ?? "ws", serverConfig = {
14
+ verbose: config.verbose ?? !1,
15
+ driver,
16
+ default: driver,
17
+ connections: {
18
+ [driver]: {
19
+ driver,
20
+ host,
21
+ port,
22
+ scheme
23
+ }
24
+ }
25
+ };
26
+ _server = new BroadcastServer(serverConfig);
27
+ Broadcast.setServer(_server);
28
+ await _server.start();
29
+ return _server;
30
+ }
31
+ export async function stopBroadcasting() {
32
+ for (const id of _intervals)
33
+ clearInterval(id);
34
+ _intervals.length = 0;
35
+ if (!_server)
36
+ return;
37
+ await _server.stop();
38
+ _server = null;
39
+ }
40
+ export async function loadChannels(channelsPath) {
41
+ const mod = await import(channelsPath), setup = mod.default ?? mod;
42
+ if (typeof setup !== "function")
43
+ throw Error(`routes/channels.ts must export a default function, got ${typeof setup}`);
44
+ let count = 0;
45
+ setup({
46
+ channel(name, def) {
47
+ count++;
48
+ if (def.authorize && _server)
49
+ _server.channels.channel(name, def.authorize);
50
+ if (def.interval && def.data) {
51
+ const eventName = def.event ?? `${name}.updated`, fn = def.data, id = setInterval(async () => {
52
+ try {
53
+ const payload = await fn();
54
+ broadcast(name, eventName, payload);
55
+ } catch {}
56
+ }, def.interval);
57
+ _intervals.push(id);
58
+ }
59
+ }
60
+ });
61
+ return count;
62
+ }
63
+ let _warnedOnce = !1;
64
+ function isReady() {
65
+ if (_server)
66
+ return !0;
67
+ if (!_warnedOnce) {
68
+ _warnedOnce = !0;
69
+ console.warn("[stx] broadcast() called before server started \u2014 messages will be sent once broadcasting is ready");
70
+ }
71
+ return !1;
72
+ }
73
+ export function broadcast(channels, event, data) {
74
+ if (!isReady())
75
+ return;
76
+ Broadcast.send(channels, event, data);
77
+ }
78
+ export { channel } from "ts-broadcasting";
79
+ export function toUser(userId, event, data) {
80
+ if (!isReady())
81
+ return;
82
+ Broadcast.toUser(userId, event, data);
83
+ }
84
+ export function toUsers(userIds, event, data) {
85
+ if (!isReady())
86
+ return;
87
+ Broadcast.toUsers(userIds, event, data);
88
+ }
89
+ export function broadcastPrivate(channelName, event, data) {
90
+ if (!isReady())
91
+ return;
92
+ Broadcast.send(`private-${channelName}`, event, data);
93
+ }
94
+ export function broadcastPresence(channelName, event, data) {
95
+ if (!isReady())
96
+ return;
97
+ Broadcast.presence(channelName, event, data);
98
+ }
99
+ export {
100
+ Broadcast,
101
+ BroadcastServer
102
+ } from "ts-broadcasting";