@zag-js/interact-outside
Advanced tools
Comparing version 0.56.1 to 0.57.0
@@ -26,3 +26,3 @@ "use strict"; | ||
module.exports = __toCommonJS(src_exports); | ||
var import_dom_event = require("@zag-js/dom-event"); | ||
var import_dom_event2 = require("@zag-js/dom-event"); | ||
var import_dom_query = require("@zag-js/dom-query"); | ||
@@ -32,2 +32,3 @@ var import_utils = require("@zag-js/utils"); | ||
// src/get-window-frames.ts | ||
var import_dom_event = require("@zag-js/dom-event"); | ||
function getWindowFrames(win) { | ||
@@ -41,2 +42,17 @@ const frames = { | ||
}, | ||
queueBeforeEvent(event, listener) { | ||
const cleanup = /* @__PURE__ */ new Set(); | ||
frames.each((frame) => { | ||
try { | ||
cleanup.add((0, import_dom_event.queueBeforeEvent)(frame.document, event, listener)); | ||
} catch { | ||
} | ||
}); | ||
return () => { | ||
try { | ||
cleanup.forEach((fn) => fn()); | ||
} catch { | ||
} | ||
}; | ||
}, | ||
addEventListener(event, listener, options) { | ||
@@ -107,3 +123,3 @@ frames.each((frame) => { | ||
} | ||
let clickHandler; | ||
const pointerdownCleanups = /* @__PURE__ */ new Set(); | ||
function onPointerDown(event) { | ||
@@ -119,3 +135,3 @@ function handler() { | ||
} | ||
(0, import_dom_event.fireCustomEvent)(node, POINTER_OUTSIDE_EVENT, { | ||
(0, import_dom_event2.fireCustomEvent)(node, POINTER_OUTSIDE_EVENT, { | ||
bubbles: false, | ||
@@ -125,3 +141,3 @@ cancelable: true, | ||
originalEvent: event, | ||
contextmenu: (0, import_dom_event.isContextMenuEvent)(event), | ||
contextmenu: (0, import_dom_event2.isContextMenuEvent)(event), | ||
focusable: isComposedPathFocusable(composedPath) | ||
@@ -133,7 +149,5 @@ } | ||
if (event.pointerType === "touch") { | ||
frames.removeEventListener("click", handler); | ||
doc.removeEventListener("click", handler); | ||
clickHandler = handler; | ||
doc.addEventListener("click", handler, { once: true }); | ||
frames.addEventListener("click", handler, { once: true }); | ||
pointerdownCleanups.forEach((fn) => fn()); | ||
pointerdownCleanups.add((0, import_dom_event2.queueBeforeEvent)(doc, "pointerup", handler)); | ||
pointerdownCleanups.add(frames.queueBeforeEvent("pointerup", handler)); | ||
} else { | ||
@@ -146,3 +160,3 @@ handler(); | ||
cleanups.add(frames.addEventListener("pointerdown", onPointerDown, true)); | ||
cleanups.add((0, import_dom_event.addDomEvent)(doc, "pointerdown", onPointerDown, true)); | ||
cleanups.add((0, import_dom_event2.addDomEvent)(doc, "pointerdown", onPointerDown, true)); | ||
}, 0); | ||
@@ -157,3 +171,3 @@ function onFocusin(event) { | ||
} | ||
(0, import_dom_event.fireCustomEvent)(node, FOCUS_OUTSIDE_EVENT, { | ||
(0, import_dom_event2.fireCustomEvent)(node, FOCUS_OUTSIDE_EVENT, { | ||
bubbles: false, | ||
@@ -169,10 +183,7 @@ cancelable: true, | ||
} | ||
cleanups.add((0, import_dom_event.addDomEvent)(doc, "focusin", onFocusin, true)); | ||
cleanups.add((0, import_dom_event2.addDomEvent)(doc, "focusin", onFocusin, true)); | ||
cleanups.add(frames.addEventListener("focusin", onFocusin, true)); | ||
return () => { | ||
clearTimeout(timer); | ||
if (clickHandler) { | ||
frames.removeEventListener("click", clickHandler); | ||
doc.removeEventListener("click", clickHandler); | ||
} | ||
pointerdownCleanups.forEach((fn) => fn()); | ||
cleanups.forEach((fn) => fn()); | ||
@@ -179,0 +190,0 @@ }; |
{ | ||
"name": "@zag-js/interact-outside", | ||
"version": "0.56.1", | ||
"version": "0.57.0", | ||
"description": "Track interations or focus outside an element", | ||
@@ -20,5 +20,5 @@ "keywords": [ | ||
"dependencies": { | ||
"@zag-js/dom-query": "0.56.1", | ||
"@zag-js/dom-event": "0.56.1", | ||
"@zag-js/utils": "0.56.1" | ||
"@zag-js/dom-query": "0.57.0", | ||
"@zag-js/dom-event": "0.57.0", | ||
"@zag-js/utils": "0.57.0" | ||
}, | ||
@@ -25,0 +25,0 @@ "devDependencies": { |
@@ -0,1 +1,3 @@ | ||
import { queueBeforeEvent } from "@zag-js/dom-event" | ||
export function getWindowFrames(win: Window) { | ||
@@ -9,2 +11,18 @@ const frames = { | ||
}, | ||
queueBeforeEvent(event: string, listener: any) { | ||
const cleanup = new Set<VoidFunction>() | ||
frames.each((frame) => { | ||
try { | ||
cleanup.add(queueBeforeEvent(frame.document, event, listener)) | ||
} catch {} | ||
}) | ||
return () => { | ||
try { | ||
cleanup.forEach((fn) => fn()) | ||
} catch {} | ||
} | ||
}, | ||
addEventListener(event: string, listener: any, options?: any) { | ||
@@ -16,2 +34,3 @@ frames.each((frame) => { | ||
}) | ||
return () => { | ||
@@ -23,2 +42,3 @@ try { | ||
}, | ||
removeEventListener(event: string, listener: any, options?: any) { | ||
@@ -32,3 +52,4 @@ frames.each((frame) => { | ||
} | ||
return frames | ||
} |
@@ -1,2 +0,2 @@ | ||
import { addDomEvent, fireCustomEvent, isContextMenuEvent } from "@zag-js/dom-event" | ||
import { addDomEvent, fireCustomEvent, isContextMenuEvent, queueBeforeEvent } from "@zag-js/dom-event" | ||
import { contains, getDocument, getEventTarget, getWindow, isFocusable, isHTMLElement, raf } from "@zag-js/dom-query" | ||
@@ -98,3 +98,3 @@ import { callAll } from "@zag-js/utils" | ||
let clickHandler: VoidFunction | ||
const pointerdownCleanups: Set<VoidFunction> = new Set() | ||
@@ -127,9 +127,8 @@ function onPointerDown(event: PointerEvent) { | ||
if (event.pointerType === "touch") { | ||
frames.removeEventListener("click", handler) | ||
doc.removeEventListener("click", handler) | ||
// flush any pending pointerup events | ||
pointerdownCleanups.forEach((fn) => fn()) | ||
clickHandler = handler | ||
doc.addEventListener("click", handler, { once: true }) | ||
frames.addEventListener("click", handler, { once: true }) | ||
// add a pointerup event listener to the document and all frame documents | ||
pointerdownCleanups.add(queueBeforeEvent(doc, "pointerup", handler)) | ||
pointerdownCleanups.add(frames.queueBeforeEvent("pointerup", handler)) | ||
} else { | ||
@@ -174,6 +173,3 @@ handler() | ||
clearTimeout(timer) | ||
if (clickHandler) { | ||
frames.removeEventListener("click", clickHandler) | ||
doc.removeEventListener("click", clickHandler) | ||
} | ||
pointerdownCleanups.forEach((fn) => fn()) | ||
cleanups.forEach((fn) => fn()) | ||
@@ -180,0 +176,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
49993
597
+ Added@zag-js/dom-event@0.57.0(transitive)
+ Added@zag-js/dom-query@0.57.0(transitive)
+ Added@zag-js/text-selection@0.57.0(transitive)
+ Added@zag-js/types@0.57.0(transitive)
+ Added@zag-js/utils@0.57.0(transitive)
- Removed@zag-js/dom-event@0.56.1(transitive)
- Removed@zag-js/dom-query@0.56.1(transitive)
- Removed@zag-js/text-selection@0.56.1(transitive)
- Removed@zag-js/types@0.56.1(transitive)
- Removed@zag-js/utils@0.56.1(transitive)
Updated@zag-js/dom-event@0.57.0
Updated@zag-js/dom-query@0.57.0
Updated@zag-js/utils@0.57.0