@bquery/bquery 1.6.0 → 1.8.1

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 (402) hide show
  1. package/README.md +192 -18
  2. package/dist/a11y/announce.d.ts +43 -0
  3. package/dist/a11y/announce.d.ts.map +1 -0
  4. package/dist/a11y/audit.d.ts +42 -0
  5. package/dist/a11y/audit.d.ts.map +1 -0
  6. package/dist/a11y/index.d.ts +53 -0
  7. package/dist/a11y/index.d.ts.map +1 -0
  8. package/dist/a11y/media-preferences.d.ts +77 -0
  9. package/dist/a11y/media-preferences.d.ts.map +1 -0
  10. package/dist/a11y/roving-tab-index.d.ts +38 -0
  11. package/dist/a11y/roving-tab-index.d.ts.map +1 -0
  12. package/dist/a11y/skip-link.d.ts +37 -0
  13. package/dist/a11y/skip-link.d.ts.map +1 -0
  14. package/dist/a11y/trap-focus.d.ts +49 -0
  15. package/dist/a11y/trap-focus.d.ts.map +1 -0
  16. package/dist/a11y/types.d.ts +152 -0
  17. package/dist/a11y/types.d.ts.map +1 -0
  18. package/dist/a11y-DVBCy09c.js +421 -0
  19. package/dist/a11y-DVBCy09c.js.map +1 -0
  20. package/dist/a11y.es.mjs +14 -0
  21. package/dist/component/component.d.ts.map +1 -1
  22. package/dist/component/html.d.ts.map +1 -1
  23. package/dist/component/index.d.ts +2 -1
  24. package/dist/component/index.d.ts.map +1 -1
  25. package/dist/component/library.d.ts.map +1 -1
  26. package/dist/component/scope.d.ts +138 -0
  27. package/dist/component/scope.d.ts.map +1 -0
  28. package/dist/component/types.d.ts +53 -1
  29. package/dist/component/types.d.ts.map +1 -1
  30. package/dist/component-L3-JfOFz.js +684 -0
  31. package/dist/component-L3-JfOFz.js.map +1 -0
  32. package/dist/component.es.mjs +9 -6
  33. package/dist/{config-DRmZZno3.js → config-DhT9auRm.js} +4 -4
  34. package/dist/{config-DRmZZno3.js.map → config-DhT9auRm.js.map} +1 -1
  35. package/dist/constraints-D5RHQLmP.js +100 -0
  36. package/dist/constraints-D5RHQLmP.js.map +1 -0
  37. package/dist/core/collection.d.ts +134 -0
  38. package/dist/core/collection.d.ts.map +1 -1
  39. package/dist/core/element.d.ts +120 -0
  40. package/dist/core/element.d.ts.map +1 -1
  41. package/dist/core/env.d.ts +18 -0
  42. package/dist/core/env.d.ts.map +1 -0
  43. package/dist/core/index.d.ts +1 -0
  44. package/dist/core/index.d.ts.map +1 -1
  45. package/dist/core/shared.d.ts +14 -0
  46. package/dist/core/shared.d.ts.map +1 -1
  47. package/dist/core/utils/index.d.ts +52 -41
  48. package/dist/core/utils/index.d.ts.map +1 -1
  49. package/dist/core-DdtZHzsS.js +168 -0
  50. package/dist/core-DdtZHzsS.js.map +1 -0
  51. package/dist/{core-CCEabVHl.js → core-EMYSLzaT.js} +293 -194
  52. package/dist/core-EMYSLzaT.js.map +1 -0
  53. package/dist/core.es.mjs +48 -46
  54. package/dist/custom-directives-Dr4C5lVV.js +9 -0
  55. package/dist/custom-directives-Dr4C5lVV.js.map +1 -0
  56. package/dist/devtools/devtools.d.ts +212 -0
  57. package/dist/devtools/devtools.d.ts.map +1 -0
  58. package/dist/devtools/index.d.ts +20 -0
  59. package/dist/devtools/index.d.ts.map +1 -0
  60. package/dist/devtools/types.d.ts +69 -0
  61. package/dist/devtools/types.d.ts.map +1 -0
  62. package/dist/devtools-BhB2iDPT.js +122 -0
  63. package/dist/devtools-BhB2iDPT.js.map +1 -0
  64. package/dist/devtools.es.mjs +19 -0
  65. package/dist/dnd/draggable.d.ts +51 -0
  66. package/dist/dnd/draggable.d.ts.map +1 -0
  67. package/dist/dnd/droppable.d.ts +38 -0
  68. package/dist/dnd/droppable.d.ts.map +1 -0
  69. package/dist/dnd/index.d.ts +47 -0
  70. package/dist/dnd/index.d.ts.map +1 -0
  71. package/dist/dnd/sortable.d.ts +43 -0
  72. package/dist/dnd/sortable.d.ts.map +1 -0
  73. package/dist/dnd/types.d.ts +250 -0
  74. package/dist/dnd/types.d.ts.map +1 -0
  75. package/dist/dnd-NwZBYh4l.js +244 -0
  76. package/dist/dnd-NwZBYh4l.js.map +1 -0
  77. package/dist/dnd.es.mjs +6 -0
  78. package/dist/env-CTdvLaH2.js +19 -0
  79. package/dist/env-CTdvLaH2.js.map +1 -0
  80. package/dist/forms/create-form.d.ts +49 -0
  81. package/dist/forms/create-form.d.ts.map +1 -0
  82. package/dist/forms/index.d.ts +40 -0
  83. package/dist/forms/index.d.ts.map +1 -0
  84. package/dist/forms/types.d.ts +185 -0
  85. package/dist/forms/types.d.ts.map +1 -0
  86. package/dist/forms/use-field.d.ts +34 -0
  87. package/dist/forms/use-field.d.ts.map +1 -0
  88. package/dist/forms/validators.d.ts +204 -0
  89. package/dist/forms/validators.d.ts.map +1 -0
  90. package/dist/forms-UcRHsYxC.js +227 -0
  91. package/dist/forms-UcRHsYxC.js.map +1 -0
  92. package/dist/forms.es.mjs +16 -0
  93. package/dist/full.d.ts +30 -11
  94. package/dist/full.d.ts.map +1 -1
  95. package/dist/full.es.mjs +209 -93
  96. package/dist/full.iife.js +47 -31
  97. package/dist/full.iife.js.map +1 -1
  98. package/dist/full.umd.js +47 -31
  99. package/dist/full.umd.js.map +1 -1
  100. package/dist/function-Cybd57JV.js +33 -0
  101. package/dist/function-Cybd57JV.js.map +1 -0
  102. package/dist/i18n/formatting.d.ts +40 -0
  103. package/dist/i18n/formatting.d.ts.map +1 -0
  104. package/dist/i18n/i18n.d.ts +48 -0
  105. package/dist/i18n/i18n.d.ts.map +1 -0
  106. package/dist/i18n/index.d.ts +57 -0
  107. package/dist/i18n/index.d.ts.map +1 -0
  108. package/dist/i18n/translate.d.ts +83 -0
  109. package/dist/i18n/translate.d.ts.map +1 -0
  110. package/dist/i18n/types.d.ts +156 -0
  111. package/dist/i18n/types.d.ts.map +1 -0
  112. package/dist/i18n-kuF6Ekj6.js +89 -0
  113. package/dist/i18n-kuF6Ekj6.js.map +1 -0
  114. package/dist/i18n.es.mjs +6 -0
  115. package/dist/index.d.ts +11 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.es.mjs +257 -143
  118. package/dist/media/battery.d.ts +35 -0
  119. package/dist/media/battery.d.ts.map +1 -0
  120. package/dist/media/breakpoints.d.ts +51 -0
  121. package/dist/media/breakpoints.d.ts.map +1 -0
  122. package/dist/media/clipboard.d.ts +30 -0
  123. package/dist/media/clipboard.d.ts.map +1 -0
  124. package/dist/media/device-sensors.d.ts +54 -0
  125. package/dist/media/device-sensors.d.ts.map +1 -0
  126. package/dist/media/geolocation.d.ts +38 -0
  127. package/dist/media/geolocation.d.ts.map +1 -0
  128. package/dist/media/index.d.ts +42 -0
  129. package/dist/media/index.d.ts.map +1 -0
  130. package/dist/media/media-query.d.ts +36 -0
  131. package/dist/media/media-query.d.ts.map +1 -0
  132. package/dist/media/network.d.ts +35 -0
  133. package/dist/media/network.d.ts.map +1 -0
  134. package/dist/media/types.d.ts +173 -0
  135. package/dist/media/types.d.ts.map +1 -0
  136. package/dist/media/viewport.d.ts +32 -0
  137. package/dist/media/viewport.d.ts.map +1 -0
  138. package/dist/media-i-fB5WxI.js +340 -0
  139. package/dist/media-i-fB5WxI.js.map +1 -0
  140. package/dist/media.es.mjs +12 -0
  141. package/dist/motion/index.d.ts +7 -3
  142. package/dist/motion/index.d.ts.map +1 -1
  143. package/dist/motion/morph.d.ts +27 -0
  144. package/dist/motion/morph.d.ts.map +1 -0
  145. package/dist/motion/parallax.d.ts +30 -0
  146. package/dist/motion/parallax.d.ts.map +1 -0
  147. package/dist/motion/reduced-motion.d.ts +36 -3
  148. package/dist/motion/reduced-motion.d.ts.map +1 -1
  149. package/dist/motion/types.d.ts +58 -0
  150. package/dist/motion/types.d.ts.map +1 -1
  151. package/dist/motion/typewriter.d.ts +31 -0
  152. package/dist/motion/typewriter.d.ts.map +1 -0
  153. package/dist/motion-BJsAuULb.js +530 -0
  154. package/dist/motion-BJsAuULb.js.map +1 -0
  155. package/dist/motion.es.mjs +27 -23
  156. package/dist/{view-C70lA3vf.js → mount-B4Y8bk8Z.js} +166 -160
  157. package/dist/mount-B4Y8bk8Z.js.map +1 -0
  158. package/dist/{object-qGpWr6-J.js → object-BCk-1c8T.js} +5 -4
  159. package/dist/{object-qGpWr6-J.js.map → object-BCk-1c8T.js.map} +1 -1
  160. package/dist/{platform-Dr9b6fsq.js → platform-Dw2gE3zI.js} +21 -22
  161. package/dist/{platform-Dr9b6fsq.js.map → platform-Dw2gE3zI.js.map} +1 -1
  162. package/dist/platform.es.mjs +2 -2
  163. package/dist/plugin/index.d.ts +22 -0
  164. package/dist/plugin/index.d.ts.map +1 -0
  165. package/dist/plugin/registry.d.ts +108 -0
  166. package/dist/plugin/registry.d.ts.map +1 -0
  167. package/dist/plugin/types.d.ts +110 -0
  168. package/dist/plugin/types.d.ts.map +1 -0
  169. package/dist/plugin-C2WuC8SF.js +66 -0
  170. package/dist/plugin-C2WuC8SF.js.map +1 -0
  171. package/dist/plugin.es.mjs +9 -0
  172. package/dist/reactive/async-data.d.ts +28 -3
  173. package/dist/reactive/async-data.d.ts.map +1 -1
  174. package/dist/reactive/computed.d.ts +10 -0
  175. package/dist/reactive/computed.d.ts.map +1 -1
  176. package/dist/reactive/effect.d.ts +3 -0
  177. package/dist/reactive/effect.d.ts.map +1 -1
  178. package/dist/reactive/http.d.ts +194 -0
  179. package/dist/reactive/http.d.ts.map +1 -0
  180. package/dist/reactive/index.d.ts +2 -2
  181. package/dist/reactive/index.d.ts.map +1 -1
  182. package/dist/reactive/pagination.d.ts +126 -0
  183. package/dist/reactive/pagination.d.ts.map +1 -0
  184. package/dist/reactive/polling.d.ts +55 -0
  185. package/dist/reactive/polling.d.ts.map +1 -0
  186. package/dist/reactive/readonly.d.ts +20 -1
  187. package/dist/reactive/readonly.d.ts.map +1 -1
  188. package/dist/reactive/rest.d.ts +293 -0
  189. package/dist/reactive/rest.d.ts.map +1 -0
  190. package/dist/reactive/scope.d.ts +140 -0
  191. package/dist/reactive/scope.d.ts.map +1 -0
  192. package/dist/reactive/signal.d.ts +16 -2
  193. package/dist/reactive/signal.d.ts.map +1 -1
  194. package/dist/reactive/to-value.d.ts +57 -0
  195. package/dist/reactive/to-value.d.ts.map +1 -0
  196. package/dist/reactive/websocket.d.ts +285 -0
  197. package/dist/reactive/websocket.d.ts.map +1 -0
  198. package/dist/reactive-DwkhUJfP.js +1148 -0
  199. package/dist/reactive-DwkhUJfP.js.map +1 -0
  200. package/dist/reactive.es.mjs +38 -20
  201. package/dist/registry-B08iilIh.js +26 -0
  202. package/dist/registry-B08iilIh.js.map +1 -0
  203. package/dist/router/bq-link.d.ts +112 -0
  204. package/dist/router/bq-link.d.ts.map +1 -0
  205. package/dist/router/constraints.d.ts +9 -0
  206. package/dist/router/constraints.d.ts.map +1 -0
  207. package/dist/router/index.d.ts +15 -7
  208. package/dist/router/index.d.ts.map +1 -1
  209. package/dist/router/match.d.ts +0 -1
  210. package/dist/router/match.d.ts.map +1 -1
  211. package/dist/router/path-pattern.d.ts +14 -0
  212. package/dist/router/path-pattern.d.ts.map +1 -0
  213. package/dist/router/query.d.ts.map +1 -1
  214. package/dist/router/router.d.ts +3 -1
  215. package/dist/router/router.d.ts.map +1 -1
  216. package/dist/router/state.d.ts +25 -2
  217. package/dist/router/state.d.ts.map +1 -1
  218. package/dist/router/types.d.ts +48 -4
  219. package/dist/router/types.d.ts.map +1 -1
  220. package/dist/router/use-route.d.ts +50 -0
  221. package/dist/router/use-route.d.ts.map +1 -0
  222. package/dist/router/utils.d.ts +3 -0
  223. package/dist/router/utils.d.ts.map +1 -1
  224. package/dist/router-CQikC9Ed.js +492 -0
  225. package/dist/router-CQikC9Ed.js.map +1 -0
  226. package/dist/router.es.mjs +14 -10
  227. package/dist/{sanitize-Bs2dkMby.js → sanitize-B1V4JswB.js} +2 -1
  228. package/dist/{sanitize-Bs2dkMby.js.map → sanitize-B1V4JswB.js.map} +1 -1
  229. package/dist/security/index.d.ts +2 -2
  230. package/dist/security/index.d.ts.map +1 -1
  231. package/dist/security.es.mjs +1 -1
  232. package/dist/ssr/hydrate.d.ts +65 -0
  233. package/dist/ssr/hydrate.d.ts.map +1 -0
  234. package/dist/ssr/index.d.ts +59 -0
  235. package/dist/ssr/index.d.ts.map +1 -0
  236. package/dist/ssr/render.d.ts +62 -0
  237. package/dist/ssr/render.d.ts.map +1 -0
  238. package/dist/ssr/serialize.d.ts +118 -0
  239. package/dist/ssr/serialize.d.ts.map +1 -0
  240. package/dist/ssr/types.d.ts +70 -0
  241. package/dist/ssr/types.d.ts.map +1 -0
  242. package/dist/ssr-_dAcGdzu.js +248 -0
  243. package/dist/ssr-_dAcGdzu.js.map +1 -0
  244. package/dist/ssr.es.mjs +9 -0
  245. package/dist/store/create-store.d.ts.map +1 -1
  246. package/dist/store/index.d.ts +1 -1
  247. package/dist/store/index.d.ts.map +1 -1
  248. package/dist/store/persisted.d.ts +38 -4
  249. package/dist/store/persisted.d.ts.map +1 -1
  250. package/dist/store/types.d.ts +138 -1
  251. package/dist/store/types.d.ts.map +1 -1
  252. package/dist/store/utils.d.ts +2 -2
  253. package/dist/store/utils.d.ts.map +1 -1
  254. package/dist/store-Cb3gPRve.js +338 -0
  255. package/dist/store-Cb3gPRve.js.map +1 -0
  256. package/dist/store.es.mjs +11 -10
  257. package/dist/storybook/index.d.ts.map +1 -1
  258. package/dist/storybook.es.mjs +1 -1
  259. package/dist/storybook.es.mjs.map +1 -1
  260. package/dist/testing/index.d.ts +23 -0
  261. package/dist/testing/index.d.ts.map +1 -0
  262. package/dist/testing/testing.d.ts +156 -0
  263. package/dist/testing/testing.d.ts.map +1 -0
  264. package/dist/testing/types.d.ts +134 -0
  265. package/dist/testing/types.d.ts.map +1 -0
  266. package/dist/testing-C5Sjfsna.js +224 -0
  267. package/dist/testing-C5Sjfsna.js.map +1 -0
  268. package/dist/testing.es.mjs +9 -0
  269. package/dist/type-guards-BMX2c0LP.js +44 -0
  270. package/dist/type-guards-BMX2c0LP.js.map +1 -0
  271. package/dist/untrack-D0fnO5k2.js +36 -0
  272. package/dist/untrack-D0fnO5k2.js.map +1 -0
  273. package/dist/view/custom-directives.d.ts +20 -0
  274. package/dist/view/custom-directives.d.ts.map +1 -0
  275. package/dist/view/evaluate.d.ts.map +1 -1
  276. package/dist/view/process.d.ts.map +1 -1
  277. package/dist/view.es.mjs +9 -9
  278. package/package.json +47 -11
  279. package/src/a11y/announce.ts +131 -0
  280. package/src/a11y/audit.ts +314 -0
  281. package/src/a11y/index.ts +68 -0
  282. package/src/a11y/media-preferences.ts +255 -0
  283. package/src/a11y/roving-tab-index.ts +164 -0
  284. package/src/a11y/skip-link.ts +255 -0
  285. package/src/a11y/trap-focus.ts +184 -0
  286. package/src/a11y/types.ts +183 -0
  287. package/src/component/component.ts +599 -524
  288. package/src/component/html.ts +153 -153
  289. package/src/component/index.ts +52 -50
  290. package/src/component/library.ts +540 -518
  291. package/src/component/scope.ts +212 -0
  292. package/src/component/types.ts +310 -256
  293. package/src/core/collection.ts +249 -1
  294. package/src/core/element.ts +252 -11
  295. package/src/core/env.ts +60 -0
  296. package/src/core/index.ts +1 -0
  297. package/src/core/shared.ts +64 -0
  298. package/src/core/utils/index.ts +66 -1
  299. package/src/devtools/devtools.ts +410 -0
  300. package/src/devtools/index.ts +48 -0
  301. package/src/devtools/types.ts +104 -0
  302. package/src/dnd/draggable.ts +296 -0
  303. package/src/dnd/droppable.ts +228 -0
  304. package/src/dnd/index.ts +62 -0
  305. package/src/dnd/sortable.ts +307 -0
  306. package/src/dnd/types.ts +293 -0
  307. package/src/forms/create-form.ts +320 -0
  308. package/src/forms/index.ts +70 -0
  309. package/src/forms/types.ts +203 -0
  310. package/src/forms/use-field.ts +231 -0
  311. package/src/forms/validators.ts +294 -0
  312. package/src/full.ts +554 -229
  313. package/src/i18n/formatting.ts +67 -0
  314. package/src/i18n/i18n.ts +200 -0
  315. package/src/i18n/index.ts +67 -0
  316. package/src/i18n/translate.ts +182 -0
  317. package/src/i18n/types.ts +171 -0
  318. package/src/index.ts +72 -0
  319. package/src/media/battery.ts +116 -0
  320. package/src/media/breakpoints.ts +129 -0
  321. package/src/media/clipboard.ts +80 -0
  322. package/src/media/device-sensors.ts +158 -0
  323. package/src/media/geolocation.ts +119 -0
  324. package/src/media/index.ts +76 -0
  325. package/src/media/media-query.ts +92 -0
  326. package/src/media/network.ts +115 -0
  327. package/src/media/types.ts +177 -0
  328. package/src/media/viewport.ts +84 -0
  329. package/src/motion/index.ts +11 -2
  330. package/src/motion/morph.ts +151 -0
  331. package/src/motion/parallax.ts +120 -0
  332. package/src/motion/reduced-motion.ts +52 -3
  333. package/src/motion/types.ts +63 -0
  334. package/src/motion/typewriter.ts +164 -0
  335. package/src/plugin/index.ts +37 -0
  336. package/src/plugin/registry.ts +284 -0
  337. package/src/plugin/types.ts +137 -0
  338. package/src/reactive/async-data.ts +250 -29
  339. package/src/reactive/computed.ts +53 -1
  340. package/src/reactive/effect.ts +29 -6
  341. package/src/reactive/http.ts +790 -0
  342. package/src/reactive/index.ts +60 -0
  343. package/src/reactive/pagination.ts +317 -0
  344. package/src/reactive/polling.ts +179 -0
  345. package/src/reactive/readonly.ts +52 -8
  346. package/src/reactive/rest.ts +859 -0
  347. package/src/reactive/scope.ts +276 -0
  348. package/src/reactive/signal.ts +61 -1
  349. package/src/reactive/to-value.ts +71 -0
  350. package/src/reactive/websocket.ts +849 -0
  351. package/src/router/bq-link.ts +279 -0
  352. package/src/router/constraints.ts +204 -0
  353. package/src/router/index.ts +15 -7
  354. package/src/router/match.ts +255 -49
  355. package/src/router/path-pattern.ts +52 -0
  356. package/src/router/query.ts +3 -0
  357. package/src/router/router.ts +258 -48
  358. package/src/router/state.ts +51 -3
  359. package/src/router/types.ts +50 -4
  360. package/src/router/use-route.ts +68 -0
  361. package/src/router/utils.ts +44 -3
  362. package/src/security/index.ts +12 -17
  363. package/src/security/sanitize.ts +70 -70
  364. package/src/security/trusted-html.ts +71 -71
  365. package/src/ssr/hydrate.ts +84 -0
  366. package/src/ssr/index.ts +70 -0
  367. package/src/ssr/render.ts +508 -0
  368. package/src/ssr/serialize.ts +296 -0
  369. package/src/ssr/types.ts +81 -0
  370. package/src/store/create-store.ts +146 -8
  371. package/src/store/define-store.ts +49 -49
  372. package/src/store/index.ts +5 -0
  373. package/src/store/mapping.ts +74 -74
  374. package/src/store/persisted.ts +245 -62
  375. package/src/store/types.ts +247 -92
  376. package/src/store/utils.ts +4 -10
  377. package/src/store/watch.ts +53 -53
  378. package/src/storybook/index.ts +480 -479
  379. package/src/testing/index.ts +42 -0
  380. package/src/testing/testing.ts +593 -0
  381. package/src/testing/types.ts +170 -0
  382. package/src/view/custom-directives.ts +28 -0
  383. package/src/view/evaluate.ts +2 -0
  384. package/src/view/process.ts +19 -3
  385. package/dist/component-BEQgt5hl.js +0 -600
  386. package/dist/component-BEQgt5hl.js.map +0 -1
  387. package/dist/core-BGQJVw0-.js +0 -35
  388. package/dist/core-BGQJVw0-.js.map +0 -1
  389. package/dist/core-CCEabVHl.js.map +0 -1
  390. package/dist/effect-AFRW_Plg.js +0 -84
  391. package/dist/effect-AFRW_Plg.js.map +0 -1
  392. package/dist/motion-D9TcHxOF.js +0 -415
  393. package/dist/motion-D9TcHxOF.js.map +0 -1
  394. package/dist/reactive-DSkct0dO.js +0 -254
  395. package/dist/reactive-DSkct0dO.js.map +0 -1
  396. package/dist/router-CbDhl8rS.js +0 -188
  397. package/dist/router-CbDhl8rS.js.map +0 -1
  398. package/dist/store-BwDvI45q.js +0 -263
  399. package/dist/store-BwDvI45q.js.map +0 -1
  400. package/dist/untrack-B0rVscTc.js +0 -7
  401. package/dist/untrack-B0rVscTc.js.map +0 -1
  402. package/dist/view-C70lA3vf.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ function u(n, e) {
2
+ let t;
3
+ return Object.assign((...o) => {
4
+ t !== void 0 && clearTimeout(t), t = setTimeout(() => {
5
+ t = void 0, n(...o);
6
+ }, e);
7
+ }, { cancel: () => {
8
+ t !== void 0 && (clearTimeout(t), t = void 0);
9
+ } });
10
+ }
11
+ function c(n, e) {
12
+ let t = 0;
13
+ return Object.assign((...o) => {
14
+ const i = Date.now();
15
+ i - t >= e && (t = i, n(...o));
16
+ }, { cancel: () => {
17
+ t = 0;
18
+ } });
19
+ }
20
+ function r(n) {
21
+ let e = !1, t;
22
+ return (...o) => (e || (t = n(...o), e = !0), t);
23
+ }
24
+ function a() {
25
+ }
26
+ export {
27
+ c as i,
28
+ a as n,
29
+ r,
30
+ u as t
31
+ };
32
+
33
+ //# sourceMappingURL=function-Cybd57JV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-Cybd57JV.js","names":[],"sources":["../src/core/utils/function.ts"],"sourcesContent":["/**\n * Function-focused utility helpers.\n *\n * @module bquery/core/utils/function\n */\n\n/** A debounced function with a cancel method to clear the pending timeout. */\nexport interface DebouncedFn<TArgs extends unknown[]> {\n (...args: TArgs): void;\n /** Cancels the pending debounced invocation. */\n cancel(): void;\n}\n\n/** A throttled function with a cancel method to reset the throttle timer. */\nexport interface ThrottledFn<TArgs extends unknown[]> {\n (...args: TArgs): void;\n /** Resets the throttle timer, allowing the next call to execute immediately. */\n cancel(): void;\n}\n\n/**\n * Creates a debounced function that delays execution until after\n * the specified delay has elapsed since the last call.\n *\n * @template TArgs - The argument types of the function\n * @param fn - The function to debounce\n * @param delayMs - Delay in milliseconds\n * @returns A debounced version of the function with a `cancel()` method\n *\n * @example\n * ```ts\n * const search = debounce((query: string) => {\n * console.log('Searching:', query);\n * }, 300);\n *\n * search('h');\n * search('he');\n * search('hello'); // Only this call executes after 300ms\n *\n * search('cancel me');\n * search.cancel(); // Cancels the pending invocation\n * ```\n */\nexport function debounce<TArgs extends unknown[]>(\n fn: (...args: TArgs) => void,\n delayMs: number\n): DebouncedFn<TArgs> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const debounced: DebouncedFn<TArgs> = Object.assign(\n (...args: TArgs) => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = undefined;\n fn(...args);\n }, delayMs);\n },\n {\n cancel: () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n },\n }\n );\n return debounced;\n}\n\n/**\n * Creates a throttled function that runs at most once per interval.\n *\n * @template TArgs - The argument types of the function\n * @param fn - The function to throttle\n * @param intervalMs - Minimum interval between calls in milliseconds\n * @returns A throttled version of the function with a `cancel()` method\n *\n * @example\n * ```ts\n * const handleScroll = throttle(() => {\n * console.log('Scroll position:', window.scrollY);\n * }, 100);\n *\n * window.addEventListener('scroll', handleScroll);\n *\n * handleScroll.cancel(); // Resets throttle, next call executes immediately\n * ```\n */\nexport function throttle<TArgs extends unknown[]>(\n fn: (...args: TArgs) => void,\n intervalMs: number\n): ThrottledFn<TArgs> {\n let lastRun = 0;\n const throttled: ThrottledFn<TArgs> = Object.assign(\n (...args: TArgs) => {\n const now = Date.now();\n if (now - lastRun >= intervalMs) {\n lastRun = now;\n fn(...args);\n }\n },\n {\n cancel: () => {\n lastRun = 0;\n },\n }\n );\n return throttled;\n}\n\n/**\n * Ensures a function only runs once. Subsequent calls return the first result.\n *\n * @template TArgs - The argument types of the function\n * @template TResult - The return type of the function\n * @param fn - The function to wrap\n * @returns A function that only runs once\n *\n * @example\n * ```ts\n * const init = once(() => ({ ready: true }));\n * init();\n * init(); // only runs once\n * ```\n */\nexport function once<TArgs extends unknown[], TResult>(\n fn: (...args: TArgs) => TResult\n): (...args: TArgs) => TResult {\n let hasRun = false;\n let result!: TResult;\n return (...args: TArgs) => {\n if (!hasRun) {\n result = fn(...args);\n hasRun = true;\n }\n return result;\n };\n}\n\n/**\n * A no-operation function.\n *\n * @example\n * ```ts\n * noop();\n * ```\n */\nexport function noop(): void {\n // Intentionally empty\n}\n"],"mappings":"AA2CA,SAAgB,EACd,GACA,GACoB;AACpB,MAAI;AAoBJ,SAnBsC,OAAO,OAAA,IACvC,MAAgB;AAClB,IAAI,MAAc,UAChB,aAAa,CAAA,GAEf,IAAY,WAAA,MAAiB;AAC3B,MAAA,IAAY,QACZ,EAAG,GAAG,CAAA;AAAA,OACL,CAAA;AAAA,KAEL,EACE,QAAA,MAAc;AACZ,IAAI,MAAc,WAChB,aAAa,CAAA,GACb,IAAY;AAAA,KAGjB;;AAwBL,SAAgB,EACd,GACA,GACoB;AACpB,MAAI,IAAU;AAed,SAdsC,OAAO,OAAA,IACvC,MAAgB;AAClB,UAAM,IAAM,KAAK,IAAA;AACjB,IAAI,IAAM,KAAW,MACnB,IAAU,GACV,EAAG,GAAG,CAAA;AAAA,KAGV,EACE,QAAA,MAAc;AACZ,IAAA,IAAU;AAAA,KAEb;;AAoBL,SAAgB,EACd,GAC6B;AAC7B,MAAI,IAAS,IACT;AACJ,SAAA,IAAW,OACJ,MACH,IAAS,EAAG,GAAG,CAAA,GACf,IAAS,KAEJ;;AAYX,SAAgB,IAAa;AAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Number and date formatting helpers using Intl APIs.
3
+ * @module bquery/i18n
4
+ */
5
+ import type { DateFormatOptions, NumberFormatOptions } from './types';
6
+ /**
7
+ * Formats a number using the Intl.NumberFormat API.
8
+ *
9
+ * @param value - The number to format
10
+ * @param locale - The locale code (e.g. 'en-US', 'de-DE')
11
+ * @param options - Intl.NumberFormat options
12
+ * @returns The formatted number string
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * formatNumber(1234.56, 'en-US'); // '1,234.56'
17
+ * formatNumber(1234.56, 'de-DE'); // '1.234,56'
18
+ * formatNumber(0.42, 'en-US', { style: 'percent' }); // '42%'
19
+ * formatNumber(9.99, 'en-US', { style: 'currency', currency: 'USD' }); // '$9.99'
20
+ * ```
21
+ */
22
+ export declare const formatNumber: (value: number, locale: string, options?: NumberFormatOptions) => string;
23
+ /**
24
+ * Formats a date using the Intl.DateTimeFormat API.
25
+ *
26
+ * @param value - The date to format (Date object or timestamp)
27
+ * @param locale - The locale code
28
+ * @param options - Intl.DateTimeFormat options
29
+ * @returns The formatted date string
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const date = new Date('2026-03-26');
34
+ * formatDate(date, 'en-US'); // '3/26/2026'
35
+ * formatDate(date, 'de-DE'); // '26.3.2026'
36
+ * formatDate(date, 'en-US', { dateStyle: 'long' }); // 'March 26, 2026'
37
+ * ```
38
+ */
39
+ export declare const formatDate: (value: Date | number, locale: string, options?: DateFormatOptions) => string;
40
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/i18n/formatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,UAAU,mBAAmB,KAC5B,MAQF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,GACrB,OAAO,IAAI,GAAG,MAAM,EACpB,QAAQ,MAAM,EACd,UAAU,iBAAiB,KAC1B,MASF,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Core i18n factory function.
3
+ * @module bquery/i18n
4
+ */
5
+ import type { I18nConfig, I18nInstance } from './types';
6
+ /**
7
+ * Creates a reactive internationalization instance.
8
+ *
9
+ * The returned object provides:
10
+ * - `$locale` — a reactive signal for the current locale
11
+ * - `t()` — translation with interpolation and pluralization
12
+ * - `tc()` — reactive translation that auto-updates on locale change
13
+ * - `loadLocale()` — register lazy-loaded locale files
14
+ * - `n()` — locale-aware number formatting
15
+ * - `d()` — locale-aware date formatting
16
+ *
17
+ * @param config - Initial configuration
18
+ * @returns An i18n instance
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { createI18n } from '@bquery/bquery/i18n';
23
+ *
24
+ * const i18n = createI18n({
25
+ * locale: 'en',
26
+ * fallbackLocale: 'en',
27
+ * messages: {
28
+ * en: {
29
+ * greeting: 'Hello, {name}!',
30
+ * items: '{count} item | {count} items',
31
+ * },
32
+ * de: {
33
+ * greeting: 'Hallo, {name}!',
34
+ * items: '{count} Gegenstand | {count} Gegenstände',
35
+ * },
36
+ * },
37
+ * });
38
+ *
39
+ * i18n.t('greeting', { name: 'Ada' }); // 'Hello, Ada!'
40
+ * i18n.t('items', { count: 3 }); // '3 items'
41
+ *
42
+ * // Switch locale reactively
43
+ * i18n.$locale.value = 'de';
44
+ * i18n.t('greeting', { name: 'Ada' }); // 'Hallo, Ada!'
45
+ * ```
46
+ */
47
+ export declare const createI18n: (config: I18nConfig) => I18nInstance;
48
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n/i18n.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAEV,UAAU,EACV,YAAY,EAMb,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,KAAG,YA0I/C,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Internationalization (i18n) module for bQuery.js.
3
+ *
4
+ * Provides a reactive, TypeScript-first internationalization API
5
+ * with interpolation, pluralization, lazy-loading, and locale-aware
6
+ * formatting — all backed by bQuery's signal-based reactivity system.
7
+ *
8
+ * @module bquery/i18n
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createI18n } from '@bquery/bquery/i18n';
13
+ *
14
+ * const i18n = createI18n({
15
+ * locale: 'en',
16
+ * fallbackLocale: 'en',
17
+ * messages: {
18
+ * en: {
19
+ * greeting: 'Hello, {name}!',
20
+ * items: '{count} item | {count} items',
21
+ * nested: { deep: { key: 'Found it!' } },
22
+ * },
23
+ * de: {
24
+ * greeting: 'Hallo, {name}!',
25
+ * items: '{count} Gegenstand | {count} Gegenstände',
26
+ * },
27
+ * },
28
+ * });
29
+ *
30
+ * // Basic translation
31
+ * i18n.t('greeting', { name: 'Ada' }); // 'Hello, Ada!'
32
+ *
33
+ * // Pluralization
34
+ * i18n.t('items', { count: 1 }); // '1 item'
35
+ * i18n.t('items', { count: 5 }); // '5 items'
36
+ *
37
+ * // Reactive translation (auto-updates on locale change)
38
+ * const label = i18n.tc('greeting', { name: 'Ada' });
39
+ * console.log(label.value); // 'Hello, Ada!'
40
+ *
41
+ * i18n.$locale.value = 'de';
42
+ * console.log(label.value); // 'Hallo, Ada!'
43
+ *
44
+ * // Number & date formatting
45
+ * i18n.n(1234.56); // '1,234.56' (en)
46
+ * i18n.d(new Date(), { dateStyle: 'long' }); // 'March 26, 2026'
47
+ *
48
+ * // Lazy-load a locale
49
+ * i18n.loadLocale('fr', () => import('./locales/fr.json'));
50
+ * await i18n.ensureLocale('fr');
51
+ * i18n.$locale.value = 'fr';
52
+ * ```
53
+ */
54
+ export { createI18n } from './i18n';
55
+ export { formatDate, formatNumber } from './formatting';
56
+ export type { DateFormatOptions, I18nConfig, I18nInstance, LocaleLoader, LocaleMessages, Messages, NumberFormatOptions, TranslateParams, } from './types';
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAExD,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,eAAe,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Translation resolution helpers.
3
+ * @module bquery/i18n
4
+ * @internal
5
+ */
6
+ import type { LocaleMessages, TranslateParams } from './types';
7
+ /**
8
+ * Resolves a dot-delimited key path against a messages object.
9
+ *
10
+ * @param messages - The locale messages
11
+ * @param key - Dot-delimited key (e.g. 'user.welcome')
12
+ * @returns The resolved string, or `undefined` if not found
13
+ *
14
+ * @internal
15
+ */
16
+ export declare const resolveKey: (messages: LocaleMessages, key: string) => string | undefined;
17
+ /**
18
+ * Interpolates `{param}` placeholders in a string.
19
+ *
20
+ * @param template - The template string with `{key}` placeholders
21
+ * @param params - Key-value pairs for replacement
22
+ * @returns The interpolated string
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * interpolate('Hello, {name}!', { name: 'Ada' });
27
+ * // → 'Hello, Ada!'
28
+ * ```
29
+ *
30
+ * @internal
31
+ */
32
+ export declare const interpolate: (template: string, params: TranslateParams) => string;
33
+ /**
34
+ * Selects the correct plural form from a pipe-delimited string.
35
+ *
36
+ * Supports two formats:
37
+ * - **Two forms:** `"singular | plural"` — singular when count === 1
38
+ * - **Three forms:** `"zero | one | many"` — zero when count === 0,
39
+ * one when count === 1, many otherwise
40
+ *
41
+ * The `count` parameter must be present in `params` for pluralization.
42
+ * If no `count` param exists or the string has no pipes, the string is
43
+ * returned as-is.
44
+ *
45
+ * @param template - Pipe-delimited plural forms
46
+ * @param params - Must include a `count` key for plural selection
47
+ * @returns The selected form
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * pluralize('{count} item | {count} items', { count: 1 });
52
+ * // → '{count} item'
53
+ *
54
+ * pluralize('no items | {count} item | {count} items', { count: 0 });
55
+ * // → 'no items'
56
+ * ```
57
+ *
58
+ * @internal
59
+ */
60
+ export declare const pluralize: (template: string, params: TranslateParams) => string;
61
+ /**
62
+ * Full translation pipeline: resolve → pluralize → interpolate.
63
+ *
64
+ * @param messages - Locale messages
65
+ * @param key - Dot-delimited key path
66
+ * @param params - Interpolation + pluralization params
67
+ * @param fallbackMessages - Optional fallback locale messages
68
+ * @returns The translated string, or the key if not found
69
+ *
70
+ * @internal
71
+ */
72
+ export declare const translate: (messages: LocaleMessages | undefined, key: string, params: TranslateParams, fallbackMessages?: LocaleMessages) => string;
73
+ /**
74
+ * Deep merges source into target and returns a sanitized, prototype-safe copy.
75
+ *
76
+ * @param target - Target messages object
77
+ * @param source - Source messages to merge
78
+ * @returns A new merged, sanitized messages object
79
+ *
80
+ * @internal
81
+ */
82
+ export declare const deepMerge: (target: LocaleMessages, source: LocaleMessages) => LocaleMessages;
83
+ //# sourceMappingURL=translate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/i18n/translate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,cAAc,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,SAW3E,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,EAAE,QAAQ,eAAe,KAAG,MAOvE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,QAAQ,eAAe,KAAG,MAuBrE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,GAAG,SAAS,EACpC,KAAK,MAAM,EACX,QAAQ,eAAe,EACvB,mBAAmB,cAAc,KAChC,MAqBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,cAAc,EAAE,QAAQ,cAAc,KAAG,cA0B1E,CAAC"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Type definitions for the i18n module.
3
+ * @module bquery/i18n
4
+ */
5
+ import type { ReadonlySignal, Signal } from '../reactive/index';
6
+ /**
7
+ * A nested record of translation messages.
8
+ * Values can be strings or nested objects for namespacing.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const messages: LocaleMessages = {
13
+ * greeting: 'Hello',
14
+ * user: {
15
+ * name: 'Name',
16
+ * welcome: 'Welcome, {name}!',
17
+ * },
18
+ * items: '{count} item | {count} items',
19
+ * };
20
+ * ```
21
+ */
22
+ export type LocaleMessages = {
23
+ [key: string]: string | LocaleMessages;
24
+ };
25
+ /**
26
+ * Record of locale codes to their messages.
27
+ */
28
+ export type Messages = {
29
+ [locale: string]: LocaleMessages;
30
+ };
31
+ /**
32
+ * Interpolation parameters for translation strings.
33
+ * Values are converted to strings during interpolation.
34
+ */
35
+ export type TranslateParams = Record<string, string | number>;
36
+ /**
37
+ * Configuration for creating an i18n instance.
38
+ */
39
+ export type I18nConfig = {
40
+ /** The initial locale code (e.g. 'en', 'de', 'fr') */
41
+ locale: string;
42
+ /** Pre-loaded message dictionaries keyed by locale */
43
+ messages: Messages;
44
+ /** Fallback locale when a key is missing in the current locale */
45
+ fallbackLocale?: string;
46
+ };
47
+ /**
48
+ * A lazy-loader function that returns a promise resolving to locale messages.
49
+ */
50
+ export type LocaleLoader = () => Promise<LocaleMessages | {
51
+ default: LocaleMessages;
52
+ }>;
53
+ /**
54
+ * Options for number formatting via `Intl.NumberFormat`.
55
+ */
56
+ export type NumberFormatOptions = Intl.NumberFormatOptions & {
57
+ /** Override the locale for this specific formatting call */
58
+ locale?: string;
59
+ };
60
+ /**
61
+ * Options for date formatting via `Intl.DateTimeFormat`.
62
+ */
63
+ export type DateFormatOptions = Intl.DateTimeFormatOptions & {
64
+ /** Override the locale for this specific formatting call */
65
+ locale?: string;
66
+ };
67
+ /**
68
+ * The public i18n instance returned by `createI18n()`.
69
+ */
70
+ export type I18nInstance = {
71
+ /**
72
+ * Reactive signal holding the current locale code.
73
+ * Setting `.value` switches the locale and reactively updates
74
+ * all computed translations.
75
+ */
76
+ $locale: Signal<string>;
77
+ /**
78
+ * Translate a key path with optional interpolation and pluralization.
79
+ *
80
+ * @param key - Dot-delimited key path (e.g. 'user.welcome')
81
+ * @param params - Interpolation values (e.g. `{ name: 'Ada' }`)
82
+ * @returns The translated string, or the key itself if not found
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * i18n.t('greeting'); // 'Hello'
87
+ * i18n.t('user.welcome', { name: 'Ada' }); // 'Welcome, Ada!'
88
+ * i18n.t('items', { count: 3 }); // '3 items'
89
+ * ```
90
+ */
91
+ t: (key: string, params?: TranslateParams) => string;
92
+ /**
93
+ * Reactive translation — returns a ReadonlySignal that updates
94
+ * when the locale changes.
95
+ *
96
+ * @param key - Dot-delimited key path
97
+ * @param params - Interpolation values
98
+ * @returns A reactive signal containing the translated string
99
+ */
100
+ tc: (key: string, params?: TranslateParams) => ReadonlySignal<string>;
101
+ /**
102
+ * Register a lazy-loader for a locale's messages.
103
+ * The loader is invoked when the locale is first needed.
104
+ *
105
+ * @param locale - Locale code
106
+ * @param loader - Async function returning messages
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * i18n.loadLocale('de', () => import('./locales/de.json'));
111
+ * ```
112
+ */
113
+ loadLocale: (locale: string, loader: LocaleLoader) => void;
114
+ /**
115
+ * Ensure a locale's messages are loaded (triggers lazy-loader if registered).
116
+ *
117
+ * @param locale - Locale code to load
118
+ * @returns A promise that resolves when the locale is ready
119
+ */
120
+ ensureLocale: (locale: string) => Promise<void>;
121
+ /**
122
+ * Format a number according to the current locale using `Intl.NumberFormat`.
123
+ *
124
+ * @param value - Number to format
125
+ * @param options - Intl.NumberFormat options
126
+ * @returns The formatted number string
127
+ */
128
+ n: (value: number, options?: NumberFormatOptions) => string;
129
+ /**
130
+ * Format a date according to the current locale using `Intl.DateTimeFormat`.
131
+ *
132
+ * @param value - Date to format
133
+ * @param options - Intl.DateTimeFormat options
134
+ * @returns The formatted date string
135
+ */
136
+ d: (value: Date | number, options?: DateFormatOptions) => string;
137
+ /**
138
+ * Get all currently loaded messages for a locale.
139
+ *
140
+ * @param locale - Locale code
141
+ * @returns The messages object, or undefined if not loaded
142
+ */
143
+ getMessages: (locale: string) => LocaleMessages | undefined;
144
+ /**
145
+ * Merge additional messages into an existing locale.
146
+ *
147
+ * @param locale - Locale code
148
+ * @param messages - Messages to merge (deep merge)
149
+ */
150
+ mergeMessages: (locale: string, messages: LocaleMessages) => void;
151
+ /**
152
+ * List all available locale codes (loaded or registered for lazy-loading).
153
+ */
154
+ availableLocales: () => string[];
155
+ };
156
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,QAAQ,EAAE,QAAQ,CAAC;IACnB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,cAAc,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAEvF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,GAAG;IAC3D,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,GAAG;IAC3D,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAExB;;;;;;;;;;;;;OAaG;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;IAErD;;;;;;;OAOG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC;IAEtE;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAE3D;;;;;OAKG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAE5D;;;;;;OAMG;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,MAAM,CAAC;IAEjE;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAE5D;;;;;OAKG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAElE;;OAEG;IACH,gBAAgB,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { a as v, i as l, r as p } from "./object-BCk-1c8T.js";
2
+ import { n as y } from "./core-DdtZHzsS.js";
3
+ import { r as L } from "./untrack-D0fnO5k2.js";
4
+ var O = (n, o, s) => {
5
+ const { locale: e, ...t } = s ?? {};
6
+ try {
7
+ return new Intl.NumberFormat(o, t).format(n);
8
+ } catch {
9
+ return String(n);
10
+ }
11
+ }, w = (n, o, s) => {
12
+ const { locale: e, ...t } = s ?? {}, a = typeof n == "number" ? new Date(n) : n;
13
+ try {
14
+ return new Intl.DateTimeFormat(o, t).format(a);
15
+ } catch {
16
+ return a.toLocaleString();
17
+ }
18
+ }, d = (n, o) => {
19
+ const s = o.split(".");
20
+ let e = n;
21
+ for (const t of s) {
22
+ if (typeof e == "string" || e[t] === void 0) return;
23
+ e = e[t];
24
+ }
25
+ return typeof e == "string" ? e : void 0;
26
+ }, M = (n, o) => n.replace(/\{(\w+)\}/g, (s, e) => e in o ? String(o[e]) : s), h = (n, o) => {
27
+ if (!n.includes("|") || !("count" in o)) return n;
28
+ const s = Number(o.count), e = n.split("|").map((t) => t.trim());
29
+ return e.length === 3 ? s === 0 ? e[0] : s === 1 ? e[1] : e[2] : e.length === 2 ? s === 1 ? e[0] : e[1] : s === 0 && e.length > 0 ? e[0] : s === 1 && e.length > 1 ? e[1] : e[e.length - 1];
30
+ }, m = (n, o, s, e) => {
31
+ let t;
32
+ return n && (t = d(n, o)), t === void 0 && e && (t = d(e, o)), t === void 0 ? o : M(h(t, s), s);
33
+ }, b = (n, o) => {
34
+ const s = v(n, o), e = (t) => {
35
+ if (Array.isArray(t)) return t.map((c) => e(c));
36
+ if (!p(t)) return t;
37
+ const a = /* @__PURE__ */ Object.create(null);
38
+ for (const [c, f] of Object.entries(t))
39
+ l(c) || (a[c] = e(f));
40
+ return a;
41
+ };
42
+ return e(s);
43
+ }, x = (n) => {
44
+ const { locale: o, messages: s, fallbackLocale: e } = n, t = (r) => b(/* @__PURE__ */ Object.create(null), r), a = /* @__PURE__ */ Object.create(null);
45
+ for (const [r, i] of Object.entries(s))
46
+ l(r) || (a[r] = t(i));
47
+ const c = y(o), f = /* @__PURE__ */ new Map(), g = new Set(Object.keys(a));
48
+ return {
49
+ $locale: c,
50
+ t: (r, i = {}) => {
51
+ const u = a[c.value];
52
+ return m(u, r, i, e ? a[e] : void 0);
53
+ },
54
+ tc: (r, i = {}) => L(() => {
55
+ const u = a[c.value];
56
+ return m(u, r, i, e ? a[e] : void 0);
57
+ }),
58
+ loadLocale: (r, i) => {
59
+ l(r) || f.set(r, i);
60
+ },
61
+ ensureLocale: async (r) => {
62
+ if (l(r) || g.has(r)) return;
63
+ const i = f.get(r);
64
+ if (!i) throw new Error(`bQuery i18n: No messages or loader registered for locale "${r}".`);
65
+ const u = await i();
66
+ a[r] = t(u.default ?? u), g.add(r);
67
+ },
68
+ n: (r, i) => O(r, i?.locale ?? c.value, i),
69
+ d: (r, i) => w(r, i?.locale ?? c.value, i),
70
+ getMessages: (r) => {
71
+ if (!l(r))
72
+ return a[r];
73
+ },
74
+ mergeMessages: (r, i) => {
75
+ l(r) || (a[r] || (a[r] = /* @__PURE__ */ Object.create(null), g.add(r)), a[r] = b(a[r], t(i)));
76
+ },
77
+ availableLocales: () => {
78
+ const r = /* @__PURE__ */ new Set([...g, ...f.keys()]);
79
+ return Array.from(r).sort();
80
+ }
81
+ };
82
+ };
83
+ export {
84
+ w as n,
85
+ O as r,
86
+ x as t
87
+ };
88
+
89
+ //# sourceMappingURL=i18n-kuF6Ekj6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-kuF6Ekj6.js","names":[],"sources":["../src/i18n/formatting.ts","../src/i18n/translate.ts","../src/i18n/i18n.ts"],"sourcesContent":["/**\n * Number and date formatting helpers using Intl APIs.\n * @module bquery/i18n\n */\n\nimport type { DateFormatOptions, NumberFormatOptions } from './types';\n\n/**\n * Formats a number using the Intl.NumberFormat API.\n *\n * @param value - The number to format\n * @param locale - The locale code (e.g. 'en-US', 'de-DE')\n * @param options - Intl.NumberFormat options\n * @returns The formatted number string\n *\n * @example\n * ```ts\n * formatNumber(1234.56, 'en-US'); // '1,234.56'\n * formatNumber(1234.56, 'de-DE'); // '1.234,56'\n * formatNumber(0.42, 'en-US', { style: 'percent' }); // '42%'\n * formatNumber(9.99, 'en-US', { style: 'currency', currency: 'USD' }); // '$9.99'\n * ```\n */\nexport const formatNumber = (\n value: number,\n locale: string,\n options?: NumberFormatOptions\n): string => {\n const { locale: _ignored, ...intlOptions } = options ?? {};\n try {\n return new Intl.NumberFormat(locale, intlOptions).format(value);\n } catch {\n // Fall back to basic toString on Intl errors\n return String(value);\n }\n};\n\n/**\n * Formats a date using the Intl.DateTimeFormat API.\n *\n * @param value - The date to format (Date object or timestamp)\n * @param locale - The locale code\n * @param options - Intl.DateTimeFormat options\n * @returns The formatted date string\n *\n * @example\n * ```ts\n * const date = new Date('2026-03-26');\n * formatDate(date, 'en-US'); // '3/26/2026'\n * formatDate(date, 'de-DE'); // '26.3.2026'\n * formatDate(date, 'en-US', { dateStyle: 'long' }); // 'March 26, 2026'\n * ```\n */\nexport const formatDate = (\n value: Date | number,\n locale: string,\n options?: DateFormatOptions\n): string => {\n const { locale: _ignored, ...intlOptions } = options ?? {};\n const date = typeof value === 'number' ? new Date(value) : value;\n try {\n return new Intl.DateTimeFormat(locale, intlOptions).format(date);\n } catch {\n // Fall back to toLocaleString on Intl errors\n return date.toLocaleString();\n }\n};\n","/**\n * Translation resolution helpers.\n * @module bquery/i18n\n * @internal\n */\n\nimport { isPlainObject, isPrototypePollutionKey, merge } from '../core/utils/object';\nimport type { LocaleMessages, TranslateParams } from './types';\n\n/**\n * Resolves a dot-delimited key path against a messages object.\n *\n * @param messages - The locale messages\n * @param key - Dot-delimited key (e.g. 'user.welcome')\n * @returns The resolved string, or `undefined` if not found\n *\n * @internal\n */\nexport const resolveKey = (messages: LocaleMessages, key: string): string | undefined => {\n const parts = key.split('.');\n let current: LocaleMessages | string = messages;\n\n for (const part of parts) {\n if (typeof current === 'string') return undefined;\n if (current[part] === undefined) return undefined;\n current = current[part];\n }\n\n return typeof current === 'string' ? current : undefined;\n};\n\n/**\n * Interpolates `{param}` placeholders in a string.\n *\n * @param template - The template string with `{key}` placeholders\n * @param params - Key-value pairs for replacement\n * @returns The interpolated string\n *\n * @example\n * ```ts\n * interpolate('Hello, {name}!', { name: 'Ada' });\n * // → 'Hello, Ada!'\n * ```\n *\n * @internal\n */\nexport const interpolate = (template: string, params: TranslateParams): string => {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => {\n if (key in params) {\n return String(params[key]);\n }\n return match; // Leave unmatched placeholders as-is\n });\n};\n\n/**\n * Selects the correct plural form from a pipe-delimited string.\n *\n * Supports two formats:\n * - **Two forms:** `\"singular | plural\"` — singular when count === 1\n * - **Three forms:** `\"zero | one | many\"` — zero when count === 0,\n * one when count === 1, many otherwise\n *\n * The `count` parameter must be present in `params` for pluralization.\n * If no `count` param exists or the string has no pipes, the string is\n * returned as-is.\n *\n * @param template - Pipe-delimited plural forms\n * @param params - Must include a `count` key for plural selection\n * @returns The selected form\n *\n * @example\n * ```ts\n * pluralize('{count} item | {count} items', { count: 1 });\n * // → '{count} item'\n *\n * pluralize('no items | {count} item | {count} items', { count: 0 });\n * // → 'no items'\n * ```\n *\n * @internal\n */\nexport const pluralize = (template: string, params: TranslateParams): string => {\n if (!template.includes('|')) return template;\n if (!('count' in params)) return template;\n\n const count = Number(params.count);\n const forms = template.split('|').map((s) => s.trim());\n\n if (forms.length === 3) {\n // zero | one | many\n if (count === 0) return forms[0];\n if (count === 1) return forms[1];\n return forms[2];\n }\n\n if (forms.length === 2) {\n // singular | plural\n return count === 1 ? forms[0] : forms[1];\n }\n\n // More than 3 forms: use last form for \"many\"\n if (count === 0 && forms.length > 0) return forms[0];\n if (count === 1 && forms.length > 1) return forms[1];\n return forms[forms.length - 1];\n};\n\n/**\n * Full translation pipeline: resolve → pluralize → interpolate.\n *\n * @param messages - Locale messages\n * @param key - Dot-delimited key path\n * @param params - Interpolation + pluralization params\n * @param fallbackMessages - Optional fallback locale messages\n * @returns The translated string, or the key if not found\n *\n * @internal\n */\nexport const translate = (\n messages: LocaleMessages | undefined,\n key: string,\n params: TranslateParams,\n fallbackMessages?: LocaleMessages\n): string => {\n let template: string | undefined;\n\n // Try current locale\n if (messages) {\n template = resolveKey(messages, key);\n }\n\n // Fallback locale\n if (template === undefined && fallbackMessages) {\n template = resolveKey(fallbackMessages, key);\n }\n\n // Key not found — return key as-is\n if (template === undefined) {\n return key;\n }\n\n // Pluralize first, then interpolate\n const pluralized = pluralize(template, params);\n return interpolate(pluralized, params);\n};\n\n/**\n * Deep merges source into target and returns a sanitized, prototype-safe copy.\n *\n * @param target - Target messages object\n * @param source - Source messages to merge\n * @returns A new merged, sanitized messages object\n *\n * @internal\n */\nexport const deepMerge = (target: LocaleMessages, source: LocaleMessages): LocaleMessages => {\n const merged = merge(\n target as Record<string, unknown>,\n source as Record<string, unknown>\n ) as LocaleMessages;\n\n const cloneSafeMessages = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneSafeMessages(entry));\n }\n\n if (!isPlainObject(value)) {\n return value;\n }\n\n const safeObject = Object.create(null) as Record<string, unknown>;\n for (const [key, entry] of Object.entries(value)) {\n if (isPrototypePollutionKey(key)) {\n continue;\n }\n safeObject[key] = cloneSafeMessages(entry);\n }\n return safeObject;\n };\n\n return cloneSafeMessages(merged) as LocaleMessages;\n};\n","/**\n * Core i18n factory function.\n * @module bquery/i18n\n */\n\nimport { computed, signal } from '../reactive/index';\nimport { isPrototypePollutionKey } from '../core/utils/object';\nimport { formatDate, formatNumber } from './formatting';\nimport { deepMerge, translate } from './translate';\nimport type {\n DateFormatOptions,\n I18nConfig,\n I18nInstance,\n LocaleLoader,\n LocaleMessages,\n Messages,\n NumberFormatOptions,\n TranslateParams,\n} from './types';\n\n/**\n * Creates a reactive internationalization instance.\n *\n * The returned object provides:\n * - `$locale` — a reactive signal for the current locale\n * - `t()` — translation with interpolation and pluralization\n * - `tc()` — reactive translation that auto-updates on locale change\n * - `loadLocale()` — register lazy-loaded locale files\n * - `n()` — locale-aware number formatting\n * - `d()` — locale-aware date formatting\n *\n * @param config - Initial configuration\n * @returns An i18n instance\n *\n * @example\n * ```ts\n * import { createI18n } from '@bquery/bquery/i18n';\n *\n * const i18n = createI18n({\n * locale: 'en',\n * fallbackLocale: 'en',\n * messages: {\n * en: {\n * greeting: 'Hello, {name}!',\n * items: '{count} item | {count} items',\n * },\n * de: {\n * greeting: 'Hallo, {name}!',\n * items: '{count} Gegenstand | {count} Gegenstände',\n * },\n * },\n * });\n *\n * i18n.t('greeting', { name: 'Ada' }); // 'Hello, Ada!'\n * i18n.t('items', { count: 3 }); // '3 items'\n *\n * // Switch locale reactively\n * i18n.$locale.value = 'de';\n * i18n.t('greeting', { name: 'Ada' }); // 'Hallo, Ada!'\n * ```\n */\nexport const createI18n = (config: I18nConfig): I18nInstance => {\n const { locale: initialLocale, messages: initialMessages, fallbackLocale } = config;\n\n const sanitizeLocaleMessages = (localeMessages: LocaleMessages): LocaleMessages =>\n deepMerge(Object.create(null) as LocaleMessages, localeMessages);\n\n // Deep-clone initial messages to prevent external mutation\n const messages = Object.create(null) as Messages;\n for (const [loc, msgs] of Object.entries(initialMessages)) {\n if (isPrototypePollutionKey(loc)) {\n continue;\n }\n messages[loc] = sanitizeLocaleMessages(msgs);\n }\n\n // Reactive locale signal\n const $locale = signal(initialLocale);\n\n // Lazy-loader registry\n const loaders = new Map<string, LocaleLoader>();\n\n // Track which loaders have been invoked to avoid duplicate loads\n const loadedLocales = new Set<string>(Object.keys(messages));\n\n /**\n * Get messages for a locale, or undefined if not loaded.\n */\n const getMessages = (loc: string): LocaleMessages | undefined => {\n if (isPrototypePollutionKey(loc)) {\n return undefined;\n }\n return messages[loc];\n };\n\n /**\n * Register a lazy-loader for a locale.\n */\n const loadLocale = (loc: string, loader: LocaleLoader): void => {\n if (isPrototypePollutionKey(loc)) {\n return;\n }\n loaders.set(loc, loader);\n };\n\n /**\n * Ensure a locale's messages are loaded.\n */\n const ensureLocale = async (loc: string): Promise<void> => {\n if (isPrototypePollutionKey(loc)) return;\n if (loadedLocales.has(loc)) return;\n\n const loader = loaders.get(loc);\n if (!loader) {\n throw new Error(`bQuery i18n: No messages or loader registered for locale \"${loc}\".`);\n }\n\n const loaded = await loader();\n // Handle both default exports and direct objects\n const msgs = (loaded as { default?: LocaleMessages }).default ?? (loaded as LocaleMessages);\n messages[loc] = sanitizeLocaleMessages(msgs);\n loadedLocales.add(loc);\n };\n\n /**\n * Translate a key path.\n */\n const t = (key: string, params: TranslateParams = {}): string => {\n const currentLocale = $locale.value;\n const currentMessages = messages[currentLocale];\n const fallbackMessages = fallbackLocale ? messages[fallbackLocale] : undefined;\n\n return translate(currentMessages, key, params, fallbackMessages);\n };\n\n /**\n * Reactive translation — returns a computed signal.\n */\n const tc = (key: string, params: TranslateParams = {}) => {\n return computed(() => {\n // Reading $locale.value creates a reactive dependency\n const currentLocale = $locale.value;\n const currentMessages = messages[currentLocale];\n const fallbackMessages = fallbackLocale ? messages[fallbackLocale] : undefined;\n\n return translate(currentMessages, key, params, fallbackMessages);\n });\n };\n\n /**\n * Format a number with the current (or overridden) locale.\n */\n const n = (value: number, options?: NumberFormatOptions): string => {\n const loc = options?.locale ?? $locale.value;\n return formatNumber(value, loc, options);\n };\n\n /**\n * Format a date with the current (or overridden) locale.\n */\n const d = (value: Date | number, options?: DateFormatOptions): string => {\n const loc = options?.locale ?? $locale.value;\n return formatDate(value, loc, options);\n };\n\n /**\n * Merge additional messages into a locale.\n */\n const mergeMessages = (loc: string, newMessages: LocaleMessages): void => {\n if (isPrototypePollutionKey(loc)) {\n return;\n }\n if (!messages[loc]) {\n messages[loc] = Object.create(null) as LocaleMessages;\n loadedLocales.add(loc);\n }\n messages[loc] = deepMerge(messages[loc], sanitizeLocaleMessages(newMessages));\n };\n\n /**\n * List all available locales (loaded + registered loaders).\n */\n const availableLocales = (): string[] => {\n const locales = new Set<string>([...loadedLocales, ...loaders.keys()]);\n return Array.from(locales).sort();\n };\n\n return {\n $locale,\n t,\n tc,\n loadLocale,\n ensureLocale,\n n,\n d,\n getMessages,\n mergeMessages,\n availableLocales,\n };\n};\n"],"mappings":";;;AAuBA,IAAa,IAAA,CACX,GACA,GACA,MACW;AACX,QAAM,EAAE,QAAQ,GAAU,GAAG,EAAA,IAAgB,KAAW,CAAA;AACxD,MAAI;AACF,WAAO,IAAI,KAAK,aAAa,GAAQ,CAAA,EAAa,OAAO,CAAA;AAAA,UACnD;AAEN,WAAO,OAAO,CAAA;AAAA;GAoBL,IAAA,CACX,GACA,GACA,MACW;AACX,QAAM,EAAE,QAAQ,GAAU,GAAG,EAAA,IAAgB,KAAW,CAAA,GAClD,IAAO,OAAO,KAAU,WAAW,IAAI,KAAK,CAAA,IAAS;AAC3D,MAAI;AACF,WAAO,IAAI,KAAK,eAAe,GAAQ,CAAA,EAAa,OAAO,CAAA;AAAA,UACrD;AAEN,WAAO,EAAK,eAAA;AAAA;GC9CH,IAAA,CAAc,GAA0B,MAAoC;AACvF,QAAM,IAAQ,EAAI,MAAM,GAAA;AACxB,MAAI,IAAmC;AAEvC,aAAW,KAAQ,GAAO;AAExB,QADI,OAAO,KAAY,YACnB,EAAQ,CAAA,MAAU,OAAW;AACjC,IAAA,IAAU,EAAQ,CAAA;AAAA;AAGpB,SAAO,OAAO,KAAY,WAAW,IAAU;GAkBpC,IAAA,CAAe,GAAkB,MACrC,EAAS,QAAQ,cAAA,CAAe,GAAO,MACxC,KAAO,IACF,OAAO,EAAO,CAAA,CAAA,IAEhB,IA+BE,IAAA,CAAa,GAAkB,MAAoC;AAE9E,MADI,CAAC,EAAS,SAAS,GAAA,KACnB,EAAE,WAAW,GAAS,QAAO;AAEjC,QAAM,IAAQ,OAAO,EAAO,KAAA,GACtB,IAAQ,EAAS,MAAM,GAAA,EAAK,IAAA,CAAK,MAAM,EAAE,KAAA,CAAM;AAErD,SAAI,EAAM,WAAW,IAEf,MAAU,IAAU,EAAM,CAAA,IAC1B,MAAU,IAAU,EAAM,CAAA,IACvB,EAAM,CAAA,IAGX,EAAM,WAAW,IAEZ,MAAU,IAAI,EAAM,CAAA,IAAK,EAAM,CAAA,IAIpC,MAAU,KAAK,EAAM,SAAS,IAAU,EAAM,CAAA,IAC9C,MAAU,KAAK,EAAM,SAAS,IAAU,EAAM,CAAA,IAC3C,EAAM,EAAM,SAAS,CAAA;GAcjB,IAAA,CACX,GACA,GACA,GACA,MACW;AACX,MAAI;AAaJ,SAVI,MACF,IAAW,EAAW,GAAU,CAAA,IAI9B,MAAa,UAAa,MAC5B,IAAW,EAAW,GAAkB,CAAA,IAItC,MAAa,SACR,IAKF,EADY,EAAU,GAAU,CAAA,GACR,CAAA;GAYpB,IAAA,CAAa,GAAwB,MAA2C;AAC3F,QAAM,IAAS,EACb,GACA,CAAA,GAGI,IAAA,CAAqB,MAA4B;AACrD,QAAI,MAAM,QAAQ,CAAA,EAChB,QAAO,EAAM,IAAA,CAAK,MAAU,EAAkB,CAAA,CAAM;AAGtD,QAAI,CAAC,EAAc,CAAA,EACjB,QAAO;AAGT,UAAM,IAAa,uBAAO,OAAO,IAAA;AACjC,eAAW,CAAC,GAAK,CAAA,KAAU,OAAO,QAAQ,CAAA;AACxC,MAAI,EAAwB,CAAA,MAG5B,EAAW,CAAA,IAAO,EAAkB,CAAA;AAEtC,WAAO;AAAA;AAGT,SAAO,EAAkB,CAAA;GCvHd,IAAA,CAAc,MAAqC;AAC9D,QAAM,EAAE,QAAQ,GAAe,UAAU,GAAiB,gBAAA,EAAA,IAAmB,GAEvE,IAAA,CAA0B,MAC9B,EAAU,uBAAO,OAAO,IAAA,GAAyB,CAAA,GAG7C,IAAW,uBAAO,OAAO,IAAA;AAC/B,aAAW,CAAC,GAAK,CAAA,KAAS,OAAO,QAAQ,CAAA;AACvC,IAAI,EAAwB,CAAA,MAG5B,EAAS,CAAA,IAAO,EAAuB,CAAA;AAIzC,QAAM,IAAU,EAAO,CAAA,GAGjB,IAAU,oBAAI,IAAA,GAGd,IAAgB,IAAI,IAAY,OAAO,KAAK,CAAA,CAAS;AAwG3D,SAAO;AAAA,IACL,SAAA;AAAA,IACA,GA9DI,CAAK,GAAa,IAA0B,CAAA,MAAe;AAE/D,YAAM,IAAkB,EADF,EAAQ,KAAA;AAI9B,aAAO,EAAU,GAAiB,GAAK,GAFd,IAAiB,EAAS,CAAA,IAAkB,MAAA;AAAA;IA4DrE,IApDI,CAAM,GAAa,IAA0B,CAAA,MAC1C,EAAA,MAAe;AAGpB,YAAM,IAAkB,EADF,EAAQ,KAAA;AAI9B,aAAO,EAAU,GAAiB,GAAK,GAFd,IAAiB,EAAS,CAAA,IAAkB,MAAA;AAAA;IAgDvE,YA7FI,CAAc,GAAa,MAA+B;AAC9D,MAAI,EAAwB,CAAA,KAG5B,EAAQ,IAAI,GAAK,CAAA;AAAA;IA0FjB,cApFmB,OAAO,MAA+B;AAEzD,UADI,EAAwB,CAAA,KACxB,EAAc,IAAI,CAAA,EAAM;AAE5B,YAAM,IAAS,EAAQ,IAAI,CAAA;AAC3B,UAAI,CAAC,EACH,OAAM,IAAI,MAAM,6DAA6D,CAAA,IAAI;AAGnF,YAAM,IAAS,MAAM,EAAA;AAGrB,MAAA,EAAS,CAAA,IAAO,EADF,EAAwC,WAAY,CAAA,GAElE,EAAc,IAAI,CAAA;AAAA;IAwElB,GAzCI,CAAK,GAAe,MAEjB,EAAa,GADR,GAAS,UAAU,EAAQ,OACP,CAAA;AAAA,IAwChC,GAlCI,CAAK,GAAsB,MAExB,EAAW,GADN,GAAS,UAAU,EAAQ,OACT,CAAA;AAAA,IAiC9B,aA3GI,CAAe,MAA4C;AAC/D,UAAI,CAAA,EAAwB,CAAA;AAG5B,eAAO,EAAS,CAAA;AAAA;IAwGhB,eA5BI,CAAiB,GAAa,MAAsC;AACxE,MAAI,EAAwB,CAAA,MAGvB,EAAS,CAAA,MACZ,EAAS,CAAA,IAAO,uBAAO,OAAO,IAAA,GAC9B,EAAc,IAAI,CAAA,IAEpB,EAAS,CAAA,IAAO,EAAU,EAAS,CAAA,GAAM,EAAuB,CAAA,CAAY;AAAA;IAqB5E,kBAfI,MAAmC;AACvC,YAAM,IAAU,oBAAI,IAAY,CAAC,GAAG,GAAe,GAAG,EAAQ,KAAA,CAAM,CAAC;AACrE,aAAO,MAAM,KAAK,CAAA,EAAS,KAAA;AAAA"}
@@ -0,0 +1,6 @@
1
+ import { n as a, r as t, t as e } from "./i18n-kuF6Ekj6.js";
2
+ export {
3
+ e as createI18n,
4
+ a as formatDate,
5
+ t as formatNumber
6
+ };
package/dist/index.d.ts CHANGED
@@ -16,4 +16,15 @@ export * from './platform/index';
16
16
  export * from './router/index';
17
17
  export * from './store/index';
18
18
  export * from './view/index';
19
+ export * from './forms/index';
20
+ export * from './i18n/index';
21
+ export { announceToScreenReader, auditA11y, clearAnnouncements, getFocusableElements, prefersColorScheme, prefersContrast, releaseFocus, rovingTabIndex, skipLink, trapFocus, } from './a11y/index';
22
+ export type { AnnouncePriority, AuditFinding, AuditResult, AuditSeverity, ColorScheme, ContrastPreference, FocusTrapHandle, RovingTabIndexHandle, RovingTabIndexOptions, SkipLinkHandle, SkipLinkOptions, TrapFocusOptions, } from './a11y/index';
23
+ export * from './dnd/index';
24
+ export * from './media/index';
25
+ export * from './plugin/index';
26
+ export * from './devtools/index';
27
+ export { renderComponent, flushEffects, mockSignal, mockRouter, fireEvent, waitFor, } from './testing/index';
28
+ export type { FireEventOptions, MockRouter, MockRouterOptions, MockSignal, RenderComponentOptions, RenderResult, TestRoute, WaitForOptions, } from './testing/index';
29
+ export * from './ssr/index';
19
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAM7B,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,GACR,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,cAAc,aAAa,CAAC"}