@vizejs/composable 0.426.3 → 0.427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,242 @@
1
+ import { FrameScheduler } from "./use-raf-fn.mjs";
2
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ //#region src/use-gamepad.d.ts
5
+ /** Button indices of the W3C "standard" gamepad mapping. */
6
+ declare const standardGamepadButtons: {
7
+ readonly faceBottom: 0;
8
+ readonly faceRight: 1;
9
+ readonly faceLeft: 2;
10
+ readonly faceTop: 3;
11
+ readonly leftBumper: 4;
12
+ readonly rightBumper: 5;
13
+ readonly leftTrigger: 6;
14
+ readonly rightTrigger: 7;
15
+ readonly select: 8;
16
+ readonly start: 9;
17
+ readonly leftStick: 10;
18
+ readonly rightStick: 11;
19
+ readonly dpadUp: 12;
20
+ readonly dpadDown: 13;
21
+ readonly dpadLeft: 14;
22
+ readonly dpadRight: 15;
23
+ readonly home: 16;
24
+ };
25
+ /** Axis indices of the W3C "standard" gamepad mapping. */
26
+ declare const standardGamepadAxes: {
27
+ readonly leftStickX: 0;
28
+ readonly leftStickY: 1;
29
+ readonly rightStickX: 2;
30
+ readonly rightStickY: 3;
31
+ };
32
+ /** Minimal `GamepadButton` read by {@link useGamepad}. */
33
+ interface GamepadButtonLike {
34
+ /** Whether the button is pressed. */
35
+ readonly pressed: boolean;
36
+ /** Whether the button is touched (defaults to `pressed` when absent). */
37
+ readonly touched?: boolean;
38
+ /** Analog value in `[0, 1]`. */
39
+ readonly value: number;
40
+ }
41
+ /** Minimal `GamepadHapticActuator` used for vibration. */
42
+ interface GamepadVibrationActuatorLike {
43
+ /** Play a haptic effect. */
44
+ playEffect(type: string, params: GamepadVibrationParams): Promise<unknown>;
45
+ }
46
+ /** Minimal live `Gamepad` object read by {@link useGamepad}. */
47
+ interface GamepadLike {
48
+ /** Device identifier string. */
49
+ readonly id: string;
50
+ /** Slot index in `navigator.getGamepads()`. */
51
+ readonly index: number;
52
+ /** Whether the pad is still connected. */
53
+ readonly connected: boolean;
54
+ /** Layout mapping (`"standard"` or `""`). */
55
+ readonly mapping: string;
56
+ /** Last update timestamp. */
57
+ readonly timestamp: number;
58
+ /** Button states. */
59
+ readonly buttons: ArrayLike<GamepadButtonLike>;
60
+ /** Axis values in `[-1, 1]`. */
61
+ readonly axes: ArrayLike<number>;
62
+ /** Haptic actuator, when the pad supports vibration. */
63
+ readonly vibrationActuator?: GamepadVibrationActuatorLike | null;
64
+ }
65
+ /** Window-like capability used by {@link useGamepad}. */
66
+ interface GamepadHost {
67
+ /** Navigator exposing `getGamepads()`. */
68
+ readonly navigator: {
69
+ /** Read the current pads (live objects, `null` for empty slots). */getGamepads(): ArrayLike<GamepadLike | null>;
70
+ };
71
+ /** Subscribe to `gamepadconnected` / `gamepaddisconnected`. */
72
+ addEventListener(type: string, listener: () => void): void;
73
+ /** Unsubscribe from `gamepadconnected` / `gamepaddisconnected`. */
74
+ removeEventListener(type: string, listener: () => void): void;
75
+ }
76
+ /** Parameters of a `dual-rumble` vibration effect. */
77
+ interface GamepadVibrationParams {
78
+ /** Effect duration in milliseconds. */
79
+ readonly duration: number;
80
+ /** Delay before the effect starts, in milliseconds. */
81
+ readonly startDelay?: number;
82
+ /** Low-frequency motor magnitude in `[0, 1]`. */
83
+ readonly strongMagnitude?: number;
84
+ /** High-frequency motor magnitude in `[0, 1]`. */
85
+ readonly weakMagnitude?: number;
86
+ }
87
+ /** Plain, copied state of one button. */
88
+ interface GamepadButtonState {
89
+ /** Whether the button is pressed. */
90
+ readonly pressed: boolean;
91
+ /** Whether the button is touched. */
92
+ readonly touched: boolean;
93
+ /** Analog value in `[0, 1]`. */
94
+ readonly value: number;
95
+ }
96
+ /** Immutable copy of a pad taken at one poll; never a live `Gamepad`. */
97
+ interface GamepadSnapshot {
98
+ /** Device identifier string. */
99
+ readonly id: string;
100
+ /** Slot index. */
101
+ readonly index: number;
102
+ /** Whether the pad was connected when copied. */
103
+ readonly connected: boolean;
104
+ /** Layout mapping (`"standard"` or `""`). */
105
+ readonly mapping: string;
106
+ /** Update timestamp of the copied state. */
107
+ readonly timestamp: number;
108
+ /** Copied button states. */
109
+ readonly buttons: readonly GamepadButtonState[];
110
+ /** Copied axis values. */
111
+ readonly axes: readonly number[];
112
+ /** Whether the pad exposes a vibration actuator. */
113
+ readonly vibration: boolean;
114
+ }
115
+ /** Binds a mapping key to a button; the mapped value is a {@link GamepadButtonState}. */
116
+ interface GamepadButtonBinding {
117
+ /** Button index (see {@link standardGamepadButtons}). */
118
+ readonly button: number;
119
+ }
120
+ /** Binds a mapping key to an axis; the mapped value is a number. */
121
+ interface GamepadAxisBinding {
122
+ /** Axis index (see {@link standardGamepadAxes}). */
123
+ readonly axis: number;
124
+ /** Values with a magnitude below this become `0`; the rest is rescaled to `[-1, 1]`. */
125
+ readonly deadzone?: number;
126
+ /** Negate the axis value. */
127
+ readonly invert?: boolean;
128
+ }
129
+ /** Named bindings from which a typed per-pad state is derived. */
130
+ type GamepadMapping = Readonly<Record<string, GamepadButtonBinding | GamepadAxisBinding>>;
131
+ /** Typed state produced by a {@link GamepadMapping}: axes map to numbers, buttons to states. */
132
+ type MappedGamepad<Mapping extends GamepadMapping> = { readonly [Key in keyof Mapping]: Mapping[Key] extends {
133
+ readonly axis: number;
134
+ } ? number : GamepadButtonState };
135
+ /** One connected pad: its snapshot plus the mapped state. */
136
+ interface ConnectedGamepad<Mapping extends GamepadMapping = Record<never, never>> extends GamepadSnapshot {
137
+ /** State derived from the `mapping` option. */
138
+ readonly mapped: MappedGamepad<Mapping>;
139
+ }
140
+ /** Options for {@link useGamepad}. */
141
+ interface UseGamepadOptions<Mapping extends GamepadMapping = Record<never, never>> {
142
+ /**
143
+ * Window-like host providing `navigator.getGamepads()` and connection events.
144
+ *
145
+ * @default window when `navigator.getGamepads` exists
146
+ */
147
+ readonly host?: MaybeRefOrGetter<GamepadHost | null | undefined>;
148
+ /**
149
+ * Named bindings applied to every pad; the keys and value kinds type `mapped`.
150
+ *
151
+ * @default {}
152
+ */
153
+ readonly mapping?: Mapping;
154
+ /**
155
+ * Frame host driving the polling loop.
156
+ *
157
+ * @default globalThis animation-frame functions
158
+ */
159
+ readonly scheduler?: FrameScheduler;
160
+ /**
161
+ * Start polling immediately.
162
+ *
163
+ * @default true
164
+ */
165
+ readonly immediate?: boolean;
166
+ }
167
+ /** Reactive state and actions returned by {@link useGamepad}. */
168
+ interface GamepadControls<Mapping extends GamepadMapping = Record<never, never>> {
169
+ /** Whether the Gamepad API is available. */
170
+ readonly supported: ComputedRef<boolean>;
171
+ /** Connected pads, copied on every poll that saw a change. */
172
+ readonly gamepads: Readonly<ShallowRef<readonly ConnectedGamepad<Mapping>[]>>;
173
+ /** Whether polling is running. */
174
+ readonly isActive: Readonly<Ref<boolean>>;
175
+ /** Most recent vibration failure. */
176
+ readonly error: Readonly<ShallowRef<unknown>>;
177
+ /** Stop polling. Idempotent. */
178
+ readonly pause: () => void;
179
+ /** Resume polling. Idempotent. */
180
+ readonly resume: () => void;
181
+ /** Read the pads once, outside the frame loop. */
182
+ readonly refresh: () => void;
183
+ /**
184
+ * Play a vibration effect on the pad at `index`.
185
+ *
186
+ * @returns Whether the effect played; failures land in `error`.
187
+ */
188
+ readonly vibrate: (index: number, params: GamepadVibrationParams, type?: string) => Promise<boolean>;
189
+ }
190
+ /**
191
+ * Copy a live pad into an immutable {@link GamepadSnapshot}.
192
+ *
193
+ * @param pad Live `Gamepad` (or compatible) object.
194
+ * @returns The copied state.
195
+ */
196
+ declare function snapshotGamepad(pad: GamepadLike): GamepadSnapshot;
197
+ /**
198
+ * Derive typed named state from a snapshot. Missing buttons read as released
199
+ * and missing axes as `0`; axis dead zones are applied and rescaled.
200
+ *
201
+ * @example
202
+ * ```ts
203
+ * const state = mapGamepad(pad, { jump: { button: 0 }, moveX: { axis: 0, deadzone: 0.1 } });
204
+ * state.jump.pressed; state.moveX; // boolean, number
205
+ * ```
206
+ *
207
+ * @param snapshot Copied pad state.
208
+ * @param mapping Named button and axis bindings.
209
+ * @throws `RangeError` tagged `VIZE_COMPOSE_GAMEPAD_INVALID_MAPPING` for a
210
+ * negative or fractional index or a dead zone outside `[0, 1)`.
211
+ * @returns State keyed like `mapping`.
212
+ */
213
+ declare function mapGamepad<const Mapping extends GamepadMapping>(snapshot: Pick<GamepadSnapshot, "buttons" | "axes">, mapping: Mapping): MappedGamepad<Mapping>;
214
+ /**
215
+ * Track connected gamepads as immutable snapshots, polled on animation
216
+ * frames, with optional typed named bindings.
217
+ *
218
+ * Pads are re-read every frame while active and on `gamepadconnected` /
219
+ * `gamepaddisconnected`; `gamepads` is replaced only when a pad's timestamp
220
+ * or connection changed. Entries are plain copies, so they are safe to keep
221
+ * or serialize. The frame loop and listeners stop with the owning reactive
222
+ * scope; outside a scope call `pause()`.
223
+ *
224
+ * Server rendering: no frames or listeners, `supported` is false and
225
+ * `gamepads` is empty.
226
+ * Inside a component the host is resolved after mounting, so hydration
227
+ * renders this server state first.
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * const { gamepads } = useGamepad({ mapping: { jump: { button: 0 }, moveX: { axis: 0, deadzone: 0.1 } } });
232
+ * const player = computed(() => gamepads.value[0]?.mapped);
233
+ * ```
234
+ *
235
+ * @param options Host, mapping, and scheduler.
236
+ * @default options {}
237
+ * @throws `RangeError` tagged `VIZE_COMPOSE_GAMEPAD_INVALID_MAPPING` for an invalid mapping.
238
+ * @returns Pad state and polling controls.
239
+ */
240
+ declare function useGamepad<const Mapping extends GamepadMapping = Record<never, never>>(options?: UseGamepadOptions<Mapping>): GamepadControls<Mapping>;
241
+ //#endregion
242
+ export { ConnectedGamepad, GamepadAxisBinding, GamepadButtonBinding, GamepadButtonLike, GamepadButtonState, GamepadControls, GamepadHost, GamepadLike, GamepadMapping, GamepadSnapshot, GamepadVibrationActuatorLike, GamepadVibrationParams, MappedGamepad, UseGamepadOptions, mapGamepad, snapshotGamepad, standardGamepadAxes, standardGamepadButtons, useGamepad };
@@ -0,0 +1,218 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { useRafFn } from "./use-raf-fn.mjs";
3
+ import { computed, hasInjectionContext, readonly, shallowReadonly, shallowRef, toValue, watch, watchPostEffect } from "vue";
4
+ //#region src/use-gamepad.ts
5
+ /** Button indices of the W3C "standard" gamepad mapping. */
6
+ const standardGamepadButtons = {
7
+ faceBottom: 0,
8
+ faceRight: 1,
9
+ faceLeft: 2,
10
+ faceTop: 3,
11
+ leftBumper: 4,
12
+ rightBumper: 5,
13
+ leftTrigger: 6,
14
+ rightTrigger: 7,
15
+ select: 8,
16
+ start: 9,
17
+ leftStick: 10,
18
+ rightStick: 11,
19
+ dpadUp: 12,
20
+ dpadDown: 13,
21
+ dpadLeft: 14,
22
+ dpadRight: 15,
23
+ home: 16
24
+ };
25
+ /** Axis indices of the W3C "standard" gamepad mapping. */
26
+ const standardGamepadAxes = {
27
+ leftStickX: 0,
28
+ leftStickY: 1,
29
+ rightStickX: 2,
30
+ rightStickY: 3
31
+ };
32
+ function browserGamepadHost() {
33
+ if (typeof window === "undefined") return void 0;
34
+ return typeof window.navigator.getGamepads === "function" ? window : void 0;
35
+ }
36
+ function invalidMapping(message) {
37
+ return /* @__PURE__ */ new RangeError(`[VIZE_COMPOSE_GAMEPAD_INVALID_MAPPING] ${message}`);
38
+ }
39
+ function isAxisBinding(binding) {
40
+ return "axis" in binding;
41
+ }
42
+ function checkIndex(index, key) {
43
+ if (!Number.isInteger(index) || index < 0) throw invalidMapping(`"${key}" index must be a non-negative integer; received ${index}`);
44
+ }
45
+ /**
46
+ * Copy a live pad into an immutable {@link GamepadSnapshot}.
47
+ *
48
+ * @param pad Live `Gamepad` (or compatible) object.
49
+ * @returns The copied state.
50
+ */
51
+ function snapshotGamepad(pad) {
52
+ return {
53
+ id: pad.id,
54
+ index: pad.index,
55
+ connected: pad.connected,
56
+ mapping: pad.mapping,
57
+ timestamp: pad.timestamp,
58
+ buttons: Array.from(pad.buttons, (button) => ({
59
+ pressed: button.pressed,
60
+ touched: button.touched ?? button.pressed,
61
+ value: button.value
62
+ })),
63
+ axes: Array.from(pad.axes),
64
+ vibration: pad.vibrationActuator != null
65
+ };
66
+ }
67
+ /**
68
+ * Derive typed named state from a snapshot. Missing buttons read as released
69
+ * and missing axes as `0`; axis dead zones are applied and rescaled.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const state = mapGamepad(pad, { jump: { button: 0 }, moveX: { axis: 0, deadzone: 0.1 } });
74
+ * state.jump.pressed; state.moveX; // boolean, number
75
+ * ```
76
+ *
77
+ * @param snapshot Copied pad state.
78
+ * @param mapping Named button and axis bindings.
79
+ * @throws `RangeError` tagged `VIZE_COMPOSE_GAMEPAD_INVALID_MAPPING` for a
80
+ * negative or fractional index or a dead zone outside `[0, 1)`.
81
+ * @returns State keyed like `mapping`.
82
+ */
83
+ function mapGamepad(snapshot, mapping) {
84
+ const result = {};
85
+ for (const [key, binding] of Object.entries(mapping)) if (isAxisBinding(binding)) {
86
+ checkIndex(binding.axis, key);
87
+ const deadzone = binding.deadzone ?? 0;
88
+ if (!(deadzone >= 0 && deadzone < 1)) throw invalidMapping(`"${key}" deadzone must be in [0, 1); received ${deadzone}`);
89
+ const raw = snapshot.axes[binding.axis] ?? 0;
90
+ const magnitude = Math.abs(raw);
91
+ const value = magnitude < deadzone ? 0 : Math.sign(raw) * (magnitude - deadzone) / (1 - deadzone);
92
+ result[key] = binding.invert ?? false ? 0 - value : value;
93
+ } else {
94
+ checkIndex(binding.button, key);
95
+ result[key] = snapshot.buttons[binding.button] ?? {
96
+ pressed: false,
97
+ touched: false,
98
+ value: 0
99
+ };
100
+ }
101
+ return result;
102
+ }
103
+ /**
104
+ * Track connected gamepads as immutable snapshots, polled on animation
105
+ * frames, with optional typed named bindings.
106
+ *
107
+ * Pads are re-read every frame while active and on `gamepadconnected` /
108
+ * `gamepaddisconnected`; `gamepads` is replaced only when a pad's timestamp
109
+ * or connection changed. Entries are plain copies, so they are safe to keep
110
+ * or serialize. The frame loop and listeners stop with the owning reactive
111
+ * scope; outside a scope call `pause()`.
112
+ *
113
+ * Server rendering: no frames or listeners, `supported` is false and
114
+ * `gamepads` is empty.
115
+ * Inside a component the host is resolved after mounting, so hydration
116
+ * renders this server state first.
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const { gamepads } = useGamepad({ mapping: { jump: { button: 0 }, moveX: { axis: 0, deadzone: 0.1 } } });
121
+ * const player = computed(() => gamepads.value[0]?.mapped);
122
+ * ```
123
+ *
124
+ * @param options Host, mapping, and scheduler.
125
+ * @default options {}
126
+ * @throws `RangeError` tagged `VIZE_COMPOSE_GAMEPAD_INVALID_MAPPING` for an invalid mapping.
127
+ * @returns Pad state and polling controls.
128
+ */
129
+ function useGamepad(options = {}) {
130
+ const gamepads = shallowRef([]);
131
+ const error = shallowRef(void 0);
132
+ const mapping = options.mapping;
133
+ if (mapping !== void 0) mapGamepad({
134
+ buttons: [],
135
+ axes: []
136
+ }, mapping);
137
+ const hydrated = shallowRef(!hasInjectionContext());
138
+ if (!hydrated.value) watchPostEffect(() => {
139
+ hydrated.value = true;
140
+ });
141
+ const resolveHost = () => {
142
+ if (!hydrated.value) return void 0;
143
+ return options.host === void 0 ? browserGamepadHost() : toValue(options.host) ?? void 0;
144
+ };
145
+ const readPads = (host) => Array.from(host.navigator.getGamepads()).filter((pad) => pad !== null && pad.connected);
146
+ const refresh = () => {
147
+ const host = resolveHost();
148
+ const pads = host ? readPads(host) : [];
149
+ const previous = gamepads.value;
150
+ if (pads.length === previous.length && pads.every((pad, position) => previous[position]?.index === pad.index && previous[position]?.id === pad.id && previous[position]?.timestamp === pad.timestamp)) return;
151
+ gamepads.value = pads.map((pad) => {
152
+ const snapshot = snapshotGamepad(pad);
153
+ const mapped = mapGamepad(snapshot, mapping ?? {});
154
+ return {
155
+ ...snapshot,
156
+ mapped
157
+ };
158
+ });
159
+ };
160
+ const loop = useRafFn(refresh, {
161
+ immediate: false,
162
+ runOnServer: true,
163
+ ...options.scheduler === void 0 ? {} : { scheduler: options.scheduler }
164
+ });
165
+ const wanted = shallowRef(options.immediate ?? true);
166
+ const resume = () => {
167
+ wanted.value = true;
168
+ if (resolveHost()) loop.resume();
169
+ };
170
+ const pause = () => {
171
+ wanted.value = false;
172
+ loop.pause();
173
+ };
174
+ watch(resolveHost, (host, _previous, onCleanup) => {
175
+ if (!host) {
176
+ loop.pause();
177
+ gamepads.value = [];
178
+ return;
179
+ }
180
+ host.addEventListener("gamepadconnected", refresh);
181
+ host.addEventListener("gamepaddisconnected", refresh);
182
+ onCleanup(() => {
183
+ host.removeEventListener("gamepadconnected", refresh);
184
+ host.removeEventListener("gamepaddisconnected", refresh);
185
+ });
186
+ refresh();
187
+ if (wanted.value) loop.resume();
188
+ }, {
189
+ immediate: true,
190
+ flush: "sync"
191
+ });
192
+ const vibrate = async (index, params, type = "dual-rumble") => {
193
+ const host = resolveHost();
194
+ const actuator = host ? readPads(host).find((pad) => pad.index === index)?.vibrationActuator : void 0;
195
+ if (!actuator) return false;
196
+ try {
197
+ await actuator.playEffect(type, params);
198
+ error.value = void 0;
199
+ return true;
200
+ } catch (cause) {
201
+ error.value = cause;
202
+ return false;
203
+ }
204
+ };
205
+ tryOnScopeDispose(pause);
206
+ return {
207
+ supported: computed(() => resolveHost() !== void 0),
208
+ gamepads: shallowReadonly(gamepads),
209
+ isActive: loop.isActive,
210
+ error: readonly(error),
211
+ pause,
212
+ resume,
213
+ refresh,
214
+ vibrate
215
+ };
216
+ }
217
+ //#endregion
218
+ export { mapGamepad, snapshotGamepad, standardGamepadAxes, standardGamepadButtons, useGamepad };
@@ -0,0 +1,160 @@
1
+ import { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
2
+
3
+ //#region src/use-hid.d.ts
4
+ /** Device filter for `requestDevice`. */
5
+ interface HIDDeviceFilter {
6
+ /** USB vendor id. */
7
+ readonly vendorId?: number;
8
+ /** USB product id. */
9
+ readonly productId?: number;
10
+ /** HID usage page. */
11
+ readonly usagePage?: number;
12
+ /** HID usage. */
13
+ readonly usage?: number;
14
+ }
15
+ /** Minimal `HIDDevice` used by {@link useHID}. */
16
+ interface HIDDeviceLike extends EventTarget {
17
+ /** Whether the device is open. */
18
+ readonly opened: boolean;
19
+ /** USB vendor id. */
20
+ readonly vendorId: number;
21
+ /** USB product id. */
22
+ readonly productId: number;
23
+ /** Product name. */
24
+ readonly productName: string;
25
+ /** Open the device. */
26
+ open(): Promise<void>;
27
+ /** Close the device. */
28
+ close(): Promise<void>;
29
+ /** Send an output report. */
30
+ sendReport(reportId: number, data: BufferSource): Promise<void>;
31
+ /** Send a feature report. */
32
+ sendFeatureReport(reportId: number, data: BufferSource): Promise<void>;
33
+ /** Read a feature report. */
34
+ receiveFeatureReport(reportId: number): Promise<DataView>;
35
+ }
36
+ /** `navigator.hid`-like capability used by {@link useHID}. */
37
+ interface HIDHost extends EventTarget {
38
+ /** Devices the page already has access to. */
39
+ getDevices(): Promise<HIDDeviceLike[]>;
40
+ /** Prompt the user for devices. */
41
+ requestDevice(options: {
42
+ readonly filters: HIDDeviceFilter[];
43
+ }): Promise<HIDDeviceLike[]>;
44
+ }
45
+ /** Plain, reactive-friendly description of a granted device. */
46
+ interface HIDDeviceInfo {
47
+ /** The live device, for passing back to the actions. */
48
+ readonly device: HIDDeviceLike;
49
+ /** USB vendor id. */
50
+ readonly vendorId: number;
51
+ /** USB product id. */
52
+ readonly productId: number;
53
+ /** Product name. */
54
+ readonly productName: string;
55
+ /** Whether the device was open when the list was refreshed. */
56
+ readonly opened: boolean;
57
+ }
58
+ /** An input report received from an open device. */
59
+ interface HIDInputReport {
60
+ /** Device that sent the report. */
61
+ readonly device: HIDDeviceLike;
62
+ /** Report id (`0` when the device does not use report ids). */
63
+ readonly reportId: number;
64
+ /** Report payload. */
65
+ readonly data: DataView;
66
+ }
67
+ /** Options for {@link useHID}. */
68
+ interface UseHIDOptions {
69
+ /**
70
+ * `navigator.hid`-like capability.
71
+ *
72
+ * @default window.navigator.hid when it exists
73
+ */
74
+ readonly host?: MaybeRefOrGetter<HIDHost | null | undefined>;
75
+ /**
76
+ * Receives input reports from every device opened through {@link HIDControls.open}.
77
+ *
78
+ * @default undefined
79
+ */
80
+ readonly onInputReport?: (report: HIDInputReport) => void;
81
+ }
82
+ /** Reactive state and actions returned by {@link useHID}. */
83
+ interface HIDControls {
84
+ /** Whether WebHID is available. */
85
+ readonly supported: ComputedRef<boolean>;
86
+ /** Granted devices, refreshed on `connect` / `disconnect`, open and close. */
87
+ readonly devices: Readonly<ShallowRef<readonly HIDDeviceInfo[]>>;
88
+ /** Most recent failure. */
89
+ readonly error: Readonly<ShallowRef<unknown>>;
90
+ /**
91
+ * Prompt the user for devices (requires user activation).
92
+ *
93
+ * @returns The chosen devices (empty when cancelled or failed).
94
+ */
95
+ readonly requestDevice: (filters?: HIDDeviceFilter[]) => Promise<readonly HIDDeviceLike[]>;
96
+ /**
97
+ * Refresh `devices`.
98
+ *
99
+ * @returns The granted devices.
100
+ */
101
+ readonly getDevices: () => Promise<readonly HIDDeviceInfo[]>;
102
+ /**
103
+ * Open a device and start forwarding its input reports.
104
+ *
105
+ * @returns Whether the device is open.
106
+ */
107
+ readonly open: (device: HIDDeviceLike) => Promise<boolean>;
108
+ /**
109
+ * Stop forwarding reports and close a device.
110
+ *
111
+ * @returns Whether the device closed.
112
+ */
113
+ readonly close: (device: HIDDeviceLike) => Promise<boolean>;
114
+ /**
115
+ * Send an output report.
116
+ *
117
+ * @returns Whether the report was sent.
118
+ */
119
+ readonly sendReport: (device: HIDDeviceLike, reportId: number, data: BufferSource) => Promise<boolean>;
120
+ /**
121
+ * Send a feature report.
122
+ *
123
+ * @returns Whether the report was sent.
124
+ */
125
+ readonly sendFeatureReport: (device: HIDDeviceLike, reportId: number, data: BufferSource) => Promise<boolean>;
126
+ /**
127
+ * Read a feature report.
128
+ *
129
+ * @returns The report, or `undefined` on failure.
130
+ */
131
+ readonly receiveFeatureReport: (device: HIDDeviceLike, reportId: number) => Promise<DataView | undefined>;
132
+ }
133
+ /**
134
+ * Talk to human-interface devices with the WebHID API.
135
+ *
136
+ * `devices` lists granted devices as plain snapshots and follows the host's
137
+ * `connect` / `disconnect` events. Devices opened through `open()` forward
138
+ * `inputreport` events to `onInputReport`. Every action resolves to a
139
+ * boolean or value and records failures in `error`. Report listeners are
140
+ * removed and opened devices closed when the owning reactive scope stops;
141
+ * outside a scope call `close()` per device.
142
+ *
143
+ * Server rendering: `supported` is false and `devices` is empty.
144
+ * Inside a component the host is resolved after mounting, so hydration
145
+ * renders this server state first.
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * const hid = useHID({ onInputReport: ({ reportId, data }) => read(reportId, data) });
150
+ * const [device] = await hid.requestDevice([{ vendorId: 0x054c }]);
151
+ * if (device) await hid.open(device);
152
+ * ```
153
+ *
154
+ * @param options Host and input report callback.
155
+ * @default options {}
156
+ * @returns HID state and actions.
157
+ */
158
+ declare function useHID(options?: UseHIDOptions): HIDControls;
159
+ //#endregion
160
+ export { HIDControls, HIDDeviceFilter, HIDDeviceInfo, HIDDeviceLike, HIDHost, HIDInputReport, UseHIDOptions, useHID };