@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,278 @@
1
+ import {
2
+ computed,
3
+ hasInjectionContext,
4
+ readonly,
5
+ shallowRef,
6
+ toValue,
7
+ watch,
8
+ watchPostEffect,
9
+ } from "vue";
10
+ import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
11
+
12
+ import { tryOnScopeDispose } from "./scope.ts";
13
+ import type { TimeoutScheduler } from "./timeout-scheduler.ts";
14
+
15
+ /** Deadline handed to idle callbacks. */
16
+ export interface IdleDeadlineLike {
17
+ /** Whether the callback runs because its `timeout` elapsed. */
18
+ readonly didTimeout: boolean;
19
+ /** Milliseconds left in the current idle period. */
20
+ timeRemaining(): number;
21
+ }
22
+
23
+ /** Minimal `requestIdleCallback` capability. */
24
+ export interface IdleCallbackHost {
25
+ /** Schedule `callback` for the next idle period. */
26
+ requestIdleCallback(
27
+ callback: (deadline: IdleDeadlineLike) => void,
28
+ options?: { readonly timeout?: number },
29
+ ): number;
30
+ /** Cancel a scheduled callback. */
31
+ cancelIdleCallback(handle: number): void;
32
+ }
33
+
34
+ /** Scheduling options shared by {@link useRequestIdleCallback} and {@link idle}. */
35
+ export interface IdleSchedulingOptions {
36
+ /**
37
+ * `requestIdleCallback` capability for alternate runtimes and tests.
38
+ *
39
+ * @default window when it implements requestIdleCallback
40
+ */
41
+ readonly host?: MaybeRefOrGetter<IdleCallbackHost | null | undefined>;
42
+
43
+ /**
44
+ * Timers used by the fallback when `host` is missing. Without timers
45
+ * (server rendering) nothing is scheduled.
46
+ *
47
+ * @default window.setTimeout and window.clearTimeout when a window exists
48
+ */
49
+ readonly timers?: MaybeRefOrGetter<TimeoutScheduler | null | undefined>;
50
+
51
+ /**
52
+ * Run the callback after this many milliseconds even when the browser is
53
+ * never idle (`deadline.didTimeout` is then true).
54
+ *
55
+ * @default undefined (no timeout)
56
+ */
57
+ readonly timeout?: number;
58
+
59
+ /**
60
+ * Clock used by the fallback deadline, in milliseconds.
61
+ *
62
+ * @default Date.now
63
+ */
64
+ readonly now?: () => number;
65
+ }
66
+
67
+ /** Options for {@link useRequestIdleCallback}. */
68
+ export interface UseRequestIdleCallbackOptions extends IdleSchedulingOptions {
69
+ /**
70
+ * Schedule the callback as soon as the composable is created.
71
+ *
72
+ * @default true
73
+ */
74
+ readonly immediate?: boolean;
75
+ }
76
+
77
+ /** Options for {@link idle}. */
78
+ export interface IdleOptions extends IdleSchedulingOptions {
79
+ /**
80
+ * Cancels the wait; the promise rejects with `signal.reason`.
81
+ *
82
+ * @default undefined
83
+ */
84
+ readonly signal?: AbortSignal;
85
+ }
86
+
87
+ /** Reactive state and actions returned by {@link useRequestIdleCallback}. */
88
+ export interface RequestIdleCallbackControls {
89
+ /** Whether the native `requestIdleCallback` API is available. */
90
+ readonly supported: ComputedRef<boolean>;
91
+
92
+ /** Whether a callback is scheduled and has not run yet. */
93
+ readonly isPending: Readonly<ShallowRef<boolean>>;
94
+
95
+ /** Schedule the callback, replacing a pending one. No-op on the server. */
96
+ readonly start: () => void;
97
+
98
+ /** Cancel the pending callback. Repeated calls are safe. */
99
+ readonly cancel: () => void;
100
+ }
101
+
102
+ /** Idle period length fabricated by the fallback, in milliseconds (the spec maximum). */
103
+ const FALLBACK_IDLE_PERIOD = 50;
104
+
105
+ function browserIdleHost(): IdleCallbackHost | undefined {
106
+ return typeof window !== "undefined" && typeof window.requestIdleCallback === "function"
107
+ ? window
108
+ : undefined;
109
+ }
110
+
111
+ function browserTimers(): TimeoutScheduler | undefined {
112
+ if (typeof window === "undefined") return undefined;
113
+ const target = window;
114
+ return {
115
+ setTimeout: (callback, delayMs) => target.setTimeout(callback, delayMs),
116
+ clearTimeout: (handle) => {
117
+ if (typeof handle === "number") target.clearTimeout(handle);
118
+ },
119
+ };
120
+ }
121
+
122
+ function validateTimeout(timeout: number | undefined): void {
123
+ if (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {
124
+ throw new RangeError(
125
+ `[VIZE_COMPOSE_IDLE_CALLBACK_INVALID_TIMEOUT] timeout must be a finite, non-negative number, received ${String(timeout)}`,
126
+ );
127
+ }
128
+ }
129
+
130
+ /** Schedule once; returns a canceller, or undefined when nothing could be scheduled. */
131
+ function scheduleIdle(
132
+ options: IdleSchedulingOptions,
133
+ callback: (deadline: IdleDeadlineLike) => void,
134
+ ): (() => void) | undefined {
135
+ const host = options.host === undefined ? browserIdleHost() : toValue(options.host);
136
+ if (host) {
137
+ const handle = host.requestIdleCallback(
138
+ callback,
139
+ options.timeout === undefined ? undefined : { timeout: options.timeout },
140
+ );
141
+ return () => host.cancelIdleCallback(handle);
142
+ }
143
+ const timers = options.timers === undefined ? browserTimers() : toValue(options.timers);
144
+ if (!timers) return undefined;
145
+ const now = options.now ?? Date.now;
146
+ const handle = timers.setTimeout(() => {
147
+ const start = now();
148
+ callback({
149
+ didTimeout: false,
150
+ timeRemaining: () => Math.max(0, FALLBACK_IDLE_PERIOD - (now() - start)),
151
+ });
152
+ }, 1);
153
+ return () => timers.clearTimeout(handle);
154
+ }
155
+
156
+ /**
157
+ * Run a callback in the next idle period with `requestIdleCallback`.
158
+ *
159
+ * When the API is missing, a `setTimeout` fallback fabricates a deadline
160
+ * with a 50 ms budget and `didTimeout: false`. The pending callback is
161
+ * cancelled when the owning reactive scope stops; outside a scope the
162
+ * caller owns `cancel()`.
163
+ *
164
+ * Server rendering: nothing is scheduled, `isPending` and `supported` are
165
+ * false. Inside a component the first callback is scheduled after mounting,
166
+ * so hydration renders the server state first.
167
+ *
168
+ * @example
169
+ * ```ts
170
+ * const { start } = useRequestIdleCallback((deadline) => {
171
+ * while (deadline.timeRemaining() > 1 && queue.length) queue.shift()?.();
172
+ * }, { timeout: 2000, immediate: false });
173
+ * ```
174
+ *
175
+ * @param callback Receives the idle deadline.
176
+ * @param options Hosts, timeout and start policy.
177
+ * @default options {}
178
+ * @returns Scheduling state and actions.
179
+ */
180
+ export function useRequestIdleCallback(
181
+ callback: (deadline: IdleDeadlineLike) => void,
182
+ options: UseRequestIdleCallbackOptions = {},
183
+ ): RequestIdleCallbackControls {
184
+ validateTimeout(options.timeout);
185
+ const isPending = shallowRef(false);
186
+ let cancelPending: (() => void) | undefined;
187
+
188
+ const cancel = (): void => {
189
+ cancelPending?.();
190
+ cancelPending = undefined;
191
+ isPending.value = false;
192
+ };
193
+
194
+ const start = (): void => {
195
+ cancel();
196
+ cancelPending = scheduleIdle(options, (deadline) => {
197
+ cancelPending = undefined;
198
+ isPending.value = false;
199
+ callback(deadline);
200
+ });
201
+ isPending.value = cancelPending !== undefined;
202
+ };
203
+
204
+ // Inside a component the first callback is scheduled (and support is
205
+ // reported) only after mounting, so a hydrating client renders the same
206
+ // idle state as the server. Outside components it starts synchronously.
207
+ const hydrated = shallowRef(!hasInjectionContext());
208
+ if (hydrated.value) {
209
+ if (options.immediate ?? true) start();
210
+ } else {
211
+ const stopReady = watch(
212
+ hydrated,
213
+ (ready) => {
214
+ if (!ready) return;
215
+ stopReady();
216
+ if (options.immediate ?? true) start();
217
+ },
218
+ { flush: "sync" },
219
+ );
220
+ watchPostEffect(() => {
221
+ hydrated.value = true;
222
+ });
223
+ }
224
+ tryOnScopeDispose(cancel);
225
+
226
+ return {
227
+ supported: computed(
228
+ () =>
229
+ hydrated.value &&
230
+ (options.host === undefined
231
+ ? browserIdleHost() !== undefined
232
+ : Boolean(toValue(options.host))),
233
+ ),
234
+ isPending: readonly(isPending),
235
+ start,
236
+ cancel,
237
+ };
238
+ }
239
+
240
+ /**
241
+ * Resolve in the next idle period (or after `timeout`).
242
+ *
243
+ * Uses the same hosts and fallback as {@link useRequestIdleCallback}. When
244
+ * neither an idle host nor timers resolve (server rendering) it resolves on
245
+ * the next microtask with an exhausted deadline instead of hanging.
246
+ *
247
+ * @example
248
+ * ```ts
249
+ * await idle({ timeout: 1000 });
250
+ * ```
251
+ *
252
+ * @param options Hosts, timeout and abort signal.
253
+ * @default options {}
254
+ * @returns The idle deadline; rejects with `signal.reason` when aborted.
255
+ */
256
+ export function idle(options: IdleOptions = {}): Promise<IdleDeadlineLike> {
257
+ validateTimeout(options.timeout);
258
+ const { signal } = options;
259
+ return new Promise((resolve, reject) => {
260
+ if (signal?.aborted) {
261
+ reject(signal.reason);
262
+ return;
263
+ }
264
+ const onAbort = (): void => {
265
+ cancel?.();
266
+ reject(signal?.reason);
267
+ };
268
+ const cancel = scheduleIdle(options, (deadline) => {
269
+ signal?.removeEventListener("abort", onAbort);
270
+ resolve(deadline);
271
+ });
272
+ if (!cancel) {
273
+ resolve({ didTimeout: false, timeRemaining: () => 0 });
274
+ return;
275
+ }
276
+ signal?.addEventListener("abort", onAbort, { once: true });
277
+ });
278
+ }
@@ -0,0 +1,300 @@
1
+ import { computed, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, WritableComputedRef } from "vue";
3
+
4
+ /** Raw query value: repeated keys become arrays, absent keys are `undefined`. */
5
+ export type RawQueryValue = string | readonly string[] | undefined;
6
+
7
+ /** Query record as produced by `@vizejs/router` (`RouteMatch["query"]`). */
8
+ export type RouteQueryRecord = Readonly<Record<string, string | readonly string[]>>;
9
+
10
+ /**
11
+ * Structural subset of a matched route. `@vizejs/router`'s `RouteMatch`
12
+ * satisfies it, so its inferred `params` type flows through without this
13
+ * package depending on the router.
14
+ */
15
+ export interface RouteLocationLike {
16
+ /** Decoded path params. */
17
+ readonly params: object;
18
+ /** Parsed query. */
19
+ readonly query: RouteQueryRecord;
20
+ }
21
+
22
+ /** Converts a raw query value; `undefined` selects the default. */
23
+ export type QueryParser<Value> = (raw: RawQueryValue) => Value | undefined;
24
+
25
+ /** Converts a value back to a raw query value; `undefined` removes the key. */
26
+ export type QuerySerializer<Value> = (value: Value) => string | readonly string[] | undefined;
27
+
28
+ /** Built-in {@link QueryParser}s. */
29
+ export const queryParsers = {
30
+ /** First value as a string. */
31
+ string: (raw: RawQueryValue): string | undefined => (typeof raw === "string" ? raw : raw?.[0]),
32
+ /** First value as a finite number. */
33
+ number: (raw: RawQueryValue): number | undefined => {
34
+ const text = typeof raw === "string" ? raw : raw?.[0];
35
+ if (text === undefined || text.trim() === "") return undefined;
36
+ const value = Number(text);
37
+ return Number.isFinite(value) ? value : undefined;
38
+ },
39
+ /** First value as a safe integer. */
40
+ integer: (raw: RawQueryValue): number | undefined => {
41
+ const text = typeof raw === "string" ? raw : raw?.[0];
42
+ return text !== undefined && /^-?\d+$/.test(text) && Number.isSafeInteger(Number(text))
43
+ ? Number(text)
44
+ : undefined;
45
+ },
46
+ /** `"true"`/`"1"`/`""` (present flag) → `true`, `"false"`/`"0"` → `false`. */
47
+ boolean: (raw: RawQueryValue): boolean | undefined => {
48
+ const text = typeof raw === "string" ? raw : raw?.[0];
49
+ if (text === undefined) return undefined;
50
+ if (text === "true" || text === "1" || text === "") return true;
51
+ if (text === "false" || text === "0") return false;
52
+ return undefined;
53
+ },
54
+ /** Every value as a string array. */
55
+ array: (raw: RawQueryValue): string[] | undefined =>
56
+ raw === undefined ? undefined : typeof raw === "string" ? [raw] : [...raw],
57
+ } as const;
58
+
59
+ /**
60
+ * Parser accepting only the given literal values.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * useRouteQuery(route, "sort", { parse: oneOf(["new", "top"]), default: "new" });
65
+ * ```
66
+ *
67
+ * @param values Allowed values.
68
+ * @returns A parser narrowing to the literal union.
69
+ */
70
+ export function oneOf<const Values extends readonly string[]>(
71
+ values: Values,
72
+ ): QueryParser<Values[number]> {
73
+ const allowed = new Set<string>(values);
74
+ const isAllowed = (text: string): text is Values[number] => allowed.has(text);
75
+ return (raw) => {
76
+ const text = typeof raw === "string" ? raw : raw?.[0];
77
+ return text !== undefined && isAllowed(text) ? text : undefined;
78
+ };
79
+ }
80
+
81
+ /** Options for {@link useRouteQuery}. */
82
+ export interface UseRouteQueryOptions<Value> {
83
+ /**
84
+ * Converts the raw value.
85
+ *
86
+ * @default queryParsers.string
87
+ */
88
+ readonly parse?: QueryParser<Value>;
89
+
90
+ /**
91
+ * Converts a written value back into the query.
92
+ *
93
+ * @default strings and string arrays unchanged, other values via `String`
94
+ */
95
+ readonly serialize?: QuerySerializer<Value>;
96
+
97
+ /**
98
+ * Performs the navigation for a write, receiving the complete next query.
99
+ * Without it the returned ref is read-only.
100
+ *
101
+ * @default undefined
102
+ */
103
+ readonly navigate?: (query: RouteQueryRecord) => void;
104
+
105
+ /**
106
+ * Remove the key instead of writing it when the value equals the default.
107
+ *
108
+ * @default true
109
+ */
110
+ readonly omitDefault?: boolean;
111
+ }
112
+
113
+ /**
114
+ * Implementation view of every overload's options. Method syntax keeps the
115
+ * serializer parameter bivariant so each typed overload is compatible.
116
+ */
117
+ interface ErasedQueryOptions {
118
+ readonly parse?: QueryParser<unknown> | undefined;
119
+ serialize?(value: unknown): string | readonly string[] | undefined;
120
+ readonly navigate?: (query: RouteQueryRecord) => void;
121
+ readonly omitDefault?: boolean;
122
+ readonly default?: unknown;
123
+ }
124
+
125
+ /** Options of a string query parameter (no parser). */
126
+ export type StringQueryOptions = Omit<UseRouteQueryOptions<string>, "parse"> & {
127
+ /** Must be omitted: string parameters use {@link queryParsers.string}. */
128
+ readonly parse?: undefined;
129
+ };
130
+
131
+ function defaultSerialize(value: unknown): string | readonly string[] | undefined {
132
+ if (value === undefined || value === null) return undefined;
133
+ if (typeof value === "string") return value;
134
+ if (Array.isArray(value))
135
+ return value.map((item) => (typeof item === "string" ? item : JSON.stringify(item)));
136
+ return typeof value === "number" || typeof value === "boolean" || typeof value === "bigint"
137
+ ? value.toString()
138
+ : JSON.stringify(value);
139
+ }
140
+
141
+ function sameRaw(left: RawQueryValue, right: RawQueryValue): boolean {
142
+ if (typeof left === "string" || typeof right === "string" || !left || !right) {
143
+ return left === right;
144
+ }
145
+ return left.length === right.length && left.every((item, index) => item === right[index]);
146
+ }
147
+
148
+ /**
149
+ * Typed, optionally writable view of one query parameter.
150
+ *
151
+ * The value type is inferred from `parse` and `default`: with a default the
152
+ * ref never holds `undefined`. Pass `navigate` to make the ref writable;
153
+ * writes build the next query (keeping every other key), drop the key when
154
+ * the value equals the default, and hand it to `navigate`, which is where
155
+ * the router integration pushes or replaces the URL. Works with any route
156
+ * object exposing `query`, including `@vizejs/router`'s `RouteMatch`.
157
+ * Pure derived state: SSR-safe and hydration-stable (it reads the matched
158
+ * route only).
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * const page = useRouteQuery(match, "page", {
163
+ * parse: queryParsers.integer,
164
+ * default: 1,
165
+ * navigate: (query) => navigateTo(router.resolve(match.value.name, match.value.params, { query })),
166
+ * });
167
+ * page.value += 1;
168
+ * ```
169
+ *
170
+ * @param route Reactive matched route.
171
+ * @param key Query key.
172
+ * @param options Parser, default, serializer, and navigation.
173
+ * @default options {}
174
+ * @returns A computed ref (writable when `navigate` is given).
175
+ */
176
+ export function useRouteQuery(
177
+ route: MaybeRefOrGetter<RouteLocationLike>,
178
+ key: string,
179
+ options: StringQueryOptions & {
180
+ readonly default: string;
181
+ readonly navigate: (query: RouteQueryRecord) => void;
182
+ },
183
+ ): WritableComputedRef<string>;
184
+ export function useRouteQuery(
185
+ route: MaybeRefOrGetter<RouteLocationLike>,
186
+ key: string,
187
+ options: StringQueryOptions & { readonly navigate: (query: RouteQueryRecord) => void },
188
+ ): WritableComputedRef<string | undefined, string | undefined>;
189
+ export function useRouteQuery(
190
+ route: MaybeRefOrGetter<RouteLocationLike>,
191
+ key: string,
192
+ options: StringQueryOptions & { readonly default: string },
193
+ ): ComputedRef<string>;
194
+ export function useRouteQuery(
195
+ route: MaybeRefOrGetter<RouteLocationLike>,
196
+ key: string,
197
+ options?: StringQueryOptions,
198
+ ): ComputedRef<string | undefined>;
199
+ export function useRouteQuery<Value>(
200
+ route: MaybeRefOrGetter<RouteLocationLike>,
201
+ key: string,
202
+ options: UseRouteQueryOptions<Value> & {
203
+ readonly default: NoInfer<Value>;
204
+ readonly navigate: (query: RouteQueryRecord) => void;
205
+ },
206
+ ): WritableComputedRef<Value>;
207
+ export function useRouteQuery<Value>(
208
+ route: MaybeRefOrGetter<RouteLocationLike>,
209
+ key: string,
210
+ options: UseRouteQueryOptions<Value> & { readonly navigate: (query: RouteQueryRecord) => void },
211
+ ): WritableComputedRef<Value | undefined, Value | undefined>;
212
+ export function useRouteQuery<Value>(
213
+ route: MaybeRefOrGetter<RouteLocationLike>,
214
+ key: string,
215
+ options: UseRouteQueryOptions<Value> & { readonly default: NoInfer<Value> },
216
+ ): ComputedRef<Value>;
217
+ export function useRouteQuery<Value>(
218
+ route: MaybeRefOrGetter<RouteLocationLike>,
219
+ key: string,
220
+ options: UseRouteQueryOptions<Value>,
221
+ ): ComputedRef<Value | undefined>;
222
+ export function useRouteQuery(
223
+ route: MaybeRefOrGetter<RouteLocationLike>,
224
+ key: string,
225
+ options: ErasedQueryOptions = {},
226
+ ): ComputedRef<unknown> | WritableComputedRef<unknown> {
227
+ const parse = options.parse ?? queryParsers.string;
228
+ const read = (): unknown => parse(toValue(route).query[key]) ?? options.default;
229
+ const navigate = options.navigate;
230
+ if (navigate === undefined) return computed(read);
231
+
232
+ const serialize = (value: unknown): string | readonly string[] | undefined =>
233
+ options.serialize === undefined ? defaultSerialize(value) : options.serialize(value);
234
+ return computed({
235
+ get: read,
236
+ set: (value) => {
237
+ const current = toValue(route).query;
238
+ const raw =
239
+ (options.omitDefault ?? true) &&
240
+ "default" in options &&
241
+ sameRaw(serialize(value), serialize(options.default))
242
+ ? undefined
243
+ : serialize(value);
244
+ if (sameRaw(raw, current[key])) return;
245
+ const next: Record<string, string | readonly string[]> = { ...current };
246
+ if (raw === undefined) Reflect.deleteProperty(next, key);
247
+ else next[key] = raw;
248
+ navigate(next);
249
+ },
250
+ });
251
+ }
252
+
253
+ /** Params object of a route location. */
254
+ export type RouteParamsOf<Route extends RouteLocationLike> = Route["params"];
255
+
256
+ /**
257
+ * Typed view of the matched route's path params.
258
+ *
259
+ * Without a key, returns all params (typed from the route table when the
260
+ * route comes from `@vizejs/router`). With a key, returns that param; with
261
+ * a parser, the parsed value. Pure derived state: SSR-safe.
262
+ *
263
+ * @example
264
+ * ```ts
265
+ * const params = useRouteParams(match); // ComputedRef<{ readonly id: string }>
266
+ * const id = useRouteParams(match, "id", Number); // ComputedRef<number>
267
+ * ```
268
+ *
269
+ * @param route Reactive matched route.
270
+ * @param key Param name.
271
+ * @param parse Converts the raw param.
272
+ * @returns Computed params, param, or parsed param.
273
+ */
274
+ export function useRouteParams<Route extends RouteLocationLike>(
275
+ route: MaybeRefOrGetter<Route>,
276
+ ): ComputedRef<RouteParamsOf<Route>>;
277
+ export function useRouteParams<Route extends RouteLocationLike, Key extends keyof Route["params"]>(
278
+ route: MaybeRefOrGetter<Route>,
279
+ key: Key,
280
+ ): ComputedRef<Route["params"][Key]>;
281
+ export function useRouteParams<
282
+ Route extends RouteLocationLike,
283
+ Key extends keyof Route["params"],
284
+ Value,
285
+ >(
286
+ route: MaybeRefOrGetter<Route>,
287
+ key: Key,
288
+ parse: (raw: Route["params"][Key]) => Value,
289
+ ): ComputedRef<Value>;
290
+ export function useRouteParams(
291
+ route: MaybeRefOrGetter<RouteLocationLike>,
292
+ ...args: readonly [] | readonly [PropertyKey] | readonly [PropertyKey, (raw: unknown) => unknown]
293
+ ): ComputedRef<unknown> {
294
+ return computed(() => {
295
+ const { params } = toValue(route);
296
+ if (args.length === 0) return params;
297
+ const raw: unknown = Reflect.get(params, args[0]);
298
+ return args.length === 2 ? args[1](raw) : raw;
299
+ });
300
+ }