@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,413 @@
1
+ import {
2
+ computed,
3
+ hasInjectionContext,
4
+ readonly,
5
+ ref,
6
+ shallowReadonly,
7
+ shallowRef,
8
+ toValue,
9
+ watch,
10
+ watchPostEffect,
11
+ } from "vue";
12
+ import type { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
13
+
14
+ import { tryOnScopeDispose } from "./scope.ts";
15
+
16
+ /** Lifecycle states of a service worker. */
17
+ export type ServiceWorkerStateName =
18
+ | "parsed"
19
+ | "installing"
20
+ | "installed"
21
+ | "activating"
22
+ | "activated"
23
+ | "redundant";
24
+
25
+ /** Minimal `ServiceWorker` consumed by {@link useServiceWorker}. */
26
+ export interface ServiceWorkerLike extends EventTarget {
27
+ /** Current lifecycle state; changes fire `statechange`. */
28
+ readonly state: ServiceWorkerStateName;
29
+
30
+ /** Post a message to the worker. */
31
+ postMessage(message: unknown): void;
32
+ }
33
+
34
+ /** Minimal `ServiceWorkerRegistration` consumed by {@link useServiceWorker}. */
35
+ export interface ServiceWorkerRegistrationLike extends EventTarget {
36
+ /** Worker being installed, if any; a new one fires `updatefound`. */
37
+ readonly installing: ServiceWorkerLike | null;
38
+
39
+ /** Installed worker waiting to take over, if any. */
40
+ readonly waiting: ServiceWorkerLike | null;
41
+
42
+ /** Active worker, if any. */
43
+ readonly active: ServiceWorkerLike | null;
44
+
45
+ /** Registration scope URL. */
46
+ readonly scope: string;
47
+
48
+ /** Check the server for an updated script. */
49
+ update(): Promise<unknown>;
50
+
51
+ /** Unregister; resolves whether the registration was removed. */
52
+ unregister(): Promise<boolean>;
53
+ }
54
+
55
+ /** Options forwarded to `ServiceWorkerContainer.register`. */
56
+ export interface ServiceWorkerRegisterOptions {
57
+ /**
58
+ * Registration scope.
59
+ *
60
+ * @default the script's directory
61
+ */
62
+ readonly scope?: string;
63
+
64
+ /**
65
+ * Script type.
66
+ *
67
+ * @default "classic"
68
+ */
69
+ readonly type?: "classic" | "module";
70
+
71
+ /**
72
+ * HTTP cache policy for update checks.
73
+ *
74
+ * @default "imports"
75
+ */
76
+ readonly updateViaCache?: "imports" | "all" | "none";
77
+ }
78
+
79
+ /** Minimal `ServiceWorkerContainer` (`navigator.serviceWorker`). */
80
+ export interface ServiceWorkerContainerLike extends EventTarget {
81
+ /** Worker controlling this page; changes fire `controllerchange`. */
82
+ readonly controller: ServiceWorkerLike | null;
83
+
84
+ /** Register a service worker script. */
85
+ register(
86
+ scriptUrl: string | URL,
87
+ options?: ServiceWorkerRegisterOptions,
88
+ ): Promise<ServiceWorkerRegistrationLike>;
89
+ }
90
+
91
+ /** States of the registration's workers (`null` when absent). */
92
+ export interface ServiceWorkerStates {
93
+ /** State of the installing worker. */
94
+ readonly installing: ServiceWorkerStateName | null;
95
+
96
+ /** State of the waiting worker. */
97
+ readonly waiting: ServiceWorkerStateName | null;
98
+
99
+ /** State of the active worker. */
100
+ readonly active: ServiceWorkerStateName | null;
101
+ }
102
+
103
+ /** Options for {@link useServiceWorker}. */
104
+ export interface UseServiceWorkerOptions {
105
+ /**
106
+ * Service worker container for alternate runtimes and tests.
107
+ *
108
+ * @default window.navigator.serviceWorker when it exists
109
+ */
110
+ readonly container?: MaybeRefOrGetter<ServiceWorkerContainerLike | null | undefined>;
111
+
112
+ /**
113
+ * Registration scope.
114
+ *
115
+ * @default undefined (the script's directory)
116
+ */
117
+ readonly scope?: string;
118
+
119
+ /**
120
+ * Script type.
121
+ *
122
+ * @default "classic"
123
+ */
124
+ readonly type?: "classic" | "module";
125
+
126
+ /**
127
+ * HTTP cache policy for update checks.
128
+ *
129
+ * @default "imports"
130
+ */
131
+ readonly updateViaCache?: "imports" | "all" | "none";
132
+
133
+ /**
134
+ * Register as soon as the composable is created (browser only).
135
+ *
136
+ * @default true
137
+ */
138
+ readonly immediate?: boolean;
139
+
140
+ /**
141
+ * Message posted to the waiting worker by `skipWaiting()`.
142
+ *
143
+ * @default { type: "SKIP_WAITING" }
144
+ */
145
+ readonly skipWaitingMessage?: unknown;
146
+
147
+ /**
148
+ * Called on `controllerchange` (for example to reload the page after a
149
+ * new worker took control).
150
+ *
151
+ * @default undefined
152
+ */
153
+ readonly onControllerChange?: (controller: ServiceWorkerLike | null) => void;
154
+ }
155
+
156
+ /** Reactive state and actions returned by {@link useServiceWorker}. */
157
+ export interface ServiceWorkerControls {
158
+ /** Whether the Service Worker API is available. */
159
+ readonly supported: ComputedRef<boolean>;
160
+
161
+ /** Current registration, or `null` before registering. */
162
+ readonly registration: Readonly<ShallowRef<ServiceWorkerRegistrationLike | null>>;
163
+
164
+ /** States of the installing, waiting and active workers. */
165
+ readonly state: Readonly<Ref<ServiceWorkerStates>>;
166
+
167
+ /** Whether a waiting worker is ready to replace the controlling one. */
168
+ readonly updateAvailable: ComputedRef<boolean>;
169
+
170
+ /** Most recent failure, cleared by the next successful action. */
171
+ readonly error: Readonly<ShallowRef<unknown>>;
172
+
173
+ /**
174
+ * Register (or re-register) the script.
175
+ *
176
+ * @returns The registration, or `null` when unsupported or on failure.
177
+ */
178
+ readonly register: () => Promise<ServiceWorkerRegistrationLike | null>;
179
+
180
+ /**
181
+ * Check the server for an updated script.
182
+ *
183
+ * @returns Whether the check ran without failing.
184
+ */
185
+ readonly update: () => Promise<boolean>;
186
+
187
+ /**
188
+ * Post the skip-waiting message to the waiting worker.
189
+ *
190
+ * @returns Whether a waiting worker received the message.
191
+ */
192
+ readonly skipWaiting: () => boolean;
193
+
194
+ /**
195
+ * Unregister the service worker.
196
+ *
197
+ * @returns Whether the registration was removed.
198
+ */
199
+ readonly unregister: () => Promise<boolean>;
200
+ }
201
+
202
+ const emptyStates: ServiceWorkerStates = { installing: null, waiting: null, active: null };
203
+
204
+ function browserContainer(): ServiceWorkerContainerLike | undefined {
205
+ if (typeof window === "undefined") return undefined;
206
+ const { navigator } = window;
207
+ return "serviceWorker" in navigator && navigator.serviceWorker
208
+ ? navigator.serviceWorker
209
+ : undefined;
210
+ }
211
+
212
+ /**
213
+ * Register a service worker and follow its update lifecycle.
214
+ *
215
+ * Tracks `updatefound` and each worker's `statechange` so `state` mirrors
216
+ * the installing, waiting and active workers. `updateAvailable` turns true
217
+ * once an installed worker waits while another one controls the page;
218
+ * `skipWaiting()` then posts the configured message to it, and
219
+ * `onControllerChange` runs once it takes control. Listeners are removed
220
+ * when the owning reactive scope stops; outside a scope they live as long as
221
+ * the registration.
222
+ *
223
+ * Server rendering: nothing is registered, `supported` is false and every
224
+ * state is `null`.
225
+ *
226
+ * @example
227
+ * ```ts
228
+ * const sw = useServiceWorker("/sw.js", {
229
+ * onControllerChange: () => window.location.reload(),
230
+ * });
231
+ * const applyUpdate = () => sw.skipWaiting();
232
+ * ```
233
+ *
234
+ * @param scriptUrl Service worker script URL.
235
+ * @param options Container override, registration options and update hooks.
236
+ * @default options {}
237
+ * @returns Registration state and actions.
238
+ */
239
+ export function useServiceWorker(
240
+ scriptUrl: MaybeRefOrGetter<string | URL>,
241
+ options: UseServiceWorkerOptions = {},
242
+ ): ServiceWorkerControls {
243
+ const registration = shallowRef<ServiceWorkerRegistrationLike | null>(null);
244
+ const state = ref<ServiceWorkerStates>(emptyStates);
245
+ const controller = shallowRef<ServiceWorkerLike | null>(null);
246
+ const error = shallowRef<unknown>(undefined);
247
+ const watched = new Set<ServiceWorkerLike>();
248
+ let active = true;
249
+
250
+ // Inside a component the host resolves only after mount (a post-flush
251
+ // job), so a hydrating client first renders the same unsupported state as
252
+ // the server. Outside components it resolves immediately.
253
+ const hydrated = shallowRef(!hasInjectionContext());
254
+ if (!hydrated.value) {
255
+ watchPostEffect(() => {
256
+ hydrated.value = true;
257
+ });
258
+ }
259
+ const resolveContainer = (): ServiceWorkerContainerLike | undefined =>
260
+ !hydrated.value
261
+ ? undefined
262
+ : options.container === undefined
263
+ ? browserContainer()
264
+ : (toValue(options.container) ?? undefined);
265
+
266
+ const sync = (): void => {
267
+ const current = registration.value;
268
+ if (!current) {
269
+ state.value = emptyStates;
270
+ return;
271
+ }
272
+ for (const worker of [current.installing, current.waiting, current.active]) {
273
+ if (worker && !watched.has(worker)) {
274
+ watched.add(worker);
275
+ worker.addEventListener("statechange", sync);
276
+ }
277
+ }
278
+ state.value = {
279
+ installing: current.installing?.state ?? null,
280
+ waiting: current.waiting?.state ?? null,
281
+ active: current.active?.state ?? null,
282
+ };
283
+ };
284
+
285
+ const unwatchWorkers = (): void => {
286
+ for (const worker of watched) worker.removeEventListener("statechange", sync);
287
+ watched.clear();
288
+ };
289
+
290
+ watch(
291
+ registration,
292
+ (current, _previous, onCleanup) => {
293
+ sync();
294
+ if (!current) return;
295
+ current.addEventListener("updatefound", sync);
296
+ onCleanup(() => {
297
+ current.removeEventListener("updatefound", sync);
298
+ unwatchWorkers();
299
+ });
300
+ },
301
+ { flush: "sync" },
302
+ );
303
+
304
+ watch(
305
+ resolveContainer,
306
+ (container, _previous, onCleanup) => {
307
+ controller.value = container?.controller ?? null;
308
+ if (!container) return;
309
+ const onChange = (): void => {
310
+ controller.value = container.controller;
311
+ sync();
312
+ options.onControllerChange?.(container.controller);
313
+ };
314
+ container.addEventListener("controllerchange", onChange);
315
+ onCleanup(() => container.removeEventListener("controllerchange", onChange));
316
+ },
317
+ { immediate: true, flush: "sync" },
318
+ );
319
+
320
+ const register = async (): Promise<ServiceWorkerRegistrationLike | null> => {
321
+ const container = resolveContainer();
322
+ if (!container) return null;
323
+ const registerOptions: {
324
+ scope?: string;
325
+ type?: "classic" | "module";
326
+ updateViaCache?: "imports" | "all" | "none";
327
+ } = {};
328
+ if (options.scope !== undefined) registerOptions.scope = options.scope;
329
+ if (options.type !== undefined) registerOptions.type = options.type;
330
+ if (options.updateViaCache !== undefined) {
331
+ registerOptions.updateViaCache = options.updateViaCache;
332
+ }
333
+ try {
334
+ const next = await container.register(toValue(scriptUrl), registerOptions);
335
+ if (!active) return next;
336
+ registration.value = next;
337
+ error.value = undefined;
338
+ return next;
339
+ } catch (cause) {
340
+ if (active) error.value = cause;
341
+ return null;
342
+ }
343
+ };
344
+
345
+ const update = async (): Promise<boolean> => {
346
+ const current = registration.value;
347
+ if (!current) return false;
348
+ try {
349
+ await current.update();
350
+ error.value = undefined;
351
+ sync();
352
+ return true;
353
+ } catch (cause) {
354
+ error.value = cause;
355
+ return false;
356
+ }
357
+ };
358
+
359
+ const skipWaiting = (): boolean => {
360
+ const waiting = registration.value?.waiting;
361
+ if (!waiting) return false;
362
+ waiting.postMessage(
363
+ "skipWaitingMessage" in options ? options.skipWaitingMessage : { type: "SKIP_WAITING" },
364
+ );
365
+ return true;
366
+ };
367
+
368
+ const unregister = async (): Promise<boolean> => {
369
+ const current = registration.value;
370
+ if (!current) return false;
371
+ try {
372
+ const removed = await current.unregister();
373
+ if (removed) registration.value = null;
374
+ error.value = undefined;
375
+ return removed;
376
+ } catch (cause) {
377
+ error.value = cause;
378
+ return false;
379
+ }
380
+ };
381
+
382
+ if (options.immediate ?? true) {
383
+ // Register once, as soon as a container resolves (after mount inside a
384
+ // component).
385
+ let registered = false;
386
+ watch(
387
+ () => resolveContainer() !== undefined,
388
+ (ready) => {
389
+ if (!ready || registered) return;
390
+ registered = true;
391
+ void register();
392
+ },
393
+ { immediate: true, flush: "sync" },
394
+ );
395
+ }
396
+
397
+ tryOnScopeDispose(() => {
398
+ active = false;
399
+ registration.value = null;
400
+ });
401
+
402
+ return {
403
+ supported: computed(() => resolveContainer() !== undefined),
404
+ registration: shallowReadonly(registration),
405
+ state: readonly(state),
406
+ updateAvailable: computed(() => state.value.waiting !== null && controller.value !== null),
407
+ error: readonly(error),
408
+ register,
409
+ update,
410
+ skipWaiting,
411
+ unregister,
412
+ };
413
+ }
@@ -0,0 +1,154 @@
1
+ import { computed, shallowReactive, shallowReadonly } from "vue";
2
+ import type { ComputedRef } from "vue";
3
+
4
+ /** Reactive set wrapper returned by {@link useSet}. */
5
+ export interface SetControls<Item> {
6
+ /**
7
+ * Read-only reactive view of the set. `has`, iteration, and `size` on this
8
+ * view are tracked. Members are stored shallowly.
9
+ */
10
+ readonly set: ReadonlySet<Item>;
11
+
12
+ /** Number of members. */
13
+ readonly size: ComputedRef<number>;
14
+
15
+ /** Snapshot of the members in insertion order. */
16
+ readonly values: ComputedRef<readonly Item[]>;
17
+
18
+ /**
19
+ * Whether `item` is a member. Reactive when read inside an effect.
20
+ *
21
+ * @param item Candidate member.
22
+ * @returns Whether it is present.
23
+ */
24
+ readonly has: (item: Item) => boolean;
25
+
26
+ /**
27
+ * Add `item`.
28
+ *
29
+ * @param item Member to add.
30
+ * @returns Whether it was newly added.
31
+ */
32
+ readonly add: (item: Item) => boolean;
33
+
34
+ /**
35
+ * Remove `item`.
36
+ *
37
+ * @param item Member to remove.
38
+ * @returns Whether it was removed.
39
+ */
40
+ readonly delete: (item: Item) => boolean;
41
+
42
+ /**
43
+ * Add `item` when absent and remove it when present, or force membership.
44
+ * Passing an explicit `undefined` behaves like passing no argument.
45
+ *
46
+ * @param item Member to toggle.
47
+ * @param force Membership to force instead of inverting.
48
+ * @returns Whether `item` is a member afterwards.
49
+ */
50
+ readonly toggle: (item: Item, force?: boolean) => boolean;
51
+
52
+ /** Remove every member. */
53
+ readonly clear: () => void;
54
+
55
+ /**
56
+ * Members of this set or `other`.
57
+ *
58
+ * @param other Items to combine with.
59
+ * @returns A new, non-reactive set.
60
+ */
61
+ readonly union: (other: Iterable<Item>) => Set<Item>;
62
+
63
+ /**
64
+ * Members of this set that are also in `other`.
65
+ *
66
+ * @param other Items to intersect with.
67
+ * @returns A new, non-reactive set.
68
+ */
69
+ readonly intersection: (other: Iterable<Item>) => Set<Item>;
70
+
71
+ /**
72
+ * Members of this set that are not in `other`.
73
+ *
74
+ * @param other Items to subtract.
75
+ * @returns A new, non-reactive set.
76
+ */
77
+ readonly difference: (other: Iterable<Item>) => Set<Item>;
78
+
79
+ /** Restore the creation-time members. */
80
+ readonly reset: () => void;
81
+ }
82
+
83
+ /**
84
+ * Create a reactive `Set` with typed helpers.
85
+ *
86
+ * The member type is inferred from the initial items (`useSet(["a"])` is a
87
+ * `Set<string>`); pass a type argument for an initially empty set.
88
+ * Membership checks are tracked per item. The set-algebra helpers return
89
+ * new plain sets and do not require ES2025 `Set` methods.
90
+ *
91
+ * Purely synchronous state: safe during server rendering (no host globals,
92
+ * no timers) and nothing to dispose.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const selected = useSet<number>();
97
+ * selected.toggle(3); // true
98
+ * selected.has(3); // true
99
+ * ```
100
+ *
101
+ * @typeParam Item Member type, inferred from `initial`.
102
+ * @param initial Members added at creation and restored by `reset`.
103
+ * @default initial []
104
+ * @returns The reactive set and its helpers.
105
+ */
106
+ export function useSet<Item = unknown>(initial: Iterable<Item> = []): SetControls<Item> {
107
+ const baseline: readonly Item[] = [...initial];
108
+ const set = shallowReactive(new Set<Item>(baseline));
109
+
110
+ const add = (item: Item): boolean => {
111
+ if (set.has(item)) return false;
112
+ set.add(item);
113
+ return true;
114
+ };
115
+
116
+ return {
117
+ set: shallowReadonly(set),
118
+ size: computed(() => set.size),
119
+ values: computed(() => [...set.values()]),
120
+ has: (item) => set.has(item),
121
+ add,
122
+ delete: (item) => set.delete(item),
123
+ toggle: (item, force) => {
124
+ const next = force ?? !set.has(item);
125
+ if (next) add(item);
126
+ else set.delete(item);
127
+ return next;
128
+ },
129
+ clear: () => {
130
+ set.clear();
131
+ },
132
+ union: (other) => {
133
+ const result = new Set<Item>(set);
134
+ for (const item of other) result.add(item);
135
+ return result;
136
+ },
137
+ intersection: (other) => {
138
+ const lookup = new Set<Item>(other);
139
+ const result = new Set<Item>();
140
+ for (const item of set) if (lookup.has(item)) result.add(item);
141
+ return result;
142
+ },
143
+ difference: (other) => {
144
+ const lookup = new Set<Item>(other);
145
+ const result = new Set<Item>();
146
+ for (const item of set) if (!lookup.has(item)) result.add(item);
147
+ return result;
148
+ },
149
+ reset: () => {
150
+ set.clear();
151
+ for (const item of baseline) set.add(item);
152
+ },
153
+ };
154
+ }