@vizejs/composable 0.426.2 → 0.427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,276 @@
1
+ import { computed, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
3
+
4
+ import type { IntervalScheduler, PausableControls } from "./use-interval.ts";
5
+ import { useTimestamp } from "./use-now.ts";
6
+
7
+ /** Calendar units {@link formatTimeAgo} can express a distance in. */
8
+ export type TimeAgoUnit = "second" | "minute" | "hour" | "day" | "week" | "month" | "year";
9
+
10
+ /** Date input accepted by the time formatting helpers. */
11
+ export type TimeAgoInput = Date | number | string;
12
+
13
+ /** Options for {@link formatTimeAgo}. */
14
+ export interface FormatTimeAgoOptions {
15
+ /**
16
+ * BCP 47 locale(s) for `Intl.RelativeTimeFormat`. Defaults to a fixed
17
+ * locale (not the host default) so server and client output agree.
18
+ *
19
+ * @default "en"
20
+ */
21
+ readonly locale?: string | readonly string[];
22
+
23
+ /**
24
+ * `"auto"` allows phrases such as "yesterday" and "now"; `"always"` keeps
25
+ * numeric output such as "1 day ago".
26
+ *
27
+ * @default "auto"
28
+ */
29
+ readonly numeric?: "always" | "auto";
30
+
31
+ /**
32
+ * Length of the unit wording.
33
+ *
34
+ * @default "long"
35
+ */
36
+ readonly style?: "long" | "short" | "narrow";
37
+
38
+ /**
39
+ * Units allowed in the output, in any order. The largest allowed unit
40
+ * that fits the distance wins; smaller distances use the smallest unit.
41
+ *
42
+ * @default all units from second to year
43
+ */
44
+ readonly units?: readonly TimeAgoUnit[];
45
+
46
+ /**
47
+ * How a fractional unit count becomes an integer.
48
+ *
49
+ * @default "round"
50
+ */
51
+ readonly rounding?: "round" | "floor" | "ceil";
52
+
53
+ /**
54
+ * Distances below this many milliseconds are reported as zero of the
55
+ * smallest unit ("now" with `numeric: "auto"`).
56
+ *
57
+ * @default 0
58
+ */
59
+ readonly justNowMs?: number;
60
+
61
+ /**
62
+ * Distances of at least this many milliseconds are delegated to
63
+ * {@link FormatTimeAgoOptions.fullDateFormatter}.
64
+ *
65
+ * @default Number.POSITIVE_INFINITY
66
+ */
67
+ readonly maxMs?: number;
68
+
69
+ /**
70
+ * Formats dates beyond {@link FormatTimeAgoOptions.maxMs}.
71
+ *
72
+ * @default medium date style in UTC for the configured locale
73
+ */
74
+ readonly fullDateFormatter?: (date: Date) => string;
75
+ }
76
+
77
+ /** Options for {@link useTimeAgo}. */
78
+ export interface UseTimeAgoOptions<Controls extends boolean = false> extends Omit<
79
+ FormatTimeAgoOptions,
80
+ "locale"
81
+ > {
82
+ /**
83
+ * Reactive BCP 47 locale(s). Pair with `useLocale()` to follow the user.
84
+ *
85
+ * @default "en"
86
+ */
87
+ readonly locale?: MaybeRefOrGetter<string | readonly string[]>;
88
+
89
+ /**
90
+ * How often the relative phrase is recomputed, in milliseconds.
91
+ *
92
+ * @default 30000
93
+ */
94
+ readonly updateIntervalMs?: MaybeRefOrGetter<number>;
95
+
96
+ /**
97
+ * Clock source returning Unix epoch milliseconds.
98
+ *
99
+ * @default Date.now
100
+ */
101
+ readonly now?: () => number;
102
+
103
+ /**
104
+ * Hydration-stable "now" used for the first render on server and client.
105
+ *
106
+ * @default undefined (read the clock immediately)
107
+ */
108
+ readonly initialNow?: number;
109
+
110
+ /**
111
+ * Starts host timers when no browser `window` is available.
112
+ *
113
+ * @default false
114
+ */
115
+ readonly runOnServer?: boolean;
116
+
117
+ /**
118
+ * Repeating timer host.
119
+ *
120
+ * @default globalThis timer functions
121
+ */
122
+ readonly scheduler?: IntervalScheduler;
123
+
124
+ /**
125
+ * Return the full control object instead of the bare phrase ref.
126
+ *
127
+ * @default false
128
+ */
129
+ readonly controls?: Controls;
130
+ }
131
+
132
+ /** Phrase and controls returned by `useTimeAgo(time, { controls: true })`. */
133
+ export interface TimeAgoControls extends PausableControls {
134
+ /** Localized relative phrase such as "3 minutes ago". */
135
+ readonly timeAgo: ComputedRef<string>;
136
+
137
+ /** The reference "now" in Unix epoch milliseconds. */
138
+ readonly now: Readonly<ShallowRef<number>>;
139
+ }
140
+
141
+ const unitMs: Readonly<Record<TimeAgoUnit, number>> = {
142
+ second: 1_000,
143
+ minute: 60_000,
144
+ hour: 3_600_000,
145
+ day: 86_400_000,
146
+ week: 604_800_000,
147
+ month: 2_592_000_000,
148
+ year: 31_536_000_000,
149
+ };
150
+
151
+ const allUnits: readonly TimeAgoUnit[] = [
152
+ "second",
153
+ "minute",
154
+ "hour",
155
+ "day",
156
+ "week",
157
+ "month",
158
+ "year",
159
+ ];
160
+
161
+ function toEpochMs(input: TimeAgoInput): number {
162
+ const value = input instanceof Date ? input.getTime() : new Date(input).getTime();
163
+ if (Number.isNaN(value)) {
164
+ throw new RangeError(
165
+ `[VIZE_COMPOSE_TIME_AGO_INVALID_DATE] expected a valid date; received ${String(input)}`,
166
+ );
167
+ }
168
+ return value;
169
+ }
170
+
171
+ /**
172
+ * Format the distance between two instants as a localized relative phrase.
173
+ *
174
+ * Pure and deterministic: the output depends only on the arguments (the
175
+ * locale defaults to `"en"`, never the host default), which makes it safe
176
+ * for server rendering and hydration.
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * formatTimeAgo(Date.UTC(2026, 0, 1), Date.UTC(2026, 0, 2)); // "yesterday"
181
+ * formatTimeAgo(0, 90_000, { numeric: "always" }); // "2 minutes ago"
182
+ * ```
183
+ *
184
+ * @param time Instant being described.
185
+ * @param now Reference instant.
186
+ * @param options Locale, wording, unit, and threshold policy.
187
+ * @default options {}
188
+ * @throws `RangeError` tagged `VIZE_COMPOSE_TIME_AGO_INVALID_DATE` when
189
+ * either input is not a valid date, and `RangeError` from `Intl` for invalid
190
+ * locales.
191
+ * @returns The localized phrase.
192
+ */
193
+ export function formatTimeAgo(
194
+ time: TimeAgoInput,
195
+ now: TimeAgoInput,
196
+ options: FormatTimeAgoOptions = {},
197
+ ): string {
198
+ const target = toEpochMs(time);
199
+ const diff = target - toEpochMs(now);
200
+ const distance = Math.abs(diff);
201
+ const locales =
202
+ typeof options.locale === "string" ? options.locale : [...(options.locale ?? ["en"])];
203
+
204
+ if (distance >= (options.maxMs ?? Number.POSITIVE_INFINITY)) {
205
+ const date = new Date(target);
206
+ return options.fullDateFormatter === undefined
207
+ ? new Intl.DateTimeFormat(locales, { dateStyle: "medium", timeZone: "UTC" }).format(date)
208
+ : options.fullDateFormatter(date);
209
+ }
210
+
211
+ const allowed = allUnits.filter((unit) => (options.units ?? allUnits).includes(unit));
212
+ const smallest = allowed[0] ?? "second";
213
+ let unit = smallest;
214
+ for (const candidate of allowed) if (distance >= unitMs[candidate]) unit = candidate;
215
+
216
+ // Zero distance counts as past (`-0`), so "0 seconds ago" rather than "in 0 seconds".
217
+ const round = Math[options.rounding ?? "round"];
218
+ const magnitude = distance < (options.justNowMs ?? 0) ? 0 : round(distance / unitMs[unit]);
219
+ const formatter = new Intl.RelativeTimeFormat(locales, {
220
+ numeric: options.numeric ?? "auto",
221
+ style: options.style ?? "long",
222
+ });
223
+ return formatter.format(diff <= 0 ? -magnitude : magnitude, magnitude === 0 ? smallest : unit);
224
+ }
225
+
226
+ /**
227
+ * Reactive localized "time ago" phrase that refreshes on an interval.
228
+ *
229
+ * Combines {@link formatTimeAgo} with a pausable clock. For SSR, inject
230
+ * `initialNow` (the server render time) and a fixed `locale`: both sides
231
+ * then produce the same phrase and the client clock takes over on its first
232
+ * tick. No timer runs on the server; the timer stops with the owning scope.
233
+ *
234
+ * @example
235
+ * ```ts
236
+ * const phrase = useTimeAgo(() => post.value.createdAt, { locale: useLocale().locale });
237
+ * ```
238
+ *
239
+ * @param time Reactive instant being described.
240
+ * @param options Formatting, cadence, clock, and SSR policy.
241
+ * @default options {}
242
+ * @throws `RangeError` on read for invalid dates or locales, and for invalid
243
+ * update intervals at creation.
244
+ * @returns The phrase ref, or the full controls when `controls` is `true`.
245
+ */
246
+ export function useTimeAgo(
247
+ time: MaybeRefOrGetter<TimeAgoInput>,
248
+ options?: UseTimeAgoOptions<false>,
249
+ ): ComputedRef<string>;
250
+ export function useTimeAgo(
251
+ time: MaybeRefOrGetter<TimeAgoInput>,
252
+ options: UseTimeAgoOptions<true>,
253
+ ): TimeAgoControls;
254
+ export function useTimeAgo(
255
+ time: MaybeRefOrGetter<TimeAgoInput>,
256
+ options: UseTimeAgoOptions<boolean> = {},
257
+ ): ComputedRef<string> | TimeAgoControls {
258
+ const { timestamp, pause, resume, isActive } = useTimestamp({
259
+ interval: options.updateIntervalMs ?? 30_000,
260
+ controls: true,
261
+ runOnServer: options.runOnServer ?? false,
262
+ ...(options.now === undefined ? {} : { now: options.now }),
263
+ ...(options.initialNow === undefined ? {} : { initial: options.initialNow }),
264
+ ...(options.scheduler === undefined ? {} : { scheduler: options.scheduler }),
265
+ });
266
+
267
+ const timeAgo = computed(() =>
268
+ formatTimeAgo(toValue(time), timestamp.value, {
269
+ ...options,
270
+ locale: toValue(options.locale) ?? "en",
271
+ }),
272
+ );
273
+
274
+ if (options.controls !== true) return timeAgo;
275
+ return { timeAgo, now: timestamp, pause, resume, isActive };
276
+ }
@@ -0,0 +1,218 @@
1
+ import { computed, shallowRef, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+ import type { TimeoutScheduler } from "./timeout-scheduler.ts";
6
+
7
+ /** Options for {@link useTimeoutFn}. */
8
+ export interface UseTimeoutFnOptions {
9
+ /**
10
+ * Start the timer as soon as the composable is created. Only available
11
+ * for callbacks without arguments; pass `false` to schedule a callback
12
+ * that takes arguments through {@link TimeoutFnControls.start}.
13
+ *
14
+ * @default true
15
+ */
16
+ readonly immediate?: boolean;
17
+
18
+ /**
19
+ * Starts host timers when no browser `window` is available.
20
+ *
21
+ * Keep this disabled during server rendering: `isPending` then reports the
22
+ * requested state but no timer is created and the callback never runs.
23
+ *
24
+ * @default false
25
+ */
26
+ readonly runOnServer?: boolean;
27
+
28
+ /**
29
+ * Owns the single-shot timer.
30
+ *
31
+ * @default globalThis timer functions
32
+ */
33
+ readonly scheduler?: TimeoutScheduler;
34
+ }
35
+
36
+ /** Controls returned by {@link useTimeoutFn}. */
37
+ export interface TimeoutFnControls<Args extends readonly unknown[]> {
38
+ /** Whether a call is scheduled and has not fired or been stopped yet. */
39
+ readonly isPending: Readonly<ShallowRef<boolean>>;
40
+
41
+ /**
42
+ * (Re)start the timer. A pending call is replaced, and the callback later
43
+ * receives exactly these arguments.
44
+ */
45
+ readonly start: (...args: Args) => void;
46
+
47
+ /**
48
+ * Cancel the pending call.
49
+ *
50
+ * @returns Whether a pending call was cancelled.
51
+ */
52
+ readonly stop: () => boolean;
53
+ }
54
+
55
+ /** Options for {@link useTimeout}. */
56
+ export interface UseTimeoutOptions<Controls extends boolean = false> extends UseTimeoutFnOptions {
57
+ /**
58
+ * Return the full control object instead of the bare readiness ref.
59
+ *
60
+ * @default false
61
+ */
62
+ readonly controls?: Controls;
63
+
64
+ /**
65
+ * Invoked when the timeout elapses.
66
+ *
67
+ * @default undefined
68
+ */
69
+ readonly callback?: () => void;
70
+ }
71
+
72
+ /** Readiness and controls returned by `useTimeout(ms, { controls: true })`. */
73
+ export interface TimeoutControls extends TimeoutFnControls<[]> {
74
+ /** `true` once the timer elapsed or was stopped, `false` while pending. */
75
+ readonly ready: ComputedRef<boolean>;
76
+ }
77
+
78
+ const defaultScheduler: TimeoutScheduler = {
79
+ setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
80
+ clearTimeout: (handle) => {
81
+ globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>);
82
+ },
83
+ };
84
+
85
+ function resolveDelayMs(value: number): number {
86
+ if (!Number.isFinite(value) || value < 0) {
87
+ throw new RangeError(
88
+ `[VIZE_COMPOSE_TIMEOUT_INVALID_DELAY] delayMs must be finite and at least zero; received ${String(value)}`,
89
+ );
90
+ }
91
+ return Math.trunc(value);
92
+ }
93
+
94
+ /**
95
+ * Call a function once after a delay, with restart and cancel controls.
96
+ *
97
+ * The typing is arity-aware: a zero-argument callback may start
98
+ * immediately, while a callback with parameters requires
99
+ * `{ immediate: false }` so it can only ever run with arguments supplied to
100
+ * `start(...)`. `delayMs` is reactive and read on every `start`.
101
+ *
102
+ * Server rendering is hydration-stable: without a browser `window` (and with
103
+ * {@link UseTimeoutFnOptions.runOnServer} disabled) `isPending` reports the
104
+ * requested state but no timer is created. A pending timer is cleared when
105
+ * the owning reactive scope stops.
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const { start, stop } = useTimeoutFn((id: string) => save(id), 500, { immediate: false });
110
+ * start("draft-1");
111
+ * ```
112
+ *
113
+ * @param callback Invoked once the delay elapses.
114
+ * @param delayMs Reactive delay in milliseconds; finite and at least zero.
115
+ * @param options Start, server, and scheduler policy.
116
+ * @default options {}
117
+ * @throws `RangeError` tagged `VIZE_COMPOSE_TIMEOUT_INVALID_DELAY` for invalid
118
+ * delays, synchronously at creation and on every `start`.
119
+ * @returns Pending flag and start/stop controls.
120
+ */
121
+ export function useTimeoutFn(
122
+ callback: () => void,
123
+ delayMs: MaybeRefOrGetter<number>,
124
+ options?: UseTimeoutFnOptions,
125
+ ): TimeoutFnControls<[]>;
126
+ export function useTimeoutFn<Args extends readonly unknown[]>(
127
+ callback: (...args: Args) => void,
128
+ delayMs: MaybeRefOrGetter<number>,
129
+ options: UseTimeoutFnOptions & { readonly immediate: false },
130
+ ): TimeoutFnControls<Args>;
131
+ export function useTimeoutFn(
132
+ callback: (...args: readonly unknown[]) => void,
133
+ delayMs: MaybeRefOrGetter<number>,
134
+ options: UseTimeoutFnOptions = {},
135
+ ): TimeoutFnControls<readonly unknown[]> {
136
+ const scheduler = options.scheduler ?? defaultScheduler;
137
+ const isPending = shallowRef(false);
138
+ let handle: unknown;
139
+ let scheduled = false;
140
+
141
+ resolveDelayMs(toValue(delayMs));
142
+
143
+ const clear = (): void => {
144
+ if (!scheduled) return;
145
+ scheduled = false;
146
+ scheduler.clearTimeout(handle);
147
+ handle = undefined;
148
+ };
149
+
150
+ const stop = (): boolean => {
151
+ const wasPending = isPending.value;
152
+ isPending.value = false;
153
+ clear();
154
+ return wasPending;
155
+ };
156
+
157
+ const start = (...args: readonly unknown[]): void => {
158
+ const delay = resolveDelayMs(toValue(delayMs));
159
+ clear();
160
+ isPending.value = true;
161
+ if (typeof window === "undefined" && !(options.runOnServer ?? false)) return;
162
+ scheduled = true;
163
+ handle = scheduler.setTimeout(() => {
164
+ scheduled = false;
165
+ handle = undefined;
166
+ isPending.value = false;
167
+ callback(...args);
168
+ }, delay);
169
+ };
170
+
171
+ // Only the zero-argument overload may start immediately.
172
+ if (options.immediate ?? true) start();
173
+
174
+ tryOnScopeDispose(() => {
175
+ stop();
176
+ });
177
+
178
+ return { isPending, start, stop };
179
+ }
180
+
181
+ /**
182
+ * Reactive "has the delay elapsed yet?" flag.
183
+ *
184
+ * A wrapper over {@link useTimeoutFn}. Pass `{ controls: true }` to receive
185
+ * start/stop alongside the flag; the return type follows the literal flag.
186
+ * Stopping a pending timer marks it ready.
187
+ *
188
+ * @example
189
+ * ```ts
190
+ * const ready = useTimeout(300); // ComputedRef<boolean>
191
+ * const { ready: done, start } = useTimeout(300, { controls: true, immediate: false });
192
+ * ```
193
+ *
194
+ * @param delayMs Reactive delay in milliseconds.
195
+ * @param options Timeout options plus the `controls` flag.
196
+ * @default delayMs 1000
197
+ * @default options {}
198
+ * @throws `RangeError` tagged `VIZE_COMPOSE_TIMEOUT_INVALID_DELAY` for invalid
199
+ * delays (see {@link useTimeoutFn}).
200
+ * @returns The readiness ref, or the full controls when `controls` is `true`.
201
+ */
202
+ export function useTimeout(
203
+ delayMs?: MaybeRefOrGetter<number>,
204
+ options?: UseTimeoutOptions<false>,
205
+ ): ComputedRef<boolean>;
206
+ export function useTimeout(
207
+ delayMs: MaybeRefOrGetter<number>,
208
+ options: UseTimeoutOptions<true>,
209
+ ): TimeoutControls;
210
+ export function useTimeout(
211
+ delayMs: MaybeRefOrGetter<number> = 1_000,
212
+ options: UseTimeoutOptions<boolean> = {},
213
+ ): ComputedRef<boolean> | TimeoutControls {
214
+ const controls = useTimeoutFn(() => options.callback?.(), delayMs, options);
215
+ const ready = computed(() => !controls.isPending.value);
216
+ if (options.controls !== true) return ready;
217
+ return { ...controls, ready };
218
+ }
@@ -0,0 +1,54 @@
1
+ import { shallowRef } from "vue";
2
+ import type { Ref } from "vue";
3
+
4
+ /** Reactive controls returned by {@link useToggle}. */
5
+ export interface ToggleControls {
6
+ /**
7
+ * Owned boolean state.
8
+ *
9
+ * Deliberately writable: unlike the derived views elsewhere in this
10
+ * package, the toggle owns its state, so assigning the ref directly (for
11
+ * example through `v-model`) is equivalent to calling
12
+ * {@link ToggleControls.toggle} with a forced value.
13
+ */
14
+ readonly state: Ref<boolean>;
15
+
16
+ /**
17
+ * Invert the state, or force it to `force` when the argument is given.
18
+ * Passing an explicit `undefined` behaves like passing no argument.
19
+ *
20
+ * @param force Value assigned instead of inverting.
21
+ * @returns The state after the change.
22
+ */
23
+ readonly toggle: (force?: boolean) => boolean;
24
+ }
25
+
26
+ /**
27
+ * Create owned boolean state with an inverting control.
28
+ *
29
+ * Purely synchronous state: safe during server rendering (no browser
30
+ * globals, no timers) and nothing to dispose, so it works inside and
31
+ * outside reactive scopes alike.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const { state: open, toggle } = useToggle();
36
+ * toggle(); // true
37
+ * toggle(false); // false
38
+ * open.value; // false
39
+ * ```
40
+ *
41
+ * @param initial State before the first toggle.
42
+ * @default initial false
43
+ * @returns The writable state and its toggle control.
44
+ */
45
+ export function useToggle(initial = false): ToggleControls {
46
+ const state = shallowRef(initial);
47
+
48
+ const toggle = (force?: boolean): boolean => {
49
+ state.value = force ?? !state.value;
50
+ return state.value;
51
+ };
52
+
53
+ return { state, toggle };
54
+ }