@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,182 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, hasInjectionContext, readonly, shallowRef, toValue, unref, watchPostEffect } from "vue";
3
+ //#region src/use-scheduler-post-task.ts
4
+ const PRIORITIES = [
5
+ "user-blocking",
6
+ "user-visible",
7
+ "background"
8
+ ];
9
+ function isScheduler(candidate) {
10
+ return typeof candidate === "object" && candidate !== null && typeof Reflect.get(candidate, "postTask") === "function";
11
+ }
12
+ function isTaskControllerHost(candidate) {
13
+ return typeof candidate === "function";
14
+ }
15
+ function isTaskController(controller) {
16
+ return "setPriority" in controller && typeof controller.setPriority === "function";
17
+ }
18
+ function browserGlobal(name) {
19
+ return typeof window === "undefined" ? void 0 : Reflect.get(window, name);
20
+ }
21
+ function browserTimers() {
22
+ if (typeof window === "undefined") return void 0;
23
+ const target = window;
24
+ return {
25
+ setTimeout: (callback, delayMs) => target.setTimeout(callback, delayMs),
26
+ clearTimeout: (handle) => {
27
+ if (typeof handle === "number") target.clearTimeout(handle);
28
+ }
29
+ };
30
+ }
31
+ function validatePriority(priority) {
32
+ if (priority !== void 0 && !PRIORITIES.includes(priority)) throw new TypeError(`[VIZE_COMPOSE_POST_TASK_INVALID_PRIORITY] priority must be one of ${PRIORITIES.join(", ")}, received ${String(priority)}`);
33
+ }
34
+ /**
35
+ * Post prioritized tasks with the Prioritized Task Scheduling API.
36
+ *
37
+ * Every task gets its own controller (a `TaskController` when available),
38
+ * so `setPriority` re-prioritizes pending tasks and `abort` rejects them;
39
+ * pending tasks are aborted when the owning reactive scope stops (their
40
+ * promises reject with an AbortError; outside a scope the caller owns
41
+ * `abort()`).
42
+ *
43
+ * Fallback without `scheduler`: tasks run from `setTimeout(delay)` in
44
+ * timer (FIFO) order. Priorities are ignored, so a later "user-blocking"
45
+ * task does not overtake an earlier "background" one, and tasks do not
46
+ * yield to rendering or input the way native tasks do.
47
+ *
48
+ * Server rendering: nothing is scheduled, `supported` is false and
49
+ * `postTask` rejects.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const { postTask } = useSchedulerPostTask();
54
+ * const total = await postTask(() => expensiveSum(rows), { priority: "background" });
55
+ * ```
56
+ *
57
+ * @param options Hosts and the initial priority.
58
+ * @default options {}
59
+ * @returns Task state and actions.
60
+ */
61
+ function useSchedulerPostTask(options = {}) {
62
+ validatePriority(options.priority);
63
+ const priority = shallowRef(options.priority ?? "user-visible");
64
+ const pending = shallowRef(0);
65
+ const tasks = /* @__PURE__ */ new Set();
66
+ const hydrated = shallowRef(!hasInjectionContext());
67
+ if (!hydrated.value) watchPostEffect(() => {
68
+ hydrated.value = true;
69
+ });
70
+ const resolveScheduler = () => {
71
+ if (!hydrated.value) return void 0;
72
+ const candidate = options.scheduler === void 0 ? browserGlobal("scheduler") : toValue(options.scheduler);
73
+ return isScheduler(candidate) ? candidate : void 0;
74
+ };
75
+ const resolveTaskController = () => {
76
+ if (!hydrated.value) return void 0;
77
+ const candidate = options.TaskController === void 0 ? browserGlobal("TaskController") : unref(options.TaskController);
78
+ return isTaskControllerHost(candidate) ? candidate : void 0;
79
+ };
80
+ const resolveTimers = () => options.timers === void 0 ? browserTimers() : toValue(options.timers) ?? void 0;
81
+ const postTask = (callback, callOptions = {}) => {
82
+ const { delay, signal } = callOptions;
83
+ validatePriority(callOptions.priority);
84
+ if (delay !== void 0 && (!Number.isFinite(delay) || delay < 0)) throw new RangeError(`[VIZE_COMPOSE_POST_TASK_INVALID_DELAY] delay must be a finite, non-negative number, received ${String(delay)}`);
85
+ const scheduler = resolveScheduler();
86
+ const timers = scheduler ? void 0 : resolveTimers();
87
+ if (!scheduler && !timers) return Promise.reject(/* @__PURE__ */ new Error("[VIZE_COMPOSE_POST_TASK_UNAVAILABLE] neither scheduler.postTask nor timers are available"));
88
+ const TaskController = resolveTaskController();
89
+ const taskPriority = callOptions.priority ?? priority.value;
90
+ const controller = TaskController ? new TaskController({ priority: taskPriority }) : new AbortController();
91
+ const task = {
92
+ controller,
93
+ fixed: callOptions.priority !== void 0
94
+ };
95
+ const forwardAbort = () => controller.abort(signal?.reason);
96
+ if (signal?.aborted) forwardAbort();
97
+ else signal?.addEventListener("abort", forwardAbort, { once: true });
98
+ tasks.add(task);
99
+ pending.value = tasks.size;
100
+ let result;
101
+ if (scheduler) {
102
+ const explicitPriority = task.fixed || !TaskController ? { priority: taskPriority } : {};
103
+ try {
104
+ result = scheduler.postTask(callback, {
105
+ signal: controller.signal,
106
+ ...explicitPriority,
107
+ ...delay === void 0 ? {} : { delay }
108
+ });
109
+ } catch (cause) {
110
+ signal?.removeEventListener("abort", forwardAbort);
111
+ tasks.delete(task);
112
+ pending.value = tasks.size;
113
+ return Promise.reject(cause);
114
+ }
115
+ } else result = new Promise((resolve, reject) => {
116
+ const taskSignal = controller.signal;
117
+ if (taskSignal.aborted) {
118
+ reject(taskSignal.reason);
119
+ return;
120
+ }
121
+ const onAbort = () => {
122
+ timers?.clearTimeout(handle);
123
+ reject(taskSignal.reason);
124
+ };
125
+ const handle = timers?.setTimeout(() => {
126
+ taskSignal.removeEventListener("abort", onAbort);
127
+ try {
128
+ resolve(callback());
129
+ } catch (cause) {
130
+ reject(cause);
131
+ }
132
+ }, delay ?? 0);
133
+ taskSignal.addEventListener("abort", onAbort, { once: true });
134
+ });
135
+ const settle = () => {
136
+ signal?.removeEventListener("abort", forwardAbort);
137
+ tasks.delete(task);
138
+ pending.value = tasks.size;
139
+ };
140
+ return result.then((value) => {
141
+ settle();
142
+ return value;
143
+ }, (cause) => {
144
+ settle();
145
+ throw cause;
146
+ });
147
+ };
148
+ const setPriority = (next) => {
149
+ validatePriority(next);
150
+ priority.value = next;
151
+ for (const task of tasks) {
152
+ if (task.fixed || !isTaskController(task.controller)) continue;
153
+ try {
154
+ task.controller.setPriority(next);
155
+ } catch {}
156
+ }
157
+ };
158
+ const abort = (reason) => {
159
+ for (const task of Array.from(tasks)) task.controller.abort(reason);
160
+ };
161
+ const yieldTask = () => {
162
+ const scheduler = resolveScheduler();
163
+ if (scheduler?.yield) return scheduler.yield();
164
+ const timers = resolveTimers();
165
+ if (!timers) return Promise.resolve();
166
+ return new Promise((resolve) => {
167
+ timers.setTimeout(resolve, 0);
168
+ });
169
+ };
170
+ tryOnScopeDispose(() => abort());
171
+ return {
172
+ supported: computed(() => resolveScheduler() !== void 0),
173
+ priority: readonly(priority),
174
+ pending: readonly(pending),
175
+ postTask,
176
+ setPriority,
177
+ abort,
178
+ yield: yieldTask
179
+ };
180
+ }
181
+ //#endregion
182
+ export { useSchedulerPostTask };
@@ -0,0 +1,205 @@
1
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
+
3
+ //#region src/use-screen-details.d.ts
4
+ /** Available (work) area of a screen in multi-screen coordinates. */
5
+ interface ScreenArea {
6
+ /** Left edge of the available area. */
7
+ readonly availLeft: number;
8
+ /** Top edge of the available area. */
9
+ readonly availTop: number;
10
+ /** Width of the available area. */
11
+ readonly availWidth: number;
12
+ /** Height of the available area. */
13
+ readonly availHeight: number;
14
+ }
15
+ /** Plain snapshot of a `ScreenDetailed`. */
16
+ interface ScreenSnapshot extends ScreenArea {
17
+ /** Human-readable label, possibly empty. */
18
+ readonly label: string;
19
+ /** Left edge in multi-screen coordinates. */
20
+ readonly left: number;
21
+ /** Top edge in multi-screen coordinates. */
22
+ readonly top: number;
23
+ /** Full width. */
24
+ readonly width: number;
25
+ /** Full height. */
26
+ readonly height: number;
27
+ /** Device pixel ratio. */
28
+ readonly devicePixelRatio: number;
29
+ /** Color depth in bits. */
30
+ readonly colorDepth: number;
31
+ /** Whether this is the primary screen. */
32
+ readonly isPrimary: boolean;
33
+ /** Whether this screen is built into the device. */
34
+ readonly isInternal: boolean;
35
+ }
36
+ /** Minimal `ScreenDetailed`. */
37
+ interface ScreenDetailedLike extends ScreenSnapshot, EventTarget {}
38
+ /** Minimal `ScreenDetails`. */
39
+ interface ScreenDetailsLike extends EventTarget {
40
+ /** Every connected screen. */
41
+ readonly screens: readonly ScreenDetailedLike[];
42
+ /** Screen hosting the current window. */
43
+ readonly currentScreen: ScreenDetailedLike;
44
+ }
45
+ /** Capabilities used by {@link useScreenDetails}. */
46
+ interface ScreenDetailsHost {
47
+ /** Window Management entry point (permission-gated). */
48
+ getScreenDetails?(): Promise<ScreenDetailsLike>;
49
+ /**
50
+ * `window.screen`. Its `isExtended` flag is read and, when it is an
51
+ * `EventTarget`, its `change` event refreshes the flag.
52
+ */
53
+ readonly screen?: object | null;
54
+ /** `window.open`, used by `openOnScreen`. */
55
+ open?(url: string, target: string, features: string): Window | null;
56
+ }
57
+ /** Options for {@link useScreenDetails}. */
58
+ interface UseScreenDetailsOptions {
59
+ /**
60
+ * Window Management capability for alternate runtimes and tests.
61
+ *
62
+ * @default window
63
+ */
64
+ readonly host?: MaybeRefOrGetter<ScreenDetailsHost | null | undefined>;
65
+ }
66
+ /** Desired window geometry relative to a screen's available area. */
67
+ interface WindowPlacementOptions {
68
+ /**
69
+ * Window width, clamped to the available width.
70
+ *
71
+ * @default the available width
72
+ */
73
+ readonly width?: number;
74
+ /**
75
+ * Window height, clamped to the available height.
76
+ *
77
+ * @default the available height
78
+ */
79
+ readonly height?: number;
80
+ /**
81
+ * Offset from the available area's left edge.
82
+ *
83
+ * @default centered horizontally
84
+ */
85
+ readonly left?: number;
86
+ /**
87
+ * Offset from the available area's top edge.
88
+ *
89
+ * @default centered vertically
90
+ */
91
+ readonly top?: number;
92
+ }
93
+ /** Absolute window geometry for `window.open` features or `moveTo`/`resizeTo`. */
94
+ interface WindowPlacement {
95
+ /** Absolute left. */
96
+ readonly left: number;
97
+ /** Absolute top. */
98
+ readonly top: number;
99
+ /** Width. */
100
+ readonly width: number;
101
+ /** Height. */
102
+ readonly height: number;
103
+ }
104
+ /** Options of {@link ScreenDetailsControls.openOnScreen}. */
105
+ interface OpenOnScreenOptions extends WindowPlacementOptions {
106
+ /**
107
+ * Browsing context name.
108
+ *
109
+ * @default "_blank"
110
+ */
111
+ readonly target?: string;
112
+ /**
113
+ * Extra comma-separated window features, for example `"popup"`.
114
+ *
115
+ * @default ""
116
+ */
117
+ readonly features?: string;
118
+ }
119
+ /** Discriminated outcome of {@link ScreenDetailsControls.request}. */
120
+ type ScreenDetailsResult = {
121
+ /** Permission granted; state is live. */readonly status: "granted"; /** Screen snapshots. */
122
+ readonly screens: readonly ScreenSnapshot[];
123
+ } | {
124
+ /** `denied`: permission refused; `unsupported`: no API; `failed`: anything else. */readonly status: "denied" | "unsupported" | "failed"; /** Error thrown by the host, when one was thrown. */
125
+ readonly error: unknown;
126
+ };
127
+ /** Reactive state and actions returned by {@link useScreenDetails}. */
128
+ interface ScreenDetailsControls {
129
+ /** Whether the Window Management API is available. */
130
+ readonly supported: ComputedRef<boolean>;
131
+ /** Whether the window spans a multi-screen setup (`screen.isExtended`). */
132
+ readonly isExtended: Readonly<Ref<boolean>>;
133
+ /** Snapshots of every screen, empty until `request` succeeds. */
134
+ readonly screens: Readonly<ShallowRef<readonly ScreenSnapshot[]>>;
135
+ /** Snapshot of the current screen, once granted. */
136
+ readonly currentScreen: Readonly<ShallowRef<ScreenSnapshot | undefined>>;
137
+ /** Whether `request` is in progress. */
138
+ readonly pending: Readonly<Ref<boolean>>;
139
+ /** Most recent request failure, cleared on success. */
140
+ readonly error: Readonly<ShallowRef<unknown>>;
141
+ /**
142
+ * Request screen details (prompts for the window-management permission).
143
+ *
144
+ * @returns The discriminated outcome; never rejects.
145
+ */
146
+ readonly request: () => Promise<ScreenDetailsResult>;
147
+ /**
148
+ * Open a window placed on `screen`.
149
+ *
150
+ * @param url URL to open.
151
+ * @param screen Target screen (a snapshot or any {@link ScreenArea}).
152
+ * @param options Placement, target name, and extra features.
153
+ * @returns The opened window, or `null` when blocked or unsupported.
154
+ */
155
+ readonly openOnScreen: (url: string, screen: ScreenArea, options?: OpenOnScreenOptions) => Window | null;
156
+ /** Remove every listener. Idempotent. */
157
+ readonly stop: () => void;
158
+ }
159
+ /**
160
+ * Snapshot a `ScreenDetailed` into a plain object.
161
+ *
162
+ * @param screen Screen to copy.
163
+ * @returns Plain snapshot.
164
+ */
165
+ declare function snapshotScreen(screen: ScreenSnapshot): ScreenSnapshot;
166
+ /**
167
+ * Compute absolute window geometry inside a screen's available area.
168
+ *
169
+ * Sizes are clamped to the available area; omitted offsets center the window.
170
+ *
171
+ * @param screen Target screen area.
172
+ * @param placement Desired size and offsets.
173
+ * @default placement {}
174
+ * @throws `RangeError` tagged `VIZE_COMPOSE_SCREEN_DETAILS_INVALID_PLACEMENT` for negative or non-finite values.
175
+ * @returns Absolute placement.
176
+ */
177
+ declare function placeWindow(screen: ScreenArea, placement?: WindowPlacementOptions): WindowPlacement;
178
+ /**
179
+ * Enumerate and target multiple screens with the Window Management API.
180
+ *
181
+ * `isExtended` is live from `window.screen`. `request()` asks for the
182
+ * window-management permission; once granted, `screens` and
183
+ * `currentScreen` stay current through `screenschange`,
184
+ * `currentscreenchange`, and per-screen `change` events. `openOnScreen`
185
+ * opens a window placed with {@link placeWindow}. Listeners are removed when
186
+ * the owning reactive scope stops; outside a scope call `stop()`.
187
+ *
188
+ * Server rendering: nothing is requested, `supported` and `isExtended` are
189
+ * false and `screens` is empty.
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * const { request, screens, openOnScreen } = useScreenDetails();
194
+ * await request();
195
+ * const external = screens.value.find((screen) => !screen.isPrimary);
196
+ * if (external) openOnScreen("/slides", external, { features: "popup" });
197
+ * ```
198
+ *
199
+ * @param options Capability host.
200
+ * @default options {}
201
+ * @returns Screen state and actions.
202
+ */
203
+ declare function useScreenDetails(options?: UseScreenDetailsOptions): ScreenDetailsControls;
204
+ //#endregion
205
+ export { OpenOnScreenOptions, ScreenArea, ScreenDetailedLike, ScreenDetailsControls, ScreenDetailsHost, ScreenDetailsLike, ScreenDetailsResult, ScreenSnapshot, UseScreenDetailsOptions, WindowPlacement, WindowPlacementOptions, placeWindow, snapshotScreen, useScreenDetails };
@@ -0,0 +1,188 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, hasInjectionContext, readonly, ref, shallowRef, toValue, watch, watchPostEffect } from "vue";
3
+ //#region src/use-screen-details.ts
4
+ /**
5
+ * Snapshot a `ScreenDetailed` into a plain object.
6
+ *
7
+ * @param screen Screen to copy.
8
+ * @returns Plain snapshot.
9
+ */
10
+ function snapshotScreen(screen) {
11
+ return {
12
+ label: screen.label,
13
+ left: screen.left,
14
+ top: screen.top,
15
+ width: screen.width,
16
+ height: screen.height,
17
+ availLeft: screen.availLeft,
18
+ availTop: screen.availTop,
19
+ availWidth: screen.availWidth,
20
+ availHeight: screen.availHeight,
21
+ devicePixelRatio: screen.devicePixelRatio,
22
+ colorDepth: screen.colorDepth,
23
+ isPrimary: screen.isPrimary,
24
+ isInternal: screen.isInternal
25
+ };
26
+ }
27
+ /**
28
+ * Compute absolute window geometry inside a screen's available area.
29
+ *
30
+ * Sizes are clamped to the available area; omitted offsets center the window.
31
+ *
32
+ * @param screen Target screen area.
33
+ * @param placement Desired size and offsets.
34
+ * @default placement {}
35
+ * @throws `RangeError` tagged `VIZE_COMPOSE_SCREEN_DETAILS_INVALID_PLACEMENT` for negative or non-finite values.
36
+ * @returns Absolute placement.
37
+ */
38
+ function placeWindow(screen, placement = {}) {
39
+ for (const value of [
40
+ placement.width,
41
+ placement.height,
42
+ placement.left,
43
+ placement.top
44
+ ]) if (value !== void 0 && (!Number.isFinite(value) || value < 0)) throw new RangeError(`[VIZE_COMPOSE_SCREEN_DETAILS_INVALID_PLACEMENT] placement values must be finite and non-negative; received ${String(value)}`);
45
+ const width = Math.round(Math.min(placement.width ?? screen.availWidth, screen.availWidth));
46
+ const height = Math.round(Math.min(placement.height ?? screen.availHeight, screen.availHeight));
47
+ const left = placement.left ?? (screen.availWidth - width) / 2;
48
+ const top = placement.top ?? (screen.availHeight - height) / 2;
49
+ return {
50
+ left: Math.round(screen.availLeft + Math.min(left, screen.availWidth - width)),
51
+ top: Math.round(screen.availTop + Math.min(top, screen.availHeight - height)),
52
+ width,
53
+ height
54
+ };
55
+ }
56
+ function browserHost() {
57
+ return typeof window === "undefined" ? void 0 : window;
58
+ }
59
+ function errorName(error) {
60
+ return typeof error === "object" && error !== null && "name" in error ? error.name : void 0;
61
+ }
62
+ /**
63
+ * Enumerate and target multiple screens with the Window Management API.
64
+ *
65
+ * `isExtended` is live from `window.screen`. `request()` asks for the
66
+ * window-management permission; once granted, `screens` and
67
+ * `currentScreen` stay current through `screenschange`,
68
+ * `currentscreenchange`, and per-screen `change` events. `openOnScreen`
69
+ * opens a window placed with {@link placeWindow}. Listeners are removed when
70
+ * the owning reactive scope stops; outside a scope call `stop()`.
71
+ *
72
+ * Server rendering: nothing is requested, `supported` and `isExtended` are
73
+ * false and `screens` is empty.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * const { request, screens, openOnScreen } = useScreenDetails();
78
+ * await request();
79
+ * const external = screens.value.find((screen) => !screen.isPrimary);
80
+ * if (external) openOnScreen("/slides", external, { features: "popup" });
81
+ * ```
82
+ *
83
+ * @param options Capability host.
84
+ * @default options {}
85
+ * @returns Screen state and actions.
86
+ */
87
+ function useScreenDetails(options = {}) {
88
+ const isExtended = ref(false);
89
+ const screens = shallowRef([]);
90
+ const currentScreen = shallowRef(void 0);
91
+ const pending = ref(false);
92
+ const error = shallowRef(void 0);
93
+ let unbind;
94
+ let stopped = false;
95
+ const hydrated = shallowRef(!hasInjectionContext());
96
+ if (!hydrated.value) watchPostEffect(() => {
97
+ hydrated.value = true;
98
+ });
99
+ const resolveHost = () => !hydrated.value ? void 0 : options.host === void 0 ? browserHost() : toValue(options.host) ?? void 0;
100
+ const bind = (details) => {
101
+ unbind?.();
102
+ let watched = [];
103
+ const sync = () => {
104
+ for (const screen of watched) screen.removeEventListener("change", sync);
105
+ watched = details.screens;
106
+ for (const screen of watched) screen.addEventListener("change", sync);
107
+ screens.value = watched.map(snapshotScreen);
108
+ currentScreen.value = snapshotScreen(details.currentScreen);
109
+ };
110
+ sync();
111
+ details.addEventListener("screenschange", sync);
112
+ details.addEventListener("currentscreenchange", sync);
113
+ unbind = () => {
114
+ for (const screen of watched) screen.removeEventListener("change", sync);
115
+ details.removeEventListener("screenschange", sync);
116
+ details.removeEventListener("currentscreenchange", sync);
117
+ };
118
+ };
119
+ const request = async () => {
120
+ const host = resolveHost();
121
+ if (!host?.getScreenDetails) return {
122
+ status: "unsupported",
123
+ error: void 0
124
+ };
125
+ pending.value = true;
126
+ try {
127
+ const details = await host.getScreenDetails();
128
+ if (stopped) return {
129
+ status: "failed",
130
+ error: void 0
131
+ };
132
+ bind(details);
133
+ error.value = void 0;
134
+ return {
135
+ status: "granted",
136
+ screens: screens.value
137
+ };
138
+ } catch (cause) {
139
+ error.value = cause;
140
+ return {
141
+ status: errorName(cause) === "NotAllowedError" ? "denied" : "failed",
142
+ error: cause
143
+ };
144
+ } finally {
145
+ pending.value = false;
146
+ }
147
+ };
148
+ const openOnScreen = (url, screen, openOptions = {}) => {
149
+ const host = resolveHost();
150
+ if (!host?.open) return null;
151
+ const { left, top, width, height } = placeWindow(screen, openOptions);
152
+ const features = [`left=${left},top=${top},width=${width},height=${height}`];
153
+ if (openOptions.features) features.push(openOptions.features);
154
+ return host.open(url, openOptions.target ?? "_blank", features.join(","));
155
+ };
156
+ const stopWatch = watch(() => resolveHost()?.screen ?? void 0, (screen, _previous, onCleanup) => {
157
+ const sync = () => {
158
+ isExtended.value = screen !== void 0 && "isExtended" in screen && screen.isExtended === true;
159
+ };
160
+ sync();
161
+ if (!(screen instanceof EventTarget)) return;
162
+ screen.addEventListener("change", sync);
163
+ onCleanup(() => screen.removeEventListener("change", sync));
164
+ }, {
165
+ immediate: true,
166
+ flush: "sync"
167
+ });
168
+ const stop = () => {
169
+ stopped = true;
170
+ stopWatch();
171
+ unbind?.();
172
+ unbind = void 0;
173
+ };
174
+ tryOnScopeDispose(stop);
175
+ return {
176
+ supported: computed(() => typeof resolveHost()?.getScreenDetails === "function"),
177
+ isExtended: readonly(isExtended),
178
+ screens: readonly(screens),
179
+ currentScreen: readonly(currentScreen),
180
+ pending: readonly(pending),
181
+ error: readonly(error),
182
+ request,
183
+ openOnScreen,
184
+ stop
185
+ };
186
+ }
187
+ //#endregion
188
+ export { placeWindow, snapshotScreen, useScreenDetails };