@ohos-ports/stacksjs-stx 0.2.287-beta.0

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 (946) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +1042 -0
  3. package/dist/a11y.d.ts +256 -0
  4. package/dist/a11y.js +671 -0
  5. package/dist/analytics.d.ts +40 -0
  6. package/dist/analytics.js +159 -0
  7. package/dist/analyzer.d.ts +68 -0
  8. package/dist/analyzer.js +240 -0
  9. package/dist/animation.d.ts +123 -0
  10. package/dist/animation.js +688 -0
  11. package/dist/app-shell.d.ts +76 -0
  12. package/dist/app-shell.js +209 -0
  13. package/dist/app.d.ts +65 -0
  14. package/dist/app.js +79 -0
  15. package/dist/appearance-bootstrap.d.ts +54 -0
  16. package/dist/appearance-bootstrap.js +92 -0
  17. package/dist/asset-roots.d.ts +32 -0
  18. package/dist/asset-roots.js +7 -0
  19. package/dist/assets.d.ts +21 -0
  20. package/dist/assets.js +155 -0
  21. package/dist/ast.d.ts +265 -0
  22. package/dist/ast.js +630 -0
  23. package/dist/async-components.d.ts +123 -0
  24. package/dist/async-components.js +428 -0
  25. package/dist/auth.d.ts +13 -0
  26. package/dist/auth.js +12 -0
  27. package/dist/broadcasting.d.ts +77 -0
  28. package/dist/broadcasting.js +103 -0
  29. package/dist/browser-composables.d.ts +348 -0
  30. package/dist/browser-composables.js +606 -0
  31. package/dist/browser-core-imports.d.ts +12 -0
  32. package/dist/browser-core-imports.js +28 -0
  33. package/dist/build-assets.d.ts +32 -0
  34. package/dist/build-assets.js +29 -0
  35. package/dist/build-externalize-repeated.d.ts +34 -0
  36. package/dist/build-externalize-repeated.js +101 -0
  37. package/dist/build-externalize.d.ts +73 -0
  38. package/dist/build-externalize.js +80 -0
  39. package/dist/build-id.d.ts +57 -0
  40. package/dist/build-id.js +25 -0
  41. package/dist/build-message.d.ts +81 -0
  42. package/dist/build-message.js +65 -0
  43. package/dist/build-mode-detector.d.ts +26 -0
  44. package/dist/build-mode-detector.js +50 -0
  45. package/dist/build-optimizer.d.ts +101 -0
  46. package/dist/build-optimizer.js +433 -0
  47. package/dist/build-views.d.ts +56 -0
  48. package/dist/build-views.js +180 -0
  49. package/dist/build.d.ts +31 -0
  50. package/dist/build.js +34 -0
  51. package/dist/builtins/attrs.d.ts +49 -0
  52. package/dist/builtins/attrs.js +39 -0
  53. package/dist/builtins/drawer.d.ts +24 -0
  54. package/dist/builtins/drawer.js +37 -0
  55. package/dist/builtins/escape.d.ts +12 -0
  56. package/dist/builtins/escape.js +3 -0
  57. package/dist/builtins/icon.d.ts +45 -0
  58. package/dist/builtins/icon.js +100 -0
  59. package/dist/builtins/image-delivery.d.ts +16 -0
  60. package/dist/builtins/image-delivery.js +115 -0
  61. package/dist/builtins/image-placeholder.d.ts +78 -0
  62. package/dist/builtins/image-placeholder.js +137 -0
  63. package/dist/builtins/index.d.ts +26 -0
  64. package/dist/builtins/index.js +34 -0
  65. package/dist/builtins/modal.d.ts +26 -0
  66. package/dist/builtins/modal.js +38 -0
  67. package/dist/builtins/safe-image.d.ts +44 -0
  68. package/dist/builtins/safe-image.js +45 -0
  69. package/dist/builtins/stx-image.d.ts +29 -0
  70. package/dist/builtins/stx-image.js +222 -0
  71. package/dist/builtins/stx-link.d.ts +11 -0
  72. package/dist/builtins/stx-link.js +35 -0
  73. package/dist/builtins/stx-loading-indicator.d.ts +13 -0
  74. package/dist/builtins/stx-loading-indicator.js +35 -0
  75. package/dist/builtins/suspense.d.ts +30 -0
  76. package/dist/builtins/suspense.js +24 -0
  77. package/dist/builtins/toast.d.ts +19 -0
  78. package/dist/builtins/toast.js +42 -0
  79. package/dist/builtins/tooltip.d.ts +18 -0
  80. package/dist/builtins/tooltip.js +106 -0
  81. package/dist/builtins/transition-group.d.ts +27 -0
  82. package/dist/builtins/transition-group.js +22 -0
  83. package/dist/bun-shim.js +496 -0
  84. package/dist/bundle-analyzer/collector.d.ts +66 -0
  85. package/dist/bundle-analyzer/collector.js +233 -0
  86. package/dist/bundle-analyzer/index.d.ts +98 -0
  87. package/dist/bundle-analyzer/index.js +82 -0
  88. package/dist/bundle-analyzer/report.d.ts +39 -0
  89. package/dist/bundle-analyzer/report.js +318 -0
  90. package/dist/bundle-analyzer/treemap.d.ts +19 -0
  91. package/dist/bundle-analyzer/treemap.js +594 -0
  92. package/dist/bundle-analyzer.js +499 -0
  93. package/dist/caching.d.ts +69 -0
  94. package/dist/caching.js +135 -0
  95. package/dist/chunk-0y46fbkx.js +3 -0
  96. package/dist/chunk-122tyfre.js +2 -0
  97. package/dist/chunk-19nfvxfw.js +43 -0
  98. package/dist/chunk-1kah92n2.js +3 -0
  99. package/dist/chunk-1kms3b9d.js +2 -0
  100. package/dist/chunk-1q4y74mh.js +1194 -0
  101. package/dist/chunk-248e84r1.js +4 -0
  102. package/dist/chunk-24ps8kft.js +2 -0
  103. package/dist/chunk-2et5hxfv.js +2 -0
  104. package/dist/chunk-2r1rd8f0.js +2 -0
  105. package/dist/chunk-2tk1zkrz.js +2 -0
  106. package/dist/chunk-38ejahd9.js +3 -0
  107. package/dist/chunk-3zv4wz87.js +2 -0
  108. package/dist/chunk-4122k1bh.js +2 -0
  109. package/dist/chunk-45az9zht.js +2 -0
  110. package/dist/chunk-4qr85f07.js +2 -0
  111. package/dist/chunk-4ww3znrr.js +15 -0
  112. package/dist/chunk-54st8g2j.js +397 -0
  113. package/dist/chunk-58f0mthg.js +3 -0
  114. package/dist/chunk-5a19dhx5.js +2 -0
  115. package/dist/chunk-5kk8gsj2.js +3 -0
  116. package/dist/chunk-5w1e3yxs.js +499 -0
  117. package/dist/chunk-6gdycmxr.js +2 -0
  118. package/dist/chunk-6hmnaza7.js +4473 -0
  119. package/dist/chunk-71t0yan0.js +5 -0
  120. package/dist/chunk-74cv4ta1.js +3 -0
  121. package/dist/chunk-74v15e8z.js +2 -0
  122. package/dist/chunk-7b329e5v.js +3 -0
  123. package/dist/chunk-7q9mwh4v.js +84 -0
  124. package/dist/chunk-866y9d8b.js +8169 -0
  125. package/dist/chunk-8fwerspy.js +2 -0
  126. package/dist/chunk-8mjdpr94.js +147 -0
  127. package/dist/chunk-92mj1t26.js +60 -0
  128. package/dist/chunk-9b22663r.js +2 -0
  129. package/dist/chunk-9hjdgm4d.js +2 -0
  130. package/dist/chunk-9n0gvfrg.js +4 -0
  131. package/dist/chunk-9wr7zcad.js +18 -0
  132. package/dist/chunk-9y0g8kzt.js +358 -0
  133. package/dist/chunk-a0nfbmeh.js +3 -0
  134. package/dist/chunk-acn1b56m.js +1280 -0
  135. package/dist/chunk-awkq3xfx.js +2 -0
  136. package/dist/chunk-b6ej2fdf.js +1814 -0
  137. package/dist/chunk-b8rrnqry.js +2 -0
  138. package/dist/chunk-bfqfs07m.js +3022 -0
  139. package/dist/chunk-bs6kapy7.js +2 -0
  140. package/dist/chunk-btav940g.js +2 -0
  141. package/dist/chunk-bz820epz.js +3 -0
  142. package/dist/chunk-ccspd3mc.js +2 -0
  143. package/dist/chunk-csbgwaa5.js +2 -0
  144. package/dist/chunk-d8t4sjsp.js +2 -0
  145. package/dist/chunk-dap191q2.js +2 -0
  146. package/dist/chunk-de7fye10.js +4 -0
  147. package/dist/chunk-dgrt76d2.js +2 -0
  148. package/dist/chunk-dhh5q7qt.js +3 -0
  149. package/dist/chunk-dsffsqnt.js +2 -0
  150. package/dist/chunk-dtq7y5ym.js +2 -0
  151. package/dist/chunk-fed3xsp9.js +3 -0
  152. package/dist/chunk-ferav3bw.js +19 -0
  153. package/dist/chunk-fvhm8psm.js +3 -0
  154. package/dist/chunk-g4vpzv6b.js +2 -0
  155. package/dist/chunk-g9csmj0s.js +2 -0
  156. package/dist/chunk-gtcrpmz1.js +2 -0
  157. package/dist/chunk-h4xh8cms.js +4 -0
  158. package/dist/chunk-h8yqsz9m.js +2 -0
  159. package/dist/chunk-hcq5dw7a.js +2 -0
  160. package/dist/chunk-hm0xha6c.js +12 -0
  161. package/dist/chunk-hpybjwwf.js +8 -0
  162. package/dist/chunk-jegt35zh.js +2 -0
  163. package/dist/chunk-jr3jp3ev.js +8 -0
  164. package/dist/chunk-k56rjjc0.js +24 -0
  165. package/dist/chunk-kdh37tp8.js +194 -0
  166. package/dist/chunk-kxzb4et3.js +29 -0
  167. package/dist/chunk-mf4n3x1j.js +14 -0
  168. package/dist/chunk-mkd9kjgb.js +3 -0
  169. package/dist/chunk-mxfh1nxg.js +2 -0
  170. package/dist/chunk-n3ggrhb3.js +3 -0
  171. package/dist/chunk-nkb3scg6.js +8 -0
  172. package/dist/chunk-nnd4wq8j.js +231 -0
  173. package/dist/chunk-nsp1cw38.js +11 -0
  174. package/dist/chunk-nx5qkm8k.js +30 -0
  175. package/dist/chunk-p3242nck.js +2 -0
  176. package/dist/chunk-p98kfh94.js +2 -0
  177. package/dist/chunk-pkaabd8h.js +3 -0
  178. package/dist/chunk-pzm13sdc.js +3 -0
  179. package/dist/chunk-q4p5k2p3.js +2 -0
  180. package/dist/chunk-q9n5swx7.js +3 -0
  181. package/dist/chunk-qc1f74ek.js +3 -0
  182. package/dist/chunk-qpyjak7z.js +2 -0
  183. package/dist/chunk-qr82je1m.js +22 -0
  184. package/dist/chunk-qy73j6m4.js +288 -0
  185. package/dist/chunk-qzkhpsam.js +505 -0
  186. package/dist/chunk-r3ayvdz3.js +2 -0
  187. package/dist/chunk-r7r66978.js +2 -0
  188. package/dist/chunk-rbb7dvja.js +30 -0
  189. package/dist/chunk-refwkt87.js +71 -0
  190. package/dist/chunk-rj4kajww.js +2 -0
  191. package/dist/chunk-rp4rjjmf.js +2 -0
  192. package/dist/chunk-se0p17c2.js +898 -0
  193. package/dist/chunk-sj9pmene.js +2 -0
  194. package/dist/chunk-sscwkffs.js +2 -0
  195. package/dist/chunk-svpqxn2c.js +2 -0
  196. package/dist/chunk-t6nseeb9.js +351 -0
  197. package/dist/chunk-t8y1ggdy.js +2 -0
  198. package/dist/chunk-tndhnk9e.js +2 -0
  199. package/dist/chunk-v5e1gxwm.js +3 -0
  200. package/dist/chunk-vqxmxgaj.js +4 -0
  201. package/dist/chunk-vrrax298.js +2 -0
  202. package/dist/chunk-w3ycm4na.js +3 -0
  203. package/dist/chunk-wcm80anz.js +321 -0
  204. package/dist/chunk-wrzwgkbx.js +22 -0
  205. package/dist/chunk-x650vjcp.js +302 -0
  206. package/dist/chunk-xgnc1wy6.js +116 -0
  207. package/dist/chunk-xpp135ad.js +11 -0
  208. package/dist/chunk-xttsqmkm.js +216 -0
  209. package/dist/chunk-y11cxbxd.js +3757 -0
  210. package/dist/chunk-y7m2dpd3.js +341 -0
  211. package/dist/chunk-y98jsjqq.js +2 -0
  212. package/dist/chunk-ya386h70.js +2 -0
  213. package/dist/chunk-ydrz60kr.js +2 -0
  214. package/dist/chunk-ypmqf7tm.js +4 -0
  215. package/dist/chunk-z4jhj5e5.js +28 -0
  216. package/dist/chunk-zg75gjns.js +2 -0
  217. package/dist/chunk-zqqx1qaj.js +2 -0
  218. package/dist/cli-flags.d.ts +34 -0
  219. package/dist/cli-flags.js +20 -0
  220. package/dist/cli.js +174 -0
  221. package/dist/client/directive.d.ts +17 -0
  222. package/dist/client/directive.js +14 -0
  223. package/dist/client/index.d.ts +7 -0
  224. package/dist/client/index.js +2 -0
  225. package/dist/client-helpers.d.ts +317 -0
  226. package/dist/client-helpers.js +312 -0
  227. package/dist/client-script-bundler.d.ts +103 -0
  228. package/dist/client-script-bundler.js +390 -0
  229. package/dist/client-script.d.ts +215 -0
  230. package/dist/client-script.js +865 -0
  231. package/dist/client.d.ts +21 -0
  232. package/dist/client.js +73 -0
  233. package/dist/codemod.d.ts +33 -0
  234. package/dist/codemod.js +244 -0
  235. package/dist/color-mode-boot.d.ts +92 -0
  236. package/dist/color-mode-boot.js +72 -0
  237. package/dist/component-client-factories.d.ts +33 -0
  238. package/dist/component-client-factories.js +77 -0
  239. package/dist/component-hmr.d.ts +107 -0
  240. package/dist/component-hmr.js +585 -0
  241. package/dist/component-library.d.ts +38 -0
  242. package/dist/component-library.js +994 -0
  243. package/dist/component-processing.d.ts +198 -0
  244. package/dist/component-processing.js +677 -0
  245. package/dist/component-registry.d.ts +127 -0
  246. package/dist/component-registry.js +90 -0
  247. package/dist/component-renderer.d.ts +52 -0
  248. package/dist/component-renderer.js +790 -0
  249. package/dist/components/StxImage.stx +12 -0
  250. package/dist/components/StxLink.stx +18 -0
  251. package/dist/components.d.ts +28 -0
  252. package/dist/components.js +213 -0
  253. package/dist/composable-loader.d.ts +62 -0
  254. package/dist/composable-loader.js +190 -0
  255. package/dist/composables/index.d.ts +417 -0
  256. package/dist/composables/index.js +222 -0
  257. package/dist/composables/use-battery.d.ts +46 -0
  258. package/dist/composables/use-battery.js +101 -0
  259. package/dist/composables/use-broadcast-channel.d.ts +59 -0
  260. package/dist/composables/use-broadcast-channel.js +80 -0
  261. package/dist/composables/use-channel.d.ts +67 -0
  262. package/dist/composables/use-channel.js +124 -0
  263. package/dist/composables/use-clipboard.d.ts +30 -0
  264. package/dist/composables/use-clipboard.js +90 -0
  265. package/dist/composables/use-color-mode.d.ts +67 -0
  266. package/dist/composables/use-color-mode.js +152 -0
  267. package/dist/composables/use-cookie.d.ts +59 -0
  268. package/dist/composables/use-cookie.js +86 -0
  269. package/dist/composables/use-device-orientation.d.ts +116 -0
  270. package/dist/composables/use-device-orientation.js +181 -0
  271. package/dist/composables/use-event-listener.d.ts +35 -0
  272. package/dist/composables/use-event-listener.js +27 -0
  273. package/dist/composables/use-event-source.d.ts +90 -0
  274. package/dist/composables/use-event-source.js +166 -0
  275. package/dist/composables/use-eye-dropper.d.ts +117 -0
  276. package/dist/composables/use-eye-dropper.js +142 -0
  277. package/dist/composables/use-fetch.d.ts +59 -0
  278. package/dist/composables/use-fetch.js +273 -0
  279. package/dist/composables/use-form.d.ts +91 -0
  280. package/dist/composables/use-form.js +112 -0
  281. package/dist/composables/use-fullscreen.d.ts +47 -0
  282. package/dist/composables/use-fullscreen.js +110 -0
  283. package/dist/composables/use-geolocation.d.ts +62 -0
  284. package/dist/composables/use-geolocation.js +101 -0
  285. package/dist/composables/use-idle.d.ts +102 -0
  286. package/dist/composables/use-idle.js +182 -0
  287. package/dist/composables/use-intersection-observer.d.ts +83 -0
  288. package/dist/composables/use-intersection-observer.js +168 -0
  289. package/dist/composables/use-keyboard.d.ts +100 -0
  290. package/dist/composables/use-keyboard.js +224 -0
  291. package/dist/composables/use-media-query.d.ts +56 -0
  292. package/dist/composables/use-media-query.js +62 -0
  293. package/dist/composables/use-meta.d.ts +35 -0
  294. package/dist/composables/use-meta.js +48 -0
  295. package/dist/composables/use-mouse.d.ts +65 -0
  296. package/dist/composables/use-mouse.js +286 -0
  297. package/dist/composables/use-mutation-observer.d.ts +101 -0
  298. package/dist/composables/use-mutation-observer.js +129 -0
  299. package/dist/composables/use-network.d.ts +40 -0
  300. package/dist/composables/use-network.js +85 -0
  301. package/dist/composables/use-notification.d.ts +98 -0
  302. package/dist/composables/use-notification.js +94 -0
  303. package/dist/composables/use-permissions.d.ts +119 -0
  304. package/dist/composables/use-permissions.js +132 -0
  305. package/dist/composables/use-query.d.ts +48 -0
  306. package/dist/composables/use-query.js +0 -0
  307. package/dist/composables/use-resize-observer.d.ts +60 -0
  308. package/dist/composables/use-resize-observer.js +157 -0
  309. package/dist/composables/use-router.d.ts +80 -0
  310. package/dist/composables/use-router.js +105 -0
  311. package/dist/composables/use-scroll-lock.d.ts +13 -0
  312. package/dist/composables/use-scroll-lock.js +55 -0
  313. package/dist/composables/use-share.d.ts +74 -0
  314. package/dist/composables/use-share.js +104 -0
  315. package/dist/composables/use-speech.d.ts +117 -0
  316. package/dist/composables/use-speech.js +294 -0
  317. package/dist/composables/use-storage.d.ts +69 -0
  318. package/dist/composables/use-storage.js +196 -0
  319. package/dist/composables/use-text-selection.d.ts +121 -0
  320. package/dist/composables/use-text-selection.js +205 -0
  321. package/dist/composables/use-timer.d.ts +92 -0
  322. package/dist/composables/use-timer.js +193 -0
  323. package/dist/composables/use-utilities.d.ts +103 -0
  324. package/dist/composables/use-utilities.js +176 -0
  325. package/dist/composables/use-wake-lock.d.ts +85 -0
  326. package/dist/composables/use-wake-lock.js +122 -0
  327. package/dist/composables/use-websocket.d.ts +70 -0
  328. package/dist/composables/use-websocket.js +165 -0
  329. package/dist/composables/use-window.d.ts +84 -0
  330. package/dist/composables/use-window.js +163 -0
  331. package/dist/composables.d.ts +287 -0
  332. package/dist/composables.js +562 -0
  333. package/dist/composition-api.d.ts +197 -0
  334. package/dist/composition-api.js +199 -0
  335. package/dist/compression.d.ts +30 -0
  336. package/dist/compression.js +107 -0
  337. package/dist/computed.d.ts +138 -0
  338. package/dist/computed.js +382 -0
  339. package/dist/conditionals.d.ts +48 -0
  340. package/dist/conditionals.js +626 -0
  341. package/dist/config.d.ts +77 -0
  342. package/dist/config.js +828 -0
  343. package/dist/cookie-serialize.d.ts +40 -0
  344. package/dist/cookie-serialize.js +18 -0
  345. package/dist/craft-bridge.d.ts +525 -0
  346. package/dist/craft-bridge.js +511 -0
  347. package/dist/craft-compiler.d.ts +245 -0
  348. package/dist/craft-compiler.js +810 -0
  349. package/dist/craft-components.d.ts +739 -0
  350. package/dist/craft-components.js +1074 -0
  351. package/dist/craft-entry.d.ts +6 -0
  352. package/dist/craft-entry.js +9 -0
  353. package/dist/craft-ssr.d.ts +147 -0
  354. package/dist/craft-ssr.js +559 -0
  355. package/dist/craft.js +9 -0
  356. package/dist/csp.d.ts +295 -0
  357. package/dist/csp.js +220 -0
  358. package/dist/csrf.d.ts +38 -0
  359. package/dist/csrf.js +38 -0
  360. package/dist/custom-directives.d.ts +5 -0
  361. package/dist/custom-directives.js +136 -0
  362. package/dist/database.d.ts +391 -0
  363. package/dist/database.js +5 -0
  364. package/dist/defer.d.ts +28 -0
  365. package/dist/defer.js +156 -0
  366. package/dist/deploy/config-generators.d.ts +75 -0
  367. package/dist/deploy/config-generators.js +214 -0
  368. package/dist/deploy/index.d.ts +88 -0
  369. package/dist/deploy/index.js +203 -0
  370. package/dist/deploy/netlify.d.ts +109 -0
  371. package/dist/deploy/netlify.js +167 -0
  372. package/dist/desktop.d.ts +16 -0
  373. package/dist/desktop.js +1 -0
  374. package/dist/dev-server/index.d.ts +22 -0
  375. package/dist/dev-server/index.js +7 -0
  376. package/dist/dev-server/keyboard-shortcuts.d.ts +34 -0
  377. package/dist/dev-server/keyboard-shortcuts.js +81 -0
  378. package/dist/dev-server/native-window.d.ts +59 -0
  379. package/dist/dev-server/native-window.js +91 -0
  380. package/dist/dev-server/port-utils.d.ts +27 -0
  381. package/dist/dev-server/port-utils.js +40 -0
  382. package/dist/dev-server/serve-app.d.ts +15 -0
  383. package/dist/dev-server/serve-app.js +727 -0
  384. package/dist/dev-server/serve-file.d.ts +3 -0
  385. package/dist/dev-server/serve-file.js +443 -0
  386. package/dist/dev-server/serve-markdown.d.ts +3 -0
  387. package/dist/dev-server/serve-markdown.js +284 -0
  388. package/dist/dev-server/serve-multi.d.ts +5 -0
  389. package/dist/dev-server/serve-multi.js +596 -0
  390. package/dist/dev-server/terminal-colors.d.ts +56 -0
  391. package/dist/dev-server/terminal-colors.js +45 -0
  392. package/dist/dev-server/theme-selector.d.ts +32 -0
  393. package/dist/dev-server/theme-selector.js +111 -0
  394. package/dist/dev-server/ts-css.d.ts +108 -0
  395. package/dist/dev-server/ts-css.js +438 -0
  396. package/dist/dev-server/types.d.ts +99 -0
  397. package/dist/dev-server/types.js +43 -0
  398. package/dist/dev-server.d.ts +6 -0
  399. package/dist/dev-server.js +4 -0
  400. package/dist/devtools.d.ts +182 -0
  401. package/dist/devtools.js +593 -0
  402. package/dist/directive-api.d.ts +154 -0
  403. package/dist/directive-api.js +355 -0
  404. package/dist/docs.d.ts +56 -0
  405. package/dist/docs.js +567 -0
  406. package/dist/doctor.d.ts +29 -0
  407. package/dist/doctor.js +123 -0
  408. package/dist/document-shell.d.ts +218 -0
  409. package/dist/document-shell.js +338 -0
  410. package/dist/dynamic-components.d.ts +23 -0
  411. package/dist/dynamic-components.js +197 -0
  412. package/dist/edge-runtime.d.ts +193 -0
  413. package/dist/edge-runtime.js +525 -0
  414. package/dist/env.d.ts +3 -0
  415. package/dist/env.js +9 -0
  416. package/dist/error-boundaries.d.ts +78 -0
  417. package/dist/error-boundaries.js +281 -0
  418. package/dist/error-handling.d.ts +14 -0
  419. package/dist/error-handling.js +1 -0
  420. package/dist/errors/codes.d.ts +92 -0
  421. package/dist/errors/codes.js +97 -0
  422. package/dist/errors/formatter.d.ts +84 -0
  423. package/dist/errors/formatter.js +196 -0
  424. package/dist/errors/index.d.ts +12 -0
  425. package/dist/errors/index.js +44 -0
  426. package/dist/errors/logger.d.ts +135 -0
  427. package/dist/errors/logger.js +250 -0
  428. package/dist/errors/sanitizer.d.ts +73 -0
  429. package/dist/errors/sanitizer.js +181 -0
  430. package/dist/errors/types.d.ts +92 -0
  431. package/dist/errors/types.js +86 -0
  432. package/dist/events.d.ts +145 -0
  433. package/dist/events.js +396 -0
  434. package/dist/expressions.d.ts +180 -0
  435. package/dist/expressions.js +719 -0
  436. package/dist/find-body-tag.d.ts +50 -0
  437. package/dist/find-body-tag.js +57 -0
  438. package/dist/formatter.d.ts +19 -0
  439. package/dist/formatter.js +265 -0
  440. package/dist/forms-validation.d.ts +189 -0
  441. package/dist/forms-validation.js +421 -0
  442. package/dist/forms.d.ts +224 -0
  443. package/dist/forms.js +729 -0
  444. package/dist/fragment-container.d.ts +57 -0
  445. package/dist/fragment-container.js +123 -0
  446. package/dist/framework-composables.d.ts +73 -0
  447. package/dist/framework-composables.js +126 -0
  448. package/dist/head-injection.d.ts +61 -0
  449. package/dist/head-injection.js +28 -0
  450. package/dist/head.d.ts +282 -0
  451. package/dist/head.js +231 -0
  452. package/dist/heatmap.d.ts +206 -0
  453. package/dist/heatmap.js +566 -0
  454. package/dist/hot-reload.d.ts +87 -0
  455. package/dist/hot-reload.js +373 -0
  456. package/dist/html-masking.d.ts +125 -0
  457. package/dist/html-masking.js +196 -0
  458. package/dist/hydration-runtime.d.ts +44 -0
  459. package/dist/hydration-runtime.js +195 -0
  460. package/dist/hydration.d.ts +135 -0
  461. package/dist/hydration.js +654 -0
  462. package/dist/i18n.d.ts +342 -0
  463. package/dist/i18n.js +678 -0
  464. package/dist/image-optimization/auto-sibling.d.ts +42 -0
  465. package/dist/image-optimization/auto-sibling.js +88 -0
  466. package/dist/image-optimization/build-plugin.d.ts +54 -0
  467. package/dist/image-optimization/build-plugin.js +241 -0
  468. package/dist/image-optimization/component.d.ts +46 -0
  469. package/dist/image-optimization/component.js +244 -0
  470. package/dist/image-optimization/directive.d.ts +30 -0
  471. package/dist/image-optimization/directive.js +203 -0
  472. package/dist/image-optimization/index.d.ts +156 -0
  473. package/dist/image-optimization/index.js +54 -0
  474. package/dist/image-optimization/processor.d.ts +140 -0
  475. package/dist/image-optimization/processor.js +262 -0
  476. package/dist/image-optimization/serve.d.ts +54 -0
  477. package/dist/image-optimization/serve.js +102 -0
  478. package/dist/import-rebase.d.ts +16 -0
  479. package/dist/import-rebase.js +16 -0
  480. package/dist/imported-signals.d.ts +43 -0
  481. package/dist/imported-signals.js +35 -0
  482. package/dist/includes.d.ts +171 -0
  483. package/dist/includes.js +764 -0
  484. package/dist/index.d.ts +365 -0
  485. package/dist/index.js +202 -0
  486. package/dist/init.d.ts +39 -0
  487. package/dist/init.js +505 -0
  488. package/dist/inline-assets.d.ts +28 -0
  489. package/dist/inline-assets.js +82 -0
  490. package/dist/interactive.d.ts +14 -0
  491. package/dist/interactive.js +383 -0
  492. package/dist/internal-markdown.d.ts +22 -0
  493. package/dist/internal-markdown.js +141 -0
  494. package/dist/island-chunking.d.ts +48 -0
  495. package/dist/island-chunking.js +52 -0
  496. package/dist/isolated-build.d.ts +12 -0
  497. package/dist/isolated-build.js +18 -0
  498. package/dist/js-ts.d.ts +10 -0
  499. package/dist/js-ts.js +60 -0
  500. package/dist/jsx-runtime.d.ts +92 -0
  501. package/dist/jsx-runtime.js +289 -0
  502. package/dist/keep-alive.d.ts +108 -0
  503. package/dist/keep-alive.js +421 -0
  504. package/dist/layout-types.d.ts +45 -0
  505. package/dist/layout-types.js +56 -0
  506. package/dist/lazy-loader.d.ts +90 -0
  507. package/dist/lazy-loader.js +245 -0
  508. package/dist/lazy-module.d.ts +11 -0
  509. package/dist/lazy-module.js +18 -0
  510. package/dist/loading-indicator.d.ts +50 -0
  511. package/dist/loading-indicator.js +322 -0
  512. package/dist/loops.d.ts +91 -0
  513. package/dist/loops.js +690 -0
  514. package/dist/manifest.d.ts +41 -0
  515. package/dist/manifest.js +31 -0
  516. package/dist/markdown-view.d.ts +25 -0
  517. package/dist/markdown-view.js +39 -0
  518. package/dist/markdown.d.ts +10 -0
  519. package/dist/markdown.js +68 -0
  520. package/dist/media/client/blur-up.d.ts +66 -0
  521. package/dist/media/client/blur-up.js +217 -0
  522. package/dist/media/client/index.d.ts +93 -0
  523. package/dist/media/client/index.js +53 -0
  524. package/dist/media/client/lazy-load.d.ts +74 -0
  525. package/dist/media/client/lazy-load.js +283 -0
  526. package/dist/media/client/upload-handler.d.ts +80 -0
  527. package/dist/media/client/upload-handler.js +354 -0
  528. package/dist/media/image/component.d.ts +60 -0
  529. package/dist/media/image/component.js +574 -0
  530. package/dist/media/image/directive.d.ts +23 -0
  531. package/dist/media/image/directive.js +160 -0
  532. package/dist/media/image/editing.d.ts +212 -0
  533. package/dist/media/image/editing.js +193 -0
  534. package/dist/media/image/index.d.ts +142 -0
  535. package/dist/media/image/index.js +80 -0
  536. package/dist/media/image/placeholder.d.ts +89 -0
  537. package/dist/media/image/placeholder.js +188 -0
  538. package/dist/media/image/processor/cache.d.ts +53 -0
  539. package/dist/media/image/processor/cache.js +51 -0
  540. package/dist/media/image/processor/index.d.ts +11 -0
  541. package/dist/media/image/processor/index.js +3 -0
  542. package/dist/media/image/processor/optimizer.d.ts +24 -0
  543. package/dist/media/image/processor/optimizer.js +202 -0
  544. package/dist/media/image/processor/responsive.d.ts +28 -0
  545. package/dist/media/image/processor/responsive.js +162 -0
  546. package/dist/media/image/srcset.d.ts +157 -0
  547. package/dist/media/image/srcset.js +194 -0
  548. package/dist/media/index.d.ts +331 -0
  549. package/dist/media/index.js +198 -0
  550. package/dist/media/manager/embed.d.ts +25 -0
  551. package/dist/media/manager/embed.js +253 -0
  552. package/dist/media/protected/component.d.ts +33 -0
  553. package/dist/media/protected/component.js +235 -0
  554. package/dist/media/protected/index.d.ts +47 -0
  555. package/dist/media/protected/index.js +20 -0
  556. package/dist/media/protected/signature.d.ts +72 -0
  557. package/dist/media/protected/signature.js +205 -0
  558. package/dist/media/shared/cache.d.ts +76 -0
  559. package/dist/media/shared/cache.js +132 -0
  560. package/dist/media/shared/hash.d.ts +31 -0
  561. package/dist/media/shared/hash.js +35 -0
  562. package/dist/media/shared/index.d.ts +7 -0
  563. package/dist/media/shared/index.js +2 -0
  564. package/dist/media/types.d.ts +1477 -0
  565. package/dist/media/types.js +0 -0
  566. package/dist/media/upload/component.d.ts +9 -0
  567. package/dist/media/upload/component.js +320 -0
  568. package/dist/media/upload/index.d.ts +8 -0
  569. package/dist/media/upload/index.js +1 -0
  570. package/dist/media/video/directive.d.ts +23 -0
  571. package/dist/media/video/directive.js +142 -0
  572. package/dist/media/video/index.d.ts +76 -0
  573. package/dist/media/video/index.js +583 -0
  574. package/dist/media/video/processor/cache.d.ts +55 -0
  575. package/dist/media/video/processor/cache.js +52 -0
  576. package/dist/media/video/processor/index.d.ts +12 -0
  577. package/dist/media/video/processor/index.js +4 -0
  578. package/dist/media/video/processor/streaming.d.ts +26 -0
  579. package/dist/media/video/processor/streaming.js +197 -0
  580. package/dist/media/video/processor/thumbnail.d.ts +35 -0
  581. package/dist/media/video/processor/thumbnail.js +134 -0
  582. package/dist/media/video/processor/transcoder.d.ts +19 -0
  583. package/dist/media/video/processor/transcoder.js +283 -0
  584. package/dist/menubar.d.ts +65 -0
  585. package/dist/menubar.js +99 -0
  586. package/dist/method-spoofing.d.ts +20 -0
  587. package/dist/method-spoofing.js +17 -0
  588. package/dist/middleware.d.ts +112 -0
  589. package/dist/middleware.js +40 -0
  590. package/dist/misc-directives.d.ts +55 -0
  591. package/dist/misc-directives.js +328 -0
  592. package/dist/native-build.d.ts +88 -0
  593. package/dist/native-build.js +575 -0
  594. package/dist/owned-routes.d.ts +42 -0
  595. package/dist/owned-routes.js +26 -0
  596. package/dist/page-action.d.ts +73 -0
  597. package/dist/page-action.js +91 -0
  598. package/dist/page-meta.d.ts +38 -0
  599. package/dist/page-meta.js +16 -0
  600. package/dist/page-response.d.ts +120 -0
  601. package/dist/page-response.js +117 -0
  602. package/dist/parser/directive-parser.d.ts +119 -0
  603. package/dist/parser/directive-parser.js +249 -0
  604. package/dist/parser/expression-parser.d.ts +58 -0
  605. package/dist/parser/expression-parser.js +358 -0
  606. package/dist/parser/index.d.ts +13 -0
  607. package/dist/parser/index.js +23 -0
  608. package/dist/parser/tokenizer.d.ts +77 -0
  609. package/dist/parser/tokenizer.js +534 -0
  610. package/dist/partial-hydration.d.ts +123 -0
  611. package/dist/partial-hydration.js +427 -0
  612. package/dist/performance-utils.d.ts +318 -0
  613. package/dist/performance-utils.js +466 -0
  614. package/dist/placeholder.d.ts +54 -0
  615. package/dist/placeholder.js +35 -0
  616. package/dist/plugin-system.d.ts +301 -0
  617. package/dist/plugin-system.js +214 -0
  618. package/dist/plugin.d.ts +3 -0
  619. package/dist/plugin.js +174 -0
  620. package/dist/precompiler.d.ts +43 -0
  621. package/dist/precompiler.js +670 -0
  622. package/dist/process.d.ts +16 -0
  623. package/dist/process.js +879 -0
  624. package/dist/production-build.d.ts +163 -0
  625. package/dist/production-build.js +596 -0
  626. package/dist/production-builder.d.ts +42 -0
  627. package/dist/production-builder.js +146 -0
  628. package/dist/production-server.d.ts +19 -0
  629. package/dist/production-server.js +208 -0
  630. package/dist/prop-sentinels.d.ts +31 -0
  631. package/dist/prop-sentinels.js +7 -0
  632. package/dist/props.d.ts +216 -0
  633. package/dist/props.js +224 -0
  634. package/dist/public-env.d.ts +29 -0
  635. package/dist/public-env.js +19 -0
  636. package/dist/pwa/audit.d.ts +42 -0
  637. package/dist/pwa/audit.js +255 -0
  638. package/dist/pwa/directives.d.ts +38 -0
  639. package/dist/pwa/directives.js +332 -0
  640. package/dist/pwa/icons.d.ts +42 -0
  641. package/dist/pwa/icons.js +109 -0
  642. package/dist/pwa/index.d.ts +104 -0
  643. package/dist/pwa/index.js +47 -0
  644. package/dist/pwa/inject.d.ts +32 -0
  645. package/dist/pwa/inject.js +102 -0
  646. package/dist/pwa/manifest.d.ts +104 -0
  647. package/dist/pwa/manifest.js +186 -0
  648. package/dist/pwa/offline.d.ts +8 -0
  649. package/dist/pwa/offline.js +259 -0
  650. package/dist/pwa/precache.d.ts +35 -0
  651. package/dist/pwa/precache.js +116 -0
  652. package/dist/pwa/service-worker.d.ts +33 -0
  653. package/dist/pwa/service-worker.js +860 -0
  654. package/dist/pwa/workbox-strategies.d.ts +100 -0
  655. package/dist/pwa/workbox-strategies.js +167 -0
  656. package/dist/pwa/workbox.d.ts +51 -0
  657. package/dist/pwa/workbox.js +382 -0
  658. package/dist/pwa.d.ts +52 -0
  659. package/dist/pwa.js +236 -0
  660. package/dist/reactive-bindings.d.ts +47 -0
  661. package/dist/reactive-bindings.js +268 -0
  662. package/dist/reactive-tracking.d.ts +81 -0
  663. package/dist/reactive-tracking.js +49 -0
  664. package/dist/reactive.d.ts +117 -0
  665. package/dist/reactive.js +593 -0
  666. package/dist/reactivity.d.ts +206 -0
  667. package/dist/reactivity.js +574 -0
  668. package/dist/release.d.ts +1 -0
  669. package/dist/release.js +1 -0
  670. package/dist/render-memo.d.ts +40 -0
  671. package/dist/render-memo.js +33 -0
  672. package/dist/render.d.ts +54 -0
  673. package/dist/render.js +153 -0
  674. package/dist/resolve-stx-targets.d.ts +49 -0
  675. package/dist/resolve-stx-targets.js +38 -0
  676. package/dist/route-middleware.d.ts +2 -0
  677. package/dist/route-middleware.js +17 -0
  678. package/dist/route-types.d.ts +134 -0
  679. package/dist/route-types.js +24 -0
  680. package/dist/router.d.ts +9 -0
  681. package/dist/router.js +9 -0
  682. package/dist/routes.d.ts +6 -0
  683. package/dist/routes.js +14 -0
  684. package/dist/runtime-globals.d.ts +236 -0
  685. package/dist/runtime-globals.js +230 -0
  686. package/dist/runtime-injection.d.ts +113 -0
  687. package/dist/runtime-injection.js +156 -0
  688. package/dist/runtime.d.ts +140 -0
  689. package/dist/runtime.js +94 -0
  690. package/dist/safe-evaluator.d.ts +165 -0
  691. package/dist/safe-evaluator.js +461 -0
  692. package/dist/scaffolding.d.ts +113 -0
  693. package/dist/scaffolding.js +897 -0
  694. package/dist/screenshot.d.ts +22 -0
  695. package/dist/screenshot.js +100 -0
  696. package/dist/script-classifier.d.ts +41 -0
  697. package/dist/script-classifier.js +51 -0
  698. package/dist/script-emit.d.ts +50 -0
  699. package/dist/script-emit.js +11 -0
  700. package/dist/script-json.d.ts +36 -0
  701. package/dist/script-json.js +6 -0
  702. package/dist/script-validation.d.ts +26 -0
  703. package/dist/script-validation.js +179 -0
  704. package/dist/seo.d.ts +225 -0
  705. package/dist/seo.js +486 -0
  706. package/dist/serve.d.ts +44 -0
  707. package/dist/serve.js +233 -0
  708. package/dist/server-bindings.d.ts +39 -0
  709. package/dist/server-bindings.js +171 -0
  710. package/dist/server-components.d.ts +138 -0
  711. package/dist/server-components.js +427 -0
  712. package/dist/sfc-template.d.ts +17 -0
  713. package/dist/sfc-template.js +32 -0
  714. package/dist/signal-processing.d.ts +222 -0
  715. package/dist/signal-processing.js +1081 -0
  716. package/dist/signals-api.d.ts +459 -0
  717. package/dist/signals-api.js +172 -0
  718. package/dist/signals.d.ts +41 -0
  719. package/dist/signals.js +8233 -0
  720. package/dist/site-builder/build.d.ts +18 -0
  721. package/dist/site-builder/build.js +252 -0
  722. package/dist/site-builder/i18n.d.ts +104 -0
  723. package/dist/site-builder/i18n.js +150 -0
  724. package/dist/site-builder/index.d.ts +27 -0
  725. package/dist/site-builder/index.js +16 -0
  726. package/dist/site-builder/robots.d.ts +2 -0
  727. package/dist/site-builder/robots.js +26 -0
  728. package/dist/site-builder/router.d.ts +10 -0
  729. package/dist/site-builder/router.js +27 -0
  730. package/dist/site-builder/seo.d.ts +8 -0
  731. package/dist/site-builder/seo.js +67 -0
  732. package/dist/site-builder/sitemap.d.ts +10 -0
  733. package/dist/site-builder/sitemap.js +26 -0
  734. package/dist/site-builder/theme.d.ts +12 -0
  735. package/dist/site-builder/theme.js +38 -0
  736. package/dist/site-builder/types.d.ts +74 -0
  737. package/dist/site-builder/types.js +0 -0
  738. package/dist/site-url.d.ts +46 -0
  739. package/dist/site-url.js +70 -0
  740. package/dist/slots.d.ts +129 -0
  741. package/dist/slots.js +286 -0
  742. package/dist/source-maps.d.ts +98 -0
  743. package/dist/source-maps.js +350 -0
  744. package/dist/source-signature.d.ts +45 -0
  745. package/dist/source-signature.js +20 -0
  746. package/dist/spa-nav.d.ts +49 -0
  747. package/dist/spa-nav.js +12 -0
  748. package/dist/spa-shell.d.ts +21 -0
  749. package/dist/spa-shell.js +34 -0
  750. package/dist/ssg.d.ts +357 -0
  751. package/dist/ssg.js +94 -0
  752. package/dist/ssr.d.ts +116 -0
  753. package/dist/ssr.js +339 -0
  754. package/dist/state-dir.d.ts +36 -0
  755. package/dist/state-dir.js +22 -0
  756. package/dist/state-management.d.ts +299 -0
  757. package/dist/state-management.js +519 -0
  758. package/dist/store-imports.d.ts +47 -0
  759. package/dist/store-imports.js +16 -0
  760. package/dist/store-loader.d.ts +15 -0
  761. package/dist/store-loader.js +111 -0
  762. package/dist/stores-client.d.ts +70 -0
  763. package/dist/stores-client.js +132 -0
  764. package/dist/story/addons.d.ts +123 -0
  765. package/dist/story/addons.js +261 -0
  766. package/dist/story/analytics.d.ts +163 -0
  767. package/dist/story/analytics.js +235 -0
  768. package/dist/story/auto-stories.d.ts +38 -0
  769. package/dist/story/auto-stories.js +158 -0
  770. package/dist/story/bookmarks.d.ts +102 -0
  771. package/dist/story/bookmarks.js +277 -0
  772. package/dist/story/bun-test.d.ts +45 -0
  773. package/dist/story/bun-test.js +102 -0
  774. package/dist/story/cli.d.ts +132 -0
  775. package/dist/story/cli.js +155 -0
  776. package/dist/story/collect/analyzer.d.ts +33 -0
  777. package/dist/story/collect/analyzer.js +305 -0
  778. package/dist/story/collect/index.d.ts +31 -0
  779. package/dist/story/collect/index.js +27 -0
  780. package/dist/story/collect/parser.d.ts +17 -0
  781. package/dist/story/collect/parser.js +129 -0
  782. package/dist/story/collect/scanner.d.ts +17 -0
  783. package/dist/story/collect/scanner.js +101 -0
  784. package/dist/story/collect/tree.d.ts +24 -0
  785. package/dist/story/collect/tree.js +110 -0
  786. package/dist/story/commands/build.d.ts +19 -0
  787. package/dist/story/commands/build.js +172 -0
  788. package/dist/story/commands/dev.d.ts +23 -0
  789. package/dist/story/commands/dev.js +78 -0
  790. package/dist/story/commands/index.d.ts +9 -0
  791. package/dist/story/commands/index.js +3 -0
  792. package/dist/story/commands/preview.d.ts +21 -0
  793. package/dist/story/commands/preview.js +56 -0
  794. package/dist/story/compiled-output.d.ts +27 -0
  795. package/dist/story/compiled-output.js +151 -0
  796. package/dist/story/composition.d.ts +47 -0
  797. package/dist/story/composition.js +261 -0
  798. package/dist/story/config-watcher.d.ts +33 -0
  799. package/dist/story/config-watcher.js +67 -0
  800. package/dist/story/config.d.ts +29 -0
  801. package/dist/story/config.js +64 -0
  802. package/dist/story/context.d.ts +27 -0
  803. package/dist/story/context.js +27 -0
  804. package/dist/story/controls/index.d.ts +54 -0
  805. package/dist/story/controls/index.js +320 -0
  806. package/dist/story/desktop-preview.d.ts +34 -0
  807. package/dist/story/desktop-preview.js +105 -0
  808. package/dist/story/docs-generator.d.ts +30 -0
  809. package/dist/story/docs-generator.js +187 -0
  810. package/dist/story/errors.d.ts +47 -0
  811. package/dist/story/errors.js +239 -0
  812. package/dist/story/figma-export.d.ts +169 -0
  813. package/dist/story/figma-export.js +224 -0
  814. package/dist/story/generator.d.ts +21 -0
  815. package/dist/story/generator.js +165 -0
  816. package/dist/story/hmr.d.ts +62 -0
  817. package/dist/story/hmr.js +131 -0
  818. package/dist/story/hot-swap.d.ts +46 -0
  819. package/dist/story/hot-swap.js +207 -0
  820. package/dist/story/index.d.ts +99 -0
  821. package/dist/story/index.js +49 -0
  822. package/dist/story/interactions.d.ts +53 -0
  823. package/dist/story/interactions.js +225 -0
  824. package/dist/story/keyboard-shortcuts.d.ts +39 -0
  825. package/dist/story/keyboard-shortcuts.js +345 -0
  826. package/dist/story/output.d.ts +115 -0
  827. package/dist/story/output.js +153 -0
  828. package/dist/story/performance.d.ts +129 -0
  829. package/dist/story/performance.js +252 -0
  830. package/dist/story/presets.d.ts +123 -0
  831. package/dist/story/presets.js +289 -0
  832. package/dist/story/props-validation.d.ts +45 -0
  833. package/dist/story/props-validation.js +215 -0
  834. package/dist/story/renderer.d.ts +69 -0
  835. package/dist/story/renderer.js +209 -0
  836. package/dist/story/search-index.d.ts +47 -0
  837. package/dist/story/search-index.js +106 -0
  838. package/dist/story/search.d.ts +56 -0
  839. package/dist/story/search.js +140 -0
  840. package/dist/story/server.d.ts +31 -0
  841. package/dist/story/server.js +965 -0
  842. package/dist/story/setup.d.ts +56 -0
  843. package/dist/story/setup.js +78 -0
  844. package/dist/story/snapshots.d.ts +65 -0
  845. package/dist/story/snapshots.js +171 -0
  846. package/dist/story/testing.d.ts +83 -0
  847. package/dist/story/testing.js +164 -0
  848. package/dist/story/theme.d.ts +68 -0
  849. package/dist/story/theme.js +170 -0
  850. package/dist/story/ts-css.d.ts +29 -0
  851. package/dist/story/ts-css.js +189 -0
  852. package/dist/story/types.d.ts +342 -0
  853. package/dist/story/types.js +0 -0
  854. package/dist/story/ui/code-panel.d.ts +43 -0
  855. package/dist/story/ui/code-panel.js +175 -0
  856. package/dist/story/ui/controls-panel.d.ts +25 -0
  857. package/dist/story/ui/controls-panel.js +168 -0
  858. package/dist/story/ui/index.d.ts +8 -0
  859. package/dist/story/ui/index.js +4 -0
  860. package/dist/story/ui/navigation.d.ts +55 -0
  861. package/dist/story/ui/navigation.js +250 -0
  862. package/dist/story/ui/preview.d.ts +46 -0
  863. package/dist/story/ui/preview.js +251 -0
  864. package/dist/story/visual-testing.d.ts +45 -0
  865. package/dist/story/visual-testing.js +248 -0
  866. package/dist/streaming.d.ts +238 -0
  867. package/dist/streaming.js +537 -0
  868. package/dist/strict-lint.d.ts +52 -0
  869. package/dist/strict-lint.js +269 -0
  870. package/dist/strip-literals.d.ts +40 -0
  871. package/dist/strip-literals.js +149 -0
  872. package/dist/stx-virtual-ts.d.ts +358 -0
  873. package/dist/stx-virtual-ts.js +670 -0
  874. package/dist/stx.d.ts +924 -0
  875. package/dist/style-scoping.d.ts +42 -0
  876. package/dist/style-scoping.js +82 -0
  877. package/dist/suspense.d.ts +98 -0
  878. package/dist/suspense.js +398 -0
  879. package/dist/teleport.d.ts +31 -0
  880. package/dist/teleport.js +109 -0
  881. package/dist/template-compiler.d.ts +33 -0
  882. package/dist/template-compiler.js +68 -0
  883. package/dist/template-hydrator.d.ts +28 -0
  884. package/dist/template-hydrator.js +95 -0
  885. package/dist/template-tag-balance.d.ts +32 -0
  886. package/dist/template-tag-balance.js +93 -0
  887. package/dist/testing.d.ts +330 -0
  888. package/dist/testing.js +588 -0
  889. package/dist/theme-tokens.d.ts +88 -0
  890. package/dist/theme-tokens.js +71 -0
  891. package/dist/transitions.d.ts +99 -0
  892. package/dist/transitions.js +443 -0
  893. package/dist/ts-css-config.d.ts +71 -0
  894. package/dist/ts-css-config.js +44 -0
  895. package/dist/type-checker.d.ts +85 -0
  896. package/dist/type-checker.js +581 -0
  897. package/dist/typecheck.d.ts +70 -0
  898. package/dist/typecheck.js +365 -0
  899. package/dist/types/component-types.d.ts +248 -0
  900. package/dist/types/component-types.js +0 -0
  901. package/dist/types/config-types.d.ts +938 -0
  902. package/dist/types/config-types.js +0 -0
  903. package/dist/types/context-types.d.ts +122 -0
  904. package/dist/types/context-types.js +0 -0
  905. package/dist/types/csp-types.d.ts +83 -0
  906. package/dist/types/csp-types.js +0 -0
  907. package/dist/types/directive-types.d.ts +315 -0
  908. package/dist/types/directive-types.js +3 -0
  909. package/dist/types/index.d.ts +20 -0
  910. package/dist/types/index.js +1 -0
  911. package/dist/types/pwa-types.d.ts +338 -0
  912. package/dist/types/pwa-types.js +0 -0
  913. package/dist/types.d.ts +27 -0
  914. package/dist/types.js +1 -0
  915. package/dist/typescript-templates.d.ts +156 -0
  916. package/dist/typescript-templates.js +386 -0
  917. package/dist/unresolved-identifiers.d.ts +52 -0
  918. package/dist/unresolved-identifiers.js +148 -0
  919. package/dist/utils.d.ts +112 -0
  920. package/dist/utils.js +1170 -0
  921. package/dist/validator.d.ts +80 -0
  922. package/dist/validator.js +171 -0
  923. package/dist/variable-extractor.d.ts +142 -0
  924. package/dist/variable-extractor.js +1306 -0
  925. package/dist/view-composers.d.ts +171 -0
  926. package/dist/view-composers.js +29 -0
  927. package/dist/virtual-scrolling.d.ts +127 -0
  928. package/dist/virtual-scrolling.js +454 -0
  929. package/dist/visual-editor.d.ts +185 -0
  930. package/dist/visual-editor.js +735 -0
  931. package/dist/visual-testing.d.ts +135 -0
  932. package/dist/visual-testing.js +126 -0
  933. package/dist/vue-template.d.ts +39 -0
  934. package/dist/vue-template.js +476 -0
  935. package/dist/web-components/css-scoping.d.ts +64 -0
  936. package/dist/web-components/css-scoping.js +210 -0
  937. package/dist/web-components/index.d.ts +29 -0
  938. package/dist/web-components/index.js +13 -0
  939. package/dist/web-components/reactive-generator.d.ts +72 -0
  940. package/dist/web-components/reactive-generator.js +484 -0
  941. package/dist/web-components.d.ts +253 -0
  942. package/dist/web-components.js +1466 -0
  943. package/dist/x-element.d.ts +42 -0
  944. package/dist/x-element.js +301 -0
  945. package/package.json +107 -0
  946. package/stx.d.ts +924 -0
