{"version":3,"file":"dom.mjs","sources":["../../../../packages/utils/dom.ts"],"sourcesContent":["import { isClient } from '@vueuse/core'\r\nimport { isFunction } from '@vue/shared'\r\nimport { camelize, isObject } from './util'\r\nimport type { CSSProperties, ComponentPublicInstance, Ref } from 'vue'\r\n\r\nimport type { Nullable } from './types'\r\n\r\n/* istanbul ignore next */\r\nconst trimArr = function (s: string) {\r\n  return (s || '').split(' ').filter((item) => !!item.trim())\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport const on = function (\r\n  element: HTMLElement | Document | Window,\r\n  event: string,\r\n  handler: EventListenerOrEventListenerObject,\r\n  useCapture = false\r\n): void {\r\n  if (element && event && handler) {\r\n    element?.addEventListener(event, handler, useCapture)\r\n  }\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport const off = function (\r\n  element: HTMLElement | Document | Window,\r\n  event: string,\r\n  handler: EventListenerOrEventListenerObject,\r\n  useCapture = false\r\n): void {\r\n  if (element && event && handler) {\r\n    element?.removeEventListener(event, handler, useCapture)\r\n  }\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport const once = function (\r\n  el: HTMLElement,\r\n  event: string,\r\n  fn: EventListener\r\n): void {\r\n  const listener = function (this: any, ...args: any) {\r\n    if (fn) {\r\n      fn.apply(this, args)\r\n    }\r\n    off(el, event, listener)\r\n  }\r\n  on(el, event, listener)\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function hasClass(el: HTMLElement | Element, cls: string): boolean {\r\n  if (!el || !cls) return false\r\n  if (cls.indexOf(' ') !== -1)\r\n    throw new Error('className should not contain space.')\r\n  if (el.classList) {\r\n    return el.classList.contains(cls)\r\n  } else {\r\n    const className = el.getAttribute('class') || ''\r\n    return className.split(' ').includes(cls)\r\n  }\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function addClass(el: HTMLElement | Element, cls: string): void {\r\n  if (!el) return\r\n  let className = el.getAttribute('class') || ''\r\n  const curClass = trimArr(className)\r\n  const classes = (cls || '')\r\n    .split(' ')\r\n    .filter((item) => !curClass.includes(item) && !!item.trim())\r\n\r\n  if (el.classList) {\r\n    el.classList.add(...classes)\r\n  } else {\r\n    className += ` ${classes.join(' ')}`\r\n    el.setAttribute('class', className)\r\n  }\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function removeClass(el: HTMLElement | Element, cls: string): void {\r\n  if (!el || !cls) return\r\n  const classes = trimArr(cls)\r\n  let curClass = el.getAttribute('class') || ''\r\n\r\n  if (el.classList) {\r\n    el.classList.remove(...classes)\r\n    return\r\n  }\r\n  classes.forEach((item) => {\r\n    curClass = curClass.replace(` ${item} `, ' ')\r\n  })\r\n  const className = trimArr(curClass).join(' ')\r\n  el.setAttribute('class', className)\r\n}\r\n\r\n/* istanbul ignore next */\r\n// Here I want to use the type CSSProperties, but the definition for CSSProperties\r\n// has { [index: number]: string } in its type annotation, which does not satisfy the method\r\n// camelize(s: string)\r\n// Same as the return type\r\nexport const getStyle = function (\r\n  element: HTMLElement,\r\n  styleName: string\r\n): string {\r\n  if (!isClient) return ''\r\n  if (!element || !styleName) return ''\r\n  styleName = camelize(styleName)\r\n  if (styleName === 'float') {\r\n    styleName = 'cssFloat'\r\n  }\r\n  try {\r\n    const style = element.style[styleName]\r\n    if (style) return style\r\n    const computed = document.defaultView?.getComputedStyle(element, '')\r\n    return computed ? computed[styleName] : ''\r\n  } catch (e) {\r\n    return element.style[styleName]\r\n  }\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function setStyle(\r\n  element: HTMLElement,\r\n  styleName: CSSProperties | string,\r\n  value?: string\r\n): void {\r\n  if (!element || !styleName) return\r\n\r\n  if (isObject(styleName)) {\r\n    Object.keys(styleName).forEach((prop) => {\r\n      setStyle(element, prop, styleName[prop])\r\n    })\r\n  } else {\r\n    styleName = camelize(styleName)\r\n    element.style[styleName] = value\r\n  }\r\n}\r\n\r\nexport function removeStyle(\r\n  element: HTMLElement,\r\n  style: CSSProperties | string\r\n) {\r\n  if (!element || !style) return\r\n\r\n  if (isObject(style)) {\r\n    Object.keys(style).forEach((prop) => {\r\n      setStyle(element, prop, '')\r\n    })\r\n  } else {\r\n    setStyle(element, style, '')\r\n  }\r\n}\r\n\r\nexport const isScroll = (\r\n  el: HTMLElement,\r\n  isVertical?: Nullable<boolean>\r\n): RegExpMatchArray | null => {\r\n  if (!isClient) return null\r\n  const determinedDirection = isVertical === null || isVertical === undefined\r\n  const overflow = determinedDirection\r\n    ? getStyle(el, 'overflow')\r\n    : isVertical\r\n    ? getStyle(el, 'overflow-y')\r\n    : getStyle(el, 'overflow-x')\r\n\r\n  return overflow.match(/(scroll|auto|overlay)/)\r\n}\r\n\r\nexport const getScrollContainer = (\r\n  el: HTMLElement,\r\n  isVertical?: Nullable<boolean>\r\n): Window | HTMLElement | undefined => {\r\n  if (!isClient) return\r\n\r\n  let parent: HTMLElement = el\r\n  while (parent) {\r\n    if ([window, document, document.documentElement].includes(parent)) {\r\n      return window\r\n    }\r\n    if (isScroll(parent, isVertical)) {\r\n      return parent\r\n    }\r\n    parent = parent.parentNode as HTMLElement\r\n  }\r\n  return parent\r\n}\r\n\r\nexport const isInContainer = (\r\n  el: Element | undefined,\r\n  container: Element | Window | undefined\r\n): boolean => {\r\n  if (!isClient || !el || !container) return false\r\n\r\n  const elRect = el.getBoundingClientRect()\r\n\r\n  let containerRect: Pick<DOMRect, 'top' | 'bottom' | 'left' | 'right'>\r\n  if (container instanceof Element) {\r\n    containerRect = container.getBoundingClientRect()\r\n  } else {\r\n    containerRect = {\r\n      top: 0,\r\n      right: window.innerWidth,\r\n      bottom: window.innerHeight,\r\n      left: 0,\r\n    }\r\n  }\r\n  return (\r\n    elRect.top < containerRect.bottom &&\r\n    elRect.bottom > containerRect.top &&\r\n    elRect.right > containerRect.left &&\r\n    elRect.left < containerRect.right\r\n  )\r\n}\r\n\r\nexport const getOffsetTop = (el: HTMLElement) => {\r\n  let offset = 0\r\n  let parent = el\r\n\r\n  while (parent) {\r\n    offset += parent.offsetTop\r\n    parent = parent.offsetParent as HTMLElement\r\n  }\r\n\r\n  return offset\r\n}\r\n\r\nexport const getOffsetTopDistance = (\r\n  el: HTMLElement,\r\n  containerEl: HTMLElement\r\n) => {\r\n  return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl))\r\n}\r\n\r\nexport const stop = (e: Event) => e.stopPropagation()\r\n\r\nexport const getClientXY = (event: MouseEvent | TouchEvent) => {\r\n  let clientX: number\r\n  let clientY: number\r\n  if (event.type === 'touchend') {\r\n    clientY = (event as TouchEvent).changedTouches[0].clientY\r\n    clientX = (event as TouchEvent).changedTouches[0].clientX\r\n  } else if (event.type.startsWith('touch')) {\r\n    clientY = (event as TouchEvent).touches[0].clientY\r\n    clientX = (event as TouchEvent).touches[0].clientX\r\n  } else {\r\n    clientY = (event as MouseEvent).clientY\r\n    clientX = (event as MouseEvent).clientX\r\n  }\r\n  return {\r\n    clientX,\r\n    clientY,\r\n  }\r\n}\r\n\r\nexport const composeEventHandlers = <E>(\r\n  theirsHandler?: (event: E) => boolean | void,\r\n  oursHandler?: (event: E) => void,\r\n  { checkForDefaultPrevented = true } = {}\r\n) => {\r\n  const handleEvent = (event: E) => {\r\n    const shouldPrevent = theirsHandler?.(event)\r\n\r\n    if (checkForDefaultPrevented === false || !shouldPrevent) {\r\n      return oursHandler?.(event)\r\n    }\r\n  }\r\n  return handleEvent\r\n}\r\n\r\ntype WhenMouseHandler = (e: PointerEvent) => any\r\n\r\nexport const whenMouse = (handler: WhenMouseHandler): WhenMouseHandler => {\r\n  return (e: PointerEvent) =>\r\n    e.pointerType === 'mouse' ? handler(e) : undefined\r\n}\r\n\r\nexport const composeStoppableHandler = <E extends Event>(\r\n  handler: (e: E) => void\r\n) => {\r\n  return (e: E) => {\r\n    if (!e.defaultPrevented) {\r\n      handler(e)\r\n    }\r\n  }\r\n}\r\n\r\nexport type RefSetter = (\r\n  el: Element | ComponentPublicInstance | undefined\r\n) => void\r\n\r\nexport const composeRefs = (\r\n  ...refs: (Ref<HTMLElement | undefined | null> | RefSetter)[]\r\n) => {\r\n  return (el: Element | ComponentPublicInstance | null) => {\r\n    refs.forEach((ref) => {\r\n      if (isFunction(ref)) {\r\n        ref(el as Element | ComponentPublicInstance)\r\n      } else {\r\n        ref.value = el as HTMLElement | undefined\r\n      }\r\n    })\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}