@zag-js/dom-query
Version:
The dom helper library for zag.js machines
180 lines (178 loc) • 6.22 kB
JavaScript
;
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/event.ts
var event_exports = {};
__export(event_exports, {
addDomEvent: () => addDomEvent,
getBeforeInputValue: () => getBeforeInputValue,
getEventKey: () => getEventKey,
getEventPoint: () => getEventPoint,
getEventStep: () => getEventStep,
getEventTarget: () => getEventTarget,
getNativeEvent: () => getNativeEvent,
isComposingEvent: () => isComposingEvent,
isContextMenuEvent: () => isContextMenuEvent,
isCtrlOrMetaKey: () => isCtrlOrMetaKey,
isDownloadingEvent: () => isDownloadingEvent,
isKeyboardClick: () => isKeyboardClick,
isLeftClick: () => isLeftClick,
isModifierKey: () => isModifierKey,
isOpeningInNewTab: () => isOpeningInNewTab,
isPrintableKey: () => isPrintableKey,
isSelfTarget: () => isSelfTarget,
isTouchEvent: () => isTouchEvent,
isVirtualClick: () => isVirtualClick,
isVirtualPointerEvent: () => isVirtualPointerEvent
});
module.exports = __toCommonJS(event_exports);
var import_platform = require("./platform.js");
function getBeforeInputValue(event) {
const { selectionStart, selectionEnd, value } = event.currentTarget;
const data = event.data;
return value.slice(0, selectionStart) + (data ?? "") + value.slice(selectionEnd);
}
function getComposedPath(event) {
return event.composedPath?.() ?? event.nativeEvent?.composedPath?.();
}
function getEventTarget(event) {
const composedPath = getComposedPath(event);
return composedPath?.[0] ?? event.target;
}
function isOpeningInNewTab(event) {
const element = event.currentTarget;
if (!element) return false;
const validElement = element.matches("a[href], button[type='submit'], input[type='submit']");
if (!validElement) return false;
const isMiddleClick = event.button === 1;
const isModKeyClick = isCtrlOrMetaKey(event);
return isMiddleClick || isModKeyClick;
}
function isDownloadingEvent(event) {
const element = event.currentTarget;
if (!element) return false;
const localName = element.localName;
if (!event.altKey) return false;
if (localName === "a") return true;
if (localName === "button" && element.type === "submit") return true;
if (localName === "input" && element.type === "submit") return true;
return false;
}
function isComposingEvent(event) {
return getNativeEvent(event).isComposing || event.keyCode === 229;
}
function isKeyboardClick(e) {
return e.detail === 0 || e.clientX === 0 && e.clientY === 0;
}
function isCtrlOrMetaKey(e) {
if ((0, import_platform.isMac)()) return e.metaKey;
return e.ctrlKey;
}
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.pointerType === "" && e.isTrusted) return true;
if ((0, import_platform.isAndroid)() && e.pointerType) {
return e.type === "click" && e.buttons === 1;
}
return e.detail === 0 && !e.pointerType;
}
var isLeftClick = (e) => e.button === 0;
var isContextMenuEvent = (e) => {
return e.button === 2 || (0, import_platform.isMac)() && e.ctrlKey && e.button === 0;
};
var isModifierKey = (e) => e.ctrlKey || e.altKey || e.metaKey;
var isTouchEvent = (event) => "touches" in event && event.touches.length > 0;
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;
key = keyMap[key] ?? key;
const isRtl = dir === "rtl" && orientation === "horizontal";
if (isRtl && key in rtlKeyMap) key = rtlKeyMap[key];
return key;
}
function getNativeEvent(event) {
return event.nativeEvent ?? event;
}
var pageKeys = /* @__PURE__ */ new Set(["PageUp", "PageDown"]);
var arrowKeys = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"]);
function getEventStep(event) {
if (event.ctrlKey || event.metaKey) {
return 0.1;
} else {
const isPageKey = pageKeys.has(event.key);
const isSkipKey = isPageKey || event.shiftKey && arrowKeys.has(event.key);
return isSkipKey ? 10 : 1;
}
}
function getEventPoint(event, type = "client") {
const point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] : event;
return { x: point[`${type}X`], y: point[`${type}Y`] };
}
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 isSelfTarget = (event) => {
const composedPath = getComposedPath(event);
const target = composedPath?.[0] ?? event.target;
return event.currentTarget === target;
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
addDomEvent,
getBeforeInputValue,
getEventKey,
getEventPoint,
getEventStep,
getEventTarget,
getNativeEvent,
isComposingEvent,
isContextMenuEvent,
isCtrlOrMetaKey,
isDownloadingEvent,
isKeyboardClick,
isLeftClick,
isModifierKey,
isOpeningInNewTab,
isPrintableKey,
isSelfTarget,
isTouchEvent,
isVirtualClick,
isVirtualPointerEvent
});