@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,352 @@
1
+ import { toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, WatchHandle } from "vue";
3
+
4
+ import type { TimeoutScheduler } from "./timeout-scheduler.ts";
5
+
6
+ /** Options shared by every {@link until} matcher. */
7
+ export interface UntilOptions {
8
+ /**
9
+ * Reject when the condition is not met within this many milliseconds.
10
+ * `undefined` waits indefinitely (until the owning scope stops watching).
11
+ *
12
+ * @default undefined
13
+ */
14
+ readonly timeout?: number;
15
+
16
+ /**
17
+ * Abort the wait; the promise rejects with the signal's reason.
18
+ *
19
+ * @default undefined
20
+ */
21
+ readonly signal?: AbortSignal;
22
+
23
+ /**
24
+ * Watch flush timing. `"sync"` also works during server rendering.
25
+ *
26
+ * @default "sync"
27
+ */
28
+ readonly flush?: "pre" | "post" | "sync";
29
+
30
+ /**
31
+ * Watch nested properties of the value.
32
+ *
33
+ * @default false
34
+ */
35
+ readonly deep?: boolean;
36
+
37
+ /**
38
+ * Owns the timeout timer.
39
+ *
40
+ * @default globalThis timer functions
41
+ */
42
+ readonly scheduler?: TimeoutScheduler;
43
+ }
44
+
45
+ /** Error code carried by the rejection when an {@link until} wait times out. */
46
+ export type UntilTimeoutCode = "VIZE_COMPOSE_UNTIL_TIMEOUT";
47
+
48
+ /** Rejection reason used when an {@link until} wait times out. */
49
+ export interface UntilTimeoutError extends Error {
50
+ /** Stable machine-readable code. */
51
+ readonly code: UntilTimeoutCode;
52
+ }
53
+
54
+ /** Values treated as falsy by `toBeTruthy`. */
55
+ type UntilFalsy = false | 0 | 0n | "" | null | undefined;
56
+
57
+ /** Matchers that wait for the source to satisfy a condition. */
58
+ export interface UntilMatchers<Value> {
59
+ /**
60
+ * Resolve once the value satisfies the type guard, narrowing the result.
61
+ *
62
+ * @returns The narrowed value.
63
+ */
64
+ toMatch<Narrowed extends Value>(
65
+ condition: (value: Value) => value is Narrowed,
66
+ options?: UntilOptions,
67
+ ): Promise<Narrowed>;
68
+ /**
69
+ * Resolve once the value satisfies the predicate.
70
+ *
71
+ * @returns The matching value.
72
+ */
73
+ toMatch(condition: (value: Value) => boolean, options?: UntilOptions): Promise<Value>;
74
+
75
+ /**
76
+ * Resolve once the value is `Object.is`-equal to `expected` (itself
77
+ * possibly reactive).
78
+ *
79
+ * @returns The expected value.
80
+ */
81
+ toBe<const Expected extends Value>(
82
+ expected: MaybeRefOrGetter<Expected>,
83
+ options?: UntilOptions,
84
+ ): Promise<Expected>;
85
+
86
+ /**
87
+ * Resolve once the value is truthy.
88
+ *
89
+ * @returns The value without its falsy members.
90
+ */
91
+ toBeTruthy(options?: UntilOptions): Promise<Exclude<Value, UntilFalsy>>;
92
+
93
+ /**
94
+ * Resolve once the value is `null`.
95
+ *
96
+ * @returns `null`.
97
+ */
98
+ toBeNull(options?: UntilOptions): Promise<Extract<Value, null>>;
99
+
100
+ /**
101
+ * Resolve once the value is `undefined`.
102
+ *
103
+ * @returns `undefined`.
104
+ */
105
+ toBeUndefined(options?: UntilOptions): Promise<Extract<Value, undefined>>;
106
+
107
+ /**
108
+ * Resolve once the value is `NaN`.
109
+ *
110
+ * @returns `NaN`.
111
+ */
112
+ toBeNaN(options?: UntilOptions): Promise<Value>;
113
+
114
+ /**
115
+ * Resolve once an array or string value includes `element`.
116
+ *
117
+ * @returns The containing value.
118
+ */
119
+ toContain(
120
+ element: Value extends readonly (infer Element)[]
121
+ ? Element
122
+ : Value extends string
123
+ ? string
124
+ : never,
125
+ options?: UntilOptions,
126
+ ): Promise<Value>;
127
+
128
+ /**
129
+ * Resolve after the value changed once.
130
+ *
131
+ * @returns The new value.
132
+ */
133
+ changed(options?: UntilOptions): Promise<Value>;
134
+
135
+ /**
136
+ * Resolve after the value changed `count` times.
137
+ *
138
+ * @returns The value after the last counted change.
139
+ */
140
+ changedTimes(count: number, options?: UntilOptions): Promise<Value>;
141
+ }
142
+
143
+ /** Negated matchers available through {@link UntilChain.not}. */
144
+ export interface UntilNegatedMatchers<Value> {
145
+ /**
146
+ * Resolve once the value is no longer `Object.is`-equal to `unexpected`.
147
+ *
148
+ * @returns The value.
149
+ */
150
+ toBe(unexpected: MaybeRefOrGetter<Value>, options?: UntilOptions): Promise<Value>;
151
+
152
+ /**
153
+ * Resolve once the value is falsy.
154
+ *
155
+ * @returns The falsy value.
156
+ */
157
+ toBeTruthy(options?: UntilOptions): Promise<Extract<Value, UntilFalsy>>;
158
+
159
+ /**
160
+ * Resolve once the value is not `null`.
161
+ *
162
+ * @returns The value without `null`.
163
+ */
164
+ toBeNull(options?: UntilOptions): Promise<Exclude<Value, null>>;
165
+
166
+ /**
167
+ * Resolve once the value is not `undefined`.
168
+ *
169
+ * @returns The value without `undefined`.
170
+ */
171
+ toBeUndefined(options?: UntilOptions): Promise<Exclude<Value, undefined>>;
172
+
173
+ /**
174
+ * Resolve once the value no longer satisfies the predicate.
175
+ *
176
+ * @returns The value.
177
+ */
178
+ toMatch(condition: (value: Value) => boolean, options?: UntilOptions): Promise<Value>;
179
+ }
180
+
181
+ /** Fluent wait builder returned by {@link until}. */
182
+ export interface UntilChain<Value> extends UntilMatchers<Value> {
183
+ /** Inverted matchers. */
184
+ readonly not: UntilNegatedMatchers<Value>;
185
+ }
186
+
187
+ const defaultScheduler: TimeoutScheduler = {
188
+ setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
189
+ clearTimeout: (handle) => {
190
+ globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>);
191
+ },
192
+ };
193
+
194
+ function createTimeoutError(timeout: number): UntilTimeoutError {
195
+ return Object.assign(
196
+ new Error(`[VIZE_COMPOSE_UNTIL_TIMEOUT] condition not met within ${timeout}ms`),
197
+ {
198
+ code: "VIZE_COMPOSE_UNTIL_TIMEOUT" as const,
199
+ },
200
+ );
201
+ }
202
+
203
+ /**
204
+ * Await a reactive source reaching a condition.
205
+ *
206
+ * Every matcher resolves immediately when the current value already
207
+ * satisfies it (except `changed`/`changedTimes`), and otherwise watches the
208
+ * source (`flush: "sync"` by default, which also works inside server-side
209
+ * `setup`). Result types are narrowed by the matcher: `toBeTruthy()` strips
210
+ * falsy members, `not.toBeNull()` strips `null`, `toMatch(guard)` follows the
211
+ * guard. Because a timeout rejects (it never resolves with an unmatched
212
+ * value), the narrowing is always sound. Watchers and timers are released
213
+ * as soon as the promise settles.
214
+ *
215
+ * @example
216
+ * ```ts
217
+ * const user = await until(currentUser).not.toBeNull({ timeout: 5_000 });
218
+ * const ready = await until(status).toBe("ready");
219
+ * ```
220
+ *
221
+ * @param source Ref or getter to observe.
222
+ * @throws Returned promises reject with an {@link UntilTimeoutError} on
223
+ * timeout, with the abort reason when the signal aborts, and with a
224
+ * `RangeError` tagged `VIZE_COMPOSE_UNTIL_INVALID_OPTION` for a negative or
225
+ * non-finite timeout or change count.
226
+ * @returns The fluent matcher chain.
227
+ */
228
+ export function until<Value>(source: MaybeRefOrGetter<Value>): UntilChain<Value> {
229
+ const wait = <Result extends Value>(
230
+ matches: (value: Value) => value is Result,
231
+ options: UntilOptions,
232
+ checkInitial = true,
233
+ ): Promise<Result> =>
234
+ new Promise<Result>((resolve, reject) => {
235
+ const { timeout, signal, scheduler = defaultScheduler } = options;
236
+ if (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {
237
+ reject(
238
+ new RangeError(
239
+ `[VIZE_COMPOSE_UNTIL_INVALID_OPTION] timeout must be finite and at least zero; received ${String(timeout)}`,
240
+ ),
241
+ );
242
+ return;
243
+ }
244
+ if (signal?.aborted === true) {
245
+ reject(signal.reason);
246
+ return;
247
+ }
248
+
249
+ let handle: WatchHandle | undefined;
250
+ let timer: unknown;
251
+ let settled = false;
252
+ const onAbort = (): void => {
253
+ finish();
254
+ reject(signal?.reason);
255
+ };
256
+ const finish = (): void => {
257
+ settled = true;
258
+ handle?.stop();
259
+ if (timer !== undefined) scheduler.clearTimeout(timer);
260
+ signal?.removeEventListener("abort", onAbort);
261
+ };
262
+ const accept = (value: Value): void => {
263
+ if (settled || !matches(value)) return;
264
+ finish();
265
+ resolve(value);
266
+ };
267
+
268
+ if (checkInitial) accept(toValue(source));
269
+ if (settled) return;
270
+
271
+ handle = watch(() => toValue(source), accept, {
272
+ flush: options.flush ?? "sync",
273
+ deep: options.deep ?? false,
274
+ });
275
+ signal?.addEventListener("abort", onAbort, { once: true });
276
+ if (timeout !== undefined) {
277
+ timer = scheduler.setTimeout(() => {
278
+ finish();
279
+ reject(createTimeoutError(timeout));
280
+ }, timeout);
281
+ }
282
+ });
283
+
284
+ const any = (_value: Value): _value is Value => true;
285
+
286
+ const changedTimes = (count: number, options: UntilOptions = {}): Promise<Value> => {
287
+ if (!Number.isSafeInteger(count) || count < 1) {
288
+ return Promise.reject(
289
+ new RangeError(
290
+ `[VIZE_COMPOSE_UNTIL_INVALID_OPTION] count must be a positive integer; received ${String(count)}`,
291
+ ),
292
+ );
293
+ }
294
+ let seen = 0;
295
+ return wait(
296
+ (value): value is Value => {
297
+ seen += 1;
298
+ return seen >= count && any(value);
299
+ },
300
+ options,
301
+ false,
302
+ );
303
+ };
304
+
305
+ const includes = (value: Value, element: unknown): boolean =>
306
+ Array.isArray(value)
307
+ ? value.includes(element)
308
+ : typeof value === "string" && typeof element === "string" && value.includes(element);
309
+
310
+ function toMatch<Narrowed extends Value>(
311
+ condition: (value: Value) => value is Narrowed,
312
+ options?: UntilOptions,
313
+ ): Promise<Narrowed>;
314
+ function toMatch(condition: (value: Value) => boolean, options?: UntilOptions): Promise<Value>;
315
+ function toMatch(
316
+ condition: (value: Value) => boolean,
317
+ options: UntilOptions = {},
318
+ ): Promise<Value> {
319
+ return wait((value): value is Value => condition(value), options);
320
+ }
321
+
322
+ return {
323
+ toMatch,
324
+ toBe: <const Expected extends Value>(
325
+ expected: MaybeRefOrGetter<Expected>,
326
+ options: UntilOptions = {},
327
+ ) => wait((value): value is Expected => Object.is(value, toValue(expected)), options),
328
+ toBeTruthy: (options = {}) =>
329
+ wait((value): value is Exclude<Value, UntilFalsy> => Boolean(value), options),
330
+ toBeNull: (options = {}) =>
331
+ wait((value): value is Extract<Value, null> => value === null, options),
332
+ toBeUndefined: (options = {}) =>
333
+ wait((value): value is Extract<Value, undefined> => value === undefined, options),
334
+ toBeNaN: (options = {}) => wait((value): value is Value => Number.isNaN(value), options),
335
+ toContain: (element, options = {}) =>
336
+ wait((value): value is Value => includes(value, element), options),
337
+ changed: (options = {}) => changedTimes(1, options),
338
+ changedTimes,
339
+ not: {
340
+ toBe: (unexpected, options = {}) =>
341
+ wait((value): value is Value => !Object.is(value, toValue(unexpected)), options),
342
+ toBeTruthy: (options = {}) =>
343
+ wait((value): value is Extract<Value, UntilFalsy> => !value, options),
344
+ toBeNull: (options = {}) =>
345
+ wait((value): value is Exclude<Value, null> => value !== null, options),
346
+ toBeUndefined: (options = {}) =>
347
+ wait((value): value is Exclude<Value, undefined> => value !== undefined, options),
348
+ toMatch: (condition, options = {}) =>
349
+ wait((value): value is Value => !condition(value), options),
350
+ },
351
+ };
352
+ }
@@ -0,0 +1,201 @@
1
+ import { computed, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter } from "vue";
3
+
4
+ /** Callback shape shared by the reactive array helpers. */
5
+ export type ArrayCallback<Item, Result> = (
6
+ item: Item,
7
+ index: number,
8
+ array: readonly Item[],
9
+ ) => Result;
10
+
11
+ /**
12
+ * Reactive `Array.prototype.filter`. A type-guard predicate narrows the
13
+ * element type.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const active = useArrayFilter(users, (user) => user.active);
18
+ * ```
19
+ *
20
+ * @param list Reactive array.
21
+ * @param predicate Keeps items for which it returns `true`.
22
+ * @returns Computed filtered copy.
23
+ */
24
+ export function useArrayFilter<Item, Narrowed extends Item>(
25
+ list: MaybeRefOrGetter<readonly Item[]>,
26
+ predicate: (item: Item, index: number, array: readonly Item[]) => item is Narrowed,
27
+ ): ComputedRef<Narrowed[]>;
28
+ export function useArrayFilter<Item>(
29
+ list: MaybeRefOrGetter<readonly Item[]>,
30
+ predicate: ArrayCallback<Item, boolean>,
31
+ ): ComputedRef<Item[]>;
32
+ export function useArrayFilter<Item>(
33
+ list: MaybeRefOrGetter<readonly Item[]>,
34
+ predicate: ArrayCallback<Item, boolean>,
35
+ ): ComputedRef<Item[]> {
36
+ return computed(() => toValue(list).filter(predicate));
37
+ }
38
+
39
+ /**
40
+ * Reactive `Array.prototype.map`.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const names = useArrayMap(users, (user) => user.name);
45
+ * ```
46
+ *
47
+ * @param list Reactive array.
48
+ * @param mapper Produces the mapped item.
49
+ * @returns Computed mapped copy.
50
+ */
51
+ export function useArrayMap<Item, Mapped>(
52
+ list: MaybeRefOrGetter<readonly Item[]>,
53
+ mapper: ArrayCallback<Item, Mapped>,
54
+ ): ComputedRef<Mapped[]> {
55
+ return computed(() => toValue(list).map(mapper));
56
+ }
57
+
58
+ /**
59
+ * Reactive `Array.prototype.find`. A type-guard predicate narrows the
60
+ * result.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const admin = useArrayFind(users, (user) => user.role === "admin");
65
+ * ```
66
+ *
67
+ * @param list Reactive array.
68
+ * @param predicate Matches the wanted item.
69
+ * @returns Computed first match, or `undefined`.
70
+ */
71
+ export function useArrayFind<Item, Narrowed extends Item>(
72
+ list: MaybeRefOrGetter<readonly Item[]>,
73
+ predicate: (item: Item, index: number, array: readonly Item[]) => item is Narrowed,
74
+ ): ComputedRef<Narrowed | undefined>;
75
+ export function useArrayFind<Item>(
76
+ list: MaybeRefOrGetter<readonly Item[]>,
77
+ predicate: ArrayCallback<Item, boolean>,
78
+ ): ComputedRef<Item | undefined>;
79
+ export function useArrayFind<Item>(
80
+ list: MaybeRefOrGetter<readonly Item[]>,
81
+ predicate: ArrayCallback<Item, boolean>,
82
+ ): ComputedRef<Item | undefined> {
83
+ return computed(() => toValue(list).find(predicate));
84
+ }
85
+
86
+ /**
87
+ * Reactive `Array.prototype.reduce`.
88
+ *
89
+ * With an initial value the result has the accumulator type. Without one,
90
+ * the first item seeds the accumulator and an empty array yields
91
+ * `undefined` (instead of throwing like `reduce`).
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const total = useArrayReduce(cart, (sum, line) => sum + line.price, 0);
96
+ * ```
97
+ *
98
+ * @param list Reactive array.
99
+ * @param reducer Folds one item into the accumulator.
100
+ * @param initial Reactive initial accumulator.
101
+ * @returns Computed accumulated value.
102
+ */
103
+ export function useArrayReduce<Item, Accumulator>(
104
+ list: MaybeRefOrGetter<readonly Item[]>,
105
+ reducer: (
106
+ accumulator: Accumulator,
107
+ item: Item,
108
+ index: number,
109
+ array: readonly Item[],
110
+ ) => Accumulator,
111
+ initial: MaybeRefOrGetter<Accumulator>,
112
+ ): ComputedRef<Accumulator>;
113
+ export function useArrayReduce<Item>(
114
+ list: MaybeRefOrGetter<readonly Item[]>,
115
+ reducer: (accumulator: Item, item: Item, index: number, array: readonly Item[]) => Item,
116
+ ): ComputedRef<Item | undefined>;
117
+ export function useArrayReduce<Item>(
118
+ list: MaybeRefOrGetter<readonly Item[]>,
119
+ reducer: (accumulator: unknown, item: Item, index: number, array: readonly Item[]) => unknown,
120
+ ...initial: readonly [] | readonly [MaybeRefOrGetter<unknown>]
121
+ ): ComputedRef<unknown> {
122
+ return computed(() => {
123
+ const items = toValue(list);
124
+ const seeded = initial.length === 1;
125
+ if (!seeded && items.length === 0) return undefined;
126
+ let accumulator: unknown = seeded ? toValue(initial[0]) : items[0];
127
+ for (const [index, item] of items.entries()) {
128
+ if (seeded || index > 0) accumulator = reducer(accumulator, item, index, items);
129
+ }
130
+ return accumulator;
131
+ });
132
+ }
133
+
134
+ /**
135
+ * Reactive `Array.prototype.some`.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * const hasErrors = useArraySome(fields, (field) => field.error !== null);
140
+ * ```
141
+ *
142
+ * @param list Reactive array.
143
+ * @param predicate Condition tested per item.
144
+ * @returns Computed flag.
145
+ */
146
+ export function useArraySome<Item>(
147
+ list: MaybeRefOrGetter<readonly Item[]>,
148
+ predicate: ArrayCallback<Item, boolean>,
149
+ ): ComputedRef<boolean> {
150
+ return computed(() => toValue(list).some(predicate));
151
+ }
152
+
153
+ /**
154
+ * Reactive `Array.prototype.every`.
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * const allDone = useArrayEvery(tasks, (task) => task.done);
159
+ * ```
160
+ *
161
+ * @param list Reactive array.
162
+ * @param predicate Condition tested per item.
163
+ * @returns Computed flag.
164
+ */
165
+ export function useArrayEvery<Item>(
166
+ list: MaybeRefOrGetter<readonly Item[]>,
167
+ predicate: ArrayCallback<Item, boolean>,
168
+ ): ComputedRef<boolean> {
169
+ return computed(() => toValue(list).every(predicate));
170
+ }
171
+
172
+ /**
173
+ * Reactive de-duplication that keeps the first occurrence of each item.
174
+ *
175
+ * Without `isSame`, items are compared with `SameValueZero` (like `Set`) in
176
+ * linear time; with it, pairwise in quadratic time.
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * const tags = useArrayUnique(allTags);
181
+ * const people = useArrayUnique(rows, (left, right) => left.id === right.id);
182
+ * ```
183
+ *
184
+ * @param list Reactive array.
185
+ * @param isSame Custom equality.
186
+ * @returns Computed de-duplicated copy.
187
+ */
188
+ export function useArrayUnique<Item>(
189
+ list: MaybeRefOrGetter<readonly Item[]>,
190
+ isSame?: (left: Item, right: Item) => boolean,
191
+ ): ComputedRef<Item[]> {
192
+ return computed(() => {
193
+ const items = toValue(list);
194
+ if (isSame === undefined) return [...new Set(items)];
195
+ const unique: Item[] = [];
196
+ for (const item of items) {
197
+ if (!unique.some((kept) => isSame(kept, item))) unique.push(item);
198
+ }
199
+ return unique;
200
+ });
201
+ }