@vizejs/composable 0.426.3 → 0.428.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,147 @@
1
+ import { computed, shallowRef } from "vue";
2
+ import type { ComputedRef, ShallowRef } from "vue";
3
+
4
+ /** Options for {@link useCounter}. */
5
+ export interface UseCounterOptions {
6
+ /**
7
+ * Inclusive lower bound applied to every value the counter takes.
8
+ *
9
+ * @default Number.NEGATIVE_INFINITY
10
+ */
11
+ readonly min?: number;
12
+
13
+ /**
14
+ * Inclusive upper bound applied to every value the counter takes.
15
+ *
16
+ * @default Number.POSITIVE_INFINITY
17
+ */
18
+ readonly max?: number;
19
+ }
20
+
21
+ /** Reactive controls returned by {@link useCounter}. */
22
+ export interface CounterControls {
23
+ /** Current count. Changes only through the controls, never by assignment. */
24
+ readonly count: Readonly<ShallowRef<number>>;
25
+
26
+ /** Whether the count currently sits on the configured lower bound. */
27
+ readonly atMin: ComputedRef<boolean>;
28
+
29
+ /** Whether the count currently sits on the configured upper bound. */
30
+ readonly atMax: ComputedRef<boolean>;
31
+
32
+ /**
33
+ * Add `delta` (default `1`) to the count and clamp into the bounds.
34
+ *
35
+ * @param delta Amount added; may be negative or infinite.
36
+ * @returns The count after clamping.
37
+ */
38
+ readonly increment: (delta?: number) => number;
39
+
40
+ /**
41
+ * Subtract `delta` (default `1`) from the count and clamp into the bounds.
42
+ *
43
+ * @param delta Amount subtracted; may be negative or infinite.
44
+ * @returns The count after clamping.
45
+ */
46
+ readonly decrement: (delta?: number) => number;
47
+
48
+ /**
49
+ * Assign a value directly, clamped into the bounds.
50
+ *
51
+ * @returns The count after clamping.
52
+ */
53
+ readonly set: (value: number) => number;
54
+
55
+ /**
56
+ * Restore the reset baseline, or establish a new one.
57
+ *
58
+ * Without an argument the count returns to the creation-time initial value
59
+ * (after its original clamping). With an argument, the clamped value
60
+ * becomes both the new count and the baseline used by later `reset()`
61
+ * calls.
62
+ *
63
+ * @param value Replacement baseline.
64
+ * @returns The count after clamping.
65
+ */
66
+ readonly reset: (value?: number) => number;
67
+ }
68
+
69
+ /**
70
+ * Create a clamped counter whose every transition stays inside `[min, max]`.
71
+ *
72
+ * All operations clamp instead of failing, including the initial value, so
73
+ * the count is inside the bounds at every observable moment. Only `NaN` is
74
+ * rejected — silently corrupting the count is never an option. Purely
75
+ * synchronous state: safe during server rendering (no browser globals, no
76
+ * timers) and nothing to dispose, so it works inside and outside reactive
77
+ * scopes alike. Bounds are fixed at creation and not reactive.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const { count, increment, atMax } = useCounter(9, { min: 0, max: 10 });
82
+ * increment(); // 10
83
+ * increment(); // 10 (clamped)
84
+ * atMax.value; // true
85
+ * ```
86
+ *
87
+ * @param initial Count before any operation, clamped into the bounds.
88
+ * @default initial 0
89
+ * @param options Inclusive bounds for every value the counter takes.
90
+ * @default options {}
91
+ * @throws `RangeError` tagged `VIZE_COMPOSE_COUNTER_INVALID_RANGE` when a
92
+ * bound is `NaN` or `min` exceeds `max`.
93
+ * @throws `RangeError` tagged `VIZE_COMPOSE_COUNTER_INVALID_VALUE` when an
94
+ * initial value, operand, or arithmetic result is `NaN` (for example
95
+ * incrementing `-Infinity` by `Infinity`); the count is left unchanged.
96
+ * @returns Reactive count, bound flags, and mutation controls.
97
+ */
98
+ export function useCounter(initial = 0, options: UseCounterOptions = {}): CounterControls {
99
+ const min = requireBound(options.min ?? Number.NEGATIVE_INFINITY, "min");
100
+ const max = requireBound(options.max ?? Number.POSITIVE_INFINITY, "max");
101
+ if (min > max) {
102
+ throw new RangeError(
103
+ `[VIZE_COMPOSE_COUNTER_INVALID_RANGE] min must not exceed max; received min ${String(min)} and max ${String(max)}`,
104
+ );
105
+ }
106
+
107
+ const clamp = (value: number): number => Math.min(max, Math.max(min, value));
108
+ const count = shallowRef(clamp(requireValue(initial)));
109
+ let baseline = count.value;
110
+
111
+ const setClamped = (next: number): number => {
112
+ count.value = clamp(requireValue(next));
113
+ return count.value;
114
+ };
115
+
116
+ const reset = (value?: number): number => {
117
+ const applied = setClamped(value ?? baseline);
118
+ if (value !== undefined) baseline = applied;
119
+ return applied;
120
+ };
121
+
122
+ return {
123
+ count,
124
+ atMin: computed(() => count.value === min),
125
+ atMax: computed(() => count.value === max),
126
+ increment: (delta = 1) => setClamped(count.value + requireValue(delta)),
127
+ decrement: (delta = 1) => setClamped(count.value - requireValue(delta)),
128
+ set: setClamped,
129
+ reset,
130
+ };
131
+ }
132
+
133
+ function requireBound(value: number, label: "min" | "max"): number {
134
+ if (Number.isNaN(value)) {
135
+ throw new RangeError(`[VIZE_COMPOSE_COUNTER_INVALID_RANGE] ${label} must not be NaN`);
136
+ }
137
+ return value;
138
+ }
139
+
140
+ function requireValue(value: number): number {
141
+ if (Number.isNaN(value)) {
142
+ throw new RangeError(
143
+ "[VIZE_COMPOSE_COUNTER_INVALID_VALUE] the value is NaN; counter state was left unchanged",
144
+ );
145
+ }
146
+ return value;
147
+ }
@@ -0,0 +1,191 @@
1
+ import { computed, ref, toValue, watch } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ /** Style declaration subset used by {@link useCssVar}. */
5
+ export interface CssVarStyle {
6
+ /** Read a property value. */
7
+ getPropertyValue(name: string): string;
8
+
9
+ /** Write a property value. */
10
+ setProperty(name: string, value: string | null): void;
11
+
12
+ /** Remove a property. */
13
+ removeProperty(name: string): string;
14
+ }
15
+
16
+ /** Element subset used by {@link useCssVar}. */
17
+ export interface CssVarTarget {
18
+ /** Inline style declaration. */
19
+ readonly style: CssVarStyle;
20
+ }
21
+
22
+ /** Minimal `MutationObserver` instance. */
23
+ export interface CssVarObserver {
24
+ /** Start observing `target`. */
25
+ observe(target: CssVarTarget, options: { attributes: true; attributeFilter: string[] }): void;
26
+
27
+ /** Stop observing. */
28
+ disconnect(): void;
29
+ }
30
+
31
+ /** Capabilities used by {@link useCssVar}. */
32
+ export interface CssVarHost {
33
+ /** Resolved (computed) style of a target. */
34
+ getComputedStyle(target: CssVarTarget): Pick<CssVarStyle, "getPropertyValue">;
35
+
36
+ /** Target used when none is given (the document root element). */
37
+ readonly documentElement: CssVarTarget;
38
+
39
+ /** Observer factory used when `observe` is enabled. */
40
+ readonly createObserver?: (callback: () => void) => CssVarObserver;
41
+ }
42
+
43
+ /** Options for {@link useCssVar}. */
44
+ export interface UseCssVarOptions {
45
+ /**
46
+ * Value used while the variable is unset and during server rendering.
47
+ *
48
+ * @default ""
49
+ */
50
+ readonly initialValue?: string;
51
+
52
+ /**
53
+ * Re-read the variable when the target's `style` or `class` attribute
54
+ * changes (MutationObserver).
55
+ *
56
+ * @default false
57
+ */
58
+ readonly observe?: boolean;
59
+
60
+ /**
61
+ * Style capability for alternate runtimes and tests.
62
+ *
63
+ * @default window.getComputedStyle, document.documentElement, and MutationObserver
64
+ */
65
+ readonly host?: MaybeRefOrGetter<CssVarHost | null | undefined>;
66
+ }
67
+
68
+ /** Reactive state returned by {@link useCssVar}. */
69
+ export interface CssVarControls {
70
+ /** Writable variable value; assignments are written as inline style. */
71
+ readonly value: Ref<string>;
72
+
73
+ /** Whether a style capability and target are attached. */
74
+ readonly supported: ComputedRef<boolean>;
75
+ }
76
+
77
+ function browserCssVarHost(): CssVarHost | undefined {
78
+ if (typeof window === "undefined") return undefined;
79
+ const view = window;
80
+ return {
81
+ getComputedStyle: (target) =>
82
+ target instanceof view.Element ? view.getComputedStyle(target) : target.style,
83
+ documentElement: view.document.documentElement,
84
+ createObserver: (callback) => {
85
+ const observer = new view.MutationObserver(callback);
86
+ return {
87
+ observe: (target, init) => {
88
+ if (target instanceof view.Node) observer.observe(target, init);
89
+ },
90
+ disconnect: () => observer.disconnect(),
91
+ };
92
+ },
93
+ };
94
+ }
95
+
96
+ function assertVariableName(name: string): void {
97
+ if (!name.startsWith("--")) {
98
+ throw new TypeError(
99
+ `[VIZE_COMPOSE_CSS_VAR_INVALID_NAME] custom property names must start with "--"; received ${JSON.stringify(name)}`,
100
+ );
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Read and write a CSS custom property reactively.
106
+ *
107
+ * The value is read from the target's computed style whenever the
108
+ * reactive name, target, or host changes (and, with `observe`, when its
109
+ * `style`/`class` attribute changes). Assigning `value` writes an inline
110
+ * `style.setProperty`; assigning `""` removes the inline declaration. Values
111
+ * read from the element are never written back, so a stylesheet-provided
112
+ * variable is not frozen into inline style.
113
+ *
114
+ * Server rendering: nothing is read or written; `value` holds
115
+ * `initialValue`. Keep server markup and the first client render identical
116
+ * by rendering from `initialValue` until mounted. The observer and
117
+ * watchers are released with the owning reactive scope.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const accent = useCssVar("--accent", rootRef, { initialValue: "#0af" });
122
+ * accent.value.value = "#f60";
123
+ * ```
124
+ *
125
+ * @param name Reactive custom property name, starting with `--`.
126
+ * @param target Reactive element; defaults to the document root element.
127
+ * @param options Initial value, observation, and capability.
128
+ * @default options {}
129
+ * @returns The writable variable value.
130
+ * @throws {TypeError} `[VIZE_COMPOSE_CSS_VAR_INVALID_NAME]` when the name does not start with `--`.
131
+ */
132
+ export function useCssVar(
133
+ name: MaybeRefOrGetter<string>,
134
+ target?: MaybeRefOrGetter<CssVarTarget | null | undefined>,
135
+ options: UseCssVarOptions = {},
136
+ ): CssVarControls {
137
+ const initialValue = options.initialValue ?? "";
138
+ assertVariableName(toValue(name));
139
+ const value = ref(initialValue);
140
+ let lastRead: string | undefined;
141
+
142
+ const resolveHost = (): CssVarHost | undefined =>
143
+ options.host === undefined ? browserCssVarHost() : (toValue(options.host) ?? undefined);
144
+ const resolveTarget = (host: CssVarHost | undefined): CssVarTarget | undefined => {
145
+ if (!host) return undefined;
146
+ return target === undefined ? host.documentElement : (toValue(target) ?? undefined);
147
+ };
148
+
149
+ const read = (host: CssVarHost, element: CssVarTarget, variable: string): void => {
150
+ const current = host.getComputedStyle(element).getPropertyValue(variable).trim();
151
+ const next = current === "" ? initialValue : current;
152
+ lastRead = next;
153
+ value.value = next;
154
+ };
155
+
156
+ watch(
157
+ () => {
158
+ const host = resolveHost();
159
+ return [host, resolveTarget(host), toValue(name)] as const;
160
+ },
161
+ ([host, element, variable], _previous, onCleanup) => {
162
+ assertVariableName(variable);
163
+ if (!host || !element) return;
164
+ read(host, element, variable);
165
+ if (!(options.observe ?? false) || !host.createObserver) return;
166
+ const observer = host.createObserver(() => read(host, element, variable));
167
+ observer.observe(element, { attributes: true, attributeFilter: ["style", "class"] });
168
+ onCleanup(() => observer.disconnect());
169
+ },
170
+ { immediate: true, flush: "sync" },
171
+ );
172
+
173
+ watch(
174
+ value,
175
+ (next) => {
176
+ if (next === lastRead) return;
177
+ lastRead = undefined;
178
+ const element = resolveTarget(resolveHost());
179
+ if (!element) return;
180
+ const variable = toValue(name);
181
+ if (next === "") element.style.removeProperty(variable);
182
+ else element.style.setProperty(variable, next);
183
+ },
184
+ { flush: "sync" },
185
+ );
186
+
187
+ return {
188
+ value,
189
+ supported: computed(() => resolveTarget(resolveHost()) !== undefined),
190
+ };
191
+ }
@@ -0,0 +1,136 @@
1
+ import { computed, shallowRef, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, ShallowRef, WritableComputedRef } from "vue";
3
+
4
+ /** Options for {@link useCycleList}. */
5
+ export interface UseCycleListOptions<Item> {
6
+ /**
7
+ * Item selected initially.
8
+ *
9
+ * @default the first item
10
+ */
11
+ readonly initialValue?: Item;
12
+
13
+ /**
14
+ * Index used when the current item is not in the list.
15
+ *
16
+ * @default 0
17
+ */
18
+ readonly fallbackIndex?: number;
19
+
20
+ /**
21
+ * Locate an item in the list, for example by id.
22
+ *
23
+ * @default Array.prototype.indexOf
24
+ */
25
+ readonly getIndexOf?: (item: Item, list: readonly Item[]) => number;
26
+ }
27
+
28
+ /** Cursor over a list returned by {@link useCycleList}. */
29
+ export interface CycleList<Current, Item> {
30
+ /** Current item. Writable: assigning moves the cursor to that item. */
31
+ readonly state: ShallowRef<Current>;
32
+
33
+ /** Current index. Writable: assigning wraps around the list. */
34
+ readonly index: WritableComputedRef<number>;
35
+
36
+ /**
37
+ * Move forward `steps` items (default `1`), wrapping around.
38
+ *
39
+ * @returns The new current item.
40
+ */
41
+ readonly next: (steps?: number) => Current;
42
+
43
+ /**
44
+ * Move backward `steps` items (default `1`), wrapping around.
45
+ *
46
+ * @returns The new current item.
47
+ */
48
+ readonly prev: (steps?: number) => Current;
49
+
50
+ /**
51
+ * Jump to `index`, wrapping around.
52
+ *
53
+ * @returns The new current item.
54
+ */
55
+ readonly go: (index: number) => Current;
56
+
57
+ /** The list items, for convenience. */
58
+ readonly list: Readonly<ShallowRef<readonly Item[]>>;
59
+ }
60
+
61
+ /**
62
+ * Cycle through a list with wrap-around navigation.
63
+ *
64
+ * Non-empty tuple sources (`["light", "dark", "system"] as const`) yield a
65
+ * `state` typed as the element union; general arrays may be empty, so their
66
+ * `state` includes `undefined`. When the list changes, the cursor keeps the
67
+ * current item if it is still present and otherwise moves to
68
+ * `fallbackIndex`. Synchronous state: SSR-safe; the list watcher follows the
69
+ * owning scope.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const { state, next } = useCycleList(["light", "dark", "system"] as const);
74
+ * next(); // "dark"
75
+ * ```
76
+ *
77
+ * @param list Reactive list to cycle through.
78
+ * @param options Initial item, fallback index, and item lookup.
79
+ * @default options {}
80
+ * @returns The cursor and navigation controls.
81
+ */
82
+ export function useCycleList<const List extends readonly [unknown, ...unknown[]]>(
83
+ list: MaybeRefOrGetter<List>,
84
+ options?: UseCycleListOptions<List[number]>,
85
+ ): CycleList<List[number], List[number]>;
86
+ export function useCycleList<Item>(
87
+ list: MaybeRefOrGetter<readonly Item[]>,
88
+ options?: UseCycleListOptions<Item>,
89
+ ): CycleList<Item | undefined, Item>;
90
+ export function useCycleList<Item>(
91
+ list: MaybeRefOrGetter<readonly Item[]>,
92
+ options: UseCycleListOptions<Item> = {},
93
+ ): CycleList<Item | undefined, Item> {
94
+ const items = computed(() => toValue(list));
95
+ const locate = options.getIndexOf ?? ((item: Item, all: readonly Item[]) => all.indexOf(item));
96
+ const state = shallowRef<Item | undefined>(
97
+ "initialValue" in options ? options.initialValue : items.value[0],
98
+ );
99
+
100
+ const wrap = (index: number): number => {
101
+ const length = items.value.length;
102
+ return length === 0 ? 0 : ((Math.trunc(index) % length) + length) % length;
103
+ };
104
+
105
+ const index = computed<number>({
106
+ get: () => {
107
+ const current = state.value;
108
+ const found = current === undefined ? -1 : locate(current, items.value);
109
+ return found === -1 ? wrap(options.fallbackIndex ?? 0) : found;
110
+ },
111
+ set: (next) => {
112
+ state.value = items.value[wrap(next)];
113
+ },
114
+ });
115
+
116
+ const go = (target: number): Item | undefined => {
117
+ index.value = target;
118
+ return state.value;
119
+ };
120
+
121
+ watch(items, () => {
122
+ const current = state.value;
123
+ if (current === undefined || locate(current, items.value) === -1) {
124
+ state.value = items.value[wrap(options.fallbackIndex ?? 0)];
125
+ }
126
+ });
127
+
128
+ return {
129
+ state,
130
+ index,
131
+ next: (steps = 1) => go(index.value + steps),
132
+ prev: (steps = 1) => go(index.value - steps),
133
+ go,
134
+ list: items,
135
+ };
136
+ }