@vizejs/composable 0.426.3 → 0.428.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,247 @@
1
+ import { computed, ref, shallowRef, toRaw, watch } from "vue";
2
+ import type { ComputedRef, Ref, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+ import { isStandardSchema, validateStandardSchema } from "./standard-schema.ts";
6
+ import type { StandardSchemaV1 } from "./standard-schema.ts";
7
+
8
+ /** Result of a standalone field validator: messages, one message, or nothing. */
9
+ export type FieldRuleResult = string | readonly string[] | null | undefined | void;
10
+
11
+ /** Context passed to standalone field validators. */
12
+ export interface FieldRuleContext {
13
+ /** Aborted when a newer validation supersedes this one. */
14
+ readonly signal: AbortSignal;
15
+ }
16
+
17
+ /** Plain validator for a standalone field. */
18
+ export type FieldRule<Value> = (
19
+ value: Value,
20
+ context: FieldRuleContext,
21
+ ) => FieldRuleResult | Promise<FieldRuleResult>;
22
+
23
+ /** A plain validator or a Standard Schema v1 validator for the value. */
24
+ export type FieldRuleSource<Value> = FieldRule<Value> | StandardSchemaV1<Value, unknown>;
25
+
26
+ /** When a standalone field validates automatically. */
27
+ export type FieldValidationTrigger = "change" | "blur" | "manual";
28
+
29
+ /** Options for {@link useField}. */
30
+ export interface UseFieldOptions<Value> {
31
+ /**
32
+ * Validators run in order; their messages are concatenated.
33
+ *
34
+ * @default []
35
+ */
36
+ readonly rules?: FieldRuleSource<Value> | readonly FieldRuleSource<Value>[];
37
+
38
+ /**
39
+ * When validation runs automatically.
40
+ *
41
+ * @default "change"
42
+ */
43
+ readonly validateOn?: FieldValidationTrigger;
44
+
45
+ /**
46
+ * Field name exposed for `name` attributes and error summaries.
47
+ *
48
+ * @default ""
49
+ */
50
+ readonly name?: string;
51
+ }
52
+
53
+ /** Reactive state and actions returned by {@link useField}. */
54
+ export interface FieldControls<Value> {
55
+ /** Field name. */
56
+ readonly name: string;
57
+
58
+ /** Writable value (use with `v-model`). */
59
+ readonly value: Ref<Value>;
60
+
61
+ /** Current error messages. */
62
+ readonly errors: Readonly<ShallowRef<readonly string[]>>;
63
+
64
+ /** First error message. */
65
+ readonly error: ComputedRef<string | undefined>;
66
+
67
+ /** Whether no errors are recorded. */
68
+ readonly valid: ComputedRef<boolean>;
69
+
70
+ /** Whether the value differs from the initial value. */
71
+ readonly dirty: ComputedRef<boolean>;
72
+
73
+ /** Whether the field was blurred. */
74
+ readonly touched: Readonly<Ref<boolean>>;
75
+
76
+ /** Whether a validation is pending. */
77
+ readonly validating: Readonly<Ref<boolean>>;
78
+
79
+ /** Mark the field touched (wire to `blur`); validates when configured. */
80
+ readonly onBlur: () => void;
81
+
82
+ /**
83
+ * Run every rule, aborting an older validation still in flight.
84
+ *
85
+ * @returns Whether the value is valid (`false` also when superseded).
86
+ */
87
+ readonly validate: () => Promise<boolean>;
88
+
89
+ /**
90
+ * Replace errors (for example with server errors).
91
+ *
92
+ * @param errors New messages.
93
+ */
94
+ readonly setErrors: (errors: readonly string[]) => void;
95
+
96
+ /**
97
+ * Restore the initial value (or install a new one) and clear state.
98
+ *
99
+ * @param value New initial value.
100
+ */
101
+ readonly reset: (value?: Value) => void;
102
+ }
103
+
104
+ function messagesOf(result: FieldRuleResult): readonly string[] {
105
+ if (result === undefined || result === null || result === "") return [];
106
+ return typeof result === "string" ? [result] : result.filter((message) => message !== "");
107
+ }
108
+
109
+ function sameValue(left: unknown, right: unknown): boolean {
110
+ if (Object.is(left, right)) return true;
111
+ if (left instanceof Date && right instanceof Date) return left.getTime() === right.getTime();
112
+ if (typeof left !== "object" || typeof right !== "object" || left === null || right === null) {
113
+ return false;
114
+ }
115
+ if (Array.isArray(left) !== Array.isArray(right)) return false;
116
+ const leftKeys = Object.keys(left);
117
+ const rightKeys = Object.keys(right);
118
+ return (
119
+ leftKeys.length === rightKeys.length &&
120
+ leftKeys.every((key) => sameValue(Reflect.get(left, key), Reflect.get(right, key)))
121
+ );
122
+ }
123
+
124
+ /**
125
+ * A standalone validated field, independent of any form.
126
+ *
127
+ * Rules may be plain (a)synchronous validators or Standard Schema v1
128
+ * validators (anything with a `~standard` property). A newer validation
129
+ * aborts older ones through their `signal`, and stale results are ignored.
130
+ * With `validateOn: "change"` validation runs after each value change,
131
+ * never during setup, so server-rendered markup matches the first client
132
+ * render. For multi-field state use `useForm`.
133
+ *
134
+ * Server rendering: pure state; nothing validates during setup. Pending
135
+ * validations are aborted when the owning scope stops.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * const email = useField("", {
140
+ * name: "email",
141
+ * rules: [(value) => (value.includes("@") ? undefined : "Invalid email")],
142
+ * });
143
+ * ```
144
+ *
145
+ * @typeParam Value Field value, inferred from `initialValue`.
146
+ * @param initialValue Initial value, or a factory returning it.
147
+ * @param options Rules, trigger, and name.
148
+ * @default options {}
149
+ * @returns Field state and actions.
150
+ */
151
+ export function useField<Value>(
152
+ initialValue: Value | (() => Value),
153
+ options: UseFieldOptions<NoInfer<Value>> = {},
154
+ ): FieldControls<Value> {
155
+ const createInitial = (): Value =>
156
+ initialValue instanceof Function ? initialValue() : structuredClone(toRaw(initialValue));
157
+ let initial = createInitial();
158
+ // Field values are plain data, for which `UnwrapRef<Value>` equals `Value`.
159
+ const value = ref(structuredClone(toRaw(initial))) as Ref<Value>;
160
+ const errors = shallowRef<readonly string[]>([]);
161
+ const touched = ref(false);
162
+ const validating = ref(false);
163
+ const trigger = options.validateOn ?? "change";
164
+ const rules: readonly FieldRuleSource<Value>[] =
165
+ options.rules === undefined
166
+ ? []
167
+ : Array.isArray(options.rules)
168
+ ? options.rules
169
+ : [options.rules];
170
+ let controller: AbortController | undefined;
171
+
172
+ const runRule = async (
173
+ rule: FieldRuleSource<Value>,
174
+ current: Value,
175
+ signal: AbortSignal,
176
+ ): Promise<readonly string[]> => {
177
+ if (isStandardSchema(rule)) {
178
+ const result = await validateStandardSchema(rule, current);
179
+ return result.status === "valid" ? [] : result.issues.map((issue) => issue.message);
180
+ }
181
+ return messagesOf(await rule(current, { signal }));
182
+ };
183
+
184
+ const validate = async (): Promise<boolean> => {
185
+ controller?.abort(new DOMException("A newer validation started.", "AbortError"));
186
+ const active = new AbortController();
187
+ controller = active;
188
+ validating.value = true;
189
+ try {
190
+ const current = value.value;
191
+ const results = await Promise.all(rules.map((rule) => runRule(rule, current, active.signal)));
192
+ if (active.signal.aborted) return false;
193
+ errors.value = results.flat();
194
+ return errors.value.length === 0;
195
+ } finally {
196
+ if (controller === active) {
197
+ controller = undefined;
198
+ validating.value = false;
199
+ }
200
+ }
201
+ };
202
+
203
+ // The value installed by `reset`; its own change must not trigger validation.
204
+ let resetValue: unknown;
205
+ if (trigger === "change") {
206
+ watch(
207
+ value,
208
+ (current) => {
209
+ if (toRaw(current) === resetValue && sameValue(current, initial)) return;
210
+ void validate();
211
+ },
212
+ { deep: true },
213
+ );
214
+ }
215
+
216
+ tryOnScopeDispose(() => controller?.abort());
217
+
218
+ return {
219
+ name: options.name ?? "",
220
+ value,
221
+ errors,
222
+ error: computed(() => errors.value[0]),
223
+ valid: computed(() => errors.value.length === 0),
224
+ dirty: computed(() => !sameValue(value.value, initial)),
225
+ touched,
226
+ validating,
227
+ onBlur: () => {
228
+ touched.value = true;
229
+ if (trigger === "blur") void validate();
230
+ },
231
+ validate,
232
+ setErrors: (next) => {
233
+ errors.value = [...next];
234
+ },
235
+ reset: (next) => {
236
+ controller?.abort();
237
+ controller = undefined;
238
+ initial = next === undefined ? createInitial() : structuredClone(toRaw(next));
239
+ const fresh = structuredClone(toRaw(initial));
240
+ resetValue = fresh;
241
+ value.value = fresh;
242
+ errors.value = [];
243
+ touched.value = false;
244
+ validating.value = false;
245
+ },
246
+ };
247
+ }
@@ -0,0 +1,257 @@
1
+ import { shallowRef, toValue } from "vue";
2
+ import type { MaybeRefOrGetter, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** Camera facing hint for capture-capable file inputs. */
7
+ export type FileDialogCapture = "user" | "environment";
8
+
9
+ /** Minimal `<input type="file">` consumed by {@link useFileDialog}. */
10
+ export interface FileInputLike extends EventTarget {
11
+ /** Input type; set to `"file"`. */
12
+ type: string;
13
+
14
+ /** Accepted MIME types / extensions. */
15
+ accept: string;
16
+
17
+ /** Allow selecting multiple files. */
18
+ multiple: boolean;
19
+
20
+ /** Selected files. */
21
+ readonly files: ArrayLike<File> | null;
22
+
23
+ /** Serialized value; cleared to reset the selection. */
24
+ value: string;
25
+
26
+ /** Open the native dialog. */
27
+ click(): void;
28
+
29
+ /** Set an attribute (`capture`, `webkitdirectory`). */
30
+ setAttribute(name: string, value: string): void;
31
+
32
+ /** Remove an attribute. */
33
+ removeAttribute(name: string): void;
34
+ }
35
+
36
+ /** Document capability used to create the hidden input. */
37
+ export interface FileDialogHost {
38
+ /** Create an `<input>` element. */
39
+ createElement(tagName: "input"): FileInputLike;
40
+ }
41
+
42
+ /** Per-dialog settings accepted by {@link useFileDialog} and `open`. */
43
+ export interface FileDialogSettings {
44
+ /** Accepted MIME types / extensions, for example `"image/*,.pdf"`. */
45
+ readonly accept?: string;
46
+
47
+ /** Allow selecting multiple files. */
48
+ readonly multiple?: boolean;
49
+
50
+ /** Capture from a camera on supporting devices. */
51
+ readonly capture?: FileDialogCapture;
52
+
53
+ /** Select a directory (`webkitdirectory`). */
54
+ readonly directory?: boolean;
55
+
56
+ /** Clear the current selection before the dialog opens. */
57
+ readonly reset?: boolean;
58
+ }
59
+
60
+ /** Options for {@link useFileDialog}. */
61
+ export interface UseFileDialogOptions {
62
+ /**
63
+ * Accepted MIME types / extensions.
64
+ *
65
+ * @default "*"
66
+ */
67
+ readonly accept?: MaybeRefOrGetter<string>;
68
+
69
+ /**
70
+ * Allow selecting multiple files.
71
+ *
72
+ * @default true
73
+ */
74
+ readonly multiple?: MaybeRefOrGetter<boolean>;
75
+
76
+ /**
77
+ * Capture from a camera on supporting devices.
78
+ *
79
+ * @default undefined
80
+ */
81
+ readonly capture?: MaybeRefOrGetter<FileDialogCapture | undefined>;
82
+
83
+ /**
84
+ * Select a directory instead of files.
85
+ *
86
+ * @default false
87
+ */
88
+ readonly directory?: MaybeRefOrGetter<boolean>;
89
+
90
+ /**
91
+ * Clear the current selection whenever the dialog opens.
92
+ *
93
+ * @default false
94
+ */
95
+ readonly reset?: boolean;
96
+
97
+ /**
98
+ * Selection before the dialog was used.
99
+ *
100
+ * @default null
101
+ */
102
+ readonly initialFiles?: readonly File[] | null;
103
+
104
+ /**
105
+ * Document capability for alternate runtimes and tests.
106
+ *
107
+ * @default window.document when a browser window exists
108
+ */
109
+ readonly host?: MaybeRefOrGetter<FileDialogHost | null | undefined>;
110
+ }
111
+
112
+ /** Reactive state and actions returned by {@link useFileDialog}. */
113
+ export interface FileDialogControls {
114
+ /** Current selection; `null` before any selection or after `reset`. */
115
+ readonly files: Readonly<ShallowRef<readonly File[] | null>>;
116
+
117
+ /**
118
+ * Open the native dialog. Browsers require a user gesture.
119
+ *
120
+ * @param overrides Settings overriding the options for this dialog.
121
+ * @returns Whether a dialog could be opened.
122
+ */
123
+ readonly open: (overrides?: FileDialogSettings) => boolean;
124
+
125
+ /** Clear the selection. */
126
+ readonly reset: () => void;
127
+
128
+ /**
129
+ * Observe selections.
130
+ *
131
+ * @param handler Called with the new selection.
132
+ * @returns Unsubscribe function.
133
+ */
134
+ readonly onChange: (handler: (files: readonly File[] | null) => void) => () => void;
135
+
136
+ /**
137
+ * Observe dialogs dismissed without a selection.
138
+ *
139
+ * @param handler Called on cancel.
140
+ * @returns Unsubscribe function.
141
+ */
142
+ readonly onCancel: (handler: () => void) => () => void;
143
+ }
144
+
145
+ function browserFileDialogHost(): FileDialogHost | undefined {
146
+ return typeof window === "undefined" ? undefined : window.document;
147
+ }
148
+
149
+ /**
150
+ * Open the native file picker without rendering an input.
151
+ *
152
+ * A detached `<input type="file">` is created lazily on the first `open`
153
+ * (never during setup or server rendering), configured from reactive
154
+ * options plus per-call overrides, and observed for `change` and `cancel`.
155
+ * The selection is exposed as a readonly `File[]`. Listeners are removed
156
+ * when the owning reactive scope stops.
157
+ *
158
+ * Server rendering: `files` is `initialFiles` and `open` returns false.
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * const { files, open, onChange } = useFileDialog({ accept: "image/*" });
163
+ * onChange((selection) => upload(selection));
164
+ * ```
165
+ *
166
+ * @param options Dialog settings, initial selection, and capability.
167
+ * @default options {}
168
+ * @returns Selection state and dialog actions.
169
+ */
170
+ export function useFileDialog(options: UseFileDialogOptions = {}): FileDialogControls {
171
+ const files = shallowRef<readonly File[] | null>(options.initialFiles ?? null);
172
+ const changeHandlers = new Set<(files: readonly File[] | null) => void>();
173
+ const cancelHandlers = new Set<() => void>();
174
+ let input: FileInputLike | undefined;
175
+ let inputHost: FileDialogHost | undefined;
176
+
177
+ const resolveHost = (): FileDialogHost | undefined =>
178
+ options.host === undefined ? browserFileDialogHost() : (toValue(options.host) ?? undefined);
179
+
180
+ const onInputChange = (): void => {
181
+ const selected = input?.files ? Array.from(input.files) : [];
182
+ files.value = selected.length > 0 ? selected : null;
183
+ for (const handler of changeHandlers) handler(files.value);
184
+ };
185
+ const onInputCancel = (): void => {
186
+ for (const handler of cancelHandlers) handler();
187
+ };
188
+
189
+ const detach = (): void => {
190
+ input?.removeEventListener("change", onInputChange);
191
+ input?.removeEventListener("cancel", onInputCancel);
192
+ input = undefined;
193
+ inputHost = undefined;
194
+ };
195
+
196
+ const ensureInput = (host: FileDialogHost): FileInputLike => {
197
+ if (input && inputHost === host) return input;
198
+ detach();
199
+ const created = host.createElement("input");
200
+ created.type = "file";
201
+ created.addEventListener("change", onInputChange);
202
+ created.addEventListener("cancel", onInputCancel);
203
+ input = created;
204
+ inputHost = host;
205
+ return created;
206
+ };
207
+
208
+ const reset = (): void => {
209
+ files.value = null;
210
+ if (input) input.value = "";
211
+ for (const handler of changeHandlers) handler(null);
212
+ };
213
+
214
+ const open = (overrides: FileDialogSettings = {}): boolean => {
215
+ const host = resolveHost();
216
+ if (!host) return false;
217
+ const element = ensureInput(host);
218
+ element.accept = overrides.accept ?? toValue(options.accept) ?? "*";
219
+ element.multiple = overrides.multiple ?? toValue(options.multiple) ?? true;
220
+ const capture = overrides.capture ?? toValue(options.capture);
221
+ if (capture === undefined) element.removeAttribute("capture");
222
+ else element.setAttribute("capture", capture);
223
+ if (overrides.directory ?? toValue(options.directory) ?? false) {
224
+ element.setAttribute("webkitdirectory", "");
225
+ } else {
226
+ element.removeAttribute("webkitdirectory");
227
+ }
228
+ if (overrides.reset ?? options.reset ?? false) reset();
229
+ // Clearing the value lets selecting the same file again fire `change`.
230
+ element.value = "";
231
+ element.click();
232
+ return true;
233
+ };
234
+
235
+ const subscribe =
236
+ <Handler>(handlers: Set<Handler>) =>
237
+ (handler: Handler): (() => void) => {
238
+ handlers.add(handler);
239
+ return () => {
240
+ handlers.delete(handler);
241
+ };
242
+ };
243
+
244
+ tryOnScopeDispose(() => {
245
+ detach();
246
+ changeHandlers.clear();
247
+ cancelHandlers.clear();
248
+ });
249
+
250
+ return {
251
+ files,
252
+ open,
253
+ reset,
254
+ onChange: subscribe(changeHandlers),
255
+ onCancel: subscribe(cancelHandlers),
256
+ };
257
+ }