@vizejs/composable 0.426.2 → 0.427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,93 @@
1
+ import { computed, shallowRef } from "vue";
2
+ //#region src/use-stack.ts
3
+ function validateCapacity(capacity) {
4
+ if (capacity === Number.POSITIVE_INFINITY) return capacity;
5
+ if (!Number.isSafeInteger(capacity) || capacity < 1) throw new RangeError(`[VIZE_COMPOSE_STACK_INVALID_CAPACITY] capacity must be a positive integer or Infinity; received ${String(capacity)}`);
6
+ return capacity;
7
+ }
8
+ /**
9
+ * Create a typed reactive LIFO stack.
10
+ *
11
+ * `push` and `pop` are O(1). A bounded stack either drops its bottom item
12
+ * or rejects new pushes when full. Reactivity is driven by a version
13
+ * counter, so `items`, `size`, `isEmpty`, and `peek` re-evaluate after
14
+ * every mutation.
15
+ *
16
+ * Purely synchronous state: safe during server rendering (no host globals,
17
+ * no timers) and nothing to dispose.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const breadcrumbs = useStack<string>(["home"]);
22
+ * breadcrumbs.push("settings");
23
+ * breadcrumbs.pop(); // "settings"
24
+ * ```
25
+ *
26
+ * @typeParam Item Stacked item type, inferred from `initial` when given.
27
+ * @param initial Items pushed at creation, bottom first (overflow applies).
28
+ * @param options Capacity and overflow policy.
29
+ * @default initial []
30
+ * @default options {}
31
+ * @throws {RangeError} `[VIZE_COMPOSE_STACK_INVALID_CAPACITY]` when `capacity`
32
+ * is not a positive integer or `Infinity`.
33
+ * @returns The reactive stack and its controls.
34
+ */
35
+ function useStack(initial = [], options = {}) {
36
+ const capacity = validateCapacity(options.capacity ?? Number.POSITIVE_INFINITY);
37
+ const overflow = options.overflow ?? "drop-oldest";
38
+ let buffer = [];
39
+ const version = shallowRef(0);
40
+ const touch = () => {
41
+ version.value += 1;
42
+ };
43
+ const append = (items) => {
44
+ let accepted = 0;
45
+ let dropped = 0;
46
+ for (const item of items) {
47
+ if (buffer.length - dropped >= capacity) {
48
+ if (overflow === "reject") continue;
49
+ dropped += 1;
50
+ }
51
+ buffer.push(item);
52
+ accepted += 1;
53
+ }
54
+ if (dropped > 0) buffer = buffer.slice(dropped);
55
+ return accepted;
56
+ };
57
+ append([...initial]);
58
+ const items = computed(() => {
59
+ version.value;
60
+ return buffer.slice();
61
+ });
62
+ const size = computed(() => {
63
+ version.value;
64
+ return buffer.length;
65
+ });
66
+ return {
67
+ items,
68
+ size,
69
+ isEmpty: computed(() => size.value === 0),
70
+ peek: () => {
71
+ version.value;
72
+ return buffer.at(-1);
73
+ },
74
+ push: (...added) => {
75
+ const accepted = append(added);
76
+ if (accepted > 0) touch();
77
+ return accepted;
78
+ },
79
+ pop: () => {
80
+ if (buffer.length === 0) return void 0;
81
+ const item = buffer.pop();
82
+ touch();
83
+ return item;
84
+ },
85
+ clear: () => {
86
+ if (buffer.length === 0) return;
87
+ buffer = [];
88
+ touch();
89
+ }
90
+ };
91
+ }
92
+ //#endregion
93
+ export { useStack };
@@ -0,0 +1,79 @@
1
+ import { ComputedRef, ShallowRef } from "vue";
2
+
3
+ //#region src/use-stepper.d.ts
4
+ /** Step values keyed by step name. */
5
+ type StepValues<Name extends string> = { readonly [Step in Name]: unknown };
6
+ /** Stepper state and navigation returned by {@link useStepper}. */
7
+ interface Stepper<Name extends string, Values extends StepValues<Name>> {
8
+ /** Step names in order. */
9
+ readonly stepNames: readonly Name[];
10
+ /** Zero-based index of the current step. */
11
+ readonly index: Readonly<ShallowRef<number>>;
12
+ /** Name of the current step. */
13
+ readonly current: ComputedRef<Name>;
14
+ /** Value of the current step (the name itself for array steps). */
15
+ readonly currentValue: ComputedRef<Values[Name]>;
16
+ /** Name of the next step, or `undefined` on the last. */
17
+ readonly next: ComputedRef<Name | undefined>;
18
+ /** Name of the previous step, or `undefined` on the first. */
19
+ readonly previous: ComputedRef<Name | undefined>;
20
+ /** Whether the current step is the first. */
21
+ readonly isFirst: ComputedRef<boolean>;
22
+ /** Whether the current step is the last. */
23
+ readonly isLast: ComputedRef<boolean>;
24
+ /** Step name at `index`, or `undefined`. */
25
+ readonly at: (index: number) => Name | undefined;
26
+ /** Value of a step. */
27
+ readonly get: <Step extends Name>(step: Step) => Values[Step];
28
+ /** Jump to a step. */
29
+ readonly goTo: (step: Name) => void;
30
+ /** Advance one step (no-op on the last). */
31
+ readonly goToNext: () => void;
32
+ /** Go back one step (no-op on the first). */
33
+ readonly goToPrevious: () => void;
34
+ /**
35
+ * Go back to an earlier step; later or current steps are ignored.
36
+ *
37
+ * @returns Whether the cursor moved.
38
+ */
39
+ readonly goBackTo: (step: Name) => boolean;
40
+ /** Whether `step` is the current step. */
41
+ readonly isCurrent: (step: Name) => boolean;
42
+ /** Whether `step` is the step right after the current one. */
43
+ readonly isNext: (step: Name) => boolean;
44
+ /** Whether `step` is the step right before the current one. */
45
+ readonly isPrevious: (step: Name) => boolean;
46
+ /** Whether `step` comes before the current step. */
47
+ readonly isBefore: (step: Name) => boolean;
48
+ /** Whether `step` comes after the current step. */
49
+ readonly isAfter: (step: Name) => boolean;
50
+ }
51
+ /**
52
+ * Linear multi-step flow (wizards, onboarding, checkout) with typed step
53
+ * names.
54
+ *
55
+ * Pass a tuple of names (`["account", "billing", "review"] as const`, or a
56
+ * plain array literal thanks to `const` inference) or an object whose keys
57
+ * are the names and whose values carry per-step data; every navigation
58
+ * method only accepts declared names. Synchronous state: SSR-safe and
59
+ * nothing to dispose.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const wizard = useStepper(["account", "billing", "review"]);
64
+ * wizard.goTo("billing");
65
+ * wizard.goTo("shipping"); // type error
66
+ * ```
67
+ *
68
+ * @param steps Step names, or step values keyed by name.
69
+ * @param initial Step to start on.
70
+ * @default initial the first step
71
+ * @throws `RangeError` tagged `VIZE_COMPOSE_STEPPER_EMPTY` when there are no
72
+ * steps, and `RangeError` tagged `VIZE_COMPOSE_STEPPER_UNKNOWN_STEP` for an
73
+ * unknown step name at runtime.
74
+ * @returns Stepper state and navigation.
75
+ */
76
+ declare function useStepper<const Steps extends readonly string[]>(steps: Steps, initial?: NoInfer<Steps[number]>): Stepper<Steps[number], { readonly [Step in Steps[number]]: Step }>;
77
+ declare function useStepper<Steps extends Readonly<Record<string, unknown>>>(steps: Steps, initial?: NoInfer<keyof Steps & string>): Stepper<keyof Steps & string, Steps>;
78
+ //#endregion
79
+ export { StepValues, Stepper, useStepper };
@@ -0,0 +1,52 @@
1
+ import { computed, shallowRef } from "vue";
2
+ //#region src/use-stepper.ts
3
+ function useStepper(steps, initial) {
4
+ const names = isNameList(steps) ? [...steps] : Object.keys(steps);
5
+ const values = isNameList(steps) ? Object.fromEntries(steps.map((name) => [name, name])) : steps;
6
+ if (names.length === 0) throw new RangeError("[VIZE_COMPOSE_STEPPER_EMPTY] useStepper needs at least one step");
7
+ const indexOf = (step) => {
8
+ const found = names.indexOf(step);
9
+ if (found === -1) throw new RangeError(`[VIZE_COMPOSE_STEPPER_UNKNOWN_STEP] unknown step "${step}"`);
10
+ return found;
11
+ };
12
+ const index = shallowRef(initial === void 0 ? 0 : indexOf(initial));
13
+ const at = (position) => names[position];
14
+ const current = computed(() => names[index.value] ?? "");
15
+ return {
16
+ stepNames: names,
17
+ index,
18
+ current,
19
+ currentValue: computed(() => values[current.value]),
20
+ next: computed(() => at(index.value + 1)),
21
+ previous: computed(() => at(index.value - 1)),
22
+ isFirst: computed(() => index.value === 0),
23
+ isLast: computed(() => index.value === names.length - 1),
24
+ at,
25
+ get: (step) => values[step],
26
+ goTo: (step) => {
27
+ index.value = indexOf(step);
28
+ },
29
+ goToNext: () => {
30
+ if (index.value < names.length - 1) index.value += 1;
31
+ },
32
+ goToPrevious: () => {
33
+ if (index.value > 0) index.value -= 1;
34
+ },
35
+ goBackTo: (step) => {
36
+ const target = indexOf(step);
37
+ if (target >= index.value) return false;
38
+ index.value = target;
39
+ return true;
40
+ },
41
+ isCurrent: (step) => indexOf(step) === index.value,
42
+ isNext: (step) => indexOf(step) === index.value + 1,
43
+ isPrevious: (step) => indexOf(step) === index.value - 1,
44
+ isBefore: (step) => indexOf(step) < index.value,
45
+ isAfter: (step) => indexOf(step) > index.value
46
+ };
47
+ }
48
+ function isNameList(steps) {
49
+ return Array.isArray(steps);
50
+ }
51
+ //#endregion
52
+ export { useStepper };
@@ -0,0 +1,151 @@
1
+ import { n as IntervalScheduler } from "./use-interval-BA55gTHT.mjs";
2
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ //#region src/use-storage-estimate.d.ts
5
+ /** Result of `navigator.storage.estimate()`. */
6
+ interface StorageEstimateLike {
7
+ /** Bytes used by the origin. */
8
+ readonly usage?: number | undefined;
9
+ /** Bytes available to the origin. */
10
+ readonly quota?: number | undefined;
11
+ /** Per-storage-system usage in bytes (Chromium only). */
12
+ readonly usageDetails?: Readonly<Record<string, number>> | undefined;
13
+ }
14
+ /** Minimal `StorageManager` (`navigator.storage`) used by this module. */
15
+ interface StorageManagerLike {
16
+ /** Estimate usage and quota. */
17
+ estimate?(): Promise<StorageEstimateLike>;
18
+ /** Whether storage is already persistent. */
19
+ persisted?(): Promise<boolean>;
20
+ /** Request persistent storage. */
21
+ persist?(): Promise<boolean>;
22
+ }
23
+ /** Options for {@link useStorageEstimate}. */
24
+ interface UseStorageEstimateOptions {
25
+ /**
26
+ * Storage manager for alternate runtimes and tests.
27
+ *
28
+ * @default window.navigator.storage when it exists
29
+ */
30
+ readonly storage?: MaybeRefOrGetter<StorageManagerLike | null | undefined>;
31
+ /**
32
+ * Estimate as soon as the composable is created (browser only).
33
+ *
34
+ * @default true
35
+ */
36
+ readonly immediate?: boolean;
37
+ /**
38
+ * Re-estimate every `interval` milliseconds; `0` disables polling.
39
+ *
40
+ * @default 0
41
+ */
42
+ readonly interval?: number;
43
+ /**
44
+ * Owns the polling timer.
45
+ *
46
+ * @default window timer functions (no timer without a browser window)
47
+ */
48
+ readonly scheduler?: IntervalScheduler;
49
+ }
50
+ /** Reactive state and actions returned by {@link useStorageEstimate}. */
51
+ interface StorageEstimateControls {
52
+ /** Whether `navigator.storage.estimate` is available. */
53
+ readonly supported: ComputedRef<boolean>;
54
+ /** Bytes used, or `null` before the first estimate. */
55
+ readonly usage: Readonly<Ref<number | null>>;
56
+ /** Bytes available, or `null` before the first estimate. */
57
+ readonly quota: Readonly<Ref<number | null>>;
58
+ /** Per-storage-system usage, or `null` when the browser does not report it. */
59
+ readonly usageDetails: Readonly<ShallowRef<Readonly<Record<string, number>> | null>>;
60
+ /** Usage as a percentage (0..100) of quota, or `null` when unknown. */
61
+ readonly percentUsed: ComputedRef<number | null>;
62
+ /** Most recent estimate failure, cleared on success. */
63
+ readonly error: Readonly<ShallowRef<unknown>>;
64
+ /**
65
+ * Re-read the estimate.
66
+ *
67
+ * @returns Whether a fresh estimate was stored.
68
+ */
69
+ readonly refresh: () => Promise<boolean>;
70
+ }
71
+ /** Options for {@link usePersistentStorage}. */
72
+ interface UsePersistentStorageOptions {
73
+ /**
74
+ * Storage manager for alternate runtimes and tests.
75
+ *
76
+ * @default window.navigator.storage when it exists
77
+ */
78
+ readonly storage?: MaybeRefOrGetter<StorageManagerLike | null | undefined>;
79
+ /**
80
+ * Read `persisted()` as soon as the composable is created (browser only).
81
+ *
82
+ * @default true
83
+ */
84
+ readonly immediate?: boolean;
85
+ }
86
+ /** Reactive state and actions returned by {@link usePersistentStorage}. */
87
+ interface PersistentStorageControls {
88
+ /** Whether `navigator.storage.persist` is available. */
89
+ readonly supported: ComputedRef<boolean>;
90
+ /** Whether the origin's storage is persistent (`false` until known). */
91
+ readonly persisted: Readonly<Ref<boolean>>;
92
+ /** Most recent failure, cleared on success. */
93
+ readonly error: Readonly<ShallowRef<unknown>>;
94
+ /**
95
+ * Request persistent storage.
96
+ *
97
+ * @returns Whether storage is persistent afterwards; `false` when unsupported.
98
+ */
99
+ readonly persist: () => Promise<boolean>;
100
+ /**
101
+ * Re-read `persisted()`.
102
+ *
103
+ * @returns The current persistence state.
104
+ */
105
+ readonly check: () => Promise<boolean>;
106
+ }
107
+ /**
108
+ * Track the origin's storage usage and quota with `navigator.storage.estimate()`.
109
+ *
110
+ * The estimate is read on creation (unless `immediate` is false), whenever a
111
+ * reactive `storage` host changes, on `refresh()`, and every `interval`
112
+ * milliseconds through the injectable `scheduler`. The polling timer stops
113
+ * with the owning reactive scope; outside a scope, polling runs until the
114
+ * page unloads, so leave `interval` at `0` there.
115
+ *
116
+ * Server rendering: nothing is read, no timer starts, `supported` is false
117
+ * and every value is `null`.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const { usage, quota, percentUsed } = useStorageEstimate({ interval: 60_000 });
122
+ * ```
123
+ *
124
+ * @param options Storage host, polling interval and scheduler.
125
+ * @default options {}
126
+ * @returns Storage usage state and a refresh action.
127
+ */
128
+ declare function useStorageEstimate(options?: UseStorageEstimateOptions): StorageEstimateControls;
129
+ /**
130
+ * Read and request persistent storage with `navigator.storage.persist()`.
131
+ *
132
+ * Persistent storage is not evicted under storage pressure. `persist()` may
133
+ * show a prompt or be decided silently by the browser; the result is stored
134
+ * in `persisted`. Nothing needs cleanup; a pending read is ignored after the
135
+ * owning reactive scope stops.
136
+ *
137
+ * Server rendering: nothing is read, `supported` and `persisted` are false.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const storage = usePersistentStorage();
142
+ * const keepOfflineData = () => storage.persist();
143
+ * ```
144
+ *
145
+ * @param options Storage host and initial read policy.
146
+ * @default options {}
147
+ * @returns Persistence state and actions.
148
+ */
149
+ declare function usePersistentStorage(options?: UsePersistentStorageOptions): PersistentStorageControls;
150
+ //#endregion
151
+ export { PersistentStorageControls, StorageEstimateControls, StorageEstimateLike, StorageManagerLike, UsePersistentStorageOptions, UseStorageEstimateOptions, usePersistentStorage, useStorageEstimate };
@@ -0,0 +1,170 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, hasInjectionContext, readonly, ref, shallowRef, toValue, watch, watchPostEffect } from "vue";
3
+ //#region src/use-storage-estimate.ts
4
+ function browserStorage() {
5
+ if (typeof window === "undefined") return void 0;
6
+ const { navigator } = window;
7
+ return "storage" in navigator && navigator.storage ? navigator.storage : void 0;
8
+ }
9
+ function browserScheduler() {
10
+ if (typeof window === "undefined") return void 0;
11
+ return {
12
+ setInterval: (callback, intervalMs) => window.setInterval(callback, intervalMs),
13
+ clearInterval: (handle) => {
14
+ if (typeof handle === "number") window.clearInterval(handle);
15
+ }
16
+ };
17
+ }
18
+ function resolver(source) {
19
+ return () => source === void 0 ? browserStorage() : toValue(source) ?? void 0;
20
+ }
21
+ /**
22
+ * Track the origin's storage usage and quota with `navigator.storage.estimate()`.
23
+ *
24
+ * The estimate is read on creation (unless `immediate` is false), whenever a
25
+ * reactive `storage` host changes, on `refresh()`, and every `interval`
26
+ * milliseconds through the injectable `scheduler`. The polling timer stops
27
+ * with the owning reactive scope; outside a scope, polling runs until the
28
+ * page unloads, so leave `interval` at `0` there.
29
+ *
30
+ * Server rendering: nothing is read, no timer starts, `supported` is false
31
+ * and every value is `null`.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const { usage, quota, percentUsed } = useStorageEstimate({ interval: 60_000 });
36
+ * ```
37
+ *
38
+ * @param options Storage host, polling interval and scheduler.
39
+ * @default options {}
40
+ * @returns Storage usage state and a refresh action.
41
+ */
42
+ function useStorageEstimate(options = {}) {
43
+ const { immediate = true, interval = 0 } = options;
44
+ if (!Number.isFinite(interval) || interval < 0) throw new RangeError(`[VIZE_COMPOSE_STORAGE_ESTIMATE_INVALID_INTERVAL] interval must be a non-negative finite number; received ${interval}.`);
45
+ const hydrated = shallowRef(!hasInjectionContext());
46
+ if (!hydrated.value) watchPostEffect(() => {
47
+ hydrated.value = true;
48
+ });
49
+ const resolveStorageNow = resolver(options.storage);
50
+ const resolveStorage = () => hydrated.value ? resolveStorageNow() : void 0;
51
+ const usage = ref(null);
52
+ const quota = ref(null);
53
+ const usageDetails = shallowRef(null);
54
+ const error = shallowRef(void 0);
55
+ let generation = 0;
56
+ const refresh = async () => {
57
+ const storage = resolveStorage();
58
+ if (!storage?.estimate) return false;
59
+ const current = ++generation;
60
+ try {
61
+ const estimate = await storage.estimate();
62
+ if (current !== generation) return false;
63
+ usage.value = estimate.usage ?? null;
64
+ quota.value = estimate.quota ?? null;
65
+ usageDetails.value = estimate.usageDetails ?? null;
66
+ error.value = void 0;
67
+ return true;
68
+ } catch (cause) {
69
+ if (current === generation) error.value = cause;
70
+ return false;
71
+ }
72
+ };
73
+ watch(resolveStorage, (storage, _previous, onCleanup) => {
74
+ generation += 1;
75
+ usage.value = null;
76
+ quota.value = null;
77
+ usageDetails.value = null;
78
+ error.value = void 0;
79
+ if (!storage?.estimate) return;
80
+ if (immediate) refresh();
81
+ const scheduler = options.scheduler ?? browserScheduler();
82
+ if (interval === 0 || !scheduler) return;
83
+ const handle = scheduler.setInterval(() => void refresh(), interval);
84
+ onCleanup(() => scheduler.clearInterval(handle));
85
+ }, { immediate: true });
86
+ tryOnScopeDispose(() => {
87
+ generation += 1;
88
+ });
89
+ return {
90
+ supported: computed(() => resolveStorage()?.estimate !== void 0),
91
+ usage: readonly(usage),
92
+ quota: readonly(quota),
93
+ usageDetails: readonly(usageDetails),
94
+ percentUsed: computed(() => usage.value === null || quota.value === null || quota.value <= 0 ? null : usage.value / quota.value * 100),
95
+ error: readonly(error),
96
+ refresh
97
+ };
98
+ }
99
+ /**
100
+ * Read and request persistent storage with `navigator.storage.persist()`.
101
+ *
102
+ * Persistent storage is not evicted under storage pressure. `persist()` may
103
+ * show a prompt or be decided silently by the browser; the result is stored
104
+ * in `persisted`. Nothing needs cleanup; a pending read is ignored after the
105
+ * owning reactive scope stops.
106
+ *
107
+ * Server rendering: nothing is read, `supported` and `persisted` are false.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * const storage = usePersistentStorage();
112
+ * const keepOfflineData = () => storage.persist();
113
+ * ```
114
+ *
115
+ * @param options Storage host and initial read policy.
116
+ * @default options {}
117
+ * @returns Persistence state and actions.
118
+ */
119
+ function usePersistentStorage(options = {}) {
120
+ const hydrated = shallowRef(!hasInjectionContext());
121
+ if (!hydrated.value) watchPostEffect(() => {
122
+ hydrated.value = true;
123
+ });
124
+ const resolveStorageNow = resolver(options.storage);
125
+ const resolveStorage = () => hydrated.value ? resolveStorageNow() : void 0;
126
+ const persisted = ref(false);
127
+ const error = shallowRef(void 0);
128
+ let active = true;
129
+ const call = async (method) => {
130
+ const storage = resolveStorage();
131
+ const read = storage?.[method];
132
+ if (!read) return false;
133
+ try {
134
+ const value = await read.call(storage);
135
+ if (active) {
136
+ persisted.value = value;
137
+ error.value = void 0;
138
+ }
139
+ return value;
140
+ } catch (cause) {
141
+ if (active) error.value = cause;
142
+ return false;
143
+ }
144
+ };
145
+ const check = () => call("persisted");
146
+ const persist = () => call("persist");
147
+ if (options.immediate ?? true) {
148
+ let checked = false;
149
+ watch(() => resolveStorage() !== void 0, (ready) => {
150
+ if (!ready || checked) return;
151
+ checked = true;
152
+ check();
153
+ }, {
154
+ immediate: true,
155
+ flush: "sync"
156
+ });
157
+ }
158
+ tryOnScopeDispose(() => {
159
+ active = false;
160
+ });
161
+ return {
162
+ supported: computed(() => resolveStorage()?.persist !== void 0),
163
+ persisted: readonly(persisted),
164
+ error: readonly(error),
165
+ persist,
166
+ check
167
+ };
168
+ }
169
+ //#endregion
170
+ export { usePersistentStorage, useStorageEstimate };