| /** | ||
| * wowfy | ||
| * An awesome and easy-to-use JavaScript animation library. | ||
| * | ||
| * @version 0.2.3 | ||
| * @author Wujue | ||
| * @email wujue0115@gmail.com | ||
| * @github https://github.com/Wujue0115 | ||
| * @license MIT | ||
| * @link https://wowfyjs.com | ||
| */ | ||
| "use strict";function t(t){const i=void 0;return/^(\d+(\.\d+)?|\.\d+)(ms|s)$/.test(t)}function i(t){const i=void 0,s=void 0;return parseFloat(t.split("m")[0].split("s")[0])*(t.includes("m")?1:1e3)}function s(t,i){for(const[s,o]of Object.entries(i))t.style[s]=o}function o(t="div",i={}){const o=document.createElement(t);return s(o,i),o}function e(t){const i=void 0;return`w-${t.split(/(?=[A-Z])/).map((t=>t.toLowerCase())).join("-")}`}const h={event:"mousedown",background:"#ff98cfaa",duration:"500ms",timingFunction:"ease-in",mode:"unkeep",position:"cs",delay:"0ms",size:!1,sizeRatio:1,repeatCount:1,repeatInterval:"0ms",maxCount:10,outline:"",boxShadow:""};class n{constructor(t,s){var o;this.i=t,this.o=s,this.h=[],this.u=!1,this.p=null,this.addMouseRippleEffect=t=>{if(this.p)return;let s=Math.min(Math.max(1,this.o.repeatCount),n.rippleRepeatCountThreshold);this.addRippleEffect(t),--s;const o=setInterval((()=>{0!=s--?this.addRippleEffect(t):clearInterval(o)}),i(this.o.repeatInterval));this.p=setTimeout((()=>{this.p=null}),n.rippleTimeThreshold)};try{for(const t in h)(o=this.o)[t]||(o[t]=h[t]);this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}get options(){return this.o}setEffect(){this.m||(this.m=this.createRippleWrapper(),this.i.appendChild(this.m)),s(this.i,{position:this.i.style.position||"relative"}),this.u&&this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.i.addEventListener(this.o.event,this.addMouseRippleEffect),this.u=!0}update(t){try{this.o={...this.o,...t},this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}destroy(){this.m.remove(),this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.u=null,this.i=null,this.o=null}validateOption(){const i=["duration","delay","repeatInterval"];for(const s of i)if(!t(this.o[s]))throw new Error(`"${this.o[s]}" is an invalid time format.`)}createRippleWrapper(){return o("div",{position:"absolute",inset:"0",borderRadius:"inherit",pointerEvents:"none",contain:"strict"})}createRipple(t,i,s){return o("div",{width:t+"px",aspectRatio:"1",position:"absolute",left:i-(t>>1)+"px",top:s-(t>>1)+"px",borderRadius:"50%",background:this.o.background,outline:this.o.outline,boxShadow:this.o.boxShadow})}getRippleMousePosition(t){let i=t.target,s=0,o=0;for(;i!==this.i;)for(s+=i.offsetTop,o+=i.offsetLeft;i!==this.i&&(i=i.parentElement,"static"===window.getComputedStyle(i).getPropertyValue("position")););return{x:t.offsetX+o,y:t.offsetY+s}}getRipplePosition(t){const i={"left-top":"top-left","left-bottom":"bottom-left","right-top":"top-right","right-bottom":"bottom-right",cs:"cursor",ct:"center",rd:"random",t:"top",b:"bottom",l:"left",r:"right",tl:"top-left",tr:"top-right",bl:"bottom-left",br:"bottom-right",lt:"top-left",lb:"bottom-left",rt:"top-right",rb:"bottom-right"},s={cursor:this.getRippleMousePosition(t),center:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight>>1},random:{x:Math.random()*this.i.offsetWidth,y:Math.random()*this.i.offsetHeight},top:{x:this.i.offsetWidth>>1,y:0},bottom:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight},right:{x:this.i.offsetWidth,y:this.i.offsetHeight>>1},left:{x:0,y:this.i.offsetHeight>>1},"top-left":{x:0,y:0},"top-right":{x:this.i.offsetWidth,y:0},"bottom-left":{x:0,y:this.i.offsetHeight},"bottom-right":{x:this.i.offsetWidth,y:this.i.offsetHeight}};return s[this.o.position]||s[i[this.o.position]]||s.cursor}caculateRippleSize(t,i){const s=t,o=i,e=this.i.offsetWidth-s,h=this.i.offsetHeight-o,r=Math.max(s,e),a=Math.max(o,h),c=void 0,l=void 0,u=2*Math.ceil(Math.sqrt(r**2+a**2))*1.1*Math.min(1,Math.max(0,this.o.sizeRatio));return Math.min(u,n.rippleSizeThreshold)}startRippleAnimation(t){s(t,{scale:"0",opacity:"1",transitionProperty:"scale, opacity",transitionDuration:this.o.duration,transitionTimingFunction:this.o.timingFunction,willChange:"scale, opacity"})}endRippleAnimation(t){s(t,{scale:"1",opacity:"0"})}addRippleEffect(t){const s=Math.min(Math.max(1,this.o.maxCount),n.rippleCountThreshold);for(;this.h.length>=s;)this.h.shift().remove();const{x:o,y:e}=this.getRipplePosition(t),h=this.o.size||this.caculateRippleSize(o,e),r=this.createRipple(h,o,e),a=this.h.length;this.h.push(r),this.m.appendChild(r),this.startRippleAnimation(r),requestAnimationFrame((()=>{setTimeout((()=>{if(this.endRippleAnimation(r),"keep"!==this.o.mode||"mousedown"!==this.o.event&&"mouseenter"!==this.o.event)setTimeout((()=>{r.remove(),this.h.splice(a,1)}),1.1*i(this.o.duration));else{const t={mousedown:"mouseup",mouseenter:"mouseleave"}[this.o.event]||"mouseleave";this.i.addEventListener(t,(()=>{r.remove(),this.h.splice(a,1)}),{once:!0})}}),i(this.o.delay))}))}}function r(){const t=document.querySelectorAll("[w-ripple]");for(const i of t){const t={};for(const s in h){const o=e(s),h=i.getAttribute(o);t[s]=h}const s=void 0;new n(i,t).setEffect()}}n.rippleSizeThreshold=2e3,n.rippleTimeThreshold=50,n.rippleCountThreshold=20,n.rippleRepeatCountThreshold=5;const a={ripple:n};class c{constructor(t,i,s={}){this.i=t,this.v=i,this.M=null,this.M=new a[this.v](this.i,s),this.M.setEffect()}get effect(){return this.v}get options(){return this.M.options}update(t,i){t!==this.v&&(this.M.destroy(),this.M=new a[t](this.i,i)),this.M.update(i),this.M.setEffect()}destroy(){this.M.destroy(),this.i=null,this.v=null}}function l(){r()}exports.Wowfy=c,exports.rippleInit=r,exports.wowfyInit=l; |
| /** | ||
| * wowfy | ||
| * An awesome and easy-to-use JavaScript animation library. | ||
| * | ||
| * @version 0.2.3 | ||
| * @author Wujue | ||
| * @email wujue0115@gmail.com | ||
| * @github https://github.com/Wujue0115 | ||
| * @license MIT | ||
| * @link https://wowfyjs.com | ||
| */ | ||
| function t(t){const i=void 0;return/^(\d+(\.\d+)?|\.\d+)(ms|s)$/.test(t)}function i(t){const i=void 0,s=void 0;return parseFloat(t.split("m")[0].split("s")[0])*(t.includes("m")?1:1e3)}function s(t,i){for(const[s,o]of Object.entries(i))t.style[s]=o}function o(t="div",i={}){const o=document.createElement(t);return s(o,i),o}function e(t){const i=void 0;return`w-${t.split(/(?=[A-Z])/).map((t=>t.toLowerCase())).join("-")}`}const h={event:"mousedown",background:"#ff98cfaa",duration:"500ms",timingFunction:"ease-in",mode:"unkeep",position:"cs",delay:"0ms",size:!1,sizeRatio:1,repeatCount:1,repeatInterval:"0ms",maxCount:10,outline:"",boxShadow:""};class n{constructor(t,s){var o;this.i=t,this.o=s,this.h=[],this.u=!1,this.p=null,this.addMouseRippleEffect=t=>{if(this.p)return;let s=Math.min(Math.max(1,this.o.repeatCount),n.rippleRepeatCountThreshold);this.addRippleEffect(t),--s;const o=setInterval((()=>{0!=s--?this.addRippleEffect(t):clearInterval(o)}),i(this.o.repeatInterval));this.p=setTimeout((()=>{this.p=null}),n.rippleTimeThreshold)};try{for(const t in h)(o=this.o)[t]||(o[t]=h[t]);this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}get options(){return this.o}setEffect(){this.m||(this.m=this.createRippleWrapper(),this.i.appendChild(this.m)),s(this.i,{position:this.i.style.position||"relative"}),this.u&&this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.i.addEventListener(this.o.event,this.addMouseRippleEffect),this.u=!0}update(t){try{this.o={...this.o,...t},this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}destroy(){this.m.remove(),this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.u=null,this.i=null,this.o=null}validateOption(){const i=["duration","delay","repeatInterval"];for(const s of i)if(!t(this.o[s]))throw new Error(`"${this.o[s]}" is an invalid time format.`)}createRippleWrapper(){return o("div",{position:"absolute",inset:"0",borderRadius:"inherit",pointerEvents:"none",contain:"strict"})}createRipple(t,i,s){return o("div",{width:t+"px",aspectRatio:"1",position:"absolute",left:i-(t>>1)+"px",top:s-(t>>1)+"px",borderRadius:"50%",background:this.o.background,outline:this.o.outline,boxShadow:this.o.boxShadow})}getRippleMousePosition(t){let i=t.target,s=0,o=0;for(;i!==this.i;)for(s+=i.offsetTop,o+=i.offsetLeft;i!==this.i&&(i=i.parentElement,"static"===window.getComputedStyle(i).getPropertyValue("position")););return{x:t.offsetX+o,y:t.offsetY+s}}getRipplePosition(t){const i={"left-top":"top-left","left-bottom":"bottom-left","right-top":"top-right","right-bottom":"bottom-right",cs:"cursor",ct:"center",rd:"random",t:"top",b:"bottom",l:"left",r:"right",tl:"top-left",tr:"top-right",bl:"bottom-left",br:"bottom-right",lt:"top-left",lb:"bottom-left",rt:"top-right",rb:"bottom-right"},s={cursor:this.getRippleMousePosition(t),center:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight>>1},random:{x:Math.random()*this.i.offsetWidth,y:Math.random()*this.i.offsetHeight},top:{x:this.i.offsetWidth>>1,y:0},bottom:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight},right:{x:this.i.offsetWidth,y:this.i.offsetHeight>>1},left:{x:0,y:this.i.offsetHeight>>1},"top-left":{x:0,y:0},"top-right":{x:this.i.offsetWidth,y:0},"bottom-left":{x:0,y:this.i.offsetHeight},"bottom-right":{x:this.i.offsetWidth,y:this.i.offsetHeight}};return s[this.o.position]||s[i[this.o.position]]||s.cursor}caculateRippleSize(t,i){const s=t,o=i,e=this.i.offsetWidth-s,h=this.i.offsetHeight-o,r=Math.max(s,e),a=Math.max(o,h),c=void 0,l=void 0,u=2*Math.ceil(Math.sqrt(r**2+a**2))*1.1*Math.min(1,Math.max(0,this.o.sizeRatio));return Math.min(u,n.rippleSizeThreshold)}startRippleAnimation(t){s(t,{scale:"0",opacity:"1",transitionProperty:"scale, opacity",transitionDuration:this.o.duration,transitionTimingFunction:this.o.timingFunction,willChange:"scale, opacity"})}endRippleAnimation(t){s(t,{scale:"1",opacity:"0"})}addRippleEffect(t){const s=Math.min(Math.max(1,this.o.maxCount),n.rippleCountThreshold);for(;this.h.length>=s;)this.h.shift().remove();const{x:o,y:e}=this.getRipplePosition(t),h=this.o.size||this.caculateRippleSize(o,e),r=this.createRipple(h,o,e),a=this.h.length;this.h.push(r),this.m.appendChild(r),this.startRippleAnimation(r),requestAnimationFrame((()=>{setTimeout((()=>{if(this.endRippleAnimation(r),"keep"!==this.o.mode||"mousedown"!==this.o.event&&"mouseenter"!==this.o.event)setTimeout((()=>{r.remove(),this.h.splice(a,1)}),1.1*i(this.o.duration));else{const t={mousedown:"mouseup",mouseenter:"mouseleave"}[this.o.event]||"mouseleave";this.i.addEventListener(t,(()=>{r.remove(),this.h.splice(a,1)}),{once:!0})}}),i(this.o.delay))}))}}function r(){const t=document.querySelectorAll("[w-ripple]");for(const i of t){const t={};for(const s in h){const o=e(s),h=i.getAttribute(o);t[s]=h}const s=void 0;new n(i,t).setEffect()}}n.rippleSizeThreshold=2e3,n.rippleTimeThreshold=50,n.rippleCountThreshold=20,n.rippleRepeatCountThreshold=5;const a={ripple:n};class c{constructor(t,i,s={}){this.i=t,this.v=i,this.M=null,this.M=new a[this.v](this.i,s),this.M.setEffect()}get effect(){return this.v}get options(){return this.M.options}update(t,i){t!==this.v&&(this.M.destroy(),this.M=new a[t](this.i,i)),this.M.update(i),this.M.setEffect()}destroy(){this.M.destroy(),this.i=null,this.v=null}}function l(){r()}export{c as Wowfy,r as rippleInit,l as wowfyInit}; |
+3
-3
| { | ||
| "name": "wowfy", | ||
| "version": "0.2.3", | ||
| "version": "0.2.4", | ||
| "description": "An awesome and easy-to-use JavaScript animation library.", | ||
@@ -33,4 +33,4 @@ "homepage": "https://wowfyjs.com", | ||
| "type": "module", | ||
| "main": "./dist/wowfy.cjs.js", | ||
| "module": "./dist/wowfy.esm.js", | ||
| "main": "./dist/wowfy.cjs", | ||
| "module": "./dist/wowfy.mjs", | ||
| "unpkg": "./dist/wowfy.global.js", | ||
@@ -37,0 +37,0 @@ "jsdelivr": "./dist/wowfy.global.js", |
+1
-1
@@ -50,3 +50,3 @@ # wowfy.js | ||
| <script type="module"> | ||
| import { wowfyInit } from "https://unpkg.com/wowfy/dist/wowfy.esm.js"; | ||
| import { wowfyInit } from "https://unpkg.com/wowfy/dist/wowfy.mjs"; | ||
@@ -53,0 +53,0 @@ wowfyInit(); |
| /** | ||
| * wowfy | ||
| * An awesome and easy-to-use JavaScript animation library. | ||
| * | ||
| * @version 0.2.3 | ||
| * @author Wujue | ||
| * @email wujue0115@gmail.com | ||
| * @github https://github.com/Wujue0115 | ||
| * @license MIT | ||
| * @link https://wowfyjs.com | ||
| */ | ||
| "use strict";function t(t){const i=void 0;return/^(\d+(\.\d+)?|\.\d+)(ms|s)$/.test(t)}function i(t){const i=void 0,s=void 0;return parseFloat(t.split("m")[0].split("s")[0])*(t.includes("m")?1:1e3)}function s(t,i){for(const[s,o]of Object.entries(i))t.style[s]=o}function o(t="div",i={}){const o=document.createElement(t);return s(o,i),o}function e(t){const i=void 0;return`w-${t.split(/(?=[A-Z])/).map((t=>t.toLowerCase())).join("-")}`}const h={event:"mousedown",background:"#ff98cfaa",duration:"500ms",timingFunction:"ease-in",mode:"unkeep",position:"cs",delay:"0ms",size:!1,sizeRatio:1,repeatCount:1,repeatInterval:"0ms",maxCount:10,outline:"",boxShadow:""};class n{constructor(t,s){var o;this.i=t,this.o=s,this.h=[],this.u=!1,this.p=null,this.addMouseRippleEffect=t=>{if(this.p)return;let s=Math.min(Math.max(1,this.o.repeatCount),n.rippleRepeatCountThreshold);this.addRippleEffect(t),--s;const o=setInterval((()=>{0!=s--?this.addRippleEffect(t):clearInterval(o)}),i(this.o.repeatInterval));this.p=setTimeout((()=>{this.p=null}),n.rippleTimeThreshold)};try{for(const t in h)(o=this.o)[t]||(o[t]=h[t]);this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}get options(){return this.o}setEffect(){this.m||(this.m=this.createRippleWrapper(),this.i.appendChild(this.m)),s(this.i,{position:this.i.style.position||"relative"}),this.u&&this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.i.addEventListener(this.o.event,this.addMouseRippleEffect),this.u=!0}update(t){try{this.o={...this.o,...t},this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}destroy(){this.m.remove(),this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.u=null,this.i=null,this.o=null}validateOption(){const i=["duration","delay","repeatInterval"];for(const s of i)if(!t(this.o[s]))throw new Error(`"${this.o[s]}" is an invalid time format.`)}createRippleWrapper(){return o("div",{position:"absolute",inset:"0",borderRadius:"inherit",pointerEvents:"none",contain:"strict"})}createRipple(t,i,s){return o("div",{width:t+"px",aspectRatio:"1",position:"absolute",left:i-(t>>1)+"px",top:s-(t>>1)+"px",borderRadius:"50%",background:this.o.background,outline:this.o.outline,boxShadow:this.o.boxShadow})}getRippleMousePosition(t){let i=t.target,s=0,o=0;for(;i!==this.i;)for(s+=i.offsetTop,o+=i.offsetLeft;i!==this.i&&(i=i.parentElement,"static"===window.getComputedStyle(i).getPropertyValue("position")););return{x:t.offsetX+o,y:t.offsetY+s}}getRipplePosition(t){const i={"left-top":"top-left","left-bottom":"bottom-left","right-top":"top-right","right-bottom":"bottom-right",cs:"cursor",ct:"center",rd:"random",t:"top",b:"bottom",l:"left",r:"right",tl:"top-left",tr:"top-right",bl:"bottom-left",br:"bottom-right",lt:"top-left",lb:"bottom-left",rt:"top-right",rb:"bottom-right"},s={cursor:this.getRippleMousePosition(t),center:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight>>1},random:{x:Math.random()*this.i.offsetWidth,y:Math.random()*this.i.offsetHeight},top:{x:this.i.offsetWidth>>1,y:0},bottom:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight},right:{x:this.i.offsetWidth,y:this.i.offsetHeight>>1},left:{x:0,y:this.i.offsetHeight>>1},"top-left":{x:0,y:0},"top-right":{x:this.i.offsetWidth,y:0},"bottom-left":{x:0,y:this.i.offsetHeight},"bottom-right":{x:this.i.offsetWidth,y:this.i.offsetHeight}};return s[this.o.position]||s[i[this.o.position]]||s.cursor}caculateRippleSize(t,i){const s=t,o=i,e=this.i.offsetWidth-s,h=this.i.offsetHeight-o,r=Math.max(s,e),a=Math.max(o,h),c=void 0,l=void 0,u=2*Math.ceil(Math.sqrt(r**2+a**2))*1.1*Math.min(1,Math.max(0,this.o.sizeRatio));return Math.min(u,n.rippleSizeThreshold)}startRippleAnimation(t){s(t,{scale:"0",opacity:"1",transitionProperty:"scale, opacity",transitionDuration:this.o.duration,transitionTimingFunction:this.o.timingFunction,willChange:"scale, opacity"})}endRippleAnimation(t){s(t,{scale:"1",opacity:"0"})}addRippleEffect(t){const s=Math.min(Math.max(1,this.o.maxCount),n.rippleCountThreshold);for(;this.h.length>=s;)this.h.shift().remove();const{x:o,y:e}=this.getRipplePosition(t),h=this.o.size||this.caculateRippleSize(o,e),r=this.createRipple(h,o,e),a=this.h.length;this.h.push(r),this.m.appendChild(r),this.startRippleAnimation(r),requestAnimationFrame((()=>{setTimeout((()=>{if(this.endRippleAnimation(r),"keep"!==this.o.mode||"mousedown"!==this.o.event&&"mouseenter"!==this.o.event)setTimeout((()=>{r.remove(),this.h.splice(a,1)}),1.1*i(this.o.duration));else{const t={mousedown:"mouseup",mouseenter:"mouseleave"}[this.o.event]||"mouseleave";this.i.addEventListener(t,(()=>{r.remove(),this.h.splice(a,1)}),{once:!0})}}),i(this.o.delay))}))}}function r(){const t=document.querySelectorAll("[w-ripple]");for(const i of t){const t={};for(const s in h){const o=e(s),h=i.getAttribute(o);t[s]=h}const s=void 0;new n(i,t).setEffect()}}n.rippleSizeThreshold=2e3,n.rippleTimeThreshold=50,n.rippleCountThreshold=20,n.rippleRepeatCountThreshold=5;const a={ripple:n};class c{constructor(t,i,s={}){this.i=t,this.v=i,this.M=null,this.M=new a[this.v](this.i,s),this.M.setEffect()}get effect(){return this.v}get options(){return this.M.options}update(t,i){t!==this.v&&(this.M.destroy(),this.M=new a[t](this.i,i)),this.M.update(i),this.M.setEffect()}destroy(){this.M.destroy(),this.i=null,this.v=null}}function l(){r()}exports.Wowfy=c,exports.rippleInit=r,exports.wowfyInit=l; |
| /** | ||
| * wowfy | ||
| * An awesome and easy-to-use JavaScript animation library. | ||
| * | ||
| * @version 0.2.3 | ||
| * @author Wujue | ||
| * @email wujue0115@gmail.com | ||
| * @github https://github.com/Wujue0115 | ||
| * @license MIT | ||
| * @link https://wowfyjs.com | ||
| */ | ||
| function t(t){const i=void 0;return/^(\d+(\.\d+)?|\.\d+)(ms|s)$/.test(t)}function i(t){const i=void 0,s=void 0;return parseFloat(t.split("m")[0].split("s")[0])*(t.includes("m")?1:1e3)}function s(t,i){for(const[s,o]of Object.entries(i))t.style[s]=o}function o(t="div",i={}){const o=document.createElement(t);return s(o,i),o}function e(t){const i=void 0;return`w-${t.split(/(?=[A-Z])/).map((t=>t.toLowerCase())).join("-")}`}const h={event:"mousedown",background:"#ff98cfaa",duration:"500ms",timingFunction:"ease-in",mode:"unkeep",position:"cs",delay:"0ms",size:!1,sizeRatio:1,repeatCount:1,repeatInterval:"0ms",maxCount:10,outline:"",boxShadow:""};class n{constructor(t,s){var o;this.i=t,this.o=s,this.h=[],this.u=!1,this.p=null,this.addMouseRippleEffect=t=>{if(this.p)return;let s=Math.min(Math.max(1,this.o.repeatCount),n.rippleRepeatCountThreshold);this.addRippleEffect(t),--s;const o=setInterval((()=>{0!=s--?this.addRippleEffect(t):clearInterval(o)}),i(this.o.repeatInterval));this.p=setTimeout((()=>{this.p=null}),n.rippleTimeThreshold)};try{for(const t in h)(o=this.o)[t]||(o[t]=h[t]);this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}get options(){return this.o}setEffect(){this.m||(this.m=this.createRippleWrapper(),this.i.appendChild(this.m)),s(this.i,{position:this.i.style.position||"relative"}),this.u&&this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.i.addEventListener(this.o.event,this.addMouseRippleEffect),this.u=!0}update(t){try{this.o={...this.o,...t},this.validateOption()}catch(t){console.error(`[Wowfy Error] ${t.message}`)}}destroy(){this.m.remove(),this.i.removeEventListener(this.o.event,this.addMouseRippleEffect),this.u=null,this.i=null,this.o=null}validateOption(){const i=["duration","delay","repeatInterval"];for(const s of i)if(!t(this.o[s]))throw new Error(`"${this.o[s]}" is an invalid time format.`)}createRippleWrapper(){return o("div",{position:"absolute",inset:"0",borderRadius:"inherit",pointerEvents:"none",contain:"strict"})}createRipple(t,i,s){return o("div",{width:t+"px",aspectRatio:"1",position:"absolute",left:i-(t>>1)+"px",top:s-(t>>1)+"px",borderRadius:"50%",background:this.o.background,outline:this.o.outline,boxShadow:this.o.boxShadow})}getRippleMousePosition(t){let i=t.target,s=0,o=0;for(;i!==this.i;)for(s+=i.offsetTop,o+=i.offsetLeft;i!==this.i&&(i=i.parentElement,"static"===window.getComputedStyle(i).getPropertyValue("position")););return{x:t.offsetX+o,y:t.offsetY+s}}getRipplePosition(t){const i={"left-top":"top-left","left-bottom":"bottom-left","right-top":"top-right","right-bottom":"bottom-right",cs:"cursor",ct:"center",rd:"random",t:"top",b:"bottom",l:"left",r:"right",tl:"top-left",tr:"top-right",bl:"bottom-left",br:"bottom-right",lt:"top-left",lb:"bottom-left",rt:"top-right",rb:"bottom-right"},s={cursor:this.getRippleMousePosition(t),center:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight>>1},random:{x:Math.random()*this.i.offsetWidth,y:Math.random()*this.i.offsetHeight},top:{x:this.i.offsetWidth>>1,y:0},bottom:{x:this.i.offsetWidth>>1,y:this.i.offsetHeight},right:{x:this.i.offsetWidth,y:this.i.offsetHeight>>1},left:{x:0,y:this.i.offsetHeight>>1},"top-left":{x:0,y:0},"top-right":{x:this.i.offsetWidth,y:0},"bottom-left":{x:0,y:this.i.offsetHeight},"bottom-right":{x:this.i.offsetWidth,y:this.i.offsetHeight}};return s[this.o.position]||s[i[this.o.position]]||s.cursor}caculateRippleSize(t,i){const s=t,o=i,e=this.i.offsetWidth-s,h=this.i.offsetHeight-o,r=Math.max(s,e),a=Math.max(o,h),c=void 0,l=void 0,u=2*Math.ceil(Math.sqrt(r**2+a**2))*1.1*Math.min(1,Math.max(0,this.o.sizeRatio));return Math.min(u,n.rippleSizeThreshold)}startRippleAnimation(t){s(t,{scale:"0",opacity:"1",transitionProperty:"scale, opacity",transitionDuration:this.o.duration,transitionTimingFunction:this.o.timingFunction,willChange:"scale, opacity"})}endRippleAnimation(t){s(t,{scale:"1",opacity:"0"})}addRippleEffect(t){const s=Math.min(Math.max(1,this.o.maxCount),n.rippleCountThreshold);for(;this.h.length>=s;)this.h.shift().remove();const{x:o,y:e}=this.getRipplePosition(t),h=this.o.size||this.caculateRippleSize(o,e),r=this.createRipple(h,o,e),a=this.h.length;this.h.push(r),this.m.appendChild(r),this.startRippleAnimation(r),requestAnimationFrame((()=>{setTimeout((()=>{if(this.endRippleAnimation(r),"keep"!==this.o.mode||"mousedown"!==this.o.event&&"mouseenter"!==this.o.event)setTimeout((()=>{r.remove(),this.h.splice(a,1)}),1.1*i(this.o.duration));else{const t={mousedown:"mouseup",mouseenter:"mouseleave"}[this.o.event]||"mouseleave";this.i.addEventListener(t,(()=>{r.remove(),this.h.splice(a,1)}),{once:!0})}}),i(this.o.delay))}))}}function r(){const t=document.querySelectorAll("[w-ripple]");for(const i of t){const t={};for(const s in h){const o=e(s),h=i.getAttribute(o);t[s]=h}const s=void 0;new n(i,t).setEffect()}}n.rippleSizeThreshold=2e3,n.rippleTimeThreshold=50,n.rippleCountThreshold=20,n.rippleRepeatCountThreshold=5;const a={ripple:n};class c{constructor(t,i,s={}){this.i=t,this.v=i,this.M=null,this.M=new a[this.v](this.i,s),this.M.setEffect()}get effect(){return this.v}get options(){return this.M.options}update(t,i){t!==this.v&&(this.M.destroy(),this.M=new a[t](this.i,i)),this.M.update(i),this.M.setEffect()}destroy(){this.M.destroy(),this.i=null,this.v=null}}function l(){r()}export{c as Wowfy,r as rippleInit,l as wowfyInit}; |
AI-detected possible typosquat
Supply chain riskAI has identified this package as a potential typosquat of a more popular package. This suggests that the package may be intentionally mimicking another package's name, description, or other metadata.
0
-100%23511
-0.04%