@stacksjs/composables 0.72.103 → 0.73.1
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.
- package/dist/types/dom-vendor.d.ts +42 -0
- package/dist/types/dom-vendor.js +0 -0
- package/dist/unrefElement.js +1 -1
- package/dist/useEventListener.js +1 -1
- package/dist/useEyeDropper.d.ts +1 -0
- package/dist/useEyeDropper.js +1 -1
- package/dist/useFullscreen.d.ts +1 -0
- package/dist/useFullscreen.js +1 -1
- package/dist/useNetwork.d.ts +1 -0
- package/dist/useNetwork.js +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser APIs lib.dom does not declare.
|
|
3
|
+
*
|
|
4
|
+
* Vendor-prefixed fullscreen, which Safari still ships under `webkit`, and two
|
|
5
|
+
* APIs that are real but not yet in the standard lib types: the EyeDropper
|
|
6
|
+
* picker and Network Information. Each was reached through a
|
|
7
|
+
* `(document)` / `(navigator)` / `(window)` cast, which
|
|
8
|
+
* hides which member is being probed - a misspelt one reads as `undefined` and
|
|
9
|
+
* the feature-detection beside it quietly concludes "unsupported".
|
|
10
|
+
*
|
|
11
|
+
* A module with `declare global` rather than an ambient `.d.ts`: the ambient
|
|
12
|
+
* form declares a SECOND `Document` here instead of merging with lib.dom's, so
|
|
13
|
+
* the members landed on a type nothing uses. Files that need these import it.
|
|
14
|
+
*/
|
|
15
|
+
export declare interface EyeDropperInstance {
|
|
16
|
+
open: (_options?: { signal?: AbortSignal }) => Promise<{ sRGBHex: string }>
|
|
17
|
+
}
|
|
18
|
+
export declare interface NetworkInformationLike {
|
|
19
|
+
downlink?: number
|
|
20
|
+
downlinkMax?: number
|
|
21
|
+
effectiveType?: string
|
|
22
|
+
rtt?: number
|
|
23
|
+
saveData?: boolean
|
|
24
|
+
type?: string
|
|
25
|
+
addEventListener?: (_type: string, _listener: () => void) => void
|
|
26
|
+
removeEventListener?: (_type: string, _listener: () => void) => void
|
|
27
|
+
}
|
|
28
|
+
declare global {
|
|
29
|
+
interface Document {
|
|
30
|
+
webkitFullscreenElement?: Element | null
|
|
31
|
+
webkitExitFullscreen?: () => Promise<void> | void
|
|
32
|
+
}
|
|
33
|
+
interface HTMLElement {
|
|
34
|
+
webkitRequestFullscreen?: () => Promise<void> | void
|
|
35
|
+
}
|
|
36
|
+
interface Navigator {
|
|
37
|
+
connection?: NetworkInformationLike
|
|
38
|
+
}
|
|
39
|
+
interface Window {
|
|
40
|
+
EyeDropper?: new () => EyeDropperInstance
|
|
41
|
+
}
|
|
42
|
+
}
|
|
File without changes
|
package/dist/unrefElement.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{unref}from"./_shared";export function unrefElement(elRef){const plain=unref(elRef);if(!plain)return plain;if(plain
|
|
1
|
+
import{unref}from"./_shared";export function unrefElement(elRef){const plain=unref(elRef);if(!plain)return plain;if("$el"in plain)return plain.$el;return plain}
|
package/dist/useEventListener.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{onUnmounted,watch}from"@stacksjs/stx";import{isRef,unref,noop}from"./_shared";export function useEventListener(target,event,handler,options){let cleanup=noop;const register=(el)=>{if(!el)return noop;el.addEventListener(event,handler,options);return()=>{el.removeEventListener(event,handler,options)}};if(isRef(target)){watch(target,(_newTarget,_oldTarget)=>{cleanup();cleanup=register(unref(target))});cleanup=register(target
|
|
1
|
+
import{onUnmounted,watch}from"@stacksjs/stx";import{isRef,unref,noop}from"./_shared";export function useEventListener(target,event,handler,options){let cleanup=noop;const register=(el)=>{if(!el)return noop;el.addEventListener(event,handler,options);return()=>{el.removeEventListener(event,handler,options)}};if(isRef(target)){watch(target,(_newTarget,_oldTarget)=>{cleanup();cleanup=register(unref(target))});cleanup=register(unref(target))}else cleanup=register(target);const stop=()=>{cleanup();cleanup=noop};try{onUnmounted(stop)}catch{}return stop}
|
package/dist/useEyeDropper.d.ts
CHANGED
package/dist/useEyeDropper.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ref}from"@stacksjs/stx";export function useEyeDropper(){const isSupported=ref(typeof window<"u"&&"EyeDropper"in window),sRGBHex=ref("");async function open(){if(!isSupported.value)return;const
|
|
1
|
+
import"./types/dom-vendor";import{ref}from"@stacksjs/stx";export function useEyeDropper(){const isSupported=ref(typeof window<"u"&&"EyeDropper"in window),sRGBHex=ref("");async function open(){if(!isSupported.value)return;const Picker=window.EyeDropper;if(!Picker)return;const dropper=new Picker;try{const result=await dropper.open();sRGBHex.value=result.sRGBHex;return result}catch{return}}return{isSupported,sRGBHex,open}}
|
package/dist/useFullscreen.d.ts
CHANGED
package/dist/useFullscreen.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{onUnmounted,ref}from"@stacksjs/stx";import{defaultDocument,unref}from"./_shared";export function useFullscreen(target){const doc=defaultDocument(),isFullscreen=ref(!1),isSupported=ref(!!doc&&(("fullscreenEnabled"in doc)||("webkitFullscreenEnabled"in doc)));function getTarget(){if(target)return unref(target);return doc?.documentElement??null}function getFullscreenElement(){if(!doc)return null;return doc.fullscreenElement??doc.webkitFullscreenElement??null}function updateState(){isFullscreen.value=getFullscreenElement()!==null}async function enter(){if(!isSupported.value)return;const el=getTarget();if(!el)return;try{if(el.requestFullscreen)await el.requestFullscreen();else if(el.webkitRequestFullscreen)await el.webkitRequestFullscreen();isFullscreen.value=!0}catch{}}async function exit(){if(!isSupported.value||!doc)return;try{if(doc.exitFullscreen)await doc.exitFullscreen();else if(doc.webkitExitFullscreen)await doc.webkitExitFullscreen();isFullscreen.value=!1}catch{}}async function toggle(){if(isFullscreen.value)await exit();else await enter()}if(doc){const handler=()=>updateState();doc.addEventListener("fullscreenchange",handler);doc.addEventListener("webkitfullscreenchange",handler);try{onUnmounted(()=>{doc.removeEventListener("fullscreenchange",handler);doc.removeEventListener("webkitfullscreenchange",handler)})}catch{}}return{isFullscreen,isSupported,enter,exit,toggle}}
|
|
1
|
+
import"./types/dom-vendor";import{onUnmounted,ref}from"@stacksjs/stx";import{defaultDocument,unref}from"./_shared";export function useFullscreen(target){const doc=defaultDocument(),isFullscreen=ref(!1),isSupported=ref(!!doc&&(("fullscreenEnabled"in doc)||("webkitFullscreenEnabled"in doc)));function getTarget(){if(target)return unref(target);return doc?.documentElement??null}function getFullscreenElement(){if(!doc)return null;return doc.fullscreenElement??doc.webkitFullscreenElement??null}function updateState(){isFullscreen.value=getFullscreenElement()!==null}async function enter(){if(!isSupported.value)return;const el=getTarget();if(!el)return;try{if(el.requestFullscreen)await el.requestFullscreen();else if(el.webkitRequestFullscreen)await el.webkitRequestFullscreen();isFullscreen.value=!0}catch{}}async function exit(){if(!isSupported.value||!doc)return;try{if(doc.exitFullscreen)await doc.exitFullscreen();else if(doc.webkitExitFullscreen)await doc.webkitExitFullscreen();isFullscreen.value=!1}catch{}}async function toggle(){if(isFullscreen.value)await exit();else await enter()}if(doc){const handler=()=>updateState();doc.addEventListener("fullscreenchange",handler);doc.addEventListener("webkitfullscreenchange",handler);try{onUnmounted(()=>{doc.removeEventListener("fullscreenchange",handler);doc.removeEventListener("webkitfullscreenchange",handler)})}catch{}}return{isFullscreen,isSupported,enter,exit,toggle}}
|
package/dist/useNetwork.d.ts
CHANGED
package/dist/useNetwork.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{onUnmounted,ref}from"@stacksjs/stx";export function useNetwork(){const isSupported=ref(typeof navigator<"u"&&"connection"in navigator),isOnline=ref(typeof navigator<"u"?navigator.onLine:!0),offlineAt=ref(void 0),onlineAt=ref(void 0),downlink=ref(void 0),downlinkMax=ref(void 0),effectiveType=ref(void 0),rtt=ref(void 0),saveData=ref(void 0),type=ref(void 0);function updateNetworkInfo(){if(!isSupported.value)return;const conn=navigator.connection;if(conn){downlink.value=conn.downlink;downlinkMax.value=conn.downlinkMax;effectiveType.value=conn.effectiveType;rtt.value=conn.rtt;saveData.value=conn.saveData;type.value=conn.type}}updateNetworkInfo();if(typeof window<"u"){const onOnline=()=>{isOnline.value=!0;onlineAt.value=Date.now()},onOffline=()=>{isOnline.value=!1;offlineAt.value=Date.now()};window.addEventListener("online",onOnline);window.addEventListener("offline",onOffline);try{onUnmounted(()=>{window.removeEventListener("online",onOnline);window.removeEventListener("offline",onOffline)})}catch{}if(isSupported.value){const conn=navigator.connection;if(conn?.addEventListener){conn.addEventListener("change",updateNetworkInfo);try{onUnmounted(()=>{conn.removeEventListener("change",updateNetworkInfo)})}catch{}}}}return{isSupported,isOnline,offlineAt,onlineAt,downlink,downlinkMax,effectiveType,rtt,saveData,type}}
|
|
1
|
+
import"./types/dom-vendor";import{onUnmounted,ref}from"@stacksjs/stx";export function useNetwork(){const isSupported=ref(typeof navigator<"u"&&"connection"in navigator),isOnline=ref(typeof navigator<"u"?navigator.onLine:!0),offlineAt=ref(void 0),onlineAt=ref(void 0),downlink=ref(void 0),downlinkMax=ref(void 0),effectiveType=ref(void 0),rtt=ref(void 0),saveData=ref(void 0),type=ref(void 0);function updateNetworkInfo(){if(!isSupported.value)return;const conn=navigator.connection;if(conn){downlink.value=conn.downlink;downlinkMax.value=conn.downlinkMax;effectiveType.value=conn.effectiveType;rtt.value=conn.rtt;saveData.value=conn.saveData;type.value=conn.type}}updateNetworkInfo();if(typeof window<"u"){const onOnline=()=>{isOnline.value=!0;onlineAt.value=Date.now()},onOffline=()=>{isOnline.value=!1;offlineAt.value=Date.now()};window.addEventListener("online",onOnline);window.addEventListener("offline",onOffline);try{onUnmounted(()=>{window.removeEventListener("online",onOnline);window.removeEventListener("offline",onOffline)})}catch{}if(isSupported.value){const conn=navigator.connection;if(conn?.addEventListener){conn.addEventListener("change",updateNetworkInfo);try{onUnmounted(()=>{conn.removeEventListener?.("change",updateNetworkInfo)})}catch{}}}}return{isSupported,isOnline,offlineAt,onlineAt,downlink,downlinkMax,effectiveType,rtt,saveData,type}}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/composables",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.73.1",
|
|
6
6
|
"description": "Stacks composables powered by stx reactivity.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"prepublishOnly": "bun run build"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@stacksjs/stx": "^0.2.
|
|
55
|
-
"@stacksjs/datetime": "0.
|
|
54
|
+
"@stacksjs/stx": "^0.2.246",
|
|
55
|
+
"@stacksjs/datetime": "0.73.1"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"better-dx": "^0.2.24"
|