@stacksjs/stx 0.2.94 → 0.2.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. package/dist/a11y.js +598 -2
  2. package/dist/analytics.js +159 -2
  3. package/dist/analyzer.js +240 -2
  4. package/dist/animation.js +688 -2
  5. package/dist/app-shell.js +220 -2
  6. package/dist/app.js +79 -2
  7. package/dist/assets.js +155 -2
  8. package/dist/ast.js +630 -2
  9. package/dist/async-components.js +428 -2
  10. package/dist/auth.js +12 -2
  11. package/dist/broadcasting.js +102 -2
  12. package/dist/browser-composables.js +565 -2
  13. package/dist/build-assets.js +29 -2
  14. package/dist/build-mode-detector.js +50 -2
  15. package/dist/build-optimizer.js +433 -2
  16. package/dist/build-views.js +180 -2
  17. package/dist/build.js +33 -2
  18. package/dist/builtins/drawer.js +37 -2
  19. package/dist/builtins/escape.js +3 -2
  20. package/dist/builtins/icon.js +83 -2
  21. package/dist/builtins/index.js +34 -2
  22. package/dist/builtins/modal.js +38 -2
  23. package/dist/builtins/safe-image.js +51 -2
  24. package/dist/builtins/stx-image.js +200 -2
  25. package/dist/builtins/stx-link.js +41 -2
  26. package/dist/builtins/stx-loading-indicator.js +35 -2
  27. package/dist/builtins/suspense.js +24 -2
  28. package/dist/builtins/toast.js +42 -2
  29. package/dist/builtins/tooltip.js +106 -2
  30. package/dist/builtins/transition-group.js +22 -2
  31. package/dist/bundle-analyzer/collector.js +233 -2
  32. package/dist/bundle-analyzer/index.js +82 -2
  33. package/dist/bundle-analyzer/report.js +318 -2
  34. package/dist/bundle-analyzer/treemap.js +594 -2
  35. package/dist/caching.js +131 -2
  36. package/dist/cli.js +11317 -10982
  37. package/dist/client/directive.js +14 -2
  38. package/dist/client/index.js +2 -2
  39. package/dist/client-helpers.js +312 -2
  40. package/dist/client-script-bundler.js +216 -6
  41. package/dist/client-script.js +754 -2
  42. package/dist/client.js +73 -4
  43. package/dist/component-hmr.js +585 -2
  44. package/dist/component-library.d.ts +6 -0
  45. package/dist/component-library.js +683 -0
  46. package/dist/component-processing.js +613 -2
  47. package/dist/component-registry.js +90 -2
  48. package/dist/component-renderer.js +660 -2
  49. package/dist/components.js +213 -2
  50. package/dist/composables/index.js +220 -2
  51. package/dist/composables/use-battery.js +101 -2
  52. package/dist/composables/use-broadcast-channel.js +80 -2
  53. package/dist/composables/use-channel.js +124 -2
  54. package/dist/composables/use-clipboard.js +79 -2
  55. package/dist/composables/use-color-mode.js +131 -2
  56. package/dist/composables/use-cookie.js +86 -2
  57. package/dist/composables/use-device-orientation.js +181 -2
  58. package/dist/composables/use-event-listener.js +27 -2
  59. package/dist/composables/use-event-source.js +166 -2
  60. package/dist/composables/use-eye-dropper.js +142 -2
  61. package/dist/composables/use-fetch.js +223 -2
  62. package/dist/composables/use-fullscreen.js +110 -2
  63. package/dist/composables/use-geolocation.js +101 -2
  64. package/dist/composables/use-idle.js +182 -2
  65. package/dist/composables/use-intersection-observer.js +168 -2
  66. package/dist/composables/use-keyboard.js +224 -2
  67. package/dist/composables/use-media-query.js +62 -2
  68. package/dist/composables/use-meta.js +48 -2
  69. package/dist/composables/use-mouse.js +286 -2
  70. package/dist/composables/use-mutation-observer.js +129 -2
  71. package/dist/composables/use-network.js +85 -2
  72. package/dist/composables/use-notification.js +94 -2
  73. package/dist/composables/use-permissions.js +132 -2
  74. package/dist/composables/use-query.js +0 -1
  75. package/dist/composables/use-resize-observer.js +157 -2
  76. package/dist/composables/use-router.js +51 -2
  77. package/dist/composables/use-share.js +104 -2
  78. package/dist/composables/use-speech.js +294 -2
  79. package/dist/composables/use-storage.js +130 -2
  80. package/dist/composables/use-text-selection.js +205 -4
  81. package/dist/composables/use-timer.js +183 -2
  82. package/dist/composables/use-utilities.js +176 -2
  83. package/dist/composables/use-wake-lock.js +122 -2
  84. package/dist/composables/use-websocket.js +165 -2
  85. package/dist/composables/use-window.js +163 -2
  86. package/dist/composables.js +552 -2
  87. package/dist/composition-api.js +190 -2
  88. package/dist/computed.js +376 -8
  89. package/dist/conditionals.js +599 -2
  90. package/dist/config.js +751 -2
  91. package/dist/craft-bridge.js +432 -2
  92. package/dist/craft-compiler.js +810 -2
  93. package/dist/craft-components.js +945 -2
  94. package/dist/craft-entry.js +5 -2
  95. package/dist/craft-ssr.js +559 -2
  96. package/dist/csp.js +220 -2
  97. package/dist/csrf.js +38 -2
  98. package/dist/custom-directives.js +136 -2
  99. package/dist/defer.js +156 -2
  100. package/dist/deploy/config-generators.js +214 -2
  101. package/dist/deploy/index.js +203 -2
  102. package/dist/deploy/netlify.js +167 -2
  103. package/dist/dev-server/crosswind.js +379 -2
  104. package/dist/dev-server/index.js +7 -2
  105. package/dist/dev-server/keyboard-shortcuts.js +81 -2
  106. package/dist/dev-server/native-window.js +91 -2
  107. package/dist/dev-server/port-utils.js +40 -2
  108. package/dist/dev-server/serve-app.js +682 -7
  109. package/dist/dev-server/serve-file.js +439 -7
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +424 -17
  112. package/dist/dev-server/terminal-colors.js +45 -2
  113. package/dist/dev-server/theme-selector.js +111 -2
  114. package/dist/dev-server/types.js +43 -2
  115. package/dist/dev-server.js +4 -2
  116. package/dist/devtools.js +462 -18
  117. package/dist/directive-api.js +355 -2
  118. package/dist/docs.js +567 -2
  119. package/dist/doctor.js +123 -2
  120. package/dist/document-shell.js +105 -2
  121. package/dist/dynamic-components.js +78 -2
  122. package/dist/edge-runtime.js +539 -2
  123. package/dist/env.js +9 -2
  124. package/dist/error-boundaries.js +62 -12
  125. package/dist/error-handling.js +1 -2
  126. package/dist/errors/codes.js +97 -2
  127. package/dist/errors/formatter.js +196 -2
  128. package/dist/errors/index.js +44 -2
  129. package/dist/errors/logger.js +250 -2
  130. package/dist/errors/sanitizer.js +181 -2
  131. package/dist/errors/types.js +86 -2
  132. package/dist/events.js +382 -2
  133. package/dist/expressions.js +650 -2
  134. package/dist/formatter.js +265 -2
  135. package/dist/forms-validation.js +510 -4
  136. package/dist/forms.js +709 -2
  137. package/dist/head.js +224 -2
  138. package/dist/heatmap.js +566 -2
  139. package/dist/hot-reload.js +367 -2
  140. package/dist/html-masking.js +73 -2
  141. package/dist/hydration-runtime.js +195 -2
  142. package/dist/hydration.js +654 -2
  143. package/dist/i18n.js +633 -2
  144. package/dist/image-optimization/auto-sibling.js +88 -2
  145. package/dist/image-optimization/build-plugin.js +241 -2
  146. package/dist/image-optimization/component.js +244 -2
  147. package/dist/image-optimization/directive.js +203 -2
  148. package/dist/image-optimization/index.js +54 -2
  149. package/dist/image-optimization/processor.js +262 -2
  150. package/dist/image-optimization/serve.js +102 -2
  151. package/dist/includes.js +733 -2
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +134 -2
  154. package/dist/init.js +505 -2
  155. package/dist/inline-assets.js +82 -2
  156. package/dist/interactive.js +383 -2
  157. package/dist/internal-markdown.js +141 -2
  158. package/dist/island-chunking.js +52 -2
  159. package/dist/js-ts.js +57 -2
  160. package/dist/jsx-runtime.js +289 -2
  161. package/dist/keep-alive.js +421 -2
  162. package/dist/lazy-loader.js +245 -2
  163. package/dist/loading-indicator.js +322 -2
  164. package/dist/loops.js +643 -2
  165. package/dist/manifest.js +31 -2
  166. package/dist/markdown.js +68 -2
  167. package/dist/media/client/blur-up.js +217 -2
  168. package/dist/media/client/index.js +53 -2
  169. package/dist/media/client/lazy-load.js +283 -2
  170. package/dist/media/client/upload-handler.js +354 -2
  171. package/dist/media/image/component.js +574 -2
  172. package/dist/media/image/directive.js +160 -2
  173. package/dist/media/image/editing.js +193 -2
  174. package/dist/media/image/index.js +80 -2
  175. package/dist/media/image/placeholder.js +188 -2
  176. package/dist/media/image/processor/cache.js +51 -2
  177. package/dist/media/image/processor/index.js +3 -2
  178. package/dist/media/image/processor/optimizer.js +202 -2
  179. package/dist/media/image/processor/responsive.js +162 -2
  180. package/dist/media/image/srcset.js +194 -2
  181. package/dist/media/index.js +198 -2
  182. package/dist/media/manager/embed.js +253 -2
  183. package/dist/media/protected/component.js +235 -2
  184. package/dist/media/protected/index.js +20 -2
  185. package/dist/media/protected/signature.js +205 -2
  186. package/dist/media/shared/cache.js +132 -2
  187. package/dist/media/shared/hash.js +35 -2
  188. package/dist/media/shared/index.js +2 -2
  189. package/dist/media/types.js +0 -1
  190. package/dist/media/upload/component.js +320 -2
  191. package/dist/media/upload/index.js +1 -2
  192. package/dist/media/video/directive.js +142 -2
  193. package/dist/media/video/index.js +583 -2
  194. package/dist/media/video/processor/cache.js +52 -2
  195. package/dist/media/video/processor/index.js +4 -2
  196. package/dist/media/video/processor/streaming.js +197 -2
  197. package/dist/media/video/processor/thumbnail.js +134 -2
  198. package/dist/media/video/processor/transcoder.js +283 -2
  199. package/dist/method-spoofing.js +17 -2
  200. package/dist/middleware.js +40 -2
  201. package/dist/misc-directives.js +222 -2
  202. package/dist/native-build.js +511 -2
  203. package/dist/parser/directive-parser.js +239 -2
  204. package/dist/parser/expression-parser.js +358 -2
  205. package/dist/parser/index.js +23 -2
  206. package/dist/parser/tokenizer.js +534 -2
  207. package/dist/partial-hydration.js +427 -2
  208. package/dist/performance-utils.js +430 -2
  209. package/dist/placeholder.js +35 -2
  210. package/dist/plugin-system.js +214 -2
  211. package/dist/plugin.js +173 -2
  212. package/dist/precompiler.js +660 -81
  213. package/dist/process.js +711 -2
  214. package/dist/production-build.js +596 -2
  215. package/dist/production-builder.js +132 -2
  216. package/dist/production-server.js +188 -2
  217. package/dist/props.js +224 -2
  218. package/dist/public-env.js +19 -2
  219. package/dist/pwa/audit.js +255 -2
  220. package/dist/pwa/directives.js +332 -2
  221. package/dist/pwa/icons.js +109 -2
  222. package/dist/pwa/index.js +47 -2
  223. package/dist/pwa/inject.js +102 -2
  224. package/dist/pwa/manifest.js +186 -2
  225. package/dist/pwa/offline.js +259 -2
  226. package/dist/pwa/precache.js +116 -2
  227. package/dist/pwa/service-worker.js +860 -2
  228. package/dist/pwa/workbox-strategies.js +167 -2
  229. package/dist/pwa/workbox.js +382 -2
  230. package/dist/pwa.js +427 -427
  231. package/dist/reactive-bindings.js +266 -2
  232. package/dist/reactive.js +569 -2
  233. package/dist/reactivity.js +559 -2
  234. package/dist/release.js +1 -2
  235. package/dist/render.js +165 -2
  236. package/dist/route-middleware.js +17 -2
  237. package/dist/router.js +9 -2
  238. package/dist/routes.js +14 -2
  239. package/dist/runtime-injection.js +120 -2
  240. package/dist/runtime.js +94 -2
  241. package/dist/safe-evaluator.js +444 -2
  242. package/dist/scaffolding.js +897 -2
  243. package/dist/screenshot.js +87 -2
  244. package/dist/script-classifier.js +32 -2
  245. package/dist/script-validation.js +158 -2
  246. package/dist/seo.js +457 -2
  247. package/dist/serve.js +237 -2
  248. package/dist/server-bindings.js +108 -2
  249. package/dist/server-components.js +338 -11
  250. package/dist/signal-processing.js +946 -2
  251. package/dist/signals-api.js +154 -2
  252. package/dist/signals.js +5287 -2
  253. package/dist/site-builder/build.js +224 -2
  254. package/dist/site-builder/i18n.js +140 -2
  255. package/dist/site-builder/index.js +15 -2
  256. package/dist/site-builder/robots.js +26 -2
  257. package/dist/site-builder/router.js +27 -2
  258. package/dist/site-builder/seo.js +36 -2
  259. package/dist/site-builder/sitemap.js +26 -2
  260. package/dist/site-builder/theme.js +33 -2
  261. package/dist/site-builder/types.js +0 -1
  262. package/dist/slots.js +201 -2
  263. package/dist/source-maps.js +350 -2
  264. package/dist/spa-shell.js +34 -2
  265. package/dist/ssg.js +389 -389
  266. package/dist/ssr.js +355 -2
  267. package/dist/state-management.js +533 -2
  268. package/dist/store-imports.js +13 -2
  269. package/dist/store-loader.js +72 -5
  270. package/dist/stores-client.js +132 -2
  271. package/dist/story/addons.js +261 -2
  272. package/dist/story/analytics.js +235 -2
  273. package/dist/story/auto-stories.js +158 -2
  274. package/dist/story/bookmarks.js +277 -2
  275. package/dist/story/bun-test.js +102 -2
  276. package/dist/story/cli.js +155 -2
  277. package/dist/story/collect/analyzer.js +305 -2
  278. package/dist/story/collect/index.js +27 -2
  279. package/dist/story/collect/parser.js +129 -2
  280. package/dist/story/collect/scanner.js +101 -2
  281. package/dist/story/collect/tree.js +110 -2
  282. package/dist/story/commands/build.js +172 -2
  283. package/dist/story/commands/dev.js +78 -2
  284. package/dist/story/commands/index.js +3 -2
  285. package/dist/story/commands/preview.js +56 -2
  286. package/dist/story/compiled-output.js +151 -2
  287. package/dist/story/composition.js +261 -2
  288. package/dist/story/config-watcher.js +67 -2
  289. package/dist/story/config.js +64 -2
  290. package/dist/story/context.js +27 -2
  291. package/dist/story/controls/index.js +320 -2
  292. package/dist/story/crosswind.js +189 -2
  293. package/dist/story/desktop-preview.js +105 -2
  294. package/dist/story/docs-generator.js +186 -2
  295. package/dist/story/errors.js +239 -2
  296. package/dist/story/figma-export.js +224 -2
  297. package/dist/story/generator.js +165 -2
  298. package/dist/story/hmr.js +131 -2
  299. package/dist/story/hot-swap.js +207 -2
  300. package/dist/story/index.js +49 -2
  301. package/dist/story/interactions.js +225 -2
  302. package/dist/story/keyboard-shortcuts.js +345 -2
  303. package/dist/story/output.js +153 -2
  304. package/dist/story/performance.js +252 -2
  305. package/dist/story/presets.js +289 -2
  306. package/dist/story/props-validation.js +215 -2
  307. package/dist/story/renderer.js +209 -2
  308. package/dist/story/search-index.js +106 -2
  309. package/dist/story/search.js +140 -2
  310. package/dist/story/server.js +965 -2
  311. package/dist/story/setup.js +78 -2
  312. package/dist/story/snapshots.js +170 -2
  313. package/dist/story/testing.js +163 -2
  314. package/dist/story/theme.js +170 -2
  315. package/dist/story/types.js +0 -2
  316. package/dist/story/ui/code-panel.js +175 -2
  317. package/dist/story/ui/controls-panel.js +168 -2
  318. package/dist/story/ui/index.js +4 -2
  319. package/dist/story/ui/navigation.js +250 -2
  320. package/dist/story/ui/preview.js +251 -2
  321. package/dist/story/visual-testing.js +247 -2
  322. package/dist/streaming.js +537 -2
  323. package/dist/strict-lint.js +288 -2
  324. package/dist/style-scoping.js +50 -2
  325. package/dist/suspense.js +398 -2
  326. package/dist/teleport.js +109 -2
  327. package/dist/template-compiler.js +63 -2
  328. package/dist/template-hydrator.js +82 -2
  329. package/dist/template-tag-balance.js +93 -2
  330. package/dist/testing.js +581 -2
  331. package/dist/transitions.js +443 -2
  332. package/dist/type-checker.js +581 -2
  333. package/dist/types/component-types.d.ts +54 -0
  334. package/dist/types/component-types.js +0 -1
  335. package/dist/types/config-types.js +0 -1
  336. package/dist/types/context-types.js +0 -1
  337. package/dist/types/csp-types.js +0 -1
  338. package/dist/types/directive-types.js +3 -2
  339. package/dist/types/index.d.ts +5 -0
  340. package/dist/types/index.js +1 -2
  341. package/dist/types/pwa-types.js +0 -1
  342. package/dist/types.js +1 -2
  343. package/dist/typescript-templates.js +386 -4
  344. package/dist/utils.js +942 -2
  345. package/dist/validator.js +171 -2
  346. package/dist/variable-extractor.js +1094 -2
  347. package/dist/view-composers.js +29 -2
  348. package/dist/virtual-scrolling.js +454 -2
  349. package/dist/visual-editor.js +688 -28
  350. package/dist/vue-template.js +475 -2
  351. package/dist/web-components/css-scoping.js +177 -2
  352. package/dist/web-components/index.js +13 -2
  353. package/dist/web-components/reactive-generator.js +121 -56
  354. package/dist/web-components.js +1447 -2
  355. package/dist/x-element.js +17 -5
  356. package/package.json +6 -7
  357. package/dist/chunk-03c26pjz.js +0 -3
  358. package/dist/chunk-04mvcmcr.js +0 -106
  359. package/dist/chunk-05hgyyqc.js +0 -4
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-0b9w2w1y.js +0 -1
  362. package/dist/chunk-0dz85jrp.js +0 -3
  363. package/dist/chunk-0g4gece6.js +0 -4
  364. package/dist/chunk-0jd0pndq.js +0 -3
  365. package/dist/chunk-0jkwrcwj.js +0 -3
  366. package/dist/chunk-0m9tdm7t.js +0 -71
  367. package/dist/chunk-0qakwen3.js +0 -1
  368. package/dist/chunk-0qnz93q2.js +0 -3
  369. package/dist/chunk-0tatqxj2.js +0 -57
  370. package/dist/chunk-0wdar532.js +0 -102
  371. package/dist/chunk-13yz561y.js +0 -3
  372. package/dist/chunk-174z0cd0.js +0 -3
  373. package/dist/chunk-1mmykse5.js +0 -81
  374. package/dist/chunk-1z2yq9em.js +0 -3
  375. package/dist/chunk-1z5nhbjt.js +0 -90
  376. package/dist/chunk-1zgsgk4b.js +0 -1
  377. package/dist/chunk-25s7bckb.js +0 -171
  378. package/dist/chunk-268adc7r.js +0 -2230
  379. package/dist/chunk-26r6zh3t.js +0 -194
  380. package/dist/chunk-2w3302dh.js +0 -3
  381. package/dist/chunk-2xen423s.js +0 -3
  382. package/dist/chunk-39gm08bn.js +0 -39
  383. package/dist/chunk-3bjtemm6.js +0 -128
  384. package/dist/chunk-3jm3snz8.js +0 -3
  385. package/dist/chunk-3ngm57nt.js +0 -12
  386. package/dist/chunk-3rh7va1z.js +0 -3
  387. package/dist/chunk-3yg9hbmb.js +0 -4
  388. package/dist/chunk-44hd3kab.js +0 -1
  389. package/dist/chunk-46mkpbkk.js +0 -12
  390. package/dist/chunk-48cw2nde.js +0 -2
  391. package/dist/chunk-48r3qe0k.js +0 -3
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4bt81cg3.js +0 -61
  394. package/dist/chunk-4j188175.js +0 -3
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qq8ffke.js +0 -28
  397. package/dist/chunk-50vqeesm.js +0 -142
  398. package/dist/chunk-52agge4n.js +0 -38
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-57p201gb.js +0 -83
  401. package/dist/chunk-5ggw1dyv.js +0 -3
  402. package/dist/chunk-5kt3ay7x.js +0 -10
  403. package/dist/chunk-5p568px4.js +0 -1166
  404. package/dist/chunk-5ppkfyn2.js +0 -3
  405. package/dist/chunk-5q87fgkk.js +0 -3
  406. package/dist/chunk-5qb761h2.js +0 -3
  407. package/dist/chunk-5xvbq2gs.js +0 -30
  408. package/dist/chunk-647849kf.js +0 -34
  409. package/dist/chunk-6b5k6w2q.js +0 -7
  410. package/dist/chunk-6cr3eeh4.js +0 -23
  411. package/dist/chunk-6djgb0hr.js +0 -3
  412. package/dist/chunk-6dqzky7x.js +0 -35
  413. package/dist/chunk-6e4c6g46.js +0 -3
  414. package/dist/chunk-6w03t7h6.js +0 -3
  415. package/dist/chunk-6wn85hn6.js +0 -4
  416. package/dist/chunk-6y4gqs1q.js +0 -169
  417. package/dist/chunk-75rndzbd.js +0 -6
  418. package/dist/chunk-77tga15w.js +0 -3
  419. package/dist/chunk-7a51hkpf.js +0 -3
  420. package/dist/chunk-7b0xdy5h.js +0 -386
  421. package/dist/chunk-7cgmq685.js +0 -33
  422. package/dist/chunk-7dy588as.js +0 -6
  423. package/dist/chunk-7rvh2wwv.js +0 -721
  424. package/dist/chunk-7sm05m0j.js +0 -351
  425. package/dist/chunk-7sqdeqsw.js +0 -1
  426. package/dist/chunk-7xcfy2fn.js +0 -4
  427. package/dist/chunk-82t27pvd.js +0 -5
  428. package/dist/chunk-87kx8byz.js +0 -1115
  429. package/dist/chunk-8fgwhhb8.js +0 -6
  430. package/dist/chunk-8qbax8xn.js +0 -347
  431. package/dist/chunk-91s2hres.js +0 -8
  432. package/dist/chunk-94g3cahw.js +0 -11
  433. package/dist/chunk-957amb71.js +0 -8
  434. package/dist/chunk-95w08s8v.js +0 -3
  435. package/dist/chunk-9agvhp1x.js +0 -93
  436. package/dist/chunk-9tmbrwwx.js +0 -219
  437. package/dist/chunk-9yz5d003.js +0 -51
  438. package/dist/chunk-a3hyn4we.js +0 -79
  439. package/dist/chunk-a69tvya5.js +0 -53
  440. package/dist/chunk-adjcg6wa.js +0 -498
  441. package/dist/chunk-adqh2m9z.js +0 -45
  442. package/dist/chunk-asarebzq.js +0 -292
  443. package/dist/chunk-aw3rp9ac.js +0 -24
  444. package/dist/chunk-b0cyc09a.js +0 -109
  445. package/dist/chunk-b3kkjcdh.js +0 -3
  446. package/dist/chunk-b3prs7y0.js +0 -5
  447. package/dist/chunk-b5zc9y0y.js +0 -90
  448. package/dist/chunk-baa7h4yz.js +0 -3
  449. package/dist/chunk-bgec9r1v.js +0 -5224
  450. package/dist/chunk-bjnjpsgn.js +0 -3
  451. package/dist/chunk-bk8ew8ze.js +0 -24
  452. package/dist/chunk-bn08k7yy.js +0 -3
  453. package/dist/chunk-bpgg59wa.js +0 -3
  454. package/dist/chunk-bwxda6n1.js +0 -3
  455. package/dist/chunk-bykjk6vj.js +0 -4
  456. package/dist/chunk-c53hyw5c.js +0 -477
  457. package/dist/chunk-c7jg8w13.js +0 -3
  458. package/dist/chunk-ca6qd1dx.js +0 -3
  459. package/dist/chunk-cdbwprfv.js +0 -6
  460. package/dist/chunk-ceg2c2q2.js +0 -11
  461. package/dist/chunk-cn409b69.js +0 -3
  462. package/dist/chunk-cn8az1b4.js +0 -1
  463. package/dist/chunk-cp3kwv17.js +0 -8
  464. package/dist/chunk-cpcc11vp.js +0 -5
  465. package/dist/chunk-cr3wbrcr.js +0 -10
  466. package/dist/chunk-cygfdk1n.js +0 -3
  467. package/dist/chunk-cyp4m0vh.js +0 -16
  468. package/dist/chunk-cz25azze.js +0 -4
  469. package/dist/chunk-d77yxcds.js +0 -3
  470. package/dist/chunk-dvfs1h3c.js +0 -117
  471. package/dist/chunk-dyjnn5k8.js +0 -262
  472. package/dist/chunk-dzw95th7.js +0 -3
  473. package/dist/chunk-e0zytzdh.js +0 -179
  474. package/dist/chunk-e53h9qhd.js +0 -84
  475. package/dist/chunk-eds0f8f1.js +0 -3
  476. package/dist/chunk-eh8hact1.js +0 -5
  477. package/dist/chunk-epj957jf.js +0 -4
  478. package/dist/chunk-eqeyaq6g.js +0 -77
  479. package/dist/chunk-fbxt2mrx.js +0 -5
  480. package/dist/chunk-fch9tk1k.js +0 -3
  481. package/dist/chunk-fe7r1mq1.js +0 -9
  482. package/dist/chunk-fhawx87n.js +0 -8
  483. package/dist/chunk-fk51yyrw.js +0 -3
  484. package/dist/chunk-fms20x0n.js +0 -21
  485. package/dist/chunk-fs0qezn5.js +0 -341
  486. package/dist/chunk-fzm3y0r3.js +0 -267
  487. package/dist/chunk-g2hekckm.js +0 -161
  488. package/dist/chunk-g4ps1dj8.js +0 -140
  489. package/dist/chunk-g8b81pzc.js +0 -3
  490. package/dist/chunk-ganag9dm.js +0 -3
  491. package/dist/chunk-gc84b1d2.js +0 -58
  492. package/dist/chunk-gcf5v18y.js +0 -60
  493. package/dist/chunk-ghrx0hn1.js +0 -4
  494. package/dist/chunk-gqpkp459.js +0 -3
  495. package/dist/chunk-h45py5w5.js +0 -2
  496. package/dist/chunk-h5wa62ek.js +0 -145
  497. package/dist/chunk-h82kjdr4.js +0 -83
  498. package/dist/chunk-haecq01c.js +0 -3
  499. package/dist/chunk-hepg894w.js +0 -3
  500. package/dist/chunk-hjdc99kb.js +0 -3
  501. package/dist/chunk-hje9v2zh.js +0 -3
  502. package/dist/chunk-hjv76kcw.js +0 -1
  503. package/dist/chunk-hke99a0v.js +0 -3
  504. package/dist/chunk-hpqr9e3x.js +0 -3
  505. package/dist/chunk-hq5cem49.js +0 -236
  506. package/dist/chunk-hrampcrj.js +0 -3
  507. package/dist/chunk-ht4j68cs.js +0 -3
  508. package/dist/chunk-hxx3za24.js +0 -62
  509. package/dist/chunk-j4s5qwd7.js +0 -4
  510. package/dist/chunk-jbejwejg.js +0 -8
  511. package/dist/chunk-jc0fc4ht.js +0 -11
  512. package/dist/chunk-jcs0ymw7.js +0 -3
  513. package/dist/chunk-jfm69keq.js +0 -231
  514. package/dist/chunk-jfrn43vh.js +0 -2
  515. package/dist/chunk-jjamhxpm.js +0 -139
  516. package/dist/chunk-jjvp4t5w.js +0 -27
  517. package/dist/chunk-jt44av4j.js +0 -3
  518. package/dist/chunk-jt98jhpt.js +0 -10
  519. package/dist/chunk-k8440jxh.js +0 -6
  520. package/dist/chunk-kdxa9epn.js +0 -21
  521. package/dist/chunk-kfd2hf6f.js +0 -3
  522. package/dist/chunk-kgym7ch9.js +0 -8
  523. package/dist/chunk-kh6rfz2v.js +0 -4
  524. package/dist/chunk-kkp6rs2n.js +0 -36
  525. package/dist/chunk-ktkmvaa8.js +0 -1
  526. package/dist/chunk-m59y310j.js +0 -3
  527. package/dist/chunk-mgmyr1b9.js +0 -6
  528. package/dist/chunk-mqwbpamc.js +0 -3
  529. package/dist/chunk-mrehzhxv.js +0 -5
  530. package/dist/chunk-mv03qb75.js +0 -3
  531. package/dist/chunk-mv4fb50w.js +0 -1
  532. package/dist/chunk-mwbng54r.js +0 -2
  533. package/dist/chunk-n46a5g1g.js +0 -3
  534. package/dist/chunk-n944baxp.js +0 -3
  535. package/dist/chunk-nanw7yhz.js +0 -14
  536. package/dist/chunk-nap11ntr.js +0 -21
  537. package/dist/chunk-ncnfa8ae.js +0 -29
  538. package/dist/chunk-ngxfwzq3.js +0 -3
  539. package/dist/chunk-nvwb4x04.js +0 -3
  540. package/dist/chunk-nw34xajc.js +0 -8
  541. package/dist/chunk-payfb24w.js +0 -207
  542. package/dist/chunk-pc31m5x5.js +0 -398
  543. package/dist/chunk-pg1fvqb9.js +0 -167
  544. package/dist/chunk-q60knhjf.js +0 -3
  545. package/dist/chunk-q6h6yvzb.js +0 -10
  546. package/dist/chunk-qd5461tt.js +0 -3
  547. package/dist/chunk-qdc3aav1.js +0 -3
  548. package/dist/chunk-qfwzdffx.js +0 -3
  549. package/dist/chunk-qgxwmagw.js +0 -134
  550. package/dist/chunk-qhdtssn1.js +0 -19
  551. package/dist/chunk-qk584whs.js +0 -3
  552. package/dist/chunk-qm4yppj5.js +0 -57
  553. package/dist/chunk-qwyd9a1d.js +0 -2
  554. package/dist/chunk-qxs6et76.js +0 -196
  555. package/dist/chunk-rb1e4cnb.js +0 -3
  556. package/dist/chunk-rh80q1nd.js +0 -1
  557. package/dist/chunk-rkffm9sy.js +0 -128
  558. package/dist/chunk-rv002yn0.js +0 -14
  559. package/dist/chunk-s6ja2bdg.js +0 -66
  560. package/dist/chunk-sjagg9qz.js +0 -66
  561. package/dist/chunk-sn07azv3.js +0 -3
  562. package/dist/chunk-svahbw0w.js +0 -12
  563. package/dist/chunk-svhtdb0s.js +0 -6
  564. package/dist/chunk-t37dp99j.js +0 -3
  565. package/dist/chunk-tj6zfxeb.js +0 -64
  566. package/dist/chunk-tmgz5t2g.js +0 -3
  567. package/dist/chunk-tr0z0e1g.js +0 -3
  568. package/dist/chunk-tx6br9r4.js +0 -274
  569. package/dist/chunk-v97390pe.js +0 -1
  570. package/dist/chunk-vcr5pzpx.js +0 -233
  571. package/dist/chunk-vdfwv0fp.js +0 -6
  572. package/dist/chunk-vp2395eb.js +0 -3
  573. package/dist/chunk-vpe6napb.js +0 -28
  574. package/dist/chunk-vv9wfz1c.js +0 -12
  575. package/dist/chunk-vw6ejgmy.js +0 -21
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w01y57f5.js +0 -1539
  578. package/dist/chunk-w21mwxdd.js +0 -4
  579. package/dist/chunk-w4n8fqp7.js +0 -216
  580. package/dist/chunk-w959hm8j.js +0 -358
  581. package/dist/chunk-wf7zrjsw.js +0 -138
  582. package/dist/chunk-wk07pwtd.js +0 -321
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wxvyj65q.js +0 -2
  585. package/dist/chunk-x1hjv24z.js +0 -11
  586. package/dist/chunk-x39sfpvm.js +0 -302
  587. package/dist/chunk-x4fze3q2.js +0 -314
  588. package/dist/chunk-x64kb787.js +0 -15
  589. package/dist/chunk-xcb0pbr6.js +0 -4
  590. package/dist/chunk-xhkjhxsp.js +0 -3
  591. package/dist/chunk-xhnpsngj.js +0 -5
  592. package/dist/chunk-xsqbk4yk.js +0 -3
  593. package/dist/chunk-xygc53vr.js +0 -68
  594. package/dist/chunk-y0qg6rrv.js +0 -3
  595. package/dist/chunk-y25pr13j.js +0 -19
  596. package/dist/chunk-y4c744dk.js +0 -3
  597. package/dist/chunk-y4md9hp0.js +0 -3
  598. package/dist/chunk-y5wazw6j.js +0 -7
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y86m1wr4.js +0 -4
  601. package/dist/chunk-yaan98dd.js +0 -3
  602. package/dist/chunk-yach037f.js +0 -32
  603. package/dist/chunk-yexjrg9d.js +0 -7
  604. package/dist/chunk-ygvyc6wv.js +0 -90
  605. package/dist/chunk-yj560gp8.js +0 -8
  606. package/dist/chunk-yn38c15w.js +0 -4
  607. package/dist/chunk-yr1gdceh.js +0 -3
  608. package/dist/chunk-yw2fzq86.js +0 -3
  609. package/dist/chunk-ywkrxp2h.js +0 -147
  610. package/dist/chunk-z37xq5rx.js +0 -3
  611. package/dist/chunk-z4djtgt0.js +0 -71
  612. package/dist/chunk-z8cjr9n9.js +0 -7
  613. package/dist/chunk-znxp3zha.js +0 -71
  614. package/dist/chunk-zt2yag10.js +0 -429
