import { isClient } from '@vueuse/core'; import './util.mjs'; import { camelize, isObject } from '@vue/shared'; const trimArr = function(s) { return (s || "").split(" ").filter((item) => !!item.trim()); }; const on = function(element, event, handler, useCapture = false) { if (element && event && handler) { element == null ? void 0 : element.addEventListener(event, handler, useCapture); } }; const off = function(element, event, handler, useCapture = false) { if (element && event && handler) { element == null ? void 0 : element.removeEventListener(event, handler, useCapture); } }; const once = function(el, event, fn) { const listener = function(...args) { if (fn) { fn.apply(this, args); } off(el, event, listener); }; on(el, event, listener); }; function hasClass(el, cls) { if (!el || !cls) return false; if (cls.indexOf(" ") !== -1) throw new Error("className should not contain space."); if (el.classList) { return el.classList.contains(cls); } else { const className = el.getAttribute("class") || ""; return className.split(" ").includes(cls); } } function addClass(el, cls) { if (!el) return; let className = el.getAttribute("class") || ""; const curClass = trimArr(className); const classes = (cls || "").split(" ").filter((item) => !curClass.includes(item) && !!item.trim()); if (el.classList) { el.classList.add(...classes); } else { className += ` ${classes.join(" ")}`; el.setAttribute("class", className); } } function removeClass(el, cls) { if (!el || !cls) return; const classes = trimArr(cls); let curClass = el.getAttribute("class") || ""; if (el.classList) { el.classList.remove(...classes); return; } classes.forEach((item) => { curClass = curClass.replace(` ${item} `, " "); }); const className = trimArr(curClass).join(" "); el.setAttribute("class", className); } const getStyle = function(element, styleName) { var _a; if (!isClient) return ""; if (!element || !styleName) return ""; styleName = camelize(styleName); if (styleName === "float") { styleName = "cssFloat"; } try { const style = element.style[styleName]; if (style) return style; const computed = (_a = document.defaultView) == null ? void 0 : _a.getComputedStyle(element, ""); return computed ? computed[styleName] : ""; } catch (e) { return element.style[styleName]; } }; function setStyle(element, styleName, value) { if (!element || !styleName) return; if (isObject(styleName)) { Object.keys(styleName).forEach((prop) => { setStyle(element, prop, styleName[prop]); }); } else { styleName = camelize(styleName); element.style[styleName] = value; } } function removeStyle(element, style) { if (!element || !style) return; if (isObject(style)) { Object.keys(style).forEach((prop) => { setStyle(element, prop, ""); }); } else { setStyle(element, style, ""); } } const isScroll = (el, isVertical) => { if (!isClient) return null; const determinedDirection = isVertical === null || isVertical === void 0; const overflow = determinedDirection ? getStyle(el, "overflow") : isVertical ? getStyle(el, "overflow-y") : getStyle(el, "overflow-x"); return overflow.match(/(scroll|auto|overlay)/); }; const getScrollContainer = (el, isVertical) => { if (!isClient) return; let parent = el; while (parent) { if ([window, document, document.documentElement].includes(parent)) { return window; } if (isScroll(parent, isVertical)) { return parent; } parent = parent.parentNode; } return parent; }; const isInContainer = (el, container) => { if (!isClient || !el || !container) return false; const elRect = el.getBoundingClientRect(); let containerRect; if (container instanceof Element) { containerRect = container.getBoundingClientRect(); } else { containerRect = { top: 0, right: window.innerWidth, bottom: window.innerHeight, left: 0 }; } return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right; }; const getOffsetTop = (el) => { let offset = 0; let parent = el; while (parent) { offset += parent.offsetTop; parent = parent.offsetParent; } return offset; }; const getOffsetTopDistance = (el, containerEl) => { return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl)); }; const stop = (e) => e.stopPropagation(); const getClientXY = (event) => { let clientX; let clientY; if (event.type === "touchend") { clientY = event.changedTouches[0].clientY; clientX = event.changedTouches[0].clientX; } else if (event.type.startsWith("touch")) { clientY = event.touches[0].clientY; clientX = event.touches[0].clientX; } else { clientY = event.clientY; clientX = event.clientX; } return { clientX, clientY }; }; const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => { const handleEvent = (event) => { const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event); if (checkForDefaultPrevented === false || !shouldPrevent) { return oursHandler == null ? void 0 : oursHandler(event); } }; return handleEvent; }; const whenMouse = (handler) => { return (e) => e.pointerType === "mouse" ? handler(e) : void 0; }; const composeStoppableHandler = (handler) => { return (e) => { if (!e.defaultPrevented) { handler(e); } }; }; const composeRefs = (...refs) => { return (el) => { refs.forEach((ref) => { ref.value = el; }); }; }; export { addClass, composeEventHandlers, composeRefs, composeStoppableHandler, getClientXY, getOffsetTop, getOffsetTopDistance, getScrollContainer, getStyle, hasClass, isInContainer, isScroll, off, on, once, removeClass, removeStyle, setStyle, stop, whenMouse }; //# sourceMappingURL=dom.mjs.map