Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@zag-js/dom-query

Package Overview
Dependencies
Maintainers
1
Versions
683
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

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

Comparing version 0.0.0-dev-20230202113057 to 0.0.0-dev-20230222120620

dist/attrs.d.ts

4

dist/contains.d.ts

@@ -1,4 +0,4 @@

type Target = HTMLElement | EventTarget;
declare function contains(parent: Target | null | undefined, child: Target | null): boolean;
type Target = HTMLElement | EventTarget | null | undefined;
declare function contains(parent: Target, child: Target): boolean;
export { contains };

@@ -27,3 +27,3 @@ "use strict";

// src/is-element.ts
// src/is-html-element.ts
function isHTMLElement(value) {

@@ -30,0 +30,0 @@ return typeof value === "object" && value?.nodeType === Node.ELEMENT_NODE && typeof value?.nodeName === "string";

@@ -0,3 +1,20 @@

export { ariaAttr, dataAttr } from './attrs.js';
export { contains } from './contains.js';
export { isDocument, isHTMLElement, isWindow } from './is-element.js';
export { CustomEventEmitter, CustomEventListener, defineHelpers } from './helpers.js';
export { createScope } from './create-scope.js';
export { getDocument, getWindow } from './env.js';
export { getActiveElement } from './get-active-element.js';
export { indexOfId, itemById, nextById, prevById } from './get-by-id.js';
export { getByText } from './get-by-text.js';
export { TypeaheadOptions, TypeaheadState, getByTypeahead } from './get-by-typeahead.js';
export { getComputedStyle } from './get-computed-style.js';
export { getEventTarget } from './get-event-target.js';
export { getParent, getScrollParent, getScrollParents } from './get-scroll-parent.js';
export { isEditableElement } from './is-editable-element.js';
export { isHTMLElement } from './is-html-element.js';
export { getPlatform, isApple, isDom, isFirefox, isIPhone, isIos, isMac, isSafari, isTouchDevice } from './platform.js';
export { query, queryAll } from './query.js';
export { nextTick, raf } from './raf.js';
declare const MAX_Z_INDEX = 2147483647;
export { MAX_Z_INDEX };

@@ -23,17 +23,48 @@ "use strict";

__export(src_exports, {
MAX_Z_INDEX: () => MAX_Z_INDEX,
ariaAttr: () => ariaAttr,
contains: () => contains,
defineHelpers: () => defineHelpers,
isDocument: () => isDocument,
createScope: () => createScope,
dataAttr: () => dataAttr,
getActiveElement: () => getActiveElement,
getByText: () => getByText,
getByTypeahead: () => getByTypeahead,
getComputedStyle: () => getComputedStyle,
getDocument: () => getDocument2,
getEventTarget: () => getEventTarget,
getParent: () => getParent,
getPlatform: () => getPlatform,
getScrollParent: () => getScrollParent,
getScrollParents: () => getScrollParents,
getWindow: () => getWindow,
indexOfId: () => indexOfId,
isApple: () => isApple,
isDom: () => isDom,
isEditableElement: () => isEditableElement,
isFirefox: () => isFirefox,
isHTMLElement: () => isHTMLElement,
isWindow: () => isWindow
isIPhone: () => isIPhone,
isIos: () => isIos,
isMac: () => isMac,
isSafari: () => isSafari,
isTouchDevice: () => isTouchDevice,
itemById: () => itemById,
nextById: () => nextById,
nextTick: () => nextTick,
prevById: () => prevById,
query: () => query,
queryAll: () => queryAll,
raf: () => raf
});
module.exports = __toCommonJS(src_exports);
// src/is-element.ts
function isDocument(value) {
return value.nodeType === Node.DOCUMENT_NODE;
}
function isWindow(value) {
return value?.toString() === "[object Window]";
}
// src/attrs.ts
var dataAttr = (guard) => {
return guard ? "" : void 0;
};
var ariaAttr = (guard) => {
return guard ? "true" : void 0;
};
// src/is-html-element.ts
function isHTMLElement(value) {

@@ -52,4 +83,28 @@ return typeof value === "object" && value?.nodeType === Node.ELEMENT_NODE && typeof value?.nodeName === "string";

// src/get-element.ts
function getDocument(el) {
// src/create-scope.ts
var getDocument = (node) => {
if (node.nodeType === Node.DOCUMENT_NODE)
return node;
return node.ownerDocument ?? document;
};
function createScope(methods) {
const screen = {
getRootNode: (ctx) => ctx.getRootNode?.() ?? document,
getDoc: (ctx) => getDocument(screen.getRootNode(ctx)),
getWin: (ctx) => screen.getDoc(ctx).defaultView ?? window,
getActiveElement: (ctx) => screen.getDoc(ctx).activeElement,
getById: (ctx, id) => screen.getRootNode(ctx).getElementById(id),
queryById: (ctx, id) => {
const el = screen.getById(ctx, id);
if (!el)
throw new Error(`Element with id "${id}" not found.`);
return el;
}
};
return { ...screen, ...methods };
}
// src/env.ts
var isDocument = (el) => el.nodeType === Node.DOCUMENT_NODE;
function getDocument2(el) {
if (isDocument(el))

@@ -60,59 +115,227 @@ return el;

function getWindow(el) {
return getDocument(el).defaultView ?? window;
return el?.ownerDocument.defaultView ?? window;
}
// src/helpers.ts
function defineHelpers(rest) {
const dom = {
getRootNode(ctx) {
return ctx.getRootNode?.() ?? document;
},
getDoc(ctx) {
return getDocument(dom.getRootNode(ctx));
},
getWin(ctx) {
return getWindow(dom.getDoc(ctx));
},
getActiveElement(ctx) {
return dom.getDoc(ctx).activeElement;
},
getById(ctx, id) {
return dom.getRootNode(ctx).getElementById(id);
},
createEmitter(ctx, target) {
return function emit(evt, detail, options) {
const { bubbles = true, cancelable, composed = true } = options ?? {};
const eventName = `zag:${String(evt)}`;
const init = {
bubbles,
cancelable,
composed,
detail
};
const win = dom.getWin(ctx);
const event = new win.CustomEvent(eventName, init);
const node = typeof target === "function" ? target() : target;
node.dispatchEvent(event);
};
},
createListener(target) {
return function on(evt, listener) {
const eventName = `zag:${String(evt)}`;
const node = typeof target === "function" ? target() : target;
node.addEventListener(eventName, listener);
return function off() {
return node.removeEventListener(eventName, listener);
};
};
// src/get-active-element.ts
function getActiveElement(el) {
let activeElement = el.ownerDocument.activeElement;
while (activeElement?.shadowRoot) {
const el2 = activeElement.shadowRoot.activeElement;
if (el2 === activeElement)
break;
else
activeElement = el2;
}
return activeElement;
}
// src/get-by-id.ts
function itemById(v, id) {
return v.find((node) => node.id === id);
}
function indexOfId(v, id) {
const item = itemById(v, id);
return item ? v.indexOf(item) : -1;
}
function nextById(v, id, loop = true) {
let idx = indexOfId(v, id);
idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1);
return v[idx];
}
function prevById(v, id, loop = true) {
let idx = indexOfId(v, id);
if (idx === -1)
return loop ? v[v.length - 1] : null;
idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1);
return v[idx];
}
// src/get-by-text.ts
var getValueText = (item) => item.dataset.valuetext ?? item.textContent ?? "";
var match = (valueText, query2) => valueText.toLowerCase().startsWith(query2.toLowerCase());
var wrap = (v, idx) => {
return v.map((_, index) => v[(Math.max(idx, 0) + index) % v.length]);
};
function getByText(v, text, currentId) {
const index = currentId ? indexOfId(v, currentId) : -1;
let items = currentId ? wrap(v, index) : v;
const isSingleKey = text.length === 1;
if (isSingleKey) {
items = items.filter((item) => item.id !== currentId);
}
return items.find((item) => match(getValueText(item), text));
}
// src/get-by-typeahead.ts
function getByTypeaheadImpl(_items, options) {
const { state, activeId, key, timeout = 350 } = options;
const search = state.keysSoFar + key;
const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
const query2 = isRepeated ? search[0] : search;
let items = _items.slice();
const next = getByText(items, query2, activeId);
function cleanup() {
clearTimeout(state.timer);
state.timer = -1;
}
function update(value) {
state.keysSoFar = value;
cleanup();
if (value !== "") {
state.timer = +setTimeout(() => {
update("");
cleanup();
}, timeout);
}
}
update(search);
return next;
}
var getByTypeahead = /* @__PURE__ */ Object.assign(getByTypeaheadImpl, {
defaultOptions: { keysSoFar: "", timer: -1 },
isValidEvent: isValidTypeaheadEvent
});
function isValidTypeaheadEvent(event) {
return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
}
// src/get-computed-style.ts
var styleCache = /* @__PURE__ */ new WeakMap();
function getComputedStyle(el) {
if (!styleCache.has(el)) {
const win = el.ownerDocument.defaultView || window;
styleCache.set(el, win.getComputedStyle(el));
}
return styleCache.get(el);
}
// src/get-event-target.ts
function getEventTarget(event) {
return event.composedPath?.()[0] ?? event.target;
}
// src/get-scroll-parent.ts
function isScrollParent(el) {
const win = el.ownerDocument.defaultView || window;
const { overflow, overflowX, overflowY } = win.getComputedStyle(el);
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
}
function getParent(el) {
if (el.localName === "html")
return el;
return el.assignedSlot || el.parentElement || el.ownerDocument.documentElement;
}
function getScrollParent(el) {
if (["html", "body", "#document"].includes(el.localName)) {
return el.ownerDocument.body;
}
if (isHTMLElement(el) && isScrollParent(el)) {
return el;
}
return getScrollParent(getParent(el));
}
function getScrollParents(el, list = []) {
const parent = getScrollParent(el);
const isBody = parent === el.ownerDocument.body;
const win = parent.ownerDocument.defaultView || window;
const target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(parent) ? parent : []) : parent;
const parents = list.concat(target);
return isBody ? parents : parents.concat(getScrollParents(getParent(target)));
}
// src/is-editable-element.ts
function isEditableElement(el) {
if (el == null || !isHTMLElement(el)) {
return false;
}
try {
const win = el.ownerDocument.defaultView || window;
return el instanceof win.HTMLInputElement && el.selectionStart != null || /(textarea|select)/.test(el.localName) || el.isContentEditable;
} catch {
return false;
}
}
// src/platform.ts
var isDom = () => typeof window !== "undefined";
function getPlatform() {
const agent = navigator.userAgentData;
return agent?.platform ?? navigator.platform;
}
var pt = (v) => isDom() && v.test(getPlatform());
var ua = (v) => isDom() && v.test(navigator.userAgent);
var vn = (v) => isDom() && v.test(navigator.vendor);
var isTouchDevice = () => isDom() && !!navigator.maxTouchPoints;
var isMac = () => pt(/^Mac/) && !isTouchDevice;
var isIPhone = () => pt(/^iPhone/);
var isSafari = () => isApple() && vn(/apple/i);
var isFirefox = () => ua(/firefox\//i);
var isApple = () => pt(/mac|iphone|ipad|ipod/i);
var isIos = () => isApple() && !isMac();
// src/query.ts
function queryAll(root, selector) {
return Array.from(root?.querySelectorAll(selector) ?? []);
}
function query(root, selector) {
return root?.querySelector(selector);
}
// src/raf.ts
function nextTick(fn) {
const set = /* @__PURE__ */ new Set();
function raf2(fn2) {
const id = globalThis.requestAnimationFrame(fn2);
set.add(() => globalThis.cancelAnimationFrame(id));
}
raf2(() => raf2(fn));
return function cleanup() {
set.forEach((fn2) => fn2());
};
return { ...dom, ...rest };
}
function raf(fn) {
const id = globalThis.requestAnimationFrame(fn);
return () => {
globalThis.cancelAnimationFrame(id);
};
}
// src/index.ts
var MAX_Z_INDEX = 2147483647;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
MAX_Z_INDEX,
ariaAttr,
contains,
defineHelpers,
isDocument,
createScope,
dataAttr,
getActiveElement,
getByText,
getByTypeahead,
getComputedStyle,
getDocument,
getEventTarget,
getParent,
getPlatform,
getScrollParent,
getScrollParents,
getWindow,
indexOfId,
isApple,
isDom,
isEditableElement,
isFirefox,
isHTMLElement,
isWindow
isIPhone,
isIos,
isMac,
isSafari,
isTouchDevice,
itemById,
nextById,
nextTick,
prevById,
query,
queryAll,
raf
});
{
"name": "@zag-js/dom-query",
"version": "0.0.0-dev-20230202113057",
"version": "0.0.0-dev-20230222120620",
"description": "The dom helper library for zag.js machines",

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

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