@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,168 @@
1
+ import { computed, isRef, shallowRef, toValue, watch } from "vue";
2
+ import type { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref, WritableComputedRef } from "vue";
3
+
4
+ /** Page information passed to the {@link useOffsetPagination} callbacks. */
5
+ export interface OffsetPaginationInfo {
6
+ /** One-based current page. */
7
+ readonly currentPage: number;
8
+
9
+ /** Items per page. */
10
+ readonly currentPageSize: number;
11
+
12
+ /** Number of pages (at least one). */
13
+ readonly pageCount: number;
14
+ }
15
+
16
+ /** Options for {@link useOffsetPagination}. */
17
+ export interface UseOffsetPaginationOptions {
18
+ /**
19
+ * Total number of items. Reactive.
20
+ *
21
+ * @default Number.POSITIVE_INFINITY
22
+ */
23
+ readonly total?: MaybeRefOrGetter<number>;
24
+
25
+ /**
26
+ * One-based current page. Pass a writable ref for two-way binding.
27
+ *
28
+ * @default 1
29
+ */
30
+ readonly page?: MaybeRef<number>;
31
+
32
+ /**
33
+ * Items per page. Pass a writable ref for two-way binding.
34
+ *
35
+ * @default 10
36
+ */
37
+ readonly pageSize?: MaybeRef<number>;
38
+
39
+ /**
40
+ * Called after the current page changes.
41
+ *
42
+ * @default undefined
43
+ */
44
+ readonly onPageChange?: (info: OffsetPaginationInfo) => void;
45
+
46
+ /**
47
+ * Called after the page size changes.
48
+ *
49
+ * @default undefined
50
+ */
51
+ readonly onPageSizeChange?: (info: OffsetPaginationInfo) => void;
52
+
53
+ /**
54
+ * Called after the page count changes.
55
+ *
56
+ * @default undefined
57
+ */
58
+ readonly onPageCountChange?: (info: OffsetPaginationInfo) => void;
59
+ }
60
+
61
+ /** Pagination state and controls returned by {@link useOffsetPagination}. */
62
+ export interface OffsetPagination {
63
+ /** One-based current page, always within `[1, pageCount]`. Writable. */
64
+ readonly currentPage: WritableComputedRef<number>;
65
+
66
+ /** Items per page, at least one. Writable. */
67
+ readonly currentPageSize: WritableComputedRef<number>;
68
+
69
+ /** Number of pages (at least one). */
70
+ readonly pageCount: ComputedRef<number>;
71
+
72
+ /** Zero-based offset of the first item of the current page. */
73
+ readonly offset: ComputedRef<number>;
74
+
75
+ /** Whether the current page is the first. */
76
+ readonly isFirstPage: ComputedRef<boolean>;
77
+
78
+ /** Whether the current page is the last. */
79
+ readonly isLastPage: ComputedRef<boolean>;
80
+
81
+ /** Go to the previous page (no-op on the first). */
82
+ readonly prev: () => void;
83
+
84
+ /** Go to the next page (no-op on the last). */
85
+ readonly next: () => void;
86
+ }
87
+
88
+ function toWritable(value: MaybeRef<number> | undefined, fallback: number): Ref<number> {
89
+ return isRef(value) ? value : shallowRef(value ?? fallback);
90
+ }
91
+
92
+ /**
93
+ * Offset-based pagination state.
94
+ *
95
+ * The page is clamped into `[1, pageCount]` on every read and write, so
96
+ * shrinking `total` or growing `pageSize` never leaves the cursor past the
97
+ * end. Writable `page`/`pageSize` refs are updated in place for two-way
98
+ * binding. Callbacks fire after the corresponding value settles.
99
+ * Synchronous state: SSR-safe; watchers follow the owning scope.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * const { currentPage, pageCount, next, offset } = useOffsetPagination({ total, pageSize: 20 });
104
+ * ```
105
+ *
106
+ * @param options Total, page, page size, and change callbacks.
107
+ * @default options {}
108
+ * @returns Pagination state and controls.
109
+ */
110
+ export function useOffsetPagination(options: UseOffsetPaginationOptions = {}): OffsetPagination {
111
+ const page = toWritable(options.page, 1);
112
+ const size = toWritable(options.pageSize, 10);
113
+
114
+ const currentPageSize = computed<number>({
115
+ get: () => Math.max(1, Math.trunc(size.value)),
116
+ set: (value) => {
117
+ size.value = Math.max(1, Math.trunc(value));
118
+ },
119
+ });
120
+ const pageCount = computed(() => {
121
+ const total = toValue(options.total ?? Number.POSITIVE_INFINITY);
122
+ return Math.max(1, Math.ceil(Math.max(0, total) / currentPageSize.value));
123
+ });
124
+ const clampPage = (value: number): number =>
125
+ Math.min(pageCount.value, Math.max(1, Number.isNaN(value) ? 1 : Math.trunc(value)));
126
+ const currentPage = computed<number>({
127
+ get: () => clampPage(page.value),
128
+ set: (value) => {
129
+ page.value = clampPage(value);
130
+ },
131
+ });
132
+ const offset = computed(() => (currentPage.value - 1) * currentPageSize.value);
133
+ const isFirstPage = computed(() => currentPage.value === 1);
134
+ const isLastPage = computed(() => currentPage.value === pageCount.value);
135
+
136
+ const info = (): OffsetPaginationInfo => ({
137
+ currentPage: currentPage.value,
138
+ currentPageSize: currentPageSize.value,
139
+ pageCount: pageCount.value,
140
+ });
141
+ if (options.onPageChange !== undefined) {
142
+ const callback = options.onPageChange;
143
+ watch(currentPage, () => callback(info()));
144
+ }
145
+ if (options.onPageSizeChange !== undefined) {
146
+ const callback = options.onPageSizeChange;
147
+ watch(currentPageSize, () => callback(info()));
148
+ }
149
+ if (options.onPageCountChange !== undefined) {
150
+ const callback = options.onPageCountChange;
151
+ watch(pageCount, () => callback(info()));
152
+ }
153
+
154
+ return {
155
+ currentPage,
156
+ currentPageSize,
157
+ pageCount,
158
+ offset,
159
+ isFirstPage,
160
+ isLastPage,
161
+ prev: () => {
162
+ currentPage.value -= 1;
163
+ },
164
+ next: () => {
165
+ currentPage.value += 1;
166
+ },
167
+ };
168
+ }
@@ -0,0 +1,465 @@
1
+ import {
2
+ computed,
3
+ hasInjectionContext,
4
+ readonly,
5
+ shallowRef,
6
+ toValue,
7
+ unref,
8
+ watchPostEffect,
9
+ } from "vue";
10
+ import type { ComputedRef, MaybeRef, MaybeRefOrGetter, ShallowRef } from "vue";
11
+
12
+ import { tryOnScopeDispose } from "./scope.ts";
13
+
14
+ /** Monetary amount. */
15
+ export interface PaymentAmount {
16
+ /** ISO 4217 currency code. */
17
+ readonly currency: string;
18
+ /** Decimal amount, for example `"9.99"`. */
19
+ readonly value: string;
20
+ }
21
+
22
+ /** Line item shown on the payment sheet. */
23
+ export interface PaymentLineItem {
24
+ /** Human-readable label. */
25
+ readonly label: string;
26
+ /** Amount. */
27
+ readonly amount: PaymentAmount;
28
+ /** Whether the amount is not final yet. */
29
+ readonly pending?: boolean;
30
+ }
31
+
32
+ /** Selectable shipping option. */
33
+ export interface PaymentShippingOption {
34
+ /** Option id reported back in `shippingOption`. */
35
+ readonly id: string;
36
+ /** Human-readable label. */
37
+ readonly label: string;
38
+ /** Price of the option. */
39
+ readonly amount: PaymentAmount;
40
+ /** Whether the option is preselected. */
41
+ readonly selected?: boolean;
42
+ }
43
+
44
+ /** Accepted payment method. */
45
+ export interface PaymentMethod {
46
+ /** Payment method identifier (URL or standardized name). */
47
+ readonly supportedMethods: string;
48
+ /** Method-specific data. */
49
+ readonly data?: unknown;
50
+ }
51
+
52
+ /** Initial payment details. */
53
+ export interface PaymentDetails {
54
+ /** Request id. */
55
+ readonly id?: string;
56
+ /** Total amount. */
57
+ readonly total: PaymentLineItem;
58
+ /** Line items. */
59
+ readonly displayItems?: readonly PaymentLineItem[];
60
+ /** Shipping options. */
61
+ readonly shippingOptions?: readonly PaymentShippingOption[];
62
+ }
63
+
64
+ /** Details passed to `updateWith` after a shipping change. */
65
+ export interface PaymentDetailsUpdate {
66
+ /** Updated total. */
67
+ readonly total?: PaymentLineItem;
68
+ /** Updated line items. */
69
+ readonly displayItems?: readonly PaymentLineItem[];
70
+ /** Updated shipping options (empty to reject the address). */
71
+ readonly shippingOptions?: readonly PaymentShippingOption[];
72
+ /** Error message shown to the user. */
73
+ readonly error?: string;
74
+ /** Per-field shipping address errors. */
75
+ readonly shippingAddressErrors?: Readonly<Record<string, string>>;
76
+ }
77
+
78
+ /** Shipping category of the request. */
79
+ export type PaymentShippingType = "shipping" | "delivery" | "pickup";
80
+
81
+ /** Payer information requested from the sheet. */
82
+ export interface PaymentRequestOptionsInit {
83
+ /** Request the payer name. */
84
+ readonly requestPayerName?: boolean;
85
+ /** Request the payer email. */
86
+ readonly requestPayerEmail?: boolean;
87
+ /** Request the payer phone. */
88
+ readonly requestPayerPhone?: boolean;
89
+ /** Request a shipping address. */
90
+ readonly requestShipping?: boolean;
91
+ /** Shipping category. */
92
+ readonly shippingType?: PaymentShippingType;
93
+ }
94
+
95
+ /** Outcome passed to {@link PaymentResponseLike.complete}. */
96
+ export type PaymentCompletion = "success" | "fail" | "unknown";
97
+
98
+ /** Minimal `PaymentResponse`. */
99
+ export interface PaymentResponseLike {
100
+ /** Request id. */
101
+ readonly requestId: string;
102
+ /** Method the payer chose. */
103
+ readonly methodName: string;
104
+ /** Method-specific response data. */
105
+ readonly details: unknown;
106
+ /** Payer name, when requested. */
107
+ readonly payerName?: string | null;
108
+ /** Payer email, when requested. */
109
+ readonly payerEmail?: string | null;
110
+ /** Payer phone, when requested. */
111
+ readonly payerPhone?: string | null;
112
+ /** Shipping address, when requested. */
113
+ readonly shippingAddress?: unknown;
114
+ /** Selected shipping option id. */
115
+ readonly shippingOption?: string | null;
116
+ /** Close the sheet with an outcome. */
117
+ complete(result?: PaymentCompletion): Promise<void>;
118
+ }
119
+
120
+ /** Minimal `PaymentRequest` instance. */
121
+ export interface PaymentRequestLike extends EventTarget {
122
+ /** Current shipping address. */
123
+ readonly shippingAddress?: unknown;
124
+ /** Current shipping option id. */
125
+ readonly shippingOption?: string | null;
126
+ /** Whether a method can be used. */
127
+ canMakePayment(): Promise<boolean>;
128
+ /** Show the payment sheet (needs user activation). */
129
+ show(): Promise<PaymentResponseLike>;
130
+ /** Abort a showing sheet. */
131
+ abort(): Promise<void>;
132
+ }
133
+
134
+ /** Minimal `PaymentRequest` constructor. */
135
+ export type PaymentRequestHost = new (
136
+ methods: PaymentMethod[],
137
+ details: PaymentDetails,
138
+ options?: PaymentRequestOptionsInit,
139
+ ) => PaymentRequestLike;
140
+
141
+ /** Context passed to shipping change hooks. */
142
+ export interface PaymentShippingChange {
143
+ /** Request that fired the change. */
144
+ readonly request: PaymentRequestLike;
145
+ /** Current shipping address. */
146
+ readonly shippingAddress: unknown;
147
+ /** Current shipping option id. */
148
+ readonly shippingOption: string | null;
149
+ }
150
+
151
+ /**
152
+ * Shipping change hook. Return (or resolve to) a details update to call
153
+ * `updateWith`; return `undefined` to leave the sheet unchanged.
154
+ */
155
+ export type PaymentShippingChangeHook = (
156
+ change: PaymentShippingChange,
157
+ ) => PaymentDetailsUpdate | Promise<PaymentDetailsUpdate> | undefined;
158
+
159
+ /** Options for {@link usePaymentRequest}. */
160
+ export interface UsePaymentRequestOptions {
161
+ /** Accepted payment methods. Reactive; read when a request is created. */
162
+ readonly methods: MaybeRefOrGetter<readonly PaymentMethod[]>;
163
+
164
+ /** Payment details. Reactive; read when a request is created. */
165
+ readonly details: MaybeRefOrGetter<PaymentDetails>;
166
+
167
+ /**
168
+ * Payer information to request.
169
+ *
170
+ * @default {}
171
+ */
172
+ readonly paymentOptions?: MaybeRefOrGetter<PaymentRequestOptionsInit>;
173
+
174
+ /**
175
+ * `PaymentRequest` constructor for alternate runtimes and tests. A ref
176
+ * (not a getter) because the host is a constructor function.
177
+ *
178
+ * @default window.PaymentRequest when it exists
179
+ */
180
+ readonly PaymentRequest?: MaybeRef<PaymentRequestHost | null | undefined>;
181
+
182
+ /**
183
+ * Called on `shippingaddresschange`.
184
+ *
185
+ * @default undefined
186
+ */
187
+ readonly onShippingAddressChange?: PaymentShippingChangeHook;
188
+
189
+ /**
190
+ * Called on `shippingoptionchange`.
191
+ *
192
+ * @default undefined
193
+ */
194
+ readonly onShippingOptionChange?: PaymentShippingChangeHook;
195
+ }
196
+
197
+ /** Lifecycle of the payment sheet. */
198
+ export type PaymentRequestState = "idle" | "interactive" | "awaiting-complete";
199
+
200
+ /** Discriminated outcome of {@link PaymentRequestControls.show}. */
201
+ export type PaymentShowResult =
202
+ | {
203
+ /** The payer authorized the payment; call `complete` next. */
204
+ readonly status: "completed";
205
+ /** Payment response. */
206
+ readonly response: PaymentResponseLike;
207
+ }
208
+ | {
209
+ /**
210
+ * `aborted`: dismissed or aborted; `unsupported`: no API or no
211
+ * supported method; `failed`: anything else.
212
+ */
213
+ readonly status: "aborted" | "unsupported" | "failed";
214
+ /** Error thrown by the host, when one was thrown. */
215
+ readonly error: unknown;
216
+ };
217
+
218
+ /** Reactive state and actions returned by {@link usePaymentRequest}. */
219
+ export interface PaymentRequestControls {
220
+ /** Whether the Payment Request API is available. */
221
+ readonly supported: ComputedRef<boolean>;
222
+ /** Sheet lifecycle. */
223
+ readonly state: Readonly<ShallowRef<PaymentRequestState>>;
224
+ /** Most recent response, cleared when a new sheet is shown. */
225
+ readonly response: Readonly<ShallowRef<PaymentResponseLike | undefined>>;
226
+ /** Most recent failure (not dismissals). */
227
+ readonly error: Readonly<ShallowRef<unknown>>;
228
+ /**
229
+ * Whether the configured methods can be used.
230
+ *
231
+ * @returns `false` when unsupported or the check fails.
232
+ */
233
+ readonly canMakePayment: () => Promise<boolean>;
234
+ /**
235
+ * Show the payment sheet. Aborts a sheet that is still showing.
236
+ *
237
+ * @returns The discriminated outcome; never rejects.
238
+ */
239
+ readonly show: () => Promise<PaymentShowResult>;
240
+ /**
241
+ * Close the sheet after processing the response.
242
+ *
243
+ * @param result Processing outcome.
244
+ * @default result "unknown"
245
+ * @returns Whether a response was completed.
246
+ */
247
+ readonly complete: (result?: PaymentCompletion) => Promise<boolean>;
248
+ /**
249
+ * Abort the showing sheet.
250
+ *
251
+ * @returns Whether a sheet was aborted.
252
+ */
253
+ readonly abort: () => Promise<boolean>;
254
+ }
255
+
256
+ function isPaymentRequestHost(candidate: unknown): candidate is PaymentRequestHost {
257
+ return typeof candidate === "function";
258
+ }
259
+
260
+ function browserPaymentRequest(): PaymentRequestHost | undefined {
261
+ if (typeof window === "undefined") return undefined;
262
+ const candidate: unknown = Reflect.get(window, "PaymentRequest");
263
+ return isPaymentRequestHost(candidate) ? candidate : undefined;
264
+ }
265
+
266
+ function hasUpdateWith(
267
+ event: Event,
268
+ ): event is Event & { updateWith(details: Promise<PaymentDetailsUpdate>): void } {
269
+ return "updateWith" in event && typeof event.updateWith === "function";
270
+ }
271
+
272
+ function errorName(error: unknown): unknown {
273
+ return typeof error === "object" && error !== null && "name" in error ? error.name : undefined;
274
+ }
275
+
276
+ /**
277
+ * Collect payments with a typed Payment Request API wrapper.
278
+ *
279
+ * Every `show()` constructs a fresh request from the reactive `methods`,
280
+ * `details`, and `paymentOptions`, wires the shipping hooks (which call
281
+ * `updateWith` synchronously when they return an update), and resolves to a
282
+ * discriminated {@link PaymentShowResult}. Call `complete()` after
283
+ * processing a `"completed"` result. A showing sheet is aborted when the
284
+ * owning reactive scope stops; outside a scope call `abort()`.
285
+ *
286
+ * Server rendering: nothing is constructed, `supported` is false and
287
+ * `state` is `"idle"`.
288
+ * Inside a component `supported` turns true only after mounting, so
289
+ * hydration renders this server state first.
290
+ *
291
+ * @example
292
+ * ```ts
293
+ * const payment = usePaymentRequest({ methods, details: { total } });
294
+ * const result = await payment.show();
295
+ * if (result.status === "completed") await payment.complete(await charge(result.response));
296
+ * ```
297
+ *
298
+ * @param options Methods, details, hooks, and the constructor host.
299
+ * @returns Payment state and actions.
300
+ */
301
+ export function usePaymentRequest(options: UsePaymentRequestOptions): PaymentRequestControls {
302
+ const state = shallowRef<PaymentRequestState>("idle");
303
+ const response = shallowRef<PaymentResponseLike | undefined>(undefined);
304
+ const error = shallowRef<unknown>(undefined);
305
+ let active: PaymentRequestLike | undefined;
306
+ let generation = 0;
307
+ let completing = false;
308
+
309
+ // Inside a component the host is resolved only after mounting, so a
310
+ // hydrating client renders the server's unsupported state first. Outside
311
+ // components it resolves synchronously.
312
+ const hydrated = shallowRef(!hasInjectionContext());
313
+ if (!hydrated.value) {
314
+ watchPostEffect(() => {
315
+ hydrated.value = true;
316
+ });
317
+ }
318
+
319
+ const resolveHost = (): PaymentRequestHost | undefined =>
320
+ options.PaymentRequest === undefined
321
+ ? browserPaymentRequest()
322
+ : (unref(options.PaymentRequest) ?? undefined);
323
+
324
+ const construct = (Host: PaymentRequestHost): PaymentRequestLike =>
325
+ new Host(
326
+ [...toValue(options.methods)],
327
+ toValue(options.details),
328
+ toValue(options.paymentOptions) ?? {},
329
+ );
330
+
331
+ const bindHook = (
332
+ request: PaymentRequestLike,
333
+ type: string,
334
+ hook: PaymentShippingChangeHook | undefined,
335
+ ): void => {
336
+ if (!hook) return;
337
+ request.addEventListener(type, (event) => {
338
+ const update = hook({
339
+ request,
340
+ shippingAddress: request.shippingAddress ?? null,
341
+ shippingOption: request.shippingOption ?? null,
342
+ });
343
+ if (update !== undefined && hasUpdateWith(event)) event.updateWith(Promise.resolve(update));
344
+ });
345
+ };
346
+
347
+ const canMakePayment = async (): Promise<boolean> => {
348
+ const Host = resolveHost();
349
+ if (!Host) return false;
350
+ try {
351
+ return await construct(Host).canMakePayment();
352
+ } catch {
353
+ return false;
354
+ }
355
+ };
356
+
357
+ const abort = async (): Promise<boolean> => {
358
+ const current = active;
359
+ if (!current) return false;
360
+ try {
361
+ await current.abort();
362
+ if (active === current) {
363
+ active = undefined;
364
+ state.value = "idle";
365
+ generation += 1;
366
+ }
367
+ return true;
368
+ } catch {
369
+ return false;
370
+ }
371
+ };
372
+
373
+ const show = async (): Promise<PaymentShowResult> => {
374
+ const Host = resolveHost();
375
+ if (!Host) return { status: "unsupported", error: undefined };
376
+ if (state.value === "awaiting-complete") {
377
+ return {
378
+ status: "failed",
379
+ error: new Error("[VIZE_COMPOSE_PAYMENT_RESPONSE_INCOMPLETE] call complete() first"),
380
+ };
381
+ }
382
+ const currentGeneration = ++generation;
383
+ const previous = active;
384
+ if (previous) {
385
+ try {
386
+ await previous.abort();
387
+ } catch (cause) {
388
+ if (active === previous) {
389
+ error.value = cause;
390
+ return { status: "failed", error: cause };
391
+ }
392
+ }
393
+ if (active === previous) {
394
+ active = undefined;
395
+ state.value = "idle";
396
+ }
397
+ if (currentGeneration !== generation) return { status: "aborted", error: undefined };
398
+ }
399
+ response.value = undefined;
400
+ let request: PaymentRequestLike;
401
+ try {
402
+ request = construct(Host);
403
+ } catch (cause) {
404
+ error.value = cause;
405
+ return { status: "failed", error: cause };
406
+ }
407
+ bindHook(request, "shippingaddresschange", options.onShippingAddressChange);
408
+ bindHook(request, "shippingoptionchange", options.onShippingOptionChange);
409
+ active = request;
410
+ state.value = "interactive";
411
+ try {
412
+ const result = await request.show();
413
+ if (active !== request || currentGeneration !== generation) {
414
+ return { status: "aborted", error: undefined };
415
+ }
416
+ active = undefined;
417
+ response.value = result;
418
+ state.value = "awaiting-complete";
419
+ error.value = undefined;
420
+ return { status: "completed", response: result };
421
+ } catch (cause) {
422
+ if (active !== request || currentGeneration !== generation) {
423
+ return { status: "aborted", error: cause };
424
+ }
425
+ active = undefined;
426
+ state.value = "idle";
427
+ const name = errorName(cause);
428
+ if (name === "AbortError") return { status: "aborted", error: cause };
429
+ if (name === "NotSupportedError") return { status: "unsupported", error: cause };
430
+ error.value = cause;
431
+ return { status: "failed", error: cause };
432
+ }
433
+ };
434
+
435
+ const complete = async (result: PaymentCompletion = "unknown"): Promise<boolean> => {
436
+ const current = response.value;
437
+ if (!current || state.value !== "awaiting-complete" || completing) return false;
438
+ completing = true;
439
+ try {
440
+ await current.complete(result);
441
+ return true;
442
+ } catch (cause) {
443
+ error.value = cause;
444
+ return false;
445
+ } finally {
446
+ completing = false;
447
+ state.value = "idle";
448
+ }
449
+ };
450
+
451
+ tryOnScopeDispose(() => {
452
+ void abort();
453
+ });
454
+
455
+ return {
456
+ supported: computed(() => hydrated.value && resolveHost() !== undefined),
457
+ state: readonly(state),
458
+ response: readonly(response),
459
+ error: readonly(error),
460
+ canMakePayment,
461
+ show,
462
+ complete,
463
+ abort,
464
+ };
465
+ }