@zag-js/interact-outside
Advanced tools
Comparing version 0.72.0 to 0.73.0
@@ -8,2 +8,4 @@ 'use strict'; | ||
// src/index.ts | ||
// src/frame-utils.ts | ||
function getWindowFrames(win) { | ||
@@ -17,17 +19,2 @@ const frames = { | ||
}, | ||
queueBeforeEvent(event, listener) { | ||
const cleanup = /* @__PURE__ */ new Set(); | ||
frames.each((frame) => { | ||
try { | ||
cleanup.add(domEvent.queueBeforeEvent(frame.document, event, listener)); | ||
} catch { | ||
} | ||
}); | ||
return () => { | ||
try { | ||
cleanup.forEach((fn) => fn()); | ||
} catch { | ||
} | ||
}; | ||
}, | ||
addEventListener(event, listener, options) { | ||
@@ -58,2 +45,25 @@ frames.each((frame) => { | ||
} | ||
function getParentWindow(win) { | ||
const parent = win.frameElement != null ? win.parent : null; | ||
return { | ||
addEventListener: (event, listener, options) => { | ||
try { | ||
parent?.addEventListener(event, listener, options); | ||
} catch { | ||
} | ||
return () => { | ||
try { | ||
parent?.removeEventListener(event, listener, options); | ||
} catch { | ||
} | ||
}; | ||
}, | ||
removeEventListener: (event, listener, options) => { | ||
try { | ||
parent?.removeEventListener(event, listener, options); | ||
} catch { | ||
} | ||
} | ||
}; | ||
} | ||
@@ -76,4 +86,3 @@ // src/index.ts | ||
} | ||
function isEventWithinScrollbar(event) { | ||
const target = domQuery.getEventTarget(event); | ||
function isEventWithinScrollbar(event, target) { | ||
if (!target || !isPointerEvent(event)) return false; | ||
@@ -92,2 +101,3 @@ const isScrollableY = target.scrollHeight > target.clientHeight; | ||
const frames = getWindowFrames(win); | ||
const parentWin = getParentWindow(win); | ||
function isEventOutside(event) { | ||
@@ -98,3 +108,5 @@ const target = domQuery.getEventTarget(event); | ||
if (isEventPointWithin(node, event)) return false; | ||
if (isEventWithinScrollbar(event)) return false; | ||
if (isEventWithinScrollbar(event, target)) return false; | ||
const scrollParent = domQuery.getNearestOverflowAncestor(node); | ||
if (isEventWithinScrollbar(event, scrollParent)) return false; | ||
return !exclude?.(target); | ||
@@ -127,2 +139,3 @@ } | ||
pointerdownCleanups.add(domEvent.addDomEvent(doc, "click", handler, { once: true })); | ||
pointerdownCleanups.add(parentWin.addEventListener("click", handler, { once: true })); | ||
pointerdownCleanups.add(frames.addEventListener("click", handler, { once: true })); | ||
@@ -135,4 +148,5 @@ } else { | ||
const timer = setTimeout(() => { | ||
cleanups.add(domEvent.addDomEvent(doc, "pointerdown", onPointerDown, true)); | ||
cleanups.add(parentWin.addEventListener("pointerdown", onPointerDown, true)); | ||
cleanups.add(frames.addEventListener("pointerdown", onPointerDown, true)); | ||
cleanups.add(domEvent.addDomEvent(doc, "pointerdown", onPointerDown, true)); | ||
}, 0); | ||
@@ -159,2 +173,3 @@ function onFocusin(event) { | ||
cleanups.add(domEvent.addDomEvent(doc, "focusin", onFocusin, true)); | ||
cleanups.add(parentWin.addEventListener("focusin", onFocusin, true)); | ||
cleanups.add(frames.addEventListener("focusin", onFocusin, true)); | ||
@@ -161,0 +176,0 @@ return () => { |
{ | ||
"name": "@zag-js/interact-outside", | ||
"version": "0.72.0", | ||
"version": "0.73.0", | ||
"description": "Track interations or focus outside an element", | ||
@@ -19,5 +19,5 @@ "keywords": [ | ||
"dependencies": { | ||
"@zag-js/dom-query": "0.72.0", | ||
"@zag-js/dom-event": "0.72.0", | ||
"@zag-js/utils": "0.72.0" | ||
"@zag-js/dom-query": "0.73.0", | ||
"@zag-js/dom-event": "0.73.0", | ||
"@zag-js/utils": "0.73.0" | ||
}, | ||
@@ -24,0 +24,0 @@ "devDependencies": { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
18573
395
+ Added@zag-js/dom-event@0.73.0(transitive)
+ Added@zag-js/dom-query@0.73.0(transitive)
+ Added@zag-js/text-selection@0.73.0(transitive)
+ Added@zag-js/types@0.73.0(transitive)
+ Added@zag-js/utils@0.73.0(transitive)
- Removed@zag-js/dom-event@0.72.0(transitive)
- Removed@zag-js/dom-query@0.72.0(transitive)
- Removed@zag-js/text-selection@0.72.0(transitive)
- Removed@zag-js/types@0.72.0(transitive)
- Removed@zag-js/utils@0.72.0(transitive)
Updated@zag-js/dom-event@0.73.0
Updated@zag-js/dom-query@0.73.0
Updated@zag-js/utils@0.73.0