@@ -0,0 +1,994 @@
1
+ import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ const RESERVED_METHODS = new Set([
4
+ "constructor",
5
+ "connectedCallback",
6
+ "disconnectedCallback",
7
+ "attributeChangedCallback",
8
+ "adoptedCallback"
9
+ ]);
10
+ function toPascalCase(value) {
11
+ return value.replace(/\.stx$/i, "").split(/[^a-z0-9]+/i).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
12
+ }
13
+ function toKebabCase(value) {
14
+ return value.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[^a-z0-9]+/gi, "-").replace(/^-+|-+$/g, "").toLowerCase();
15
+ }
16
+ function validCustomElementTag(tag) {
17
+ return /^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test(tag) && !tag.startsWith("xml") && !/[A-Z]/.test(tag);
18
+ }
19
+ function normalizeShadowMode(value) {
20
+ if (value === !0)
21
+ return "open";
22
+ if (value === "open" || value === "closed")
23
+ return value;
24
+ return !1;
25
+ }
26
+ async function discoverStxFiles(inputDir) {
27
+ const files = [];
28
+ async function visit(directory) {
29
+ const entries = await readdir(directory, { withFileTypes: !0 });
30
+ entries.sort((a, b) => a.name.localeCompare(b.name));
31
+ for (const entry of entries) {
32
+ const entryPath = path.join(directory, entry.name);
33
+ if (entry.isDirectory()) {
34
+ if (!entry.name.startsWith(".") && entry.name !== "node_modules")
35
+ await visit(entryPath);
36
+ } else if (entry.isFile() && entry.name.endsWith(".stx") && !/\.(?:test|spec)\.stx$/i.test(entry.name))
37
+ files.push(entryPath);
38
+ }
39
+ }
40
+ await visit(inputDir);
41
+ return files;
42
+ }
43
+ function parseMetadata(source, file) {
44
+ const match = source.match(/<script\b(?=[^>]*(?:\bcomponent\b|\bstx:component\b))[^>]*>([\s\S]*?)<\/script>/i);
45
+ if (!match)
46
+ return {};
47
+ const raw = match[1].trim();
48
+ if (!raw)
49
+ return {};
50
+ try {
51
+ return JSON.parse(raw);
52
+ } catch (error) {
53
+ throw Error(`${file}: <script component> must contain JSON metadata (${error.message})`);
54
+ }
55
+ }
56
+ function extractClientMethods(source, file) {
57
+ const methods = {}, scripts = [...source.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)];
58
+ for (const script of scripts) {
59
+ if (!/\bclient\b/i.test(script[1]) || /\bcomponent\b|\bstx:component\b/i.test(script[1]))
60
+ continue;
61
+ let code;
62
+ try {
63
+ code = new Bun.Transpiler({ loader: "ts" }).transformSync(script[2]);
64
+ } catch (error) {
65
+ throw Error(`${file}: failed to transpile <script client> (${error.message})`);
66
+ }
67
+ const functionPattern = /(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)\s*\{/g;
68
+ let match;
69
+ while (match = functionPattern.exec(code)) {
70
+ const name = match[1];
71
+ if (RESERVED_METHODS.has(name))
72
+ throw Error(`${file}: client method "${name}" is reserved`);
73
+ const bodyStart = functionPattern.lastIndex;
74
+ let depth = 1, quote = "", escaped = !1, cursor = bodyStart;
75
+ for (;cursor < code.length && depth > 0; cursor++) {
76
+ const char = code[cursor];
77
+ if (escaped) {
78
+ escaped = !1;
79
+ continue;
80
+ }
81
+ if (quote) {
82
+ if (char === "\\")
83
+ escaped = !0;
84
+ else if (char === quote)
85
+ quote = "";
86
+ continue;
87
+ }
88
+ if (char === '"' || char === "'" || char === "`")
89
+ quote = char;
90
+ else if (char === "{")
91
+ depth++;
92
+ else if (char === "}")
93
+ depth--;
94
+ }
95
+ if (depth !== 0)
96
+ throw Error(`${file}: unterminated client function "${name}"`);
97
+ const asyncPrefix = match[0].includes("async") ? "async " : "";
98
+ methods[name] = `${asyncPrefix}${name}(${match[2]}) {${code.slice(bodyStart, cursor - 1)}}`;
99
+ functionPattern.lastIndex = cursor;
100
+ }
101
+ }
102
+ return methods;
103
+ }
104
+ function extractTemplate(source) {
105
+ const templateMatch = source.match(/<template\b(?![^>]*\bshadowrootmode\b)[^>]*>([\s\S]*?)<\/template>/i);
106
+ return (templateMatch ? templateMatch[1] : source).replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, "").trim();
107
+ }
108
+ function extractStyles(source) {
109
+ return [...source.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((match) => match[1].trim()).filter(Boolean).join(`
110
+
111
+ `);
112
+ }
113
+ function typeFromDeclaration(declaration) {
114
+ if (!declaration)
115
+ return null;
116
+ const type = declaration.replace(/\s*\|\s*(?:undefined|null)\b/g, "").trim();
117
+ if (/^string$/.test(type))
118
+ return "string";
119
+ if (/^number$/.test(type))
120
+ return "number";
121
+ if (/^boolean$/.test(type))
122
+ return "boolean";
123
+ if (/^(?:'[^']*'|"[^"]*")(?:\s*\|\s*(?:'[^']*'|"[^"]*"))*$/.test(type))
124
+ return "string";
125
+ return "object";
126
+ }
127
+ function inferPropertyType(fallback) {
128
+ if (fallback === void 0)
129
+ return "object";
130
+ if (fallback === "true" || fallback === "false")
131
+ return "boolean";
132
+ if (/^-?\d+(?:\.\d+)?$/.test(fallback))
133
+ return "number";
134
+ if (/^['"`]/.test(fallback))
135
+ return "string";
136
+ return "object";
137
+ }
138
+ function literalValue(fallback) {
139
+ if (fallback === "true")
140
+ return !0;
141
+ if (fallback === "false")
142
+ return !1;
143
+ if (/^-?\d+(?:\.\d+)?$/.test(fallback))
144
+ return Number(fallback);
145
+ if (/^['"`]/.test(fallback))
146
+ return fallback.slice(1, -1);
147
+ try {
148
+ return JSON.parse(fallback);
149
+ } catch {
150
+ return;
151
+ }
152
+ }
153
+ function compileTemplateToRender(template) {
154
+ const parts = [];
155
+ let cursor = 0;
156
+ const source = template.replace(/\{\{--[\s\S]*?--\}\}/g, ""), directive = /@(if|elseif|else|endif|foreach|endforeach)\s*/g;
157
+ let match;
158
+ const expressionAt = (open) => {
159
+ if (source[open] !== "(")
160
+ return null;
161
+ let depth = 0, quote = "";
162
+ for (let index = open;index < source.length; index++) {
163
+ const char = source[index];
164
+ if (quote !== "") {
165
+ if (char === "\\")
166
+ index++;
167
+ else if (char === quote)
168
+ quote = "";
169
+ continue;
170
+ }
171
+ if (char === "'" || char === '"' || char === "`") {
172
+ quote = char;
173
+ continue;
174
+ }
175
+ if (char === "(")
176
+ depth++;
177
+ else if (char === ")") {
178
+ depth--;
179
+ if (depth === 0)
180
+ return { expression: source.slice(open + 1, index), end: index + 1 };
181
+ }
182
+ }
183
+ return null;
184
+ }, text = (raw) => {
185
+ if (raw === "")
186
+ return;
187
+ let index = 0;
188
+ const interpolation = /\{!!\s*([\s\S]*?)\s*!!\}|\{\{\s*([\s\S]*?)\s*\}\}/g;
189
+ let hit;
190
+ while (hit = interpolation.exec(raw)) {
191
+ if (hit.index > index)
192
+ parts.push(`out += ${JSON.stringify(raw.slice(index, hit.index))};`);
193
+ parts.push(hit[1] !== void 0 ? `out += __raw(${hit[1]});` : `out += __escape(${hit[2]});`);
194
+ index = hit.index + hit[0].length;
195
+ }
196
+ if (index < raw.length)
197
+ parts.push(`out += ${JSON.stringify(raw.slice(index))};`);
198
+ };
199
+ while (match = directive.exec(source)) {
200
+ text(source.slice(cursor, match.index));
201
+ cursor = match.index + match[0].length;
202
+ const parsed = match[1] === "if" || match[1] === "elseif" || match[1] === "foreach" ? expressionAt(cursor) : null;
203
+ if (parsed) {
204
+ cursor = parsed.end;
205
+ directive.lastIndex = parsed.end;
206
+ }
207
+ const expression = parsed?.expression;
208
+ switch (match[1]) {
209
+ case "if":
210
+ parts.push(`if (${expression}) {`);
211
+ break;
212
+ case "elseif":
213
+ parts.push(`} else if (${expression}) {`);
214
+ break;
215
+ case "else":
216
+ parts.push("} else {");
217
+ break;
218
+ case "endif":
219
+ case "endforeach":
220
+ parts.push("}");
221
+ break;
222
+ case "foreach": {
223
+ const pair = /^([\s\S]+?)\s+as\s+(?:([A-Za-z_$][\w$]*)\s*=>\s*)?([A-Za-z_$][\w$]*)$/.exec((expression || "").trim());
224
+ if (!pair) {
225
+ parts.push(`out += ${JSON.stringify(match[0] + (parsed ? `(${expression})` : ""))};`);
226
+ break;
227
+ }
228
+ const [, iterable, key, value] = pair;
229
+ parts.push(key ? `for (const [${key}, ${value}] of __entries(${iterable})) {` : `for (const ${value} of __values(${iterable})) {`);
230
+ break;
231
+ }
232
+ }
233
+ }
234
+ text(source.slice(cursor));
235
+ return parts.join(`
236
+ `);
237
+ }
238
+ export function parseDefaults(object) {
239
+ const body = object.trim().replace(/^\{/, "").replace(/\}$/, ""), pairs = [];
240
+ let index = 0;
241
+ while (index < body.length) {
242
+ const key = /\s*([A-Za-z_$][\w$]*)\s*:/y;
243
+ key.lastIndex = index;
244
+ const match = key.exec(body);
245
+ if (!match)
246
+ break;
247
+ index = key.lastIndex;
248
+ let depth = 0, quote = "";
249
+ const start = index;
250
+ while (index < body.length) {
251
+ const char = body[index];
252
+ if (quote) {
253
+ if (char === "\\")
254
+ index++;
255
+ else if (char === quote)
256
+ quote = "";
257
+ } else if (char === "'" || char === '"' || char === "`")
258
+ quote = char;
259
+ else if (char === "{" || char === "[" || char === "(")
260
+ depth++;
261
+ else if (char === "}" || char === "]" || char === ")")
262
+ depth--;
263
+ else if (char === "," && depth === 0)
264
+ break;
265
+ index++;
266
+ }
267
+ const value = body.slice(start, index).trim();
268
+ if (value)
269
+ pairs.push([match[1], value]);
270
+ index++;
271
+ }
272
+ return pairs;
273
+ }
274
+ function compileScriptScope(source, file, outputDir) {
275
+ const block = [...source.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)].find((script) => !/\bcomponent\b|\bstx:component\b|\bclient\b/i.test(script[1]));
276
+ if (!block)
277
+ return { imports: [], body: "", propNames: [], defaults: {}, declared: {} };
278
+ let code = block[2];
279
+ const imports = [], propNames = [], defaults = {}, declared = {};
280
+ code = code.replace(/^\s*import\s+[\s\S]*?from\s*['"][^'"]+['"];?\s*$/gm, (statement) => {
281
+ if (/from\s*['"]stx['"]/.test(statement))
282
+ return "";
283
+ imports.push(statement.trim().replace(/(from\s*['"])(\.[^'"]*)(['"])/, (_all, open, specifier, close) => {
284
+ const target = path.resolve(path.dirname(file), specifier), rewritten = path.relative(outputDir, target);
285
+ return `${open}${rewritten.startsWith(".") ? rewritten : `./${rewritten}`}${close}`;
286
+ }));
287
+ return "";
288
+ });
289
+ const propMatch = /const\s*\{([^}]*)\}\s*=\s*(?:withDefaults\s*\(\s*)?defineProps\s*<[^>]*>\s*\(\s*\)\s*(?:,\s*(\{[\s\S]*?\})\s*,?\s*\))?/.exec(code);
290
+ if (propMatch) {
291
+ for (const name of propMatch[1].split(",")) {
292
+ const clean = name.split(":")[0].trim();
293
+ if (clean)
294
+ propNames.push(clean);
295
+ }
296
+ for (const [name, value] of parseDefaults(propMatch[2] || ""))
297
+ defaults[name] = value;
298
+ code = code.replace(propMatch[0], "");
299
+ }
300
+ for (const block of code.matchAll(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{([\s\S]*?)\n\}/g))
301
+ for (const member of block[1].matchAll(/^\s*(?:\/\*\*[\s\S]*?\*\/\s*)?([A-Za-z_$][\w$]*)\??\s*:\s*([^\n;]+)/gm))
302
+ declared[member[1]] = member[2].trim();
303
+ code = code.replace(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{[\s\S]*?\n\}/g, "");
304
+ return { imports, body: code.trim(), propNames, defaults, declared };
305
+ }
306
+ function compileEventDirectives(template) {
307
+ const eventTypes = new Set;
308
+ return { template: template.replace(/\s@([a-z][\w:-]*)(\.[\w.-]+)?\s*=\s*(["'])([A-Za-z_$][\w$]*)\3/gi, (_match, eventName, modifiers, _quote, method) => {
309
+ const event = eventName.toLowerCase();
310
+ eventTypes.add(event);
311
+ const normalizedModifiers = (modifiers || "").split(".").filter(Boolean).join(" ");
312
+ return ` data-stx-on-${event}="${method}"${normalizedModifiers ? ` data-stx-mod-${event}="${normalizedModifiers}"` : ""}`;
313
+ }), eventTypes: [...eventTypes].sort() };
314
+ }
315
+ function compileDynamicBindings(template) {
316
+ const bindings = [];
317
+ return { template: template.replace(/\s:([a-z][\w:-]*)\s*=\s*(["'])([\w$.]+)\2/gi, (_match, name, _quote, expression) => {
318
+ const id = bindings.length;
319
+ bindings.push({ id, name, expression });
320
+ return ` data-stx-bind-${id}=""`;
321
+ }), bindings };
322
+ }
323
+ function extractSlots(template) {
324
+ const names = new Set;
325
+ for (const match of template.matchAll(/<slot\b([^>]*)>/gi))
326
+ names.add(match[1].match(/\bname\s*=\s*["']([^"']+)["']/i)?.[1] || "");
327
+ return [...names].map((name) => ({ name }));
328
+ }
329
+ function extractCssProperties(styles) {
330
+ return [...new Set([...styles.matchAll(/(--[a-z0-9_-]+)\s*:/gi)].map((match) => match[1]))].sort().map((name) => ({ name }));
331
+ }
332
+ function normalizeProperty(name, property) {
333
+ if (!property || !new Set(["string", "number", "boolean", "object", "array"]).has(property.type))
334
+ throw Error(`Property "${name}" must declare one of: string, number, boolean, object, array`);
335
+ return {
336
+ ...property,
337
+ reflect: property.reflect ?? property.attribute !== !1
338
+ };
339
+ }
340
+ async function compileComponent(inputDir, entry, defaults) {
341
+ const sourcePath = path.isAbsolute(entry.file) ? entry.file : path.resolve(inputDir, entry.file), source = await readFile(sourcePath, "utf8"), metadata = parseMetadata(source, sourcePath), baseName = path.basename(sourcePath, ".stx"), name = entry.name || metadata.name || toPascalCase(baseName), inferredTag = `${toKebabCase(defaults.prefix || "stx")}-${toKebabCase(baseName)}`, tag = entry.tag || metadata.tag || inferredTag;
342
+ if (!name || !/^[A-Za-z_$][\w$]*$/.test(name))
343
+ throw Error(`${sourcePath}: invalid component class name "${name}"`);
344
+ if (!validCustomElementTag(tag))
345
+ throw Error(`${sourcePath}: invalid custom-element tag "${tag}"; tags must be lowercase and contain a hyphen`);
346
+ const propertyInput = entry.properties || metadata.properties || metadata.props || {}, properties = Object.fromEntries(Object.entries(propertyInput).map(([propertyName, property]) => [propertyName, normalizeProperty(propertyName, property)])), eventCompilation = compileEventDirectives(extractTemplate(source)), bindingCompilation = compileDynamicBindings(eventCompilation.template), scope = compileScriptScope(source, sourcePath, path.resolve(defaults.outputDir)), render = compileTemplateToRender(bindingCompilation.template);
347
+ for (const propertyName of scope.propNames) {
348
+ if (properties[propertyName])
349
+ continue;
350
+ const fallback = scope.defaults[propertyName];
351
+ properties[propertyName] = normalizeProperty(propertyName, {
352
+ type: typeFromDeclaration(scope.declared[propertyName]) ?? inferPropertyType(fallback),
353
+ ...fallback === void 0 ? {} : { default: literalValue(fallback) }
354
+ });
355
+ }
356
+ const metadataMethods = metadata.methods || {}, configuredMethods = entry.methods || {}, extractedMethods = extractClientMethods(source, sourcePath);
357
+ return {
358
+ file: path.relative(inputDir, sourcePath),
359
+ sourcePath,
360
+ name,
361
+ tag,
362
+ description: entry.description || metadata.description || "",
363
+ template: bindingCompilation.template,
364
+ styles: extractStyles(source),
365
+ shadowMode: normalizeShadowMode(entry.shadowDOM ?? metadata.shadowDOM ?? defaults.shadowDOM),
366
+ progressive: entry.progressive ?? metadata.progressive ?? defaults.progressive ?? !0,
367
+ properties,
368
+ events: entry.events || metadata.events || {},
369
+ methods: { ...metadataMethods, ...configuredMethods, ...extractedMethods },
370
+ eventTypes: eventCompilation.eventTypes,
371
+ bindings: bindingCompilation.bindings,
372
+ slots: extractSlots(bindingCompilation.template),
373
+ cssProperties: extractCssProperties(extractStyles(source)),
374
+ scope,
375
+ render
376
+ };
377
+ }
378
+ function runtimeModule() {
379
+ const rawInterpolation = JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"), escapedInterpolation = JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}");
380
+ return `const HTMLElementBase = globalThis.HTMLElement || class {};
381
+
382
+ const escapeHTML = (value) => String(value ?? '')
383
+ .replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')
384
+ .replaceAll('"', '&quot;').replaceAll("'", '&#039;');
385
+
386
+ const valueAt = (host, path) => {
387
+ const parts = path.trim().split('.');
388
+ let value = host;
389
+ for (const part of parts) value = value?.[part];
390
+ return typeof value === 'function' ? value.call(host) : value;
391
+ };
392
+
393
+ const deserialize = (value, type, fallback) => {
394
+ if (value === null) return type === 'boolean' ? false : fallback;
395
+ if (type === 'boolean') return value !== 'false' && value !== '0';
396
+ if (type === 'number') return Number(value);
397
+ if (type === 'object' || type === 'array') {
398
+ try { return JSON.parse(value); }
399
+ catch { return fallback; }
400
+ }
401
+ return value;
402
+ };
403
+
404
+ const serialize = (value, type) => {
405
+ if (value == null || value === false) return null;
406
+ if (type === 'boolean') return '';
407
+ if (type === 'object' || type === 'array') return JSON.stringify(value);
408
+ return String(value);
409
+ };
410
+
411
+ const cloneDefault = (value, type) => {
412
+ if (value == null || (type !== 'object' && type !== 'array')) return value;
413
+ if (typeof structuredClone === 'function') return structuredClone(value);
414
+ return JSON.parse(JSON.stringify(value));
415
+ };
416
+
417
+ const defaultFor = property => cloneDefault(
418
+ property.default ?? ({ string: '', number: 0, boolean: false, object: {}, array: [] })[property.type],
419
+ property.type,
420
+ );
421
+
422
+ export class StxElement extends HTMLElementBase {
423
+ static definition = {};
424
+ static get observedAttributes() { return this.definition.observedAttributes || []; }
425
+
426
+ constructor() {
427
+ super();
428
+ this._values = Object.create(null);
429
+ this._reflecting = false;
430
+ this._connected = false;
431
+ this._hasConnected = false;
432
+ this._initializing = false;
433
+ this._updatePending = false;
434
+ this._listeners = new Map();
435
+ const definition = this.constructor.definition;
436
+ for (const [name, property] of Object.entries(definition.properties || {})) {
437
+ this._values[name] = defaultFor(property);
438
+ }
439
+ if (definition.shadowMode && this.attachShadow && !this.shadowRoot) {
440
+ this._closedRoot = this.attachShadow({ mode: definition.shadowMode });
441
+ }
442
+ }
443
+
444
+ get updateComplete() { return this._updateComplete || Promise.resolve(); }
445
+ get renderRoot() { return this._closedRoot || this.shadowRoot || this; }
446
+
447
+ connectedCallback() {
448
+ if (this._connected) return;
449
+ this._connected = true;
450
+ this._initializing = true;
451
+ const definition = this.constructor.definition;
452
+ for (const [name, property] of Object.entries(definition.properties || {})) {
453
+ const attribute = property.attribute === false ? null : (property.attribute || name.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()));
454
+ if (attribute && this.hasAttribute?.(attribute)) this._values[name] = deserialize(this.getAttribute(attribute), property.type, defaultFor(property));
455
+ }
456
+ // Properties assigned before customElements.define() become own properties.
457
+ // Upgrade them after attributes so imperative state wins, matching the
458
+ // platform's property-first custom-element initialization convention.
459
+ for (const name of Object.keys(definition.properties || {})) this._upgradeProperty(name);
460
+ this._initializing = false;
461
+ const root = this.renderRoot;
462
+ const hasMarkup = [...(root.childNodes || [])].some(node => node.nodeType !== 3 || node.textContent.trim());
463
+ const firstConnection = !this._hasConnected;
464
+ if (!(firstConnection && definition.progressive && hasMarkup)) this._render();
465
+ else this._upgradeDeclarativeEvents();
466
+ this._bindEvents();
467
+ if (firstConnection) {
468
+ this._hasConnected = true;
469
+ this.setAttribute?.('hydrated', '');
470
+ this.dispatchEvent?.(new CustomEvent('stx:hydrated', { bubbles: true, composed: true }));
471
+ }
472
+ }
473
+
474
+ disconnectedCallback() {
475
+ this._connected = false;
476
+ for (const [event, listener] of this._listeners) this.renderRoot.removeEventListener(event, listener);
477
+ this._listeners.clear();
478
+ }
479
+
480
+ attributeChangedCallback(attribute, oldValue, newValue) {
481
+ if (oldValue === newValue || this._reflecting) return;
482
+ const definition = this.constructor.definition;
483
+ const name = definition.attributeToProperty?.[attribute];
484
+ if (!name) return;
485
+ const property = definition.properties[name];
486
+ const value = deserialize(newValue, property.type, defaultFor(property));
487
+ if (!Object.is(this._values[name], value)) {
488
+ this._values[name] = value;
489
+ this.requestUpdate();
490
+ }
491
+ }
492
+
493
+ /**
494
+ * The props a compiled render reads.
495
+ *
496
+ * Its own method rather than _values directly, so a component that sets a
497
+ * property before upgrade still sees it, and so the generated code has one
498
+ * name to depend on rather than a private field's shape.
499
+ */
500
+ _props() {
501
+ return this._values;
502
+ }
503
+
504
+ requestUpdate() {
505
+ if (!this._connected || this._initializing || this._updatePending) return this.updateComplete;
506
+ this._updatePending = true;
507
+ this._updateComplete = new Promise((resolve) => {
508
+ queueMicrotask(() => {
509
+ this._updatePending = false;
510
+ if (this._connected) this._render();
511
+ resolve();
512
+ });
513
+ });
514
+ return this._updateComplete;
515
+ }
516
+
517
+ emit(name, detail, options = {}) {
518
+ return this.dispatchEvent(new CustomEvent(name, {
519
+ detail, bubbles: true, composed: true, ...options,
520
+ }));
521
+ }
522
+
523
+ _upgradeProperty(name) {
524
+ if (!Object.prototype.hasOwnProperty.call(this, name)) return;
525
+ const value = this[name];
526
+ delete this[name];
527
+ this[name] = value;
528
+ }
529
+
530
+ _upgradeDeclarativeEvents() {
531
+ for (const element of this.renderRoot.querySelectorAll?.('*') || []) {
532
+ const names = element.getAttributeNames?.() || [...(element.attributes || [])].filter(Boolean).map(attribute => attribute.name);
533
+ for (const attributeName of names) {
534
+ if (!attributeName?.startsWith('@')) continue;
535
+ const [event, ...modifiers] = attributeName.slice(1).split('.');
536
+ element.setAttribute('data-stx-on-' + event, element.getAttribute(attributeName));
537
+ if (modifiers.length) element.setAttribute('data-stx-mod-' + event, modifiers.join(' '));
538
+ element.removeAttribute(attributeName);
539
+ }
540
+ }
541
+ }
542
+
543
+ _bindEvents() {
544
+ for (const event of this.constructor.definition.eventTypes || []) {
545
+ if (this._listeners.has(event)) continue;
546
+ const listener = ($event) => {
547
+ const selector = '[data-stx-on-' + event + ']';
548
+ const target = $event.target?.closest?.(selector);
549
+ if (!target || !this.renderRoot.contains(target)) return;
550
+ const modifiers = (target.getAttribute('data-stx-mod-' + event) || '').split(' ');
551
+ if (modifiers.includes('prevent')) $event.preventDefault();
552
+ if (modifiers.includes('stop')) $event.stopPropagation();
553
+ const method = target.getAttribute('data-stx-on-' + event);
554
+ if (typeof this[method] === 'function') this[method]($event);
555
+ };
556
+ this.renderRoot.addEventListener(event, listener);
557
+ this._listeners.set(event, listener);
558
+ }
559
+ }
560
+
561
+ _render() {
562
+ const definition = this.constructor.definition;
563
+ const root = this.renderRoot;
564
+ const active = root.activeElement || (root.contains?.(globalThis.document?.activeElement) ? globalThis.document.activeElement : null);
565
+ const focusKey = active && (active.getAttribute?.('data-key') || active.id || active.getAttribute?.('name'));
566
+ const selection = active && 'selectionStart' in active ? [active.selectionStart, active.selectionEnd] : null;
567
+ // A compiled component renders itself: the control flow and the derived
568
+ // values were turned into JavaScript at build time, so there is nothing to
569
+ // interpret here and nothing that needs an eval the page's CSP forbids.
570
+ // The string template remains for components that carry no logic.
571
+ let html = typeof this.render === 'function'
572
+ ? this.render(RENDER_HELPERS)
573
+ : definition.template
574
+ .replace(new RegExp(${rawInterpolation}, 'g'), (_match, expression) => String(valueAt(this, expression) ?? ''))
575
+ .replace(new RegExp(${escapedInterpolation}, 'g'), (_match, expression) => escapeHTML(valueAt(this, expression)));
576
+ if (definition.shadowMode && definition.styles) html = '<style>' + definition.styles + '</style>' + html;
577
+ root.innerHTML = html;
578
+ this._applyBindings();
579
+ this._bindEvents();
580
+ if (focusKey) {
581
+ const escaped = globalThis.CSS?.escape ? globalThis.CSS.escape(focusKey) : focusKey.replace(/["\\\\]/g, '\\$&');
582
+ const next = root.querySelector('[data-key="' + escaped + '"],#' + escaped + ',[name="' + escaped + '"]');
583
+ next?.focus?.();
584
+ if (selection && next?.setSelectionRange) next.setSelectionRange(selection[0], selection[1]);
585
+ }
586
+ this.dispatchEvent?.(new CustomEvent('stx:updated', { bubbles: false }));
587
+ }
588
+
589
+ _applyBindings() {
590
+ for (const binding of this.constructor.definition.bindings || []) {
591
+ const element = this.renderRoot.querySelector('[data-stx-bind-' + binding.id + ']');
592
+ if (!element) continue;
593
+ const value = valueAt(this, binding.expression);
594
+ if (binding.name === 'class') element.className = value || '';
595
+ else if (binding.name === 'style' && typeof value === 'object') {
596
+ Object.assign(element.style, value);
597
+ }
598
+ else if (typeof value === 'boolean') {
599
+ element.toggleAttribute(binding.name, value);
600
+ if (binding.name in element) element[binding.name] = value;
601
+ }
602
+ else if (value == null || value === false) element.removeAttribute(binding.name);
603
+ else element.setAttribute(binding.name, String(value));
604
+ }
605
+ }
606
+ }
607
+
608
+ /**
609
+ * What a compiled render is handed.
610
+ *
611
+ * Passed in rather than closed over so the generated code names no globals, and
612
+ * a component module stays readable on its own: __escape is visibly a
613
+ * parameter, not something the bundler happened to leave in scope.
614
+ */
615
+ const RENDER_HELPERS = {
616
+ escape: escapeHTML,
617
+ // The raw form is the author declaring the value is markup. Null becomes an
618
+ // empty string rather than the word "null", which is the only sensible
619
+ // reading of a missing fragment.
620
+ raw: (value) => String(value ?? ''),
621
+ // A loop over something absent runs zero times. Throwing here would fail a
622
+ // whole page over one empty list, which is never what the author meant.
623
+ values: (value) => value == null ? [] : (value[Symbol.iterator] ? value : Object.values(value)),
624
+ entries: (value) => value == null ? [] : (Array.isArray(value) ? value.entries() : Object.entries(value)),
625
+ };
626
+
627
+ export function defineComponent(Component, definition) {
628
+ const properties = definition.properties || {};
629
+ const attributeToProperty = {};
630
+ const observedAttributes = [];
631
+ for (const [name, property] of Object.entries(properties)) {
632
+ const attribute = property.attribute === false ? null : (property.attribute || name.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase()));
633
+ if (attribute) {
634
+ attributeToProperty[attribute] = name;
635
+ observedAttributes.push(attribute);
636
+ }
637
+ Object.defineProperty(Component.prototype, name, {
638
+ configurable: true,
639
+ enumerable: true,
640
+ get() { return this._values[name]; },
641
+ set(value) {
642
+ const oldValue = this._values[name];
643
+ if (Object.is(oldValue, value)) return;
644
+ this._values[name] = value;
645
+ if (property.reflect && attribute && !this._reflecting) {
646
+ const serialized = serialize(value, property.type);
647
+ this._reflecting = true;
648
+ if (serialized === null) this.removeAttribute(attribute);
649
+ else this.setAttribute(attribute, serialized);
650
+ this._reflecting = false;
651
+ }
652
+ this.requestUpdate();
653
+ this.dispatchEvent?.(new CustomEvent(name + '-changed', {
654
+ detail: { value, oldValue }, bubbles: true, composed: true,
655
+ }));
656
+ },
657
+ });
658
+ }
659
+ Component.definition = { ...definition, attributeToProperty, observedAttributes };
660
+ const registry = globalThis.customElements || globalThis.window?.customElements;
661
+ if (registry && !registry.get(definition.tag)) {
662
+ registry.define(definition.tag, Component);
663
+ }
664
+ return Component;
665
+ }
666
+ `;
667
+ }
668
+ function componentModule(component) {
669
+ const definition = JSON.stringify({
670
+ tag: component.tag,
671
+ template: component.template,
672
+ styles: component.styles,
673
+ shadowMode: component.shadowMode,
674
+ progressive: component.progressive,
675
+ properties: component.properties,
676
+ eventTypes: component.eventTypes,
677
+ bindings: component.bindings
678
+ }, null, 2), methodCode = Object.entries(component.methods).map(([name, body]) => {
679
+ if (RESERVED_METHODS.has(name))
680
+ throw Error(`${component.sourcePath}: method "${name}" is reserved`);
681
+ if (/^(?:async\s+)?[A-Za-z_$][\w$]*\s*\(/.test(body.trim()))
682
+ return ` ${body.trim()}`;
683
+ return ` ${name}($event) {
684
+ ${body}
685
+ }`;
686
+ }).join(`
687
+
688
+ `), scope = component.scope, destructured = [...new Set([...Object.keys(component.properties), ...scope.propNames])].map((name) => scope.defaults[name] === void 0 ? name : `${name} = ${scope.defaults[name]}`).join(", "), indent = (code) => code.split(`
689
+ `).map((line) => line.trim() === "" ? line : ` ${line}`).join(`
690
+ `);
691
+ let renderMethod = "";
692
+ if (component.render.trim() !== "" || scope.body !== "" || destructured !== "") {
693
+ const inner = [
694
+ destructured ? `const { ${destructured} } = this._props();` : "",
695
+ scope.body,
696
+ "let out = '';",
697
+ component.render,
698
+ "return out;"
699
+ ].filter(Boolean).join(`
700
+ `);
701
+ let compiled;
702
+ try {
703
+ const wrapped = new Bun.Transpiler({ loader: "ts" }).transformSync(`export function __render(__helpers) {
704
+ ${inner}
705
+ }`), opening = wrapped.indexOf("{"), closing = wrapped.lastIndexOf("}");
706
+ compiled = wrapped.slice(opening + 1, closing).trim();
707
+ } catch (error) {
708
+ throw Error(`${component.sourcePath}: failed to compile render (${error.message})`);
709
+ }
710
+ renderMethod = `
711
+ render(__helpers) {
712
+ const { escape: __escape, raw: __raw, values: __values, entries: __entries } = __helpers;
713
+ ${indent(compiled.trim())}
714
+ }
715
+ `;
716
+ }
717
+ return `import { StxElement, defineComponent } from './runtime.js';
718
+ ${scope.imports.length ? `${scope.imports.join(`
719
+ `)}
720
+ ` : ""}
721
+ /** ${component.description || `${component.name} web component generated from ${component.file}.`} */
722
+ export class ${component.name} extends StxElement {
723
+ ${methodCode}${renderMethod}
724
+ }
725
+
726
+ defineComponent(${component.name}, ${definition});
727
+ export default ${component.name};
728
+ `;
729
+ }
730
+ function typeForProperty(property) {
731
+ switch (property.type) {
732
+ case "boolean":
733
+ return "boolean";
734
+ case "number":
735
+ return "number";
736
+ case "array":
737
+ return "unknown[]";
738
+ case "object":
739
+ return "Record<string, unknown>";
740
+ default:
741
+ return "string";
742
+ }
743
+ }
744
+ function componentDeclaration(component) {
745
+ const props = Object.entries(component.properties).map(([name, property]) => ` ${name}${property.required ? "" : "?"}: ${typeForProperty(property)}`).join(`
746
+ `), fields = Object.entries(component.properties).map(([name, property]) => ` ${name}: ${typeForProperty(property)}`).join(`
747
+ `), events = Object.entries(component.events).map(([name, event]) => ` ${JSON.stringify(name)}: CustomEvent<${event.detailType || "unknown"}>`).join(`
748
+ `), methods = Object.keys(component.methods).map((name) => ` ${name}($event?: Event): unknown`).join(`
749
+ `);
750
+ return `export interface ${component.name}Props {
751
+ ${props}
752
+ }
753
+
754
+ export interface ${component.name}EventMap {
755
+ ${events}
756
+ }
757
+
758
+ export declare class ${component.name} extends HTMLElement {
759
+ ${fields}
760
+ ${methods}
761
+ readonly updateComplete: Promise<void>
762
+ requestUpdate(): Promise<void>
763
+ emit<T = unknown>(name: string, detail?: T, options?: CustomEventInit<T>): boolean
764
+ }
765
+
766
+ declare global {
767
+ interface HTMLElementTagNameMap {
768
+ ${JSON.stringify(component.tag)}: ${component.name}
769
+ }
770
+ }
771
+
772
+ export default ${component.name}
773
+ `;
774
+ }
775
+ function customElementsDeclaration(components) {
776
+ return `declare global {
777
+ namespace JSX {
778
+ interface IntrinsicElements {
779
+ ${components.map((component) => {
780
+ const props = Object.entries(component.properties).map(([name, property]) => ` ${JSON.stringify(name)}?: ${typeForProperty(property)}`).join(`
781
+ `), events = Object.keys(component.events).map((event) => {
782
+ return ` ${`on${event.split(/[-:]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`}?: (event: CustomEvent<${component.events[event].detailType || "unknown"}>) => void`;
783
+ }).join(`
784
+ `);
785
+ return ` ${JSON.stringify(component.tag)}: {
786
+ ${props}
787
+ ${events}
788
+ children?: unknown
789
+ slot?: string
790
+ class?: string
791
+ className?: string
792
+ }`;
793
+ }).join(`
794
+ `)}
795
+ }
796
+ }
797
+ }
798
+
799
+ export {}
800
+ `;
801
+ }
802
+ function customElementsManifest(components) {
803
+ return {
804
+ schemaVersion: "1.0.0",
805
+ modules: components.map((component) => ({
806
+ kind: "javascript-module",
807
+ path: `./${component.tag}.js`,
808
+ declarations: [{
809
+ kind: "class",
810
+ name: component.name,
811
+ description: component.description || void 0,
812
+ customElement: !0,
813
+ tagName: component.tag,
814
+ members: Object.entries(component.properties).map(([name, property]) => ({
815
+ kind: "field",
816
+ name,
817
+ description: property.description,
818
+ type: { text: typeForProperty(property) },
819
+ default: property.default === void 0 ? void 0 : JSON.stringify(property.default),
820
+ attribute: property.attribute === !1 ? void 0 : property.attribute || toKebabCase(name),
821
+ reflects: property.reflect
822
+ })),
823
+ events: Object.entries(component.events).map(([name, event]) => ({
824
+ name,
825
+ description: event.description,
826
+ type: { text: `CustomEvent<${event.detailType || "unknown"}>` }
827
+ })),
828
+ slots: component.slots,
829
+ cssProperties: component.cssProperties
830
+ }],
831
+ exports: [{ kind: "js", name: component.name, declaration: { name: component.name, module: `./${component.tag}.js` } }]
832
+ }))
833
+ };
834
+ }
835
+ function scopeLightDomCss(component) {
836
+ if (!component.styles)
837
+ return "";
838
+ const lightDomStyles = component.styles.replace(/:host\b/g, ":scope");
839
+ if (/\@scope\s*\(/.test(lightDomStyles))
840
+ return lightDomStyles;
841
+ return `@scope (${component.tag}) {
842
+ ${lightDomStyles}
843
+ }`;
844
+ }
845
+ function minifyCss(css) {
846
+ return css.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\s+/g, " ").replace(/\s*([{}:;,])\s*/g, "$1").replace(/;}/g, "}").trim();
847
+ }
848
+ function ssrModule(components) {
849
+ const rawInterpolation = JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"), escapedInterpolation = JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}"), slotPattern = JSON.stringify('<slot(?:\\s+name=["\\\']([^"\\\']+)["\\\'])?\\s*\\/?>(?:<\\/slot>)?'), definitions = Object.fromEntries(components.map((component) => [component.tag, {
850
+ template: component.template,
851
+ styles: component.styles,
852
+ shadowMode: component.shadowMode,
853
+ properties: component.properties
854
+ }])), renderers = components.map((component) => `export const render${component.name} = (props = {}, slots = {}) => renderComponent('${component.tag}', props, slots);`).join(`
855
+ `);
856
+ return `const definitions = ${JSON.stringify(definitions, null, 2)};
857
+ const escapeHTML = (value) => String(value ?? '')
858
+ .replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')
859
+ .replaceAll('"', '&quot;').replaceAll("'", '&#039;');
860
+ const valueAt = (values, path) => path.trim().split('.').reduce((value, part) => value?.[part], values);
861
+
862
+ export function renderComponent(tag, props = {}, slots = {}) {
863
+ const definition = definitions[tag];
864
+ if (!definition) throw new Error('Unknown STX component: ' + tag);
865
+ const values = Object.fromEntries(Object.entries(definition.properties).map(([name, property]) => [name, property.default]));
866
+ Object.assign(values, props);
867
+ let template = definition.template
868
+ .replace(new RegExp(${rawInterpolation}, 'g'), (_match, expression) => String(valueAt(values, expression) ?? ''))
869
+ .replace(new RegExp(${escapedInterpolation}, 'g'), (_match, expression) => escapeHTML(valueAt(values, expression)))
870
+ .replace(new RegExp(${slotPattern}, 'gi'), (_match, name) => String(slots[name || 'default'] ?? ''));
871
+ const attributes = Object.entries(definition.properties).flatMap(([name, property]) => {
872
+ if (property.attribute === false || !(name in props)) return [];
873
+ const attribute = property.attribute || name.replace(/[A-Z]/g, letter => '-' + letter.toLowerCase());
874
+ const value = props[name];
875
+ if (value == null || value === false) return [];
876
+ if (value === true) return [attribute];
877
+ const serialized = typeof value === 'object' ? JSON.stringify(value) : value;
878
+ return [attribute + '=\\"' + escapeHTML(serialized) + '\\"'];
879
+ }).join(' ');
880
+ if (definition.shadowMode) {
881
+ template = '<template shadowrootmode="' + definition.shadowMode + '">' +
882
+ (definition.styles ? '<style>' + definition.styles + '</style>' : '') + template + '</template>' +
883
+ String(slots.default ?? '');
884
+ }
885
+ return '<' + tag + (attributes ? ' ' + attributes : '') + '>' + template + '</' + tag + '>';
886
+ }
887
+
888
+ ${renderers}
889
+ `;
890
+ }
891
+ export async function buildComponentLibrary(config) {
892
+ const inputDir = path.resolve(config.inputDir), outputDir = path.resolve(config.outputDir);
893
+ if (!(await stat(inputDir).catch(() => null))?.isDirectory())
894
+ throw Error(`Component-library input directory does not exist: ${inputDir}`);
895
+ const entries = config.components?.length ? config.components : (await discoverStxFiles(inputDir)).map((file) => ({ file }));
896
+ if (!entries.length)
897
+ throw Error(`No .stx components found in ${inputDir}`);
898
+ const components = await Promise.all(entries.map((entry) => compileComponent(inputDir, entry, config)));
899
+ components.sort((a, b) => a.tag.localeCompare(b.tag));
900
+ const duplicateTags = components.filter((component, index) => components.findIndex((item) => item.tag === component.tag) !== index);
901
+ if (duplicateTags.length)
902
+ throw Error(`Duplicate custom-element tag: ${duplicateTags[0].tag}`);
903
+ const duplicateNames = components.filter((component, index) => components.findIndex((item) => item.name === component.name) !== index);
904
+ if (duplicateNames.length)
905
+ throw Error(`Duplicate component class name: ${duplicateNames[0].name}`);
906
+ await mkdir(outputDir, { recursive: !0 });
907
+ const files = [], emit = async (filename, content) => {
908
+ const target = path.join(outputDir, filename);
909
+ await writeFile(target, content.endsWith(`
910
+ `) ? content : `${content}
911
+ `, "utf8");
912
+ files.push(target);
913
+ return target;
914
+ };
915
+ await emit("runtime.js", runtimeModule());
916
+ for (const component of components) {
917
+ await emit(`${component.tag}.js`, componentModule(component));
918
+ if (config.declarations !== !1)
919
+ await emit(`${component.tag}.d.ts`, componentDeclaration(component));
920
+ if (config.css !== !1 && component.styles) {
921
+ const css = component.shadowMode ? component.styles : scopeLightDomCss(component);
922
+ await emit(`${component.tag}.css`, config.minify ? minifyCss(css) : css);
923
+ }
924
+ }
925
+ const indexSource = components.map((component) => `export { ${component.name}, default as ${component.name}Element } from './${component.tag}.js';`).join(`
926
+ `);
927
+ await emit("index.js", indexSource);
928
+ await emit("ssr.js", ssrModule(components));
929
+ if (config.declarations !== !1) {
930
+ await emit("index.d.ts", components.map((component) => `export * from './${component.tag}.js'`).join(`
931
+ `));
932
+ await emit("custom-elements.d.ts", customElementsDeclaration(components));
933
+ await emit("ssr.d.ts", `${components.map((component) => `export declare const render${component.name}: (props?: ${component.name}Props, slots?: Record<string, string>) => string`).join(`
934
+ `)}
935
+ export declare function renderComponent(tag: string, props?: Record<string, unknown>, slots?: Record<string, string>): string
936
+ ${components.map((component) => `import type { ${component.name}Props } from './${component.tag}.js'`).join(`
937
+ `)}`);
938
+ }
939
+ let manifest;
940
+ if (config.manifest !== !1)
941
+ manifest = await emit("custom-elements.json", JSON.stringify(customElementsManifest(components), null, 2));
942
+ let cssBundle;
943
+ if (config.css !== !1) {
944
+ const bundledCss = components.filter((component) => !component.shadowMode && component.styles).map(scopeLightDomCss).join(`
945
+
946
+ `);
947
+ if (bundledCss)
948
+ cssBundle = await emit("bundle.css", config.minify ? minifyCss(bundledCss) : bundledCss);
949
+ }
950
+ let bundle;
951
+ if (config.bundle !== !1) {
952
+ bundle = path.join(outputDir, "bundle.js");
953
+ let result;
954
+ try {
955
+ result = await Bun.build({
956
+ entrypoints: [path.join(outputDir, "index.js")],
957
+ outdir: outputDir,
958
+ naming: "bundle.js",
959
+ target: "browser",
960
+ format: "esm",
961
+ minify: config.minify ?? !0,
962
+ sourcemap: config.sourcemap || "none"
963
+ });
964
+ } catch (error) {
965
+ const logs = error instanceof AggregateError ? error.errors : [error], details = logs.map((log) => String(log).trim()).filter(Boolean).join(`
966
+ `);
967
+ throw AggregateError(logs, `Failed to bundle component library${details ? `
968
+ ${details}` : ""}`);
969
+ }
970
+ if (!result.success) {
971
+ const details = result.logs.map((log) => String(log).trim()).filter(Boolean).join(`
972
+ `);
973
+ throw AggregateError(result.logs, `Failed to bundle component library${details ? `
974
+ ${details}` : ""}`);
975
+ }
976
+ files.push(bundle);
977
+ if (config.sourcemap === "external")
978
+ files.push(`${bundle}.map`);
979
+ }
980
+ const sizes = await Promise.all(files.map(async (file) => (await stat(file)).size));
981
+ return {
982
+ components: components.map((component) => ({
983
+ name: component.name,
984
+ tag: component.tag,
985
+ source: component.sourcePath,
986
+ module: path.join(outputDir, `${component.tag}.js`)
987
+ })),
988
+ files,
989
+ manifest,
990
+ bundle,
991
+ cssBundle,
992
+ totalBytes: sizes.reduce((total, size) => total + size, 0)
993
+ };
994
+ }