package/dist/i18n.js CHANGED
@@ -1,2 +1,633 @@
1
- // @bun
2
- import{Av as j,Bv as k,Cv as l,Dv as m,Ev as n,Fv as o,Gv as p,Hv as q,Iv as r,Jv as s,Kv as t,rv as a,sv as b,tv as c,uv as d,vv as e,wv as f,xv as g,yv as h,zv as i}from"./chunk-j4s5qwd7.js";import"./chunk-1zgsgk4b.js";import"./chunk-48cw2nde.js";import"./chunk-jjvp4t5w.js";import"./chunk-94g3cahw.js";import"./chunk-ht4j68cs.js";import"./chunk-fch9tk1k.js";import"./chunk-cz25azze.js";import"./chunk-adqh2m9z.js";import"./chunk-3jm3snz8.js";export{l as waitForLocale,s as processTranslateDirective,h as preloadTranslationsBackground,g as preloadTranslations,i as loadTranslationLazy,o as loadTranslation,e as isLoading,f as isLoaded,q as isICUFormat,j as getTranslationSync,c as getTranslationCacheStats,k as getTranslationAsync,r as getTranslation,d as getLoadingState,m as getLoadingLocales,p as formatICU,a as defaultI18nConfig,t as createTranslateFilter,b as clearTranslationCache,n as cancelPendingLoads};
1
+ import path from "node:path";
2
+ import { ErrorCodes, inlineError } from "./error-handling.js";
3
+ import { safeEvaluateObject } from "./safe-evaluator.js";
4
+ let resolvedLoadLocale;
5
+ async function resolveLoadLocale() {
6
+ if (resolvedLoadLocale !== void 0)
7
+ return resolvedLoadLocale;
8
+ try {
9
+ resolvedLoadLocale = (await import("@stacksjs/ts-i18n")).loadLocale ?? null;
10
+ } catch {
11
+ resolvedLoadLocale = null;
12
+ }
13
+ return resolvedLoadLocale;
14
+ }
15
+ export const defaultI18nConfig = {
16
+ defaultLocale: "en",
17
+ locale: "en",
18
+ translationsDir: "translations",
19
+ format: "yaml",
20
+ fallbackToKey: !0,
21
+ cache: !0
22
+ };
23
+ const translationsCache = {}, pendingLoads = {}, loadingStates = {};
24
+ export function clearTranslationCache(locale) {
25
+ if (locale)
26
+ delete translationsCache[locale];
27
+ else
28
+ for (const key of Object.keys(translationsCache))
29
+ delete translationsCache[key];
30
+ }
31
+ export function getTranslationCacheStats() {
32
+ const entries = Object.entries(translationsCache).map(([locale, entry]) => ({
33
+ locale,
34
+ loadedAt: new Date(entry.loadedAt),
35
+ keyCount: countKeys(entry.translations)
36
+ }));
37
+ return {
38
+ size: Object.keys(translationsCache).length,
39
+ locales: Object.keys(translationsCache),
40
+ entries
41
+ };
42
+ }
43
+ function countKeys(obj, count = 0) {
44
+ for (const value of Object.values(obj)) {
45
+ count++;
46
+ if (value && typeof value === "object" && !Array.isArray(value))
47
+ count = countKeys(value, count);
48
+ }
49
+ return count;
50
+ }
51
+ function isCacheStale(entry, maxAge = 0) {
52
+ if (maxAge <= 0)
53
+ return !1;
54
+ return Date.now() - entry.loadedAt > maxAge;
55
+ }
56
+ export function getLoadingState(locale) {
57
+ if (translationsCache[locale])
58
+ return "loaded";
59
+ return loadingStates[locale] || "idle";
60
+ }
61
+ export function isLoading(locale) {
62
+ return loadingStates[locale] === "loading";
63
+ }
64
+ export function isLoaded(locale) {
65
+ return !!translationsCache[locale];
66
+ }
67
+ export async function preloadTranslations(config, options) {
68
+ const { locales, parallel = !0, priority = {}, onLocaleLoaded, onComplete, onError } = config, sortedLocales = parallel ? locales : [...locales].sort((a, b) => (priority[b] || 0) - (priority[a] || 0));
69
+ if (parallel) {
70
+ const promises = sortedLocales.map(async (locale) => {
71
+ try {
72
+ await loadTranslationLazy(locale, options);
73
+ onLocaleLoaded?.(locale);
74
+ } catch (error) {
75
+ onError?.(locale, error instanceof Error ? error : Error(String(error)));
76
+ }
77
+ });
78
+ await Promise.all(promises);
79
+ } else
80
+ for (const locale of sortedLocales)
81
+ try {
82
+ await loadTranslationLazy(locale, options);
83
+ onLocaleLoaded?.(locale);
84
+ } catch (error) {
85
+ onError?.(locale, error instanceof Error ? error : Error(String(error)));
86
+ }
87
+ onComplete?.();
88
+ }
89
+ export function preloadTranslationsBackground(config, options) {
90
+ queueMicrotask(() => {
91
+ preloadTranslations(config, options).catch((error) => {
92
+ if (options.debug)
93
+ console.error("Background preload error:", error);
94
+ });
95
+ });
96
+ }
97
+ export async function loadTranslationLazy(locale, options) {
98
+ if ({ ...defaultI18nConfig, ...options.i18n }.cache && translationsCache[locale]) {
99
+ const entry = translationsCache[locale], maxAge = options.i18n?.cacheMaxAge ?? 0;
100
+ if (!isCacheStale(entry, maxAge))
101
+ return entry.translations;
102
+ }
103
+ if (pendingLoads[locale]?.state === "loading")
104
+ return pendingLoads[locale].promise;
105
+ loadingStates[locale] = "loading";
106
+ const loadPromise = loadTranslationInternal(locale, options).then((translations) => {
107
+ loadingStates[locale] = "loaded";
108
+ delete pendingLoads[locale];
109
+ return translations;
110
+ }).catch((error) => {
111
+ loadingStates[locale] = "error";
112
+ pendingLoads[locale] = {
113
+ promise: loadPromise,
114
+ state: "error",
115
+ error: error instanceof Error ? error : Error(String(error))
116
+ };
117
+ throw error;
118
+ });
119
+ pendingLoads[locale] = {
120
+ promise: loadPromise,
121
+ state: "loading"
122
+ };
123
+ return loadPromise;
124
+ }
125
+ export function getTranslationSync(locale) {
126
+ return translationsCache[locale]?.translations;
127
+ }
128
+ export async function getTranslationAsync(locale, options) {
129
+ const cached = getTranslationSync(locale);
130
+ if (cached)
131
+ return cached;
132
+ return loadTranslationLazy(locale, options);
133
+ }
134
+ export async function waitForLocale(locale, timeoutMs) {
135
+ if (translationsCache[locale])
136
+ return translationsCache[locale].translations;
137
+ if (pendingLoads[locale]) {
138
+ if (timeoutMs)
139
+ return Promise.race([
140
+ pendingLoads[locale].promise,
141
+ new Promise((_, reject) => setTimeout(() => reject(Error(`Timeout waiting for locale: ${locale}`)), timeoutMs))
142
+ ]);
143
+ return pendingLoads[locale].promise;
144
+ }
145
+ throw Error(`Locale "${locale}" is not loading. Call loadTranslationLazy first.`);
146
+ }
147
+ export function getLoadingLocales() {
148
+ return Object.entries(loadingStates).filter(([_, state]) => state === "loading").map(([locale]) => locale);
149
+ }
150
+ export function cancelPendingLoads(locale) {
151
+ if (locale) {
152
+ delete pendingLoads[locale];
153
+ delete loadingStates[locale];
154
+ } else {
155
+ for (const key of Object.keys(pendingLoads))
156
+ delete pendingLoads[key];
157
+ for (const key of Object.keys(loadingStates))
158
+ delete loadingStates[key];
159
+ }
160
+ }
161
+ async function loadTranslationInternal(locale, options) {
162
+ const i18nConfig = {
163
+ ...defaultI18nConfig,
164
+ ...options.i18n
165
+ }, translationsDir = path.isAbsolute(i18nConfig.translationsDir) ? i18nConfig.translationsDir : path.resolve(options.root || process.cwd(), i18nConfig.translationsDir);
166
+ try {
167
+ const loadLocale = await resolveLoadLocale(), tree = loadLocale ? await loadLocale(locale, {
168
+ translationsDir,
169
+ defaultLocale: i18nConfig.defaultLocale,
170
+ sources: formatToSources(i18nConfig.format)
171
+ }) : await loadTranslationFromFile(locale, i18nConfig, translationsDir);
172
+ if (tree === void 0) {
173
+ if (locale !== i18nConfig.defaultLocale)
174
+ return loadTranslationInternal(i18nConfig.defaultLocale, options);
175
+ return {};
176
+ }
177
+ const translations = tree;
178
+ if (i18nConfig.cache)
179
+ translationsCache[locale] = {
180
+ translations,
181
+ loadedAt: Date.now(),
182
+ locale
183
+ };
184
+ return translations;
185
+ } catch (error) {
186
+ if (options.debug)
187
+ console.error(`Error loading translation file for locale "${locale}":`, error);
188
+ if (locale !== i18nConfig.defaultLocale)
189
+ return loadTranslationInternal(i18nConfig.defaultLocale, options);
190
+ return {};
191
+ }
192
+ }
193
+ async function loadTranslationFromFile(locale, i18nConfig, translationsDir) {
194
+ const translationFile = path.join(translationsDir, `${locale}${getFileExtension(i18nConfig.format)}`);
195
+ try {
196
+ const imported = await import(translationFile);
197
+ return imported.default || imported;
198
+ } catch (importError) {
199
+ try {
200
+ const fileContent = await Bun.file(translationFile).text();
201
+ if (i18nConfig.format === "yaml" || i18nConfig.format === "yml")
202
+ return parseSimpleYaml(fileContent);
203
+ if (i18nConfig.format === "json")
204
+ return JSON.parse(fileContent);
205
+ throw importError;
206
+ } catch {
207
+ return;
208
+ }
209
+ }
210
+ }
211
+ function getFileExtension(format) {
212
+ switch (format) {
213
+ case "yaml":
214
+ return ".yaml";
215
+ case "yml":
216
+ return ".yml";
217
+ case "js":
218
+ return ".js";
219
+ case "ts":
220
+ return ".ts";
221
+ case "json":
222
+ default:
223
+ return ".json";
224
+ }
225
+ }
226
+ function parseSimpleYaml(content) {
227
+ const result = {}, lines = content.split(`
228
+ `), stack = [{ obj: result, indent: -1 }];
229
+ for (const rawLine of lines) {
230
+ const line = rawLine.replace(/#.*$/, "").trimEnd();
231
+ if (!line.trim())
232
+ continue;
233
+ const indent = line.search(/\S/);
234
+ if (indent === -1)
235
+ continue;
236
+ while (stack.length > 1 && stack[stack.length - 1].indent >= indent)
237
+ stack.pop();
238
+ const currentObj = stack[stack.length - 1].obj, match = line.match(/^(\s*)(\S[^:]*):\s*(.*)$/);
239
+ if (match) {
240
+ const [, , key, rawValue] = match, trimmedKey = key.trim(), trimmedValue = rawValue.trim();
241
+ if (trimmedValue === "") {
242
+ currentObj[trimmedKey] = {};
243
+ stack.push({ obj: currentObj[trimmedKey], indent });
244
+ } else
245
+ currentObj[trimmedKey] = parseYamlValue(trimmedValue);
246
+ }
247
+ }
248
+ return result;
249
+ }
250
+ function parseYamlValue(value) {
251
+ if (value.startsWith("'") && value.endsWith("'") || value.startsWith('"') && value.endsWith('"'))
252
+ return value.slice(1, -1);
253
+ const lowerValue = value.toLowerCase();
254
+ if (lowerValue === "true" || lowerValue === "yes")
255
+ return !0;
256
+ if (lowerValue === "false" || lowerValue === "no")
257
+ return !1;
258
+ if (lowerValue === "null" || lowerValue === "~")
259
+ return null;
260
+ const num = Number(value);
261
+ if (!Number.isNaN(num) && value !== "")
262
+ return num;
263
+ return value;
264
+ }
265
+ function formatToSources(format) {
266
+ switch (format) {
267
+ case "yaml":
268
+ case "yml":
269
+ return ["yaml"];
270
+ case "js":
271
+ case "ts":
272
+ return ["ts"];
273
+ case "json":
274
+ default:
275
+ return ["json"];
276
+ }
277
+ }
278
+ export async function loadTranslation(locale, options) {
279
+ return loadTranslationLazy(locale, options);
280
+ }
281
+ function selectPluralForm(forms, count) {
282
+ for (const form of forms) {
283
+ const trimmed = form.trim(), exactMatch = trimmed.match(/^\{(\d+)\}\s*(.*)$/);
284
+ if (exactMatch) {
285
+ const exactCount = Number.parseInt(exactMatch[1], 10);
286
+ if (count === exactCount)
287
+ return exactMatch[2];
288
+ continue;
289
+ }
290
+ const rangeMatch = trimmed.match(/^\[(\d+),(\d+|\*)\]\s*(.*)$/);
291
+ if (rangeMatch) {
292
+ const min = Number.parseInt(rangeMatch[1], 10), max = rangeMatch[2] === "*" ? Number.POSITIVE_INFINITY : Number.parseInt(rangeMatch[2], 10);
293
+ if (count >= min && count <= max)
294
+ return rangeMatch[3];
295
+ continue;
296
+ }
297
+ }
298
+ if (forms.length === 2)
299
+ return count === 1 ? forms[0].trim() : forms[1].trim();
300
+ if (count < forms.length)
301
+ return forms[count].trim();
302
+ return forms[forms.length - 1].trim();
303
+ }
304
+ export function formatICU(message, params = {}) {
305
+ return parseICUMessage(message, params);
306
+ }
307
+ function parseICUMessage(message, params) {
308
+ let result = "", i = 0;
309
+ while (i < message.length)
310
+ if (message[i] === "{") {
311
+ const endIndex = findMatchingBrace(message, i);
312
+ if (endIndex === -1) {
313
+ result += message[i];
314
+ i++;
315
+ continue;
316
+ }
317
+ const placeholder = message.slice(i + 1, endIndex);
318
+ result += formatICUPlaceholder(placeholder, params);
319
+ i = endIndex + 1;
320
+ } else if (message[i] === "'" && i + 1 < message.length)
321
+ if (message[i + 1] === "'") {
322
+ result += "'";
323
+ i += 2;
324
+ } else if (message[i + 1] === "{" || message[i + 1] === "}") {
325
+ result += message[i + 1];
326
+ i += 2;
327
+ } else {
328
+ result += message[i];
329
+ i++;
330
+ }
331
+ else {
332
+ result += message[i];
333
+ i++;
334
+ }
335
+ return result;
336
+ }
337
+ function findMatchingBrace(message, start) {
338
+ let depth = 0;
339
+ for (let i = start;i < message.length; i++)
340
+ if (message[i] === "{")
341
+ depth++;
342
+ else if (message[i] === "}") {
343
+ depth--;
344
+ if (depth === 0)
345
+ return i;
346
+ }
347
+ return -1;
348
+ }
349
+ function formatICUPlaceholder(placeholder, params) {
350
+ const parts = splitICUParts(placeholder);
351
+ if (parts.length === 0)
352
+ return `{${placeholder}}`;
353
+ const varName = parts[0].trim(), value = params[varName];
354
+ if (parts.length === 1)
355
+ return value !== void 0 ? String(value) : `{${varName}}`;
356
+ switch (parts[1].trim().toLowerCase()) {
357
+ case "plural":
358
+ return formatICUPlural(value, parts.slice(2).join(","), params);
359
+ case "select":
360
+ return formatICUSelect(value, parts.slice(2).join(","));
361
+ case "selectordinal":
362
+ return formatICUSelectOrdinal(value, parts.slice(2).join(","));
363
+ case "number":
364
+ return formatICUNumber(value, parts[2]?.trim());
365
+ case "date":
366
+ return formatICUDate(value, parts[2]?.trim());
367
+ case "time":
368
+ return formatICUTime(value, parts[2]?.trim());
369
+ default:
370
+ return value !== void 0 ? String(value) : `{${placeholder}}`;
371
+ }
372
+ }
373
+ function splitICUParts(placeholder) {
374
+ const parts = [];
375
+ let current = "", depth = 0;
376
+ for (let i = 0;i < placeholder.length; i++) {
377
+ const char = placeholder[i];
378
+ if (char === "{") {
379
+ depth++;
380
+ current += char;
381
+ } else if (char === "}") {
382
+ depth--;
383
+ current += char;
384
+ } else if (char === "," && depth === 0) {
385
+ parts.push(current);
386
+ current = "";
387
+ } else
388
+ current += char;
389
+ }
390
+ if (current)
391
+ parts.push(current);
392
+ return parts;
393
+ }
394
+ function formatICUPlural(value, options, params) {
395
+ const count = Number(value) || 0, parsedOptions = parseICUOptions(options), exactKey = `=${count}`;
396
+ if (parsedOptions[exactKey])
397
+ return formatICUPluralContent(parsedOptions[exactKey], count, params);
398
+ const category = getPluralCategory(count);
399
+ if (parsedOptions[category])
400
+ return formatICUPluralContent(parsedOptions[category], count, params);
401
+ if (parsedOptions.other)
402
+ return formatICUPluralContent(parsedOptions.other, count, params);
403
+ return String(count);
404
+ }
405
+ function formatICUPluralContent(content, count, params) {
406
+ const replaced = content.replace(/#/g, String(count));
407
+ return parseICUMessage(replaced, params);
408
+ }
409
+ function getPluralCategory(n) {
410
+ const absN = Math.abs(n), i = Math.floor(absN), v = String(n).includes(".") ? String(n).split(".")[1].length : 0;
411
+ if (i === 1 && v === 0)
412
+ return "one";
413
+ return "other";
414
+ }
415
+ function formatICUSelect(value, options) {
416
+ const key = String(value || ""), parsedOptions = parseICUOptions(options);
417
+ if (parsedOptions[key])
418
+ return parsedOptions[key];
419
+ return parsedOptions.other || String(value);
420
+ }
421
+ function formatICUSelectOrdinal(value, options) {
422
+ const count = Number(value) || 0, parsedOptions = parseICUOptions(options), category = getOrdinalCategory(count);
423
+ if (parsedOptions[category])
424
+ return parsedOptions[category].replace(/#/g, String(count));
425
+ if (parsedOptions.other)
426
+ return parsedOptions.other.replace(/#/g, String(count));
427
+ return String(count);
428
+ }
429
+ function getOrdinalCategory(n) {
430
+ const absN = Math.abs(n), mod10 = absN % 10, mod100 = absN % 100;
431
+ if (mod10 === 1 && mod100 !== 11)
432
+ return "one";
433
+ if (mod10 === 2 && mod100 !== 12)
434
+ return "two";
435
+ if (mod10 === 3 && mod100 !== 13)
436
+ return "few";
437
+ return "other";
438
+ }
439
+ function parseICUOptions(options) {
440
+ const result = {}, regex = /(\w+|=\d+)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
441
+ let match = regex.exec(options);
442
+ while (match !== null) {
443
+ result[match[1]] = match[2];
444
+ match = regex.exec(options);
445
+ }
446
+ return result;
447
+ }
448
+ function formatICUNumber(value, style) {
449
+ const num = Number(value);
450
+ if (Number.isNaN(num))
451
+ return String(value);
452
+ switch (style) {
453
+ case "integer":
454
+ return Math.floor(num).toLocaleString();
455
+ case "percent":
456
+ return `${(num * 100).toFixed(0)}%`;
457
+ case "currency":
458
+ return num.toLocaleString(void 0, { style: "currency", currency: "USD" });
459
+ default:
460
+ return num.toLocaleString();
461
+ }
462
+ }
463
+ function formatICUDate(value, style) {
464
+ const date = value instanceof Date ? value : new Date(String(value));
465
+ if (Number.isNaN(date.getTime()))
466
+ return String(value);
467
+ const options = {};
468
+ switch (style) {
469
+ case "short":
470
+ options.dateStyle = "short";
471
+ break;
472
+ case "medium":
473
+ options.dateStyle = "medium";
474
+ break;
475
+ case "long":
476
+ options.dateStyle = "long";
477
+ break;
478
+ case "full":
479
+ options.dateStyle = "full";
480
+ break;
481
+ default:
482
+ options.dateStyle = "medium";
483
+ }
484
+ return date.toLocaleDateString(void 0, options);
485
+ }
486
+ function formatICUTime(value, style) {
487
+ const date = value instanceof Date ? value : new Date(String(value));
488
+ if (Number.isNaN(date.getTime()))
489
+ return String(value);
490
+ const options = {};
491
+ switch (style) {
492
+ case "short":
493
+ options.timeStyle = "short";
494
+ break;
495
+ case "medium":
496
+ options.timeStyle = "medium";
497
+ break;
498
+ case "long":
499
+ options.timeStyle = "long";
500
+ break;
501
+ case "full":
502
+ options.timeStyle = "full";
503
+ break;
504
+ default:
505
+ options.timeStyle = "short";
506
+ }
507
+ return date.toLocaleTimeString(void 0, options);
508
+ }
509
+ export function isICUFormat(message) {
510
+ return /\{[^}]+,\s*(?:plural|select|selectordinal|number|date|time)\s*,/.test(message);
511
+ }
512
+ export function getTranslation(key, translations, fallbackToKey = !0, params = {}) {
513
+ const parts = key.split(".");
514
+ let value = translations;
515
+ for (const part of parts) {
516
+ if (value === void 0 || value === null)
517
+ break;
518
+ value = value[part];
519
+ }
520
+ if (value === void 0 || value === null)
521
+ return fallbackToKey ? key : "";
522
+ let result = String(value);
523
+ if (isICUFormat(result))
524
+ return formatICU(result, params);
525
+ if (result.includes("|") && "count" in params) {
526
+ const count = Number(params.count), forms = result.split("|");
527
+ result = selectPluralForm(forms, count);
528
+ }
529
+ for (const [paramKey, paramValue] of Object.entries(params)) {
530
+ const escapedKey = paramKey.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
531
+ result = result.replace(new RegExp(`:${escapedKey}`, "g"), String(paramValue));
532
+ }
533
+ return result;
534
+ }
535
+ export async function processTranslateDirective(template, context, filePath, options) {
536
+ let output = template;
537
+ const fixedTranslateRegex = /@translate\(\s*['"]([^'"]+)['"]\s*(?:,\s*(\{[^}]*\})\s*)?\)([\s\S]*?)@endtranslate/g, i18nConfig = {
538
+ ...defaultI18nConfig,
539
+ ...options.i18n
540
+ }, translations = await loadTranslation(i18nConfig.locale, options);
541
+ context.__translations = translations;
542
+ context.__locale = i18nConfig.locale;
543
+ context.__i18nConfig = i18nConfig;
544
+ output = await replaceAsync(output, fixedTranslateRegex, async (_match, key, paramsStr, content, _offset) => {
545
+ try {
546
+ let params = {};
547
+ if (paramsStr)
548
+ try {
549
+ const approaches = [
550
+ () => JSON.parse(paramsStr),
551
+ () => {
552
+ const jsonStr = `{"data":${paramsStr}}`, parsed = JSON.parse(jsonStr);
553
+ return typeof parsed.data === "object" ? parsed.data : {};
554
+ },
555
+ () => {
556
+ return safeEvaluateObject(paramsStr, context);
557
+ }
558
+ ];
559
+ for (const approach of approaches)
560
+ try {
561
+ params = approach();
562
+ if (Object.keys(params).length > 0)
563
+ break;
564
+ } catch {}
565
+ } catch (error) {
566
+ if (options.debug)
567
+ console.error("Error parsing parameters for @translate directive:", error);
568
+ }
569
+ return getTranslation(key, translations, i18nConfig.fallbackToKey, params) || content.trim();
570
+ } catch (error) {
571
+ if (options.debug)
572
+ console.error("Error processing @translate directive:", error);
573
+ return inlineError("Translate", `Error in @translate('${key}'): ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.EVALUATION_ERROR);
574
+ }
575
+ });
576
+ const inlineTranslateRegex = /@translate\(\s*['"]([^'"]+)['"]\s*(?:,\s*(\{[^}]+\})\s*)?\)/g;
577
+ if (options.debug) {
578
+ console.warn(`Processing translations in template. Sections: ${output.includes("<h2>Translation with Parameters</h2>") ? "Parameters section found" : "Parameters section missing"}`);
579
+ const matches = [...output.matchAll(inlineTranslateRegex)];
580
+ console.warn(`Found ${matches.length} @translate matches`);
581
+ matches.forEach((m, i) => console.warn(`Match ${i}: ${m[0]}, Key: ${m[1]}, Params: ${m[2] || "none"}`));
582
+ }
583
+ output = await replaceAsync(output, /@translate\(\s*['"]([^'"]+)['"]\s*(?:,\s*(\{[^}]*\})\s*)?\)/g, async (_match, key, paramsStr, _offset) => {
584
+ try {
585
+ let params = {};
586
+ if (paramsStr)
587
+ try {
588
+ const approaches = [
589
+ () => JSON.parse(paramsStr),
590
+ () => {
591
+ const jsonStr = `{"data":${paramsStr}}`, parsed = JSON.parse(jsonStr);
592
+ return typeof parsed.data === "object" ? parsed.data : {};
593
+ },
594
+ () => {
595
+ return safeEvaluateObject(paramsStr, context);
596
+ }
597
+ ];
598
+ for (const approach of approaches)
599
+ try {
600
+ params = approach();
601
+ if (Object.keys(params).length > 0)
602
+ break;
603
+ } catch {}
604
+ } catch (error) {
605
+ if (options.debug)
606
+ console.error("Error parsing parameters for @translate directive:", error);
607
+ }
608
+ return getTranslation(key, translations, i18nConfig.fallbackToKey, params);
609
+ } catch (error) {
610
+ if (options.debug)
611
+ console.error("Error processing @translate directive:", error);
612
+ return inlineError("Translate", `Error in @translate('${key}'): ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.EVALUATION_ERROR);
613
+ }
614
+ });
615
+ return output;
616
+ }
617
+ async function replaceAsync(str, regex, asyncFn) {
618
+ const promises = [];
619
+ str.replace(regex, (match, ...args) => {
620
+ const promise = asyncFn(match, ...args).then((replacement) => ({
621
+ match,
622
+ replacement
623
+ }));
624
+ promises.push(promise);
625
+ return match;
626
+ });
627
+ return (await Promise.all(promises)).reduce((str, { match, replacement }) => str.replace(match, replacement), str);
628
+ }
629
+ export function createTranslateFilter(translations, fallbackToKey = !0) {
630
+ return (value, params = {}) => {
631
+ return getTranslation(value, translations, fallbackToKey, params);
632
+ };
633
+ }