@stacksjs/stx 0.2.95 → 0.2.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/dist/a11y.js +598 -2
  2. package/dist/analytics.js +159 -2
  3. package/dist/analyzer.js +240 -2
  4. package/dist/animation.js +688 -2
  5. package/dist/app-shell.js +220 -2
  6. package/dist/app.js +79 -2
  7. package/dist/assets.js +155 -2
  8. package/dist/ast.js +630 -2
  9. package/dist/async-components.js +428 -2
  10. package/dist/auth.js +12 -2
  11. package/dist/broadcasting.js +102 -2
  12. package/dist/browser-composables.js +565 -2
  13. package/dist/build-assets.js +29 -2
  14. package/dist/build-mode-detector.js +50 -2
  15. package/dist/build-optimizer.js +433 -2
  16. package/dist/build-views.js +180 -2
  17. package/dist/build.js +33 -2
  18. package/dist/builtins/drawer.js +37 -2
  19. package/dist/builtins/escape.js +3 -2
  20. package/dist/builtins/icon.js +83 -2
  21. package/dist/builtins/index.js +34 -2
  22. package/dist/builtins/modal.js +38 -2
  23. package/dist/builtins/safe-image.js +51 -2
  24. package/dist/builtins/stx-image.js +200 -2
  25. package/dist/builtins/stx-link.js +41 -2
  26. package/dist/builtins/stx-loading-indicator.js +35 -2
  27. package/dist/builtins/suspense.js +24 -2
  28. package/dist/builtins/toast.js +42 -2
  29. package/dist/builtins/tooltip.js +106 -2
  30. package/dist/builtins/transition-group.js +22 -2
  31. package/dist/bundle-analyzer/collector.js +233 -2
  32. package/dist/bundle-analyzer/index.js +82 -2
  33. package/dist/bundle-analyzer/report.js +318 -2
  34. package/dist/bundle-analyzer/treemap.js +594 -2
  35. package/dist/caching.js +131 -2
  36. package/dist/cli.js +11317 -10982
  37. package/dist/client/directive.js +14 -2
  38. package/dist/client/index.js +2 -2
  39. package/dist/client-helpers.js +312 -2
  40. package/dist/client-script-bundler.js +216 -6
  41. package/dist/client-script.js +754 -2
  42. package/dist/client.js +73 -4
  43. package/dist/component-hmr.js +585 -2
  44. package/dist/component-library.d.ts +6 -0
  45. package/dist/component-library.js +683 -0
  46. package/dist/component-processing.js +613 -2
  47. package/dist/component-registry.js +90 -2
  48. package/dist/component-renderer.js +660 -2
  49. package/dist/components.js +213 -2
  50. package/dist/composables/index.js +220 -2
  51. package/dist/composables/use-battery.js +101 -2
  52. package/dist/composables/use-broadcast-channel.js +80 -2
  53. package/dist/composables/use-channel.js +124 -2
  54. package/dist/composables/use-clipboard.js +79 -2
  55. package/dist/composables/use-color-mode.js +131 -2
  56. package/dist/composables/use-cookie.js +86 -2
  57. package/dist/composables/use-device-orientation.js +181 -2
  58. package/dist/composables/use-event-listener.js +27 -2
  59. package/dist/composables/use-event-source.js +166 -2
  60. package/dist/composables/use-eye-dropper.js +142 -2
  61. package/dist/composables/use-fetch.js +223 -2
  62. package/dist/composables/use-fullscreen.js +110 -2
  63. package/dist/composables/use-geolocation.js +101 -2
  64. package/dist/composables/use-idle.js +182 -2
  65. package/dist/composables/use-intersection-observer.js +168 -2
  66. package/dist/composables/use-keyboard.js +224 -2
  67. package/dist/composables/use-media-query.js +62 -2
  68. package/dist/composables/use-meta.js +48 -2
  69. package/dist/composables/use-mouse.js +286 -2
  70. package/dist/composables/use-mutation-observer.js +129 -2
  71. package/dist/composables/use-network.js +85 -2
  72. package/dist/composables/use-notification.js +94 -2
  73. package/dist/composables/use-permissions.js +132 -2
  74. package/dist/composables/use-query.js +0 -1
  75. package/dist/composables/use-resize-observer.js +157 -2
  76. package/dist/composables/use-router.js +51 -2
  77. package/dist/composables/use-share.js +104 -2
  78. package/dist/composables/use-speech.js +294 -2
  79. package/dist/composables/use-storage.js +130 -2
  80. package/dist/composables/use-text-selection.js +205 -4
  81. package/dist/composables/use-timer.js +183 -2
  82. package/dist/composables/use-utilities.js +176 -2
  83. package/dist/composables/use-wake-lock.js +122 -2
  84. package/dist/composables/use-websocket.js +165 -2
  85. package/dist/composables/use-window.js +163 -2
  86. package/dist/composables.js +552 -2
  87. package/dist/composition-api.js +190 -2
  88. package/dist/computed.js +376 -8
  89. package/dist/conditionals.js +599 -2
  90. package/dist/config.js +751 -2
  91. package/dist/craft-bridge.js +432 -2
  92. package/dist/craft-compiler.js +810 -2
  93. package/dist/craft-components.js +945 -2
  94. package/dist/craft-entry.js +5 -2
  95. package/dist/craft-ssr.js +559 -2
  96. package/dist/csp.js +220 -2
  97. package/dist/csrf.js +38 -2
  98. package/dist/custom-directives.js +136 -2
  99. package/dist/defer.js +156 -2
  100. package/dist/deploy/config-generators.js +214 -2
  101. package/dist/deploy/index.js +203 -2
  102. package/dist/deploy/netlify.js +167 -2
  103. package/dist/dev-server/crosswind.js +379 -2
  104. package/dist/dev-server/index.js +7 -2
  105. package/dist/dev-server/keyboard-shortcuts.js +81 -2
  106. package/dist/dev-server/native-window.js +91 -2
  107. package/dist/dev-server/port-utils.js +40 -2
  108. package/dist/dev-server/serve-app.js +682 -2
  109. package/dist/dev-server/serve-file.js +439 -2
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +579 -2
  112. package/dist/dev-server/terminal-colors.js +45 -2
  113. package/dist/dev-server/theme-selector.js +111 -2
  114. package/dist/dev-server/types.js +43 -2
  115. package/dist/dev-server.js +4 -2
  116. package/dist/devtools.js +462 -18
  117. package/dist/directive-api.js +355 -2
  118. package/dist/docs.js +567 -2
  119. package/dist/doctor.js +123 -2
  120. package/dist/document-shell.js +105 -2
  121. package/dist/dynamic-components.js +78 -2
  122. package/dist/edge-runtime.js +539 -2
  123. package/dist/env.js +9 -2
  124. package/dist/error-boundaries.js +62 -12
  125. package/dist/error-handling.js +1 -2
  126. package/dist/errors/codes.js +97 -2
  127. package/dist/errors/formatter.js +196 -2
  128. package/dist/errors/index.js +44 -2
  129. package/dist/errors/logger.js +250 -2
  130. package/dist/errors/sanitizer.js +181 -2
  131. package/dist/errors/types.js +86 -2
  132. package/dist/events.js +382 -2
  133. package/dist/expressions.js +650 -2
  134. package/dist/formatter.js +265 -2
  135. package/dist/forms-validation.js +510 -4
  136. package/dist/forms.js +709 -2
  137. package/dist/head.js +224 -2
  138. package/dist/heatmap.js +566 -2
  139. package/dist/hot-reload.js +367 -2
  140. package/dist/html-masking.js +73 -2
  141. package/dist/hydration-runtime.js +195 -2
  142. package/dist/hydration.js +654 -2
  143. package/dist/i18n.js +633 -2
  144. package/dist/image-optimization/auto-sibling.js +88 -2
  145. package/dist/image-optimization/build-plugin.js +241 -2
  146. package/dist/image-optimization/component.js +244 -2
  147. package/dist/image-optimization/directive.js +203 -2
  148. package/dist/image-optimization/index.js +54 -2
  149. package/dist/image-optimization/processor.js +262 -2
  150. package/dist/image-optimization/serve.js +102 -2
  151. package/dist/includes.js +733 -2
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +134 -2
  154. package/dist/init.js +505 -2
  155. package/dist/inline-assets.js +82 -2
  156. package/dist/interactive.js +383 -2
  157. package/dist/internal-markdown.js +141 -2
  158. package/dist/island-chunking.js +52 -2
  159. package/dist/js-ts.js +57 -2
  160. package/dist/jsx-runtime.js +289 -2
  161. package/dist/keep-alive.js +421 -2
  162. package/dist/lazy-loader.js +245 -2
  163. package/dist/loading-indicator.js +322 -2
  164. package/dist/loops.js +643 -2
  165. package/dist/manifest.js +31 -2
  166. package/dist/markdown.js +68 -2
  167. package/dist/media/client/blur-up.js +217 -2
  168. package/dist/media/client/index.js +53 -2
  169. package/dist/media/client/lazy-load.js +283 -2
  170. package/dist/media/client/upload-handler.js +354 -2
  171. package/dist/media/image/component.js +574 -2
  172. package/dist/media/image/directive.js +160 -2
  173. package/dist/media/image/editing.js +193 -2
  174. package/dist/media/image/index.js +80 -2
  175. package/dist/media/image/placeholder.js +188 -2
  176. package/dist/media/image/processor/cache.js +51 -2
  177. package/dist/media/image/processor/index.js +3 -2
  178. package/dist/media/image/processor/optimizer.js +202 -2
  179. package/dist/media/image/processor/responsive.js +162 -2
  180. package/dist/media/image/srcset.js +194 -2
  181. package/dist/media/index.js +198 -2
  182. package/dist/media/manager/embed.js +253 -2
  183. package/dist/media/protected/component.js +235 -2
  184. package/dist/media/protected/index.js +20 -2
  185. package/dist/media/protected/signature.js +205 -2
  186. package/dist/media/shared/cache.js +132 -2
  187. package/dist/media/shared/hash.js +35 -2
  188. package/dist/media/shared/index.js +2 -2
  189. package/dist/media/types.js +0 -1
  190. package/dist/media/upload/component.js +320 -2
  191. package/dist/media/upload/index.js +1 -2
  192. package/dist/media/video/directive.js +142 -2
  193. package/dist/media/video/index.js +583 -2
  194. package/dist/media/video/processor/cache.js +52 -2
  195. package/dist/media/video/processor/index.js +4 -2
  196. package/dist/media/video/processor/streaming.js +197 -2
  197. package/dist/media/video/processor/thumbnail.js +134 -2
  198. package/dist/media/video/processor/transcoder.js +283 -2
  199. package/dist/method-spoofing.js +17 -2
  200. package/dist/middleware.js +40 -2
  201. package/dist/misc-directives.js +222 -2
  202. package/dist/native-build.js +511 -2
  203. package/dist/parser/directive-parser.js +239 -2
  204. package/dist/parser/expression-parser.js +358 -2
  205. package/dist/parser/index.js +23 -2
  206. package/dist/parser/tokenizer.js +534 -2
  207. package/dist/partial-hydration.js +427 -2
  208. package/dist/performance-utils.js +430 -2
  209. package/dist/placeholder.js +35 -2
  210. package/dist/plugin-system.js +214 -2
  211. package/dist/plugin.js +173 -2
  212. package/dist/precompiler.js +660 -81
  213. package/dist/process.js +711 -2
  214. package/dist/production-build.js +596 -2
  215. package/dist/production-builder.js +132 -2
  216. package/dist/production-server.js +188 -2
  217. package/dist/props.js +224 -2
  218. package/dist/public-env.js +19 -2
  219. package/dist/pwa/audit.js +255 -2
  220. package/dist/pwa/directives.js +332 -2
  221. package/dist/pwa/icons.js +109 -2
  222. package/dist/pwa/index.js +47 -2
  223. package/dist/pwa/inject.js +102 -2
  224. package/dist/pwa/manifest.js +186 -2
  225. package/dist/pwa/offline.js +259 -2
  226. package/dist/pwa/precache.js +116 -2
  227. package/dist/pwa/service-worker.js +860 -2
  228. package/dist/pwa/workbox-strategies.js +167 -2
  229. package/dist/pwa/workbox.js +382 -2
  230. package/dist/pwa.js +427 -427
  231. package/dist/reactive-bindings.js +266 -2
  232. package/dist/reactive.js +569 -2
  233. package/dist/reactivity.js +559 -2
  234. package/dist/release.js +1 -2
  235. package/dist/render.js +165 -2
  236. package/dist/route-middleware.js +17 -2
  237. package/dist/router.js +9 -2
  238. package/dist/routes.js +14 -2
  239. package/dist/runtime-injection.js +120 -2
  240. package/dist/runtime.js +94 -2
  241. package/dist/safe-evaluator.js +444 -2
  242. package/dist/scaffolding.js +897 -2
  243. package/dist/screenshot.js +87 -2
  244. package/dist/script-classifier.js +32 -2
  245. package/dist/script-validation.js +158 -2
  246. package/dist/seo.js +457 -2
  247. package/dist/serve.js +237 -2
  248. package/dist/server-bindings.js +108 -2
  249. package/dist/server-components.js +338 -11
  250. package/dist/signal-processing.js +946 -2
  251. package/dist/signals-api.js +154 -2
  252. package/dist/signals.js +5287 -2
  253. package/dist/site-builder/build.js +224 -2
  254. package/dist/site-builder/i18n.js +140 -2
  255. package/dist/site-builder/index.js +15 -2
  256. package/dist/site-builder/robots.js +26 -2
  257. package/dist/site-builder/router.js +27 -2
  258. package/dist/site-builder/seo.js +36 -2
  259. package/dist/site-builder/sitemap.js +26 -2
  260. package/dist/site-builder/theme.js +33 -2
  261. package/dist/site-builder/types.js +0 -1
  262. package/dist/slots.js +201 -2
  263. package/dist/source-maps.js +350 -2
  264. package/dist/spa-shell.js +34 -2
  265. package/dist/ssg.js +389 -389
  266. package/dist/ssr.js +355 -2
  267. package/dist/state-management.js +533 -2
  268. package/dist/store-imports.js +13 -2
  269. package/dist/store-loader.js +72 -5
  270. package/dist/stores-client.js +132 -2
  271. package/dist/story/addons.js +261 -2
  272. package/dist/story/analytics.js +235 -2
  273. package/dist/story/auto-stories.js +158 -2
  274. package/dist/story/bookmarks.js +277 -2
  275. package/dist/story/bun-test.js +102 -2
  276. package/dist/story/cli.js +155 -2
  277. package/dist/story/collect/analyzer.js +305 -2
  278. package/dist/story/collect/index.js +27 -2
  279. package/dist/story/collect/parser.js +129 -2
  280. package/dist/story/collect/scanner.js +101 -2
  281. package/dist/story/collect/tree.js +110 -2
  282. package/dist/story/commands/build.js +172 -2
  283. package/dist/story/commands/dev.js +78 -2
  284. package/dist/story/commands/index.js +3 -2
  285. package/dist/story/commands/preview.js +56 -2
  286. package/dist/story/compiled-output.js +151 -2
  287. package/dist/story/composition.js +261 -2
  288. package/dist/story/config-watcher.js +67 -2
  289. package/dist/story/config.js +64 -2
  290. package/dist/story/context.js +27 -2
  291. package/dist/story/controls/index.js +320 -2
  292. package/dist/story/crosswind.js +189 -2
  293. package/dist/story/desktop-preview.js +105 -2
  294. package/dist/story/docs-generator.js +186 -2
  295. package/dist/story/errors.js +239 -2
  296. package/dist/story/figma-export.js +224 -2
  297. package/dist/story/generator.js +165 -2
  298. package/dist/story/hmr.js +131 -2
  299. package/dist/story/hot-swap.js +207 -2
  300. package/dist/story/index.js +49 -2
  301. package/dist/story/interactions.js +225 -2
  302. package/dist/story/keyboard-shortcuts.js +345 -2
  303. package/dist/story/output.js +153 -2
  304. package/dist/story/performance.js +252 -2
  305. package/dist/story/presets.js +289 -2
  306. package/dist/story/props-validation.js +215 -2
  307. package/dist/story/renderer.js +209 -2
  308. package/dist/story/search-index.js +106 -2
  309. package/dist/story/search.js +140 -2
  310. package/dist/story/server.js +965 -2
  311. package/dist/story/setup.js +78 -2
  312. package/dist/story/snapshots.js +170 -2
  313. package/dist/story/testing.js +163 -2
  314. package/dist/story/theme.js +170 -2
  315. package/dist/story/types.js +0 -2
  316. package/dist/story/ui/code-panel.js +175 -2
  317. package/dist/story/ui/controls-panel.js +168 -2
  318. package/dist/story/ui/index.js +4 -2
  319. package/dist/story/ui/navigation.js +250 -2
  320. package/dist/story/ui/preview.js +251 -2
  321. package/dist/story/visual-testing.js +247 -2
  322. package/dist/streaming.js +537 -2
  323. package/dist/strict-lint.js +288 -2
  324. package/dist/style-scoping.js +50 -2
  325. package/dist/suspense.js +398 -2
  326. package/dist/teleport.js +109 -2
  327. package/dist/template-compiler.js +63 -2
  328. package/dist/template-hydrator.js +82 -2
  329. package/dist/template-tag-balance.js +93 -2
  330. package/dist/testing.js +581 -2
  331. package/dist/transitions.js +443 -2
  332. package/dist/type-checker.js +581 -2
  333. package/dist/types/component-types.d.ts +54 -0
  334. package/dist/types/component-types.js +0 -1
  335. package/dist/types/config-types.js +0 -1
  336. package/dist/types/context-types.js +0 -1
  337. package/dist/types/csp-types.js +0 -1
  338. package/dist/types/directive-types.js +3 -2
  339. package/dist/types/index.d.ts +5 -0
  340. package/dist/types/index.js +1 -2
  341. package/dist/types/pwa-types.js +0 -1
  342. package/dist/types.js +1 -2
  343. package/dist/typescript-templates.js +386 -4
  344. package/dist/utils.js +942 -2
  345. package/dist/validator.js +171 -2
  346. package/dist/variable-extractor.js +1094 -2
  347. package/dist/view-composers.js +29 -2
  348. package/dist/virtual-scrolling.js +454 -2
  349. package/dist/visual-editor.js +688 -28
  350. package/dist/vue-template.js +475 -2
  351. package/dist/web-components/css-scoping.js +177 -2
  352. package/dist/web-components/index.js +13 -2
  353. package/dist/web-components/reactive-generator.js +121 -56
  354. package/dist/web-components.js +1447 -2
  355. package/dist/x-element.js +17 -5
  356. package/package.json +5 -6
  357. package/dist/chunk-04n64bnt.js +0 -5
  358. package/dist/chunk-06w68hyg.js +0 -7
  359. package/dist/chunk-07y6m5xx.js +0 -3
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-09k66d8a.js +0 -3
  362. package/dist/chunk-0a61y94n.js +0 -24
  363. package/dist/chunk-0b9w2w1y.js +0 -1
  364. package/dist/chunk-0dx4q6yq.js +0 -3
  365. package/dist/chunk-0dz85jrp.js +0 -3
  366. package/dist/chunk-0jd0pndq.js +0 -3
  367. package/dist/chunk-0p0nyq50.js +0 -6
  368. package/dist/chunk-0p1h3p3w.js +0 -3
  369. package/dist/chunk-0qakwen3.js +0 -1
  370. package/dist/chunk-0qnz93q2.js +0 -3
  371. package/dist/chunk-10debkj5.js +0 -71
  372. package/dist/chunk-15nesxgt.js +0 -5224
  373. package/dist/chunk-1sr54zp8.js +0 -3
  374. package/dist/chunk-1v49fwr5.js +0 -3
  375. package/dist/chunk-1xz0w746.js +0 -1539
  376. package/dist/chunk-1z5nhbjt.js +0 -90
  377. package/dist/chunk-1zgsgk4b.js +0 -1
  378. package/dist/chunk-20swzkx3.js +0 -216
  379. package/dist/chunk-27zsyhrd.js +0 -4
  380. package/dist/chunk-29y0hk5z.js +0 -3
  381. package/dist/chunk-2cdvw21b.js +0 -274
  382. package/dist/chunk-2j21d3ka.js +0 -161
  383. package/dist/chunk-2jxbwnkz.js +0 -2
  384. package/dist/chunk-31dr4bys.js +0 -6
  385. package/dist/chunk-35faj94w.js +0 -15
  386. package/dist/chunk-39gm08bn.js +0 -39
  387. package/dist/chunk-3a4qsygv.js +0 -51
  388. package/dist/chunk-3te20hqw.js +0 -3
  389. package/dist/chunk-43t7faps.js +0 -24
  390. package/dist/chunk-44hd3kab.js +0 -1
  391. package/dist/chunk-47kpewks.js +0 -71
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4d2y57k7.js +0 -3
  394. package/dist/chunk-4deg33rw.js +0 -57
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qcy5tx6.js +0 -53
  397. package/dist/chunk-4x7kae4j.js +0 -3
  398. package/dist/chunk-55nwdnsd.js +0 -3
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-5f43yz6z.js +0 -12
  401. package/dist/chunk-5shey2e4.js +0 -3
  402. package/dist/chunk-6b5k6w2q.js +0 -7
  403. package/dist/chunk-6djzdes9.js +0 -14
  404. package/dist/chunk-6e4c6g46.js +0 -3
  405. package/dist/chunk-6eqbxcrd.js +0 -8
  406. package/dist/chunk-7074g241.js +0 -3
  407. package/dist/chunk-7b6s3g65.js +0 -179
  408. package/dist/chunk-7cgmq685.js +0 -33
  409. package/dist/chunk-7dkz6z2s.js +0 -3
  410. package/dist/chunk-7ed3tean.js +0 -3
  411. package/dist/chunk-7gd339hd.js +0 -109
  412. package/dist/chunk-7j5e8sdj.js +0 -3
  413. package/dist/chunk-7n8g0nfn.js +0 -38
  414. package/dist/chunk-7sqdeqsw.js +0 -1
  415. package/dist/chunk-80g54ncj.js +0 -3
  416. package/dist/chunk-8a5bxece.js +0 -4
  417. package/dist/chunk-8ahwt6a4.js +0 -721
  418. package/dist/chunk-8b3z0zd5.js +0 -8
  419. package/dist/chunk-8dhdpa5h.js +0 -4
  420. package/dist/chunk-8n9nnqr6.js +0 -3
  421. package/dist/chunk-8qc1bsym.js +0 -3
  422. package/dist/chunk-8va64c9n.js +0 -3
  423. package/dist/chunk-8vtm0m84.js +0 -3
  424. package/dist/chunk-8xj7c3mf.js +0 -8
  425. package/dist/chunk-988dw6q3.js +0 -9
  426. package/dist/chunk-9b6cec0v.js +0 -321
  427. package/dist/chunk-9cf97f9p.js +0 -3
  428. package/dist/chunk-9ecv8aqj.js +0 -14
  429. package/dist/chunk-9eq3ht5f.js +0 -8
  430. package/dist/chunk-9jtj77jx.js +0 -3
  431. package/dist/chunk-9t14se2t.js +0 -83
  432. package/dist/chunk-9wmq2272.js +0 -3
  433. package/dist/chunk-9zbk5zx5.js +0 -57
  434. package/dist/chunk-a2g2qb2y.js +0 -386
  435. package/dist/chunk-a3hyn4we.js +0 -79
  436. package/dist/chunk-a87qqft6.js +0 -194
  437. package/dist/chunk-ah88wzbg.js +0 -10
  438. package/dist/chunk-akf1r75r.js +0 -102
  439. package/dist/chunk-amaa1bev.js +0 -2
  440. package/dist/chunk-avx8aydt.js +0 -3
  441. package/dist/chunk-ay9qf4zj.js +0 -6
  442. package/dist/chunk-aywxfqev.js +0 -3
  443. package/dist/chunk-azkegjd8.js +0 -61
  444. package/dist/chunk-b77wjyn7.js +0 -84
  445. package/dist/chunk-baf1hfwh.js +0 -231
  446. package/dist/chunk-bdk6g1vj.js +0 -3
  447. package/dist/chunk-bhqgmyqw.js +0 -36
  448. package/dist/chunk-bk3j0n82.js +0 -341
  449. package/dist/chunk-bndmdahk.js +0 -3
  450. package/dist/chunk-bpgg59wa.js +0 -3
  451. package/dist/chunk-bs3gmfxz.js +0 -5
  452. package/dist/chunk-bxc7kjsk.js +0 -32
  453. package/dist/chunk-c7jg8w13.js +0 -3
  454. package/dist/chunk-ckxjqqn9.js +0 -3
  455. package/dist/chunk-cn8az1b4.js +0 -1
  456. package/dist/chunk-d0zjtdw4.js +0 -29
  457. package/dist/chunk-d1qh1x2g.js +0 -3
  458. package/dist/chunk-djddhmcc.js +0 -60
  459. package/dist/chunk-dqn9gyhb.js +0 -21
  460. package/dist/chunk-drjq2zwg.js +0 -3
  461. package/dist/chunk-dvfs1h3c.js +0 -117
  462. package/dist/chunk-e2q9c5vq.js +0 -8
  463. package/dist/chunk-e98v1bc6.js +0 -12
  464. package/dist/chunk-ejayeex8.js +0 -2
  465. package/dist/chunk-ejh8fyak.js +0 -3
  466. package/dist/chunk-ek2w6zvy.js +0 -4
  467. package/dist/chunk-ewa88139.js +0 -6
  468. package/dist/chunk-fjk3x41y.js +0 -3
  469. package/dist/chunk-frg705zq.js +0 -302
  470. package/dist/chunk-fzm3y0r3.js +0 -267
  471. package/dist/chunk-g1vt329s.js +0 -21
  472. package/dist/chunk-g4ps1dj8.js +0 -140
  473. package/dist/chunk-gkzq8zw4.js +0 -23
  474. package/dist/chunk-gz5fmp3q.js +0 -3
  475. package/dist/chunk-h0hjy0kn.js +0 -292
  476. package/dist/chunk-h5jxydqq.js +0 -147
  477. package/dist/chunk-h5wa62ek.js +0 -145
  478. package/dist/chunk-h7aq56qj.js +0 -28
  479. package/dist/chunk-h82kjdr4.js +0 -83
  480. package/dist/chunk-hbehnm18.js +0 -3
  481. package/dist/chunk-hbgxbgam.js +0 -58
  482. package/dist/chunk-hc2mf5h6.js +0 -4
  483. package/dist/chunk-hjm2xab3.js +0 -3
  484. package/dist/chunk-hjv76kcw.js +0 -1
  485. package/dist/chunk-hrnnh4tq.js +0 -142
  486. package/dist/chunk-ht43ds42.js +0 -236
  487. package/dist/chunk-hxx3za24.js +0 -62
  488. package/dist/chunk-hy8820vc.js +0 -6
  489. package/dist/chunk-j447q024.js +0 -28
  490. package/dist/chunk-j58vh0w6.js +0 -314
  491. package/dist/chunk-j8tn8enq.js +0 -3
  492. package/dist/chunk-jc0fc4ht.js +0 -11
  493. package/dist/chunk-jcs0ymw7.js +0 -3
  494. package/dist/chunk-jjamhxpm.js +0 -139
  495. package/dist/chunk-jjb05d21.js +0 -3
  496. package/dist/chunk-jjdq01dv.js +0 -128
  497. package/dist/chunk-jnmgm2xw.js +0 -5
  498. package/dist/chunk-jpndqst5.js +0 -3
  499. package/dist/chunk-jt0ezawy.js +0 -351
  500. package/dist/chunk-jz73j3qs.js +0 -169
  501. package/dist/chunk-k21df0pg.js +0 -10
  502. package/dist/chunk-k848dzsa.js +0 -429
  503. package/dist/chunk-kdfe4t91.js +0 -3
  504. package/dist/chunk-keawsbpn.js +0 -5
  505. package/dist/chunk-kgym7ch9.js +0 -8
  506. package/dist/chunk-khdn7jwe.js +0 -3
  507. package/dist/chunk-km25cwz6.js +0 -3
  508. package/dist/chunk-knm8a8yx.js +0 -398
  509. package/dist/chunk-krqn0ddk.js +0 -3
  510. package/dist/chunk-ktkmvaa8.js +0 -1
  511. package/dist/chunk-kx6eb6ma.js +0 -4
  512. package/dist/chunk-kypas8vy.js +0 -4
  513. package/dist/chunk-m167kjhv.js +0 -4
  514. package/dist/chunk-m491r0rj.js +0 -358
  515. package/dist/chunk-m8448qby.js +0 -11
  516. package/dist/chunk-mgj88zeq.js +0 -64
  517. package/dist/chunk-mhgk632d.js +0 -3
  518. package/dist/chunk-mv4fb50w.js +0 -1
  519. package/dist/chunk-n5kg7fpx.js +0 -7
  520. package/dist/chunk-n98x35xd.js +0 -8
  521. package/dist/chunk-n9dhs1dw.js +0 -106
  522. package/dist/chunk-nd9rmddh.js +0 -6
  523. package/dist/chunk-ngxfwzq3.js +0 -3
  524. package/dist/chunk-nhv099jv.js +0 -19
  525. package/dist/chunk-nm15ccsg.js +0 -5
  526. package/dist/chunk-npfmdb6y.js +0 -71
  527. package/dist/chunk-nvwb4x04.js +0 -3
  528. package/dist/chunk-nw34xajc.js +0 -8
  529. package/dist/chunk-p077sw22.js +0 -3
  530. package/dist/chunk-p1h8065h.js +0 -3
  531. package/dist/chunk-p3e0cqtt.js +0 -34
  532. package/dist/chunk-p3fpb79v.js +0 -477
  533. package/dist/chunk-p52yzjq6.js +0 -498
  534. package/dist/chunk-p73meypx.js +0 -134
  535. package/dist/chunk-pa9zb7ty.js +0 -4
  536. package/dist/chunk-payfb24w.js +0 -207
  537. package/dist/chunk-pcm1vd8w.js +0 -3
  538. package/dist/chunk-pcntd9h4.js +0 -3
  539. package/dist/chunk-pg1fvqb9.js +0 -167
  540. package/dist/chunk-psc3wfcf.js +0 -1115
  541. package/dist/chunk-pznnww6k.js +0 -6
  542. package/dist/chunk-q6zhd9yf.js +0 -3
  543. package/dist/chunk-qa59zejf.js +0 -246
  544. package/dist/chunk-qvrbjpdc.js +0 -3
  545. package/dist/chunk-qygvvygy.js +0 -12
  546. package/dist/chunk-r0jcmpv6.js +0 -68
  547. package/dist/chunk-r5m9xtm7.js +0 -3
  548. package/dist/chunk-rh80q1nd.js +0 -1
  549. package/dist/chunk-rkffm9sy.js +0 -128
  550. package/dist/chunk-rpx5fa65.js +0 -3
  551. package/dist/chunk-rqxf5hns.js +0 -3
  552. package/dist/chunk-rtr974rc.js +0 -30
  553. package/dist/chunk-rvptcndz.js +0 -3
  554. package/dist/chunk-rw26rpek.js +0 -171
  555. package/dist/chunk-rw7937v4.js +0 -19
  556. package/dist/chunk-rwrv9wbf.js +0 -3
  557. package/dist/chunk-rz2ec6g7.js +0 -347
  558. package/dist/chunk-s6ja2bdg.js +0 -66
  559. package/dist/chunk-scpkdrdb.js +0 -4
  560. package/dist/chunk-shv88d2d.js +0 -10
  561. package/dist/chunk-t0c9wvpr.js +0 -3
  562. package/dist/chunk-tffh3b1e.js +0 -35
  563. package/dist/chunk-tg2f1mzq.js +0 -11
  564. package/dist/chunk-trfswy66.js +0 -77
  565. package/dist/chunk-tzwtg722.js +0 -3
  566. package/dist/chunk-v7f8jj15.js +0 -4
  567. package/dist/chunk-v8j49spx.js +0 -3
  568. package/dist/chunk-v97390pe.js +0 -1
  569. package/dist/chunk-vcr5pzpx.js +0 -233
  570. package/dist/chunk-veeerpwa.js +0 -3
  571. package/dist/chunk-vg5kt6az.js +0 -4
  572. package/dist/chunk-vgv7jvyz.js +0 -219
  573. package/dist/chunk-vjbefncc.js +0 -3
  574. package/dist/chunk-vmxjghsm.js +0 -3
  575. package/dist/chunk-vw7vqd76.js +0 -3
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w3b6m427.js +0 -45
  578. package/dist/chunk-wazkqv7n.js +0 -3
  579. package/dist/chunk-wf7zrjsw.js +0 -138
  580. package/dist/chunk-wfg2gm11.js +0 -3
  581. package/dist/chunk-wg9k6h8w.js +0 -12
  582. package/dist/chunk-wkz2vwkr.js +0 -81
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wvf31nzs.js +0 -3
  585. package/dist/chunk-x05nxhyv.js +0 -262
  586. package/dist/chunk-x0770gt9.js +0 -4
  587. package/dist/chunk-x24s4heg.js +0 -1166
  588. package/dist/chunk-x3r64r0c.js +0 -6
  589. package/dist/chunk-x5g9w4hh.js +0 -5
  590. package/dist/chunk-xgkv66q5.js +0 -2230
  591. package/dist/chunk-xqq1vxb6.js +0 -1
  592. package/dist/chunk-xs03kc1h.js +0 -196
  593. package/dist/chunk-xv34zbp4.js +0 -3
  594. package/dist/chunk-xw36p73h.js +0 -90
  595. package/dist/chunk-xyg1r5w0.js +0 -4
  596. package/dist/chunk-xys2sxh6.js +0 -16
  597. package/dist/chunk-y0qg6rrv.js +0 -3
  598. package/dist/chunk-y1k17c8b.js +0 -21
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y6xsqe9a.js +0 -10
  601. package/dist/chunk-yb1t2h8h.js +0 -11
  602. package/dist/chunk-ygvyc6wv.js +0 -90
  603. package/dist/chunk-yj4x5ehw.js +0 -21
  604. package/dist/chunk-yn38c15w.js +0 -4
  605. package/dist/chunk-ynhngsdh.js +0 -3
  606. package/dist/chunk-yrsb6j3z.js +0 -3
  607. package/dist/chunk-yywfvfph.js +0 -2
  608. package/dist/chunk-zcxzdrn7.js +0 -5
  609. package/dist/chunk-zen6ax1y.js +0 -27
  610. package/dist/chunk-zf2pek72.js +0 -3
  611. package/dist/chunk-zk3d0jjf.js +0 -7
  612. package/dist/chunk-zy3rp1ab.js +0 -93
