{"version":3,"file":"directive.mjs","sources":["../../../../../../packages/components/ripple/src/directive.ts"],"sourcesContent":["// source code from: https://varlet.gitee.io/varlet-ui/#/zh-CN/ripple\nimport { supportTouch } from '@hongluan-ui/utils'\nimport { useGlobalConfig, useNamespace } from '@hongluan-ui/hooks'\n\nimport type { ObjectDirective } from 'vue'\nimport type { DirectiveBinding } from '@vue/runtime-core'\n\nconst { namespace } = useNamespace('ripple')\nconst config = useGlobalConfig()\n\ninterface RippleStyles {\n  x: number\n  y: number\n  centerX: number\n  centerY: number\n  size: number\n}\n\ninterface RippleOptions {\n  removeRipple: any\n  touchmoveForbid: boolean\n  color?: string\n  disabled?: boolean\n  tasker?: number | null\n}\n\ninterface RippleHTMLElement extends HTMLElement {\n  _ripple?: RippleOptions\n}\n\nconst ANIMATION_DURATION = 250\n\nfunction setStyles(element: RippleHTMLElement) {\n  const { zIndex, position } = window.getComputedStyle(element)\n\n  element.style.overflow = 'hidden'\n  element.style.overflowX = 'hidden'\n  element.style.overflowY = 'hidden'\n  position === 'static' && (element.style.position = 'relative')\n  zIndex === 'auto' && (element.style.zIndex = '1')\n}\n\nfunction computeRippleStyles(element: RippleHTMLElement, event: TouchEvent | MouseEvent): RippleStyles {\n  const { top, left }: DOMRect = element.getBoundingClientRect()\n  const { clientWidth, clientHeight } = element\n\n  const radius: number = Math.sqrt(clientWidth ** 2 + clientHeight ** 2) / 2\n  const size: number = radius * 2\n\n  const localX: number = (event as any).touches ? (event as TouchEvent).touches[0].clientX : (event as MouseEvent).clientX - left\n  const localY: number = (event as any).touches ? (event as TouchEvent).touches[0].clientY : (event as MouseEvent).clientY - top\n\n  const centerX: number = (clientWidth - radius * 2) / 2\n  const centerY: number = (clientHeight - radius * 2) / 2\n\n  const x: number = localX - radius\n  const y: number = localY - radius\n\n  return { x, y, centerX, centerY, size }\n}\n\nfunction createRipple(this: RippleHTMLElement, event: TouchEvent | MouseEvent) {\n  const _ripple = this._ripple as RippleOptions\n  _ripple.removeRipple()\n\n  if (_ripple.disabled || _ripple.tasker) {\n    return\n  }\n\n  const task = () => {\n    _ripple.tasker = null\n\n    const { x, y, centerX, centerY, size }: RippleStyles = computeRippleStyles(this, event)\n    const ripple: RippleHTMLElement = document.createElement('div')\n    ripple.classList.add(namespace.value)\n    ripple.style.opacity = `0`\n    ripple.style.transform = `translate(${x}px, ${y}px) scale3d(.3, .3, .3)`\n    ripple.style.width = `${size}px`\n    ripple.style.height = `${size}px`\n    _ripple.color && (ripple.style.backgroundColor = _ripple.color)\n    ripple.dataset.createdAt = String(performance.now())\n\n    setStyles(this)\n\n    this.appendChild(ripple)\n\n    window.setTimeout(() => {\n      ripple.style.transform = `translate(${centerX}px, ${centerY}px) scale3d(1, 1, 1)`\n      ripple.style.opacity = `.25`\n    }, 20)\n  }\n\n  _ripple.tasker = window.setTimeout(task, 60)\n}\n\nfunction removeRipple(this: RippleHTMLElement) {\n  const _ripple = this._ripple as RippleOptions\n\n  const task = () => {\n    const ripples: NodeListOf<RippleHTMLElement> = this.querySelectorAll(`.${namespace.value}`)\n    if (!ripples.length) {\n      return\n    }\n\n    const lastRipple: RippleHTMLElement = ripples[ripples.length - 1]\n    const delay: number = ANIMATION_DURATION - performance.now() + Number(lastRipple.dataset.createdAt)\n\n    setTimeout(() => {\n      lastRipple.style.opacity = `0`\n\n      setTimeout(() => lastRipple.parentNode?.removeChild(lastRipple), ANIMATION_DURATION)\n    }, delay)\n  }\n\n  _ripple.tasker ? setTimeout(task, 60) : task()\n}\n\nfunction forbidRippleTask(this: RippleHTMLElement) {\n  const _ripple = this._ripple as RippleOptions\n\n  if (!supportTouch()) {\n    return\n  }\n\n  if (!_ripple.touchmoveForbid) {\n    return\n  }\n\n  _ripple.tasker && window.clearTimeout(_ripple.tasker)\n  _ripple.tasker = null\n}\n\nfunction mounted(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {\n  el._ripple = {\n    tasker: null,\n    ...(binding.value ?? {}),\n    touchmoveForbid: binding.value?.touchmoveForbid ?? config.value.touchmoveForbid,\n    removeRipple: removeRipple.bind(el),\n  }\n\n  if (supportTouch()) {\n    el.addEventListener('touchstart', createRipple, { passive: true })\n    el.addEventListener('touchmove', forbidRippleTask, { passive: true })\n    document.addEventListener('touchend', el._ripple.removeRipple, { passive: true })\n    document.addEventListener('touchcancel', el._ripple.removeRipple, { passive: true })\n  } else {\n    el.addEventListener('mousedown', createRipple, { passive: true })\n    document.addEventListener('mouseup', el._ripple.removeRipple, { passive: true })\n  }\n  el.addEventListener('dragstart', removeRipple, { passive: true })\n}\n\nfunction unmounted(el: RippleHTMLElement) {\n  if (supportTouch()) {\n    el.removeEventListener('touchstart', createRipple)\n    el.removeEventListener('touchmove', forbidRippleTask)\n    document.removeEventListener('touchend', el._ripple?.removeRipple)\n    document.removeEventListener('touchcancel', el._ripple?.removeRipple)\n  } else {\n    el.removeEventListener('mousedown', createRipple)\n    document.removeEventListener('mouseup', el._ripple?.removeRipple)\n  }\n  el.removeEventListener('dragstart', removeRipple)\n}\n\nfunction updated(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {\n  el._ripple = {\n    ...el._ripple,\n    ...(binding.value ?? {}),\n    touchmoveForbid: binding.value?.touchmoveForbid ?? config.value.touchmoveForbid,\n    tasker: null,\n  }\n}\n\nexport const vRipple: ObjectDirective = {\n  mounted,\n  updated,\n  unmounted,\n}\n"],"names":[],"mappings":"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"}