{"version":3,"sources":["../../src/directives/ripple.ts"],"names":[],"mappings":"AACA,SAAS,WAAT,QAA4B,iBAA5B;AAEA,SAAS,SAAT,CAAoB,EAApB,EAAqC,KAArC,EAAkD;AAChD,OAAG,KAAH,CAAS,WAAT,IAAwB,KAAxB;AACA,OAAG,KAAH,CAAS,iBAAT,IAA8B,KAA9B;AACD;AAED,SAAS,OAAT,CAAkB,EAAlB,EAAmC,KAAnC,EAAgD;AAC9C,OAAG,KAAH,CAAS,SAAT,IAAsB,MAAM,QAAN,EAAtB;AACD;AAQD,SAAS,YAAT,CAAuB,CAAvB,EAAiD;AAC/C,WAAO,EAAE,WAAF,CAAc,IAAd,KAAuB,YAA9B;AACD;AAED,IAAM,YAAY,SAAZ,SAAY,CAAC,CAAD,EAA6B,EAA7B,EAA2E;AAAA,QAA7B,KAA6B,uEAAN,EAAM;;AAC3F,QAAM,SAAS,GAAG,qBAAH,EAAf;AACA,QAAM,SAAS,aAAa,CAAb,IAAkB,EAAE,OAAF,CAAU,EAAE,OAAF,CAAU,MAAV,GAAmB,CAA7B,CAAlB,GAAoD,CAAnE;AACA,QAAM,SAAS,OAAO,OAAP,GAAiB,OAAO,IAAvC;AACA,QAAM,SAAS,OAAO,OAAP,GAAiB,OAAO,GAAvC;AAEA,QAAI,SAAS,CAAb;AACA,QAAI,QAAQ,GAAZ;AACA,QAAI,GAAG,OAAH,IAAc,GAAG,OAAH,CAAW,MAA7B,EAAqC;AACnC,gBAAQ,IAAR;AACA,iBAAS,GAAG,WAAH,GAAiB,CAA1B;AACA,iBAAS,MAAM,MAAN,GAAe,MAAf,GAAwB,SAAS,KAAK,IAAL,CAAU,SAAC,SAAS,MAAV,EAAqB,CAArB,aAA0B,SAAS,MAAnC,EAA8C,CAA9C,CAAV,IAA6D,CAAvG;AACD,KAJD,MAIO;AACL,iBAAS,KAAK,IAAL,CAAU,YAAG,WAAH,EAAkB,CAAlB,aAAsB,GAAG,YAAzB,EAAyC,CAAzC,CAAV,IAAwD,CAAjE;AACD;AAED,QAAM,UAAa,CAAC,GAAG,WAAH,GAAkB,SAAS,CAA5B,IAAkC,CAA/C,OAAN;AACA,QAAM,UAAa,CAAC,GAAG,YAAH,GAAmB,SAAS,CAA7B,IAAmC,CAAhD,OAAN;AAEA,QAAM,IAAI,MAAM,MAAN,GAAe,OAAf,GAA4B,SAAS,MAArC,OAAV;AACA,QAAM,IAAI,MAAM,MAAN,GAAe,OAAf,GAA4B,SAAS,MAArC,OAAV;AAEA,WAAO,EAAE,cAAF,EAAU,YAAV,EAAiB,IAAjB,EAAoB,IAApB,EAAuB,gBAAvB,EAAgC,gBAAhC,EAAP;AACD,CAvBD;AAyBA,IAAM,SAAS;AACb;AACA,QAFa,gBAEP,CAFO,EAEqB,EAFrB,EAE+D;AAAA,YAAzB,KAAyB,uEAAF,EAAE;;AAC1E,YAAI,CAAC,GAAG,OAAJ,IAAe,CAAC,GAAG,OAAH,CAAW,OAA/B,EAAwC;AACtC;AACD;AAED,YAAM,YAAY,SAAS,aAAT,CAAuB,MAAvB,CAAlB;AACA,YAAM,YAAY,SAAS,aAAT,CAAuB,MAAvB,CAAlB;AAEA,kBAAU,WAAV,CAAsB,SAAtB;AACA,kBAAU,SAAV,GAAsB,qBAAtB;AAEA,YAAI,MAAM,KAAV,EAAiB;AACf,sBAAU,SAAV,UAA2B,MAAM,KAAjC;AACD;;AAbyE,yBAexB,UAAU,CAAV,EAAa,EAAb,EAAiB,KAAjB,CAfwB;AAAA,YAelE,MAfkE,cAelE,MAfkE;AAAA,YAe1D,KAf0D,cAe1D,KAf0D;AAAA,YAenD,CAfmD,cAenD,CAfmD;AAAA,YAehD,CAfgD,cAehD,CAfgD;AAAA,YAe7C,OAf6C,cAe7C,OAf6C;AAAA,YAepC,OAfoC,cAepC,OAfoC;;AAiB1E,YAAM,OAAU,SAAS,CAAnB,OAAN;AACA,kBAAU,SAAV,GAAsB,qBAAtB;AACA,kBAAU,KAAV,CAAgB,KAAhB,GAAwB,IAAxB;AACA,kBAAU,KAAV,CAAgB,MAAhB,GAAyB,IAAzB;AAEA,WAAG,WAAH,CAAe,SAAf;AAEA,YAAM,WAAW,OAAO,gBAAP,CAAwB,EAAxB,CAAjB;AACA,YAAI,YAAY,SAAS,QAAT,KAAsB,QAAtC,EAAgD;AAC9C,eAAG,KAAH,CAAS,QAAT,GAAoB,UAApB;AACA,eAAG,OAAH,CAAW,gBAAX,GAA8B,QAA9B;AACD;AAED,kBAAU,SAAV,CAAoB,GAApB,CAAwB,4BAAxB;AACA,kBAAU,SAAV,CAAoB,GAApB,CAAwB,8BAAxB;AACA,kBAAU,SAAV,iBAAkC,CAAlC,UAAwC,CAAxC,kBAAsD,KAAtD,SAA+D,KAA/D,SAAwE,KAAxE;AACA,gBAAQ,SAAR,EAAmB,CAAnB;AACA,kBAAU,OAAV,CAAkB,SAAlB,GAA8B,OAAO,YAAY,GAAZ,EAAP,CAA9B;AAEA,mBAAW,YAAK;AACd,sBAAU,SAAV,CAAoB,MAApB,CAA2B,4BAA3B;AACA,sBAAU,SAAV,CAAoB,GAApB,CAAwB,yBAAxB;AACA,sBAAU,SAAV,iBAAkC,OAAlC,UAA8C,OAA9C;AACA,oBAAQ,SAAR,EAAmB,IAAnB;AACD,SALD,EAKG,CALH;AAMD,KA5CY;AA8Cb,QA9Ca,gBA8CP,EA9CO,EA8Ce;AAC1B,YAAI,CAAC,EAAD,IAAO,CAAC,GAAG,OAAX,IAAsB,CAAC,GAAG,OAAH,CAAW,OAAtC,EAA+C;AAE/C,YAAM,UAAU,GAAG,sBAAH,CAA0B,qBAA1B,CAAhB;AAEA,YAAI,QAAQ,MAAR,KAAmB,CAAvB,EAA0B;AAC1B,YAAM,YAAY,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,CAAlB;AAEA,YAAI,UAAU,OAAV,CAAkB,QAAtB,EAAgC,OAAhC,KACK,UAAU,OAAV,CAAkB,QAAlB,GAA6B,MAA7B;AAEL,YAAM,OAAO,YAAY,GAAZ,KAAoB,OAAO,UAAU,OAAV,CAAkB,SAAzB,CAAjC;AACA,YAAM,QAAQ,KAAK,GAAL,CAAS,MAAM,IAAf,EAAqB,CAArB,CAAd;AAEA,mBAAW,YAAK;AACd,sBAAU,SAAV,CAAoB,MAApB,CAA2B,yBAA3B;AACA,sBAAU,SAAV,CAAoB,GAApB,CAAwB,0BAAxB;AACA,oBAAQ,SAAR,EAAmB,CAAnB;AAEA,uBAAW,YAAK;AACd,oBAAM,UAAU,GAAG,sBAAH,CAA0B,qBAA1B,CAAhB;AACA,oBAAI,QAAQ,MAAR,KAAmB,CAAnB,IAAwB,GAAG,OAAH,CAAW,gBAAvC,EAAyD;AACvD,uBAAG,KAAH,CAAS,QAAT,GAAoB,GAAG,OAAH,CAAW,gBAA/B;AACA,2BAAO,GAAG,OAAH,CAAW,gBAAlB;AACD;AAED,0BAAU,UAAV,IAAwB,GAAG,WAAH,CAAe,UAAU,UAAzB,CAAxB;AACD,aARD,EAQG,GARH;AASD,SAdD,EAcG,KAdH;AAeD;AA3EY,CAAf;AA8EA,SAAS,eAAT,CAA0B,KAA1B,EAAoC;AAClC,WAAO,OAAO,KAAP,KAAiB,WAAjB,IAAgC,CAAC,CAAC,KAAzC;AACD;AAED,SAAS,UAAT,CAAqB,CAArB,EAA+C;AAC7C,QAAM,QAAuB,EAA7B;AACA,QAAM,UAAU,EAAE,aAAlB;AACA,QAAI,CAAC,OAAD,IAAY,CAAC,QAAQ,OAArB,IAAgC,QAAQ,OAAR,CAAgB,OAApD,EAA6D;AAC7D,QAAI,aAAa,CAAb,CAAJ,EAAqB;AACnB,gBAAQ,OAAR,CAAgB,OAAhB,GAA0B,IAA1B;AACD;AACD,UAAM,MAAN,GAAe,QAAQ,OAAR,CAAgB,QAA/B;AACA,QAAI,QAAQ,OAAR,CAAgB,KAApB,EAA2B;AACzB,cAAM,KAAN,GAAc,QAAQ,OAAR,CAAgB,KAA9B;AACD;AACD,WAAO,IAAP,CAAY,CAAZ,EAAe,OAAf,EAAwB,KAAxB;AACD;AAED,SAAS,UAAT,CAAqB,CAArB,EAA6B;AAC3B,QAAM,UAAU,EAAE,aAAlB;AACA,QAAI,CAAC,OAAL,EAAc;AAEd,WAAO,UAAP,CAAkB,YAAK;AACrB,YAAI,QAAQ,OAAZ,EAAqB;AACnB,oBAAQ,OAAR,CAAgB,OAAhB,GAA0B,KAA1B;AACD;AACF,KAJD;AAKA,WAAO,IAAP,CAAY,OAAZ;AACD;AAED,SAAS,YAAT,CAAuB,EAAvB,EAAwC,OAAxC,EAAiE,UAAjE,EAAoF;AAClF,QAAM,UAAU,gBAAgB,QAAQ,KAAxB,CAAhB;AACA,QAAI,CAAC,OAAL,EAAc;AACZ,eAAO,IAAP,CAAY,EAAZ;AACD;AACD,OAAG,OAAH,GAAa,GAAG,OAAH,IAAc,EAA3B;AACA,OAAG,OAAH,CAAW,OAAX,GAAqB,OAArB;AACA,QAAM,QAAQ,QAAQ,KAAR,IAAiB,EAA/B;AACA,QAAI,MAAM,MAAV,EAAkB;AAChB,WAAG,OAAH,CAAW,QAAX,GAAsB,IAAtB;AACD;AACD,QAAI,MAAM,KAAV,EAAiB;AACf,WAAG,OAAH,CAAW,KAAX,GAAmB,QAAQ,KAAR,CAAc,KAAjC;AACD;AACD,QAAI,MAAM,MAAV,EAAkB;AAChB,WAAG,OAAH,CAAW,MAAX,GAAoB,MAAM,MAA1B;AACD;AACD,QAAI,WAAW,CAAC,UAAhB,EAA4B;AAC1B,WAAG,gBAAH,CAAoB,YAApB,EAAkC,UAAlC,EAA8C,EAAE,SAAS,IAAX,EAA9C;AACA,WAAG,gBAAH,CAAoB,UAApB,EAAgC,UAAhC,EAA4C,EAAE,SAAS,IAAX,EAA5C;AACA,WAAG,gBAAH,CAAoB,aAApB,EAAmC,UAAnC;AAEA,WAAG,gBAAH,CAAoB,WAApB,EAAiC,UAAjC;AACA,WAAG,gBAAH,CAAoB,SAApB,EAA+B,UAA/B;AACA,WAAG,gBAAH,CAAoB,YAApB,EAAkC,UAAlC;AACA;AACA,WAAG,gBAAH,CAAoB,WAApB,EAAiC,UAAjC,EAA6C,EAAE,SAAS,IAAX,EAA7C;AACD,KAVD,MAUO,IAAI,CAAC,OAAD,IAAY,UAAhB,EAA4B;AACjC,wBAAgB,EAAhB;AACD;AACF;AAED,SAAS,eAAT,CAA0B,EAA1B,EAAyC;AACvC,OAAG,mBAAH,CAAuB,WAAvB,EAAoC,UAApC;AACA,OAAG,mBAAH,CAAuB,YAAvB,EAAqC,UAArC;AACA,OAAG,mBAAH,CAAuB,UAAvB,EAAmC,UAAnC;AACA,OAAG,mBAAH,CAAuB,aAAvB,EAAsC,UAAtC;AACA,OAAG,mBAAH,CAAuB,SAAvB,EAAkC,UAAlC;AACA,OAAG,mBAAH,CAAuB,YAAvB,EAAqC,UAArC;AACA,OAAG,mBAAH,CAAuB,WAAvB,EAAoC,UAApC;AACD;AAED,SAAS,SAAT,CAAoB,EAApB,EAAqC,OAArC,EAA8D,IAA9D,EAAyE;AACvE,iBAAa,EAAb,EAAiB,OAAjB,EAA0B,KAA1B;AAEA;AACA,SAAK,OAAL,IAAgB,KAAK,OAAL,CAAa,SAAb,CAAuB,YAAK;AAC1C,YAAM,WAAW,OAAO,gBAAP,CAAwB,EAAxB,CAAjB;AACA,YAAI,YAAY,SAAS,OAAT,KAAqB,QAArC,EAA+C;AAC7C,gBAAM,UAAW,KAAa,SAAb,GAAyB,CAAE,KAAa,SAAf,EAA0B,KAAK,OAA/B,CAAzB,GAAmE,CAAC,KAAK,iBAAN,CAApF;AACA,0CAAY,mDAAZ,SAAoE,OAApE;AACD;AACF,KANe,CAAhB;AAOD;AAED,SAAS,MAAT,CAAiB,EAAjB,EAAgC;AAC9B,WAAO,GAAG,OAAV;AACA,oBAAgB,EAAhB;AACD;AAED,SAAS,MAAT,CAAiB,EAAjB,EAAkC,OAAlC,EAAyD;AACvD,QAAI,QAAQ,KAAR,KAAkB,QAAQ,QAA9B,EAAwC;AACtC;AACD;AAED,QAAM,aAAa,gBAAgB,QAAQ,QAAxB,CAAnB;AACA,iBAAa,EAAb,EAAiB,OAAjB,EAA0B,UAA1B;AACD;AAED,eAAe;AACb,UAAM,SADO;AAEb,kBAFa;AAGb;AAHa,CAAf","sourcesContent":["import { VNode, VNodeDirective } from 'vue'\nimport { consoleWarn } from '../util/console'\n\nfunction transform (el: HTMLElement, value: string) {\n el.style['transform'] = value\n el.style['webkitTransform'] = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n el.style['opacity'] = value.toString()\n}\n\nexport interface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nfunction isTouchEvent (e: MouseEvent | TouchEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nconst calculate = (e: MouseEvent | TouchEvent, el: HTMLElement, value: RippleOptions = {}) => {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n const localX = target.clientX - offset.left\n const localY = target.clientY - offset.top\n\n let radius = 0\n let scale = 0.3\n if (el._ripple && el._ripple.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripple = {\n /* eslint-disable max-statements */\n show (e: MouseEvent | TouchEvent, el: HTMLElement, value: RippleOptions = {}) {\n if (!el._ripple || !el._ripple.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n opacity(animation, 0)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n opacity(animation, 0.25)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el || !el._ripple || !el._ripple.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n opacity(animation, 0)\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n animation.parentNode && el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n }\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: MouseEvent | TouchEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement\n if (!element || !element._ripple || element._ripple.touched) return\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n }\n value.center = element._ripple.centered\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n ripple.show(e, element, value)\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element) return\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripple.hide(element)\n}\n\nfunction updateRipple (el: HTMLElement, binding: VNodeDirective, wasEnabled: boolean) {\n const enabled = isRippleEnabled(binding.value)\n if (!enabled) {\n ripple.hide(el)\n }\n el._ripple = el._ripple || {}\n el._ripple.enabled = enabled\n const value = binding.value || {}\n if (value.center) {\n el._ripple.centered = true\n }\n if (value.class) {\n el._ripple.class = binding.value.class\n }\n if (value.circle) {\n el._ripple.circle = value.circle\n }\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleHide)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('dragstart', rippleHide)\n}\n\nfunction directive (el: HTMLElement, binding: VNodeDirective, node: VNode) {\n updateRipple(el, binding, false)\n\n // warn if an inline element is used, waiting for el to be in the DOM first\n node.context && node.context.$nextTick(() => {\n const computed = window.getComputedStyle(el)\n if (computed && computed.display === 'inline') {\n const context = (node as any).fnOptions ? [(node as any).fnOptions, node.context] : [node.componentInstance]\n consoleWarn('v-ripple can only be used on block-level elements', ...context)\n }\n })\n}\n\nfunction unbind (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction update (el: HTMLElement, binding: VNodeDirective) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport default {\n bind: directive,\n unbind,\n update\n}\n"],"sourceRoot":""}