@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,508 @@
1
+ import { readonly, ref, shallowRef, toRaw, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** Minimal structural view of an `IDBRequest`. */
7
+ export interface IndexedDBRequestLike<Result> extends Pick<EventTarget, "addEventListener"> {
8
+ /** Result available after the `success` event. */
9
+ readonly result: Result;
10
+
11
+ /** Failure available after the `error` event. */
12
+ readonly error: unknown;
13
+ }
14
+
15
+ /** Minimal structural view of an `IDBObjectStore` using out-of-line keys. */
16
+ export interface IndexedDBObjectStoreLike {
17
+ /** Read the value stored under `key`. */
18
+ readonly get: (key: IDBValidKey) => IndexedDBRequestLike<unknown>;
19
+
20
+ /** Store `value` under `key`. */
21
+ readonly put: (value: unknown, key: IDBValidKey) => IndexedDBRequestLike<IDBValidKey>;
22
+
23
+ /** Delete `key`. */
24
+ readonly delete: (key: IDBValidKey) => IndexedDBRequestLike<undefined>;
25
+
26
+ /** List every key. */
27
+ readonly getAllKeys: () => IndexedDBRequestLike<IDBValidKey[]>;
28
+
29
+ /** Delete every entry. */
30
+ readonly clear: () => IndexedDBRequestLike<undefined>;
31
+ }
32
+
33
+ /** Minimal structural view of an `IDBTransaction` (`complete`/`error`/`abort` events). */
34
+ export interface IndexedDBTransactionLike extends Pick<EventTarget, "addEventListener"> {
35
+ /** Access an object store in the transaction scope. */
36
+ readonly objectStore: (name: string) => IndexedDBObjectStoreLike;
37
+
38
+ /** Failure available after `error`/`abort`. */
39
+ readonly error: unknown;
40
+ }
41
+
42
+ /** Minimal structural view of an `IDBDatabase`. */
43
+ export interface IndexedDBDatabaseLike {
44
+ /** Current schema version. */
45
+ readonly version: number;
46
+
47
+ /** Names of the existing object stores. */
48
+ readonly objectStoreNames: { readonly contains: (name: string) => boolean };
49
+
50
+ /** Create an object store; only valid during `upgradeneeded`. */
51
+ readonly createObjectStore: (name: string) => unknown;
52
+
53
+ /** Start a transaction on one store. */
54
+ readonly transaction: (store: string, mode: "readonly" | "readwrite") => IndexedDBTransactionLike;
55
+
56
+ /** Close the connection. */
57
+ readonly close: () => void;
58
+ }
59
+
60
+ /** Minimal structural view of an `IDBFactory`; `window.indexedDB` satisfies it. */
61
+ export interface IndexedDBFactoryLike {
62
+ /** Open (and possibly upgrade) a database; fires `upgradeneeded`, `success`, `error`. */
63
+ readonly open: (name: string, version?: number) => IndexedDBRequestLike<IndexedDBDatabaseLike>;
64
+ }
65
+
66
+ /** Options for {@link createIndexedDBKeyval}. */
67
+ export interface IndexedDBKeyvalOptions {
68
+ /**
69
+ * Database name.
70
+ *
71
+ * @default "vize-keyval"
72
+ */
73
+ readonly database?: string;
74
+
75
+ /**
76
+ * Object store name; created on demand.
77
+ *
78
+ * @default "keyval"
79
+ */
80
+ readonly store?: string;
81
+
82
+ /**
83
+ * IndexedDB implementation.
84
+ *
85
+ * @default window.indexedDB when a browser window exists
86
+ */
87
+ readonly factory?: IndexedDBFactoryLike | null;
88
+ }
89
+
90
+ /** Promise-based key-value store returned by {@link createIndexedDBKeyval}. */
91
+ export interface IndexedDBKeyval {
92
+ /** Read a structured-cloned value, or `undefined` when absent. */
93
+ readonly get: (key: IDBValidKey) => Promise<unknown>;
94
+
95
+ /** Store a structured-cloneable value. Resolves when the transaction commits. */
96
+ readonly set: (key: IDBValidKey, value: unknown) => Promise<void>;
97
+
98
+ /** Delete a key. Resolves when the transaction commits. */
99
+ readonly delete: (key: IDBValidKey) => Promise<void>;
100
+
101
+ /** List every key. */
102
+ readonly keys: () => Promise<IDBValidKey[]>;
103
+
104
+ /** Delete every entry. */
105
+ readonly clear: () => Promise<void>;
106
+
107
+ /** Close the connection; the next operation reopens it. */
108
+ readonly close: () => void;
109
+ }
110
+
111
+ function browserFactory(): IndexedDBFactoryLike | undefined {
112
+ try {
113
+ return typeof window !== "undefined" ? (window.indexedDB ?? undefined) : undefined;
114
+ } catch {
115
+ // Accessing `indexedDB` throws in some privacy modes.
116
+ return undefined;
117
+ }
118
+ }
119
+
120
+ function request<Result>(pending: IndexedDBRequestLike<Result>): Promise<Result> {
121
+ return new Promise((resolve, reject) => {
122
+ pending.addEventListener("success", () => resolve(pending.result));
123
+ pending.addEventListener("error", () => reject(pending.error));
124
+ });
125
+ }
126
+
127
+ function committed(transaction: IndexedDBTransactionLike): Promise<void> {
128
+ return new Promise((resolve, reject) => {
129
+ transaction.addEventListener("complete", () => resolve());
130
+ transaction.addEventListener("error", () => reject(transaction.error));
131
+ transaction.addEventListener("abort", () => reject(transaction.error));
132
+ });
133
+ }
134
+
135
+ function openDatabase(
136
+ factory: IndexedDBFactoryLike,
137
+ name: string,
138
+ store: string,
139
+ version?: number,
140
+ ): Promise<IndexedDBDatabaseLike> {
141
+ const opening = factory.open(name, version);
142
+ opening.addEventListener("upgradeneeded", () => {
143
+ const database = opening.result;
144
+ if (!database.objectStoreNames.contains(store)) database.createObjectStore(store);
145
+ });
146
+ return request(opening).then((database) => {
147
+ if (database.objectStoreNames.contains(store)) return database;
148
+ // The database exists without our store: bump the version to create it.
149
+ const next = database.version + 1;
150
+ database.close();
151
+ return openDatabase(factory, name, store, next);
152
+ });
153
+ }
154
+
155
+ /**
156
+ * Create a small promise-based key-value store on one IndexedDB object
157
+ * store. The connection opens lazily on the first operation, the store is
158
+ * created on demand, and writes resolve once their transaction commits.
159
+ * Without IndexedDB (server rendering, privacy modes) every operation
160
+ * rejects with a tagged `[VIZE_COMPOSE_INDEXED_DB_UNAVAILABLE]` error.
161
+ *
162
+ * @param options Database, store, and implementation.
163
+ * @default options {}
164
+ * @returns Key-value operations.
165
+ */
166
+ export function createIndexedDBKeyval(options: IndexedDBKeyvalOptions = {}): IndexedDBKeyval {
167
+ const name = options.database ?? "vize-keyval";
168
+ const store = options.store ?? "keyval";
169
+ let connection: Promise<IndexedDBDatabaseLike> | undefined;
170
+
171
+ const database = (): Promise<IndexedDBDatabaseLike> => {
172
+ if (connection !== undefined) return connection;
173
+ const factory = options.factory === undefined ? browserFactory() : options.factory;
174
+ if (!factory) {
175
+ return Promise.reject(
176
+ new Error("[VIZE_COMPOSE_INDEXED_DB_UNAVAILABLE] IndexedDB is not available"),
177
+ );
178
+ }
179
+ const opened = openDatabase(factory, name, store);
180
+ connection = opened;
181
+ opened.catch(() => {
182
+ if (connection === opened) connection = undefined;
183
+ });
184
+ return opened;
185
+ };
186
+
187
+ const read = async <Result>(
188
+ operation: (objects: IndexedDBObjectStoreLike) => IndexedDBRequestLike<Result>,
189
+ ): Promise<Result> => {
190
+ const db = await database();
191
+ return request(operation(db.transaction(store, "readonly").objectStore(store)));
192
+ };
193
+
194
+ const write = async (
195
+ operation: (objects: IndexedDBObjectStoreLike) => unknown,
196
+ ): Promise<void> => {
197
+ const db = await database();
198
+ const transaction = db.transaction(store, "readwrite");
199
+ const done = committed(transaction);
200
+ operation(transaction.objectStore(store));
201
+ await done;
202
+ };
203
+
204
+ return {
205
+ get: (key) => read((objects) => objects.get(key)),
206
+ set: (key, value) => write((objects) => objects.put(value, key)),
207
+ delete: (key) => write((objects) => objects.delete(key)),
208
+ keys: () => read((objects) => objects.getAllKeys()),
209
+ clear: () => write((objects) => objects.clear()),
210
+ close: () => {
211
+ const current = connection;
212
+ connection = undefined;
213
+ void current?.then(
214
+ (db) => db.close(),
215
+ () => undefined,
216
+ );
217
+ },
218
+ };
219
+ }
220
+
221
+ /** Stable failure codes reported by {@link useIndexedDB}. */
222
+ export type IndexedDBErrorCode = "read-failed" | "invalid-value" | "write-failed";
223
+
224
+ /** Failure observed while synchronizing a value with IndexedDB. */
225
+ export interface IndexedDBFailure {
226
+ /** Which synchronization step failed. */
227
+ readonly code: IndexedDBErrorCode;
228
+
229
+ /** Key involved in the failure. */
230
+ readonly key: IDBValidKey;
231
+
232
+ /** Exact rejection, or the rejected candidate for `"invalid-value"`. */
233
+ readonly cause: unknown;
234
+ }
235
+
236
+ /** Options for {@link useIndexedDB}. */
237
+ export interface UseIndexedDBOptions<Value> {
238
+ /**
239
+ * Database name.
240
+ *
241
+ * @default "vize-keyval"
242
+ */
243
+ readonly database?: string;
244
+
245
+ /**
246
+ * Object store name; created on demand.
247
+ *
248
+ * @default "keyval"
249
+ */
250
+ readonly store?: string;
251
+
252
+ /**
253
+ * Reactive IndexedDB implementation. `null`/`undefined` keeps the default
254
+ * value, which is also what happens during server rendering.
255
+ *
256
+ * @default window.indexedDB when a browser window exists
257
+ */
258
+ readonly factory?: MaybeRefOrGetter<IndexedDBFactoryLike | null | undefined>;
259
+
260
+ /**
261
+ * Validation hook applied to every loaded value.
262
+ *
263
+ * @default a structural check that the value has the default's kind
264
+ */
265
+ readonly validate?: (candidate: unknown) => candidate is Value;
266
+
267
+ /**
268
+ * Persist the default value when the key is absent.
269
+ *
270
+ * @default true
271
+ */
272
+ readonly writeDefaults?: boolean;
273
+
274
+ /**
275
+ * Watch nested mutations of object values.
276
+ *
277
+ * @default true
278
+ */
279
+ readonly deep?: boolean;
280
+
281
+ /**
282
+ * Write timing relative to component rendering.
283
+ *
284
+ * @default "pre"
285
+ */
286
+ readonly flush?: "pre" | "post" | "sync";
287
+
288
+ /**
289
+ * Observe failures. Failures never reject out of the composable.
290
+ *
291
+ * @default undefined
292
+ */
293
+ readonly onError?: (failure: IndexedDBFailure) => void;
294
+ }
295
+
296
+ /** Reactive state and controls returned by {@link useIndexedDB}. */
297
+ export interface IndexedDBControls<Value> {
298
+ /** Writable value; assignments and nested mutations are persisted. */
299
+ readonly state: Ref<Value>;
300
+
301
+ /** Whether an IndexedDB implementation is attached. */
302
+ readonly supported: Readonly<Ref<boolean>>;
303
+
304
+ /** Whether the stored value for the current key has been loaded. */
305
+ readonly ready: Readonly<Ref<boolean>>;
306
+
307
+ /** Most recent failure, cleared by the next success. */
308
+ readonly error: Readonly<ShallowRef<IndexedDBFailure | undefined>>;
309
+
310
+ /** Reload the stored value. Never rejects. */
311
+ readonly refresh: () => Promise<void>;
312
+
313
+ /** Delete the key and restore the default value. Never rejects. */
314
+ readonly remove: () => Promise<void>;
315
+ }
316
+
317
+ function sameKind<Value>(defaults: Value, candidate: unknown): candidate is Value {
318
+ if (defaults === null || defaults === undefined) return true;
319
+ if (defaults instanceof Map) return candidate instanceof Map;
320
+ if (defaults instanceof Set) return candidate instanceof Set;
321
+ if (defaults instanceof Date) return candidate instanceof Date;
322
+ if (Array.isArray(defaults)) return Array.isArray(candidate);
323
+ if (typeof defaults === "object") {
324
+ return typeof candidate === "object" && candidate !== null && !Array.isArray(candidate);
325
+ }
326
+ return typeof candidate === typeof defaults;
327
+ }
328
+
329
+ /**
330
+ * Synchronize a reactive value with one IndexedDB key.
331
+ *
332
+ * Values are stored by structured clone, so objects, arrays, `Map`, `Set`,
333
+ * `Date`, typed arrays, and `Blob`s round-trip without a serializer. The
334
+ * value is loaded asynchronously: `state` holds the default until `ready`
335
+ * becomes `true`. Loaded values pass `validate` before they are accepted.
336
+ * Assignments and nested mutations are written back; changing the reactive
337
+ * `key` loads the new key (stale loads are discarded).
338
+ *
339
+ * Server rendering: without a browser `window` nothing is opened, `state`
340
+ * is the default, and `ready` stays `false`, so server and client first
341
+ * render identically. The connection closes and watchers stop with the
342
+ * owning reactive scope. Failures never reject; they are exposed through
343
+ * `error` and `onError`.
344
+ *
345
+ * @example
346
+ * ```ts
347
+ * const { state: draft, ready } = useIndexedDB("draft", { title: "", body: "" });
348
+ * ```
349
+ *
350
+ * @typeParam Value Stored value type, inferred from `defaultValue`.
351
+ * @param key Reactive IndexedDB key.
352
+ * @param defaultValue Value used until loaded, and when absent or invalid.
353
+ * @param options Database, store, implementation, and validation.
354
+ * @default options {}
355
+ * @returns The synchronized value and its controls.
356
+ */
357
+ export function useIndexedDB<Value>(
358
+ key: MaybeRefOrGetter<IDBValidKey>,
359
+ defaultValue: Value,
360
+ options: UseIndexedDBOptions<Value> = {},
361
+ ): IndexedDBControls<Value> {
362
+ // Stored values are plain structured-cloneable data, for which
363
+ // `UnwrapRef<Value>` and `Value` coincide; `ref` keeps nested mutations
364
+ // observable so they are persisted.
365
+ const state = ref(defaultValue) as Ref<Value>;
366
+ const supported = ref(false);
367
+ const ready = ref(false);
368
+ const error = shallowRef<IndexedDBFailure | undefined>(undefined);
369
+ const validate =
370
+ options.validate ??
371
+ ((candidate: unknown): candidate is Value => sameKind(defaultValue, candidate));
372
+ let keyval: IndexedDBKeyval | undefined;
373
+ let generation = 0;
374
+ let applying = false;
375
+ let dirty = false;
376
+
377
+ const fail = (code: IndexedDBErrorCode, cause: unknown): void => {
378
+ const failure: IndexedDBFailure = { code, key: toValue(key), cause };
379
+ error.value = failure;
380
+ options.onError?.(failure);
381
+ };
382
+
383
+ const assign = (value: Value): void => {
384
+ applying = true;
385
+ try {
386
+ state.value = value;
387
+ } finally {
388
+ applying = false;
389
+ }
390
+ };
391
+
392
+ const persist = async (value: Value): Promise<void> => {
393
+ if (keyval === undefined) return;
394
+ try {
395
+ await keyval.set(toValue(key), toRaw(value));
396
+ error.value = undefined;
397
+ } catch (cause) {
398
+ fail("write-failed", cause);
399
+ }
400
+ };
401
+
402
+ const refresh = async (): Promise<void> => {
403
+ const current = ++generation;
404
+ if (keyval === undefined) return;
405
+ const store = keyval;
406
+ let stored: unknown;
407
+ try {
408
+ stored = await store.get(toValue(key));
409
+ } catch (cause) {
410
+ if (current === generation) fail("read-failed", cause);
411
+ return;
412
+ }
413
+ if (current !== generation) return;
414
+ if (stored === undefined) {
415
+ assign(defaultValue);
416
+ ready.value = true;
417
+ if (options.writeDefaults ?? true) await persist(defaultValue);
418
+ return;
419
+ }
420
+ if (!validate(stored)) {
421
+ fail("invalid-value", stored);
422
+ assign(defaultValue);
423
+ } else {
424
+ error.value = undefined;
425
+ assign(stored);
426
+ }
427
+ ready.value = true;
428
+ };
429
+
430
+ const remove = async (): Promise<void> => {
431
+ generation += 1;
432
+ assign(defaultValue);
433
+ if (keyval === undefined) return;
434
+ try {
435
+ await keyval.delete(toValue(key));
436
+ error.value = undefined;
437
+ } catch (cause) {
438
+ fail("write-failed", cause);
439
+ }
440
+ };
441
+
442
+ let currentFactory: IndexedDBFactoryLike | undefined;
443
+ const stopSource = watch(
444
+ [
445
+ () =>
446
+ (options.factory === undefined ? browserFactory() : toValue(options.factory)) ?? undefined,
447
+ () => toValue(key),
448
+ ],
449
+ ([factory]) => {
450
+ ready.value = false;
451
+ supported.value = factory !== undefined;
452
+ if (factory !== currentFactory) {
453
+ keyval?.close();
454
+ currentFactory = factory;
455
+ keyval =
456
+ factory === undefined
457
+ ? undefined
458
+ : createIndexedDBKeyval({
459
+ factory,
460
+ ...(options.database === undefined ? {} : { database: options.database }),
461
+ ...(options.store === undefined ? {} : { store: options.store }),
462
+ });
463
+ }
464
+ if (keyval === undefined) {
465
+ generation += 1;
466
+ assign(defaultValue);
467
+ return;
468
+ }
469
+ void refresh();
470
+ },
471
+ { immediate: true, flush: "sync" },
472
+ );
473
+
474
+ const stopDirty = watch(
475
+ state,
476
+ () => {
477
+ if (!applying) dirty = true;
478
+ },
479
+ { deep: options.deep ?? true, flush: "sync" },
480
+ );
481
+ const stopWrite = watch(
482
+ state,
483
+ (value) => {
484
+ if (!dirty) return;
485
+ dirty = false;
486
+ void persist(value);
487
+ },
488
+ { deep: options.deep ?? true, flush: options.flush ?? "pre" },
489
+ );
490
+
491
+ tryOnScopeDispose(() => {
492
+ generation += 1;
493
+ stopSource();
494
+ stopDirty();
495
+ stopWrite();
496
+ keyval?.close();
497
+ keyval = undefined;
498
+ });
499
+
500
+ return {
501
+ state,
502
+ supported: readonly(supported),
503
+ ready: readonly(ready),
504
+ error,
505
+ refresh,
506
+ remove,
507
+ };
508
+ }