@vizejs/composable 0.426.2 → 0.427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,263 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { retryAsync } from "./retry-async.mjs";
3
+ import { computed, readonly, shallowRef, toValue, watch } from "vue";
4
+ //#region src/use-fetch.ts
5
+ var RetryableFailure = class {
6
+ failure;
7
+ constructor(failure) {
8
+ this.failure = failure;
9
+ }
10
+ };
11
+ const TIMEOUT_REASON = "VIZE_COMPOSE_FETCH_TIMEOUT";
12
+ function browserFetch() {
13
+ if (typeof window === "undefined" || typeof window.fetch !== "function") return void 0;
14
+ const fetchImplementation = window.fetch.bind(window);
15
+ return (input, init) => fetchImplementation(input, init);
16
+ }
17
+ function isRetryableStatus(status) {
18
+ return status === 408 || status === 429 || status >= 500;
19
+ }
20
+ function readBody(response, responseType) {
21
+ switch (responseType) {
22
+ case "text": return response.text();
23
+ case "blob": return response.blob();
24
+ case "arrayBuffer": return response.arrayBuffer();
25
+ case "formData": return response.formData();
26
+ default: return response.json();
27
+ }
28
+ }
29
+ function assertTimeout(timeoutMs) {
30
+ if (timeoutMs === void 0) return;
31
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) throw new RangeError(`[VIZE_COMPOSE_FETCH_INVALID_TIMEOUT] timeoutMs must be a finite non-negative number; received ${String(timeoutMs)}`);
32
+ }
33
+ /**
34
+ * Reactive, abortable, retrying `fetch` with typed decoding and interceptors.
35
+ *
36
+ * Latest wins: starting an execution aborts the pending one, which then
37
+ * settles as `"superseded"` without touching state. The pending request is
38
+ * aborted when the owning reactive scope stops; outside a scope the caller
39
+ * owns `abort()`. Automatic execution (initial and on reactive URL/`init`
40
+ * changes) only happens in a browser or with an explicit `fetch`, so server
41
+ * rendering performs no I/O unless you `await execute()` in
42
+ * `onServerPrefetch`; state then holds `initialData` and status `"idle"`.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * const id = ref(1);
47
+ * const { data, error } = useFetch(() => `/api/users/${id.value}`, {
48
+ * validate: isUser,
49
+ * retry: 2,
50
+ * timeoutMs: 5_000,
51
+ * });
52
+ * ```
53
+ *
54
+ * @param url Reactive URL; `null`/`undefined` keeps the resource idle.
55
+ * @param options Decoding, retry, timeout, and interceptor options.
56
+ * @default options {}
57
+ * @throws {RangeError} `[VIZE_COMPOSE_FETCH_INVALID_TIMEOUT]` for an invalid timeout.
58
+ * @returns Reactive state and controls.
59
+ */
60
+ function useFetch(url, options = {}) {
61
+ assertTimeout(options.timeoutMs);
62
+ const data = shallowRef(options.initialData);
63
+ const error = shallowRef(void 0);
64
+ const status = shallowRef("idle");
65
+ const response = shallowRef(void 0);
66
+ const statusCode = computed(() => response.value?.status);
67
+ const pending = computed(() => status.value === "pending");
68
+ const scheduler = options.scheduler ?? {
69
+ setTimeout: (callback, delayMs) => {
70
+ const handle = globalThis.setTimeout(callback, delayMs);
71
+ return () => globalThis.clearTimeout(handle);
72
+ },
73
+ clearTimeout: (cancel) => {
74
+ if (typeof cancel === "function") cancel();
75
+ }
76
+ };
77
+ let active;
78
+ const resolveFetch = () => options.fetch ?? browserFetch();
79
+ const decode = async (result) => options.parse ? options.parse(result) : readBody(result, options.responseType ?? "json");
80
+ const accepts = (candidate) => options.validate ? options.validate(candidate) : true;
81
+ const fail = (failure, record) => {
82
+ if (active !== record) return { status: "superseded" };
83
+ active = void 0;
84
+ error.value = failure;
85
+ status.value = failure.kind === "aborted" ? "aborted" : "error";
86
+ options.onError?.(failure);
87
+ return {
88
+ status: "error",
89
+ error: failure
90
+ };
91
+ };
92
+ const abortFailure = (signal, timeoutMs) => signal.reason === TIMEOUT_REASON && timeoutMs !== void 0 ? {
93
+ kind: "timeout",
94
+ timeoutMs
95
+ } : {
96
+ kind: "aborted",
97
+ reason: signal.reason
98
+ };
99
+ const execute = async () => {
100
+ if (active !== void 0) {
101
+ active.superseded = true;
102
+ active.controller.abort(new DOMException("A newer fetch started.", "AbortError"));
103
+ }
104
+ const record = {
105
+ controller: new AbortController(),
106
+ superseded: false
107
+ };
108
+ active = record;
109
+ const { signal } = record.controller;
110
+ error.value = void 0;
111
+ status.value = "pending";
112
+ const target = toValue(url);
113
+ const fetchImplementation = resolveFetch();
114
+ if (target === null || target === void 0 || fetchImplementation === void 0) return fail({
115
+ kind: "network",
116
+ cause: /* @__PURE__ */ new TypeError(target === null || target === void 0 ? "[VIZE_COMPOSE_FETCH_NO_URL] no request URL is available" : "[VIZE_COMPOSE_FETCH_UNSUPPORTED] no fetch implementation is available")
117
+ }, record);
118
+ const timeoutMs = options.timeoutMs;
119
+ const timer = timeoutMs === void 0 ? void 0 : scheduler.setTimeout(() => record.controller.abort(TIMEOUT_REASON), timeoutMs);
120
+ try {
121
+ let request = {
122
+ url: String(target),
123
+ init: { ...toValue(options.init) }
124
+ };
125
+ if (options.beforeRequest) {
126
+ const replaced = await options.beforeRequest({
127
+ ...request,
128
+ signal
129
+ });
130
+ if (replaced === false) record.controller.abort(new DOMException("beforeRequest cancelled the request.", "AbortError"));
131
+ else if (replaced) request = replaced;
132
+ }
133
+ if (signal.aborted) return record.superseded ? { status: "superseded" } : fail(abortFailure(signal, timeoutMs), record);
134
+ const retry = options.retry ?? 0;
135
+ const retryOptions = typeof retry === "number" ? {
136
+ maximumRetries: retry,
137
+ initialDelayMs: 0
138
+ } : retry;
139
+ const userShouldRetry = retryOptions.shouldRetry;
140
+ const attemptOutcome = await retryAsync(async () => {
141
+ let result;
142
+ try {
143
+ result = await fetchImplementation(request.url, {
144
+ ...request.init,
145
+ signal
146
+ });
147
+ } catch (cause) {
148
+ throw new RetryableFailure({
149
+ kind: "network",
150
+ cause
151
+ });
152
+ }
153
+ if (!result.ok && isRetryableStatus(result.status)) throw new RetryableFailure({
154
+ kind: "http",
155
+ status: result.status,
156
+ response: result
157
+ });
158
+ return result;
159
+ }, {
160
+ ...retryOptions,
161
+ signal,
162
+ scheduler,
163
+ shouldRetry: (context) => userShouldRetry ? userShouldRetry(context) : context.error instanceof RetryableFailure
164
+ }).then((result) => ({
165
+ ok: true,
166
+ result
167
+ }), (cause) => ({
168
+ ok: false,
169
+ cause
170
+ }));
171
+ if (!attemptOutcome.ok) {
172
+ if (signal.aborted) return record.superseded ? { status: "superseded" } : fail(abortFailure(signal, timeoutMs), record);
173
+ const { cause } = attemptOutcome;
174
+ if (active === record && cause instanceof RetryableFailure) {
175
+ if (cause.failure.kind === "http") response.value = cause.failure.response;
176
+ return fail(cause.failure, record);
177
+ }
178
+ return fail({
179
+ kind: "network",
180
+ cause
181
+ }, record);
182
+ }
183
+ const result = attemptOutcome.result;
184
+ if (active === record) response.value = result;
185
+ if (!result.ok) return fail({
186
+ kind: "http",
187
+ status: result.status,
188
+ response: result
189
+ }, record);
190
+ let decoded;
191
+ try {
192
+ decoded = await decode(result);
193
+ } catch (cause) {
194
+ if (signal.aborted) return record.superseded ? { status: "superseded" } : fail(abortFailure(signal, timeoutMs), record);
195
+ return fail({
196
+ kind: "parse",
197
+ cause
198
+ }, record);
199
+ }
200
+ if (!accepts(decoded)) return fail({
201
+ kind: "invalid",
202
+ data: decoded
203
+ }, record);
204
+ let value = decoded;
205
+ if (options.afterResponse) {
206
+ const transformed = await options.afterResponse({
207
+ request,
208
+ response: result,
209
+ data: value
210
+ });
211
+ if (transformed !== void 0) value = transformed;
212
+ }
213
+ if (active !== record) return { status: "superseded" };
214
+ active = void 0;
215
+ data.value = value;
216
+ status.value = "success";
217
+ return {
218
+ status: "success",
219
+ data: value,
220
+ response: result
221
+ };
222
+ } catch (cause) {
223
+ return fail({
224
+ kind: "network",
225
+ cause
226
+ }, record);
227
+ } finally {
228
+ if (timer !== void 0) scheduler.clearTimeout(timer);
229
+ }
230
+ };
231
+ const abort = (reason = new DOMException("The request was aborted.", "AbortError")) => {
232
+ if (active === void 0) return false;
233
+ active.controller.abort(reason);
234
+ return true;
235
+ };
236
+ if (options.fetch !== void 0 || typeof window !== "undefined") {
237
+ let initial = true;
238
+ tryOnScopeDispose(watch([() => toValue(url), () => toValue(options.init)], ([target]) => {
239
+ const first = initial;
240
+ initial = false;
241
+ if (target === null || target === void 0) return;
242
+ if (first ? options.immediate ?? true : options.refetch ?? true) execute();
243
+ }, {
244
+ immediate: true,
245
+ deep: true
246
+ }));
247
+ }
248
+ tryOnScopeDispose(() => {
249
+ abort(new DOMException("The reactive scope was disposed.", "AbortError"));
250
+ });
251
+ return {
252
+ data,
253
+ error,
254
+ status: readonly(status),
255
+ response,
256
+ statusCode,
257
+ pending,
258
+ execute,
259
+ abort
260
+ };
261
+ }
262
+ //#endregion
263
+ export { useFetch };
@@ -0,0 +1,107 @@
1
+ import { d as StandardSchemaV1 } from "./standard-schema-DmNgFVK5.mjs";
2
+ import { ComputedRef, Ref, ShallowRef } from "vue";
3
+
4
+ //#region src/use-field.d.ts
5
+ /** Result of a standalone field validator: messages, one message, or nothing. */
6
+ type FieldRuleResult = string | readonly string[] | null | undefined | void;
7
+ /** Context passed to standalone field validators. */
8
+ interface FieldRuleContext {
9
+ /** Aborted when a newer validation supersedes this one. */
10
+ readonly signal: AbortSignal;
11
+ }
12
+ /** Plain validator for a standalone field. */
13
+ type FieldRule<Value> = (value: Value, context: FieldRuleContext) => FieldRuleResult | Promise<FieldRuleResult>;
14
+ /** A plain validator or a Standard Schema v1 validator for the value. */
15
+ type FieldRuleSource<Value> = FieldRule<Value> | StandardSchemaV1<Value, unknown>;
16
+ /** When a standalone field validates automatically. */
17
+ type FieldValidationTrigger = "change" | "blur" | "manual";
18
+ /** Options for {@link useField}. */
19
+ interface UseFieldOptions<Value> {
20
+ /**
21
+ * Validators run in order; their messages are concatenated.
22
+ *
23
+ * @default []
24
+ */
25
+ readonly rules?: FieldRuleSource<Value> | readonly FieldRuleSource<Value>[];
26
+ /**
27
+ * When validation runs automatically.
28
+ *
29
+ * @default "change"
30
+ */
31
+ readonly validateOn?: FieldValidationTrigger;
32
+ /**
33
+ * Field name exposed for `name` attributes and error summaries.
34
+ *
35
+ * @default ""
36
+ */
37
+ readonly name?: string;
38
+ }
39
+ /** Reactive state and actions returned by {@link useField}. */
40
+ interface FieldControls<Value> {
41
+ /** Field name. */
42
+ readonly name: string;
43
+ /** Writable value (use with `v-model`). */
44
+ readonly value: Ref<Value>;
45
+ /** Current error messages. */
46
+ readonly errors: Readonly<ShallowRef<readonly string[]>>;
47
+ /** First error message. */
48
+ readonly error: ComputedRef<string | undefined>;
49
+ /** Whether no errors are recorded. */
50
+ readonly valid: ComputedRef<boolean>;
51
+ /** Whether the value differs from the initial value. */
52
+ readonly dirty: ComputedRef<boolean>;
53
+ /** Whether the field was blurred. */
54
+ readonly touched: Readonly<Ref<boolean>>;
55
+ /** Whether a validation is pending. */
56
+ readonly validating: Readonly<Ref<boolean>>;
57
+ /** Mark the field touched (wire to `blur`); validates when configured. */
58
+ readonly onBlur: () => void;
59
+ /**
60
+ * Run every rule, aborting an older validation still in flight.
61
+ *
62
+ * @returns Whether the value is valid (`false` also when superseded).
63
+ */
64
+ readonly validate: () => Promise<boolean>;
65
+ /**
66
+ * Replace errors (for example with server errors).
67
+ *
68
+ * @param errors New messages.
69
+ */
70
+ readonly setErrors: (errors: readonly string[]) => void;
71
+ /**
72
+ * Restore the initial value (or install a new one) and clear state.
73
+ *
74
+ * @param value New initial value.
75
+ */
76
+ readonly reset: (value?: Value) => void;
77
+ }
78
+ /**
79
+ * A standalone validated field, independent of any form.
80
+ *
81
+ * Rules may be plain (a)synchronous validators or Standard Schema v1
82
+ * validators (anything with a `~standard` property). A newer validation
83
+ * aborts older ones through their `signal`, and stale results are ignored.
84
+ * With `validateOn: "change"` validation runs after each value change,
85
+ * never during setup, so server-rendered markup matches the first client
86
+ * render. For multi-field state use `useForm`.
87
+ *
88
+ * Server rendering: pure state; nothing validates during setup. Pending
89
+ * validations are aborted when the owning scope stops.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const email = useField("", {
94
+ * name: "email",
95
+ * rules: [(value) => (value.includes("@") ? undefined : "Invalid email")],
96
+ * });
97
+ * ```
98
+ *
99
+ * @typeParam Value Field value, inferred from `initialValue`.
100
+ * @param initialValue Initial value, or a factory returning it.
101
+ * @param options Rules, trigger, and name.
102
+ * @default options {}
103
+ * @returns Field state and actions.
104
+ */
105
+ declare function useField<Value>(initialValue: Value | (() => Value), options?: UseFieldOptions<NoInfer<Value>>): FieldControls<Value>;
106
+ //#endregion
107
+ export { FieldControls, FieldRule, FieldRuleContext, FieldRuleResult, FieldRuleSource, FieldValidationTrigger, UseFieldOptions, useField };
@@ -0,0 +1,117 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { isStandardSchema, validateStandardSchema } from "./standard-schema.mjs";
3
+ import { computed, ref, shallowRef, toRaw, watch } from "vue";
4
+ //#region src/use-field.ts
5
+ function messagesOf(result) {
6
+ if (result === void 0 || result === null || result === "") return [];
7
+ return typeof result === "string" ? [result] : result.filter((message) => message !== "");
8
+ }
9
+ function sameValue(left, right) {
10
+ if (Object.is(left, right)) return true;
11
+ if (left instanceof Date && right instanceof Date) return left.getTime() === right.getTime();
12
+ if (typeof left !== "object" || typeof right !== "object" || left === null || right === null) return false;
13
+ if (Array.isArray(left) !== Array.isArray(right)) return false;
14
+ const leftKeys = Object.keys(left);
15
+ const rightKeys = Object.keys(right);
16
+ return leftKeys.length === rightKeys.length && leftKeys.every((key) => sameValue(Reflect.get(left, key), Reflect.get(right, key)));
17
+ }
18
+ /**
19
+ * A standalone validated field, independent of any form.
20
+ *
21
+ * Rules may be plain (a)synchronous validators or Standard Schema v1
22
+ * validators (anything with a `~standard` property). A newer validation
23
+ * aborts older ones through their `signal`, and stale results are ignored.
24
+ * With `validateOn: "change"` validation runs after each value change,
25
+ * never during setup, so server-rendered markup matches the first client
26
+ * render. For multi-field state use `useForm`.
27
+ *
28
+ * Server rendering: pure state; nothing validates during setup. Pending
29
+ * validations are aborted when the owning scope stops.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const email = useField("", {
34
+ * name: "email",
35
+ * rules: [(value) => (value.includes("@") ? undefined : "Invalid email")],
36
+ * });
37
+ * ```
38
+ *
39
+ * @typeParam Value Field value, inferred from `initialValue`.
40
+ * @param initialValue Initial value, or a factory returning it.
41
+ * @param options Rules, trigger, and name.
42
+ * @default options {}
43
+ * @returns Field state and actions.
44
+ */
45
+ function useField(initialValue, options = {}) {
46
+ const createInitial = () => initialValue instanceof Function ? initialValue() : structuredClone(toRaw(initialValue));
47
+ let initial = createInitial();
48
+ const value = ref(structuredClone(toRaw(initial)));
49
+ const errors = shallowRef([]);
50
+ const touched = ref(false);
51
+ const validating = ref(false);
52
+ const trigger = options.validateOn ?? "change";
53
+ const rules = options.rules === void 0 ? [] : Array.isArray(options.rules) ? options.rules : [options.rules];
54
+ let controller;
55
+ const runRule = async (rule, current, signal) => {
56
+ if (isStandardSchema(rule)) {
57
+ const result = await validateStandardSchema(rule, current);
58
+ return result.status === "valid" ? [] : result.issues.map((issue) => issue.message);
59
+ }
60
+ return messagesOf(await rule(current, { signal }));
61
+ };
62
+ const validate = async () => {
63
+ controller?.abort(new DOMException("A newer validation started.", "AbortError"));
64
+ const active = new AbortController();
65
+ controller = active;
66
+ validating.value = true;
67
+ try {
68
+ const current = value.value;
69
+ const results = await Promise.all(rules.map((rule) => runRule(rule, current, active.signal)));
70
+ if (active.signal.aborted) return false;
71
+ errors.value = results.flat();
72
+ return errors.value.length === 0;
73
+ } finally {
74
+ if (controller === active) {
75
+ controller = void 0;
76
+ validating.value = false;
77
+ }
78
+ }
79
+ };
80
+ let resetValue;
81
+ if (trigger === "change") watch(value, (current) => {
82
+ if (toRaw(current) === resetValue && sameValue(current, initial)) return;
83
+ validate();
84
+ }, { deep: true });
85
+ tryOnScopeDispose(() => controller?.abort());
86
+ return {
87
+ name: options.name ?? "",
88
+ value,
89
+ errors,
90
+ error: computed(() => errors.value[0]),
91
+ valid: computed(() => errors.value.length === 0),
92
+ dirty: computed(() => !sameValue(value.value, initial)),
93
+ touched,
94
+ validating,
95
+ onBlur: () => {
96
+ touched.value = true;
97
+ if (trigger === "blur") validate();
98
+ },
99
+ validate,
100
+ setErrors: (next) => {
101
+ errors.value = [...next];
102
+ },
103
+ reset: (next) => {
104
+ controller?.abort();
105
+ controller = void 0;
106
+ initial = next === void 0 ? createInitial() : structuredClone(toRaw(next));
107
+ const fresh = structuredClone(toRaw(initial));
108
+ resetValue = fresh;
109
+ value.value = fresh;
110
+ errors.value = [];
111
+ touched.value = false;
112
+ validating.value = false;
113
+ }
114
+ };
115
+ }
116
+ //#endregion
117
+ export { useField };
@@ -0,0 +1,139 @@
1
+ import { MaybeRefOrGetter, ShallowRef } from "vue";
2
+
3
+ //#region src/use-file-dialog.d.ts
4
+ /** Camera facing hint for capture-capable file inputs. */
5
+ type FileDialogCapture = "user" | "environment";
6
+ /** Minimal `<input type="file">` consumed by {@link useFileDialog}. */
7
+ interface FileInputLike extends EventTarget {
8
+ /** Input type; set to `"file"`. */
9
+ type: string;
10
+ /** Accepted MIME types / extensions. */
11
+ accept: string;
12
+ /** Allow selecting multiple files. */
13
+ multiple: boolean;
14
+ /** Selected files. */
15
+ readonly files: ArrayLike<File> | null;
16
+ /** Serialized value; cleared to reset the selection. */
17
+ value: string;
18
+ /** Open the native dialog. */
19
+ click(): void;
20
+ /** Set an attribute (`capture`, `webkitdirectory`). */
21
+ setAttribute(name: string, value: string): void;
22
+ /** Remove an attribute. */
23
+ removeAttribute(name: string): void;
24
+ }
25
+ /** Document capability used to create the hidden input. */
26
+ interface FileDialogHost {
27
+ /** Create an `<input>` element. */
28
+ createElement(tagName: "input"): FileInputLike;
29
+ }
30
+ /** Per-dialog settings accepted by {@link useFileDialog} and `open`. */
31
+ interface FileDialogSettings {
32
+ /** Accepted MIME types / extensions, for example `"image/*,.pdf"`. */
33
+ readonly accept?: string;
34
+ /** Allow selecting multiple files. */
35
+ readonly multiple?: boolean;
36
+ /** Capture from a camera on supporting devices. */
37
+ readonly capture?: FileDialogCapture;
38
+ /** Select a directory (`webkitdirectory`). */
39
+ readonly directory?: boolean;
40
+ /** Clear the current selection before the dialog opens. */
41
+ readonly reset?: boolean;
42
+ }
43
+ /** Options for {@link useFileDialog}. */
44
+ interface UseFileDialogOptions {
45
+ /**
46
+ * Accepted MIME types / extensions.
47
+ *
48
+ * @default "*"
49
+ */
50
+ readonly accept?: MaybeRefOrGetter<string>;
51
+ /**
52
+ * Allow selecting multiple files.
53
+ *
54
+ * @default true
55
+ */
56
+ readonly multiple?: MaybeRefOrGetter<boolean>;
57
+ /**
58
+ * Capture from a camera on supporting devices.
59
+ *
60
+ * @default undefined
61
+ */
62
+ readonly capture?: MaybeRefOrGetter<FileDialogCapture | undefined>;
63
+ /**
64
+ * Select a directory instead of files.
65
+ *
66
+ * @default false
67
+ */
68
+ readonly directory?: MaybeRefOrGetter<boolean>;
69
+ /**
70
+ * Clear the current selection whenever the dialog opens.
71
+ *
72
+ * @default false
73
+ */
74
+ readonly reset?: boolean;
75
+ /**
76
+ * Selection before the dialog was used.
77
+ *
78
+ * @default null
79
+ */
80
+ readonly initialFiles?: readonly File[] | null;
81
+ /**
82
+ * Document capability for alternate runtimes and tests.
83
+ *
84
+ * @default window.document when a browser window exists
85
+ */
86
+ readonly host?: MaybeRefOrGetter<FileDialogHost | null | undefined>;
87
+ }
88
+ /** Reactive state and actions returned by {@link useFileDialog}. */
89
+ interface FileDialogControls {
90
+ /** Current selection; `null` before any selection or after `reset`. */
91
+ readonly files: Readonly<ShallowRef<readonly File[] | null>>;
92
+ /**
93
+ * Open the native dialog. Browsers require a user gesture.
94
+ *
95
+ * @param overrides Settings overriding the options for this dialog.
96
+ * @returns Whether a dialog could be opened.
97
+ */
98
+ readonly open: (overrides?: FileDialogSettings) => boolean;
99
+ /** Clear the selection. */
100
+ readonly reset: () => void;
101
+ /**
102
+ * Observe selections.
103
+ *
104
+ * @param handler Called with the new selection.
105
+ * @returns Unsubscribe function.
106
+ */
107
+ readonly onChange: (handler: (files: readonly File[] | null) => void) => () => void;
108
+ /**
109
+ * Observe dialogs dismissed without a selection.
110
+ *
111
+ * @param handler Called on cancel.
112
+ * @returns Unsubscribe function.
113
+ */
114
+ readonly onCancel: (handler: () => void) => () => void;
115
+ }
116
+ /**
117
+ * Open the native file picker without rendering an input.
118
+ *
119
+ * A detached `<input type="file">` is created lazily on the first `open`
120
+ * (never during setup or server rendering), configured from reactive
121
+ * options plus per-call overrides, and observed for `change` and `cancel`.
122
+ * The selection is exposed as a readonly `File[]`. Listeners are removed
123
+ * when the owning reactive scope stops.
124
+ *
125
+ * Server rendering: `files` is `initialFiles` and `open` returns false.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * const { files, open, onChange } = useFileDialog({ accept: "image/*" });
130
+ * onChange((selection) => upload(selection));
131
+ * ```
132
+ *
133
+ * @param options Dialog settings, initial selection, and capability.
134
+ * @default options {}
135
+ * @returns Selection state and dialog actions.
136
+ */
137
+ declare function useFileDialog(options?: UseFileDialogOptions): FileDialogControls;
138
+ //#endregion
139
+ export { FileDialogCapture, FileDialogControls, FileDialogHost, FileDialogSettings, FileInputLike, UseFileDialogOptions, useFileDialog };