@@ -1,4 +1,510 @@
1
- // @bun
2
- import"./chunk-xv34zbp4.js";class O{rules=[];defaultValue="";addRule(j){let k=new O;return k.rules=[...this.rules,j],k.defaultValue=this.defaultValue,k}required(j="This field is required"){return this.addRule({name:"required",message:j,validate:(k)=>{if(k===null||k===void 0)return j;if(typeof k==="string"&&k.trim()==="")return j;if(Array.isArray(k)&&k.length===0)return j;return!0}})}email(j="Please enter a valid email"){return this.addRule({name:"email",message:j,validate:(k)=>{if(!k)return!0;return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(k))||j}})}url(j="Please enter a valid URL"){return this.addRule({name:"url",message:j,validate:(k)=>{if(!k)return!0;try{return new URL(String(k)),!0}catch{return j}}})}min(j,k){let q=k||`Must be at least ${j} characters`;return this.addRule({name:"min",message:q,validate:(z)=>{if(!z)return!0;return String(z).length>=j||q}})}max(j,k){let q=k||`Must be no more than ${j} characters`;return this.addRule({name:"max",message:q,validate:(z)=>{if(!z)return!0;return String(z).length<=j||q}})}length(j,k,q){let z=q||`Must be between ${j} and ${k} characters`;return this.addRule({name:"length",message:z,validate:(B)=>{if(!B)return!0;let G=String(B).length;return G>=j&&G<=k||z}})}pattern(j,k="Invalid format"){return this.addRule({name:"pattern",message:k,validate:(q)=>{if(!q)return!0;return j.test(String(q))||k}})}hasUppercase(j="Must contain an uppercase letter"){return this.pattern(/[A-Z]/,j)}hasLowercase(j="Must contain a lowercase letter"){return this.pattern(/[a-z]/,j)}hasNumber(j="Must contain a number"){return this.pattern(/\d/,j)}hasSpecial(j="Must contain a special character"){return this.pattern(/[!@#$%^&*(),.?":{}|<>]/,j)}alphanumeric(j="Only letters and numbers allowed"){return this.pattern(/^[a-zA-Z0-9]+$/,j)}startsWithLetter(j="Must start with a letter"){return this.pattern(/^[a-zA-Z]/,j)}noSpaces(j="Spaces are not allowed"){return this.addRule({name:"noSpaces",message:j,validate:(k)=>{if(!k)return!0;return!String(k).includes(" ")||j}})}number(j="Must be a number"){let k=this.addRule({name:"number",message:j,validate:(q)=>{if(!q&&q!==0)return!0;return!Number.isNaN(Number(q))||j}});return k.defaultValue=0,k}integer(j="Must be a whole number"){return this.addRule({name:"integer",message:j,validate:(k)=>{if(!k&&k!==0)return!0;return Number.isInteger(Number(k))||j}})}positive(j="Must be a positive number"){return this.addRule({name:"positive",message:j,validate:(k)=>{if(!k&&k!==0)return!0;return Number(k)>0||j}})}negative(j="Must be a negative number"){return this.addRule({name:"negative",message:j,validate:(k)=>{if(!k&&k!==0)return!0;return Number(k)<0||j}})}minValue(j,k){let q=k||`Must be at least ${j}`;return this.addRule({name:"minValue",message:q,validate:(z)=>{if(!z&&z!==0)return!0;return Number(z)>=j||q}})}maxValue(j,k){let q=k||`Must be no more than ${j}`;return this.addRule({name:"maxValue",message:q,validate:(z)=>{if(!z&&z!==0)return!0;return Number(z)<=j||q}})}between(j,k,q){let z=q||`Must be between ${j} and ${k}`;return this.addRule({name:"between",message:z,validate:(B)=>{if(!B&&B!==0)return!0;let G=Number(B);return G>=j&&G<=k||z}})}matches(j,k){let q=k||`Must match ${j}`;return this.addRule({name:"matches",message:q,validate:(z,B)=>{if(!B)return!0;return z===B[j]||q}})}oneOf(j,k){let q=k||`Must be one of: ${j.join(", ")}`;return this.addRule({name:"oneOf",message:q,validate:(z)=>{if(!z)return!0;return j.includes(z)||q}})}notOneOf(j,k){let q=k||`Cannot be one of: ${j.join(", ")}`;return this.addRule({name:"notOneOf",message:q,validate:(z)=>{if(!z)return!0;return!j.includes(z)||q}})}date(j="Must be a valid date"){return this.addRule({name:"date",message:j,validate:(k)=>{if(!k)return!0;let q=new Date(String(k));return!Number.isNaN(q.getTime())||j}})}before(j,k){let q=new Date(j),z=k||`Must be before ${q.toLocaleDateString()}`;return this.addRule({name:"before",message:z,validate:(B)=>{if(!B)return!0;return new Date(String(B))<q||z}})}after(j,k){let q=new Date(j),z=k||`Must be after ${q.toLocaleDateString()}`;return this.addRule({name:"after",message:z,validate:(B)=>{if(!B)return!0;return new Date(String(B))>q||z}})}custom(j,k="Invalid value"){return this.addRule({name:"custom",message:k,validate:j})}async(j,k="Invalid value"){return this.addRule({name:"async",message:k,async:!0,validate:j})}when(j,k){let q=new O;q.rules=[...this.rules],q.defaultValue=this.defaultValue;for(let z of k.getRules())q.rules.push({...z,validate:(B,G)=>{if(!j(B,G||{}))return!0;return z.validate(B,G)}});return q}getRules(){return this.rules}getDefaultValue(){return this.defaultValue}default(j){let k=new O;return k.rules=[...this.rules],k.defaultValue=j,k}async validate(j,k){let q=[];for(let z of this.rules){let B=await z.validate(j,k);if(B!==!0)q.push(B)}return q}validateSync(j,k){let q=[];for(let z of this.rules){if(z.async)continue;let B=z.validate(j,k);if(B!==!0)q.push(B)}return q}}var S=new O;function T(j,k){let q=Object.keys(j),z={},B={},G={},L={},M={};for(let A of q)z[A]=k?.[A]??j[A].getDefaultValue(),B[A]=[],G[A]=!1,L[A]=!1,M[A]=!1;let C=!1;async function I(A){M[A]=!0;let K=await j[A].validate(z[A],z);return B[A]=K,M[A]=!1,K.length===0}async function J(){C=!0;let A=await Promise.all(q.map(I));return C=!1,A.every(Boolean)}function Q(){for(let A of q)z[A]=k?.[A]??j[A].getDefaultValue(),B[A]=[],G[A]=!1,L[A]=!1}function U(A){for(let K of q)if(K in A)z[K]=A[K],L[K]=!0}function W(A,K){z[A]=K,L[A]=!0}function X(A,K=!0){if(G[A]=K,K)I(A)}function Y(A){return{value:z[A],errors:B[A],touched:G[A],dirty:L[A],valid:B[A].length===0,validating:M[A]}}function Z(A){return async(K)=>{K?.preventDefault?.();for(let _ of q)G[_]=!0;if(await J())await A(z)}}return{values:z,errors:B,touched:G,dirty:L,get isValid(){return q.every((A)=>B[A].length===0)},get isValidating(){return C||q.some((A)=>M[A])},get isDirty(){return q.some((A)=>L[A])},validate:J,validateField:I,reset:Q,setValues:U,setFieldValue:W,setFieldTouched:X,getFieldState:Y,handleSubmit:Z}}function $(j,k,q){let z=/@error\s*\(\s*([^)]+)\s*\)([\s\S]*?)@enderror/g;return j.replace(z,(B,G,L)=>{try{let M=G.trim().split("."),C=k;for(let J of M)if(C&&typeof C==="object"&&J in C)C=C[J];else return"";let I=C;if(!I||!Array.isArray(I)||I.length===0)return"";return I.map((J)=>{return L.replace(/\{\{\s*message\s*\}\}/g,J)}).join(`
3
- `)}catch{return""}})}function H(j,k,q){let z=/@errors\s*\(\s*([^)]+)\s*\)([\s\S]*?)@enderrors/g;return j.replace(z,(B,G,L)=>{try{let M=G.trim().split("."),C=k;for(let J of M)if(C&&typeof C==="object"&&J in C)C=C[J];else return"";let I=C;if(!I||!Array.isArray(I)||I.length===0)return"";return I.map((J)=>L.replace(/\{\{\s*message\s*\}\}/g,J)).join(`
4
- `)}catch{return""}})}function R(j,k,q){let z=/@hasErrors\s*\(\s*([^)]+)\s*\)([\s\S]*?)@endhasErrors/g;return j.replace(z,(B,G,L)=>{try{let M=G.trim().split("."),C=k;for(let J of M)if(C&&typeof C==="object"&&J in C)C=C[J];else return"";let I=C;if(!I||!Array.isArray(I)||I.length===0)return"";return L}catch{return""}})}function E(j,k,q){let z=j;return z=$(z,k,q),z=H(z,k,q),z=R(z,k,q),z}export{S as v,R as processHasErrorsDirective,E as processFormValidationDirectives,H as processErrorsDirective,$ as processErrorDirective,T as defineForm,O as Validator};
1
+ class Validator {
2
+ rules = [];
3
+ defaultValue = "";
4
+ addRule(rule) {
5
+ const next = new Validator;
6
+ next.rules = [...this.rules, rule];
7
+ next.defaultValue = this.defaultValue;
8
+ return next;
9
+ }
10
+ required(message = "This field is required") {
11
+ return this.addRule({
12
+ name: "required",
13
+ message,
14
+ validate: (value) => {
15
+ if (value === null || value === void 0)
16
+ return message;
17
+ if (typeof value === "string" && value.trim() === "")
18
+ return message;
19
+ if (Array.isArray(value) && value.length === 0)
20
+ return message;
21
+ return !0;
22
+ }
23
+ });
24
+ }
25
+ email(message = "Please enter a valid email") {
26
+ return this.addRule({
27
+ name: "email",
28
+ message,
29
+ validate: (value) => {
30
+ if (!value)
31
+ return !0;
32
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(value)) || message;
33
+ }
34
+ });
35
+ }
36
+ url(message = "Please enter a valid URL") {
37
+ return this.addRule({
38
+ name: "url",
39
+ message,
40
+ validate: (value) => {
41
+ if (!value)
42
+ return !0;
43
+ try {
44
+ new URL(String(value));
45
+ return !0;
46
+ } catch {
47
+ return message;
48
+ }
49
+ }
50
+ });
51
+ }
52
+ min(length, message) {
53
+ const msg = message || `Must be at least ${length} characters`;
54
+ return this.addRule({
55
+ name: "min",
56
+ message: msg,
57
+ validate: (value) => {
58
+ if (!value)
59
+ return !0;
60
+ return String(value).length >= length || msg;
61
+ }
62
+ });
63
+ }
64
+ max(length, message) {
65
+ const msg = message || `Must be no more than ${length} characters`;
66
+ return this.addRule({
67
+ name: "max",
68
+ message: msg,
69
+ validate: (value) => {
70
+ if (!value)
71
+ return !0;
72
+ return String(value).length <= length || msg;
73
+ }
74
+ });
75
+ }
76
+ length(min, max, message) {
77
+ const msg = message || `Must be between ${min} and ${max} characters`;
78
+ return this.addRule({
79
+ name: "length",
80
+ message: msg,
81
+ validate: (value) => {
82
+ if (!value)
83
+ return !0;
84
+ const len = String(value).length;
85
+ return len >= min && len <= max || msg;
86
+ }
87
+ });
88
+ }
89
+ pattern(regex, message = "Invalid format") {
90
+ return this.addRule({
91
+ name: "pattern",
92
+ message,
93
+ validate: (value) => {
94
+ if (!value)
95
+ return !0;
96
+ return regex.test(String(value)) || message;
97
+ }
98
+ });
99
+ }
100
+ hasUppercase(message = "Must contain an uppercase letter") {
101
+ return this.pattern(/[A-Z]/, message);
102
+ }
103
+ hasLowercase(message = "Must contain a lowercase letter") {
104
+ return this.pattern(/[a-z]/, message);
105
+ }
106
+ hasNumber(message = "Must contain a number") {
107
+ return this.pattern(/\d/, message);
108
+ }
109
+ hasSpecial(message = "Must contain a special character") {
110
+ return this.pattern(/[!@#$%^&*(),.?":{}|<>]/, message);
111
+ }
112
+ alphanumeric(message = "Only letters and numbers allowed") {
113
+ return this.pattern(/^[a-zA-Z0-9]+$/, message);
114
+ }
115
+ startsWithLetter(message = "Must start with a letter") {
116
+ return this.pattern(/^[a-zA-Z]/, message);
117
+ }
118
+ noSpaces(message = "Spaces are not allowed") {
119
+ return this.addRule({
120
+ name: "noSpaces",
121
+ message,
122
+ validate: (value) => {
123
+ if (!value)
124
+ return !0;
125
+ return !String(value).includes(" ") || message;
126
+ }
127
+ });
128
+ }
129
+ number(message = "Must be a number") {
130
+ const next = this.addRule({
131
+ name: "number",
132
+ message,
133
+ validate: (value) => {
134
+ if (!value && value !== 0)
135
+ return !0;
136
+ return !Number.isNaN(Number(value)) || message;
137
+ }
138
+ });
139
+ next.defaultValue = 0;
140
+ return next;
141
+ }
142
+ integer(message = "Must be a whole number") {
143
+ return this.addRule({
144
+ name: "integer",
145
+ message,
146
+ validate: (value) => {
147
+ if (!value && value !== 0)
148
+ return !0;
149
+ return Number.isInteger(Number(value)) || message;
150
+ }
151
+ });
152
+ }
153
+ positive(message = "Must be a positive number") {
154
+ return this.addRule({
155
+ name: "positive",
156
+ message,
157
+ validate: (value) => {
158
+ if (!value && value !== 0)
159
+ return !0;
160
+ return Number(value) > 0 || message;
161
+ }
162
+ });
163
+ }
164
+ negative(message = "Must be a negative number") {
165
+ return this.addRule({
166
+ name: "negative",
167
+ message,
168
+ validate: (value) => {
169
+ if (!value && value !== 0)
170
+ return !0;
171
+ return Number(value) < 0 || message;
172
+ }
173
+ });
174
+ }
175
+ minValue(min, message) {
176
+ const msg = message || `Must be at least ${min}`;
177
+ return this.addRule({
178
+ name: "minValue",
179
+ message: msg,
180
+ validate: (value) => {
181
+ if (!value && value !== 0)
182
+ return !0;
183
+ return Number(value) >= min || msg;
184
+ }
185
+ });
186
+ }
187
+ maxValue(max, message) {
188
+ const msg = message || `Must be no more than ${max}`;
189
+ return this.addRule({
190
+ name: "maxValue",
191
+ message: msg,
192
+ validate: (value) => {
193
+ if (!value && value !== 0)
194
+ return !0;
195
+ return Number(value) <= max || msg;
196
+ }
197
+ });
198
+ }
199
+ between(min, max, message) {
200
+ const msg = message || `Must be between ${min} and ${max}`;
201
+ return this.addRule({
202
+ name: "between",
203
+ message: msg,
204
+ validate: (value) => {
205
+ if (!value && value !== 0)
206
+ return !0;
207
+ const num = Number(value);
208
+ return num >= min && num <= max || msg;
209
+ }
210
+ });
211
+ }
212
+ matches(fieldName, message) {
213
+ const msg = message || `Must match ${fieldName}`;
214
+ return this.addRule({
215
+ name: "matches",
216
+ message: msg,
217
+ validate: (value, formValues) => {
218
+ if (!formValues)
219
+ return !0;
220
+ return value === formValues[fieldName] || msg;
221
+ }
222
+ });
223
+ }
224
+ oneOf(values, message) {
225
+ const msg = message || `Must be one of: ${values.join(", ")}`;
226
+ return this.addRule({
227
+ name: "oneOf",
228
+ message: msg,
229
+ validate: (value) => {
230
+ if (!value)
231
+ return !0;
232
+ return values.includes(value) || msg;
233
+ }
234
+ });
235
+ }
236
+ notOneOf(values, message) {
237
+ const msg = message || `Cannot be one of: ${values.join(", ")}`;
238
+ return this.addRule({
239
+ name: "notOneOf",
240
+ message: msg,
241
+ validate: (value) => {
242
+ if (!value)
243
+ return !0;
244
+ return !values.includes(value) || msg;
245
+ }
246
+ });
247
+ }
248
+ date(message = "Must be a valid date") {
249
+ return this.addRule({
250
+ name: "date",
251
+ message,
252
+ validate: (value) => {
253
+ if (!value)
254
+ return !0;
255
+ const date = new Date(String(value));
256
+ return !Number.isNaN(date.getTime()) || message;
257
+ }
258
+ });
259
+ }
260
+ before(date, message) {
261
+ const targetDate = new Date(date), msg = message || `Must be before ${targetDate.toLocaleDateString()}`;
262
+ return this.addRule({
263
+ name: "before",
264
+ message: msg,
265
+ validate: (value) => {
266
+ if (!value)
267
+ return !0;
268
+ return new Date(String(value)) < targetDate || msg;
269
+ }
270
+ });
271
+ }
272
+ after(date, message) {
273
+ const targetDate = new Date(date), msg = message || `Must be after ${targetDate.toLocaleDateString()}`;
274
+ return this.addRule({
275
+ name: "after",
276
+ message: msg,
277
+ validate: (value) => {
278
+ if (!value)
279
+ return !0;
280
+ return new Date(String(value)) > targetDate || msg;
281
+ }
282
+ });
283
+ }
284
+ custom(fn, message = "Invalid value") {
285
+ return this.addRule({
286
+ name: "custom",
287
+ message,
288
+ validate: fn
289
+ });
290
+ }
291
+ async(fn, message = "Invalid value") {
292
+ return this.addRule({
293
+ name: "async",
294
+ message,
295
+ async: !0,
296
+ validate: fn
297
+ });
298
+ }
299
+ when(condition, thenValidator) {
300
+ const next = new Validator;
301
+ next.rules = [...this.rules];
302
+ next.defaultValue = this.defaultValue;
303
+ for (const rule of thenValidator.getRules())
304
+ next.rules.push({
305
+ ...rule,
306
+ validate: (value, formValues) => {
307
+ if (!condition(value, formValues || {}))
308
+ return !0;
309
+ return rule.validate(value, formValues);
310
+ }
311
+ });
312
+ return next;
313
+ }
314
+ getRules() {
315
+ return this.rules;
316
+ }
317
+ getDefaultValue() {
318
+ return this.defaultValue;
319
+ }
320
+ default(value) {
321
+ const next = new Validator;
322
+ next.rules = [...this.rules];
323
+ next.defaultValue = value;
324
+ return next;
325
+ }
326
+ async validate(value, formValues) {
327
+ const errors = [];
328
+ for (const rule of this.rules) {
329
+ const result = await rule.validate(value, formValues);
330
+ if (result !== !0)
331
+ errors.push(result);
332
+ }
333
+ return errors;
334
+ }
335
+ validateSync(value, formValues) {
336
+ const errors = [];
337
+ for (const rule of this.rules) {
338
+ if (rule.async)
339
+ continue;
340
+ const result = rule.validate(value, formValues);
341
+ if (result !== !0)
342
+ errors.push(result);
343
+ }
344
+ return errors;
345
+ }
346
+ }
347
+ export const v = new Validator;
348
+ export function defineForm(schema, initialValues) {
349
+ const fields = Object.keys(schema), values = {}, errors = {}, touched = {}, dirty = {}, validating = {};
350
+ for (const field of fields) {
351
+ values[field] = initialValues?.[field] ?? schema[field].getDefaultValue();
352
+ errors[field] = [];
353
+ touched[field] = !1;
354
+ dirty[field] = !1;
355
+ validating[field] = !1;
356
+ }
357
+ let isValidating = !1;
358
+ async function validateField(field) {
359
+ validating[field] = !0;
360
+ const fieldErrors = await schema[field].validate(values[field], values);
361
+ errors[field] = fieldErrors;
362
+ validating[field] = !1;
363
+ return fieldErrors.length === 0;
364
+ }
365
+ async function validate() {
366
+ isValidating = !0;
367
+ const results = await Promise.all(fields.map(validateField));
368
+ isValidating = !1;
369
+ return results.every(Boolean);
370
+ }
371
+ function reset() {
372
+ for (const field of fields) {
373
+ values[field] = initialValues?.[field] ?? schema[field].getDefaultValue();
374
+ errors[field] = [];
375
+ touched[field] = !1;
376
+ dirty[field] = !1;
377
+ }
378
+ }
379
+ function setValues(newValues) {
380
+ for (const field of fields)
381
+ if (field in newValues) {
382
+ values[field] = newValues[field];
383
+ dirty[field] = !0;
384
+ }
385
+ }
386
+ function setFieldValue(field, value) {
387
+ values[field] = value;
388
+ dirty[field] = !0;
389
+ }
390
+ function setFieldTouched(field, isTouched = !0) {
391
+ touched[field] = isTouched;
392
+ if (isTouched)
393
+ validateField(field);
394
+ }
395
+ function getFieldState(field) {
396
+ return {
397
+ value: values[field],
398
+ errors: errors[field],
399
+ touched: touched[field],
400
+ dirty: dirty[field],
401
+ valid: errors[field].length === 0,
402
+ validating: validating[field]
403
+ };
404
+ }
405
+ function handleSubmit(onSubmit) {
406
+ return async (e) => {
407
+ e?.preventDefault?.();
408
+ for (const field of fields)
409
+ touched[field] = !0;
410
+ if (await validate())
411
+ await onSubmit(values);
412
+ };
413
+ }
414
+ return {
415
+ values,
416
+ errors,
417
+ touched,
418
+ dirty,
419
+ get isValid() {
420
+ return fields.every((f) => errors[f].length === 0);
421
+ },
422
+ get isValidating() {
423
+ return isValidating || fields.some((f) => validating[f]);
424
+ },
425
+ get isDirty() {
426
+ return fields.some((f) => dirty[f]);
427
+ },
428
+ validate,
429
+ validateField,
430
+ reset,
431
+ setValues,
432
+ setFieldValue,
433
+ setFieldTouched,
434
+ getFieldState,
435
+ handleSubmit
436
+ };
437
+ }
438
+ export function processErrorDirective(content, context, _filePath) {
439
+ const errorRegex = /@error\s*\(\s*([^)]+)\s*\)([\s\S]*?)@enderror/g;
440
+ return content.replace(errorRegex, (_, fieldPath, body) => {
441
+ try {
442
+ const parts = fieldPath.trim().split(".");
443
+ let current = context;
444
+ for (const part of parts)
445
+ if (current && typeof current === "object" && part in current)
446
+ current = current[part];
447
+ else
448
+ return "";
449
+ const errors = current;
450
+ if (!errors || !Array.isArray(errors) || errors.length === 0)
451
+ return "";
452
+ return errors.map((message) => {
453
+ return body.replace(/\{\{\s*message\s*\}\}/g, message);
454
+ }).join(`
455
+ `);
456
+ } catch {
457
+ return "";
458
+ }
459
+ });
460
+ }
461
+ export function processErrorsDirective(content, context, _filePath) {
462
+ const errorsRegex = /@errors\s*\(\s*([^)]+)\s*\)([\s\S]*?)@enderrors/g;
463
+ return content.replace(errorsRegex, (_, fieldPath, body) => {
464
+ try {
465
+ const parts = fieldPath.trim().split(".");
466
+ let current = context;
467
+ for (const part of parts)
468
+ if (current && typeof current === "object" && part in current)
469
+ current = current[part];
470
+ else
471
+ return "";
472
+ const errors = current;
473
+ if (!errors || !Array.isArray(errors) || errors.length === 0)
474
+ return "";
475
+ return errors.map((message) => body.replace(/\{\{\s*message\s*\}\}/g, message)).join(`
476
+ `);
477
+ } catch {
478
+ return "";
479
+ }
480
+ });
481
+ }
482
+ export function processHasErrorsDirective(content, context, _filePath) {
483
+ const hasErrorsRegex = /@hasErrors\s*\(\s*([^)]+)\s*\)([\s\S]*?)@endhasErrors/g;
484
+ return content.replace(hasErrorsRegex, (_, fieldPath, body) => {
485
+ try {
486
+ const parts = fieldPath.trim().split(".");
487
+ let current = context;
488
+ for (const part of parts)
489
+ if (current && typeof current === "object" && part in current)
490
+ current = current[part];
491
+ else
492
+ return "";
493
+ const errors = current;
494
+ if (!errors || !Array.isArray(errors) || errors.length === 0)
495
+ return "";
496
+ return body;
497
+ } catch {
498
+ return "";
499
+ }
500
+ });
501
+ }
502
+ export function processFormValidationDirectives(content, context, filePath) {
503
+ let result = content;
504
+ result = processErrorDirective(result, context, filePath);
505
+ result = processErrorsDirective(result, context, filePath);
506
+ result = processHasErrorsDirective(result, context, filePath);
507
+ return result;
508
+ }
509
+
510
+ export { Validator };