{"version":3,"file":"WaveEffect.cjs","sources":["../../../../../../packages/components/wave/src/WaveEffect.tsx"],"sourcesContent":["import type { CSSProperties } from 'vue';\nimport { useState } from '@antdv/hooks';\nimport { objectType, raf } from '@antdv/utils';\nimport {\n  defineComponent,\n  onBeforeUnmount,\n  onMounted,\n  render,\n  shallowRef,\n  Transition,\n} from 'vue';\nimport { getTargetWaveColor } from './util';\n\nfunction validateNum(value: number) {\n  return Number.isNaN(value) ? 0 : value;\n}\n\nexport interface WaveEffectProps {\n  className: string\n  target: HTMLElement\n}\n\nconst WaveEffect = defineComponent({\n  props: {\n    target: objectType<HTMLElement>(),\n    className: String,\n  },\n  setup(props) {\n    const divRef = shallowRef<HTMLDivElement | null>(null);\n\n    const [color, setWaveColor] = useState<string | null>(null);\n    const [borderRadius, setBorderRadius] = useState<number[]>([]);\n    const [left, setLeft] = useState(0);\n    const [top, setTop] = useState(0);\n    const [width, setWidth] = useState(0);\n    const [height, setHeight] = useState(0);\n    const [enabled, setEnabled] = useState(false);\n\n    function syncPos() {\n      const { target } = props;\n      const nodeStyle = getComputedStyle(target);\n\n      // Get wave color from target\n      setWaveColor(getTargetWaveColor(target));\n\n      const isStatic = nodeStyle.position === 'static';\n\n      // Rect\n      const { borderLeftWidth, borderTopWidth } = nodeStyle;\n      setLeft(isStatic ? target.offsetLeft : validateNum(-Number.parseFloat(borderLeftWidth)));\n      setTop(isStatic ? target.offsetTop : validateNum(-Number.parseFloat(borderTopWidth)));\n      setWidth(target.offsetWidth);\n      setHeight(target.offsetHeight);\n\n      // Get border radius\n      const {\n        borderTopLeftRadius,\n        borderTopRightRadius,\n        borderBottomLeftRadius,\n        borderBottomRightRadius,\n      } = nodeStyle;\n\n      setBorderRadius(\n        [\n          borderTopLeftRadius,\n          borderTopRightRadius,\n          borderBottomRightRadius,\n          borderBottomLeftRadius,\n        ].map(radius => validateNum(Number.parseFloat(radius))),\n      );\n    }\n    // Add resize observer to follow size\n    let resizeObserver: ResizeObserver;\n    let rafId: number;\n    let timeoutId: any;\n    const clear = () => {\n      clearTimeout(timeoutId);\n      raf.cancel(rafId);\n      resizeObserver?.disconnect();\n    };\n    const removeDom = () => {\n      const holder = divRef.value?.parentElement;\n      if (holder) {\n        render(null, holder);\n        if (holder.parentElement)\n          holder.parentElement.removeChild(holder);\n      }\n    };\n\n    onMounted(() => {\n      clear();\n      timeoutId = setTimeout(() => {\n        removeDom();\n      }, 5000);\n      const { target } = props;\n      if (target) {\n        // We need delay to check position here\n        // since UI may change after click\n        rafId = raf(() => {\n          syncPos();\n\n          setEnabled(true);\n        });\n\n        if (typeof ResizeObserver !== 'undefined') {\n          resizeObserver = new ResizeObserver(syncPos);\n\n          resizeObserver.observe(target);\n        }\n      }\n    });\n    onBeforeUnmount(() => {\n      clear();\n    });\n\n    const onTransitionend = (e: TransitionEvent) => {\n      if (e.propertyName === 'opacity')\n        removeDom();\n    };\n    return () => {\n      if (!enabled.value)\n        return null;\n\n      const waveStyle = {\n        left: `${left.value}px`,\n        top: `${top.value}px`,\n        width: `${width.value}px`,\n        height: `${height.value}px`,\n        borderRadius: borderRadius.value.map(radius => `${radius}px`).join(' '),\n      } as CSSProperties & {\n        [name: string]: number | string\n      };\n\n      if (color)\n        waveStyle['--wave-color'] = color.value as string;\n\n      return (\n        <Transition\n          appear\n          name=\"wave-motion\"\n          appearFromClass=\"wave-motion-appear\"\n          appearActiveClass=\"wave-motion-appear\"\n          appearToClass=\"wave-motion-appear wave-motion-appear-active\"\n        >\n          <div\n            ref={divRef}\n            class={props.className}\n            style={waveStyle}\n            onTransitionend={onTransitionend}\n          />\n        </Transition>\n      );\n    };\n  },\n});\n\nfunction showWaveEffect(node: HTMLElement, className: string) {\n  // Create holder\n  const holder = document.createElement('div');\n  holder.style.position = 'absolute';\n  holder.style.left = '0px';\n  holder.style.top = '0px';\n  node?.insertBefore(holder, node?.firstChild);\n\n  render(<WaveEffect target={node} className={className} />, holder);\n  return () => {\n    render(null, holder);\n    if (holder.parentElement) {\n      holder.parentElement.removeChild(holder);\n    }\n  };\n}\n\nexport default showWaveEffect;\n"],"names":["validateNum","value","Number","isNaN","WaveEffect","defineComponent","props","target","objectType","className","String","setup","divRef","shallowRef","color","setWaveColor","useState","borderRadius","setBorderRadius","left","setLeft","top","setTop","width","setWidth","height","setHeight","enabled","setEnabled","syncPos","nodeStyle","getComputedStyle","getTargetWaveColor","isStatic","position","borderLeftWidth","borderTopWidth","offsetLeft","parseFloat","offsetTop","offsetWidth","offsetHeight","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","map","radius","resizeObserver","rafId","timeoutId","clear","clearTimeout","raf","cancel","disconnect","removeDom","holder","parentElement","render","removeChild","onMounted","setTimeout","ResizeObserver","observe","onBeforeUnmount","onTransitionend","e","propertyName","waveStyle","join","_createVNode","Transition","default","showWaveEffect","node","document","createElement","style","insertBefore","firstChild"],"mappings":"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"}