@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,122 @@
1
+ import { computed, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter } from "vue";
3
+
4
+ import { useLocale } from "./locale.ts";
5
+
6
+ /** Kinds of codes `Intl.DisplayNames` can name. */
7
+ export type DisplayNamesKind =
8
+ | "language"
9
+ | "region"
10
+ | "script"
11
+ | "currency"
12
+ | "calendar"
13
+ | "dateTimeField";
14
+
15
+ /** Options for {@link useDisplayNames}. */
16
+ export interface UseDisplayNamesOptions {
17
+ /** Kind of code to name. */
18
+ readonly type: DisplayNamesKind;
19
+
20
+ /**
21
+ * Locale the names are written in. Pass it explicitly for
22
+ * hydration-stable server rendering.
23
+ *
24
+ * @default the browser language, otherwise "en"
25
+ */
26
+ readonly locale?: string | Intl.Locale;
27
+
28
+ /**
29
+ * Name length.
30
+ *
31
+ * @default "long"
32
+ */
33
+ readonly style?: "narrow" | "short" | "long";
34
+
35
+ /**
36
+ * What to return for a well-formed code without a name: the code itself
37
+ * or `undefined`.
38
+ *
39
+ * @default "code"
40
+ */
41
+ readonly fallback?: "code" | "none";
42
+
43
+ /**
44
+ * Language names: `"dialect"` names `"en-GB"` "British English",
45
+ * `"standard"` names it "English (United Kingdom)".
46
+ *
47
+ * @default "dialect"
48
+ */
49
+ readonly languageDisplay?: "dialect" | "standard";
50
+ }
51
+
52
+ /** Reactive display names returned by {@link useDisplayNames}. */
53
+ export interface DisplayNamesControls {
54
+ /** Canonical locale in use. */
55
+ readonly locale: ComputedRef<string>;
56
+
57
+ /** Display names instance for the current locale and options. */
58
+ readonly displayNames: ComputedRef<Intl.DisplayNames>;
59
+
60
+ /** Name of the reactive code; `undefined` for malformed or unnamed codes. */
61
+ readonly name: ComputedRef<string | undefined>;
62
+
63
+ /**
64
+ * Name any code. Malformed codes return `undefined` instead of throwing.
65
+ *
66
+ * @param code Language tag, region, script, currency, calendar, or field code.
67
+ * @returns The localized name.
68
+ */
69
+ readonly of: (code: string) => string | undefined;
70
+ }
71
+
72
+ function browserLanguage(): string | undefined {
73
+ return typeof window === "undefined" ? undefined : window.navigator.language;
74
+ }
75
+
76
+ /**
77
+ * Localized names of languages, regions, scripts, currencies, calendars, and
78
+ * date-time fields (`Intl.DisplayNames`): `"JP"` → "Japan", `"ja"` → "日本語"
79
+ * in Japanese, `"EUR"` → "Euro".
80
+ *
81
+ * Malformed codes yield `undefined` rather than the platform `RangeError`,
82
+ * so user-entered codes never crash rendering; invalid *options* still
83
+ * throw on first read. Derived state only: no listeners or timers, and
84
+ * deterministic during server rendering when the locale is explicit.
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * const { name } = useDisplayNames(regionCode, { type: "region", locale: "en" });
89
+ * ```
90
+ *
91
+ * @param code Reactive code to name.
92
+ * @param options Reactive kind, locale, and display options.
93
+ * @returns Reactive name and a naming helper.
94
+ */
95
+ export function useDisplayNames(
96
+ code: MaybeRefOrGetter<string | null | undefined>,
97
+ options: MaybeRefOrGetter<UseDisplayNamesOptions>,
98
+ ): DisplayNamesControls {
99
+ const localeControls = useLocale(() => toValue(options).locale, { detect: browserLanguage });
100
+ const displayNames = computed(() => {
101
+ const { locale: _locale, ...displayOptions } = toValue(options);
102
+ return new Intl.DisplayNames(localeControls.locale.value, displayOptions);
103
+ });
104
+ const of = (value: string): string | undefined => {
105
+ const names = displayNames.value;
106
+ try {
107
+ return names.of(value);
108
+ } catch (error) {
109
+ if (error instanceof RangeError) return undefined;
110
+ throw error;
111
+ }
112
+ };
113
+ return {
114
+ locale: localeControls.locale,
115
+ displayNames,
116
+ name: computed(() => {
117
+ const current = toValue(code);
118
+ return current === null || current === undefined || current === "" ? undefined : of(current);
119
+ }),
120
+ of,
121
+ };
122
+ }
@@ -0,0 +1,196 @@
1
+ import { computed, hasInjectionContext, isRef, ref, toValue, watch } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ import { useMounted } from "./use-mounted.ts";
5
+
6
+ import { tryOnScopeDispose } from "./scope.ts";
7
+
8
+ /** Document subset used by {@link useDocumentTitle}. */
9
+ export interface DocumentTitleHost {
10
+ /** Current document title (readable and writable). */
11
+ title: string;
12
+
13
+ /**
14
+ * Observe external title changes (for example by other libraries).
15
+ * Returns a function that stops observing.
16
+ */
17
+ readonly observeTitle?: (callback: () => void) => () => void;
18
+ }
19
+
20
+ /** Title template: a string containing `%s`, or a formatting function. */
21
+ export type DocumentTitleTemplate = string | ((title: string) => string);
22
+
23
+ /** Title applied when the owning scope stops. */
24
+ export type DocumentTitleRestore =
25
+ | false
26
+ | "previous"
27
+ | ((originalTitle: string, currentTitle: string) => string);
28
+
29
+ /** Options for {@link useDocumentTitle}. */
30
+ export interface UseDocumentTitleOptions {
31
+ /**
32
+ * Template applied to every title written to the document.
33
+ *
34
+ * @default "%s"
35
+ */
36
+ readonly template?: DocumentTitleTemplate;
37
+
38
+ /**
39
+ * Title restored when the owning reactive scope stops: `false` leaves the
40
+ * current title, `"previous"` restores the title seen at creation, and a
41
+ * function computes it.
42
+ *
43
+ * @default false
44
+ */
45
+ readonly restoreOnDispose?: DocumentTitleRestore;
46
+
47
+ /**
48
+ * Follow title changes made outside this composable.
49
+ *
50
+ * @default false
51
+ */
52
+ readonly observe?: boolean;
53
+
54
+ /**
55
+ * Document capability for alternate runtimes and tests.
56
+ *
57
+ * @default window.document (with a MutationObserver on `<title>`)
58
+ */
59
+ readonly host?: MaybeRefOrGetter<DocumentTitleHost | null | undefined>;
60
+ }
61
+
62
+ /** Reactive state returned by {@link useDocumentTitle}. */
63
+ export interface DocumentTitleControls {
64
+ /**
65
+ * Title before templating. Writable; `null`/`undefined` leaves the
66
+ * document title untouched. When a getter was passed, the next getter
67
+ * change overwrites manual assignments.
68
+ */
69
+ readonly title: Ref<string | null | undefined>;
70
+
71
+ /**
72
+ * Whether a document capability is attached. Inside a component it stays
73
+ * `false` until mounted, so hydration matches the server render.
74
+ */
75
+ readonly supported: ComputedRef<boolean>;
76
+ }
77
+
78
+ function browserTitleHost(): DocumentTitleHost | undefined {
79
+ if (typeof window === "undefined") return undefined;
80
+ const { document, MutationObserver } = window;
81
+ return {
82
+ get title() {
83
+ return document.title;
84
+ },
85
+ set title(value: string) {
86
+ document.title = value;
87
+ },
88
+ observeTitle: (callback) => {
89
+ const observer = new MutationObserver(callback);
90
+ const element = document.head.querySelector("title");
91
+ if (element) {
92
+ observer.observe(element, { childList: true, characterData: true, subtree: true });
93
+ }
94
+ return () => observer.disconnect();
95
+ },
96
+ };
97
+ }
98
+
99
+ function formatTitle(template: DocumentTitleTemplate, title: string): string {
100
+ return typeof template === "function" ? template(title) : template.replaceAll("%s", title);
101
+ }
102
+
103
+ /**
104
+ * Bind the document title to reactive state.
105
+ *
106
+ * Accepts a writable ref (used as-is), a getter (followed), a plain
107
+ * string, or nothing (an owned ref seeded from the current title). Every
108
+ * non-nullish title is passed through `template` before it is written.
109
+ * With `observe`, external title changes flow back into `title`.
110
+ *
111
+ * Server rendering: the document is never touched and `title` keeps the
112
+ * value it was given (or `undefined`). Head management for server-rendered
113
+ * markup (`<title>` in the HTML) is the job of the application's head
114
+ * manager; this composable only updates the live document on the client.
115
+ * Watchers and the observer are released with the owning reactive scope,
116
+ * which also applies `restoreOnDispose`.
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const { title } = useDocumentTitle(() => route.meta.title, { template: "%s | Vize" });
121
+ * ```
122
+ *
123
+ * @param title Reactive title source.
124
+ * @param options Template, restore policy, observation, and capability.
125
+ * @default options {}
126
+ * @returns The title ref and support flag.
127
+ */
128
+ export function useDocumentTitle(
129
+ title?: MaybeRefOrGetter<string | null | undefined>,
130
+ options: UseDocumentTitleOptions = {},
131
+ ): DocumentTitleControls {
132
+ const template = options.template ?? "%s";
133
+ const resolveHost = (): DocumentTitleHost | undefined =>
134
+ options.host === undefined ? browserTitleHost() : (toValue(options.host) ?? undefined);
135
+ const initialHost = resolveHost();
136
+ const originalTitle = initialHost?.title ?? "";
137
+ // Inside a component the current document title is adopted only after
138
+ // mounting, so a hydrating client first renders what the server did.
139
+ const mounted = hasInjectionContext() ? useMounted() : undefined;
140
+ const adoptTitle = title === undefined && mounted !== undefined;
141
+ const state: Ref<string | null | undefined> = isRef(title)
142
+ ? title
143
+ : ref(title === undefined && !adoptTitle ? initialHost?.title : toValue(title));
144
+ if (adoptTitle) {
145
+ watch(mounted, (isMounted) => {
146
+ if (isMounted && state.value === undefined) state.value = resolveHost()?.title;
147
+ });
148
+ }
149
+ let lastWritten: string | undefined;
150
+
151
+ if (typeof title === "function") {
152
+ watch(title, (next) => {
153
+ state.value = next;
154
+ });
155
+ }
156
+
157
+ watch(
158
+ [state, resolveHost],
159
+ ([next, host]) => {
160
+ if (!host || next === null || next === undefined) return;
161
+ const formatted = formatTitle(template, next);
162
+ lastWritten = formatted;
163
+ if (host.title !== formatted) host.title = formatted;
164
+ },
165
+ { immediate: true, flush: "sync" },
166
+ );
167
+
168
+ if (options.observe ?? false) {
169
+ watch(
170
+ resolveHost,
171
+ (host, _previous, onCleanup) => {
172
+ if (!host?.observeTitle) return;
173
+ onCleanup(
174
+ host.observeTitle(() => {
175
+ if (host.title !== lastWritten) state.value = host.title;
176
+ }),
177
+ );
178
+ },
179
+ { immediate: true, flush: "sync" },
180
+ );
181
+ }
182
+
183
+ const restore = options.restoreOnDispose ?? false;
184
+ if (restore !== false) {
185
+ tryOnScopeDispose(() => {
186
+ const host = resolveHost();
187
+ if (!host) return;
188
+ host.title = restore === "previous" ? originalTitle : restore(originalTitle, host.title);
189
+ });
190
+ }
191
+
192
+ return {
193
+ title: state,
194
+ supported: computed(() => (mounted?.value ?? true) && resolveHost() !== undefined),
195
+ };
196
+ }
@@ -0,0 +1,287 @@
1
+ import { readonly, ref, shallowRef, toValue, unref, watch } from "vue";
2
+ import type { MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** One entry of `DataTransfer.items`. */
7
+ export interface DataTransferItemLike {
8
+ /** `"file"` or `"string"`. */
9
+ readonly kind: string;
10
+
11
+ /** MIME type of the item. */
12
+ readonly type: string;
13
+ }
14
+
15
+ /** Minimal `DataTransfer` consumed by {@link useDropZone}. */
16
+ export interface DataTransferLike {
17
+ /** Items being dragged; types are readable during the drag. */
18
+ readonly items?: ArrayLike<DataTransferItemLike>;
19
+
20
+ /** Dropped files; populated on `drop`. */
21
+ readonly files: ArrayLike<File>;
22
+
23
+ /** Feedback shown to the user (`"copy"`, `"none"`, …). */
24
+ dropEffect: string;
25
+ }
26
+
27
+ /** File name and MIME type used for acceptance checks. */
28
+ export interface DropZoneFileInfo {
29
+ /** File name including extension. Empty while dragging. */
30
+ readonly name: string;
31
+
32
+ /** MIME type, possibly empty for unknown types. */
33
+ readonly type: string;
34
+ }
35
+
36
+ /**
37
+ * Accepted files: `accept`-attribute style patterns (`"image/*"`,
38
+ * `"application/pdf"`, `".png"`), or a predicate over the dragged MIME types.
39
+ */
40
+ export type DropZoneAccept = readonly string[] | ((types: readonly string[]) => boolean);
41
+
42
+ /** Options for {@link useDropZone}. */
43
+ export interface UseDropZoneOptions {
44
+ /**
45
+ * Accepted files. Extension patterns can only be verified on drop
46
+ * because browsers hide file names while dragging. A ref rather than a
47
+ * getter, because a predicate is itself a function.
48
+ *
49
+ * @default every file
50
+ */
51
+ readonly accept?: MaybeRef<DropZoneAccept | undefined>;
52
+
53
+ /**
54
+ * Accept more than one file per drop.
55
+ *
56
+ * @default true
57
+ */
58
+ readonly multiple?: MaybeRefOrGetter<boolean>;
59
+
60
+ /**
61
+ * Call `preventDefault` even for rejected drags, so the browser never
62
+ * opens a rejected file dropped onto the zone.
63
+ *
64
+ * @default false
65
+ */
66
+ readonly preventDefaultForUnhandled?: boolean;
67
+
68
+ /**
69
+ * Called with the accepted files (or `null` when none were accepted).
70
+ *
71
+ * @default undefined
72
+ */
73
+ readonly onDrop?: (files: readonly File[] | null, event: Event) => void;
74
+
75
+ /**
76
+ * Called when a drag enters the zone.
77
+ *
78
+ * @default undefined
79
+ */
80
+ readonly onEnter?: (event: Event) => void;
81
+
82
+ /**
83
+ * Called when a drag leaves the zone (including its children).
84
+ *
85
+ * @default undefined
86
+ */
87
+ readonly onLeave?: (event: Event) => void;
88
+
89
+ /**
90
+ * Called for every `dragover` inside the zone.
91
+ *
92
+ * @default undefined
93
+ */
94
+ readonly onOver?: (event: Event) => void;
95
+ }
96
+
97
+ /** Reactive state returned by {@link useDropZone}. */
98
+ export interface DropZoneControls {
99
+ /** Whether a drag is currently over the zone (children included). */
100
+ readonly isOverDropZone: Readonly<Ref<boolean>>;
101
+
102
+ /** Whether the current drag is acceptable. */
103
+ readonly accepted: Readonly<Ref<boolean>>;
104
+
105
+ /** Files accepted by the most recent drop. */
106
+ readonly files: Readonly<ShallowRef<readonly File[] | null>>;
107
+ }
108
+
109
+ function matchesPattern(pattern: string, file: DropZoneFileInfo): boolean {
110
+ const normalized = pattern.trim().toLowerCase();
111
+ if (normalized === "" || normalized === "*" || normalized === "*/*") return true;
112
+ if (normalized.startsWith(".")) {
113
+ // While dragging the name is unknown: treat extensions as provisionally
114
+ // acceptable and verify them on drop.
115
+ return file.name === "" || file.name.toLowerCase().endsWith(normalized);
116
+ }
117
+ const type = file.type.toLowerCase();
118
+ if (normalized.endsWith("/*")) return type.startsWith(normalized.slice(0, -1));
119
+ return type === normalized;
120
+ }
121
+
122
+ /**
123
+ * Test a file against `accept`-attribute style patterns.
124
+ *
125
+ * Supports exact MIME types, wildcard subtypes (`"image/*"`), extensions
126
+ * (`".png"`, case-insensitive), and `"*"`. An empty pattern list accepts
127
+ * everything. An empty `name` (the file is still being dragged) makes
128
+ * extension patterns match provisionally.
129
+ *
130
+ * @param accept Patterns to test.
131
+ * @param file File name and MIME type.
132
+ * @returns Whether any pattern matches.
133
+ */
134
+ export function matchesAccept(accept: readonly string[], file: DropZoneFileInfo): boolean {
135
+ return accept.length === 0 || accept.some((pattern) => matchesPattern(pattern, file));
136
+ }
137
+
138
+ function dataTransferOf(event: Event): DataTransferLike | undefined {
139
+ if (!("dataTransfer" in event)) return undefined;
140
+ const transfer: unknown = event.dataTransfer;
141
+ if (typeof transfer !== "object" || transfer === null || !("files" in transfer)) return undefined;
142
+ return isDataTransfer(transfer) ? transfer : undefined;
143
+ }
144
+
145
+ function isDataTransfer(candidate: object): candidate is DataTransferLike {
146
+ return "files" in candidate && "dropEffect" in candidate;
147
+ }
148
+
149
+ function draggedTypes(transfer: DataTransferLike): readonly string[] {
150
+ const types: string[] = [];
151
+ const items = transfer.items;
152
+ if (!items) return types;
153
+ for (let index = 0; index < items.length; index += 1) {
154
+ const item = items[index];
155
+ if (item?.kind === "file") types.push(item.type);
156
+ }
157
+ return types;
158
+ }
159
+
160
+ /**
161
+ * Headless drop-zone logic for any element.
162
+ *
163
+ * Tracks whether a drag is over the target (a nesting counter keeps
164
+ * `dragleave` from child elements from flickering the state), decides
165
+ * acceptance from the dragged MIME types while dragging, and filters the
166
+ * dropped files by `accept` (including extension patterns) and `multiple`.
167
+ * Rejected drags show the `"none"` drop effect. Rendering is entirely up to
168
+ * the caller. Listeners follow the reactive target and are removed when the
169
+ * owning reactive scope stops.
170
+ *
171
+ * Server rendering: no listener is attached; all state is empty/false.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * const zone = useTemplateRef<HTMLElement>("zone");
176
+ * const { isOverDropZone, files } = useDropZone(zone, { accept: ["image/*"] });
177
+ * ```
178
+ *
179
+ * @param target Reactive drop target.
180
+ * @param options Acceptance rules and lifecycle callbacks.
181
+ * @default options {}
182
+ * @returns Drag and drop state.
183
+ */
184
+ export function useDropZone(
185
+ target: MaybeRefOrGetter<EventTarget | null | undefined>,
186
+ options: UseDropZoneOptions = {},
187
+ ): DropZoneControls {
188
+ const isOverDropZone = ref(false);
189
+ const accepted = ref(false);
190
+ const files = shallowRef<readonly File[] | null>(null);
191
+ let depth = 0;
192
+
193
+ const acceptsTypes = (types: readonly string[]): boolean => {
194
+ const accept = unref(options.accept);
195
+ if (types.length === 0) return false;
196
+ if (!(toValue(options.multiple) ?? true) && types.length > 1) return false;
197
+ if (accept === undefined) return true;
198
+ if (typeof accept === "function") return accept(types);
199
+ return types.every((type) => matchesAccept(accept, { name: "", type }));
200
+ };
201
+
202
+ const acceptedFiles = (transfer: DataTransferLike): readonly File[] => {
203
+ const dropped = Array.from(transfer.files);
204
+ const accept = unref(options.accept);
205
+ const matching =
206
+ accept === undefined
207
+ ? dropped
208
+ : typeof accept === "function"
209
+ ? accept(dropped.map((file) => file.type))
210
+ ? dropped
211
+ : []
212
+ : dropped.filter((file) => matchesAccept(accept, file));
213
+ if (matching.length !== dropped.length) return [];
214
+ return !(toValue(options.multiple) ?? true) && matching.length > 1 ? [] : matching;
215
+ };
216
+
217
+ const settleDefault = (event: Event, transfer: DataTransferLike | undefined): void => {
218
+ if (accepted.value || (options.preventDefaultForUnhandled ?? false)) event.preventDefault();
219
+ if (transfer) transfer.dropEffect = accepted.value ? "copy" : "none";
220
+ };
221
+
222
+ const onEnter = (event: Event): void => {
223
+ const transfer = dataTransferOf(event);
224
+ depth += 1;
225
+ if (depth === 1) {
226
+ accepted.value = transfer !== undefined && acceptsTypes(draggedTypes(transfer));
227
+ isOverDropZone.value = true;
228
+ options.onEnter?.(event);
229
+ }
230
+ settleDefault(event, transfer);
231
+ };
232
+
233
+ const onOver = (event: Event): void => {
234
+ settleDefault(event, dataTransferOf(event));
235
+ options.onOver?.(event);
236
+ };
237
+
238
+ const onLeave = (event: Event): void => {
239
+ depth = Math.max(0, depth - 1);
240
+ if (depth > 0) return;
241
+ isOverDropZone.value = false;
242
+ accepted.value = false;
243
+ options.onLeave?.(event);
244
+ };
245
+
246
+ const onDrop = (event: Event): void => {
247
+ const transfer = dataTransferOf(event);
248
+ const dropped = transfer ? acceptedFiles(transfer) : [];
249
+ if (dropped.length > 0 || (options.preventDefaultForUnhandled ?? false)) {
250
+ event.preventDefault();
251
+ }
252
+ depth = 0;
253
+ isOverDropZone.value = false;
254
+ accepted.value = false;
255
+ files.value = dropped.length > 0 ? dropped : null;
256
+ options.onDrop?.(files.value, event);
257
+ };
258
+
259
+ const stop = watch(
260
+ () => toValue(target) ?? undefined,
261
+ (element, _previous, onCleanup) => {
262
+ depth = 0;
263
+ isOverDropZone.value = false;
264
+ accepted.value = false;
265
+ if (!element) return;
266
+ element.addEventListener("dragenter", onEnter);
267
+ element.addEventListener("dragover", onOver);
268
+ element.addEventListener("dragleave", onLeave);
269
+ element.addEventListener("drop", onDrop);
270
+ onCleanup(() => {
271
+ element.removeEventListener("dragenter", onEnter);
272
+ element.removeEventListener("dragover", onOver);
273
+ element.removeEventListener("dragleave", onLeave);
274
+ element.removeEventListener("drop", onDrop);
275
+ });
276
+ },
277
+ { immediate: true, flush: "sync" },
278
+ );
279
+
280
+ tryOnScopeDispose(stop);
281
+
282
+ return {
283
+ isOverDropZone: readonly(isOverDropZone),
284
+ accepted: readonly(accepted),
285
+ files,
286
+ };
287
+ }