@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,90 +0,0 @@
1
- // @bun
2
- var z=new Map;function q(h){if(z.has(h.id))console.warn(`Addon "${h.id}" is already registered, overwriting...`);z.set(h.id,h)}function N(h){return z.delete(h)}function O(){return Array.from(z.values())}function P(h){return z.get(h)}async function Q(h){for(let j of z.values())if(j.init)await j.init(h)}function S(h,j){let B=h;for(let C of z.values())if(C.decorator)B=C.decorator(B,j);return B}function T(){let h=[];for(let j of z.values())if(j.panel)h.push(j.panel);return h}function U(){let h=[];for(let j of z.values())if(j.toolbar)h.push(...j.toolbar);return h}var D={name:"Actions",id:"actions",panel:{id:"actions-panel",title:"Actions",icon:"ph:lightning",render:(h)=>{return`
3
- <div class="addon-actions">
4
- <div class="addon-actions-header">
5
- <span>Event Log</span>
6
- <button onclick="window.__stxStory.clearActions()">Clear</button>
7
- </div>
8
- <div class="addon-actions-list" id="actions-list">
9
- <div class="addon-actions-empty">No actions logged yet</div>
10
- </div>
11
- </div>
12
- `}}},E={name:"Viewport",id:"viewport",toolbar:[{id:"viewport-select",title:"Viewport",icon:"ph:device-mobile",render:(h)=>{return`
13
- <select id="viewport-select" onchange="window.__stxStory.setViewport(this.value)">
14
- <option value="">Responsive</option>
15
- ${h.storyContext.config.responsivePresets.map((C)=>`<option value="${C.width}">${C.label}</option>`).join("")}
16
- </select>
17
- `}}]},F={name:"Backgrounds",id:"backgrounds",toolbar:[{id:"background-select",title:"Background",icon:"ph:paint-bucket",render:(h)=>{return`
18
- <select id="background-select" onchange="window.__stxStory.setBackground(this.value)">
19
- ${h.storyContext.config.backgroundPresets.map((C)=>`<option value="${C.color}">${C.label}</option>`).join("")}
20
- </select>
21
- `}}]},G={name:"Docs",id:"docs",panel:{id:"docs-panel",title:"Docs",icon:"ph:book-open",render:(h)=>{return`
22
- <div class="addon-docs">
23
- <div class="addon-docs-content" id="docs-content">
24
- Select a story to view documentation
25
- </div>
26
- </div>
27
- `}}},H={name:"Measure",id:"measure",toolbar:[{id:"measure-toggle",title:"Measure",icon:"ph:ruler",render:()=>{return`
28
- <button
29
- class="toolbar-btn"
30
- onclick="window.__stxStory.toggleMeasure()"
31
- title="Toggle measure overlay"
32
- >
33
- \uD83D\uDCCF
34
- </button>
35
- `}}]},I={name:"Outline",id:"outline",toolbar:[{id:"outline-toggle",title:"Outline",icon:"ph:bounding-box",render:()=>{return`
36
- <button
37
- class="toolbar-btn"
38
- onclick="window.__stxStory.toggleOutline()"
39
- title="Toggle outline overlay"
40
- >
41
- \u2B1C
42
- </button>
43
- `}}]},J={name:"i18n",id:"i18n",toolbar:[{id:"locale-select",title:"Locale",icon:"ph:globe",render:()=>{return`
44
- <select id="locale-select" onchange="window.__stxStory.setLocale(this.value)">
45
- ${["en","es","fr","de","ja","zh"].map((B)=>`<option value="${B}">${B.toUpperCase()}</option>`).join("")}
46
- </select>
47
- `}}]},K={name:"Performance",id:"performance",panel:{id:"performance-panel",title:"Performance",icon:"ph:timer",render:()=>{return`
48
- <div class="addon-performance">
49
- <div class="addon-performance-metrics" id="perf-metrics">
50
- <div class="perf-metric">
51
- <span class="perf-label">Render Time</span>
52
- <span class="perf-value" id="perf-render">-</span>
53
- </div>
54
- <div class="perf-metric">
55
- <span class="perf-label">DOM Nodes</span>
56
- <span class="perf-value" id="perf-nodes">-</span>
57
- </div>
58
- <div class="perf-metric">
59
- <span class="perf-label">Memory</span>
60
- <span class="perf-value" id="perf-memory">-</span>
61
- </div>
62
- <div class="perf-metric">
63
- <span class="perf-label">Re-renders</span>
64
- <span class="perf-value" id="perf-rerenders">0</span>
65
- </div>
66
- </div>
67
- <button onclick="window.__stxStory.measurePerformance()">Measure</button>
68
- </div>
69
- `}}},L={name:"State",id:"state",panel:{id:"state-panel",title:"State",icon:"ph:database",render:()=>{return`
70
- <div class="addon-state">
71
- <div class="addon-state-header">
72
- <span>Component State</span>
73
- <button onclick="window.__stxStory.refreshState()">Refresh</button>
74
- </div>
75
- <div class="addon-state-tree" id="state-tree">
76
- <pre>// Select a story to inspect state</pre>
77
- </div>
78
- </div>
79
- `}}},M={name:"Accessibility",id:"a11y",panel:{id:"a11y-panel",title:"A11y",icon:"ph:wheelchair",render:()=>{return`
80
- <div class="addon-a11y">
81
- <div class="addon-a11y-header">
82
- <span>Accessibility Audit</span>
83
- <button onclick="window.__stxStory.runA11yAudit()">Run Audit</button>
84
- </div>
85
- <div class="addon-a11y-results" id="a11y-results">
86
- <div class="a11y-empty">Click "Run Audit" to check accessibility</div>
87
- </div>
88
- </div>
89
- `}}};function V(){q(D),q(E),q(F),q(G),q(H),q(I),q(J),q(K),q(L),q(M)}
90
- export{q as md,N as nd,O as od,P as pd,Q as qd,S as rd,T as sd,U as td,D as ud,E as vd,F as wd,G as xd,H as yd,I as zd,J as Ad,K as Bd,L as Cd,M as Dd,V as Ed};
@@ -1 +0,0 @@
1
- // @bun
@@ -1,216 +0,0 @@
1
- // @bun
2
- function w(Z,M){let{itemHeight:K,containerHeight:P,overscan:F=3,keyProperty:$="id",dynamicHeight:Q=!1,estimatedItemHeight:U=K,direction:G="vertical"}=M,k=[...Z],j=0,z=new Map;function _(){if(Q)return X();let q=Math.max(0,Math.floor(j/K)-F),A=Math.ceil(P/K),W=Math.min(k.length-1,q+A+F*2);return{startIndex:q,endIndex:W}}function X(){let q=0,A=0,W=k.length-1;for(let Y=0;Y<k.length;Y++){let V=z.get(Y)||U;if(q+V>j){A=Math.max(0,Y-F);break}q+=V}q=0;for(let Y=0;Y<k.length;Y++){let V=z.get(Y)||U;if(q+=V,q>j+P){W=Math.min(k.length-1,Y+F);break}}return{startIndex:A,endIndex:W}}function S(){if(Q){let q=0;for(let A=0;A<k.length;A++)q+=z.get(A)||U;return q}return k.length*K}function O(q){if(Q){let A=0;for(let W=0;W<q;W++)A+=z.get(W)||U;return A}return q*K}function N(){let{startIndex:q,endIndex:A}=_();return{startIndex:q,endIndex:A,scrollTop:j,totalHeight:S(),visibleItems:k.slice(q,A+1),itemHeights:new Map(z)}}function T(q,A="auto"){let W=O(q);J(W,A)}function J(q,A="auto"){j=Math.max(0,Math.min(q,S()-P))}function B(){_()}function y(q){k=[...q],z.clear(),B()}function D(){k=[],z.clear()}return{scrollToIndex:T,scrollToOffset:J,getState:N,refresh:B,setItems:y,destroy:D}}function C(Z,M={},K){let P=/@virtualList\s*\(\s*([^,]+)\s*(?:,\s*(\{[^}]*\}))?\s*\)\s*([\s\S]*?)@endvirtualList/gi;return Z.replace(P,(F,$,Q,U)=>{let G=$.trim(),k=M[G];if(!k||!Array.isArray(k))return`<!-- virtualList: items "${G}" not found or not an array -->`;let j={itemHeight:50,containerHeight:400,overscan:3};if(Q)try{let J=Q.trim(),B=Function(`return ${J}`)();j={...j,...B}}catch{}let z=`vlist-${Math.random().toString(36).substring(2,9)}`,_=Math.ceil(j.containerHeight/j.itemHeight),X=j.overscan||3,S=0,O=Math.min(k.length-1,_+X),N="";for(let J=S;J<=O&&J<k.length;J++){let B=k[J],y=U.replace(/\{\{\s*item\s*\}\}/g,typeof B==="object"?JSON.stringify(B):String(B)).replace(/\{\{\s*item\.(\w+)\s*\}\}/g,(D,q)=>{if(typeof B==="object"&&B!==null)return String(B[q]??"");return""}).replace(/\{\{\s*index\s*\}\}/g,String(J));N+=`
3
- <div class="virtual-item ${j.itemClass||""}"
4
- style="position: absolute; top: ${J*j.itemHeight}px; height: ${j.itemHeight}px; width: 100%;"
5
- data-index="${J}">
6
- ${y}
7
- </div>`}let T=k.length*j.itemHeight;return`
8
- <div id="${z}"
9
- class="virtual-list-container ${j.containerClass||""}"
10
- style="position: relative; height: ${j.containerHeight}px; overflow-y: auto;"
11
- data-item-height="${j.itemHeight}"
12
- data-total-items="${k.length}"
13
- data-overscan="${X}">
14
- <div class="virtual-list-viewport ${j.viewportClass||""}"
15
- style="position: relative; height: ${T}px; width: 100%;">
16
- ${N}
17
- </div>
18
- </div>
19
- <script data-virtual-list="${z}">
20
- (function() {
21
- const container = document.getElementById('${z}');
22
- if (!container) return;
23
-
24
- const viewport = container.querySelector('.virtual-list-viewport');
25
- const itemHeight = ${j.itemHeight};
26
- const totalItems = ${k.length};
27
- const overscan = ${X};
28
- const containerHeight = ${j.containerHeight};
29
- const items = ${JSON.stringify(k)};
30
- const template = ${JSON.stringify(U.trim())};
31
-
32
- let lastStartIndex = 0;
33
-
34
- function renderItems(scrollTop) {
35
- const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
36
- const visibleCount = Math.ceil(containerHeight / itemHeight);
37
- const endIndex = Math.min(totalItems - 1, startIndex + visibleCount + overscan * 2);
38
-
39
- if (startIndex === lastStartIndex) return;
40
- lastStartIndex = startIndex;
41
-
42
- // Clear and re-render
43
- viewport.innerHTML = '';
44
-
45
- for (let i = startIndex; i <= endIndex; i++) {
46
- const item = items[i];
47
- const div = document.createElement('div');
48
- div.className = 'virtual-item ${j.itemClass||""}';
49
- div.style.cssText = 'position: absolute; top: ' + (i * itemHeight) + 'px; height: ' + itemHeight + 'px; width: 100%;';
50
- div.dataset.index = i;
51
-
52
- let html = template
53
- .replace(/\\{\\{\\s*item\\s*\\}\\}/g, typeof item === 'object' ? JSON.stringify(item) : String(item))
54
- .replace(/\\{\\{\\s*item\\.(\\w+)\\s*\\}\\}/g, (_, prop) => {
55
- return typeof item === 'object' && item !== null ? String(item[prop] ?? '') : '';
56
- })
57
- .replace(/\\{\\{\\s*index\\s*\\}\\}/g, String(i));
58
-
59
- div.innerHTML = html;
60
- viewport.appendChild(div);
61
- }
62
- }
63
-
64
- container.addEventListener('scroll', function() {
65
- requestAnimationFrame(() => renderItems(container.scrollTop));
66
- });
67
-
68
- // Expose API
69
- container.__virtualList = {
70
- scrollToIndex: function(index) {
71
- container.scrollTop = index * itemHeight;
72
- },
73
- refresh: function() {
74
- renderItems(container.scrollTop);
75
- }
76
- };
77
- })();
78
- </script>
79
- `})}function b(){return`
80
- .virtual-list-container {
81
- position: relative;
82
- overflow-y: auto;
83
- overflow-x: hidden;
84
- }
85
-
86
- .virtual-list-container::-webkit-scrollbar {
87
- width: 8px;
88
- }
89
-
90
- .virtual-list-container::-webkit-scrollbar-track {
91
- background: rgba(0, 0, 0, 0.1);
92
- border-radius: 4px;
93
- }
94
-
95
- .virtual-list-container::-webkit-scrollbar-thumb {
96
- background: rgba(0, 0, 0, 0.3);
97
- border-radius: 4px;
98
- }
99
-
100
- .virtual-list-container::-webkit-scrollbar-thumb:hover {
101
- background: rgba(0, 0, 0, 0.5);
102
- }
103
-
104
- .virtual-list-viewport {
105
- position: relative;
106
- width: 100%;
107
- }
108
-
109
- .virtual-item {
110
- position: absolute;
111
- left: 0;
112
- right: 0;
113
- box-sizing: border-box;
114
- }
115
-
116
- /* Loading placeholder for items */
117
- .virtual-item-placeholder {
118
- background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
119
- background-size: 200% 100%;
120
- animation: virtual-shimmer 1.5s infinite;
121
- }
122
-
123
- @keyframes virtual-shimmer {
124
- 0% { background-position: 200% 0; }
125
- 100% { background-position: -200% 0; }
126
- }
127
- `}function L(Z,M){let K=null,P=()=>{if(!K)K=w(Z(),M);return K};return{visibleItems:()=>{return P().getState().visibleItems},totalHeight:()=>{return P().getState().totalHeight},containerProps:()=>({style:{height:`${M.containerHeight}px`,overflow:"auto",position:"relative"},onScroll:(F)=>{let $=F.target;if(K)K.scrollToOffset($.scrollTop)}}),itemProps:(F)=>({style:{position:"absolute",top:`${F*M.itemHeight}px`,height:`${M.itemHeight}px`,width:"100%"},"data-index":F}),scrollToIndex:(F)=>{P().scrollToIndex(F)}}}function E(Z,M={},K){let P=/@infiniteList\s*\(\s*([^,]+)\s*(?:,\s*(\{[^}]*\}))?\s*\)\s*([\s\S]*?)@loading\s*([\s\S]*?)@endinfiniteList/gi;return Z.replace(P,(F,$,Q,U,G)=>{let k=$.trim(),j=M[k];if(!j||!Array.isArray(j))return`<!-- infiniteList: items "${k}" not found or not an array -->`;let z={itemHeight:50,containerHeight:400,overscan:3,threshold:100,hasMore:!0};if(Q)try{let S=Function(`return ${Q.trim()}`)();z={...z,...S}}catch{}let _=`ilist-${Math.random().toString(36).substring(2,9)}`,X=C(`@virtualList(${k}, ${JSON.stringify({itemHeight:z.itemHeight,containerHeight:z.containerHeight,overscan:z.overscan,containerClass:z.containerClass})})${U}@endvirtualList`,M);return X=X.replace("</script>",`
128
- // Infinite scroll detection
129
- container.addEventListener('scroll', function() {
130
- const scrollBottom = container.scrollTop + container.clientHeight;
131
- const threshold = ${z.threshold};
132
- const totalHeight = viewport.offsetHeight;
133
-
134
- if (scrollBottom >= totalHeight - threshold) {
135
- container.dispatchEvent(new CustomEvent('loadmore', { bubbles: true }));
136
- }
137
- });
138
- </script>`),`
139
- <div id="${_}" class="infinite-list-wrapper">
140
- ${X}
141
- <div class="infinite-list-loading" style="display: none;">
142
- ${G}
143
- </div>
144
- </div>
145
- `})}function f(Z,M={},K){let P=/@virtualGrid\s*\(\s*([^,]+)\s*(?:,\s*(\{[^}]*\}))?\s*\)\s*([\s\S]*?)@endvirtualGrid/gi;return Z.replace(P,(F,$,Q,U)=>{let G=$.trim(),k=M[G];if(!k||!Array.isArray(k))return`<!-- virtualGrid: items "${G}" not found or not an array -->`;let j={columns:3,rowHeight:100,containerHeight:400,gap:10,overscan:2};if(Q)try{let B=Function(`return ${Q.trim()}`)();j={...j,...B}}catch{}let z=`vgrid-${Math.random().toString(36).substring(2,9)}`,_=Math.ceil(k.length/j.columns),X=_*(j.rowHeight+(j.gap||0)),S=Math.ceil(j.containerHeight/(j.rowHeight+(j.gap||0))),O=j.overscan||2,N=0,T=Math.min(_-1,S+O),J="";for(let B=N;B<=T;B++)for(let y=0;y<j.columns;y++){let D=B*j.columns+y;if(D>=k.length)break;let q=k[D],A=y*(100/j.columns),W=B*(j.rowHeight+(j.gap||0)),Y=U.replace(/\{\{\s*item\s*\}\}/g,typeof q==="object"?JSON.stringify(q):String(q)).replace(/\{\{\s*item\.(\w+)\s*\}\}/g,(V,R)=>{if(typeof q==="object"&&q!==null)return String(q[R]??"");return""}).replace(/\{\{\s*index\s*\}\}/g,String(D));J+=`
146
- <div class="virtual-grid-item"
147
- style="position: absolute; top: ${W}px; left: ${A}%; width: calc(${100/j.columns}% - ${j.gap||0}px); height: ${j.rowHeight}px;"
148
- data-index="${D}">
149
- ${Y}
150
- </div>`}return`
151
- <div id="${z}"
152
- class="virtual-grid-container"
153
- style="position: relative; height: ${j.containerHeight}px; overflow-y: auto;">
154
- <div class="virtual-grid-viewport"
155
- style="position: relative; height: ${X}px; width: 100%;">
156
- ${J}
157
- </div>
158
- </div>
159
- <script data-virtual-grid="${z}">
160
- (function() {
161
- const container = document.getElementById('${z}');
162
- if (!container) return;
163
-
164
- const viewport = container.querySelector('.virtual-grid-viewport');
165
- const columns = ${j.columns};
166
- const rowHeight = ${j.rowHeight};
167
- const gap = ${j.gap||0};
168
- const totalItems = ${k.length};
169
- const overscan = ${O};
170
- const containerHeight = ${j.containerHeight};
171
- const items = ${JSON.stringify(k)};
172
- const template = ${JSON.stringify(U.trim())};
173
-
174
- let lastStartRow = 0;
175
-
176
- function renderItems(scrollTop) {
177
- const startRow = Math.max(0, Math.floor(scrollTop / (rowHeight + gap)) - overscan);
178
- const visibleRowCount = Math.ceil(containerHeight / (rowHeight + gap));
179
- const endRow = Math.min(Math.ceil(totalItems / columns) - 1, startRow + visibleRowCount + overscan * 2);
180
-
181
- if (startRow === lastStartRow) return;
182
- lastStartRow = startRow;
183
-
184
- viewport.innerHTML = '';
185
-
186
- for (let row = startRow; row <= endRow; row++) {
187
- for (let col = 0; col < columns; col++) {
188
- const index = row * columns + col;
189
- if (index >= totalItems) break;
190
-
191
- const item = items[index];
192
- const div = document.createElement('div');
193
- div.className = 'virtual-grid-item';
194
- div.style.cssText = 'position: absolute; top: ' + (row * (rowHeight + gap)) + 'px; left: ' + (col * (100 / columns)) + '%; width: calc(' + (100 / columns) + '% - ' + gap + 'px); height: ' + rowHeight + 'px;';
195
- div.dataset.index = index;
196
-
197
- let html = template
198
- .replace(/\\{\\{\\s*item\\s*\\}\\}/g, typeof item === 'object' ? JSON.stringify(item) : String(item))
199
- .replace(/\\{\\{\\s*item\\.(\\w+)\\s*\\}\\}/g, (_, prop) => {
200
- return typeof item === 'object' && item !== null ? String(item[prop] ?? '') : '';
201
- })
202
- .replace(/\\{\\{\\s*index\\s*\\}\\}/g, String(index));
203
-
204
- div.innerHTML = html;
205
- viewport.appendChild(div);
206
- }
207
- }
208
- }
209
-
210
- container.addEventListener('scroll', function() {
211
- requestAnimationFrame(() => renderItems(container.scrollTop));
212
- });
213
- })();
214
- </script>
215
- `})}var v={createVirtualList:w,processVirtualListDirectives:C,processInfiniteListDirectives:E,processVirtualGridDirectives:f,generateVirtualListCSS:b,useVirtualList:L};
216
- export{w as wf,C as xf,b as yf,L as zf,E as Af,f as Bf,v as Cf};
@@ -1,4 +0,0 @@
1
- // @bun
2
- var H={1001:{message:"Unclosed directive: {{directive}}",help:"Make sure to close the directive with the appropriate end tag"},1002:{message:"Unclosed expression at position {{position}}",help:"Check for missing closing braces }}"},1003:{message:"Invalid directive syntax: {{directive}}",help:"Review the directive documentation for correct syntax"},1004:{message:"Malformed expression: {{expression}}",help:"Check for syntax errors in your expression"},1005:{message:"Unexpected token: {{token}}",help:"Remove or fix the unexpected token"},1101:{message:"Undefined variable: {{variable}}",help:"Make sure the variable is defined in the template context"},1102:{message:"Type error: {{details}}",help:"Check that you are using the correct types"},1103:{message:"Evaluation error: {{details}}",help:"Review the expression for errors"},1104:{message:"Infinite loop detected in {{location}}",help:"Check your loop conditions"},1105:{message:"Circular reference detected: {{path}}",help:"Remove the circular dependency"},1201:{message:"Unsafe expression blocked: {{expression}}",help:"This expression contains potentially dangerous code"},1202:{message:"Path traversal attempt blocked: {{path}}",help:"Use only relative paths within allowed directories"},1203:{message:"Potential XSS attempt blocked",help:"Sanitize user input before rendering"},1204:{message:"Code injection attempt blocked: {{code}}",help:"Avoid executing dynamic code"},1205:{message:"Prohibited DOM API usage: {{api}}",help:"Use STX.useRefs(), STX.useRef(), STX.el() and other STX helpers instead of direct DOM manipulation"},1301:{message:"File not found: {{path}}",help:"Check that the file exists and the path is correct"},1302:{message:"Error reading file: {{path}}",help:"Check file permissions and encoding"},1303:{message:"Invalid file path: {{path}}",help:"Use a valid file path"},1304:{message:"Permission denied: {{path}}",help:"Check file permissions"},1401:{message:"Invalid configuration: {{details}}",help:"Review your stx.config.ts file"},1402:{message:"Missing required configuration: {{key}}",help:"Add the required configuration option"},1403:{message:"Deprecated configuration: {{key}}",help:"Update to the new configuration format"},1501:{message:"Component not found: {{name}}",help:"Check that the component exists in your components directory"},1502:{message:"Invalid props for component {{name}}: {{details}}",help:"Check the component prop requirements"},1503:{message:"Error rendering component {{name}}: {{details}}",help:"Check the component template for errors"},1601:{message:"Filter not found: {{filter}}",help:"Register the filter or check the filter name"},1602:{message:"Invalid arguments for filter {{filter}}: {{details}}",help:"Check the filter documentation for correct arguments"},1603:{message:"Expression evaluation timed out",help:"Simplify the expression or increase the timeout"}},z={},D="en";function K(b){D=b}function N(){return D}function O(b){z={...z,...b}}function P(){z={}}function I(b,w={}){let j=z[b]||H[b]||{message:`Unknown error (code: ${b})`},q=j.message,x=j.help;for(let[F,A]of Object.entries(w)){let B=`{{${F}}}`;if(q=q.replace(new RegExp(B,"g"),A),x)x=x.replace(new RegExp(B,"g"),A)}return{message:q,help:x}}function Q(b,w={}){let{message:j,help:q}=I(b,w);return q?`${j}
3
- Help: ${q}`:j}var J={UNCLOSED_DIRECTIVE:1001,UNCLOSED_EXPRESSION:1002,INVALID_DIRECTIVE_SYNTAX:1003,MALFORMED_EXPRESSION:1004,UNEXPECTED_TOKEN:1005,UNDEFINED_VARIABLE:1101,TYPE_ERROR:1102,EVALUATION_ERROR:1103,INFINITE_LOOP:1104,CIRCULAR_REFERENCE:1105,UNSAFE_EXPRESSION:1201,PATH_TRAVERSAL:1202,XSS_ATTEMPT:1203,CODE_INJECTION:1204,DOM_API_VIOLATION:1205,FILE_NOT_FOUND:1301,FILE_READ_ERROR:1302,INVALID_FILE_PATH:1303,PERMISSION_DENIED:1304,INVALID_CONFIG:1401,MISSING_REQUIRED_CONFIG:1402,DEPRECATED_CONFIG:1403,COMPONENT_NOT_FOUND:1501,INVALID_PROPS:1502,COMPONENT_RENDER_ERROR:1503,FILTER_NOT_FOUND:1601,INVALID_FILTER_ARGS:1602,EXPRESSION_TIMEOUT:1603};function R(b){for(let[w,j]of Object.entries(J))if(j===b)return w;return}
4
- export{K as Ly,N as My,O as Ny,P as Oy,I as Py,Q as Qy,J as Ry,R as Sy};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{tr as y}from"./chunk-1xz0w746.js";import{qz as F,vz as V}from"./chunk-w3b6m427.js";function R(j,z){let J=1,q=z,G="<template",U="</template";while(q<j.length&&J>0){let Q=j.indexOf("<",q);if(Q===-1)break;if(q=Q,j.startsWith(G,q)&&(q+G.length>=j.length||/[\s>\/]/.test(j[q+G.length]))){J++,q+=G.length;continue}if(j.startsWith(U,q)){let W=j.indexOf(">",q+U.length);if(W!==-1){if(J--,J===0)return W+1;q=W+1;continue}}q++}return J===0?q:-1}function w(j){let z={default:"",named:new Map},J=j,q=/<template\s+(?:#([a-zA-Z][\w-]*)|v-slot:([a-zA-Z][\w-]*)|slot="([a-zA-Z][\w-]*)")(?:\s*=\s*"([^"]*)")?[^>]*>/gi,G=[],U;while((U=q.exec(j))!==null){let[X,Z,K,I,L]=U,$=Z||K||I,O=U.index+X.length,H=R(j,O);if(H!==-1){let B=j.slice(O,H-11).trim();G.push({start:U.index,end:H,slotName:$,content:B,propsBinding:L||void 0}),z.named.set($,{name:$,content:B,propsBinding:L||void 0})}}G.sort((X,Z)=>Z.start-X.start);for(let X of G)J=J.slice(0,X.start)+J.slice(X.end);let Q=[],W=/<([a-zA-Z][a-zA-Z0-9-]*)\b([^>]*?)\bslot="([^"]+)"([^>]*)>([\s\S]*?)<\/\1>/gi,Y;while((Y=W.exec(J))!==null){let[X,Z,K,I,L,$]=Y,O=K.replace(/\s*slot="[^"]*"\s*/," ").trimEnd(),H=L.replace(/\s*slot="[^"]*"\s*/," ").trimEnd(),B=(O+H).trim(),D=`<${Z}${B?" "+B:""}>${$}</${Z}>`;Q.push({start:Y.index,end:Y.index+X.length,slotName:I,element:D})}let _=/<([a-zA-Z][a-zA-Z0-9-]*)\b([^>]*?)\bslot="([^"]+)"([^>]*?)\/>/gi;while((Y=_.exec(J))!==null){let[X,Z,K,I,L]=Y,$=K.replace(/\s*slot="[^"]*"\s*/," ").trimEnd(),O=L.replace(/\s*slot="[^"]*"\s*/," ").trimEnd(),H=($+O).trim(),B=`<${Z}${H?" "+H:""} />`;Q.push({start:Y.index,end:Y.index+X.length,slotName:I,element:B})}Q.sort((X,Z)=>Z.start-X.start);for(let X of Q){let Z=z.named.get(X.slotName);if(Z)Z.content+=X.element;else z.named.set(X.slotName,{name:X.slotName,content:X.element});J=J.slice(0,X.start)+J.slice(X.end)}return z.default=J.trim(),z}function S(j){let z=j.match(/name\s*=\s*["']([^"']+)["']/),J=z?z[1]:"",q={},G=/:([a-zA-Z][\w-]*)\s*=\s*["']([^"']+)["']/g,U;while((U=G.exec(j))!==null)q[U[1]]=U[2];let Q=j.match(/<slot[^>]*>([\s\S]*?)<\/slot>/i),W=Q?Q[1].trim():"";return{name:J,props:q,defaultContent:W}}async function b(j,z,J,q){if(!j)return J;let G=j.content;if(j.propsBinding&&Object.keys(z).length>0){let U=j.propsBinding.trim(),Q={...q};if(U.startsWith("{")&&U.endsWith("}")){let W=U.slice(1,-1).split(",").map((Y)=>Y.trim()).filter(Boolean);for(let Y of W){let[_,X]=Y.split(":").map((K)=>K.trim()),Z=X||_;if(z[_]!==void 0)Q[Z]=z[_]}}else Q[U]=z;G=N(G,Q)}return G}function N(j,z){return j.replace(/\{\{\s*([^}]+)\s*\}\}/g,(J,q)=>{try{let G=q.trim(),U=P(G,z);return y(String(U??""))}catch{return`{{ ${q} }}`}})}function P(j,z){if(/^[a-zA-Z_$][\w$]*(\.[a-zA-Z_$][\w$]*)*$/.test(j)){let q=j.split("."),G=z;for(let U of q)if(G&&typeof G==="object"&&U in G)G=G[U];else return;return G}let J=j.match(/^([a-zA-Z_$][\w$]*)\s*([+\-*/])\s*(\d+)$/);if(J){let[,q,G,U]=J,Q=z[q],W=parseInt(U,10);if(typeof Q==="number")switch(G){case"+":return Q+W;case"-":return Q-W;case"*":return Q*W;case"/":return Q/W}}try{if(!F(j))return;return V(j,Object.keys(z))(...Object.values(z))}catch{return}}async function k(j,z,J){let q=j;q=await E(q,/<slot\s+name\s*=\s*["']([^"']+)["']([^>]*?)(?:\/>|>([\s\S]*?)<\/slot>)/gi,async(Q,W,Y,_)=>{let X=z.named.get(W),Z=_?.trim()||"",K=Y||"",I={},L=/:([a-zA-Z_$][\w$-]*)\s*=\s*["']([^"']+)["']/g,$;while(($=L.exec(K))!==null){let O=$[1],H=$[2];I[O]=P(H,J)}return await b(X,I,Z,J)});let U=/<slot\s*(?:\/>|>([\s\S]*?)<\/slot>)/gi;return q=q.replace(U,(Q,W)=>{if(Q.includes("name="))return Q;let Y=W?.trim()||"";return z.default||Y}),q}async function E(j,z,J){let q=[],G=[];j.replace(z,(W,...Y)=>{let _=Y[Y.length-2];return G.push({match:W,index:_}),q.push(J(W,...Y.slice(0,-2))),W});let U=await Promise.all(q),Q=j;for(let W=G.length-1;W>=0;W--){let{match:Y,index:_}=G[W];Q=Q.slice(0,_)+U[W]+Q.slice(_+Y.length)}return Q}function T(j){let z=w(j);return{defaultSlot:z.default,namedSlots:z.named}}async function M(j,z,J,q){return await k(j,{default:z,named:J},q)}
3
- export{w as jg,S as kg,b as lg,k as mg,T as ng,M as og};
@@ -1,274 +0,0 @@
1
- // @bun
2
- class Q{instances=new Map;componentsByFile=new Map;stateSnapshots=new Map;config;constructor(k={}){this.config={preserveState:k.preserveState??!0,maxStateAge:k.maxStateAge??30000,errorRecovery:k.errorRecovery??!0,verbose:k.verbose??!1,serializeState:k.serializeState??this.defaultSerializeState.bind(this),deserializeState:k.deserializeState??this.defaultDeserializeState.bind(this)}}register(k){if(this.instances.set(k.id,k),!this.componentsByFile.has(k.name))this.componentsByFile.set(k.name,new Set);if(this.componentsByFile.get(k.name).add(k.id),this.config.verbose)console.log(`[HMR] Registered component: ${k.name} (${k.id})`)}unregister(k){let q=this.instances.get(k);if(!q)return;if(this.componentsByFile.get(q.name)?.delete(k),this.componentsByFile.get(q.name)?.size===0)this.componentsByFile.delete(q.name);if(this.stateSnapshots.delete(k),q.cleanup?.(),this.instances.delete(k),this.config.verbose)console.log(`[HMR] Unregistered component: ${q.name} (${k})`)}getInstancesByFile(k){let q=this.componentsByFile.get(k)||new Set;return Array.from(q).map((z)=>this.instances.get(z)).filter(Boolean)}getInstance(k){return this.instances.get(k)}captureState(k){let q=this.instances.get(k);if(!q||!this.config.preserveState)return;let z=this.config.serializeState(q);if(this.stateSnapshots.set(k,z),this.config.verbose)console.log(`[HMR] Captured state for: ${q.name}`)}restoreState(k){let q=this.instances.get(k),z=this.stateSnapshots.get(k);if(!q||!z||!this.config.preserveState)return!1;if(Date.now()-z.timestamp>this.config.maxStateAge){if(this.stateSnapshots.delete(k),this.config.verbose)console.log(`[HMR] State expired for: ${q.name}`);return!1}try{if(this.config.deserializeState(z,q),this.config.verbose)console.log(`[HMR] Restored state for: ${q.name}`);return!0}catch(A){return console.error(`[HMR] Failed to restore state for ${q.name}:`,A),!1}}defaultSerializeState(k){let q={},z={};if(k.element)k.element.querySelectorAll("[data-stx-ref]").forEach((B)=>{let D=B.getAttribute("data-stx-ref"),G=B.getAttribute("data-stx-value");if(D&&G)try{q[D]=JSON.parse(G)}catch{q[D]=G}});return{refs:q,reactiveObjects:z,custom:k.state?.custom||{},timestamp:Date.now()}}defaultDeserializeState(k,q){if(q.element)Object.entries(k.refs).forEach(([z,A])=>{let B=q.element.querySelector(`[data-stx-ref="${z}"]`);if(B)B.setAttribute("data-stx-value",JSON.stringify(A)),B.dispatchEvent(new CustomEvent("stx:state-restored",{detail:{name:z,value:A},bubbles:!0}))});q.state={...k,timestamp:Date.now()}}getAllInstances(){return Array.from(this.instances.values())}clear(){for(let k of this.instances.values())k.cleanup?.();this.instances.clear(),this.componentsByFile.clear(),this.stateSnapshots.clear()}}class K{registry;config;pendingUpdates=new Map;updateQueue=Promise.resolve();constructor(k={}){this.config={preserveState:k.preserveState??!0,maxStateAge:k.maxStateAge??30000,errorRecovery:k.errorRecovery??!0,verbose:k.verbose??!1,serializeState:k.serializeState??(()=>({refs:{},reactiveObjects:{},custom:{},timestamp:Date.now()})),deserializeState:k.deserializeState??(()=>{})},this.registry=new Q(this.config)}register(k){this.registry.register(k)}unregister(k){this.registry.unregister(k)}async handleUpdate(k){return this.updateQueue=this.updateQueue.then(()=>this.processUpdate(k)),this.updateQueue}async processUpdate(k){let q=this.registry.getInstancesByFile(k.file);if(q.length===0){if(this.config.verbose)console.log(`[HMR] No instances found for: ${k.file}`);return}if(this.config.verbose)console.log(`[HMR] Updating ${q.length} instance(s) of: ${k.file}`);for(let z of q)await this.updateInstance(z,k);if(typeof window<"u"&&typeof window.dispatchEvent==="function")window.dispatchEvent(new CustomEvent("stx:hmr-update",{detail:{file:k.file,count:q.length}}))}async updateInstance(k,q){this.registry.captureState(k.id);let z=!1,A=k.element?.innerHTML||"";try{if(k.element?.dispatchEvent(new CustomEvent("stx:before-hmr-update",{bubbles:!0})),k.cleanup?.(),q.type==="style")await this.updateStyles(k,q);else await this.updateComponent(k,q);let B=this.registry.restoreState(k.id);if(!B&&k.setup)await k.setup();k.element?.dispatchEvent(new CustomEvent("stx:after-hmr-update",{detail:{stateRestored:B},bubbles:!0}))}catch(B){if(z=!0,console.error(`[HMR] Error updating component ${k.name}:`,B),this.config.errorRecovery){if(k.element&&A)k.element.innerHTML=A,console.log(`[HMR] Recovered previous state for: ${k.name}`);k.element?.dispatchEvent(new CustomEvent("stx:hmr-error",{detail:{error:B},bubbles:!0}))}}if(!z&&this.config.verbose)console.log(`[HMR] Successfully updated: ${k.name}`)}async updateComponent(k,q){if(!k.element)return;let{html:z,script:A}=this.parseComponentCode(q.code);if(z)k.element.innerHTML=z;if(A)await this.executeScript(A,k);if(k.render)k.element.innerHTML=k.render();this.reinitializeInteractivity(k)}async updateStyles(k,q){if(!k.element)return;let z=q.code.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(!z)return;let A=z[1],B=k.id,D=document.querySelector(`style[data-stx-component="${B}"]`);if(!D)D=document.createElement("style"),D.setAttribute("data-stx-component",B),document.head.appendChild(D);if(D.textContent=A,this.config.verbose)console.log(`[HMR] Updated styles for: ${k.name}`)}parseComponentCode(k){let q=k,z="",A="",B=k.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(B)z=B[1],q=q.replace(B[0],"");let D=k.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(D)A=D[1],q=q.replace(D[0],"");return{html:q.trim(),script:z.trim(),style:A.trim()}}async executeScript(k,q){try{let z={element:q.element,props:q.props,...typeof window<"u"?window.stx:{}},A=`
3
- return (async function() {
4
- ${k}
5
- })()
6
- `;await Function(...Object.keys(z),A)(...Object.values(z))}catch(z){throw console.error("[HMR] Script execution error:",z),z}}reinitializeInteractivity(k){if(!k.element)return;k.element.querySelectorAll("[data-stx-events]").forEach((z)=>{let A=z.getAttribute("data-stx-events");if(!A)return;try{let B=JSON.parse(A);for(let[D,G]of Object.entries(B))if(typeof window<"u"&&window.stx?.[G])z.addEventListener(D,window.stx[G])}catch{}}),k.element.dispatchEvent(new CustomEvent("stx:reinitialize",{bubbles:!0}))}getRegistry(){return this.registry}async refresh(k){let q=this.registry.getInstancesByFile(k);for(let z of q)if(z.render&&z.element)this.registry.captureState(z.id),z.element.innerHTML=z.render(),this.registry.restoreState(z.id),this.reinitializeInteractivity(z)}}function U(k){return`
7
- <script data-stx-hmr-client>
8
- (function() {
9
- 'use strict';
10
-
11
- // Component registry
12
- const __instances = new Map();
13
- const __stateSnapshots = new Map();
14
-
15
- // Register a component
16
- function registerComponent(id, name, element, props, setup, render, cleanup) {
17
- __instances.set(id, {
18
- id,
19
- name,
20
- element,
21
- props: props || {},
22
- setup,
23
- render,
24
- cleanup,
25
- state: { refs: {}, reactiveObjects: {}, custom: {}, timestamp: Date.now() },
26
- isMounted: true,
27
- children: new Map()
28
- });
29
-
30
- console.log('[HMR] Registered:', name, '(' + id + ')');
31
- }
32
-
33
- // Unregister a component
34
- function unregisterComponent(id) {
35
- const instance = __instances.get(id);
36
- if (instance) {
37
- instance.cleanup?.();
38
- __instances.delete(id);
39
- __stateSnapshots.delete(id);
40
- }
41
- }
42
-
43
- // Capture component state
44
- function captureState(id) {
45
- const instance = __instances.get(id);
46
- if (!instance || !instance.element) return;
47
-
48
- const state = { refs: {}, reactiveObjects: {}, custom: {}, timestamp: Date.now() };
49
-
50
- // Capture form values
51
- instance.element.querySelectorAll('input, textarea, select').forEach(el => {
52
- if (el.name || el.id) {
53
- state.refs[el.name || el.id] = el.type === 'checkbox' ? el.checked : el.value;
54
- }
55
- });
56
-
57
- // Capture data-stx-state attributes
58
- instance.element.querySelectorAll('[data-stx-state]').forEach(el => {
59
- const key = el.getAttribute('data-stx-state');
60
- const value = el.getAttribute('data-stx-value');
61
- if (key && value) {
62
- try { state.custom[key] = JSON.parse(value); }
63
- catch { state.custom[key] = value; }
64
- }
65
- });
66
-
67
- __stateSnapshots.set(id, state);
68
- }
69
-
70
- // Restore component state
71
- function restoreState(id) {
72
- const instance = __instances.get(id);
73
- const state = __stateSnapshots.get(id);
74
- if (!instance || !state || !instance.element) return false;
75
-
76
- // Restore form values
77
- Object.entries(state.refs).forEach(([name, value]) => {
78
- const el = instance.element.querySelector('[name="' + name + '"], #' + name);
79
- if (el) {
80
- if (el.type === 'checkbox') el.checked = value;
81
- else el.value = value;
82
- }
83
- });
84
-
85
- // Restore data-stx-state
86
- Object.entries(state.custom).forEach(([key, value]) => {
87
- const el = instance.element.querySelector('[data-stx-state="' + key + '"]');
88
- if (el) {
89
- el.setAttribute('data-stx-value', JSON.stringify(value));
90
- el.dispatchEvent(new CustomEvent('stx:state-restored', { detail: { key, value } }));
91
- }
92
- });
93
-
94
- return true;
95
- }
96
-
97
- // Handle HMR update
98
- async function handleUpdate(data) {
99
- const { file, code, type } = data;
100
-
101
- // Find matching instances
102
- const instances = [];
103
- __instances.forEach(inst => {
104
- if (inst.name === file || file.endsWith(inst.name + '.stx')) {
105
- instances.push(inst);
106
- }
107
- });
108
-
109
- if (instances.length === 0) {
110
- console.log('[HMR] No instances for:', file, '- doing full reload');
111
- window.location.reload();
112
- return;
113
- }
114
-
115
- console.log('[HMR] Updating', instances.length, 'instance(s) of:', file);
116
-
117
- for (const instance of instances) {
118
- try {
119
- // Capture state
120
- captureState(instance.id);
121
-
122
- // Run cleanup
123
- instance.cleanup?.();
124
-
125
- // Style-only update
126
- if (type === 'style') {
127
- const styleMatch = code.match(/<style[^>]*>([\\s\\S]*?)<\\/style>/i);
128
- if (styleMatch) {
129
- let styleEl = document.querySelector('style[data-stx-component="' + instance.id + '"]');
130
- if (!styleEl) {
131
- styleEl = document.createElement('style');
132
- styleEl.setAttribute('data-stx-component', instance.id);
133
- document.head.appendChild(styleEl);
134
- }
135
- styleEl.textContent = styleMatch[1];
136
- }
137
- continue;
138
- }
139
-
140
- // Full update - extract and apply HTML
141
- let html = code;
142
- html = html.replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, '');
143
- html = html.replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, '');
144
- html = html.trim();
145
-
146
- if (instance.element && html) {
147
- instance.element.innerHTML = html;
148
- }
149
-
150
- // Re-run setup
151
- if (instance.setup) {
152
- await instance.setup();
153
- }
154
-
155
- // Restore state
156
- restoreState(instance.id);
157
-
158
- // Dispatch events
159
- instance.element?.dispatchEvent(new CustomEvent('stx:hmr-updated', { bubbles: true }));
160
-
161
- console.log('[HMR] Updated:', instance.name);
162
- }
163
- catch (error) {
164
- console.error('[HMR] Update failed for', instance.name, error);
165
- // Restore previous state on error
166
- restoreState(instance.id);
167
- }
168
- }
169
-
170
- window.dispatchEvent(new CustomEvent('stx:hmr-complete', {
171
- detail: { file, count: instances.length }
172
- }));
173
- }
174
-
175
- // Connect to HMR WebSocket
176
- let ws = null;
177
- let reconnectTimer = null;
178
-
179
- function connect() {
180
- try {
181
- ws = new WebSocket('ws://' + window.location.hostname + ':${k}');
182
-
183
- ws.onopen = () => {
184
- console.log('[HMR] Connected');
185
- clearTimeout(reconnectTimer);
186
- };
187
-
188
- ws.onmessage = async (event) => {
189
- try {
190
- const data = JSON.parse(event.data);
191
- if (data.type === 'component-update') {
192
- await handleUpdate(data);
193
- }
194
- else if (data.type === 'reload') {
195
- // Fall back to full reload
196
- window.location.reload();
197
- }
198
- }
199
- catch (e) {
200
- console.error('[HMR] Message error:', e);
201
- }
202
- };
203
-
204
- ws.onclose = () => {
205
- ws = null;
206
- reconnectTimer = setTimeout(connect, 1000);
207
- };
208
- }
209
- catch (e) {
210
- reconnectTimer = setTimeout(connect, 1000);
211
- }
212
- }
213
-
214
- // Initialize
215
- if (document.readyState === 'loading') {
216
- document.addEventListener('DOMContentLoaded', connect);
217
- }
218
- else {
219
- connect();
220
- }
221
-
222
- // Expose API
223
- window.__stxHMR = {
224
- register: registerComponent,
225
- unregister: unregisterComponent,
226
- captureState,
227
- restoreState,
228
- refresh: (name) => handleUpdate({ file: name, code: '', type: 'refresh' }),
229
- instances: () => Array.from(__instances.values())
230
- };
231
- })();
232
- </script>
233
- `}function W(k,q,z,A){return`
234
- <div data-stx-component="${k}" data-stx-name="${q}">
235
- ${z}
236
- </div>
237
- <script>
238
- (function() {
239
- const __id = '${k}';
240
- const __name = '${q}';
241
- const __element = document.querySelector('[data-stx-component="${k}"]');
242
-
243
- let __cleanup = null;
244
-
245
- async function __setup() {
246
- ${A}
247
- }
248
-
249
- function __render() {
250
- return __element?.innerHTML || '';
251
- }
252
-
253
- // Register with HMR
254
- if (window.__stxHMR) {
255
- window.__stxHMR.register(__id, __name, __element, {}, __setup, __render, () => __cleanup?.());
256
- }
257
-
258
- // Run setup
259
- __setup();
260
-
261
- // Cleanup on removal
262
- const observer = new MutationObserver((mutations) => {
263
- if (!document.body.contains(__element)) {
264
- observer.disconnect();
265
- if (window.__stxHMR) {
266
- window.__stxHMR.unregister(__id);
267
- }
268
- }
269
- });
270
- observer.observe(document.body, { childList: true, subtree: true });
271
- })();
272
- </script>
273
- `}var J=null;function X(k){if(!J)J=new K(k);return J}function Y(){if(J)J.getRegistry().clear(),J=null}var Z={ComponentHMRHandler:K,getHMRHandler:X,resetHMRHandler:Y,generateHMRClientScript:U,wrapComponentForHMR:W};
274
- export{K as $o,U as ap,W as bp,X as cp,Y as dp,Z as ep};