{"version":3,"file":"index.vue.mjs","sources":["../../../../../../components/ripple/src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n  getCurrentInstance,\n  onMounted,\n  onUnmounted,\n  reactive,\n  watchEffect,\n} from 'vue'\nimport { addUnit, useNamespace } from '@fusion-ui-vue/utils'\nimport { useRipple } from '@fusion-ui-vue/hooks'\nimport { css } from '@fusion-ui-vue/theme'\nimport type { RippleStyle } from './ripple'\nimport { rippleProps } from './ripple'\n\nconst props = defineProps(rippleProps)\nconst ripplesArr = reactive<RippleStyle[]>([])\nconst parent = getCurrentInstance()?.parent\nconst ns = useNamespace('ripple')\nconst cssClass = useRipple(props, ns)\nlet bounce: NodeJS.Timeout | null = null\nlet listener: EventListener | null = null\n\nconst addRipple = (event: MouseEvent) => {\n  const target = event.currentTarget as HTMLElement\n  const rect = target.getBoundingClientRect()\n  const size = Math.max(target.clientWidth, target.clientHeight)\n  const radius = size / 2\n\n  const x = props.center\n    ? target.clientWidth / 2 - radius\n    : event.clientX - rect.left - radius\n  const y = props.center\n    ? target.clientHeight / 2 - radius\n    : event.clientY - rect.top - radius\n  ripplesArr.push({ x, y, size })\n}\n\nconst clear = () => {\n  if (bounce) {\n    clearTimeout(bounce)\n    bounce = null\n  }\n}\n\nwatchEffect(() => {\n  if (ripplesArr.length > 0) {\n    clear()\n\n    bounce = setTimeout(() => {\n      ripplesArr.length = 0\n      clear()\n    }, props.duration * 2)\n  }\n})\n\nonMounted(() => {\n  if (parent) {\n    listener = parent.proxy?.$el.addEventListener('mousedown', addRipple)\n    // Check if the parent element already has a position\n    if (window.getComputedStyle(parent.proxy?.$el).position === 'static') {\n      parent.proxy?.$el.classList.add(css`\n        position: relative;\n      `)\n    }\n  }\n})\nonUnmounted(() => {\n  clear()\n  if (listener) {\n    parent?.proxy?.$el.removeEventListener(listener)\n    listener = null\n  }\n})\ndefineExpose({ addRipple })\n</script>\n\n<template>\n  <span :class=\"[ns.b(), cssClass]\">\n    <span\n      v-for=\"(ripple, index) of ripplesArr\"\n      :key=\"`ripple_${index}`\"\n      :style=\"{\n        top: addUnit(ripple.y),\n        left: addUnit(ripple.x),\n        width: addUnit(ripple.size),\n        height: addUnit(ripple.size),\n      }\"\n      :class=\"[ns.e('span')]\"\n      class=\"pressed-state-layer\"\n    />\n  </span>\n</template>\n"],"names":["_a"],"mappings":"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"}