Socket
Socket
Sign inDemoInstall

@zag-js/dom-event

Package Overview
Dependencies
Maintainers
1
Versions
671
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zag-js/dom-event - npm Package Compare versions

Comparing version 0.53.0 to 0.54.0

479

dist/index.js

@@ -1,2 +0,479 @@

"use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{addDomEvent:()=>addDomEvent,clickIfLink:()=>clickIfLink,fireBlurEvent:()=>fireBlurEvent,fireCustomEvent:()=>fireCustomEvent,getEventKey:()=>getEventKey,getEventPoint:()=>getEventPoint,getEventStep:()=>getEventStep,getNativeEvent:()=>getNativeEvent,getRelativePoint:()=>getRelativePoint,isContextMenuEvent:()=>isContextMenuEvent,isKeyboardClick:()=>isKeyboardClick,isLeftClick:()=>isLeftClick,isModifierKey:()=>isModifierKey,isPrintableKey:()=>isPrintableKey,isVirtualClick:()=>isVirtualClick,isVirtualPointerEvent:()=>isVirtualPointerEvent,queueBeforeEvent:()=>queueBeforeEvent,requestPointerLock:()=>requestPointerLock,trackFocusVisible:()=>trackFocusVisible,trackPointerMove:()=>trackPointerMove,trackPress:()=>trackPress,trackVisualViewport:()=>trackVisualViewport});module.exports=__toCommonJS(src_exports);var addDomEvent=(target,eventName,handler,options)=>{const node=typeof target==="function"?target():target;node?.addEventListener(eventName,handler,options);return()=>{node?.removeEventListener(eventName,handler,options)}};var import_dom_query=require("@zag-js/dom-query");function isKeyboardClick(e){return e.detail===0||e.clientX===0&&e.clientY===0}function isPrintableKey(e){return e.key.length===1&&!e.ctrlKey&&!e.metaKey}function isVirtualPointerEvent(e){return e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"}function isVirtualClick(e){if(e.mozInputSource===0&&e.isTrusted)return true;return e.detail===0&&!e.pointerType}var isLeftClick=e=>e.button===0;var isContextMenuEvent=e=>{return e.button===2||(0,import_dom_query.isMac)()&&e.ctrlKey&&e.button===0};var isModifierKey=e=>e.ctrlKey||e.altKey||e.metaKey;var import_dom_query2=require("@zag-js/dom-query");function queueBeforeEvent(element,type,cb){const createTimer=callback=>{const timerId=requestAnimationFrame(callback);return()=>cancelAnimationFrame(timerId)};const cancelTimer=createTimer(()=>{element.removeEventListener(type,callSync,true);cb()});const callSync=()=>{cancelTimer();cb()};element.addEventListener(type,callSync,{once:true,capture:true});return cancelTimer}function isLinkElement(element){return element?.matches("a[href]")??false}function clickIfLink(element){if(!isLinkElement(element))return;const click=()=>element.click();if((0,import_dom_query2.isFirefox)()){queueBeforeEvent(element,"keyup",click)}else{queueMicrotask(click)}}function fireCustomEvent(el,type,init){if(!el)return;const win=el.ownerDocument.defaultView||window;const event=new win.CustomEvent(type,init);return el.dispatchEvent(event)}function fireBlurEvent(el,init){const win=el.ownerDocument.defaultView||window;const event=new win.FocusEvent("blur",init);const allowed=el.dispatchEvent(event);const bubbleInit={...init,bubbles:true};el.dispatchEvent(new win.FocusEvent("focusout",bubbleInit));return allowed}var keyMap={Up:"ArrowUp",Down:"ArrowDown",Esc:"Escape"," ":"Space",",":"Comma",Left:"ArrowLeft",Right:"ArrowRight"};var rtlKeyMap={ArrowLeft:"ArrowRight",ArrowRight:"ArrowLeft"};function getEventKey(event,options={}){const{dir="ltr",orientation="horizontal"}=options;let{key}=event;key=keyMap[key]??key;const isRtl=dir==="rtl"&&orientation==="horizontal";if(isRtl&&key in rtlKeyMap){key=rtlKeyMap[key]}return key}function pointFromTouch(e,type="client"){const point=e.touches[0]||e.changedTouches[0];return{x:point[`${type}X`],y:point[`${type}Y`]}}function pointFromMouse(point,type="client"){return{x:point[`${type}X`],y:point[`${type}Y`]}}var isTouchEvent=event=>"touches"in event&&event.touches.length>0;function getEventPoint(event,type="client"){return isTouchEvent(event)?pointFromTouch(event,type):pointFromMouse(event,type)}var PAGE_KEYS=new Set(["PageUp","PageDown"]);var ARROW_KEYS=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]);function getEventStep(event){if(event.ctrlKey||event.metaKey){return .1}else{const isPageKey=PAGE_KEYS.has(event.key);const isSkipKey=isPageKey||event.shiftKey&&ARROW_KEYS.has(event.key);return isSkipKey?10:1}}function getNativeEvent(event){return event.nativeEvent??event}function clamp(value){return Math.max(0,Math.min(1,value))}function getRelativePoint(point,element){const{left,top,width,height}=element.getBoundingClientRect();const offset={x:point.x-left,y:point.y-top};const percent={x:clamp(offset.x/width),y:clamp(offset.y/height)};function getPercentValue(options={}){const{dir="ltr",orientation="horizontal",inverted}=options;const invertX=typeof inverted==="object"?inverted.x:inverted;const invertY=typeof inverted==="object"?inverted.y:inverted;if(orientation==="horizontal"){return dir==="rtl"||invertX?1-percent.x:percent.x}return invertY?1-percent.y:percent.y}return{offset,percent,getPercentValue}}function requestPointerLock(doc,fn){const body=doc.body;const supported="pointerLockElement"in doc||"mozPointerLockElement"in doc;const isLocked=()=>!!doc.pointerLockElement;function onPointerChange(){fn?.(isLocked())}function onPointerError(event){if(isLocked())fn?.(false);console.error("PointerLock error occured:",event);doc.exitPointerLock()}if(!supported)return;try{body.requestPointerLock()}catch{}const cleanup=[addDomEvent(doc,"pointerlockchange",onPointerChange,false),addDomEvent(doc,"pointerlockerror",onPointerError,false)];return()=>{cleanup.forEach(cleanup2=>cleanup2());doc.exitPointerLock()}}var import_dom_query3=require("@zag-js/dom-query");var pipe=(...fns)=>arg=>fns.reduce((acc,fn)=>fn(acc),arg);var noop=()=>void 0;var isValidKey=e=>{return!(e.metaKey||!(0,import_dom_query3.isMac)()&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")};function trackFocusVisible(node,options){if(!node)return;const{onFocus,onBlur}=options;const win=(0,import_dom_query3.getWindow)(node);let focused=false;const handleFocus=e=>{let isFocusVisible=false;try{isFocusVisible=node.matches(":focus-visible")}catch{isFocusVisible=true}if(!isFocusVisible)return;focused=true;onFocus?.(e)};const handleBlur=e=>{if(!focused)return;focused=false;onBlur?.(e)};const handleKeydown=e=>{if(!node.matches(":focus")||!isValidKey(e))return;focused=true;const evt=new win.FocusEvent("focus");onFocus?.(evt)};return pipe(addDomEvent(node,"focusin",handleFocus),addDomEvent(node,"focusout",handleBlur),addDomEvent(node,"keydown",handleKeydown,true))}var import_text_selection=require("@zag-js/text-selection");function trackPointerMove(doc,handlers){const{onPointerMove,onPointerUp}=handlers;const history=[];const handleMove=event=>{const point=getEventPoint(event);history.push({...point,timestamp:performance.now()});const distance=Math.sqrt(point.x**2+point.y**2);const moveBuffer=event.pointerType==="touch"?10:5;if(distance<moveBuffer)return;if(event.pointerType==="mouse"&&event.button===0){onPointerUp();return}onPointerMove({point,event,velocity:getVelocity(history,.1)})};const cleanups=[addDomEvent(doc,"pointermove",handleMove,false),addDomEvent(doc,"pointerup",onPointerUp,false),addDomEvent(doc,"pointercancel",onPointerUp,false),addDomEvent(doc,"contextmenu",onPointerUp,false),(0,import_text_selection.disableTextSelection)({doc})];return()=>{cleanups.forEach(cleanup=>cleanup());history.length=0}}function lastDevicePoint(history){return history[history.length-1]}function ms(seconds){return seconds*1e3}function sec(milliseconds){return milliseconds/1e3}function getVelocity(history,timeDelta){if(history.length<2)return{x:0,y:0};let i=history.length-1;let timestampedPoint=null;const lastPoint=lastDevicePoint(history);while(i>=0){timestampedPoint=history[i];if(lastPoint.timestamp-timestampedPoint.timestamp>ms(timeDelta)){break}i--}if(!timestampedPoint)return{x:0,y:0};const time=sec(lastPoint.timestamp-timestampedPoint.timestamp);if(time===0)return{x:0,y:0};const currentVelocity={x:(lastPoint.x-timestampedPoint.x)/time,y:(lastPoint.y-timestampedPoint.y)/time};if(currentVelocity.x===Infinity)currentVelocity.x=0;if(currentVelocity.y===Infinity)currentVelocity.y=0;return{x:Math.abs(currentVelocity.x),y:Math.abs(currentVelocity.y)}}var import_dom_query4=require("@zag-js/dom-query");function trackPress(options){const{pointerNode,keyboardNode=pointerNode,onPress,onPressStart,onPressEnd,isValidKey:isValidKey2=e=>e.key==="Enter"}=options;if(!pointerNode)return noop;const win=(0,import_dom_query4.getWindow)(pointerNode);const doc=(0,import_dom_query4.getDocument)(pointerNode);let removeStartListeners=noop;let removeEndListeners=noop;let removeAccessibleListeners=noop;const getInfo=event=>({point:getEventPoint(event),event});function startPress(event){onPressStart?.(getInfo(event))}function cancelPress(event){onPressEnd?.(getInfo(event))}const startPointerPress=startEvent=>{removeEndListeners();const endPointerPress=endEvent=>{const target=(0,import_dom_query4.getEventTarget)(endEvent);if((0,import_dom_query4.contains)(pointerNode,target)){onPress?.(getInfo(endEvent))}else{onPressEnd?.(getInfo(endEvent))}};const removePointerUpListener=addDomEvent(win,"pointerup",endPointerPress,{passive:!onPress});const removePointerCancelListener=addDomEvent(win,"pointercancel",cancelPress,{passive:!onPressEnd});removeEndListeners=pipe(removePointerUpListener,removePointerCancelListener);if(doc.activeElement===keyboardNode&&startEvent.pointerType==="mouse"){startEvent.preventDefault()}startPress(startEvent)};const removePointerListener=addDomEvent(pointerNode,"pointerdown",startPointerPress,{passive:!onPressStart});const removeFocusListener=addDomEvent(keyboardNode,"focus",startAccessiblePress);removeStartListeners=pipe(removePointerListener,removeFocusListener);function startAccessiblePress(){const handleKeydown=keydownEvent=>{if(!isValidKey2(keydownEvent))return;const handleKeyup=keyupEvent=>{if(!isValidKey2(keyupEvent))return;const evt2=new win.PointerEvent("pointerup");const info=getInfo(evt2);onPress?.(info);onPressEnd?.(info)};removeEndListeners();removeEndListeners=addDomEvent(keyboardNode,"keyup",handleKeyup);const evt=new win.PointerEvent("pointerdown");startPress(evt)};const handleBlur=()=>{const evt=new win.PointerEvent("pointercancel");cancelPress(evt)};const removeKeydownListener=addDomEvent(keyboardNode,"keydown",handleKeydown);const removeBlurListener=addDomEvent(keyboardNode,"blur",handleBlur);removeAccessibleListeners=pipe(removeKeydownListener,removeBlurListener)}return function(){removeStartListeners();removeEndListeners();removeAccessibleListeners()}}function trackVisualViewport(doc,fn){const win=doc?.defaultView||window;const onResize=()=>{fn?.(getViewportSize(win))};onResize();return addDomEvent(win.visualViewport??win,"resize",onResize)}function getViewportSize(win){return{width:win.visualViewport?.width||win.innerWidth,height:win.visualViewport?.height||win.innerHeight}}0&&(module.exports={addDomEvent,clickIfLink,fireBlurEvent,fireCustomEvent,getEventKey,getEventPoint,getEventStep,getNativeEvent,getRelativePoint,isContextMenuEvent,isKeyboardClick,isLeftClick,isModifierKey,isPrintableKey,isVirtualClick,isVirtualPointerEvent,queueBeforeEvent,requestPointerLock,trackFocusVisible,trackPointerMove,trackPress,trackVisualViewport});
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
addDomEvent: () => addDomEvent,
clickIfLink: () => clickIfLink,
fireBlurEvent: () => fireBlurEvent,
fireCustomEvent: () => fireCustomEvent,
getEventKey: () => getEventKey,
getEventPoint: () => getEventPoint,
getEventStep: () => getEventStep,
getNativeEvent: () => getNativeEvent,
getRelativePoint: () => getRelativePoint,
isContextMenuEvent: () => isContextMenuEvent,
isKeyboardClick: () => isKeyboardClick,
isLeftClick: () => isLeftClick,
isModifierKey: () => isModifierKey,
isPrintableKey: () => isPrintableKey,
isVirtualClick: () => isVirtualClick,
isVirtualPointerEvent: () => isVirtualPointerEvent,
queueBeforeEvent: () => queueBeforeEvent,
requestPointerLock: () => requestPointerLock,
trackFocusVisible: () => trackFocusVisible,
trackPointerMove: () => trackPointerMove,
trackPress: () => trackPress,
trackVisualViewport: () => trackVisualViewport
});
module.exports = __toCommonJS(src_exports);
// src/add-dom-event.ts
var addDomEvent = (target, eventName, handler, options) => {
const node = typeof target === "function" ? target() : target;
node?.addEventListener(eventName, handler, options);
return () => {
node?.removeEventListener(eventName, handler, options);
};
};
// src/assertion.ts
var import_dom_query = require("@zag-js/dom-query");
function isKeyboardClick(e) {
return e.detail === 0 || e.clientX === 0 && e.clientY === 0;
}
function isPrintableKey(e) {
return e.key.length === 1 && !e.ctrlKey && !e.metaKey;
}
function isVirtualPointerEvent(e) {
return e.width === 0 && e.height === 0 || e.width === 1 && e.height === 1 && e.pressure === 0 && e.detail === 0 && e.pointerType === "mouse";
}
function isVirtualClick(e) {
if (e.mozInputSource === 0 && e.isTrusted)
return true;
return e.detail === 0 && !e.pointerType;
}
var isLeftClick = (e) => e.button === 0;
var isContextMenuEvent = (e) => {
return e.button === 2 || (0, import_dom_query.isMac)() && e.ctrlKey && e.button === 0;
};
var isModifierKey = (e) => e.ctrlKey || e.altKey || e.metaKey;
// src/click-link.ts
var import_dom_query2 = require("@zag-js/dom-query");
// src/queue-before-event.ts
function queueBeforeEvent(element, type, cb) {
const createTimer = (callback) => {
const timerId = requestAnimationFrame(callback);
return () => cancelAnimationFrame(timerId);
};
const cancelTimer = createTimer(() => {
element.removeEventListener(type, callSync, true);
cb();
});
const callSync = () => {
cancelTimer();
cb();
};
element.addEventListener(type, callSync, { once: true, capture: true });
return cancelTimer;
}
// src/click-link.ts
function isLinkElement(element) {
return element?.matches("a[href]") ?? false;
}
function clickIfLink(element) {
if (!isLinkElement(element))
return;
const click = () => element.click();
if ((0, import_dom_query2.isFirefox)()) {
queueBeforeEvent(element, "keyup", click);
} else {
queueMicrotask(click);
}
}
// src/fire-event.ts
function fireCustomEvent(el, type, init) {
if (!el)
return;
const win = el.ownerDocument.defaultView || window;
const event = new win.CustomEvent(type, init);
return el.dispatchEvent(event);
}
function fireBlurEvent(el, init) {
const win = el.ownerDocument.defaultView || window;
const event = new win.FocusEvent("blur", init);
const allowed = el.dispatchEvent(event);
const bubbleInit = { ...init, bubbles: true };
el.dispatchEvent(new win.FocusEvent("focusout", bubbleInit));
return allowed;
}
// src/get-event-key.ts
var keyMap = {
Up: "ArrowUp",
Down: "ArrowDown",
Esc: "Escape",
" ": "Space",
",": "Comma",
Left: "ArrowLeft",
Right: "ArrowRight"
};
var rtlKeyMap = {
ArrowLeft: "ArrowRight",
ArrowRight: "ArrowLeft"
};
function getEventKey(event, options = {}) {
const { dir = "ltr", orientation = "horizontal" } = options;
let { key } = event;
key = keyMap[key] ?? key;
const isRtl = dir === "rtl" && orientation === "horizontal";
if (isRtl && key in rtlKeyMap) {
key = rtlKeyMap[key];
}
return key;
}
// src/get-event-point.ts
function pointFromTouch(e, type = "client") {
const point = e.touches[0] || e.changedTouches[0];
return { x: point[`${type}X`], y: point[`${type}Y`] };
}
function pointFromMouse(point, type = "client") {
return { x: point[`${type}X`], y: point[`${type}Y`] };
}
var isTouchEvent = (event) => "touches" in event && event.touches.length > 0;
function getEventPoint(event, type = "client") {
return isTouchEvent(event) ? pointFromTouch(event, type) : pointFromMouse(event, type);
}
// src/get-event-step.ts
var PAGE_KEYS = /* @__PURE__ */ new Set(["PageUp", "PageDown"]);
var ARROW_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"]);
function getEventStep(event) {
if (event.ctrlKey || event.metaKey) {
return 0.1;
} else {
const isPageKey = PAGE_KEYS.has(event.key);
const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.has(event.key);
return isSkipKey ? 10 : 1;
}
}
// src/get-native-event.ts
function getNativeEvent(event) {
return event.nativeEvent ?? event;
}
// src/get-point-value.ts
function clamp(value) {
return Math.max(0, Math.min(1, value));
}
function getRelativePoint(point, element) {
const { left, top, width, height } = element.getBoundingClientRect();
const offset = { x: point.x - left, y: point.y - top };
const percent = { x: clamp(offset.x / width), y: clamp(offset.y / height) };
function getPercentValue(options = {}) {
const { dir = "ltr", orientation = "horizontal", inverted } = options;
const invertX = typeof inverted === "object" ? inverted.x : inverted;
const invertY = typeof inverted === "object" ? inverted.y : inverted;
if (orientation === "horizontal") {
return dir === "rtl" || invertX ? 1 - percent.x : percent.x;
}
return invertY ? 1 - percent.y : percent.y;
}
return { offset, percent, getPercentValue };
}
// src/request-pointer-lock.ts
function requestPointerLock(doc, fn) {
const body = doc.body;
const supported = "pointerLockElement" in doc || "mozPointerLockElement" in doc;
const isLocked = () => !!doc.pointerLockElement;
function onPointerChange() {
fn?.(isLocked());
}
function onPointerError(event) {
if (isLocked())
fn?.(false);
console.error("PointerLock error occured:", event);
doc.exitPointerLock();
}
if (!supported)
return;
try {
body.requestPointerLock();
} catch {
}
const cleanup = [
addDomEvent(doc, "pointerlockchange", onPointerChange, false),
addDomEvent(doc, "pointerlockerror", onPointerError, false)
];
return () => {
cleanup.forEach((cleanup2) => cleanup2());
doc.exitPointerLock();
};
}
// src/track-focus-visible.ts
var import_dom_query3 = require("@zag-js/dom-query");
// src/pipe.ts
var pipe = (...fns) => (arg) => fns.reduce((acc, fn) => fn(acc), arg);
var noop = () => void 0;
// src/track-focus-visible.ts
var isValidKey = (e) => {
return !(e.metaKey || !(0, import_dom_query3.isMac)() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
};
function trackFocusVisible(node, options) {
if (!node)
return;
const { onFocus, onBlur } = options;
const win = (0, import_dom_query3.getWindow)(node);
let focused = false;
const handleFocus = (e) => {
let isFocusVisible = false;
try {
isFocusVisible = node.matches(":focus-visible");
} catch {
isFocusVisible = true;
}
if (!isFocusVisible)
return;
focused = true;
onFocus?.(e);
};
const handleBlur = (e) => {
if (!focused)
return;
focused = false;
onBlur?.(e);
};
const handleKeydown = (e) => {
if (!node.matches(":focus") || !isValidKey(e))
return;
focused = true;
const evt = new win.FocusEvent("focus");
onFocus?.(evt);
};
return pipe(
addDomEvent(node, "focusin", handleFocus),
addDomEvent(node, "focusout", handleBlur),
addDomEvent(node, "keydown", handleKeydown, true)
);
}
// src/track-pointer-move.ts
var import_text_selection = require("@zag-js/text-selection");
function trackPointerMove(doc, handlers) {
const { onPointerMove, onPointerUp } = handlers;
const history = [];
const handleMove = (event) => {
const point = getEventPoint(event);
history.push({ ...point, timestamp: performance.now() });
const distance = Math.sqrt(point.x ** 2 + point.y ** 2);
const moveBuffer = event.pointerType === "touch" ? 10 : 5;
if (distance < moveBuffer)
return;
if (event.pointerType === "mouse" && event.button === 0) {
onPointerUp();
return;
}
onPointerMove({ point, event, velocity: getVelocity(history, 0.1) });
};
const cleanups = [
addDomEvent(doc, "pointermove", handleMove, false),
addDomEvent(doc, "pointerup", onPointerUp, false),
addDomEvent(doc, "pointercancel", onPointerUp, false),
addDomEvent(doc, "contextmenu", onPointerUp, false),
(0, import_text_selection.disableTextSelection)({ doc })
];
return () => {
cleanups.forEach((cleanup) => cleanup());
history.length = 0;
};
}
function lastDevicePoint(history) {
return history[history.length - 1];
}
function ms(seconds) {
return seconds * 1e3;
}
function sec(milliseconds) {
return milliseconds / 1e3;
}
function getVelocity(history, timeDelta) {
if (history.length < 2)
return { x: 0, y: 0 };
let i = history.length - 1;
let timestampedPoint = null;
const lastPoint = lastDevicePoint(history);
while (i >= 0) {
timestampedPoint = history[i];
if (lastPoint.timestamp - timestampedPoint.timestamp > ms(timeDelta)) {
break;
}
i--;
}
if (!timestampedPoint)
return { x: 0, y: 0 };
const time = sec(lastPoint.timestamp - timestampedPoint.timestamp);
if (time === 0)
return { x: 0, y: 0 };
const currentVelocity = {
x: (lastPoint.x - timestampedPoint.x) / time,
y: (lastPoint.y - timestampedPoint.y) / time
};
if (currentVelocity.x === Infinity)
currentVelocity.x = 0;
if (currentVelocity.y === Infinity)
currentVelocity.y = 0;
return {
x: Math.abs(currentVelocity.x),
y: Math.abs(currentVelocity.y)
};
}
// src/track-press.ts
var import_dom_query4 = require("@zag-js/dom-query");
function trackPress(options) {
const {
pointerNode,
keyboardNode = pointerNode,
onPress,
onPressStart,
onPressEnd,
isValidKey: isValidKey2 = (e) => e.key === "Enter"
} = options;
if (!pointerNode)
return noop;
const win = (0, import_dom_query4.getWindow)(pointerNode);
const doc = (0, import_dom_query4.getDocument)(pointerNode);
let removeStartListeners = noop;
let removeEndListeners = noop;
let removeAccessibleListeners = noop;
const getInfo = (event) => ({
point: getEventPoint(event),
event
});
function startPress(event) {
onPressStart?.(getInfo(event));
}
function cancelPress(event) {
onPressEnd?.(getInfo(event));
}
const startPointerPress = (startEvent) => {
removeEndListeners();
const endPointerPress = (endEvent) => {
const target = (0, import_dom_query4.getEventTarget)(endEvent);
if ((0, import_dom_query4.contains)(pointerNode, target)) {
onPress?.(getInfo(endEvent));
} else {
onPressEnd?.(getInfo(endEvent));
}
};
const removePointerUpListener = addDomEvent(win, "pointerup", endPointerPress, { passive: !onPress });
const removePointerCancelListener = addDomEvent(win, "pointercancel", cancelPress, { passive: !onPressEnd });
removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);
if (doc.activeElement === keyboardNode && startEvent.pointerType === "mouse") {
startEvent.preventDefault();
}
startPress(startEvent);
};
const removePointerListener = addDomEvent(pointerNode, "pointerdown", startPointerPress, { passive: !onPressStart });
const removeFocusListener = addDomEvent(keyboardNode, "focus", startAccessiblePress);
removeStartListeners = pipe(removePointerListener, removeFocusListener);
function startAccessiblePress() {
const handleKeydown = (keydownEvent) => {
if (!isValidKey2(keydownEvent))
return;
const handleKeyup = (keyupEvent) => {
if (!isValidKey2(keyupEvent))
return;
const evt2 = new win.PointerEvent("pointerup");
const info = getInfo(evt2);
onPress?.(info);
onPressEnd?.(info);
};
removeEndListeners();
removeEndListeners = addDomEvent(keyboardNode, "keyup", handleKeyup);
const evt = new win.PointerEvent("pointerdown");
startPress(evt);
};
const handleBlur = () => {
const evt = new win.PointerEvent("pointercancel");
cancelPress(evt);
};
const removeKeydownListener = addDomEvent(keyboardNode, "keydown", handleKeydown);
const removeBlurListener = addDomEvent(keyboardNode, "blur", handleBlur);
removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);
}
return function() {
removeStartListeners();
removeEndListeners();
removeAccessibleListeners();
};
}
// src/track-visual-viewport.ts
function trackVisualViewport(doc, fn) {
const win = doc?.defaultView || window;
const onResize = () => {
fn?.(getViewportSize(win));
};
onResize();
return addDomEvent(win.visualViewport ?? win, "resize", onResize);
}
function getViewportSize(win) {
return {
width: win.visualViewport?.width || win.innerWidth,
height: win.visualViewport?.height || win.innerHeight
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
addDomEvent,
clickIfLink,
fireBlurEvent,
fireCustomEvent,
getEventKey,
getEventPoint,
getEventStep,
getNativeEvent,
getRelativePoint,
isContextMenuEvent,
isKeyboardClick,
isLeftClick,
isModifierKey,
isPrintableKey,
isVirtualClick,
isVirtualPointerEvent,
queueBeforeEvent,
requestPointerLock,
trackFocusVisible,
trackPointerMove,
trackPress,
trackVisualViewport
});
//# sourceMappingURL=index.js.map

8

package.json
{
"name": "@zag-js/dom-event",
"version": "0.53.0",
"version": "0.54.0",
"description": "",

@@ -28,5 +28,5 @@ "keywords": [

"dependencies": {
"@zag-js/types": "0.53.0",
"@zag-js/dom-query": "0.53.0",
"@zag-js/text-selection": "0.53.0"
"@zag-js/types": "0.54.0",
"@zag-js/dom-query": "0.54.0",
"@zag-js/text-selection": "0.54.0"
},

@@ -33,0 +33,0 @@ "devDependencies": {

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc