react-confetti-burst 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Ee=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var Mt=Object.getOwnPropertyNames;var Ot=Object.prototype.hasOwnProperty;var Bt=(e,t)=>{for(var n in t)Ee(e,n,{get:t[n],enumerable:!0})},kt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Mt(t))!Ot.call(e,i)&&i!==n&&Ee(e,i,{get:()=>t[i],enumerable:!(r=St(t,i))||r.enumerable});return e};var _t=e=>kt(Ee({},"__esModule",{value:!0}),e);var cn={};Bt(cn,{ConfettiBurst:()=>yt,ConfettiButton:()=>Me,ConfettiEngine:()=>de,DEFAULT_COLORS:()=>ge,DEFAULT_CONFIG:()=>_,DEFAULT_DIRECTION:()=>ae,DEFAULT_PARTICLE:()=>se,DEFAULT_PHYSICS:()=>oe,DIRECTION_ANGLES:()=>be,EASING_FUNCTIONS:()=>it,clamp:()=>z,confetti:()=>F,createConfettiExplosion:()=>fe,default:()=>F,degToRad:()=>S,fireFromElement:()=>ve,forceCleanup:()=>wt,getActiveAnimationCount:()=>vt,getDirectionAngle:()=>ce,getElementCenter:()=>ut,isBrowser:()=>$,lerp:()=>lt,mergeConfig:()=>Ce,parseColor:()=>J,radToDeg:()=>ct,randomFromArray:()=>Z,randomInRange:()=>m,randomInt:()=>st,rgbaToString:()=>K,useConfetti:()=>j});module.exports=_t(cn);var ge=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#A8D8EA","#FF9A8B","#88D8B0"],oe={gravity:.25,drag:.035,friction:.985,rotationSpeed:1.5,wind:0,windVariation:.02,tumble:!0,decay:.99,bounce:0,floor:null,wobble:!0,wobbleSpeed:1.5,flutter:!0,flutterSpeed:2.5,flutterIntensity:.4,airResistance:.03,swayAmplitude:15,swayFrequency:2},ae={direction:"up",spread:55,velocity:[25,50],velocityDecay:.92},se={colors:ge,shapes:["square","rectangle","circle"],size:[6,14],opacity:[.85,1],lifespan:4e3,fadeOut:!0,scaleDown:!1,spin:!0,spinSpeed:[-15,15],tilt:[-30,30],depth3D:.6,aspectRatio:[.5,1.5],shimmer:!0},V={enabled:!1,length:10,fade:.5,width:.5},Fe={enabled:!1,blur:10,color:null,intensity:.5},nt={recycle:!1,numberOfPieces:200,spawnRate:50,run:!0,tweenDuration:5e3},rt={secondaryExplosions:!0,burstCount:80,burstDelay:500,spread:360,launchHeight:.6,rocketColors:["#ffd700","#ff6b35","#ff0000"],burstColors:["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],trailLength:10,riseDuration:1e3,showRocket:!0},Ae={width:null,height:null,autoResize:!0,resizeDebounce:100,frameRate:null,pixelRatio:null,useWorker:!1,useOffscreen:!1};var _={particleCount:50,particle:se,physics:oe,direction:ae,mode:"burst",easing:"easeOut",zIndex:9999,autoCleanup:!0,scalar:1,drift:0,flat:!1},be={up:90,down:270,left:180,right:0},x={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,TWO_PI:Math.PI*2,HALF_PI:Math.PI/2},it={linear:e=>e,easeIn:e=>e*e*e,easeOut:e=>1-Math.pow(1-e,3),easeInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,bounce:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,elastic:e=>{let t=2*Math.PI/3;return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*t)+1},back:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),circ:e=>Math.sqrt(1-Math.pow(e-1,2)),expo:e=>e===1?1:1-Math.pow(2,-10*e)};var le={r:0,g:0,b:0,a:0},X={MAX_PARTICLES:500,FRAME_BUDGET:16.67,MIN_OPACITY:.01,MIN_SIZE:.5,MAX_DPR:2},ot=100,De=5,at=.5,k={rainbow:ge,pride:["#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],christmas:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],halloween:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],pastel:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF"],neon:["#FF00FF","#00FFFF","#FF0080","#80FF00","#FF8000"],gold:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],silver:["#C0C0C0","#A8A8A8","#D3D3D3","#DCDCDC","#E8E8E8"],hearts:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],ocean:["#006994","#00CED1","#20B2AA","#48D1CC","#87CEEB"]},ie={celebration:["🎉","🎊","🥳","✨","🎈"],hearts:["❤️","💕","💖","💗","💓","💘"],stars:["⭐","🌟","✨","💫","⚡"],money:["💰","💵","💸","🤑","💎"],christmas:["🎄","🎅","🎁","❄️","⭐"],halloween:["🎃","👻","🦇","🕷️","💀"],birthday:["🎂","🎁","🎈","🎉","🥳"],food:["🍕","🍔","🍟","🌭","🍿"]},pn={default:{name:"default",description:"Default balanced confetti burst with realistic paper physics",options:{particleCount:60,particle:{shapes:["square","rectangle","circle"],size:[6,14],depth3D:.6,tilt:[-30,30]},physics:{gravity:.25,drag:.035,wobble:!0,wobbleSpeed:1.5}}},celebration:{name:"celebration",description:"Big celebration with lots of colorful confetti and realistic movement",options:{particleCount:120,particle:{colors:[...k.rainbow],shapes:["square","rectangle","circle","star"],size:[8,16],lifespan:5e3,depth3D:.7,tilt:[-35,35]},direction:{direction:"radial",spread:360,velocity:[30,55]},physics:{gravity:.22,drag:.04,wobble:!0,wobbleSpeed:2,windVariation:.03}}},firework:{name:"firework",description:"Firework-style explosion with secondary bursts",options:{mode:"firework",particleCount:80,particle:{colors:[...k.neon],shapes:["circle","star"],size:[4,8],trail:{enabled:!0,length:8,fade:.6},glow:{enabled:!0,blur:8,intensity:.7}},firework:{secondaryExplosions:!0,burstCount:80}}},snow:{name:"snow",description:"Gentle falling snowflakes",options:{mode:"snow",particleCount:150,particle:{colors:["#FFFFFF","#F0F8FF","#E0FFFF"],shapes:["circle"],size:[3,8],lifespan:8e3,opacity:[.6,1]},physics:{gravity:.05,wind:.3,windVariation:.2,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:150}}},rain:{name:"rain",description:"Rainfall effect",options:{mode:"rain",particleCount:200,particle:{colors:["#6CA0DC","#4A90D9","#2E7BB9"],shapes:["line"],size:[2,4],lifespan:2e3},physics:{gravity:.8,wind:.1},direction:{direction:"down",spread:10,velocity:[30,50]},continuous:{recycle:!0}}},sparkle:{name:"sparkle",description:"Sparkling stars with glow effect",options:{particleCount:40,particle:{colors:[...k.gold],shapes:["star"],size:[6,12],glow:{enabled:!0,blur:15,intensity:.8}},physics:{gravity:.1}}},confetti:{name:"confetti",description:"Classic confetti falling with realistic paper flutter",options:{mode:"continuous",particleCount:200,particle:{shapes:["square","rectangle"],size:[6,14],depth3D:.8,tilt:[-40,40],lifespan:6e3},physics:{gravity:.18,drag:.045,wind:.08,windVariation:.04,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:200},spawnArea:{x:0,y:0,width:typeof window<"u"?window.innerWidth:1920,height:0}}},emoji:{name:"emoji",description:"Emoji celebration",options:{particleCount:30,particle:{images:ie.celebration.map(e=>({src:e,isEmoji:!0,scale:1.5})),size:[20,30],lifespan:4e3},direction:{direction:"up",spread:60,velocity:[20,35]}}},hearts:{name:"hearts",description:"Floating hearts",options:{particleCount:50,particle:{colors:[...k.hearts],shapes:["heart"],size:[12,20],lifespan:5e3},physics:{gravity:-.1,wobble:!0},direction:{direction:"up",spread:90,velocity:[10,20]}}},stars:{name:"stars",description:"Shooting stars",options:{particleCount:60,particle:{colors:[...k.gold,"#FFFFFF"],shapes:["star"],size:[8,16],trail:{enabled:!0,length:12,fade:.4}},direction:{direction:"radial",spread:360,velocity:[30,60]}}},money:{name:"money",description:"Money rain",options:{particleCount:40,particle:{colors:["#85BB65","#228B22","#32CD32"],images:ie.money.map(e=>({src:e,isEmoji:!0})),size:[20,30],lifespan:4e3},physics:{gravity:.15,wobble:!0}}},pride:{name:"pride",description:"Pride rainbow celebration",options:{particleCount:100,particle:{colors:[...k.pride],shapes:["square","rectangle","heart"],size:[10,16]},direction:{direction:"radial",spread:360,velocity:[25,45]}}},christmas:{name:"christmas",description:"Christmas celebration",options:{particleCount:80,particle:{colors:[...k.christmas],shapes:["star","circle"],size:[8,14],images:ie.christmas.map(e=>({src:e,isEmoji:!0}))}}},halloween:{name:"halloween",description:"Spooky Halloween",options:{particleCount:60,particle:{colors:[...k.halloween],shapes:["circle","star"],images:ie.halloween.map(e=>({src:e,isEmoji:!0})),size:[15,25]},physics:{gravity:.2,wobble:!0}}},newYear:{name:"newYear",description:"New Year celebration with fireworks",options:{mode:"firework",particleCount:100,particle:{colors:[...k.gold,...k.silver],shapes:["star","circle"],size:[6,12],trail:{enabled:!0,length:10},glow:{enabled:!0,blur:12}},firework:{secondaryExplosions:!0,burstCount:100}}},birthday:{name:"birthday",description:"Birthday party celebration",options:{particleCount:80,particle:{colors:[...k.pastel,...k.rainbow],shapes:["star","circle","heart"],images:ie.birthday.map(e=>({src:e,isEmoji:!0})),size:[12,20],lifespan:5e3},direction:{direction:"up",spread:80,velocity:[25,45]}}}};function C(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function m(e,t){return e+C()*(t-e)}function st(e,t){return Math.floor(m(e,t+1))}function Z(e){if(e.length===0)throw new Error("Cannot pick from empty array");return e[Math.floor(C()*e.length)]}function z(e,t,n){return Math.min(Math.max(e,t),n)}function lt(e,t,n){return e+(t-e)*z(n,0,1)}function S(e){return e*x.DEG_TO_RAD}function ct(e){return e*x.RAD_TO_DEG}function J(e){if(typeof e=="object"&&"r"in e)return{r:z(Math.round(e.r),0,255),g:z(Math.round(e.g),0,255),b:z(Math.round(e.b),0,255),a:z(e.a,0,1)};if(typeof e=="object"&&"type"in e)return J(e.colors[0]);let t=e.trim().toLowerCase();return t.startsWith("#")?zt(t):t.startsWith("rgb")?Lt(t):Nt(t)}function zt(e){let t=e.slice(1),n,r,i,o=1;switch(t.length){case 3:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),i=parseInt(t[2]+t[2],16);break;case 4:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),i=parseInt(t[2]+t[2],16),o=parseInt(t[3]+t[3],16)/255;break;case 6:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),i=parseInt(t.slice(4,6),16);break;case 8:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),i=parseInt(t.slice(4,6),16),o=parseInt(t.slice(6,8),16)/255;break;default:return le}return isNaN(n)||isNaN(r)||isNaN(i)||isNaN(o)?le:{r:n,g:r,b:i,a:o}}function Lt(e){let t=e.match(/rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/);return t?{r:z(parseInt(t[1],10),0,255),g:z(parseInt(t[2],10),0,255),b:z(parseInt(t[3],10),0,255),a:t[4]!==void 0?z(parseFloat(t[4]),0,1):1}:le}function Nt(e){let t={red:{r:255,g:0,b:0,a:1},green:{r:0,g:128,b:0,a:1},blue:{r:0,g:0,b:255,a:1},white:{r:255,g:255,b:255,a:1},black:{r:0,g:0,b:0,a:1},yellow:{r:255,g:255,b:0,a:1},cyan:{r:0,g:255,b:255,a:1},magenta:{r:255,g:0,b:255,a:1},orange:{r:255,g:165,b:0,a:1},purple:{r:128,g:0,b:128,a:1},pink:{r:255,g:192,b:203,a:1}};if(t[e])return t[e];if(typeof document<"u")try{let n=document.createElement("canvas");n.width=1,n.height=1;let r=n.getContext("2d");if(r){r.fillStyle=e,r.fillRect(0,0,1,1);let i=r.getImageData(0,0,1,1).data;return{r:i[0],g:i[1],b:i[2],a:i[3]/255}}}catch{}return le}function K(e){return`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function ce(e,t){if(e==="custom"&&t!==void 0)return S(t);if(e==="radial")return C()*x.TWO_PI;let n=be[e];return S(n??90)}function ut(e){let t=e.getBoundingClientRect();return{x:t.left+t.width/2,y:t.top+t.height/2}}function Ce(e){if(!e)return _;let t={...se,...e.particle},n={...oe,...e.physics},r={...ae,...e.direction};return{particleCount:e.particleCount??_.particleCount,particle:t,physics:n,direction:r,mode:e.mode??_.mode,spawnArea:e.spawnArea?{type:"rect",x:0,y:0,...e.spawnArea}:void 0,continuous:e.continuous,firework:e.firework,canvas:e.canvas,easing:e.easing??_.easing,zIndex:e.zIndex??_.zIndex,autoCleanup:e.autoCleanup??_.autoCleanup,scalar:e.scalar??_.scalar,drift:e.drift??_.drift,flat:e.flat??_.flat,onStart:e.onStart,onComplete:e.onComplete,onFrame:e.onFrame,onParticleCreate:e.onParticleCreate,onParticleDeath:e.onParticleDeath}}function $(){return typeof window<"u"&&typeof document<"u"}function dt(e=2){return $()?Math.min(window.devicePixelRatio||1,e):1}function ft(){let e,t;return{promise:new Promise((r,i)=>{e=r,t=i}),resolve:e,reject:t}}var Ht=0;function Q(e,t,n,r,i,o,a,s,c,l,u){let f=m(a[0],a[1]),h=m(s[0],s[1]),p=Z(i),D=typeof p=="string"?J(p):"type"in p?J(p.colors[0]):p,R=1+(C()-.5)*.3,E=Math.cos(n)*r*R,g=-Math.sin(n)*r*R,v;u?.images&&u.images.length>0&&(v=Z(u.images));let d=u?.tiltRange??[-30,30],I=u?.spinSpeedRange??[-15,15],A=u?.aspectRatioRange??[.5,1.5],T=m(A[0],A[1]);return{id:Ht++,x:e,y:t,vx:E,vy:g,size:f,originalSize:f,rotation:C()*x.TWO_PI,rotationSpeed:(C()-.5)*.3*l,color:D,shape:v?"custom":Z(o),opacity:h,originalOpacity:h,life:c,maxLife:c,active:!0,image:v,imageElement:null,trail:[],wobblePhase:C()*x.TWO_PI,wobbleSpeed:m(.8,2.5),tilt:S(m(d[0],d[1])),tiltSpeed:m(I[0],I[1])*.015,depth:u?.depth3D??.6,hasExploded:!1,data:{},flutterPhase:C()*x.TWO_PI,flutterSpeed:m(1.5,3.5),swayPhase:C()*x.TWO_PI,aspectRatio:T,angularVelocity:(C()-.5)*.4,scaleX:1,scaleY:1,shimmerPhase:C()*x.TWO_PI,currentDrag:m(.02,.05)}}function pt(e,t,n,r,i,o,a){if(!e.active)return;let s=t*.05988;if(o?.enabled??V.enabled){let w=e.trail;w.unshift({x:e.x,y:e.y,opacity:e.opacity,size:e.size});let B=o?.length??V.length;w.length>B&&w.pop()}let c=e.vx,l=e.vy,u=e.tilt,f=c*c+l*l,h=u-u*u*u*.166667,p=1+h*.15;if(l+=n.gravity*p*s,(n.flutter??!0)&&f>1){let w=n.flutterSpeed??2.5,B=n.flutterIntensity??.4;e.flutterPhase+=w*.05*s;let H=e.flutterPhase,me=(H-H*H*H*.166667)*B*s,At=1-u*u*.5;if(c+=me*At,(h<0?-h:h)>.7){let Dt=me<0?-me:me;l-=Dt*.3}}let R=n.swayAmplitude??15,E=n.swayFrequency??2;e.swayPhase+=E*.03*s;let g=e.swayPhase,v=(g-g*g*g*.166667)*R*.01*s;c+=v;let d=n.windVariation,I=n.wind+d*(Math.random()-.5);c+=I*s;let A=n.airResistance??.03,T=1-u*u*.5,N=T<0?-T:T,Y=n.drag+N*A,L=f>0?Math.sqrt(f):0,G=Math.max(.9,1-Y*L*.01)*n.friction*n.decay;if(c*=G,l*=G,e.x+=c*s,e.y+=l*s,e.vx=c,e.vy=l,n.tumble&&(e.angularVelocity=(e.angularVelocity+c*.001*s)*.98,e.rotation+=(e.rotationSpeed+e.angularVelocity)*s),e.tiltSpeed=(e.tiltSpeed+(Math.random()-.5)*.002*s)*.995,e.tilt=(e.tilt+e.tiltSpeed*s)%x.TWO_PI,n.wobble){let w=e.wobblePhase+n.wobbleSpeed*.1*s;e.wobblePhase=w;let B=1-w*w*.5,H=w-w*w*w*.166667;e.scaleX=.3+.7*(B<0?-B:B),e.scaleY=.3+.7*(H<0?-H:H)}if(e.shimmerPhase+=.1*s,n.floor!==null&&n.bounce>0&&a){let w=n.floor??a,B=e.size*.5;e.y+B>=w&&(e.y=w-B,e.vy=-e.vy*n.bounce,e.vx*=.85,e.rotationSpeed+=(Math.random()-.5)*.1)}e.life-=t;let tt=1-e.life/e.maxLife;if(r){let w=tt,B=w*w*(3-2*w);e.opacity=e.originalOpacity*(1-B*.9)}i&&(e.size=e.originalSize*(1-tt*.5)),(e.life<=0||e.opacity<X.MIN_OPACITY||e.size<X.MIN_SIZE)&&(e.active=!1)}function ht(e,t,n){if(!t.active)return;let{x:r,y:i,size:o,rotation:a,color:s,shape:c,opacity:l,tilt:u,aspectRatio:f,scaleX:h,scaleY:p,shimmerPhase:D}=t;if(l<.02)return;let R=n?.trailConfig,E=n?.glowConfig;(R?.enabled??V.enabled)&&t.trail.length>0&&Ut(e,t,R??V),e.save();let g=E?.enabled??Fe.enabled;g&&(e.shadowBlur=E?.blur??Fe.blur,e.shadowColor=E?.color??K(s)),e.translate(r,i),e.rotate(a+u),t.depth>0&&e.scale(h,p);let d=1+(D-Math.floor(D))*.3-.15,I=.7+.3*(h*p<0?-(h*p):h*p),A=l*s.a*I*(g?E?.intensity??1:1);if(A<.02){e.restore();return}e.globalAlpha=A>1?1:A;let T=s.r*d,N=s.g*d,Y=s.b*d;if(e.fillStyle=`rgb(${T>255?255:T},${N>255?255:N},${Y>255?255:Y})`,t.image&&t.image.isEmoji)Zt(e,t.image.src,o*(t.image.scale??1));else if(t.imageElement)Jt(e,t.imageElement,o*(t.image?.scale??1));else if(c==="custom"&&n?.customDraw){let L={ctx:e,particle:t,progress:1-t.life/t.maxLife,elapsed:n.elapsed??0};n.customDraw(L)}else{let L=f??1;switch(c){case"square":case"rectangle":let re=o*(c==="rectangle"?Math.max(1.5,L*1.5):Math.sqrt(L)),G=o/(c==="rectangle"?Math.max(1.5,L):Math.sqrt(L));e.fillRect(-re*.5,-G*.5,re,G);break;case"circle":e.beginPath(),e.arc(0,0,o*.5,0,x.TWO_PI),e.fill();break;case"triangle":qt(e,o);break;case"star":Wt(e,o);break;case"line":Gt(e,o);break;case"heart":Vt(e,o);break;case"diamond":$t(e,o);break;case"hexagon":jt(e,o);break;case"spiral":Yt(e,o,s);break;case"ribbon":Xt(e,o);break;default:e.fillRect(-o*.5,-o*.5,o,o)}}e.restore()}function Ut(e,t,n){let r=n.fade??V.fade,i=n.width??V.width;e.save(),e.lineCap="round",e.lineJoin="round";for(let o=0;o<t.trail.length-1;o++){let a=t.trail[o],s=t.trail[o+1],c=a.opacity*Math.pow(r,o),l=a.size*i*Math.pow(r,o);c>.01&&l>.1&&(e.beginPath(),e.strokeStyle=K({...t.color,a:c}),e.lineWidth=l,e.moveTo(a.x,a.y),e.lineTo(s.x,s.y),e.stroke())}e.restore()}function qt(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n,n),e.lineTo(-n,n),e.closePath(),e.fill()}function Wt(e,t){let n=t/2,r=n*at,i=Math.PI/De;e.beginPath();for(let o=0;o<De*2;o++){let a=o%2===0?n:r,s=o*i-x.HALF_PI,c=Math.cos(s)*a,l=Math.sin(s)*a;o===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath(),e.fill()}function Gt(e,t){let n=t*2,r=t/4;e.fillRect(-n/2,-r/2,n,r)}function Vt(e,t){let n=t/30;e.save(),e.scale(n,n),e.beginPath(),e.moveTo(0,-8),e.bezierCurveTo(-10,-18,-25,-8,-15,5),e.lineTo(0,18),e.lineTo(15,5),e.bezierCurveTo(25,-8,10,-18,0,-8),e.closePath(),e.fill(),e.restore()}function $t(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n*.6,0),e.lineTo(0,n),e.lineTo(-n*.6,0),e.closePath(),e.fill()}function jt(e,t){let n=t/2;e.beginPath();for(let r=0;r<6;r++){let i=Math.PI/3*r-Math.PI/6,o=Math.cos(i)*n,a=Math.sin(i)*n;r===0?e.moveTo(o,a):e.lineTo(o,a)}e.closePath(),e.fill()}function Yt(e,t,n){e.strokeStyle=K(n),e.lineWidth=t/8,e.lineCap="round",e.beginPath();for(let r=0;r<22;r++){let i=.35*r,o=(.2+1.5*i)*(t/20),a=o*Math.cos(i),s=o*Math.sin(i);r===0?e.moveTo(a,s):e.lineTo(a,s)}e.stroke()}function Xt(e,t){let n=t,r=t/3,i=t/4;e.beginPath(),e.moveTo(-n/2,0),e.quadraticCurveTo(-n/4,-i,0,0),e.quadraticCurveTo(n/4,i,n/2,0),e.lineTo(n/2,r),e.quadraticCurveTo(n/4,r+i,0,r),e.quadraticCurveTo(-n/4,r-i,-n/2,r),e.closePath(),e.fill()}function Zt(e,t,n){e.font=`${n}px serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(t,0,0)}function Jt(e,t,n){let r=n/2;e.drawImage(t,-r,-r,n,n)}function mt(e){return e.filter(t=>t.active).length}var b=null,U=null,ee=0,ue=null,gt=[],Kt=500;function bt(e){gt.length<Kt&&(e.active=!1,e.trail.length=0,gt.push(e))}var Se=360,Qt=new Float32Array(Se),en=new Float32Array(Se);for(let e=0;e<Se;e++){let t=e*Math.PI/180;Qt[e]=Math.sin(t),en[e]=Math.cos(t)}function tn(e,t){if(!$())throw new Error("ConfettiEngine requires a browser environment");let n={...Ae,...t},r=n.pixelRatio??dt(X.MAX_DPR);if(!b){if(b=document.createElement("canvas"),b.style.cssText=`
1
+ "use strict";var Fe=Object.defineProperty;var _t=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Lt=Object.prototype.hasOwnProperty;var Nt=(e,t)=>{for(var n in t)Fe(e,n,{get:t[n],enumerable:!0})},kt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bt(t))!Lt.call(e,o)&&o!==n&&Fe(e,o,{get:()=>t[o],enumerable:!(r=_t(t,o))||r.enumerable});return e};var Ht=e=>kt(Fe({},"__esModule",{value:!0}),e);var Fn={};Nt(Fn,{COLOR_PALETTES:()=>et,ConfettiBurst:()=>It,ConfettiButton:()=>Oe,ConfettiEngine:()=>ae,DEFAULT_COLORS:()=>q,DEFAULT_CONFIG:()=>_,DEFAULT_DIRECTION:()=>te,DEFAULT_PARTICLE:()=>ne,DEFAULT_PHYSICS:()=>ee,DIRECTION_ANGLES:()=>fe,EASING_FUNCTIONS:()=>at,EMOJI_SETS:()=>G,PRESETS:()=>Te,clamp:()=>B,confetti:()=>x,createConfettiExplosion:()=>se,default:()=>x,degToRad:()=>O,fireFromElement:()=>ge,forceCleanup:()=>Pt,getActiveAnimationCount:()=>wt,getDirectionAngle:()=>oe,getElementCenter:()=>ut,getMaxPoolSize:()=>vt,getPreset:()=>wn,getPresetNames:()=>Pn,isBrowser:()=>U,lerp:()=>lt,mergeConfig:()=>me,parseColor:()=>$,radToDeg:()=>ct,randomFromArray:()=>V,randomInRange:()=>h,randomInt:()=>st,rgbaToString:()=>j,setMaxPoolSize:()=>yt,shapeFromImage:()=>Dt,shapeFromPath:()=>Ot,shapeFromText:()=>tt,shapesFromEmoji:()=>Mt,useConfetti:()=>W});module.exports=Ht(Fn);var q=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#A8D8EA","#FF9A8B","#88D8B0"],ee={gravity:1,drag:.035,friction:.99,rotationSpeed:1,wind:0,windVariation:.02,tumble:!0,decay:.99,bounce:0,floor:null,wobble:!0,wobbleSpeed:1.5,flutter:!0,flutterSpeed:2.5,flutterIntensity:.4,airResistance:.03,swayAmplitude:15,swayFrequency:2},te={direction:"up",spread:55,velocity:[25,50],velocityDecay:.92},ne={colors:q,shapes:["square","rectangle","circle"],size:[6,14],opacity:[.85,1],lifespan:4e3,fadeOut:!0,scaleDown:!1,spin:!0,spinSpeed:[-15,15],tilt:[-30,30],depth3D:.6,aspectRatio:[.5,1.5],shimmer:!0},N={enabled:!1,length:10,fade:.5,width:.5},xe={enabled:!1,blur:10,color:null,intensity:.5},nt={recycle:!1,numberOfPieces:200,spawnRate:50,run:!0,tweenDuration:5e3},rt={secondaryExplosions:!0,burstCount:80,burstDelay:500,spread:360,launchHeight:.6,rocketColors:["#ffd700","#ff6b35","#ff0000"],burstColors:["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],trailLength:10,riseDuration:1e3,showRocket:!0},Ee={width:null,height:null,autoResize:!0,resizeDebounce:100,frameRate:null,pixelRatio:null,useWorker:!1,useOffscreen:!1};var _={particleCount:50,particle:ne,physics:ee,direction:te,mode:"burst",easing:"easeOut",zIndex:9999,autoCleanup:!0,scalar:1,drift:0,flat:!1},fe={up:90,down:270,left:180,right:0},T={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,TWO_PI:Math.PI*2,HALF_PI:Math.PI/2},g={SIN_TAYLOR_COEFF:.166667,COS_TAYLOR_COEFF:.5,FLUTTER_PHASE_SCALE:.05,SWAY_PHASE_SCALE:.03,SWAY_FORCE_SCALE:.01,GRAVITY_TILT_MODIFIER:.15,FLUTTER_AIR_CATCH_THRESHOLD:.7,FLUTTER_AIR_CATCH_MULTIPLIER:.3,ORIENTATION_OPACITY_BASE:.7,ORIENTATION_OPACITY_SCALE:.3,SHIMMER_RANGE:.3,SHIMMER_OFFSET:.15,MIN_OPACITY_THRESHOLD:.02,MIN_SIZE_THRESHOLD:.1,VELOCITY_VARIATION_RANGE:.3,ANGULAR_DAMPING:.98,TILT_DAMPING:.995};var re={r:0,g:0,b:0,a:0},Re={MAX_PARTICLES:500,FRAME_BUDGET:16.67,MIN_OPACITY:.01,MIN_SIZE:.5,MAX_DPR:2},ot=100,Ae=5,it=.5;var at={linear:e=>e,easeIn:e=>e*e*e,easeOut:e=>1-Math.pow(1-e,3),easeInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,bounce:e=>e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375,elastic:e=>{let t=2*Math.PI/3;return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*t)+1},back:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),circ:e=>Math.sqrt(1-Math.pow(e-1,2)),expo:e=>e===1?1:1-Math.pow(2,-10*e)};function C(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function h(e,t){return e+C()*(t-e)}function st(e,t){return Math.floor(h(e,t+1))}function V(e){if(e.length===0)throw new Error("Cannot pick from empty array");return e[Math.floor(C()*e.length)]}function B(e,t,n){return Math.min(Math.max(e,t),n)}function lt(e,t,n){return e+(t-e)*B(n,0,1)}function O(e){return e*T.DEG_TO_RAD}function ct(e){return e*T.RAD_TO_DEG}function $(e){if(typeof e=="object"&&"r"in e)return{r:B(Math.round(e.r),0,255),g:B(Math.round(e.g),0,255),b:B(Math.round(e.b),0,255),a:B(e.a,0,1)};if(typeof e=="object"&&"type"in e)return $(e.colors[0]);let t=e.trim().toLowerCase();return t.startsWith("#")?zt(t):t.startsWith("rgb")?Ut(t):Wt(t)}function zt(e){let t=e.slice(1),n,r,o,i=1;switch(t.length){case 3:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),o=parseInt(t[2]+t[2],16);break;case 4:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),o=parseInt(t[2]+t[2],16),i=parseInt(t[3]+t[3],16)/255;break;case 6:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16);break;case 8:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16),i=parseInt(t.slice(6,8),16)/255;break;default:return re}return isNaN(n)||isNaN(r)||isNaN(o)||isNaN(i)?re:{r:n,g:r,b:o,a:i}}function Ut(e){let t=e.match(/rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/);return t?{r:B(parseInt(t[1],10),0,255),g:B(parseInt(t[2],10),0,255),b:B(parseInt(t[3],10),0,255),a:t[4]!==void 0?B(parseFloat(t[4]),0,1):1}:re}function Wt(e){let t={red:{r:255,g:0,b:0,a:1},green:{r:0,g:128,b:0,a:1},blue:{r:0,g:0,b:255,a:1},white:{r:255,g:255,b:255,a:1},black:{r:0,g:0,b:0,a:1},yellow:{r:255,g:255,b:0,a:1},cyan:{r:0,g:255,b:255,a:1},magenta:{r:255,g:0,b:255,a:1},orange:{r:255,g:165,b:0,a:1},purple:{r:128,g:0,b:128,a:1},pink:{r:255,g:192,b:203,a:1}};if(t[e])return t[e];if(typeof document<"u")try{let n=document.createElement("canvas");n.width=1,n.height=1;let r=n.getContext("2d");if(r){r.fillStyle=e,r.fillRect(0,0,1,1);let o=r.getImageData(0,0,1,1).data;return{r:o[0],g:o[1],b:o[2],a:o[3]/255}}}catch{}return re}function j(e){return`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function oe(e,t){if(e==="custom"&&t!==void 0)return O(t);if(e==="radial")return C()*T.TWO_PI;let n=fe[e];return O(n??90)}function ut(e){let t=e.getBoundingClientRect();return{x:t.left+t.width/2,y:t.top+t.height/2}}function me(e){if(!e)return _;let t={...ne,...e.particle},n={...ee,...e.physics},r={...te,...e.direction};return{particleCount:e.particleCount??_.particleCount,particle:t,physics:n,direction:r,mode:e.mode??_.mode,spawnArea:e.spawnArea?{type:"rect",x:0,y:0,...e.spawnArea}:void 0,continuous:e.continuous,firework:e.firework,canvas:e.canvas,easing:e.easing??_.easing,zIndex:e.zIndex??_.zIndex,autoCleanup:e.autoCleanup??_.autoCleanup,scalar:e.scalar??_.scalar,drift:e.drift??_.drift,flat:e.flat??_.flat,onStart:e.onStart,onComplete:e.onComplete,onFrame:e.onFrame,onParticleCreate:e.onParticleCreate,onParticleDeath:e.onParticleDeath}}function U(){return typeof window<"u"&&typeof document<"u"}function dt(e=2){return U()?Math.min(window.devicePixelRatio||1,e):1}function ft(){let e,t;return{promise:new Promise((r,o)=>{e=r,t=o}),resolve:e,reject:t}}var Gt=0,mt=!1;function X(e,t,n,r,o,i,a,s,c,l,u){if(o.length===0)throw new Error("Colors array cannot be empty");if(i.length===0)throw new Error("Shapes array cannot be empty");if(a[0]>a[1])throw new Error("Invalid size range");if(s[0]>s[1])throw new Error("Invalid opacity range");let f=h(a[0],a[1]),m=h(s[0],s[1]),p=V(o),I=typeof p=="string"?$(p):"type"in p?$(p.colors[0]):p,E=1+(C()-.5)*g.VELOCITY_VARIATION_RANGE,F=Math.cos(n)*r*E,y=-Math.sin(n)*r*E,w;u?.images&&u.images.length>0&&(w=V(u.images));let d=u?.tiltRange??[-30,30],R=u?.spinSpeedRange??[-15,15],A=u?.aspectRatioRange??[.5,1.5],S=h(A[0],A[1]);return{id:Gt++,x:e,y:t,vx:F,vy:y,size:f,originalSize:f,rotation:C()*T.TWO_PI,rotationSpeed:(C()-.5)*.3*l,color:I,shape:w?"custom":V(i),opacity:m,originalOpacity:m,life:c,maxLife:c,active:!0,image:w,imageElement:null,trail:[],wobblePhase:C()*T.TWO_PI,wobbleSpeed:h(.8,2.5),tilt:O(h(d[0],d[1])),tiltSpeed:h(R[0],R[1])*.015,depth:u?.depth3D??.6,hasExploded:!1,data:{},flutterPhase:C()*T.TWO_PI,flutterSpeed:h(1.5,3.5),swayPhase:C()*T.TWO_PI,aspectRatio:S,angularVelocity:(C()-.5)*.4,scaleX:1,scaleY:1,shimmerPhase:C()*T.TWO_PI,currentDrag:h(.02,.05)}}function pt(e,t,n,r,o,i,a){if(!e.active)return;let s=t*.05988;(i?.enabled??N.enabled)&&Yt(e,i??N),qt(e,s,n),Jt(e,s,n),Kt(e,t,n,r,o),n.floor!==null&&n.bounce>0&&a&&Qt(e,n,a),(e.life<=0||e.opacity<g.MIN_OPACITY_THRESHOLD||e.size<g.MIN_SIZE_THRESHOLD)&&(e.active=!1)}function Yt(e,t){let n=e.trail;n.unshift({x:e.x,y:e.y,opacity:e.opacity,size:e.size});let r=t.length??N.length;n.length>r&&n.pop()}function qt(e,t,n){let r=e.vx,o=e.vy,i=e.tilt,a=r*r+o*o;Vt(e,o,i,n,t),o=e.vy,$t(e,r,o,i,a,n,t),r=e.vx,o=e.vy,jt(e,r,n,t),r=e.vx,Xt(e,n,t),r=e.vx,Zt(e,r,o,i,a,n),r=e.vx,o=e.vy,e.x+=r*t,e.y+=o*t}function Vt(e,t,n,r,o){let a=1+(n-n*n*n*g.SIN_TAYLOR_COEFF)*g.GRAVITY_TILT_MODIFIER;e.vy=t+r.gravity*a*o}function $t(e,t,n,r,o,i,a){if(!(i.flutter??!0)||o<=1)return;let c=i.flutterSpeed??2.5,l=i.flutterIntensity??.4;e.flutterPhase+=c*g.FLUTTER_PHASE_SCALE*a;let u=e.flutterPhase,m=(u-u*u*u*g.SIN_TAYLOR_COEFF)*l*a,p=1-r*r*g.COS_TAYLOR_COEFF;e.vx=t+m*p;let I=r-r*r*r*g.SIN_TAYLOR_COEFF;if((I<0?-I:I)>g.FLUTTER_AIR_CATCH_THRESHOLD){let F=m<0?-m:m;e.vy=n-F*g.FLUTTER_AIR_CATCH_MULTIPLIER}}function jt(e,t,n,r){let o=n.swayAmplitude??15,i=n.swayFrequency??2;e.swayPhase+=i*g.SWAY_PHASE_SCALE*r;let a=e.swayPhase,s=(a-a*a*a*g.SIN_TAYLOR_COEFF)*o*g.SWAY_FORCE_SCALE*r;e.vx=t+s}function Xt(e,t,n){let r=t.windVariation,o=t.wind+r*(Math.random()-.5);e.vx+=o*n}function Zt(e,t,n,r,o,i){let a=i.airResistance??.03,s=1-r*r*g.COS_TAYLOR_COEFF,c=s<0?-s:s,l=i.drag+c*a,u=o>0?Math.sqrt(o):0,m=Math.max(.9,1-l*u*.01)*i.friction*i.decay;e.vx=t*m,e.vy=n*m}function Jt(e,t,n){if(n.tumble&&(e.angularVelocity=(e.angularVelocity+e.vx*.001*t)*g.ANGULAR_DAMPING,e.rotation+=(e.rotationSpeed+e.angularVelocity)*t),e.tiltSpeed=(e.tiltSpeed+(Math.random()-.5)*.002*t)*g.TILT_DAMPING,e.tilt=(e.tilt+e.tiltSpeed*t)%T.TWO_PI,n.wobble){let r=e.wobblePhase+n.wobbleSpeed*.1*t;e.wobblePhase=r;let o=1-r*r*g.COS_TAYLOR_COEFF,i=r-r*r*r*g.SIN_TAYLOR_COEFF;e.scaleX=.3+.7*(o<0?-o:o),e.scaleY=.3+.7*(i<0?-i:i)}e.shimmerPhase+=.1*t}function Kt(e,t,n,r,o){t>0&&(e.life-=t);let i=1-e.life/e.maxLife;if(r){let a=i,s=a*a*(3-2*a);e.opacity=e.originalOpacity*(1-s*.9)}o&&(e.size=e.originalSize*(1-i*.5))}function Qt(e,t,n){let r=t.floor??n,o=e.size*.5;e.y+o>=r&&(e.y=r-o,e.vy=-e.vy*t.bounce,e.vx*=.85,e.rotationSpeed+=(Math.random()-.5)*.1)}function ht(e,t,n){if(!t.active)return;let{x:r,y:o,size:i,rotation:a,color:s,shape:c,opacity:l,tilt:u,aspectRatio:f,scaleX:m,scaleY:p,shimmerPhase:I}=t;if(l<g.MIN_OPACITY_THRESHOLD)return;let E=n?.trailConfig,F=n?.glowConfig;(E?.enabled??N.enabled)&&t.trail.length>0&&en(e,t,E??N),e.save();let y=F?.enabled??xe.enabled;y&&(e.shadowBlur=F?.blur??xe.blur,e.shadowColor=F?.color??j(s)),e.translate(r,o),e.rotate(a+u),t.depth>0&&e.scale(m,p);let d=1+(I-Math.floor(I))*g.SHIMMER_RANGE-g.SHIMMER_OFFSET,R=g.ORIENTATION_OPACITY_BASE+g.ORIENTATION_OPACITY_SCALE*(m*p<0?-(m*p):m*p),A=l*s.a*R*(y?F?.intensity??1:1);if(A<g.MIN_OPACITY_THRESHOLD){e.restore();return}e.globalAlpha=A>1?1:A;let S=s.r*d,Y=s.g*d,ue=s.b*d;if(e.fillStyle=`rgb(${S>255?255:S},${Y>255?255:Y},${ue>255?255:ue})`,t.image&&t.image.isEmoji)un(e,t.image.src,i*(t.image.scale??1));else if(t.imageElement)dn(e,t.imageElement,i*(t.image?.scale??1));else if(c==="custom"&&n?.customDraw){let L={ctx:e,particle:t,progress:1-t.life/t.maxLife,elapsed:n.elapsed??0};try{n.customDraw(L)}catch{mt||(mt=!0)}}else{let L=f??1;switch(c){case"square":case"rectangle":let Q=i*(c==="rectangle"?Math.max(1.5,L*1.5):Math.sqrt(L)),de=i/(c==="rectangle"?Math.max(1.5,L):Math.sqrt(L));e.fillRect(-Q*.5,-de*.5,Q,de);break;case"circle":e.beginPath(),e.arc(0,0,i*.5,0,T.TWO_PI),e.fill();break;case"triangle":tn(e,i);break;case"star":nn(e,i);break;case"line":rn(e,i);break;case"heart":on(e,i);break;case"diamond":an(e,i);break;case"hexagon":sn(e,i);break;case"spiral":ln(e,i,s);break;case"ribbon":cn(e,i);break;default:e.fillRect(-i*.5,-i*.5,i,i)}}e.restore()}function en(e,t,n){let r=n.fade??N.fade,o=n.width??N.width;e.save(),e.lineCap="round",e.lineJoin="round";for(let i=0;i<t.trail.length-1;i++){let a=t.trail[i],s=t.trail[i+1],c=a.opacity*Math.pow(r,i),l=a.size*o*Math.pow(r,i);c>.01&&l>.1&&(e.beginPath(),e.strokeStyle=j({...t.color,a:c}),e.lineWidth=l,e.moveTo(a.x,a.y),e.lineTo(s.x,s.y),e.stroke())}e.restore()}function tn(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n,n),e.lineTo(-n,n),e.closePath(),e.fill()}function nn(e,t){let n=t/2,r=n*it,o=Math.PI/Ae;e.beginPath();for(let i=0;i<Ae*2;i++){let a=i%2===0?n:r,s=i*o-T.HALF_PI,c=Math.cos(s)*a,l=Math.sin(s)*a;i===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath(),e.fill()}function rn(e,t){let n=t*2,r=t/4;e.fillRect(-n/2,-r/2,n,r)}function on(e,t){let n=t/30;e.save(),e.scale(n,n),e.beginPath(),e.moveTo(0,-8),e.bezierCurveTo(-10,-18,-25,-8,-15,5),e.lineTo(0,18),e.lineTo(15,5),e.bezierCurveTo(25,-8,10,-18,0,-8),e.closePath(),e.fill(),e.restore()}function an(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n*.6,0),e.lineTo(0,n),e.lineTo(-n*.6,0),e.closePath(),e.fill()}function sn(e,t){let n=t/2;e.beginPath();for(let r=0;r<6;r++){let o=Math.PI/3*r-Math.PI/6,i=Math.cos(o)*n,a=Math.sin(o)*n;r===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath(),e.fill()}function ln(e,t,n){e.strokeStyle=j(n),e.lineWidth=t/8,e.lineCap="round",e.beginPath();for(let r=0;r<22;r++){let o=.35*r,i=(.2+1.5*o)*(t/20),a=i*Math.cos(o),s=i*Math.sin(o);r===0?e.moveTo(a,s):e.lineTo(a,s)}e.stroke()}function cn(e,t){let n=t,r=t/3,o=t/4;e.beginPath(),e.moveTo(-n/2,0),e.quadraticCurveTo(-n/4,-o,0,0),e.quadraticCurveTo(n/4,o,n/2,0),e.lineTo(n/2,r),e.quadraticCurveTo(n/4,r+o,0,r),e.quadraticCurveTo(-n/4,r-o,-n/2,r),e.closePath(),e.fill()}function un(e,t,n){e.font=`${n}px serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(t,0,0)}function dn(e,t,n){let r=n/2;e.drawImage(t,-r,-r,n,n)}function gt(e){return e.filter(t=>t.active).length}var b=null,k=null,Z=0;var ie=null,pe=[],he=500;function yt(e){for(he=Math.max(1,Math.floor(e));pe.length>he;)pe.pop()}function vt(){return he}function bt(e){pe.length<he&&(e.active=!1,e.trail.length=0,pe.push(e))}var Se=360,fn=new Float32Array(Se),mn=new Float32Array(Se);for(let e=0;e<Se;e++){let t=e*Math.PI/180;fn[e]=Math.sin(t),mn[e]=Math.cos(t)}function pn(e,t){if(!U())throw new Error("ConfettiEngine requires a browser environment");let n={...Ee,...t},r=n.pixelRatio??dt(Re.MAX_DPR);if(!b){if(b=document.createElement("canvas"),b.style.cssText=`
2
2
  position: fixed;
3
3
  top: 0;
4
4
  left: 0;
@@ -6,7 +6,7 @@
6
6
  height: 100%;
7
7
  pointer-events: none;
8
8
  z-index: ${e};
9
- `,U=b.getContext("2d",{alpha:!0,desynchronized:!0}),!U)throw new Error("Failed to get canvas 2D context");document.body.appendChild(b),n.autoResize&&(ue=()=>{if(b&&U){let a=n.width??window.innerWidth,s=n.height??window.innerHeight;b.width=a*r,b.height=s*r,b.style.width=`${a}px`,b.style.height=`${s}px`,U.scale(r,r)}},window.addEventListener("resize",ue))}b.style.zIndex=String(e);let i=n.width??window.innerWidth,o=n.height??window.innerHeight;return(b.width!==i*r||b.height!==o*r)&&(b.width=i*r,b.height=o*r,b.style.width=`${i}px`,b.style.height=`${o}px`,U.scale(r,r)),{canvas:b,ctx:U,width:i,height:o,dpr:r}}function nn(){b&&ee===0&&setTimeout(()=>{ee===0&&b&&(ue&&(window.removeEventListener("resize",ue),ue=null),b.remove(),b=null,U=null)},ot)}function Ct(e,t,n){let{type:r,x:i,y:o,w:a,h:s}=e;switch(r){case"point":return{x:i,y:o};case"rect":return{x:m(i,i+(a??0)),y:m(o,o+(s??0))};case"line":let c=C();return{x:i+c*(a??0),y:o+c*(s??0)};case"circle":let l=C()*x.TWO_PI,u=Math.sqrt(C())*(a??50);return{x:i+Math.cos(l)*u,y:o+Math.sin(l)*u};default:return{x:i,y:o}}}var de=class{constructor(t,n){this.particles=[];this.canvasContext=null;this.animationFrameId=null;this.lastFrameTime=0;this.lastSpawnTime=0;this.isRunning=!1;this.isPaused=!1;this.deferred=ft();this.frameInterval=0;this.lastRenderTime=0;this.animate=()=>{if(!this.isRunning||!this.canvasContext)return;if((this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")&&!this.continuousConfig.run){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}if(this.isPaused){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}let t=performance.now(),n=t-this.lastFrameTime;if(this.lastFrameTime=t,this.frameInterval>0){if(t-this.lastRenderTime<this.frameInterval){this.animationFrameId=requestAnimationFrame(this.animate);return}this.lastRenderTime=t}let{ctx:r,width:i,height:o,dpr:a}=this.canvasContext,{physics:s,particle:c}=this.config;r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,i*a,o*a),r.scale(a,a);let l=this.particles,u=l.length,f=0,h=!0,p=100,D=-p,R=i+p,E=-p,g=o+p;for(let v=0;v<u;v++){let d=l[v];if(d.active){if(pt(d,n,s,c.fadeOut,c.scaleDown),d.data?.isRocket&&d.y<=d.data.targetY){d.active=!1,this.explodeFirework(d.x,d.y,d.data);continue}if(d.data?.willExplode&&!d.data.hasExploded&&d.vx*d.vx+d.vy*d.vy<1&&(d.data.hasExploded=!0,this.explodeFirework(d.x,d.y,{burstCount:15,spread:360,burstColors:d.data.burstColors})),d.x<D||d.x>R||d.y<E||d.y>g){(d.y>g||d.x<D-200||d.x>R+200)&&(d.active=!1);continue}ht(r,d,{customDraw:this.drawShape}),f++,h=!1}}if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let v=t-this.lastSpawnTime,d=1e3/(this.continuousConfig.spawnRate??10);if(v>=d){if(this.continuousConfig.recycle){let A=this.continuousConfig.numberOfPieces-f;if(A>0){for(let T=u-1;T>=0&&A>0;T--)l[T].active||(bt(l[T]),l.splice(T,1));this.spawnParticles(Math.min(A,5))}}else f<this.continuousConfig.numberOfPieces&&this.spawnParticles(Math.min(3,this.continuousConfig.numberOfPieces-f));this.lastSpawnTime=t}}if(this.mode==="firework"){let v=0;for(let I=0;I<u;I++)l[I].active&&l[I].data?.isRocket&&v++;let d=t-this.lastSpawnTime;v===0&&d>=(this.fireworkConfig.burstDelay??500)&&(this.launchFirework(),this.lastSpawnTime=t)}if((this.mode==="burst"||this.mode==="cannon"||this.mode==="explosion")&&h){this.complete();return}this.animationFrameId=requestAnimationFrame(this.animate)};this.origin=t,this.config=Ce(n),this.mode=n?.mode??"burst",this.spawnArea=n?.spawnArea,this.continuousConfig={...nt,...n?.continuous},this.fireworkConfig={...rt,...n?.firework},this.canvasConfig={...Ae,...n?.canvas},this.drawShape=n?.particle?.drawShape,this.canvasConfig.frameRate&&(this.frameInterval=1e3/this.canvasConfig.frameRate)}start(){if(this.isRunning)return this.createHandle();if(!$())return this.deferred.resolve(),this.createHandle();if(this.isRunning=!0,ee++,this.canvasContext=tn(this.config.zIndex,this.canvasConfig),this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let t=Math.min(this.continuousConfig.numberOfPieces,Math.floor(this.continuousConfig.numberOfPieces*.5));this.spawnParticles(t)}else this.mode==="firework"?this.launchFirework():this.createParticles();return this.config.onStart?.(),this.lastFrameTime=performance.now(),this.lastSpawnTime=performance.now(),this.lastRenderTime=performance.now(),this.animate(),this.createHandle()}createParticles(){let{particleCount:t,particle:n,direction:r,physics:i}=this.config,{x:o,y:a}=this.origin,s=Math.min(t,X.MAX_PARTICLES);for(let c=0;c<s;c++){let l;if(r.direction==="radial")l=C()*x.TWO_PI;else{let h=ce(r.direction,r.angle),p=S(r.spread);l=h+(C()-.5)*p}let u=m(r.velocity[0],r.velocity[1]),f=Q(o,a,l,u,n.colors,n.shapes,n.size,n.opacity,n.lifespan,i.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(f)}}spawnParticles(t){if(!this.canvasContext)return;let{particle:n,physics:r}=this.config,{width:i,height:o}=this.canvasContext;for(let a=0;a<t;a++){let s;this.spawnArea?s=Ct(this.spawnArea,i,o):this.mode==="snow"||this.mode==="rain"?s={x:m(0,i),y:-20}:s={x:m(0,i),y:m(-20,0)};let c,l;this.mode==="snow"?(c=S(m(-20,20)-90),l=m(.5,2)):this.mode==="rain"?(c=S(-90),l=m(8,15)):(c=C()*x.TWO_PI,l=m(2,6));let u=Q(s.x,s.y,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,r.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(u)}}launchFirework(){if(!this.canvasContext)return;let{width:t,height:n}=this.canvasContext,{launchHeight:r,burstCount:i,spread:o,secondaryExplosions:a,rocketColors:s,burstColors:c,trailLength:l}=this.fireworkConfig,u=this.spawnArea?Ct(this.spawnArea,t,n).x:m(t*.2,t*.8),f=n*(1-r),h=u+m(-50,50),p=Q(u,n,S(-90+m(-10,10)),m(15,25),s,["circle"],[3,5],[1,1],2e3,0);p.data={isRocket:!0,targetY:f,targetX:h,burstCount:i,spread:o,burstColors:c,secondaryExplosions:a,trailLength:l},this.particles.push(p)}explodeFirework(t,n,r){let{burstCount:i=80,spread:o=360,burstColors:a,secondaryExplosions:s}=r,c=a??this.config.particle.colors,l=S(o);for(let u=0;u<i;u++){let f=u/i*l-l/2+S(-90),h=m(4,12),p=Q(t,n,f,h,c,this.config.particle.shapes,[2,6],[.8,1],1500,this.config.physics.rotationSpeed);s&&C()<.1&&(p.data={willExplode:!0,burstColors:c}),this.particles.push(p)}}stop(){this.isRunning&&(this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanup(),this.deferred.resolve())}pause(){this.isPaused=!0}resume(){this.isPaused=!1}complete(){this.config.onComplete?.(),this.cleanup(),this.deferred.resolve()}cleanup(){this.isRunning=!1,this.isPaused=!1;let t=this.particles;for(let n=t.length-1;n>=0;n--)bt(t[n]);this.particles=[],this.canvasContext=null,ee--,this.config.autoCleanup&&nn()}addParticles(t){if(!(!this.isRunning||!this.canvasContext))if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")this.spawnParticles(t);else{let{particle:n,direction:r,physics:i}=this.config,{x:o,y:a}=this.origin;for(let s=0;s<t;s++){let c;if(r.direction==="radial")c=C()*x.TWO_PI;else{let f=ce(r.direction,r.angle),h=S(r.spread);c=f+(C()-.5)*h}let l=m(r.velocity[0],r.velocity[1]),u=Q(o,a,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,i.rotationSpeed);this.particles.push(u)}}}clear(){this.particles=[]}getParticleCount(){return mt(this.particles)}getState(){return this.isRunning?this.isPaused?"paused":"running":"stopped"}createHandle(){return{stop:()=>this.stop(),pause:()=>this.pause(),resume:()=>this.resume(),promise:this.deferred.promise,addParticles:t=>this.addParticles(t),clear:()=>this.clear(),getParticleCount:()=>this.getParticleCount(),getState:()=>this.getState()}}};function fe(e,t){return new de(e,t).start()}function ve(e,t){if(!e||!$())return null;let n=e.getBoundingClientRect(),r={x:n.left+n.width/2,y:n.top+n.height/2};return fe(r,t)}function vt(){return ee}function wt(){b&&(b.remove(),b=null,U=null),ee=0}var O=require("react");function j(){let[e,t]=(0,O.useState)(!1),n=(0,O.useRef)(new Set);(0,O.useEffect)(()=>()=>{n.current.forEach(l=>l.stop()),n.current.clear()},[]);let r=(0,O.useCallback)((l,u)=>{let f=fe(l,u);return n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f},[]),i=(0,O.useCallback)((l,u)=>{if(!l)return null;let f=ve(l,u);return f&&(n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)})),f},[]),o=(0,O.useCallback)(()=>{n.current.forEach(l=>l.stop()),n.current.clear(),t(!1)},[]),a=(0,O.useCallback)(()=>{n.current.forEach(l=>l.pause())},[]),s=(0,O.useCallback)(()=>{n.current.forEach(l=>l.resume())},[]),c=(0,O.useCallback)(()=>Array.from(n.current),[]);return{fire:r,fireFromElement:i,isActive:e,stopAll:o,pauseAll:a,resumeAll:s,getActiveHandles:c}}var P=require("react");var Oe=require("react/jsx-runtime");function yt({active:e,origin:t,triggerRef:n,options:r,onComplete:i}){let{fire:o,fireFromElement:a}=j(),s=(0,P.useRef)(!1);return(0,P.useEffect)(()=>{if(e&&!s.current){s.current=!0;let c=null;n?.current?c=a(n.current,r):t&&(c=o(t,r)),c&&c.promise.then(()=>{i?.()})}},[e,t,n,r,o,a,i]),(0,P.useEffect)(()=>{e||(s.current=!1)},[e]),null}var rn=(0,P.forwardRef)(({options:e,style:t},n)=>{let r=(0,P.useRef)(null),{fireFromElement:i}=j();return(0,P.useImperativeHandle)(n,()=>({fire:()=>i(r.current,e)})),(0,Oe.jsx)("div",{ref:r,style:{position:"absolute",width:1,height:1,pointerEvents:"none",...t},"aria-hidden":"true"})});rn.displayName="ConfettiTrigger";var Me=(0,P.forwardRef)(({children:e,confettiOptions:t,fireOnClick:n=!0,onClick:r,...i},o)=>{let a=(0,P.useRef)(null),{fireFromElement:s}=j(),c=(0,P.useCallback)(u=>{a.current=u,typeof o=="function"?o(u):o&&(o.current=u)},[o]),l=(0,P.useCallback)(u=>{n&&a.current&&s(a.current,t),r?.(u)},[n,s,t,r]);return(0,Oe.jsx)("button",{ref:c,onClick:l,...i,children:e})});Me.displayName="ConfettiButton";function on({width:e,height:t,numberOfPieces:n=200,confettiSource:r,initialVelocityX:i,initialVelocityY:o,recycle:a=!0,run:s=!0,gravity:c=.3,wind:l=0,opacity:u=1,drawShape:f,tweenDuration:h=100,colors:p,onConfettiComplete:D,frameRate:R}){let{fire:E}=j(),g=(0,P.useRef)(null),v=(0,P.useRef)(!1);return(0,P.useEffect)(()=>{if(!s){g.current&&(g.current.stop(),g.current=null),v.current=!1;return}if(v.current)return;v.current=!0;let d=r?{type:"rect",x:r.x,y:r.y,w:r.w??window.innerWidth,h:r.h??10}:{type:"rect",x:0,y:0,w:e??window.innerWidth,h:10},I=typeof i=="number"?[i*.5,i*1.5]:i?[i.min,i.max]:[4,10],A=typeof o=="number"?[o*.5,o*1.5]:o?[o.min,o.max]:[10,30],T=(e??window.innerWidth)/2,N=0;return g.current=E({x:T,y:N},{particleCount:n,particle:{colors:p??["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],opacity:[u*.8,u],shapes:["square","circle","rectangle"],drawShape:f},physics:{gravity:c*10,wind:l*5,windVariation:I[1]-I[0]},direction:{velocity:A},mode:"continuous",spawnArea:d,continuous:{recycle:a,numberOfPieces:n,spawnRate:30,run:s,tweenDuration:h},canvas:{width:e,height:t,frameRate:R,autoResize:!e&&!t},onComplete:D}),()=>{g.current&&(g.current.stop(),g.current=null)}},[s,e,t,n,r,i,o,a,c,l,u,f,h,p,D,R,E]),(0,P.useEffect)(()=>{g.current},[a]),null}on.displayName="Confetti";var An=Math.PI*2,an=Math.PI/180,Pt=1e3/60;function y(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function we(e){return e*an}function q(e,t,n){return Math.min(Math.max(e,t),n)}function Be(e,t){let n=Math.max(0,e-t),r=n/Pt;return Object.freeze({value:n,factor:r})}function It(e){if(typeof e!="string"||e.length>50)return null;let t=e.trim().toLowerCase();if(t.startsWith("#")){let r=t.slice(1);if(!/^[0-9a-f]+$/.test(r))return null;let i,o,a,s=255;if(r.length===3)i=parseInt(r[0]+r[0],16),o=parseInt(r[1]+r[1],16),a=parseInt(r[2]+r[2],16);else if(r.length===6)i=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16);else if(r.length===8)i=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16),s=parseInt(r.slice(6,8),16);else return null;return{r:i,g:o,b:a,a:s/255}}let n=t.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);return n?{r:q(parseInt(n[1],10),0,255),g:q(parseInt(n[2],10),0,255),b:q(parseInt(n[3],10),0,255),a:n[4]!==void 0?q(parseFloat(n[4]),0,1):1}:null}function ke(e,t){let n=It(e);if(!n)return e;let{r,g:i,b:o,a}=n,s=q(r+t,0,255),c=q(i+t,0,255),l=q(o+t,0,255);return a<1?`rgba(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)}, ${a})`:`rgb(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)})`}function te(){if(typeof window>"u")return!1;try{return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}catch{return!1}}var sn=0;function pe(){return++sn}function ye(e){if(e.length===0)return;let t=Math.floor(y()*e.length);return e[t]}function Pe(e){return typeof requestAnimationFrame<"u"?requestAnimationFrame(e):setTimeout(e,Pt)}function _e(e){typeof cancelAnimationFrame<"u"?cancelAnimationFrame(e):clearTimeout(e)}function ze(){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,2)}var Tt=Object.freeze(["#26ccff","#a25afd","#ff5e7e","#88ff5a","#fcff42","#ffa62d","#ff36ff"]),ln=Object.freeze(["square","circle"]),Ie=Math.PI*2,Te=class e{constructor(t,n,r,i,o,a,s,c,l,u,f,h,p,D,R,E,g){this.id=t,this.position=n,this.velocity=r,this.angle2D=i,this.gravity=o,this.drift=a,this.decay=s,this.wobble=c,this.tilt=l,this.roll=u,this.rotate=f,this.color=h,this.shape=p,this.size=D,this.scalar=R,this.flat=E,this.tick=0,this.totalTicks=g,this.destroyed=!1,this.opacity=1}static create(t,n,r={}){let{angle:i=90,spread:o=45,startVelocity:a=45,decay:s=.94,gravity:c=1,drift:l=0,flat:u=!1,ticks:f=200,origin:h={x:.5,y:.5},colors:p=Tt,shapes:D=ln,scalar:R=1,size:E=4}=r,g={x:h.x*t,y:h.y*n},v=we(i),d=we(o),I=-v+(.5*d-y()*d),A=a*.5+y()*a,T={angle:y()*Ie,angleSpeed:y()*.1+.05,moveSpeed:-15+y()*30,distance:25+y()*15},N={value:y()*Ie,sinDirection:y()>=.5?1:-1,cosDirection:y()>=.5?1:-1,speed:(y()*.4+.3)*(y()>.5?1:-1),enable:!u},Y={angle:y()*Ie,speed:(15+y()*10)/60,horizontal:y()>.3,vertical:y()>.7,enable:!u},L={angle:y()*Ie,speed:(y()*2-1)*.1,enable:!u},re=ye(p)??Tt[0],G=ye(D)??"square";return new e(pe(),g,A,I,c*3,l,s,T,N,Y,L,re,G,E,R,u,f)}get progress(){return this.tick/this.totalTicks}get computedSize(){return this.size*this.scalar}destroy(){this.destroyed=!0}clone(t){let n=Object.create(e.prototype);return Object.assign(n,this,t),n}},xe=class{constructor(t=1e3){this.pool=[];this.maxSize=t}acquire(t,n,r){let i=this.pool.pop();return i?this.resetParticle(i,t,n,r):Te.create(t,n,r)}release(t){this.pool.length<this.maxSize&&(t.destroyed=!0,this.pool.push(t))}clear(){this.pool.length=0}get size(){return this.pool.length}resetParticle(t,n,r,i){let o=Te.create(n,r,i);return Object.assign(t,o,{id:t.id}),t.destroyed=!1,t}};var M=Math.PI*2,Le=class{constructor(){this.id="base"}init(t){}isEnabled(t){return!t.destroyed}update(t,n){if(t.destroyed)return;let r=Math.cos(t.angle2D)*t.velocity,i=Math.sin(t.angle2D)*t.velocity;t.position.x+=r*n.factor+t.drift*n.factor,t.position.y+=i*n.factor+t.gravity*n.factor,t.velocity*=t.decay,t.tick++;let o=t.tick/t.totalTicks;t.opacity=1-Math.pow(o,2),t.tick>=t.totalTicks&&(t.destroyed=!0)}},Ne=class{constructor(){this.id="wobble"}init(t){t.wobble||(t.wobble={angle:Math.random()*M,angleSpeed:Math.random()*.1+.05,moveSpeed:-15+Math.random()*30,distance:25+Math.random()*15})}isEnabled(t){return!t.destroyed&&!t.flat&&!!t.wobble}update(t,n){if(!this.isEnabled(t))return;let r=t.wobble;r.angle+=r.angleSpeed*n.factor,r.angle>M&&(r.angle-=M);let i=Math.cos(r.angle)*r.distance*.1;t.position.x+=i*n.factor}},He=class{constructor(){this.id="tilt"}init(t){t.tilt||(t.tilt={value:Math.random()*M,sinDirection:Math.random()>=.5?1:-1,cosDirection:Math.random()>=.5?1:-1,speed:(Math.random()*.4+.3)*(Math.random()>.5?1:-1),enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.tilt?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.tilt;r.value+=r.speed*.01*n.factor,r.value>M?r.value-=M:r.value<0&&(r.value+=M)}getTransformValues(t){if(!t.tilt?.enable)return{};let n=t.tilt;return{b:Math.cos(n.value)*n.cosDirection*.5,c:Math.sin(n.value)*n.sinDirection*.5}}},Ue=class{constructor(){this.id="roll"}init(t){t.roll||(t.roll={angle:Math.random()*M,speed:(15+Math.random()*10)/60,horizontal:Math.random()>.3,vertical:Math.random()>.7,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.roll?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.roll;r.angle+=r.speed*n.factor,r.angle>M&&(r.angle-=M)}getTransformValues(t){if(!t.roll?.enable)return{};let n=t.roll;return{a:n.horizontal?Math.abs(Math.cos(n.angle)):void 0,d:n.vertical?Math.abs(Math.sin(n.angle)):void 0}}getDarkenAmount(t){if(!t.roll?.enable)return 0;let n=t.roll;return!n.horizontal&&!n.vertical?0:(n.horizontal?Math.cos(n.angle):Math.sin(n.angle))<0?25:0}},qe=class{constructor(){this.id="rotate"}init(t){t.rotate||(t.rotate={angle:Math.random()*M,speed:(Math.random()*2-1)*.1,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.rotate?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.rotate;r.angle+=r.speed*n.factor,r.angle>M?r.angle-=M:r.angle<0&&(r.angle+=M)}},We=class{constructor(){this.id="opacity"}init(t){t.opacity=1}isEnabled(t){return!t.destroyed}update(t,n){if(!this.isEnabled(t))return;let r=t.tick/t.totalTicks;t.opacity=1-Math.pow(r,2)}};function xt(){return[new Le,new Ne,new He,new Ue,new qe,new We]}var Rt=Math.PI*2,Ge=class{constructor(){this.type="circle"}draw(t,n,r){let i=n.flat?1:.6+Math.sin(n.wobble.angle)*.4;t.ellipse(0,0,r*i,r*(1-i*.3),n.tilt?.value??0,0,Rt)}},Ve=class{constructor(){this.type="square"}draw(t,n,r){let i=n.flat?0:Math.sin(n.wobble.angle)*r*.3;t.moveTo(-r+i,-r),t.lineTo(r+i,-r*.5),t.lineTo(r-i,r),t.lineTo(-r-i,r*.5)}},$e=class{constructor(){this.type="rectangle"}draw(t,n,r){let i=r*1.5,o=r*.6,a=n.flat?0:Math.sin(n.wobble.angle)*o*.2;t.moveTo(-i+a,-o),t.lineTo(i+a,-o*.5),t.lineTo(i-a,o),t.lineTo(-i-a,o*.5)}},je=class{constructor(){this.type="star"}draw(t,n,r){let i=r,o=r*.5,a=5,s=Math.PI/a,c=-Math.PI/2;t.moveTo(0,-i);for(let l=0;l<a;l++)t.lineTo(Math.cos(c)*i,Math.sin(c)*i),c+=s,t.lineTo(Math.cos(c)*o,Math.sin(c)*o),c+=s}},Ye=class{constructor(){this.type="triangle"}draw(t,n,r){let i=r*Math.sqrt(3)/2;t.moveTo(0,-i),t.lineTo(-r,i),t.lineTo(r,i)}},Xe=class{constructor(){this.type="diamond"}draw(t,n,r){t.moveTo(0,-r),t.lineTo(r*.6,0),t.lineTo(0,r),t.lineTo(-r*.6,0)}},Ze=class{constructor(){this.type="heart"}draw(t,n,r){let o=-r*.3,a=r*.3;t.moveTo(0,o+a),t.bezierCurveTo(0-r,o,0-r,o-a*2,0,o-a),t.bezierCurveTo(0+r,o-a*2,0+r,o,0,o+a)}},Je=class{constructor(){this.type="hexagon"}draw(t,n,r){let o=Rt/6;for(let a=0;a<6;a++){let s=o*a-Math.PI/2,c=Math.cos(s)*r,l=Math.sin(s)*r;a===0?t.moveTo(c,l):t.lineTo(c,l)}}},Ke=class{constructor(){this.drawers=new Map;this.register(new Ge),this.register(new Ve),this.register(new $e),this.register(new je),this.register(new Ye),this.register(new Xe),this.register(new Ze),this.register(new Je)}register(t){this.drawers.set(t.type,t)}get(t){return this.drawers.get(t)}has(t){return this.drawers.has(t)}getTypes(){return Array.from(this.drawers.keys())}unregister(t){return this.drawers.delete(t)}clear(){this.drawers.clear()}},ne=new Ke;var W=class{constructor(t={}){this.destroyed=!1;this.t=[];this.n=null;this.m=0;this.i=null;this.p=!1;this.o=null;this.P=t=>{if(this.destroyed)return;let n=Be(t,this.m);this.m=t,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let r=!1,i=[];for(let o=0;o<this.t.length;o++){let a=this.t[o];if(a.destroyed){i.push(o);continue}for(let s of this.e)s.isEnabled(a)&&s.update(a,n);if(a.destroyed){i.push(o);continue}r=!0,this.E(a)}for(let o=i.length-1;o>=0;o--){let a=i[o],s=this.t[a];this.l.release(s),this.t.splice(a,1)}r?this.n=Pe(this.P):(this.n=null,this.i?.(),this.i=null)};this.I=()=>{this.v()};this.id=`confetti-${pe()}`,this.f={canvas:t.canvas,resize:t.resize??!0,zIndex:t.zIndex??100,disableForReducedMotion:t.disableForReducedMotion??!1},t.canvas?this.canvas=t.canvas:(this.canvas=this.T(),this.p=!0);let n=this.canvas.getContext("2d",{alpha:!0,desynchronized:!0});if(!n)throw new Error("Failed to get 2D canvas context");this.ctx=n,this.e=xt(),this.l=new xe(500),this.f.resize&&this.R(),this.v()}get particles(){return this.t}async fire(t={}){if(this.f.disableForReducedMotion&&te())return Promise.resolve();if(this.destroyed)throw new Error("Cannot fire on destroyed container");let n=t.particleCount??100,r=this.canvas.width,i=this.canvas.height;for(let o=0;o<n;o++){let a=this.l.acquire(r,i,t);for(let s of this.e)s.init(a);this.t.push(a)}return this.n?new Promise(o=>{let a=this.i;this.i=()=>{a?.(),o()}}):new Promise(o=>{this.i=o,this.m=performance.now(),this.n=Pe(this.P)})}stop(){this.n&&(_e(this.n),this.n=null);for(let t of this.t)this.l.release(t);this.t.length=0,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.i?.(),this.i=null}reset(){this.stop(),this.l.clear()}destroy(){this.destroyed||(this.stop(),this.o&&(this.o.disconnect(),this.o=null),this.p&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.destroyed=!0)}E(t){let n=this.ctx,r=t.size*t.scalar,i={a:1,b:0,c:0,d:1};for(let l of this.e)if(l.getTransformValues){let u=l.getTransformValues(t);u.a!==void 0&&(i.a=u.a),u.b!==void 0&&(i.b=u.b),u.c!==void 0&&(i.c=u.c),u.d!==void 0&&(i.d=u.d)}let a=this.e.find(l=>l.id==="roll")?.getDarkenAmount(t)??0,s=a>0?ke(t.color,-a):t.color;n.save(),n.translate(t.position.x,t.position.y),n.rotate(t.rotate?.angle??0),n.transform(i.a??1,i.b??0,i.c??0,i.d??1,0,0),n.fillStyle=s,n.globalAlpha=t.opacity,n.beginPath();let c=ne.get(t.shape);c?c.draw(n,t,r):ne.get("square")?.draw(n,t,r),n.closePath(),n.fill(),n.restore()}T(){let t=document.createElement("canvas");return t.id=this.id,t.style.cssText=`
9
+ `,k=b.getContext("2d",{alpha:!0,desynchronized:!0}),!k)throw new Error("Failed to get canvas 2D context");document.body.appendChild(b),n.autoResize&&(ie=()=>{if(b&&k){let a=n.width??window.innerWidth,s=n.height??window.innerHeight;b.width=a*r,b.height=s*r,b.style.width=`${a}px`,b.style.height=`${s}px`,k.scale(r,r)}},window.addEventListener("resize",ie))}b.style.zIndex=String(e);let o=n.width??window.innerWidth,i=n.height??window.innerHeight;return(b.width!==o*r||b.height!==i*r)&&(b.width=o*r,b.height=i*r,b.style.width=`${o}px`,b.style.height=`${i}px`,k.scale(r,r)),{canvas:b,ctx:k,width:o,height:i,dpr:r}}function hn(){b&&Z===0&&setTimeout(()=>{Z===0&&b&&(ie&&(window.removeEventListener("resize",ie),ie=null),b.remove(),b=null,k=null)},ot)}function Ct(e,t,n){let{type:r,x:o,y:i,w:a,h:s}=e;switch(r){case"point":return{x:o,y:i};case"rect":return{x:h(o,o+(a??0)),y:h(i,i+(s??0))};case"line":let c=C();return{x:o+c*(a??0),y:i+c*(s??0)};case"circle":let l=C()*T.TWO_PI,u=Math.sqrt(C())*(a??50);return{x:o+Math.cos(l)*u,y:i+Math.sin(l)*u};default:return{x:o,y:i}}}var ae=class{constructor(t,n){this.particles=[];this.canvasContext=null;this.animationFrameId=null;this.lastFrameTime=0;this.lastSpawnTime=0;this.isRunning=!1;this.isPaused=!1;this.deferred=ft();this.frameInterval=0;this.lastRenderTime=0;this.animate=()=>{if(!this.isRunning||!this.canvasContext)return;if((this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")&&!this.continuousConfig.run){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}if(this.isPaused){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}let t=performance.now(),n=t-this.lastFrameTime;if(this.lastFrameTime=t,this.frameInterval>0){if(t-this.lastRenderTime<this.frameInterval){this.animationFrameId=requestAnimationFrame(this.animate);return}this.lastRenderTime=t}let{ctx:r,width:o,height:i,dpr:a}=this.canvasContext,{physics:s,particle:c}=this.config;r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,o*a,i*a),r.scale(a,a);let l=this.particles,u=l.length,f=0,m=!0,p=100,I=-p,E=o+p,F=-p,y=i+p;for(let w=0;w<u;w++){let d=l[w];if(d.active){if(pt(d,n,s,c.fadeOut,c.scaleDown),d.data?.isRocket&&d.y<=d.data.targetY){d.active=!1,this.explodeFirework(d.x,d.y,d.data);continue}if(d.data?.willExplode&&!d.data.hasExploded&&d.vx*d.vx+d.vy*d.vy<1&&(d.data.hasExploded=!0,this.explodeFirework(d.x,d.y,{burstCount:15,spread:360,burstColors:d.data.burstColors})),d.x<I||d.x>E||d.y<F||d.y>y){(d.y>y||d.x<I-200||d.x>E+200)&&(d.active=!1);continue}ht(r,d,{customDraw:this.drawShape}),f++,m=!1}}if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let w=t-this.lastSpawnTime,d=1e3/(this.continuousConfig.spawnRate??10);if(w>=d){if(this.continuousConfig.recycle){let A=this.continuousConfig.numberOfPieces-f;if(A>0){for(let S=u-1;S>=0&&A>0;S--)l[S].active||(bt(l[S]),l.splice(S,1));this.spawnParticles(Math.min(A,5))}}else f<this.continuousConfig.numberOfPieces&&this.spawnParticles(Math.min(3,this.continuousConfig.numberOfPieces-f));this.lastSpawnTime=t}}if(this.mode==="firework"){let w=0;for(let R=0;R<u;R++)l[R].active&&l[R].data?.isRocket&&w++;let d=t-this.lastSpawnTime;w===0&&d>=(this.fireworkConfig.burstDelay??500)&&(this.launchFirework(),this.lastSpawnTime=t)}if((this.mode==="burst"||this.mode==="cannon"||this.mode==="explosion")&&m){this.complete();return}this.animationFrameId=requestAnimationFrame(this.animate)};this.origin=t,this.config=me(n),this.mode=n?.mode??"burst",this.spawnArea=n?.spawnArea,this.continuousConfig={...nt,...n?.continuous},this.fireworkConfig={...rt,...n?.firework},this.canvasConfig={...Ee,...n?.canvas},this.drawShape=n?.particle?.drawShape,this.canvasConfig.frameRate&&(this.frameInterval=1e3/this.canvasConfig.frameRate)}start(){if(this.isRunning)return this.createHandle();if(!U())return this.deferred.resolve(),this.createHandle();if(typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return this.deferred.resolve(),this.createHandle();if(this.isRunning=!0,Z++,this.canvasContext=pn(this.config.zIndex,this.canvasConfig),this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let t=Math.min(this.continuousConfig.numberOfPieces,Math.floor(this.continuousConfig.numberOfPieces*.5));this.spawnParticles(t)}else this.mode==="firework"?this.launchFirework():this.createParticles();return this.config.onStart?.(),this.lastFrameTime=performance.now(),this.lastSpawnTime=performance.now(),this.lastRenderTime=performance.now(),this.animate(),this.createHandle()}createParticles(){let{particleCount:t,particle:n,direction:r,physics:o}=this.config,{x:i,y:a}=this.origin,s=Math.min(t,Re.MAX_PARTICLES);for(let c=0;c<s;c++){let l;if(r.direction==="radial")l=C()*T.TWO_PI;else{let m=oe(r.direction,r.angle),p=O(r.spread);l=m+(C()-.5)*p}let u=h(r.velocity[0],r.velocity[1]),f=X(i,a,l,u,n.colors,n.shapes,n.size,n.opacity,n.lifespan,o.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(f)}}spawnParticles(t){if(!this.canvasContext)return;let{particle:n,physics:r}=this.config,{width:o,height:i}=this.canvasContext;for(let a=0;a<t;a++){let s;this.spawnArea?s=Ct(this.spawnArea,o,i):this.mode==="snow"||this.mode==="rain"?s={x:h(0,o),y:-20}:s={x:h(0,o),y:h(-20,0)};let c,l;this.mode==="snow"?(c=O(h(-20,20)-90),l=h(.5,2)):this.mode==="rain"?(c=O(-90),l=h(8,15)):(c=C()*T.TWO_PI,l=h(2,6));let u=X(s.x,s.y,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,r.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(u)}}launchFirework(){if(!this.canvasContext)return;let{width:t,height:n}=this.canvasContext,{launchHeight:r,burstCount:o,spread:i,secondaryExplosions:a,rocketColors:s,burstColors:c,trailLength:l}=this.fireworkConfig,u=this.spawnArea?Ct(this.spawnArea,t,n).x:h(t*.2,t*.8),f=n*(1-r),m=u+h(-50,50),p=X(u,n,O(-90+h(-10,10)),h(15,25),s,["circle"],[3,5],[1,1],2e3,0);p.data={isRocket:!0,targetY:f,targetX:m,burstCount:o,spread:i,burstColors:c,secondaryExplosions:a,trailLength:l},this.particles.push(p)}explodeFirework(t,n,r){let{burstCount:o=80,spread:i=360,burstColors:a,secondaryExplosions:s}=r,c=a??this.config.particle.colors,l=O(i);for(let u=0;u<o;u++){let f=u/o*l-l/2+O(-90),m=h(4,12),p=X(t,n,f,m,c,this.config.particle.shapes,[2,6],[.8,1],1500,this.config.physics.rotationSpeed);s&&C()<.1&&(p.data={willExplode:!0,burstColors:c}),this.particles.push(p)}}stop(){this.isRunning&&(this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanup(),this.deferred.resolve())}pause(){this.isPaused=!0}resume(){this.isPaused=!1}complete(){this.config.onComplete?.(),this.cleanup(),this.deferred.resolve()}cleanup(){this.isRunning=!1,this.isPaused=!1;let t=this.particles;for(let n=t.length-1;n>=0;n--)bt(t[n]);this.particles=[],this.canvasContext=null,Z--,this.config.autoCleanup&&hn()}addParticles(t){if(!(!this.isRunning||!this.canvasContext))if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")this.spawnParticles(t);else{let{particle:n,direction:r,physics:o}=this.config,{x:i,y:a}=this.origin;for(let s=0;s<t;s++){let c;if(r.direction==="radial")c=C()*T.TWO_PI;else{let f=oe(r.direction,r.angle),m=O(r.spread);c=f+(C()-.5)*m}let l=h(r.velocity[0],r.velocity[1]),u=X(i,a,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,o.rotationSpeed);this.particles.push(u)}}}clear(){this.particles=[]}getParticleCount(){return gt(this.particles)}getState(){return this.isRunning?this.isPaused?"paused":"running":"stopped"}createHandle(){return{stop:()=>this.stop(),pause:()=>this.pause(),resume:()=>this.resume(),promise:this.deferred.promise,addParticles:t=>this.addParticles(t),clear:()=>this.clear(),getParticleCount:()=>this.getParticleCount(),getState:()=>this.getState()}}};function se(e,t){return new ae(e,t).start()}function ge(e,t){if(!e||!U())return null;let n=e.getBoundingClientRect(),r={x:n.left+n.width/2,y:n.top+n.height/2};return se(r,t)}function wt(){return Z}function Pt(){b&&(b.remove(),b=null,k=null),Z=0}var M=require("react");function W(){let[e,t]=(0,M.useState)(!1),n=(0,M.useRef)(new Set);(0,M.useEffect)(()=>()=>{n.current.forEach(l=>l.stop()),n.current.clear()},[]);let r=(0,M.useCallback)((l,u)=>{let f=se(l,u);return n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f},[]),o=(0,M.useCallback)((l,u)=>{let f=ge(l,u);return f?(n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f):null},[]),i=(0,M.useCallback)(()=>{n.current.forEach(l=>l.stop()),n.current.clear(),t(!1)},[]),a=(0,M.useCallback)(()=>{n.current.forEach(l=>l.pause())},[]),s=(0,M.useCallback)(()=>{n.current.forEach(l=>l.resume())},[]),c=(0,M.useCallback)(()=>Array.from(n.current),[]);return{fire:r,fireFromElement:o,isActive:e,stopAll:i,pauseAll:a,resumeAll:s,getActiveHandles:c}}var P=require("react");var De=require("react/jsx-runtime");function It({active:e,origin:t,triggerRef:n,options:r,onComplete:o}){let{fire:i,fireFromElement:a}=W(),s=(0,P.useRef)(!1);return(0,P.useEffect)(()=>{if(e&&!s.current){s.current=!0;let c=null;n?.current?c=a(n.current,r):t&&(c=i(t,r)),c&&c.promise.then(()=>{o?.()})}},[e,t,n,r,i,a,o]),(0,P.useEffect)(()=>{e||(s.current=!1)},[e]),null}var gn=(0,P.forwardRef)(({options:e,style:t},n)=>{let r=(0,P.useRef)(null),{fireFromElement:o}=W();return(0,P.useImperativeHandle)(n,()=>({fire:()=>o(r.current,e)})),(0,De.jsx)("div",{ref:r,style:{position:"absolute",width:1,height:1,pointerEvents:"none",...t},"aria-hidden":"true"})});gn.displayName="ConfettiTrigger";var Oe=(0,P.forwardRef)(({children:e,confettiOptions:t,fireOnClick:n=!0,onClick:r,...o},i)=>{let a=(0,P.useRef)(null),{fireFromElement:s}=W(),c=(0,P.useCallback)(u=>{a.current=u,typeof i=="function"?i(u):i&&(i.current=u)},[i]),l=(0,P.useCallback)(u=>{n&&a.current&&s(a.current,t),r?.(u)},[n,s,t,r]);return(0,De.jsx)("button",{ref:c,onClick:l,...o,children:e})});Oe.displayName="ConfettiButton";function bn({width:e,height:t,numberOfPieces:n=200,confettiSource:r,initialVelocityX:o,initialVelocityY:i,recycle:a=!0,run:s=!0,gravity:c=.3,wind:l=0,opacity:u=1,drawShape:f,tweenDuration:m=100,colors:p,onConfettiComplete:I,frameRate:E}){let{fire:F}=W(),y=(0,P.useRef)(null),w=(0,P.useRef)(!1);return(0,P.useEffect)(()=>{if(!s){y.current&&(y.current.stop(),y.current=null),w.current=!1;return}if(w.current)return;w.current=!0;let d=r?{type:"rect",x:r.x,y:r.y,w:r.w??window.innerWidth,h:r.h??10}:{type:"rect",x:0,y:0,w:e??window.innerWidth,h:10},R=typeof o=="number"?[o*.5,o*1.5]:o?[o.min,o.max]:[4,10],A=typeof i=="number"?[i*.5,i*1.5]:i?[i.min,i.max]:[10,30],S=(e??window.innerWidth)/2,Y=0;return y.current=F({x:S,y:Y},{particleCount:n,particle:{colors:p??["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],opacity:[u*.8,u],shapes:["square","circle","rectangle"],drawShape:f},physics:{gravity:c*10,wind:l*5,windVariation:R[1]-R[0]},direction:{velocity:A},mode:"continuous",spawnArea:d,continuous:{recycle:a,numberOfPieces:n,spawnRate:30,run:s,tweenDuration:m},canvas:{width:e,height:t,frameRate:E,autoResize:!e&&!t},onComplete:I}),()=>{y.current&&(y.current.stop(),y.current=null)}},[s,e,t,n,r,o,i,a,c,l,u,f,m,p,I,E,F]),(0,P.useEffect)(()=>{y.current},[a]),null}bn.displayName="Confetti";var Gn=Math.PI*2,Cn=Math.PI/180,Tt=1e3/60;function v(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function be(e){return e*Cn}function H(e,t,n){return Math.min(Math.max(e,t),n)}function Me(e,t){let n=Math.max(0,e-t),r=n/Tt;return Object.freeze({value:n,factor:r})}function Ft(e){if(typeof e!="string"||e.length>50)return null;let t=e.trim().toLowerCase();if(t.startsWith("#")){let r=t.slice(1);if(!/^[0-9a-f]+$/.test(r))return null;let o,i,a,s=255;if(r.length===3)o=parseInt(r[0]+r[0],16),i=parseInt(r[1]+r[1],16),a=parseInt(r[2]+r[2],16);else if(r.length===6)o=parseInt(r.slice(0,2),16),i=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16);else if(r.length===8)o=parseInt(r.slice(0,2),16),i=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16),s=parseInt(r.slice(6,8),16);else return null;return{r:o,g:i,b:a,a:s/255}}let n=t.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);return n?{r:H(parseInt(n[1],10),0,255),g:H(parseInt(n[2],10),0,255),b:H(parseInt(n[3],10),0,255),a:n[4]!==void 0?H(parseFloat(n[4]),0,1):1}:null}function _e(e,t){let n=Ft(e);if(!n)return e;let{r,g:o,b:i,a}=n,s=H(r+t,0,255),c=H(o+t,0,255),l=H(i+t,0,255);return a<1?`rgba(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)}, ${a})`:`rgb(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)})`}function J(){if(typeof window>"u")return!1;try{return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}catch{return!1}}var yn=0;function le(){return++yn}function Ce(e){if(e.length===0)return;let t=Math.floor(v()*e.length);return e[t]}function ye(e){return typeof requestAnimationFrame<"u"?requestAnimationFrame(e):setTimeout(e,Tt)}function Be(e){typeof cancelAnimationFrame<"u"?cancelAnimationFrame(e):clearTimeout(e)}function Le(){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,2)}var xt=Object.freeze(["#26ccff","#a25afd","#ff5e7e","#88ff5a","#fcff42","#ffa62d","#ff36ff"]),vn=Object.freeze(["square","circle"]),ve=Math.PI*2,we=class e{constructor(t,n,r,o,i,a,s,c,l,u,f,m,p,I,E,F,y){this.id=t,this.position=n,this.velocity=r,this.angle2D=o,this.gravity=i,this.drift=a,this.decay=s,this.wobble=c,this.tilt=l,this.roll=u,this.rotate=f,this.color=m,this.shape=p,this.size=I,this.scalar=E,this.flat=F,this.tick=0,this.totalTicks=y,this.destroyed=!1,this.opacity=1}static create(t,n,r={}){let{angle:o=90,spread:i=45,startVelocity:a=45,decay:s=.94,gravity:c=1,drift:l=0,flat:u=!1,ticks:f=200,origin:m={x:.5,y:.5},colors:p=xt,shapes:I=vn,scalar:E=1,size:F=4}=r,y={x:m.x*t,y:m.y*n},w=be(o),d=be(i),R=-w+(.5*d-v()*d),A=a*.5+v()*a,S={angle:v()*ve,angleSpeed:v()*.1+.05,moveSpeed:-15+v()*30,distance:25+v()*15},Y={value:v()*ve,sinDirection:v()>=.5?1:-1,cosDirection:v()>=.5?1:-1,speed:(v()*.4+.3)*(v()>.5?1:-1),enable:!u},ue={angle:v()*ve,speed:(15+v()*10)/60,horizontal:v()>.3,vertical:v()>.7,enable:!u},L={angle:v()*ve,speed:(v()*2-1)*.1,enable:!u},Q=Ce(p)??xt[0],de=Ce(I)??"square";return new e(le(),y,A,R,c*3,l,s,S,Y,ue,L,Q,de,F,E,u,f)}get progress(){return this.tick/this.totalTicks}get computedSize(){return this.size*this.scalar}destroy(){this.destroyed=!0}clone(t){let n=Object.create(e.prototype);return Object.assign(n,this,t),n}},Pe=class{constructor(t=1e3){this.pool=[];this.maxSize=t}acquire(t,n,r){let o=this.pool.pop();return o?this.resetParticle(o,t,n,r):we.create(t,n,r)}release(t){this.pool.length<this.maxSize&&(t.destroyed=!0,this.pool.push(t))}clear(){this.pool.length=0}get size(){return this.pool.length}resetParticle(t,n,r,o){let i=we.create(n,r,o);return Object.assign(t,i,{id:t.id}),t.destroyed=!1,t}};var D=Math.PI*2,Ne=class{constructor(){this.id="base"}init(t){}isEnabled(t){return!t.destroyed}update(t,n){if(t.destroyed)return;let r=Math.cos(t.angle2D)*t.velocity,o=Math.sin(t.angle2D)*t.velocity;t.position.x+=r*n.factor+t.drift*n.factor,t.position.y+=o*n.factor+t.gravity*n.factor,t.velocity*=t.decay,t.tick++;let i=t.tick/t.totalTicks;t.opacity=1-Math.pow(i,2),t.tick>=t.totalTicks&&(t.destroyed=!0)}},ke=class{constructor(){this.id="wobble"}init(t){t.wobble||(t.wobble={angle:Math.random()*D,angleSpeed:Math.random()*.1+.05,moveSpeed:-15+Math.random()*30,distance:25+Math.random()*15})}isEnabled(t){return!t.destroyed&&!t.flat&&!!t.wobble}update(t,n){if(!this.isEnabled(t))return;let r=t.wobble;r.angle+=r.angleSpeed*n.factor,r.angle>D&&(r.angle-=D);let o=Math.cos(r.angle)*r.distance*.1;t.position.x+=o*n.factor}},He=class{constructor(){this.id="tilt"}init(t){t.tilt||(t.tilt={value:Math.random()*D,sinDirection:Math.random()>=.5?1:-1,cosDirection:Math.random()>=.5?1:-1,speed:(Math.random()*.4+.3)*(Math.random()>.5?1:-1),enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.tilt?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.tilt;r.value+=r.speed*.01*n.factor,r.value>D?r.value-=D:r.value<0&&(r.value+=D)}getTransformValues(t){if(!t.tilt?.enable)return{};let n=t.tilt;return{b:Math.cos(n.value)*n.cosDirection*.5,c:Math.sin(n.value)*n.sinDirection*.5}}},ze=class{constructor(){this.id="roll"}init(t){t.roll||(t.roll={angle:Math.random()*D,speed:(15+Math.random()*10)/60,horizontal:Math.random()>.3,vertical:Math.random()>.7,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.roll?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.roll;r.angle+=r.speed*n.factor,r.angle>D&&(r.angle-=D)}getTransformValues(t){if(!t.roll?.enable)return{};let n=t.roll;return{a:n.horizontal?Math.abs(Math.cos(n.angle)):void 0,d:n.vertical?Math.abs(Math.sin(n.angle)):void 0}}getDarkenAmount(t){if(!t.roll?.enable)return 0;let n=t.roll;return!n.horizontal&&!n.vertical?0:(n.horizontal?Math.cos(n.angle):Math.sin(n.angle))<0?25:0}},Ue=class{constructor(){this.id="rotate"}init(t){t.rotate||(t.rotate={angle:Math.random()*D,speed:(Math.random()*2-1)*.1,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.rotate?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.rotate;r.angle+=r.speed*n.factor,r.angle>D?r.angle-=D:r.angle<0&&(r.angle+=D)}},We=class{constructor(){this.id="opacity"}init(t){t.opacity=1}isEnabled(t){return!t.destroyed}update(t,n){if(!this.isEnabled(t))return;let r=t.tick/t.totalTicks;t.opacity=1-Math.pow(r,2)}};function Et(){return[new Ne,new ke,new He,new ze,new Ue,new We]}var Rt=Math.PI*2,Ge=class{constructor(){this.type="circle"}draw(t,n,r){let o=n.flat?1:.6+Math.sin(n.wobble.angle)*.4;t.ellipse(0,0,r*o,r*(1-o*.3),n.tilt?.value??0,0,Rt)}},Ye=class{constructor(){this.type="square"}draw(t,n,r){let o=n.flat?0:Math.sin(n.wobble.angle)*r*.3;t.moveTo(-r+o,-r),t.lineTo(r+o,-r*.5),t.lineTo(r-o,r),t.lineTo(-r-o,r*.5)}},qe=class{constructor(){this.type="rectangle"}draw(t,n,r){let o=r*1.5,i=r*.6,a=n.flat?0:Math.sin(n.wobble.angle)*i*.2;t.moveTo(-o+a,-i),t.lineTo(o+a,-i*.5),t.lineTo(o-a,i),t.lineTo(-o-a,i*.5)}},Ve=class{constructor(){this.type="star"}draw(t,n,r){let o=r,i=r*.5,a=5,s=Math.PI/a,c=-Math.PI/2;t.moveTo(0,-o);for(let l=0;l<a;l++)t.lineTo(Math.cos(c)*o,Math.sin(c)*o),c+=s,t.lineTo(Math.cos(c)*i,Math.sin(c)*i),c+=s}},$e=class{constructor(){this.type="triangle"}draw(t,n,r){let o=r*Math.sqrt(3)/2;t.moveTo(0,-o),t.lineTo(-r,o),t.lineTo(r,o)}},je=class{constructor(){this.type="diamond"}draw(t,n,r){t.moveTo(0,-r),t.lineTo(r*.6,0),t.lineTo(0,r),t.lineTo(-r*.6,0)}},Xe=class{constructor(){this.type="heart"}draw(t,n,r){let i=-r*.3,a=r*.3;t.moveTo(0,i+a),t.bezierCurveTo(0-r,i,0-r,i-a*2,0,i-a),t.bezierCurveTo(0+r,i-a*2,0+r,i,0,i+a)}},Ze=class{constructor(){this.type="hexagon"}draw(t,n,r){let i=Rt/6;for(let a=0;a<6;a++){let s=i*a-Math.PI/2,c=Math.cos(s)*r,l=Math.sin(s)*r;a===0?t.moveTo(c,l):t.lineTo(c,l)}}},Je=class{constructor(){this.drawers=new Map;this.register(new Ge),this.register(new Ye),this.register(new qe),this.register(new Ve),this.register(new $e),this.register(new je),this.register(new Xe),this.register(new Ze)}register(t){this.drawers.set(t.type,t)}get(t){return this.drawers.get(t)}has(t){return this.drawers.has(t)}getTypes(){return Array.from(this.drawers.keys())}unregister(t){return this.drawers.delete(t)}clear(){this.drawers.clear()}},K=new Je;var z=class{constructor(t={}){this.destroyed=!1;this.t=[];this.n=null;this.p=0;this.o=null;this.m=!1;this.i=null;this.P=t=>{if(this.destroyed)return;let n=Me(t,this.p);this.p=t,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let r=!1,o=[];for(let i=0;i<this.t.length;i++){let a=this.t[i];if(a.destroyed){o.push(i);continue}for(let s of this.e)s.isEnabled(a)&&s.update(a,n);if(a.destroyed){o.push(i);continue}r=!0,this.E(a)}for(let i=o.length-1;i>=0;i--){let a=o[i],s=this.t[a];this.l.release(s),this.t.splice(a,1)}r?this.n=ye(this.P):(this.n=null,this.o?.(),this.o=null)};this.I=()=>{this.v()};this.id=`confetti-${le()}`,this.f={canvas:t.canvas,resize:t.resize??!0,zIndex:t.zIndex??100,disableForReducedMotion:t.disableForReducedMotion??!1},t.canvas?this.canvas=t.canvas:(this.canvas=this.T(),this.m=!0);let n=this.canvas.getContext("2d",{alpha:!0,desynchronized:!0});if(!n)throw new Error("Failed to get 2D canvas context");this.ctx=n,this.e=Et(),this.l=new Pe(500),this.f.resize&&this.F(),this.v()}get particles(){return this.t}async fire(t={}){if(this.f.disableForReducedMotion&&J())return Promise.resolve();if(this.destroyed)throw new Error("Cannot fire on destroyed container");let n=t.particleCount??100,r=this.canvas.width,o=this.canvas.height;for(let i=0;i<n;i++){let a=this.l.acquire(r,o,t);for(let s of this.e)s.init(a);this.t.push(a)}return this.n?new Promise(i=>{let a=this.o;this.o=()=>{a?.(),i()}}):new Promise(i=>{this.o=i,this.p=performance.now(),this.n=ye(this.P)})}stop(){this.n&&(Be(this.n),this.n=null);for(let t of this.t)this.l.release(t);this.t.length=0,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.o?.(),this.o=null}reset(){this.stop(),this.l.clear()}destroy(){this.destroyed||(this.stop(),this.i&&(this.i.disconnect(),this.i=null),this.m&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.destroyed=!0)}E(t){let n=this.ctx,r=t.size*t.scalar,o={a:1,b:0,c:0,d:1};for(let l of this.e)if(l.getTransformValues){let u=l.getTransformValues(t);u.a!==void 0&&(o.a=u.a),u.b!==void 0&&(o.b=u.b),u.c!==void 0&&(o.c=u.c),u.d!==void 0&&(o.d=u.d)}let a=this.e.find(l=>l.id==="roll")?.getDarkenAmount(t)??0,s=a>0?_e(t.color,-a):t.color;n.save(),n.translate(t.position.x,t.position.y),n.rotate(t.rotate?.angle??0),n.transform(o.a??1,o.b??0,o.c??0,o.d??1,0,0),n.fillStyle=s,n.globalAlpha=t.opacity,n.beginPath();let c=K.get(t.shape);c?c.draw(n,t,r):K.get("square")?.draw(n,t,r),n.closePath(),n.fill(),n.restore()}T(){let t=document.createElement("canvas");return t.id=this.id,t.style.cssText=`
10
10
  position: fixed;
11
11
  top: 0;
12
12
  left: 0;
@@ -14,4 +14,4 @@
14
14
  height: 100%;
15
15
  pointer-events: none;
16
16
  z-index: ${this.f.zIndex};
17
- `,document.body.appendChild(t),t}R(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this.I);return}this.o=new ResizeObserver(this.I),this.p?this.o.observe(document.body):this.canvas.parentElement&&this.o.observe(this.canvas.parentElement)}v(){let t=ze();if(this.p)this.canvas.width=window.innerWidth*t,this.canvas.height=window.innerHeight*t;else{let n=this.canvas.getBoundingClientRect();this.canvas.width=n.width*t,this.canvas.height=n.height*t}this.ctx.scale(t,t)}};var Re=class{constructor(){this.e=[];this.C=[];this.u=[];this.s=null}addUpdater(t){this.e.some(n=>n.id===t.id)||this.e.push(t)}addMover(t){this.C.some(n=>n.id===t.id)||this.C.push(t)}addShapeDrawer(t){ne.register(t)}getUpdaters(){return Object.freeze([...this.e])}getMovers(){return Object.freeze([...this.C])}getShapeDrawer(t){return ne.get(t)}createContainer(t){let n=new W(t);return this.u.push(n),n}getDefaultContainer(){return(!this.s||this.s.destroyed)&&(this.s=new W,this.u.push(this.s)),this.s}destroyAll(){for(let t of this.u)t.destroy();this.u.length=0,this.s=null}get containerCount(){return this.u.length}},Qe=null;function et(){return Qe||(Qe=new Re),Qe}var he=new Map;function Et(e,t){let n=he.get(e);if(!n||n.destroyed){let r=e==="default"?{resize:!0,...t}:{canvas:e,resize:t?.resize??!1,...t};n=new W(r),he.set(e,n)}return n}function Ft(e){return{particleCount:e.particleCount??100,size:e.size??4,angle:e.angle??90,spread:e.spread??45,startVelocity:e.startVelocity??45,decay:e.decay??.94,gravity:e.gravity??1,drift:e.drift??0,flat:e.flat??!1,ticks:e.ticks??200,origin:e.origin??{x:.5,y:.5},colors:e.colors??void 0,shapes:e.shapes??void 0,scalar:e.scalar??1}}function F(e={}){if(e.disableForReducedMotion&&te())return Promise.resolve();try{return Et("default").fire(Ft(e))}catch{return null}}F.create=function(e,t={}){let n=Et(e,t),r=(i={})=>{if((i.disableForReducedMotion??t.disableForReducedMotion)&&te())return Promise.resolve();try{return n.fire(Ft(i))}catch{return null}};return r.reset=()=>{n.stop()},r};F.reset=function(){let e=he.get("default");e&&!e.destroyed&&e.stop()};F.fireworks=async function(e={}){let t={particleCount:30,spread:55,...e};await Promise.all([F({...t,angle:60,origin:{x:0,y:.65}}),F({...t,angle:120,origin:{x:1,y:.65}})])};F.schoolPride=function(e={}){let t=Date.now()+3e3,n=e.colors??["#bb0000","#ffffff"];function r(){F({particleCount:2,angle:60,spread:55,origin:{x:0,y:.6},colors:n,...e}),F({particleCount:2,angle:120,spread:55,origin:{x:1,y:.6},colors:n,...e}),Date.now()<t&&requestAnimationFrame(r)}r()};F.snow=function(e={}){let{duration:t=5e3,...n}=e,r=Date.now()+t;function i(){F({particleCount:1,startVelocity:0,ticks:300,gravity:.3,origin:{x:Math.random(),y:0},colors:["#ffffff","#f0f8ff","#e6f3ff"],shapes:["circle"],scalar:.8+Math.random()*.4,drift:Math.random()-.5,...n}),Date.now()<r&&requestAnimationFrame(i)}i()};F.burst=function(e,t={}){return F({particleCount:80,spread:360,startVelocity:30,decay:.92,scalar:1.2,origin:e,...t})};F.destroyAll=function(){for(let e of he.values())e.destroy();he.clear(),et().destroyAll()};F.getShapes=function(){return["square","circle","star","triangle","rectangle","diamond","heart","hexagon"]};
17
+ `,document.body.appendChild(t),t}F(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this.I);return}this.i=new ResizeObserver(this.I),this.m?this.i.observe(document.body):this.canvas.parentElement&&this.i.observe(this.canvas.parentElement)}v(){let t=Le();if(this.m){let n=document.documentElement.clientWidth,r=document.documentElement.clientHeight;this.canvas.width=n*t,this.canvas.height=r*t,this.canvas.style.width=`${n}px`,this.canvas.style.height=`${r}px`}else{let n=this.canvas.getBoundingClientRect();this.canvas.width=n.width*t,this.canvas.height=n.height*t}this.ctx.scale(t,t)}};var Ie=class{constructor(){this.e=[];this.C=[];this.u=[];this.s=null}addUpdater(t){this.e.some(n=>n.id===t.id)||this.e.push(t)}addMover(t){this.C.some(n=>n.id===t.id)||this.C.push(t)}addShapeDrawer(t){K.register(t)}getUpdaters(){return Object.freeze([...this.e])}getMovers(){return Object.freeze([...this.C])}getShapeDrawer(t){return K.get(t)}createContainer(t){let n=new z(t);return this.u.push(n),n}getDefaultContainer(){return(!this.s||this.s.destroyed)&&(this.s=new z,this.u.push(this.s)),this.s}destroyAll(){for(let t of this.u)t.destroy();this.u.length=0,this.s=null}get containerCount(){return this.u.length}},Ke=null;function Qe(){return Ke||(Ke=new Ie),Ke}var ce=new Map;function At(e,t){let n=ce.get(e);if(!n||n.destroyed){let r=e==="default"?{resize:!0,...t}:{canvas:e,resize:t?.resize??!1,...t};n=new z(r),ce.set(e,n)}return n}function St(e){return{particleCount:e.particleCount??100,size:e.size??4,angle:e.angle??90,spread:e.spread??45,startVelocity:e.startVelocity??45,decay:e.decay??.94,gravity:e.gravity??1,drift:e.drift??0,flat:e.flat??!1,ticks:e.ticks??200,origin:e.origin??{x:.5,y:.5},colors:e.colors??void 0,shapes:e.shapes??void 0,scalar:e.scalar??1}}function x(e={}){if(e.disableForReducedMotion&&J())return Promise.resolve();try{return At("default").fire(St(e))}catch{return null}}x.create=function(e,t={}){let n=At(e,t),r=(o={})=>{if((o.disableForReducedMotion??t.disableForReducedMotion)&&J())return Promise.resolve();try{return n.fire(St(o))}catch{return null}};return r.reset=()=>{n.stop()},r};x.reset=function(){let e=ce.get("default");e&&!e.destroyed&&e.stop()};x.fireworks=async function(e={}){let t={particleCount:30,spread:55,...e};await Promise.all([x({...t,angle:60,origin:{x:0,y:.65}}),x({...t,angle:120,origin:{x:1,y:.65}})])};x.schoolPride=function(e={}){let t=Date.now()+3e3,n=e.colors??["#bb0000","#ffffff"];function r(){x({particleCount:2,angle:60,spread:55,origin:{x:0,y:.6},colors:n,...e}),x({particleCount:2,angle:120,spread:55,origin:{x:1,y:.6},colors:n,...e}),Date.now()<t&&requestAnimationFrame(r)}r()};x.snow=function(e={}){let{duration:t=5e3,...n}=e,r=Date.now()+t;function o(){x({particleCount:1,startVelocity:0,ticks:300,gravity:.3,origin:{x:Math.random(),y:0},colors:["#ffffff","#f0f8ff","#e6f3ff"],shapes:["circle"],scalar:.8+Math.random()*.4,drift:Math.random()-.5,...n}),Date.now()<r&&requestAnimationFrame(o)}o()};x.burst=function(e,t={}){return x({particleCount:80,spread:360,startVelocity:30,decay:.92,scalar:1.2,origin:e,...t})};x.destroyAll=function(){for(let e of ce.values())e.destroy();ce.clear(),Qe().destroyAll()};x.getShapes=function(){return["square","circle","star","triangle","rectangle","diamond","heart","hexagon"]};var et={rainbow:q,pride:["#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],christmas:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],halloween:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],pastel:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF"],neon:["#FF00FF","#00FFFF","#FF0080","#80FF00","#FF8000"],gold:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],silver:["#C0C0C0","#A8A8A8","#D3D3D3","#DCDCDC","#E8E8E8"],hearts:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],ocean:["#006994","#00CED1","#20B2AA","#48D1CC","#87CEEB"]},G={celebration:["🎉","🎊","🥳","✨","🎈"],hearts:["❤️","💕","💖","💗","💓","💘"],stars:["⭐","🌟","✨","💫","⚡"],money:["💰","💵","💸","🤑","💎"],christmas:["🎄","🎅","🎁","❄️","⭐"],halloween:["🎃","👻","🦇","🕷️","💀"],birthday:["🎂","🎁","🎈","🎉","🥳"],food:["🍕","🍔","🍟","🌭","🍿"]},Te={default:{name:"default",description:"Default balanced confetti burst with realistic paper physics",options:{particleCount:60,particle:{shapes:["square","rectangle","circle"],size:[6,14],depth3D:.6,tilt:[-30,30]},physics:{gravity:.25,drag:.035,wobble:!0,wobbleSpeed:1.5}}},celebration:{name:"celebration",description:"Big celebration with lots of colorful confetti and realistic movement",options:{particleCount:120,particle:{colors:[...q],shapes:["square","rectangle","circle","star"],size:[8,16],lifespan:5e3,depth3D:.7,tilt:[-35,35]},direction:{direction:"radial",spread:360,velocity:[30,55]},physics:{gravity:.22,drag:.04,wobble:!0,wobbleSpeed:2,windVariation:.03}}},firework:{name:"firework",description:"Firework-style explosion with secondary bursts",options:{mode:"firework",particleCount:80,particle:{colors:[...et.neon],shapes:["circle","star"],size:[4,8],trail:{enabled:!0,length:8,fade:.6},glow:{enabled:!0,blur:8,intensity:.7}},firework:{secondaryExplosions:!0,burstCount:80}}},snow:{name:"snow",description:"Gentle falling snowflakes",options:{mode:"snow",particleCount:150,particle:{colors:["#FFFFFF","#F0F8FF","#E0FFFF"],shapes:["circle"],size:[3,8],lifespan:8e3,opacity:[.6,1]},physics:{gravity:.05,wind:.3,windVariation:.2,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:150}}},rain:{name:"rain",description:"Rainfall effect",options:{mode:"rain",particleCount:200,particle:{colors:["#6CA0DC","#4A90D9","#2E7BB9"],shapes:["line"],size:[2,4],lifespan:2e3},physics:{gravity:.8,wind:.1},direction:{direction:"down",spread:10,velocity:[30,50]},continuous:{recycle:!0}}},sparkle:{name:"sparkle",description:"Sparkling stars with glow effect",options:{particleCount:40,particle:{colors:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],shapes:["star"],size:[6,12],glow:{enabled:!0,blur:15,intensity:.8}},physics:{gravity:.1},direction:{direction:"radial",spread:360,velocity:[30,60]}}},confetti:{name:"confetti",description:"Classic confetti falling with realistic paper flutter",options:{mode:"continuous",particleCount:200,particle:{shapes:["square","rectangle"],size:[6,14],depth3D:.8,tilt:[-40,40],lifespan:6e3},physics:{gravity:.18,drag:.045,wind:.08,windVariation:.04,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:200},spawnArea:{x:0,y:0,width:1920,height:0}}},emoji:{name:"emoji",description:"Emoji celebration",options:{particleCount:30,particle:{images:G.celebration.map(e=>({src:e,isEmoji:!0,scale:1.5})),size:[20,30],lifespan:4e3},direction:{direction:"up",spread:60,velocity:[20,35]}}},hearts:{name:"hearts",description:"Floating hearts",options:{particleCount:50,particle:{colors:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],shapes:["heart"],size:[12,20],lifespan:5e3},physics:{gravity:-.1,wobble:!0},direction:{direction:"up",spread:90,velocity:[10,20]}}},stars:{name:"stars",description:"Shooting stars",options:{particleCount:60,particle:{colors:["#FFD700","#FFFFFF"],shapes:["star"],size:[8,16],trail:{enabled:!0,length:12,fade:.4}},direction:{direction:"radial",spread:360,velocity:[30,60]}}},money:{name:"money",description:"Money rain",options:{particleCount:40,particle:{colors:["#85BB65","#228B22","#32CD32"],images:G.money.map(e=>({src:e,isEmoji:!0})),size:[20,30],lifespan:4e3},physics:{gravity:.15,wobble:!0}}},pride:{name:"pride",description:"Pride rainbow celebration",options:{particleCount:100,particle:{colors:[...et.pride],shapes:["square","rectangle","heart"],size:[10,16]},direction:{direction:"radial",spread:360,velocity:[25,45]}}},christmas:{name:"christmas",description:"Christmas celebration",options:{particleCount:80,particle:{colors:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],shapes:["star","circle"],size:[8,14],images:G.christmas.map(e=>({src:e,isEmoji:!0}))}}},halloween:{name:"halloween",description:"Spooky Halloween",options:{particleCount:60,particle:{colors:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],shapes:["circle","star"],images:G.halloween.map(e=>({src:e,isEmoji:!0})),size:[15,25]},physics:{gravity:.2,wobble:!0}}},newYear:{name:"newYear",description:"New Year celebration with fireworks",options:{mode:"firework",particleCount:100,particle:{colors:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00","#C0C0C0","#A8A8A8"],shapes:["star","circle"],size:[6,12],trail:{enabled:!0,length:10},glow:{enabled:!0,blur:12}},firework:{secondaryExplosions:!0,burstCount:100}}},birthday:{name:"birthday",description:"Birthday party celebration",options:{particleCount:80,particle:{colors:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF","#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],shapes:["star","circle","heart"],images:G.birthday.map(e=>({src:e,isEmoji:!0})),size:[12,20],lifespan:5e3},direction:{direction:"up",spread:80,velocity:[25,45]}}}};function wn(e){let t=Te[e];if(!t)throw new Error(`Preset "${e}" not found. Available presets: ${Object.keys(Te).join(", ")}`);return t}function Pn(){return Object.keys(Te)}function Ot(e){let{path:t,matrix:n,fillColor:r,strokeColor:o,strokeWidth:i}=e,a=In(t);return{type:"path",path:t,matrix:n?[...n]:void 0,fillColor:r,strokeColor:o,strokeWidth:i,bounds:a}}function tt(e){let{text:t,scalar:n=1,color:r,fontFamily:o="serif",fontWeight:i="normal",fontStyle:a="normal"}=e;return{type:"text",text:t,scalar:n,color:r,fontFamily:o,fontWeight:String(i),fontStyle:a}}async function Dt(e){let{src:t,scalar:n=1}=e;return typeof t!="string"?{type:"text",text:"",scalar:n,fontFamily:`url(${t.src})`}:(await Tn(t),{type:"text",text:"",scalar:n,fontFamily:`url(${t})`,color:void 0})}function Mt(e,t={}){return e.map(n=>tt({...t,text:n}))}function In(e){let t=e.match(/-?\d*\.?\d+/g);if(!t||t.length<2)return{minX:-1,minY:-1,maxX:1,maxY:1};let n=1/0,r=1/0,o=-1/0,i=-1/0;for(let a=0;a<t.length-1;a+=2){let s=parseFloat(t[a]),c=parseFloat(t[a+1]);!isNaN(s)&&!isNaN(c)&&(n=Math.min(n,s),r=Math.min(r,c),o=Math.max(o,s),i=Math.max(i,c))}return isFinite(n)?{minX:n,minY:r,maxX:o,maxY:i}:{minX:-1,minY:-1,maxX:1,maxY:1}}function Tn(e){return new Promise((t,n)=>{let r=new Image;r.crossOrigin="anonymous",r.onload=()=>t(r),r.onerror=()=>n(new Error(`Failed to load image: ${e}`)),r.src=e})}
@@ -0,0 +1,9 @@
1
+ "use strict";var ReactConfettiBurst=(()=>{var k=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var we=(n,e)=>{for(var t in e)k(n,t,{get:e[t],enumerable:!0})},Ce=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ye(e))!Pe.call(n,i)&&i!==t&&k(n,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return n};var _e=n=>Ce(k({},"__esModule",{value:!0}),n);var De={};we(De,{confetti:()=>u,default:()=>Te});var ze=Math.PI*2,xe=Math.PI/180,ne=1e3/60;function l(){if(typeof crypto<"u"&&crypto.getRandomValues){let n=new Uint32Array(1);return crypto.getRandomValues(n),n[0]/4294967296}return Math.random()}function P(n){return n*xe}function p(n,e,t){return Math.min(Math.max(n,e),t)}function A(n,e){let t=Math.max(0,n-e),r=t/ne;return Object.freeze({value:t,factor:r})}function ie(n){if(typeof n!="string"||n.length>50)return null;let e=n.trim().toLowerCase();if(e.startsWith("#")){let r=e.slice(1);if(!/^[0-9a-f]+$/.test(r))return null;let i,a,o,s=255;if(r.length===3)i=parseInt(r[0]+r[0],16),a=parseInt(r[1]+r[1],16),o=parseInt(r[2]+r[2],16);else if(r.length===6)i=parseInt(r.slice(0,2),16),a=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16);else if(r.length===8)i=parseInt(r.slice(0,2),16),a=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16),s=parseInt(r.slice(6,8),16);else return null;return{r:i,g:a,b:o,a:s/255}}let t=e.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);return t?{r:p(parseInt(t[1],10),0,255),g:p(parseInt(t[2],10),0,255),b:p(parseInt(t[3],10),0,255),a:t[4]!==void 0?p(parseFloat(t[4]),0,1):1}:null}function U(n,e){let t=ie(n);if(!t)return n;let{r,g:i,b:a,a:o}=t,s=p(r+e,0,255),c=p(i+e,0,255),d=p(a+e,0,255);return o<1?`rgba(${Math.round(s)}, ${Math.round(c)}, ${Math.round(d)}, ${o})`:`rgb(${Math.round(s)}, ${Math.round(c)}, ${Math.round(d)})`}function g(){if(typeof window>"u")return!1;try{return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}catch{return!1}}var Me=0;function b(){return++Me}function w(n){if(n.length===0)return;let e=Math.floor(l()*n.length);return n[e]}function C(n){return typeof requestAnimationFrame<"u"?requestAnimationFrame(n):setTimeout(n,ne)}function F(n){typeof cancelAnimationFrame<"u"?cancelAnimationFrame(n):clearTimeout(n)}function V(){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,2)}var ae=Object.freeze(["#26ccff","#a25afd","#ff5e7e","#88ff5a","#fcff42","#ffa62d","#ff36ff"]),Re=Object.freeze(["square","circle"]),_=Math.PI*2,x=class n{constructor(e,t,r,i,a,o,s,c,d,f,T,y,D,O,z,E,S){this.id=e,this.position=t,this.velocity=r,this.angle2D=i,this.gravity=a,this.drift=o,this.decay=s,this.wobble=c,this.tilt=d,this.roll=f,this.rotate=T,this.color=y,this.shape=D,this.size=O,this.scalar=z,this.flat=E,this.tick=0,this.totalTicks=S,this.destroyed=!1,this.opacity=1}static create(e,t,r={}){let{angle:i=90,spread:a=45,startVelocity:o=45,decay:s=.94,gravity:c=1,drift:d=0,flat:f=!1,ticks:T=200,origin:y={x:.5,y:.5},colors:D=ae,shapes:O=Re,scalar:z=1,size:E=4}=r,S={x:y.x*e,y:y.y*t},de=P(i),re=P(a),ue=-de+(.5*re-l()*re),fe=o*.5+l()*o,he={angle:l()*_,angleSpeed:l()*.1+.05,moveSpeed:-15+l()*30,distance:25+l()*15},pe={value:l()*_,sinDirection:l()>=.5?1:-1,cosDirection:l()>=.5?1:-1,speed:(l()*.4+.3)*(l()>.5?1:-1),enable:!f},me={angle:l()*_,speed:(15+l()*10)/60,horizontal:l()>.3,vertical:l()>.7,enable:!f},ge={angle:l()*_,speed:(l()*2-1)*.1,enable:!f},ve=w(D)??ae[0],be=w(O)??"square";return new n(b(),S,fe,ue,c*3,d,s,he,pe,me,ge,ve,be,E,z,f,T)}get progress(){return this.tick/this.totalTicks}get computedSize(){return this.size*this.scalar}destroy(){this.destroyed=!0}clone(e){let t=Object.create(n.prototype);return Object.assign(t,this,e),t}},M=class{constructor(e=1e3){this.pool=[];this.maxSize=e}acquire(e,t,r){let i=this.pool.pop();return i?this.resetParticle(i,e,t,r):x.create(e,t,r)}release(e){this.pool.length<this.maxSize&&(e.destroyed=!0,this.pool.push(e))}clear(){this.pool.length=0}get size(){return this.pool.length}resetParticle(e,t,r,i){let a=x.create(t,r,i);return Object.assign(e,a,{id:e.id}),e.destroyed=!1,e}};var h=Math.PI*2,q=class{constructor(){this.id="base"}init(e){}isEnabled(e){return!e.destroyed}update(e,t){if(e.destroyed)return;let r=Math.cos(e.angle2D)*e.velocity,i=Math.sin(e.angle2D)*e.velocity;e.position.x+=r*t.factor+e.drift*t.factor,e.position.y+=i*t.factor+e.gravity*t.factor,e.velocity*=e.decay,e.tick++;let a=e.tick/e.totalTicks;e.opacity=1-Math.pow(a,2),e.tick>=e.totalTicks&&(e.destroyed=!0)}},$=class{constructor(){this.id="wobble"}init(e){e.wobble||(e.wobble={angle:Math.random()*h,angleSpeed:Math.random()*.1+.05,moveSpeed:-15+Math.random()*30,distance:25+Math.random()*15})}isEnabled(e){return!e.destroyed&&!e.flat&&!!e.wobble}update(e,t){if(!this.isEnabled(e))return;let r=e.wobble;r.angle+=r.angleSpeed*t.factor,r.angle>h&&(r.angle-=h);let i=Math.cos(r.angle)*r.distance*.1;e.position.x+=i*t.factor}},L=class{constructor(){this.id="tilt"}init(e){e.tilt||(e.tilt={value:Math.random()*h,sinDirection:Math.random()>=.5?1:-1,cosDirection:Math.random()>=.5?1:-1,speed:(Math.random()*.4+.3)*(Math.random()>.5?1:-1),enable:!e.flat})}isEnabled(e){return!e.destroyed&&e.tilt?.enable===!0}update(e,t){if(!this.isEnabled(e))return;let r=e.tilt;r.value+=r.speed*.01*t.factor,r.value>h?r.value-=h:r.value<0&&(r.value+=h)}getTransformValues(e){if(!e.tilt?.enable)return{};let t=e.tilt;return{b:Math.cos(t.value)*t.cosDirection*.5,c:Math.sin(t.value)*t.sinDirection*.5}}},j=class{constructor(){this.id="roll"}init(e){e.roll||(e.roll={angle:Math.random()*h,speed:(15+Math.random()*10)/60,horizontal:Math.random()>.3,vertical:Math.random()>.7,enable:!e.flat})}isEnabled(e){return!e.destroyed&&e.roll?.enable===!0}update(e,t){if(!this.isEnabled(e))return;let r=e.roll;r.angle+=r.speed*t.factor,r.angle>h&&(r.angle-=h)}getTransformValues(e){if(!e.roll?.enable)return{};let t=e.roll;return{a:t.horizontal?Math.abs(Math.cos(t.angle)):void 0,d:t.vertical?Math.abs(Math.sin(t.angle)):void 0}}getDarkenAmount(e){if(!e.roll?.enable)return 0;let t=e.roll;return!t.horizontal&&!t.vertical?0:(t.horizontal?Math.cos(t.angle):Math.sin(t.angle))<0?25:0}},B=class{constructor(){this.id="rotate"}init(e){e.rotate||(e.rotate={angle:Math.random()*h,speed:(Math.random()*2-1)*.1,enable:!e.flat})}isEnabled(e){return!e.destroyed&&e.rotate?.enable===!0}update(e,t){if(!this.isEnabled(e))return;let r=e.rotate;r.angle+=r.speed*t.factor,r.angle>h?r.angle-=h:r.angle<0&&(r.angle+=h)}},H=class{constructor(){this.id="opacity"}init(e){e.opacity=1}isEnabled(e){return!e.destroyed}update(e,t){if(!this.isEnabled(e))return;let r=e.tick/e.totalTicks;e.opacity=1-Math.pow(r,2)}};function oe(){return[new q,new $,new L,new j,new B,new H]}var se=Math.PI*2,W=class{constructor(){this.type="circle"}draw(e,t,r){let i=t.flat?1:.6+Math.sin(t.wobble.angle)*.4;e.ellipse(0,0,r*i,r*(1-i*.3),t.tilt?.value??0,0,se)}},N=class{constructor(){this.type="square"}draw(e,t,r){let i=t.flat?0:Math.sin(t.wobble.angle)*r*.3;e.moveTo(-r+i,-r),e.lineTo(r+i,-r*.5),e.lineTo(r-i,r),e.lineTo(-r-i,r*.5)}},G=class{constructor(){this.type="rectangle"}draw(e,t,r){let i=r*1.5,a=r*.6,o=t.flat?0:Math.sin(t.wobble.angle)*a*.2;e.moveTo(-i+o,-a),e.lineTo(i+o,-a*.5),e.lineTo(i-o,a),e.lineTo(-i-o,a*.5)}},X=class{constructor(){this.type="star"}draw(e,t,r){let i=r,a=r*.5,o=5,s=Math.PI/o,c=-Math.PI/2;e.moveTo(0,-i);for(let d=0;d<o;d++)e.lineTo(Math.cos(c)*i,Math.sin(c)*i),c+=s,e.lineTo(Math.cos(c)*a,Math.sin(c)*a),c+=s}},Y=class{constructor(){this.type="triangle"}draw(e,t,r){let i=r*Math.sqrt(3)/2;e.moveTo(0,-i),e.lineTo(-r,i),e.lineTo(r,i)}},J=class{constructor(){this.type="diamond"}draw(e,t,r){e.moveTo(0,-r),e.lineTo(r*.6,0),e.lineTo(0,r),e.lineTo(-r*.6,0)}},K=class{constructor(){this.type="heart"}draw(e,t,r){let a=-r*.3,o=r*.3;e.moveTo(0,a+o),e.bezierCurveTo(0-r,a,0-r,a-o*2,0,a-o),e.bezierCurveTo(0+r,a-o*2,0+r,a,0,a+o)}},Q=class{constructor(){this.type="hexagon"}draw(e,t,r){let a=se/6;for(let o=0;o<6;o++){let s=a*o-Math.PI/2,c=Math.cos(s)*r,d=Math.sin(s)*r;o===0?e.moveTo(c,d):e.lineTo(c,d)}}},Z=class{constructor(){this.drawers=new Map;this.register(new W),this.register(new N),this.register(new G),this.register(new X),this.register(new Y),this.register(new J),this.register(new K),this.register(new Q)}register(e){this.drawers.set(e.type,e)}get(e){return this.drawers.get(e)}has(e){return this.drawers.has(e)}getTypes(){return Array.from(this.drawers.keys())}unregister(e){return this.drawers.delete(e)}clear(){this.drawers.clear()}},v=new Z;var m=class{constructor(e={}){this.destroyed=!1;this._particles=[];this._animationId=null;this._lastTimestamp=0;this._resolvePromise=null;this._isOwnCanvas=!1;this._resizeObserver=null;this._animate=e=>{if(this.destroyed)return;let t=A(e,this._lastTimestamp);this._lastTimestamp=e,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let r=!1,i=[];for(let a=0;a<this._particles.length;a++){let o=this._particles[a];if(o.destroyed){i.push(a);continue}for(let s of this._updaters)s.isEnabled(o)&&s.update(o,t);if(o.destroyed){i.push(a);continue}r=!0,this._drawParticle(o)}for(let a=i.length-1;a>=0;a--){let o=i[a],s=this._particles[o];this._pool.release(s),this._particles.splice(o,1)}r?this._animationId=C(this._animate):(this._animationId=null,this._resolvePromise?.(),this._resolvePromise=null)};this._handleResize=()=>{this._updateCanvasSize()};this.id=`confetti-${b()}`,this._options={canvas:e.canvas,resize:e.resize??!0,zIndex:e.zIndex??100,disableForReducedMotion:e.disableForReducedMotion??!1},e.canvas?this.canvas=e.canvas:(this.canvas=this._createCanvas(),this._isOwnCanvas=!0);let t=this.canvas.getContext("2d",{alpha:!0,desynchronized:!0});if(!t)throw new Error("Failed to get 2D canvas context");this.ctx=t,this._updaters=oe(),this._pool=new M(500),this._options.resize&&this._setupResizeHandling(),this._updateCanvasSize()}get particles(){return this._particles}async fire(e={}){if(this._options.disableForReducedMotion&&g())return Promise.resolve();if(this.destroyed)throw new Error("Cannot fire on destroyed container");let t=e.particleCount??100,r=this.canvas.width,i=this.canvas.height;for(let a=0;a<t;a++){let o=this._pool.acquire(r,i,e);for(let s of this._updaters)s.init(o);this._particles.push(o)}return this._animationId?new Promise(a=>{let o=this._resolvePromise;this._resolvePromise=()=>{o?.(),a()}}):new Promise(a=>{this._resolvePromise=a,this._lastTimestamp=performance.now(),this._animationId=C(this._animate)})}stop(){this._animationId&&(F(this._animationId),this._animationId=null);for(let e of this._particles)this._pool.release(e);this._particles.length=0,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this._resolvePromise?.(),this._resolvePromise=null}reset(){this.stop(),this._pool.clear()}destroy(){this.destroyed||(this.stop(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),this._isOwnCanvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.destroyed=!0)}_drawParticle(e){let t=this.ctx,r=e.size*e.scalar,i={a:1,b:0,c:0,d:1};for(let d of this._updaters)if(d.getTransformValues){let f=d.getTransformValues(e);f.a!==void 0&&(i.a=f.a),f.b!==void 0&&(i.b=f.b),f.c!==void 0&&(i.c=f.c),f.d!==void 0&&(i.d=f.d)}let o=this._updaters.find(d=>d.id==="roll")?.getDarkenAmount(e)??0,s=o>0?U(e.color,-o):e.color;t.save(),t.translate(e.position.x,e.position.y),t.rotate(e.rotate?.angle??0),t.transform(i.a??1,i.b??0,i.c??0,i.d??1,0,0),t.fillStyle=s,t.globalAlpha=e.opacity,t.beginPath();let c=v.get(e.shape);c?c.draw(t,e,r):v.get("square")?.draw(t,e,r),t.closePath(),t.fill(),t.restore()}_createCanvas(){let e=document.createElement("canvas");return e.id=this.id,e.style.cssText=`
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ pointer-events: none;
8
+ z-index: ${this._options.zIndex};
9
+ `,document.body.appendChild(e),e}_setupResizeHandling(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this._handleResize);return}this._resizeObserver=new ResizeObserver(this._handleResize),this._isOwnCanvas?this._resizeObserver.observe(document.body):this.canvas.parentElement&&this._resizeObserver.observe(this.canvas.parentElement)}_updateCanvasSize(){let e=V();if(this._isOwnCanvas){let t=document.documentElement.clientWidth,r=document.documentElement.clientHeight;this.canvas.width=t*e,this.canvas.height=r*e,this.canvas.style.width=`${t}px`,this.canvas.style.height=`${r}px`}else{let t=this.canvas.getBoundingClientRect();this.canvas.width=t.width*e,this.canvas.height=t.height*e}this.ctx.scale(e,e)}};var R=class{constructor(){this._updaters=[];this._movers=[];this._containers=[];this._defaultContainer=null}addUpdater(e){this._updaters.some(t=>t.id===e.id)||this._updaters.push(e)}addMover(e){this._movers.some(t=>t.id===e.id)||this._movers.push(e)}addShapeDrawer(e){v.register(e)}getUpdaters(){return Object.freeze([...this._updaters])}getMovers(){return Object.freeze([...this._movers])}getShapeDrawer(e){return v.get(e)}createContainer(e){let t=new m(e);return this._containers.push(t),t}getDefaultContainer(){return(!this._defaultContainer||this._defaultContainer.destroyed)&&(this._defaultContainer=new m,this._containers.push(this._defaultContainer)),this._defaultContainer}destroyAll(){for(let e of this._containers)e.destroy();this._containers.length=0,this._defaultContainer=null}get containerCount(){return this._containers.length}},ee=null;function te(){return ee||(ee=new R),ee}var I=new Map;function le(n,e){let t=I.get(n);if(!t||t.destroyed){let r=n==="default"?{resize:!0,...e}:{canvas:n,resize:e?.resize??!1,...e};t=new m(r),I.set(n,t)}return t}function ce(n){return{particleCount:n.particleCount??100,size:n.size??4,angle:n.angle??90,spread:n.spread??45,startVelocity:n.startVelocity??45,decay:n.decay??.94,gravity:n.gravity??1,drift:n.drift??0,flat:n.flat??!1,ticks:n.ticks??200,origin:n.origin??{x:.5,y:.5},colors:n.colors??void 0,shapes:n.shapes??void 0,scalar:n.scalar??1}}function u(n={}){if(n.disableForReducedMotion&&g())return Promise.resolve();try{return le("default").fire(ce(n))}catch{return null}}u.create=function(n,e={}){let t=le(n,e),r=(i={})=>{if((i.disableForReducedMotion??e.disableForReducedMotion)&&g())return Promise.resolve();try{return t.fire(ce(i))}catch{return null}};return r.reset=()=>{t.stop()},r};u.reset=function(){let n=I.get("default");n&&!n.destroyed&&n.stop()};u.fireworks=async function(n={}){let e={particleCount:30,spread:55,...n};await Promise.all([u({...e,angle:60,origin:{x:0,y:.65}}),u({...e,angle:120,origin:{x:1,y:.65}})])};u.schoolPride=function(n={}){let e=Date.now()+3e3,t=n.colors??["#bb0000","#ffffff"];function r(){u({particleCount:2,angle:60,spread:55,origin:{x:0,y:.6},colors:t,...n}),u({particleCount:2,angle:120,spread:55,origin:{x:1,y:.6},colors:t,...n}),Date.now()<e&&requestAnimationFrame(r)}r()};u.snow=function(n={}){let{duration:e=5e3,...t}=n,r=Date.now()+e;function i(){u({particleCount:1,startVelocity:0,ticks:300,gravity:.3,origin:{x:Math.random(),y:0},colors:["#ffffff","#f0f8ff","#e6f3ff"],shapes:["circle"],scalar:.8+Math.random()*.4,drift:Math.random()-.5,...t}),Date.now()<r&&requestAnimationFrame(i)}i()};u.burst=function(n,e={}){return u({particleCount:80,spread:360,startVelocity:30,decay:.92,scalar:1.2,origin:n,...e})};u.destroyAll=function(){for(let n of I.values())n.destroy();I.clear(),te().destroyAll()};u.getShapes=function(){return["square","circle","star","triangle","rectangle","diamond","heart","hexagon"]};var Te=u;return _e(De);})();
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var Te=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#A8D8EA","#FF9A8B","#88D8B0"],ue={gravity:.25,drag:.035,friction:.985,rotationSpeed:1.5,wind:0,windVariation:.02,tumble:!0,decay:.99,bounce:0,floor:null,wobble:!0,wobbleSpeed:1.5,flutter:!0,flutterSpeed:2.5,flutterIntensity:.4,airResistance:.03,swayAmplitude:15,swayFrequency:2},de={direction:"up",spread:55,velocity:[25,50],velocityDecay:.92},fe={colors:Te,shapes:["square","rectangle","circle"],size:[6,14],opacity:[.85,1],lifespan:4e3,fadeOut:!0,scaleDown:!1,spin:!0,spinSpeed:[-15,15],tilt:[-30,30],depth3D:.6,aspectRatio:[.5,1.5],shimmer:!0},W={enabled:!1,length:10,fade:.5,width:.5},xe={enabled:!1,blur:10,color:null,intensity:.5},et={recycle:!1,numberOfPieces:200,spawnRate:50,run:!0,tweenDuration:5e3},tt={secondaryExplosions:!0,burstCount:80,burstDelay:500,spread:360,launchHeight:.6,rocketColors:["#ffd700","#ff6b35","#ff0000"],burstColors:["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],trailLength:10,riseDuration:1e3,showRocket:!0},Re={width:null,height:null,autoResize:!0,resizeDebounce:100,frameRate:null,pixelRatio:null,useWorker:!1,useOffscreen:!1};var B={particleCount:50,particle:fe,physics:ue,direction:de,mode:"burst",easing:"easeOut",zIndex:9999,autoCleanup:!0,scalar:1,drift:0,flat:!1},Ee={up:90,down:270,left:180,right:0},T={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,TWO_PI:Math.PI*2,HALF_PI:Math.PI/2},xt={linear:e=>e,easeIn:e=>e*e*e,easeOut:e=>1-Math.pow(1-e,3),easeInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,bounce:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,elastic:e=>{let t=2*Math.PI/3;return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*t)+1},back:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),circ:e=>Math.sqrt(1-Math.pow(e-1,2)),expo:e=>e===1?1:1-Math.pow(2,-10*e)};var te={r:0,g:0,b:0,a:0},V={MAX_PARTICLES:500,FRAME_BUDGET:16.67,MIN_OPACITY:.01,MIN_SIZE:.5,MAX_DPR:2},nt=100,Fe=5,rt=.5,O={rainbow:Te,pride:["#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],christmas:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],halloween:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],pastel:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF"],neon:["#FF00FF","#00FFFF","#FF0080","#80FF00","#FF8000"],gold:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],silver:["#C0C0C0","#A8A8A8","#D3D3D3","#DCDCDC","#E8E8E8"],hearts:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],ocean:["#006994","#00CED1","#20B2AA","#48D1CC","#87CEEB"]},ee={celebration:["🎉","🎊","🥳","✨","🎈"],hearts:["❤️","💕","💖","💗","💓","💘"],stars:["⭐","🌟","✨","💫","⚡"],money:["💰","💵","💸","🤑","💎"],christmas:["🎄","🎅","🎁","❄️","⭐"],halloween:["🎃","👻","🦇","🕷️","💀"],birthday:["🎂","🎁","🎈","🎉","🥳"],food:["🍕","🍔","🍟","🌭","🍿"]},dn={default:{name:"default",description:"Default balanced confetti burst with realistic paper physics",options:{particleCount:60,particle:{shapes:["square","rectangle","circle"],size:[6,14],depth3D:.6,tilt:[-30,30]},physics:{gravity:.25,drag:.035,wobble:!0,wobbleSpeed:1.5}}},celebration:{name:"celebration",description:"Big celebration with lots of colorful confetti and realistic movement",options:{particleCount:120,particle:{colors:[...O.rainbow],shapes:["square","rectangle","circle","star"],size:[8,16],lifespan:5e3,depth3D:.7,tilt:[-35,35]},direction:{direction:"radial",spread:360,velocity:[30,55]},physics:{gravity:.22,drag:.04,wobble:!0,wobbleSpeed:2,windVariation:.03}}},firework:{name:"firework",description:"Firework-style explosion with secondary bursts",options:{mode:"firework",particleCount:80,particle:{colors:[...O.neon],shapes:["circle","star"],size:[4,8],trail:{enabled:!0,length:8,fade:.6},glow:{enabled:!0,blur:8,intensity:.7}},firework:{secondaryExplosions:!0,burstCount:80}}},snow:{name:"snow",description:"Gentle falling snowflakes",options:{mode:"snow",particleCount:150,particle:{colors:["#FFFFFF","#F0F8FF","#E0FFFF"],shapes:["circle"],size:[3,8],lifespan:8e3,opacity:[.6,1]},physics:{gravity:.05,wind:.3,windVariation:.2,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:150}}},rain:{name:"rain",description:"Rainfall effect",options:{mode:"rain",particleCount:200,particle:{colors:["#6CA0DC","#4A90D9","#2E7BB9"],shapes:["line"],size:[2,4],lifespan:2e3},physics:{gravity:.8,wind:.1},direction:{direction:"down",spread:10,velocity:[30,50]},continuous:{recycle:!0}}},sparkle:{name:"sparkle",description:"Sparkling stars with glow effect",options:{particleCount:40,particle:{colors:[...O.gold],shapes:["star"],size:[6,12],glow:{enabled:!0,blur:15,intensity:.8}},physics:{gravity:.1}}},confetti:{name:"confetti",description:"Classic confetti falling with realistic paper flutter",options:{mode:"continuous",particleCount:200,particle:{shapes:["square","rectangle"],size:[6,14],depth3D:.8,tilt:[-40,40],lifespan:6e3},physics:{gravity:.18,drag:.045,wind:.08,windVariation:.04,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:200},spawnArea:{x:0,y:0,width:typeof window<"u"?window.innerWidth:1920,height:0}}},emoji:{name:"emoji",description:"Emoji celebration",options:{particleCount:30,particle:{images:ee.celebration.map(e=>({src:e,isEmoji:!0,scale:1.5})),size:[20,30],lifespan:4e3},direction:{direction:"up",spread:60,velocity:[20,35]}}},hearts:{name:"hearts",description:"Floating hearts",options:{particleCount:50,particle:{colors:[...O.hearts],shapes:["heart"],size:[12,20],lifespan:5e3},physics:{gravity:-.1,wobble:!0},direction:{direction:"up",spread:90,velocity:[10,20]}}},stars:{name:"stars",description:"Shooting stars",options:{particleCount:60,particle:{colors:[...O.gold,"#FFFFFF"],shapes:["star"],size:[8,16],trail:{enabled:!0,length:12,fade:.4}},direction:{direction:"radial",spread:360,velocity:[30,60]}}},money:{name:"money",description:"Money rain",options:{particleCount:40,particle:{colors:["#85BB65","#228B22","#32CD32"],images:ee.money.map(e=>({src:e,isEmoji:!0})),size:[20,30],lifespan:4e3},physics:{gravity:.15,wobble:!0}}},pride:{name:"pride",description:"Pride rainbow celebration",options:{particleCount:100,particle:{colors:[...O.pride],shapes:["square","rectangle","heart"],size:[10,16]},direction:{direction:"radial",spread:360,velocity:[25,45]}}},christmas:{name:"christmas",description:"Christmas celebration",options:{particleCount:80,particle:{colors:[...O.christmas],shapes:["star","circle"],size:[8,14],images:ee.christmas.map(e=>({src:e,isEmoji:!0}))}}},halloween:{name:"halloween",description:"Spooky Halloween",options:{particleCount:60,particle:{colors:[...O.halloween],shapes:["circle","star"],images:ee.halloween.map(e=>({src:e,isEmoji:!0})),size:[15,25]},physics:{gravity:.2,wobble:!0}}},newYear:{name:"newYear",description:"New Year celebration with fireworks",options:{mode:"firework",particleCount:100,particle:{colors:[...O.gold,...O.silver],shapes:["star","circle"],size:[6,12],trail:{enabled:!0,length:10},glow:{enabled:!0,blur:12}},firework:{secondaryExplosions:!0,burstCount:100}}},birthday:{name:"birthday",description:"Birthday party celebration",options:{particleCount:80,particle:{colors:[...O.pastel,...O.rainbow],shapes:["star","circle","heart"],images:ee.birthday.map(e=>({src:e,isEmoji:!0})),size:[12,20],lifespan:5e3},direction:{direction:"up",spread:80,velocity:[25,45]}}}};function C(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function m(e,t){return e+C()*(t-e)}function Rt(e,t){return Math.floor(m(e,t+1))}function ne(e){if(e.length===0)throw new Error("Cannot pick from empty array");return e[Math.floor(C()*e.length)]}function _(e,t,n){return Math.min(Math.max(e,t),n)}function Et(e,t,n){return e+(t-e)*_(n,0,1)}function S(e){return e*T.DEG_TO_RAD}function Ft(e){return e*T.RAD_TO_DEG}function re(e){if(typeof e=="object"&&"r"in e)return{r:_(Math.round(e.r),0,255),g:_(Math.round(e.g),0,255),b:_(Math.round(e.b),0,255),a:_(e.a,0,1)};if(typeof e=="object"&&"type"in e)return re(e.colors[0]);let t=e.trim().toLowerCase();return t.startsWith("#")?At(t):t.startsWith("rgb")?Dt(t):St(t)}function At(e){let t=e.slice(1),n,r,i,o=1;switch(t.length){case 3:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),i=parseInt(t[2]+t[2],16);break;case 4:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),i=parseInt(t[2]+t[2],16),o=parseInt(t[3]+t[3],16)/255;break;case 6:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),i=parseInt(t.slice(4,6),16);break;case 8:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),i=parseInt(t.slice(4,6),16),o=parseInt(t.slice(6,8),16)/255;break;default:return te}return isNaN(n)||isNaN(r)||isNaN(i)||isNaN(o)?te:{r:n,g:r,b:i,a:o}}function Dt(e){let t=e.match(/rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/);return t?{r:_(parseInt(t[1],10),0,255),g:_(parseInt(t[2],10),0,255),b:_(parseInt(t[3],10),0,255),a:t[4]!==void 0?_(parseFloat(t[4]),0,1):1}:te}function St(e){let t={red:{r:255,g:0,b:0,a:1},green:{r:0,g:128,b:0,a:1},blue:{r:0,g:0,b:255,a:1},white:{r:255,g:255,b:255,a:1},black:{r:0,g:0,b:0,a:1},yellow:{r:255,g:255,b:0,a:1},cyan:{r:0,g:255,b:255,a:1},magenta:{r:255,g:0,b:255,a:1},orange:{r:255,g:165,b:0,a:1},purple:{r:128,g:0,b:128,a:1},pink:{r:255,g:192,b:203,a:1}};if(t[e])return t[e];if(typeof document<"u")try{let n=document.createElement("canvas");n.width=1,n.height=1;let r=n.getContext("2d");if(r){r.fillStyle=e,r.fillRect(0,0,1,1);let i=r.getImageData(0,0,1,1).data;return{r:i[0],g:i[1],b:i[2],a:i[3]/255}}}catch{}return te}function ie(e){return`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function pe(e,t){if(e==="custom"&&t!==void 0)return S(t);if(e==="radial")return C()*T.TWO_PI;let n=Ee[e];return S(n??90)}function Mt(e){let t=e.getBoundingClientRect();return{x:t.left+t.width/2,y:t.top+t.height/2}}function Ae(e){if(!e)return B;let t={...fe,...e.particle},n={...ue,...e.physics},r={...de,...e.direction};return{particleCount:e.particleCount??B.particleCount,particle:t,physics:n,direction:r,mode:e.mode??B.mode,spawnArea:e.spawnArea?{type:"rect",x:0,y:0,...e.spawnArea}:void 0,continuous:e.continuous,firework:e.firework,canvas:e.canvas,easing:e.easing??B.easing,zIndex:e.zIndex??B.zIndex,autoCleanup:e.autoCleanup??B.autoCleanup,scalar:e.scalar??B.scalar,drift:e.drift??B.drift,flat:e.flat??B.flat,onStart:e.onStart,onComplete:e.onComplete,onFrame:e.onFrame,onParticleCreate:e.onParticleCreate,onParticleDeath:e.onParticleDeath}}function $(){return typeof window<"u"&&typeof document<"u"}function it(e=2){return $()?Math.min(window.devicePixelRatio||1,e):1}function ot(){let e,t;return{promise:new Promise((r,i)=>{e=r,t=i}),resolve:e,reject:t}}var Ot=0;function j(e,t,n,r,i,o,a,s,c,l,u){let f=m(a[0],a[1]),h=m(s[0],s[1]),p=ne(i),A=typeof p=="string"?re(p):"type"in p?re(p.colors[0]):p,x=1+(C()-.5)*.3,R=Math.cos(n)*r*x,g=-Math.sin(n)*r*x,v;u?.images&&u.images.length>0&&(v=ne(u.images));let d=u?.tiltRange??[-30,30],P=u?.spinSpeedRange??[-15,15],E=u?.aspectRatioRange??[.5,1.5],I=m(E[0],E[1]);return{id:Ot++,x:e,y:t,vx:R,vy:g,size:f,originalSize:f,rotation:C()*T.TWO_PI,rotationSpeed:(C()-.5)*.3*l,color:A,shape:v?"custom":ne(o),opacity:h,originalOpacity:h,life:c,maxLife:c,active:!0,image:v,imageElement:null,trail:[],wobblePhase:C()*T.TWO_PI,wobbleSpeed:m(.8,2.5),tilt:S(m(d[0],d[1])),tiltSpeed:m(P[0],P[1])*.015,depth:u?.depth3D??.6,hasExploded:!1,data:{},flutterPhase:C()*T.TWO_PI,flutterSpeed:m(1.5,3.5),swayPhase:C()*T.TWO_PI,aspectRatio:I,angularVelocity:(C()-.5)*.4,scaleX:1,scaleY:1,shimmerPhase:C()*T.TWO_PI,currentDrag:m(.02,.05)}}function at(e,t,n,r,i,o,a){if(!e.active)return;let s=t*.05988;if(o?.enabled??W.enabled){let w=e.trail;w.unshift({x:e.x,y:e.y,opacity:e.opacity,size:e.size});let M=o?.length??W.length;w.length>M&&w.pop()}let c=e.vx,l=e.vy,u=e.tilt,f=c*c+l*l,h=u-u*u*u*.166667,p=1+h*.15;if(l+=n.gravity*p*s,(n.flutter??!0)&&f>1){let w=n.flutterSpeed??2.5,M=n.flutterIntensity??.4;e.flutterPhase+=w*.05*s;let L=e.flutterPhase,ce=(L-L*L*L*.166667)*M*s,It=1-u*u*.5;if(c+=ce*It,(h<0?-h:h)>.7){let Tt=ce<0?-ce:ce;l-=Tt*.3}}let x=n.swayAmplitude??15,R=n.swayFrequency??2;e.swayPhase+=R*.03*s;let g=e.swayPhase,v=(g-g*g*g*.166667)*x*.01*s;c+=v;let d=n.windVariation,P=n.wind+d*(Math.random()-.5);c+=P*s;let E=n.airResistance??.03,I=1-u*u*.5,z=I<0?-I:I,G=n.drag+z*E,k=f>0?Math.sqrt(f):0,q=Math.max(.9,1-G*k*.01)*n.friction*n.decay;if(c*=q,l*=q,e.x+=c*s,e.y+=l*s,e.vx=c,e.vy=l,n.tumble&&(e.angularVelocity=(e.angularVelocity+c*.001*s)*.98,e.rotation+=(e.rotationSpeed+e.angularVelocity)*s),e.tiltSpeed=(e.tiltSpeed+(Math.random()-.5)*.002*s)*.995,e.tilt=(e.tilt+e.tiltSpeed*s)%T.TWO_PI,n.wobble){let w=e.wobblePhase+n.wobbleSpeed*.1*s;e.wobblePhase=w;let M=1-w*w*.5,L=w-w*w*w*.166667;e.scaleX=.3+.7*(M<0?-M:M),e.scaleY=.3+.7*(L<0?-L:L)}if(e.shimmerPhase+=.1*s,n.floor!==null&&n.bounce>0&&a){let w=n.floor??a,M=e.size*.5;e.y+M>=w&&(e.y=w-M,e.vy=-e.vy*n.bounce,e.vx*=.85,e.rotationSpeed+=(Math.random()-.5)*.1)}e.life-=t;let Qe=1-e.life/e.maxLife;if(r){let w=Qe,M=w*w*(3-2*w);e.opacity=e.originalOpacity*(1-M*.9)}i&&(e.size=e.originalSize*(1-Qe*.5)),(e.life<=0||e.opacity<V.MIN_OPACITY||e.size<V.MIN_SIZE)&&(e.active=!1)}function st(e,t,n){if(!t.active)return;let{x:r,y:i,size:o,rotation:a,color:s,shape:c,opacity:l,tilt:u,aspectRatio:f,scaleX:h,scaleY:p,shimmerPhase:A}=t;if(l<.02)return;let x=n?.trailConfig,R=n?.glowConfig;(x?.enabled??W.enabled)&&t.trail.length>0&&Bt(e,t,x??W),e.save();let g=R?.enabled??xe.enabled;g&&(e.shadowBlur=R?.blur??xe.blur,e.shadowColor=R?.color??ie(s)),e.translate(r,i),e.rotate(a+u),t.depth>0&&e.scale(h,p);let d=1+(A-Math.floor(A))*.3-.15,P=.7+.3*(h*p<0?-(h*p):h*p),E=l*s.a*P*(g?R?.intensity??1:1);if(E<.02){e.restore();return}e.globalAlpha=E>1?1:E;let I=s.r*d,z=s.g*d,G=s.b*d;if(e.fillStyle=`rgb(${I>255?255:I},${z>255?255:z},${G>255?255:G})`,t.image&&t.image.isEmoji)Wt(e,t.image.src,o*(t.image.scale??1));else if(t.imageElement)Gt(e,t.imageElement,o*(t.image?.scale??1));else if(c==="custom"&&n?.customDraw){let k={ctx:e,particle:t,progress:1-t.life/t.maxLife,elapsed:n.elapsed??0};n.customDraw(k)}else{let k=f??1;switch(c){case"square":case"rectangle":let Q=o*(c==="rectangle"?Math.max(1.5,k*1.5):Math.sqrt(k)),q=o/(c==="rectangle"?Math.max(1.5,k):Math.sqrt(k));e.fillRect(-Q*.5,-q*.5,Q,q);break;case"circle":e.beginPath(),e.arc(0,0,o*.5,0,T.TWO_PI),e.fill();break;case"triangle":kt(e,o);break;case"star":_t(e,o);break;case"line":zt(e,o);break;case"heart":Lt(e,o);break;case"diamond":Nt(e,o);break;case"hexagon":Ht(e,o);break;case"spiral":Ut(e,o,s);break;case"ribbon":qt(e,o);break;default:e.fillRect(-o*.5,-o*.5,o,o)}}e.restore()}function Bt(e,t,n){let r=n.fade??W.fade,i=n.width??W.width;e.save(),e.lineCap="round",e.lineJoin="round";for(let o=0;o<t.trail.length-1;o++){let a=t.trail[o],s=t.trail[o+1],c=a.opacity*Math.pow(r,o),l=a.size*i*Math.pow(r,o);c>.01&&l>.1&&(e.beginPath(),e.strokeStyle=ie({...t.color,a:c}),e.lineWidth=l,e.moveTo(a.x,a.y),e.lineTo(s.x,s.y),e.stroke())}e.restore()}function kt(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n,n),e.lineTo(-n,n),e.closePath(),e.fill()}function _t(e,t){let n=t/2,r=n*rt,i=Math.PI/Fe;e.beginPath();for(let o=0;o<Fe*2;o++){let a=o%2===0?n:r,s=o*i-T.HALF_PI,c=Math.cos(s)*a,l=Math.sin(s)*a;o===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath(),e.fill()}function zt(e,t){let n=t*2,r=t/4;e.fillRect(-n/2,-r/2,n,r)}function Lt(e,t){let n=t/30;e.save(),e.scale(n,n),e.beginPath(),e.moveTo(0,-8),e.bezierCurveTo(-10,-18,-25,-8,-15,5),e.lineTo(0,18),e.lineTo(15,5),e.bezierCurveTo(25,-8,10,-18,0,-8),e.closePath(),e.fill(),e.restore()}function Nt(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n*.6,0),e.lineTo(0,n),e.lineTo(-n*.6,0),e.closePath(),e.fill()}function Ht(e,t){let n=t/2;e.beginPath();for(let r=0;r<6;r++){let i=Math.PI/3*r-Math.PI/6,o=Math.cos(i)*n,a=Math.sin(i)*n;r===0?e.moveTo(o,a):e.lineTo(o,a)}e.closePath(),e.fill()}function Ut(e,t,n){e.strokeStyle=ie(n),e.lineWidth=t/8,e.lineCap="round",e.beginPath();for(let r=0;r<22;r++){let i=.35*r,o=(.2+1.5*i)*(t/20),a=o*Math.cos(i),s=o*Math.sin(i);r===0?e.moveTo(a,s):e.lineTo(a,s)}e.stroke()}function qt(e,t){let n=t,r=t/3,i=t/4;e.beginPath(),e.moveTo(-n/2,0),e.quadraticCurveTo(-n/4,-i,0,0),e.quadraticCurveTo(n/4,i,n/2,0),e.lineTo(n/2,r),e.quadraticCurveTo(n/4,r+i,0,r),e.quadraticCurveTo(-n/4,r-i,-n/2,r),e.closePath(),e.fill()}function Wt(e,t,n){e.font=`${n}px serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(t,0,0)}function Gt(e,t,n){let r=n/2;e.drawImage(t,-r,-r,n,n)}function lt(e){return e.filter(t=>t.active).length}var b=null,N=null,Y=0,oe=null,ct=[],Vt=500;function ut(e){ct.length<Vt&&(e.active=!1,e.trail.length=0,ct.push(e))}var De=360,$t=new Float32Array(De),jt=new Float32Array(De);for(let e=0;e<De;e++){let t=e*Math.PI/180;$t[e]=Math.sin(t),jt[e]=Math.cos(t)}function Yt(e,t){if(!$())throw new Error("ConfettiEngine requires a browser environment");let n={...Re,...t},r=n.pixelRatio??it(V.MAX_DPR);if(!b){if(b=document.createElement("canvas"),b.style.cssText=`
1
+ var X=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#A8D8EA","#FF9A8B","#88D8B0"],ae={gravity:1,drag:.035,friction:.99,rotationSpeed:1,wind:0,windVariation:.02,tumble:!0,decay:.99,bounce:0,floor:null,wobble:!0,wobbleSpeed:1.5,flutter:!0,flutterSpeed:2.5,flutterIntensity:.4,airResistance:.03,swayAmplitude:15,swayFrequency:2},se={direction:"up",spread:55,velocity:[25,50],velocityDecay:.92},le={colors:X,shapes:["square","rectangle","circle"],size:[6,14],opacity:[.85,1],lifespan:4e3,fadeOut:!0,scaleDown:!1,spin:!0,spinSpeed:[-15,15],tilt:[-30,30],depth3D:.6,aspectRatio:[.5,1.5],shimmer:!0},B={enabled:!1,length:10,fade:.5,width:.5},Pe={enabled:!1,blur:10,color:null,intensity:.5},Ke={recycle:!1,numberOfPieces:200,spawnRate:50,run:!0,tweenDuration:5e3},Qe={secondaryExplosions:!0,burstCount:80,burstDelay:500,spread:360,launchHeight:.6,rocketColors:["#ffd700","#ff6b35","#ff0000"],burstColors:["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],trailLength:10,riseDuration:1e3,showRocket:!0},Ie={width:null,height:null,autoResize:!0,resizeDebounce:100,frameRate:null,pixelRatio:null,useWorker:!1,useOffscreen:!1};var D={particleCount:50,particle:le,physics:ae,direction:se,mode:"burst",easing:"easeOut",zIndex:9999,autoCleanup:!0,scalar:1,drift:0,flat:!1},Te={up:90,down:270,left:180,right:0},I={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,TWO_PI:Math.PI*2,HALF_PI:Math.PI/2},g={SIN_TAYLOR_COEFF:.166667,COS_TAYLOR_COEFF:.5,FLUTTER_PHASE_SCALE:.05,SWAY_PHASE_SCALE:.03,SWAY_FORCE_SCALE:.01,GRAVITY_TILT_MODIFIER:.15,FLUTTER_AIR_CATCH_THRESHOLD:.7,FLUTTER_AIR_CATCH_MULTIPLIER:.3,ORIENTATION_OPACITY_BASE:.7,ORIENTATION_OPACITY_SCALE:.3,SHIMMER_RANGE:.3,SHIMMER_OFFSET:.15,MIN_OPACITY_THRESHOLD:.02,MIN_SIZE_THRESHOLD:.1,VELOCITY_VARIATION_RANGE:.3,ANGULAR_DAMPING:.98,TILT_DAMPING:.995};var Z={r:0,g:0,b:0,a:0},Fe={MAX_PARTICLES:500,FRAME_BUDGET:16.67,MIN_OPACITY:.01,MIN_SIZE:.5,MAX_DPR:2},et=100,xe=5,tt=.5;var It={linear:e=>e,easeIn:e=>e*e*e,easeOut:e=>1-Math.pow(1-e,3),easeInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,bounce:e=>e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375,elastic:e=>{let t=2*Math.PI/3;return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*t)+1},back:e=>1+2.70158*Math.pow(e-1,3)+1.70158*Math.pow(e-1,2),circ:e=>Math.sqrt(1-Math.pow(e-1,2)),expo:e=>e===1?1:1-Math.pow(2,-10*e)};function C(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function h(e,t){return e+C()*(t-e)}function Tt(e,t){return Math.floor(h(e,t+1))}function J(e){if(e.length===0)throw new Error("Cannot pick from empty array");return e[Math.floor(C()*e.length)]}function M(e,t,n){return Math.min(Math.max(e,t),n)}function Ft(e,t,n){return e+(t-e)*M(n,0,1)}function O(e){return e*I.DEG_TO_RAD}function xt(e){return e*I.RAD_TO_DEG}function K(e){if(typeof e=="object"&&"r"in e)return{r:M(Math.round(e.r),0,255),g:M(Math.round(e.g),0,255),b:M(Math.round(e.b),0,255),a:M(e.a,0,1)};if(typeof e=="object"&&"type"in e)return K(e.colors[0]);let t=e.trim().toLowerCase();return t.startsWith("#")?Et(t):t.startsWith("rgb")?Rt(t):At(t)}function Et(e){let t=e.slice(1),n,r,o,i=1;switch(t.length){case 3:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),o=parseInt(t[2]+t[2],16);break;case 4:n=parseInt(t[0]+t[0],16),r=parseInt(t[1]+t[1],16),o=parseInt(t[2]+t[2],16),i=parseInt(t[3]+t[3],16)/255;break;case 6:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16);break;case 8:n=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16),i=parseInt(t.slice(6,8),16)/255;break;default:return Z}return isNaN(n)||isNaN(r)||isNaN(o)||isNaN(i)?Z:{r:n,g:r,b:o,a:i}}function Rt(e){let t=e.match(/rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/);return t?{r:M(parseInt(t[1],10),0,255),g:M(parseInt(t[2],10),0,255),b:M(parseInt(t[3],10),0,255),a:t[4]!==void 0?M(parseFloat(t[4]),0,1):1}:Z}function At(e){let t={red:{r:255,g:0,b:0,a:1},green:{r:0,g:128,b:0,a:1},blue:{r:0,g:0,b:255,a:1},white:{r:255,g:255,b:255,a:1},black:{r:0,g:0,b:0,a:1},yellow:{r:255,g:255,b:0,a:1},cyan:{r:0,g:255,b:255,a:1},magenta:{r:255,g:0,b:255,a:1},orange:{r:255,g:165,b:0,a:1},purple:{r:128,g:0,b:128,a:1},pink:{r:255,g:192,b:203,a:1}};if(t[e])return t[e];if(typeof document<"u")try{let n=document.createElement("canvas");n.width=1,n.height=1;let r=n.getContext("2d");if(r){r.fillStyle=e,r.fillRect(0,0,1,1);let o=r.getImageData(0,0,1,1).data;return{r:o[0],g:o[1],b:o[2],a:o[3]/255}}}catch{}return Z}function Q(e){return`rgba(${e.r}, ${e.g}, ${e.b}, ${e.a})`}function ce(e,t){if(e==="custom"&&t!==void 0)return O(t);if(e==="radial")return C()*I.TWO_PI;let n=Te[e];return O(n??90)}function St(e){let t=e.getBoundingClientRect();return{x:t.left+t.width/2,y:t.top+t.height/2}}function Ee(e){if(!e)return D;let t={...le,...e.particle},n={...ae,...e.physics},r={...se,...e.direction};return{particleCount:e.particleCount??D.particleCount,particle:t,physics:n,direction:r,mode:e.mode??D.mode,spawnArea:e.spawnArea?{type:"rect",x:0,y:0,...e.spawnArea}:void 0,continuous:e.continuous,firework:e.firework,canvas:e.canvas,easing:e.easing??D.easing,zIndex:e.zIndex??D.zIndex,autoCleanup:e.autoCleanup??D.autoCleanup,scalar:e.scalar??D.scalar,drift:e.drift??D.drift,flat:e.flat??D.flat,onStart:e.onStart,onComplete:e.onComplete,onFrame:e.onFrame,onParticleCreate:e.onParticleCreate,onParticleDeath:e.onParticleDeath}}function z(){return typeof window<"u"&&typeof document<"u"}function nt(e=2){return z()?Math.min(window.devicePixelRatio||1,e):1}function rt(){let e,t;return{promise:new Promise((r,o)=>{e=r,t=o}),resolve:e,reject:t}}var Ot=0,ot=!1;function U(e,t,n,r,o,i,a,s,c,l,u){if(o.length===0)throw new Error("Colors array cannot be empty");if(i.length===0)throw new Error("Shapes array cannot be empty");if(a[0]>a[1])throw new Error("Invalid size range");if(s[0]>s[1])throw new Error("Invalid opacity range");let f=h(a[0],a[1]),m=h(s[0],s[1]),p=J(o),P=typeof p=="string"?K(p):"type"in p?K(p.colors[0]):p,F=1+(C()-.5)*g.VELOCITY_VARIATION_RANGE,T=Math.cos(n)*r*F,y=-Math.sin(n)*r*F,w;u?.images&&u.images.length>0&&(w=J(u.images));let d=u?.tiltRange??[-30,30],x=u?.spinSpeedRange??[-15,15],R=u?.aspectRatioRange??[.5,1.5],A=h(R[0],R[1]);return{id:Ot++,x:e,y:t,vx:T,vy:y,size:f,originalSize:f,rotation:C()*I.TWO_PI,rotationSpeed:(C()-.5)*.3*l,color:P,shape:w?"custom":J(i),opacity:m,originalOpacity:m,life:c,maxLife:c,active:!0,image:w,imageElement:null,trail:[],wobblePhase:C()*I.TWO_PI,wobbleSpeed:h(.8,2.5),tilt:O(h(d[0],d[1])),tiltSpeed:h(x[0],x[1])*.015,depth:u?.depth3D??.6,hasExploded:!1,data:{},flutterPhase:C()*I.TWO_PI,flutterSpeed:h(1.5,3.5),swayPhase:C()*I.TWO_PI,aspectRatio:A,angularVelocity:(C()-.5)*.4,scaleX:1,scaleY:1,shimmerPhase:C()*I.TWO_PI,currentDrag:h(.02,.05)}}function it(e,t,n,r,o,i,a){if(!e.active)return;let s=t*.05988;(i?.enabled??B.enabled)&&Dt(e,i??B),Mt(e,s,n),Ht(e,s,n),zt(e,t,n,r,o),n.floor!==null&&n.bounce>0&&a&&Ut(e,n,a),(e.life<=0||e.opacity<g.MIN_OPACITY_THRESHOLD||e.size<g.MIN_SIZE_THRESHOLD)&&(e.active=!1)}function Dt(e,t){let n=e.trail;n.unshift({x:e.x,y:e.y,opacity:e.opacity,size:e.size});let r=t.length??B.length;n.length>r&&n.pop()}function Mt(e,t,n){let r=e.vx,o=e.vy,i=e.tilt,a=r*r+o*o;_t(e,o,i,n,t),o=e.vy,Bt(e,r,o,i,a,n,t),r=e.vx,o=e.vy,Lt(e,r,n,t),r=e.vx,Nt(e,n,t),r=e.vx,kt(e,r,o,i,a,n),r=e.vx,o=e.vy,e.x+=r*t,e.y+=o*t}function _t(e,t,n,r,o){let a=1+(n-n*n*n*g.SIN_TAYLOR_COEFF)*g.GRAVITY_TILT_MODIFIER;e.vy=t+r.gravity*a*o}function Bt(e,t,n,r,o,i,a){if(!(i.flutter??!0)||o<=1)return;let c=i.flutterSpeed??2.5,l=i.flutterIntensity??.4;e.flutterPhase+=c*g.FLUTTER_PHASE_SCALE*a;let u=e.flutterPhase,m=(u-u*u*u*g.SIN_TAYLOR_COEFF)*l*a,p=1-r*r*g.COS_TAYLOR_COEFF;e.vx=t+m*p;let P=r-r*r*r*g.SIN_TAYLOR_COEFF;if((P<0?-P:P)>g.FLUTTER_AIR_CATCH_THRESHOLD){let T=m<0?-m:m;e.vy=n-T*g.FLUTTER_AIR_CATCH_MULTIPLIER}}function Lt(e,t,n,r){let o=n.swayAmplitude??15,i=n.swayFrequency??2;e.swayPhase+=i*g.SWAY_PHASE_SCALE*r;let a=e.swayPhase,s=(a-a*a*a*g.SIN_TAYLOR_COEFF)*o*g.SWAY_FORCE_SCALE*r;e.vx=t+s}function Nt(e,t,n){let r=t.windVariation,o=t.wind+r*(Math.random()-.5);e.vx+=o*n}function kt(e,t,n,r,o,i){let a=i.airResistance??.03,s=1-r*r*g.COS_TAYLOR_COEFF,c=s<0?-s:s,l=i.drag+c*a,u=o>0?Math.sqrt(o):0,m=Math.max(.9,1-l*u*.01)*i.friction*i.decay;e.vx=t*m,e.vy=n*m}function Ht(e,t,n){if(n.tumble&&(e.angularVelocity=(e.angularVelocity+e.vx*.001*t)*g.ANGULAR_DAMPING,e.rotation+=(e.rotationSpeed+e.angularVelocity)*t),e.tiltSpeed=(e.tiltSpeed+(Math.random()-.5)*.002*t)*g.TILT_DAMPING,e.tilt=(e.tilt+e.tiltSpeed*t)%I.TWO_PI,n.wobble){let r=e.wobblePhase+n.wobbleSpeed*.1*t;e.wobblePhase=r;let o=1-r*r*g.COS_TAYLOR_COEFF,i=r-r*r*r*g.SIN_TAYLOR_COEFF;e.scaleX=.3+.7*(o<0?-o:o),e.scaleY=.3+.7*(i<0?-i:i)}e.shimmerPhase+=.1*t}function zt(e,t,n,r,o){t>0&&(e.life-=t);let i=1-e.life/e.maxLife;if(r){let a=i,s=a*a*(3-2*a);e.opacity=e.originalOpacity*(1-s*.9)}o&&(e.size=e.originalSize*(1-i*.5))}function Ut(e,t,n){let r=t.floor??n,o=e.size*.5;e.y+o>=r&&(e.y=r-o,e.vy=-e.vy*t.bounce,e.vx*=.85,e.rotationSpeed+=(Math.random()-.5)*.1)}function at(e,t,n){if(!t.active)return;let{x:r,y:o,size:i,rotation:a,color:s,shape:c,opacity:l,tilt:u,aspectRatio:f,scaleX:m,scaleY:p,shimmerPhase:P}=t;if(l<g.MIN_OPACITY_THRESHOLD)return;let F=n?.trailConfig,T=n?.glowConfig;(F?.enabled??B.enabled)&&t.trail.length>0&&Wt(e,t,F??B),e.save();let y=T?.enabled??Pe.enabled;y&&(e.shadowBlur=T?.blur??Pe.blur,e.shadowColor=T?.color??Q(s)),e.translate(r,o),e.rotate(a+u),t.depth>0&&e.scale(m,p);let d=1+(P-Math.floor(P))*g.SHIMMER_RANGE-g.SHIMMER_OFFSET,x=g.ORIENTATION_OPACITY_BASE+g.ORIENTATION_OPACITY_SCALE*(m*p<0?-(m*p):m*p),R=l*s.a*x*(y?T?.intensity??1:1);if(R<g.MIN_OPACITY_THRESHOLD){e.restore();return}e.globalAlpha=R>1?1:R;let A=s.r*d,H=s.g*d,oe=s.b*d;if(e.fillStyle=`rgb(${A>255?255:A},${H>255?255:H},${oe>255?255:oe})`,t.image&&t.image.isEmoji)Jt(e,t.image.src,i*(t.image.scale??1));else if(t.imageElement)Kt(e,t.imageElement,i*(t.image?.scale??1));else if(c==="custom"&&n?.customDraw){let _={ctx:e,particle:t,progress:1-t.life/t.maxLife,elapsed:n.elapsed??0};try{n.customDraw(_)}catch{ot||(ot=!0)}}else{let _=f??1;switch(c){case"square":case"rectangle":let j=i*(c==="rectangle"?Math.max(1.5,_*1.5):Math.sqrt(_)),ie=i/(c==="rectangle"?Math.max(1.5,_):Math.sqrt(_));e.fillRect(-j*.5,-ie*.5,j,ie);break;case"circle":e.beginPath(),e.arc(0,0,i*.5,0,I.TWO_PI),e.fill();break;case"triangle":Gt(e,i);break;case"star":Yt(e,i);break;case"line":qt(e,i);break;case"heart":Vt(e,i);break;case"diamond":$t(e,i);break;case"hexagon":jt(e,i);break;case"spiral":Xt(e,i,s);break;case"ribbon":Zt(e,i);break;default:e.fillRect(-i*.5,-i*.5,i,i)}}e.restore()}function Wt(e,t,n){let r=n.fade??B.fade,o=n.width??B.width;e.save(),e.lineCap="round",e.lineJoin="round";for(let i=0;i<t.trail.length-1;i++){let a=t.trail[i],s=t.trail[i+1],c=a.opacity*Math.pow(r,i),l=a.size*o*Math.pow(r,i);c>.01&&l>.1&&(e.beginPath(),e.strokeStyle=Q({...t.color,a:c}),e.lineWidth=l,e.moveTo(a.x,a.y),e.lineTo(s.x,s.y),e.stroke())}e.restore()}function Gt(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n,n),e.lineTo(-n,n),e.closePath(),e.fill()}function Yt(e,t){let n=t/2,r=n*tt,o=Math.PI/xe;e.beginPath();for(let i=0;i<xe*2;i++){let a=i%2===0?n:r,s=i*o-I.HALF_PI,c=Math.cos(s)*a,l=Math.sin(s)*a;i===0?e.moveTo(c,l):e.lineTo(c,l)}e.closePath(),e.fill()}function qt(e,t){let n=t*2,r=t/4;e.fillRect(-n/2,-r/2,n,r)}function Vt(e,t){let n=t/30;e.save(),e.scale(n,n),e.beginPath(),e.moveTo(0,-8),e.bezierCurveTo(-10,-18,-25,-8,-15,5),e.lineTo(0,18),e.lineTo(15,5),e.bezierCurveTo(25,-8,10,-18,0,-8),e.closePath(),e.fill(),e.restore()}function $t(e,t){let n=t/2;e.beginPath(),e.moveTo(0,-n),e.lineTo(n*.6,0),e.lineTo(0,n),e.lineTo(-n*.6,0),e.closePath(),e.fill()}function jt(e,t){let n=t/2;e.beginPath();for(let r=0;r<6;r++){let o=Math.PI/3*r-Math.PI/6,i=Math.cos(o)*n,a=Math.sin(o)*n;r===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath(),e.fill()}function Xt(e,t,n){e.strokeStyle=Q(n),e.lineWidth=t/8,e.lineCap="round",e.beginPath();for(let r=0;r<22;r++){let o=.35*r,i=(.2+1.5*o)*(t/20),a=i*Math.cos(o),s=i*Math.sin(o);r===0?e.moveTo(a,s):e.lineTo(a,s)}e.stroke()}function Zt(e,t){let n=t,r=t/3,o=t/4;e.beginPath(),e.moveTo(-n/2,0),e.quadraticCurveTo(-n/4,-o,0,0),e.quadraticCurveTo(n/4,o,n/2,0),e.lineTo(n/2,r),e.quadraticCurveTo(n/4,r+o,0,r),e.quadraticCurveTo(-n/4,r-o,-n/2,r),e.closePath(),e.fill()}function Jt(e,t,n){e.font=`${n}px serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(t,0,0)}function Kt(e,t,n){let r=n/2;e.drawImage(t,-r,-r,n,n)}function st(e){return e.filter(t=>t.active).length}var b=null,L=null,W=0;var ee=null,ue=[],de=500;function Qt(e){for(de=Math.max(1,Math.floor(e));ue.length>de;)ue.pop()}function en(){return de}function lt(e){ue.length<de&&(e.active=!1,e.trail.length=0,ue.push(e))}var Re=360,tn=new Float32Array(Re),nn=new Float32Array(Re);for(let e=0;e<Re;e++){let t=e*Math.PI/180;tn[e]=Math.sin(t),nn[e]=Math.cos(t)}function rn(e,t){if(!z())throw new Error("ConfettiEngine requires a browser environment");let n={...Ie,...t},r=n.pixelRatio??nt(Fe.MAX_DPR);if(!b){if(b=document.createElement("canvas"),b.style.cssText=`
2
2
  position: fixed;
3
3
  top: 0;
4
4
  left: 0;
@@ -6,7 +6,7 @@ var Te=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#
6
6
  height: 100%;
7
7
  pointer-events: none;
8
8
  z-index: ${e};
9
- `,N=b.getContext("2d",{alpha:!0,desynchronized:!0}),!N)throw new Error("Failed to get canvas 2D context");document.body.appendChild(b),n.autoResize&&(oe=()=>{if(b&&N){let a=n.width??window.innerWidth,s=n.height??window.innerHeight;b.width=a*r,b.height=s*r,b.style.width=`${a}px`,b.style.height=`${s}px`,N.scale(r,r)}},window.addEventListener("resize",oe))}b.style.zIndex=String(e);let i=n.width??window.innerWidth,o=n.height??window.innerHeight;return(b.width!==i*r||b.height!==o*r)&&(b.width=i*r,b.height=o*r,b.style.width=`${i}px`,b.style.height=`${o}px`,N.scale(r,r)),{canvas:b,ctx:N,width:i,height:o,dpr:r}}function Xt(){b&&Y===0&&setTimeout(()=>{Y===0&&b&&(oe&&(window.removeEventListener("resize",oe),oe=null),b.remove(),b=null,N=null)},nt)}function dt(e,t,n){let{type:r,x:i,y:o,w:a,h:s}=e;switch(r){case"point":return{x:i,y:o};case"rect":return{x:m(i,i+(a??0)),y:m(o,o+(s??0))};case"line":let c=C();return{x:i+c*(a??0),y:o+c*(s??0)};case"circle":let l=C()*T.TWO_PI,u=Math.sqrt(C())*(a??50);return{x:i+Math.cos(l)*u,y:o+Math.sin(l)*u};default:return{x:i,y:o}}}var he=class{constructor(t,n){this.particles=[];this.canvasContext=null;this.animationFrameId=null;this.lastFrameTime=0;this.lastSpawnTime=0;this.isRunning=!1;this.isPaused=!1;this.deferred=ot();this.frameInterval=0;this.lastRenderTime=0;this.animate=()=>{if(!this.isRunning||!this.canvasContext)return;if((this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")&&!this.continuousConfig.run){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}if(this.isPaused){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}let t=performance.now(),n=t-this.lastFrameTime;if(this.lastFrameTime=t,this.frameInterval>0){if(t-this.lastRenderTime<this.frameInterval){this.animationFrameId=requestAnimationFrame(this.animate);return}this.lastRenderTime=t}let{ctx:r,width:i,height:o,dpr:a}=this.canvasContext,{physics:s,particle:c}=this.config;r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,i*a,o*a),r.scale(a,a);let l=this.particles,u=l.length,f=0,h=!0,p=100,A=-p,x=i+p,R=-p,g=o+p;for(let v=0;v<u;v++){let d=l[v];if(d.active){if(at(d,n,s,c.fadeOut,c.scaleDown),d.data?.isRocket&&d.y<=d.data.targetY){d.active=!1,this.explodeFirework(d.x,d.y,d.data);continue}if(d.data?.willExplode&&!d.data.hasExploded&&d.vx*d.vx+d.vy*d.vy<1&&(d.data.hasExploded=!0,this.explodeFirework(d.x,d.y,{burstCount:15,spread:360,burstColors:d.data.burstColors})),d.x<A||d.x>x||d.y<R||d.y>g){(d.y>g||d.x<A-200||d.x>x+200)&&(d.active=!1);continue}st(r,d,{customDraw:this.drawShape}),f++,h=!1}}if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let v=t-this.lastSpawnTime,d=1e3/(this.continuousConfig.spawnRate??10);if(v>=d){if(this.continuousConfig.recycle){let E=this.continuousConfig.numberOfPieces-f;if(E>0){for(let I=u-1;I>=0&&E>0;I--)l[I].active||(ut(l[I]),l.splice(I,1));this.spawnParticles(Math.min(E,5))}}else f<this.continuousConfig.numberOfPieces&&this.spawnParticles(Math.min(3,this.continuousConfig.numberOfPieces-f));this.lastSpawnTime=t}}if(this.mode==="firework"){let v=0;for(let P=0;P<u;P++)l[P].active&&l[P].data?.isRocket&&v++;let d=t-this.lastSpawnTime;v===0&&d>=(this.fireworkConfig.burstDelay??500)&&(this.launchFirework(),this.lastSpawnTime=t)}if((this.mode==="burst"||this.mode==="cannon"||this.mode==="explosion")&&h){this.complete();return}this.animationFrameId=requestAnimationFrame(this.animate)};this.origin=t,this.config=Ae(n),this.mode=n?.mode??"burst",this.spawnArea=n?.spawnArea,this.continuousConfig={...et,...n?.continuous},this.fireworkConfig={...tt,...n?.firework},this.canvasConfig={...Re,...n?.canvas},this.drawShape=n?.particle?.drawShape,this.canvasConfig.frameRate&&(this.frameInterval=1e3/this.canvasConfig.frameRate)}start(){if(this.isRunning)return this.createHandle();if(!$())return this.deferred.resolve(),this.createHandle();if(this.isRunning=!0,Y++,this.canvasContext=Yt(this.config.zIndex,this.canvasConfig),this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let t=Math.min(this.continuousConfig.numberOfPieces,Math.floor(this.continuousConfig.numberOfPieces*.5));this.spawnParticles(t)}else this.mode==="firework"?this.launchFirework():this.createParticles();return this.config.onStart?.(),this.lastFrameTime=performance.now(),this.lastSpawnTime=performance.now(),this.lastRenderTime=performance.now(),this.animate(),this.createHandle()}createParticles(){let{particleCount:t,particle:n,direction:r,physics:i}=this.config,{x:o,y:a}=this.origin,s=Math.min(t,V.MAX_PARTICLES);for(let c=0;c<s;c++){let l;if(r.direction==="radial")l=C()*T.TWO_PI;else{let h=pe(r.direction,r.angle),p=S(r.spread);l=h+(C()-.5)*p}let u=m(r.velocity[0],r.velocity[1]),f=j(o,a,l,u,n.colors,n.shapes,n.size,n.opacity,n.lifespan,i.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(f)}}spawnParticles(t){if(!this.canvasContext)return;let{particle:n,physics:r}=this.config,{width:i,height:o}=this.canvasContext;for(let a=0;a<t;a++){let s;this.spawnArea?s=dt(this.spawnArea,i,o):this.mode==="snow"||this.mode==="rain"?s={x:m(0,i),y:-20}:s={x:m(0,i),y:m(-20,0)};let c,l;this.mode==="snow"?(c=S(m(-20,20)-90),l=m(.5,2)):this.mode==="rain"?(c=S(-90),l=m(8,15)):(c=C()*T.TWO_PI,l=m(2,6));let u=j(s.x,s.y,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,r.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(u)}}launchFirework(){if(!this.canvasContext)return;let{width:t,height:n}=this.canvasContext,{launchHeight:r,burstCount:i,spread:o,secondaryExplosions:a,rocketColors:s,burstColors:c,trailLength:l}=this.fireworkConfig,u=this.spawnArea?dt(this.spawnArea,t,n).x:m(t*.2,t*.8),f=n*(1-r),h=u+m(-50,50),p=j(u,n,S(-90+m(-10,10)),m(15,25),s,["circle"],[3,5],[1,1],2e3,0);p.data={isRocket:!0,targetY:f,targetX:h,burstCount:i,spread:o,burstColors:c,secondaryExplosions:a,trailLength:l},this.particles.push(p)}explodeFirework(t,n,r){let{burstCount:i=80,spread:o=360,burstColors:a,secondaryExplosions:s}=r,c=a??this.config.particle.colors,l=S(o);for(let u=0;u<i;u++){let f=u/i*l-l/2+S(-90),h=m(4,12),p=j(t,n,f,h,c,this.config.particle.shapes,[2,6],[.8,1],1500,this.config.physics.rotationSpeed);s&&C()<.1&&(p.data={willExplode:!0,burstColors:c}),this.particles.push(p)}}stop(){this.isRunning&&(this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanup(),this.deferred.resolve())}pause(){this.isPaused=!0}resume(){this.isPaused=!1}complete(){this.config.onComplete?.(),this.cleanup(),this.deferred.resolve()}cleanup(){this.isRunning=!1,this.isPaused=!1;let t=this.particles;for(let n=t.length-1;n>=0;n--)ut(t[n]);this.particles=[],this.canvasContext=null,Y--,this.config.autoCleanup&&Xt()}addParticles(t){if(!(!this.isRunning||!this.canvasContext))if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")this.spawnParticles(t);else{let{particle:n,direction:r,physics:i}=this.config,{x:o,y:a}=this.origin;for(let s=0;s<t;s++){let c;if(r.direction==="radial")c=C()*T.TWO_PI;else{let f=pe(r.direction,r.angle),h=S(r.spread);c=f+(C()-.5)*h}let l=m(r.velocity[0],r.velocity[1]),u=j(o,a,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,i.rotationSpeed);this.particles.push(u)}}}clear(){this.particles=[]}getParticleCount(){return lt(this.particles)}getState(){return this.isRunning?this.isPaused?"paused":"running":"stopped"}createHandle(){return{stop:()=>this.stop(),pause:()=>this.pause(),resume:()=>this.resume(),promise:this.deferred.promise,addParticles:t=>this.addParticles(t),clear:()=>this.clear(),getParticleCount:()=>this.getParticleCount(),getState:()=>this.getState()}}};function me(e,t){return new he(e,t).start()}function Se(e,t){if(!e||!$())return null;let n=e.getBoundingClientRect(),r={x:n.left+n.width/2,y:n.top+n.height/2};return me(r,t)}function Zt(){return Y}function Jt(){b&&(b.remove(),b=null,N=null),Y=0}import{useCallback as X,useRef as Kt,useState as Qt,useEffect as en}from"react";function Z(){let[e,t]=Qt(!1),n=Kt(new Set);en(()=>()=>{n.current.forEach(l=>l.stop()),n.current.clear()},[]);let r=X((l,u)=>{let f=me(l,u);return n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f},[]),i=X((l,u)=>{if(!l)return null;let f=Se(l,u);return f&&(n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)})),f},[]),o=X(()=>{n.current.forEach(l=>l.stop()),n.current.clear(),t(!1)},[]),a=X(()=>{n.current.forEach(l=>l.pause())},[]),s=X(()=>{n.current.forEach(l=>l.resume())},[]),c=X(()=>Array.from(n.current),[]);return{fire:r,fireFromElement:i,isActive:e,stopAll:o,pauseAll:a,resumeAll:s,getActiveHandles:c}}import{useEffect as ge,useRef as ae,useCallback as ft,forwardRef as pt,useImperativeHandle as tn}from"react";import{jsx as mt}from"react/jsx-runtime";function nn({active:e,origin:t,triggerRef:n,options:r,onComplete:i}){let{fire:o,fireFromElement:a}=Z(),s=ae(!1);return ge(()=>{if(e&&!s.current){s.current=!0;let c=null;n?.current?c=a(n.current,r):t&&(c=o(t,r)),c&&c.promise.then(()=>{i?.()})}},[e,t,n,r,o,a,i]),ge(()=>{e||(s.current=!1)},[e]),null}var rn=pt(({options:e,style:t},n)=>{let r=ae(null),{fireFromElement:i}=Z();return tn(n,()=>({fire:()=>i(r.current,e)})),mt("div",{ref:r,style:{position:"absolute",width:1,height:1,pointerEvents:"none",...t},"aria-hidden":"true"})});rn.displayName="ConfettiTrigger";var ht=pt(({children:e,confettiOptions:t,fireOnClick:n=!0,onClick:r,...i},o)=>{let a=ae(null),{fireFromElement:s}=Z(),c=ft(u=>{a.current=u,typeof o=="function"?o(u):o&&(o.current=u)},[o]),l=ft(u=>{n&&a.current&&s(a.current,t),r?.(u)},[n,s,t,r]);return mt("button",{ref:c,onClick:l,...i,children:e})});ht.displayName="ConfettiButton";function on({width:e,height:t,numberOfPieces:n=200,confettiSource:r,initialVelocityX:i,initialVelocityY:o,recycle:a=!0,run:s=!0,gravity:c=.3,wind:l=0,opacity:u=1,drawShape:f,tweenDuration:h=100,colors:p,onConfettiComplete:A,frameRate:x}){let{fire:R}=Z(),g=ae(null),v=ae(!1);return ge(()=>{if(!s){g.current&&(g.current.stop(),g.current=null),v.current=!1;return}if(v.current)return;v.current=!0;let d=r?{type:"rect",x:r.x,y:r.y,w:r.w??window.innerWidth,h:r.h??10}:{type:"rect",x:0,y:0,w:e??window.innerWidth,h:10},P=typeof i=="number"?[i*.5,i*1.5]:i?[i.min,i.max]:[4,10],E=typeof o=="number"?[o*.5,o*1.5]:o?[o.min,o.max]:[10,30],I=(e??window.innerWidth)/2,z=0;return g.current=R({x:I,y:z},{particleCount:n,particle:{colors:p??["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],opacity:[u*.8,u],shapes:["square","circle","rectangle"],drawShape:f},physics:{gravity:c*10,wind:l*5,windVariation:P[1]-P[0]},direction:{velocity:E},mode:"continuous",spawnArea:d,continuous:{recycle:a,numberOfPieces:n,spawnRate:30,run:s,tweenDuration:h},canvas:{width:e,height:t,frameRate:x,autoResize:!e&&!t},onComplete:A}),()=>{g.current&&(g.current.stop(),g.current=null)}},[s,e,t,n,r,i,o,a,c,l,u,f,h,p,A,x,R]),ge(()=>{g.current},[a]),null}on.displayName="Confetti";var Dn=Math.PI*2,an=Math.PI/180,gt=1e3/60;function y(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function be(e){return e*an}function H(e,t,n){return Math.min(Math.max(e,t),n)}function Me(e,t){let n=Math.max(0,e-t),r=n/gt;return Object.freeze({value:n,factor:r})}function bt(e){if(typeof e!="string"||e.length>50)return null;let t=e.trim().toLowerCase();if(t.startsWith("#")){let r=t.slice(1);if(!/^[0-9a-f]+$/.test(r))return null;let i,o,a,s=255;if(r.length===3)i=parseInt(r[0]+r[0],16),o=parseInt(r[1]+r[1],16),a=parseInt(r[2]+r[2],16);else if(r.length===6)i=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16);else if(r.length===8)i=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16),s=parseInt(r.slice(6,8),16);else return null;return{r:i,g:o,b:a,a:s/255}}let n=t.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);return n?{r:H(parseInt(n[1],10),0,255),g:H(parseInt(n[2],10),0,255),b:H(parseInt(n[3],10),0,255),a:n[4]!==void 0?H(parseFloat(n[4]),0,1):1}:null}function Oe(e,t){let n=bt(e);if(!n)return e;let{r,g:i,b:o,a}=n,s=H(r+t,0,255),c=H(i+t,0,255),l=H(o+t,0,255);return a<1?`rgba(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)}, ${a})`:`rgb(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)})`}function J(){if(typeof window>"u")return!1;try{return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}catch{return!1}}var sn=0;function se(){return++sn}function Ce(e){if(e.length===0)return;let t=Math.floor(y()*e.length);return e[t]}function ve(e){return typeof requestAnimationFrame<"u"?requestAnimationFrame(e):setTimeout(e,gt)}function Be(e){typeof cancelAnimationFrame<"u"?cancelAnimationFrame(e):clearTimeout(e)}function ke(){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,2)}var Ct=Object.freeze(["#26ccff","#a25afd","#ff5e7e","#88ff5a","#fcff42","#ffa62d","#ff36ff"]),ln=Object.freeze(["square","circle"]),we=Math.PI*2,ye=class e{constructor(t,n,r,i,o,a,s,c,l,u,f,h,p,A,x,R,g){this.id=t,this.position=n,this.velocity=r,this.angle2D=i,this.gravity=o,this.drift=a,this.decay=s,this.wobble=c,this.tilt=l,this.roll=u,this.rotate=f,this.color=h,this.shape=p,this.size=A,this.scalar=x,this.flat=R,this.tick=0,this.totalTicks=g,this.destroyed=!1,this.opacity=1}static create(t,n,r={}){let{angle:i=90,spread:o=45,startVelocity:a=45,decay:s=.94,gravity:c=1,drift:l=0,flat:u=!1,ticks:f=200,origin:h={x:.5,y:.5},colors:p=Ct,shapes:A=ln,scalar:x=1,size:R=4}=r,g={x:h.x*t,y:h.y*n},v=be(i),d=be(o),P=-v+(.5*d-y()*d),E=a*.5+y()*a,I={angle:y()*we,angleSpeed:y()*.1+.05,moveSpeed:-15+y()*30,distance:25+y()*15},z={value:y()*we,sinDirection:y()>=.5?1:-1,cosDirection:y()>=.5?1:-1,speed:(y()*.4+.3)*(y()>.5?1:-1),enable:!u},G={angle:y()*we,speed:(15+y()*10)/60,horizontal:y()>.3,vertical:y()>.7,enable:!u},k={angle:y()*we,speed:(y()*2-1)*.1,enable:!u},Q=Ce(p)??Ct[0],q=Ce(A)??"square";return new e(se(),g,E,P,c*3,l,s,I,z,G,k,Q,q,R,x,u,f)}get progress(){return this.tick/this.totalTicks}get computedSize(){return this.size*this.scalar}destroy(){this.destroyed=!0}clone(t){let n=Object.create(e.prototype);return Object.assign(n,this,t),n}},Pe=class{constructor(t=1e3){this.pool=[];this.maxSize=t}acquire(t,n,r){let i=this.pool.pop();return i?this.resetParticle(i,t,n,r):ye.create(t,n,r)}release(t){this.pool.length<this.maxSize&&(t.destroyed=!0,this.pool.push(t))}clear(){this.pool.length=0}get size(){return this.pool.length}resetParticle(t,n,r,i){let o=ye.create(n,r,i);return Object.assign(t,o,{id:t.id}),t.destroyed=!1,t}};var D=Math.PI*2,_e=class{constructor(){this.id="base"}init(t){}isEnabled(t){return!t.destroyed}update(t,n){if(t.destroyed)return;let r=Math.cos(t.angle2D)*t.velocity,i=Math.sin(t.angle2D)*t.velocity;t.position.x+=r*n.factor+t.drift*n.factor,t.position.y+=i*n.factor+t.gravity*n.factor,t.velocity*=t.decay,t.tick++;let o=t.tick/t.totalTicks;t.opacity=1-Math.pow(o,2),t.tick>=t.totalTicks&&(t.destroyed=!0)}},ze=class{constructor(){this.id="wobble"}init(t){t.wobble||(t.wobble={angle:Math.random()*D,angleSpeed:Math.random()*.1+.05,moveSpeed:-15+Math.random()*30,distance:25+Math.random()*15})}isEnabled(t){return!t.destroyed&&!t.flat&&!!t.wobble}update(t,n){if(!this.isEnabled(t))return;let r=t.wobble;r.angle+=r.angleSpeed*n.factor,r.angle>D&&(r.angle-=D);let i=Math.cos(r.angle)*r.distance*.1;t.position.x+=i*n.factor}},Le=class{constructor(){this.id="tilt"}init(t){t.tilt||(t.tilt={value:Math.random()*D,sinDirection:Math.random()>=.5?1:-1,cosDirection:Math.random()>=.5?1:-1,speed:(Math.random()*.4+.3)*(Math.random()>.5?1:-1),enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.tilt?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.tilt;r.value+=r.speed*.01*n.factor,r.value>D?r.value-=D:r.value<0&&(r.value+=D)}getTransformValues(t){if(!t.tilt?.enable)return{};let n=t.tilt;return{b:Math.cos(n.value)*n.cosDirection*.5,c:Math.sin(n.value)*n.sinDirection*.5}}},Ne=class{constructor(){this.id="roll"}init(t){t.roll||(t.roll={angle:Math.random()*D,speed:(15+Math.random()*10)/60,horizontal:Math.random()>.3,vertical:Math.random()>.7,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.roll?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.roll;r.angle+=r.speed*n.factor,r.angle>D&&(r.angle-=D)}getTransformValues(t){if(!t.roll?.enable)return{};let n=t.roll;return{a:n.horizontal?Math.abs(Math.cos(n.angle)):void 0,d:n.vertical?Math.abs(Math.sin(n.angle)):void 0}}getDarkenAmount(t){if(!t.roll?.enable)return 0;let n=t.roll;return!n.horizontal&&!n.vertical?0:(n.horizontal?Math.cos(n.angle):Math.sin(n.angle))<0?25:0}},He=class{constructor(){this.id="rotate"}init(t){t.rotate||(t.rotate={angle:Math.random()*D,speed:(Math.random()*2-1)*.1,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.rotate?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.rotate;r.angle+=r.speed*n.factor,r.angle>D?r.angle-=D:r.angle<0&&(r.angle+=D)}},Ue=class{constructor(){this.id="opacity"}init(t){t.opacity=1}isEnabled(t){return!t.destroyed}update(t,n){if(!this.isEnabled(t))return;let r=t.tick/t.totalTicks;t.opacity=1-Math.pow(r,2)}};function vt(){return[new _e,new ze,new Le,new Ne,new He,new Ue]}var wt=Math.PI*2,qe=class{constructor(){this.type="circle"}draw(t,n,r){let i=n.flat?1:.6+Math.sin(n.wobble.angle)*.4;t.ellipse(0,0,r*i,r*(1-i*.3),n.tilt?.value??0,0,wt)}},We=class{constructor(){this.type="square"}draw(t,n,r){let i=n.flat?0:Math.sin(n.wobble.angle)*r*.3;t.moveTo(-r+i,-r),t.lineTo(r+i,-r*.5),t.lineTo(r-i,r),t.lineTo(-r-i,r*.5)}},Ge=class{constructor(){this.type="rectangle"}draw(t,n,r){let i=r*1.5,o=r*.6,a=n.flat?0:Math.sin(n.wobble.angle)*o*.2;t.moveTo(-i+a,-o),t.lineTo(i+a,-o*.5),t.lineTo(i-a,o),t.lineTo(-i-a,o*.5)}},Ve=class{constructor(){this.type="star"}draw(t,n,r){let i=r,o=r*.5,a=5,s=Math.PI/a,c=-Math.PI/2;t.moveTo(0,-i);for(let l=0;l<a;l++)t.lineTo(Math.cos(c)*i,Math.sin(c)*i),c+=s,t.lineTo(Math.cos(c)*o,Math.sin(c)*o),c+=s}},$e=class{constructor(){this.type="triangle"}draw(t,n,r){let i=r*Math.sqrt(3)/2;t.moveTo(0,-i),t.lineTo(-r,i),t.lineTo(r,i)}},je=class{constructor(){this.type="diamond"}draw(t,n,r){t.moveTo(0,-r),t.lineTo(r*.6,0),t.lineTo(0,r),t.lineTo(-r*.6,0)}},Ye=class{constructor(){this.type="heart"}draw(t,n,r){let o=-r*.3,a=r*.3;t.moveTo(0,o+a),t.bezierCurveTo(0-r,o,0-r,o-a*2,0,o-a),t.bezierCurveTo(0+r,o-a*2,0+r,o,0,o+a)}},Xe=class{constructor(){this.type="hexagon"}draw(t,n,r){let o=wt/6;for(let a=0;a<6;a++){let s=o*a-Math.PI/2,c=Math.cos(s)*r,l=Math.sin(s)*r;a===0?t.moveTo(c,l):t.lineTo(c,l)}}},Ze=class{constructor(){this.drawers=new Map;this.register(new qe),this.register(new We),this.register(new Ge),this.register(new Ve),this.register(new $e),this.register(new je),this.register(new Ye),this.register(new Xe)}register(t){this.drawers.set(t.type,t)}get(t){return this.drawers.get(t)}has(t){return this.drawers.has(t)}getTypes(){return Array.from(this.drawers.keys())}unregister(t){return this.drawers.delete(t)}clear(){this.drawers.clear()}},K=new Ze;var U=class{constructor(t={}){this.destroyed=!1;this.t=[];this.n=null;this.m=0;this.i=null;this.p=!1;this.o=null;this.P=t=>{if(this.destroyed)return;let n=Me(t,this.m);this.m=t,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let r=!1,i=[];for(let o=0;o<this.t.length;o++){let a=this.t[o];if(a.destroyed){i.push(o);continue}for(let s of this.e)s.isEnabled(a)&&s.update(a,n);if(a.destroyed){i.push(o);continue}r=!0,this.E(a)}for(let o=i.length-1;o>=0;o--){let a=i[o],s=this.t[a];this.l.release(s),this.t.splice(a,1)}r?this.n=ve(this.P):(this.n=null,this.i?.(),this.i=null)};this.I=()=>{this.v()};this.id=`confetti-${se()}`,this.f={canvas:t.canvas,resize:t.resize??!0,zIndex:t.zIndex??100,disableForReducedMotion:t.disableForReducedMotion??!1},t.canvas?this.canvas=t.canvas:(this.canvas=this.T(),this.p=!0);let n=this.canvas.getContext("2d",{alpha:!0,desynchronized:!0});if(!n)throw new Error("Failed to get 2D canvas context");this.ctx=n,this.e=vt(),this.l=new Pe(500),this.f.resize&&this.R(),this.v()}get particles(){return this.t}async fire(t={}){if(this.f.disableForReducedMotion&&J())return Promise.resolve();if(this.destroyed)throw new Error("Cannot fire on destroyed container");let n=t.particleCount??100,r=this.canvas.width,i=this.canvas.height;for(let o=0;o<n;o++){let a=this.l.acquire(r,i,t);for(let s of this.e)s.init(a);this.t.push(a)}return this.n?new Promise(o=>{let a=this.i;this.i=()=>{a?.(),o()}}):new Promise(o=>{this.i=o,this.m=performance.now(),this.n=ve(this.P)})}stop(){this.n&&(Be(this.n),this.n=null);for(let t of this.t)this.l.release(t);this.t.length=0,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.i?.(),this.i=null}reset(){this.stop(),this.l.clear()}destroy(){this.destroyed||(this.stop(),this.o&&(this.o.disconnect(),this.o=null),this.p&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.destroyed=!0)}E(t){let n=this.ctx,r=t.size*t.scalar,i={a:1,b:0,c:0,d:1};for(let l of this.e)if(l.getTransformValues){let u=l.getTransformValues(t);u.a!==void 0&&(i.a=u.a),u.b!==void 0&&(i.b=u.b),u.c!==void 0&&(i.c=u.c),u.d!==void 0&&(i.d=u.d)}let a=this.e.find(l=>l.id==="roll")?.getDarkenAmount(t)??0,s=a>0?Oe(t.color,-a):t.color;n.save(),n.translate(t.position.x,t.position.y),n.rotate(t.rotate?.angle??0),n.transform(i.a??1,i.b??0,i.c??0,i.d??1,0,0),n.fillStyle=s,n.globalAlpha=t.opacity,n.beginPath();let c=K.get(t.shape);c?c.draw(n,t,r):K.get("square")?.draw(n,t,r),n.closePath(),n.fill(),n.restore()}T(){let t=document.createElement("canvas");return t.id=this.id,t.style.cssText=`
9
+ `,L=b.getContext("2d",{alpha:!0,desynchronized:!0}),!L)throw new Error("Failed to get canvas 2D context");document.body.appendChild(b),n.autoResize&&(ee=()=>{if(b&&L){let a=n.width??window.innerWidth,s=n.height??window.innerHeight;b.width=a*r,b.height=s*r,b.style.width=`${a}px`,b.style.height=`${s}px`,L.scale(r,r)}},window.addEventListener("resize",ee))}b.style.zIndex=String(e);let o=n.width??window.innerWidth,i=n.height??window.innerHeight;return(b.width!==o*r||b.height!==i*r)&&(b.width=o*r,b.height=i*r,b.style.width=`${o}px`,b.style.height=`${i}px`,L.scale(r,r)),{canvas:b,ctx:L,width:o,height:i,dpr:r}}function on(){b&&W===0&&setTimeout(()=>{W===0&&b&&(ee&&(window.removeEventListener("resize",ee),ee=null),b.remove(),b=null,L=null)},et)}function ct(e,t,n){let{type:r,x:o,y:i,w:a,h:s}=e;switch(r){case"point":return{x:o,y:i};case"rect":return{x:h(o,o+(a??0)),y:h(i,i+(s??0))};case"line":let c=C();return{x:o+c*(a??0),y:i+c*(s??0)};case"circle":let l=C()*I.TWO_PI,u=Math.sqrt(C())*(a??50);return{x:o+Math.cos(l)*u,y:i+Math.sin(l)*u};default:return{x:o,y:i}}}var fe=class{constructor(t,n){this.particles=[];this.canvasContext=null;this.animationFrameId=null;this.lastFrameTime=0;this.lastSpawnTime=0;this.isRunning=!1;this.isPaused=!1;this.deferred=rt();this.frameInterval=0;this.lastRenderTime=0;this.animate=()=>{if(!this.isRunning||!this.canvasContext)return;if((this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")&&!this.continuousConfig.run){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}if(this.isPaused){this.animationFrameId=requestAnimationFrame(this.animate),this.lastFrameTime=performance.now();return}let t=performance.now(),n=t-this.lastFrameTime;if(this.lastFrameTime=t,this.frameInterval>0){if(t-this.lastRenderTime<this.frameInterval){this.animationFrameId=requestAnimationFrame(this.animate);return}this.lastRenderTime=t}let{ctx:r,width:o,height:i,dpr:a}=this.canvasContext,{physics:s,particle:c}=this.config;r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,o*a,i*a),r.scale(a,a);let l=this.particles,u=l.length,f=0,m=!0,p=100,P=-p,F=o+p,T=-p,y=i+p;for(let w=0;w<u;w++){let d=l[w];if(d.active){if(it(d,n,s,c.fadeOut,c.scaleDown),d.data?.isRocket&&d.y<=d.data.targetY){d.active=!1,this.explodeFirework(d.x,d.y,d.data);continue}if(d.data?.willExplode&&!d.data.hasExploded&&d.vx*d.vx+d.vy*d.vy<1&&(d.data.hasExploded=!0,this.explodeFirework(d.x,d.y,{burstCount:15,spread:360,burstColors:d.data.burstColors})),d.x<P||d.x>F||d.y<T||d.y>y){(d.y>y||d.x<P-200||d.x>F+200)&&(d.active=!1);continue}at(r,d,{customDraw:this.drawShape}),f++,m=!1}}if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let w=t-this.lastSpawnTime,d=1e3/(this.continuousConfig.spawnRate??10);if(w>=d){if(this.continuousConfig.recycle){let R=this.continuousConfig.numberOfPieces-f;if(R>0){for(let A=u-1;A>=0&&R>0;A--)l[A].active||(lt(l[A]),l.splice(A,1));this.spawnParticles(Math.min(R,5))}}else f<this.continuousConfig.numberOfPieces&&this.spawnParticles(Math.min(3,this.continuousConfig.numberOfPieces-f));this.lastSpawnTime=t}}if(this.mode==="firework"){let w=0;for(let x=0;x<u;x++)l[x].active&&l[x].data?.isRocket&&w++;let d=t-this.lastSpawnTime;w===0&&d>=(this.fireworkConfig.burstDelay??500)&&(this.launchFirework(),this.lastSpawnTime=t)}if((this.mode==="burst"||this.mode==="cannon"||this.mode==="explosion")&&m){this.complete();return}this.animationFrameId=requestAnimationFrame(this.animate)};this.origin=t,this.config=Ee(n),this.mode=n?.mode??"burst",this.spawnArea=n?.spawnArea,this.continuousConfig={...Ke,...n?.continuous},this.fireworkConfig={...Qe,...n?.firework},this.canvasConfig={...Ie,...n?.canvas},this.drawShape=n?.particle?.drawShape,this.canvasConfig.frameRate&&(this.frameInterval=1e3/this.canvasConfig.frameRate)}start(){if(this.isRunning)return this.createHandle();if(!z())return this.deferred.resolve(),this.createHandle();if(typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return this.deferred.resolve(),this.createHandle();if(this.isRunning=!0,W++,this.canvasContext=rn(this.config.zIndex,this.canvasConfig),this.mode==="continuous"||this.mode==="snow"||this.mode==="rain"){let t=Math.min(this.continuousConfig.numberOfPieces,Math.floor(this.continuousConfig.numberOfPieces*.5));this.spawnParticles(t)}else this.mode==="firework"?this.launchFirework():this.createParticles();return this.config.onStart?.(),this.lastFrameTime=performance.now(),this.lastSpawnTime=performance.now(),this.lastRenderTime=performance.now(),this.animate(),this.createHandle()}createParticles(){let{particleCount:t,particle:n,direction:r,physics:o}=this.config,{x:i,y:a}=this.origin,s=Math.min(t,Fe.MAX_PARTICLES);for(let c=0;c<s;c++){let l;if(r.direction==="radial")l=C()*I.TWO_PI;else{let m=ce(r.direction,r.angle),p=O(r.spread);l=m+(C()-.5)*p}let u=h(r.velocity[0],r.velocity[1]),f=U(i,a,l,u,n.colors,n.shapes,n.size,n.opacity,n.lifespan,o.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(f)}}spawnParticles(t){if(!this.canvasContext)return;let{particle:n,physics:r}=this.config,{width:o,height:i}=this.canvasContext;for(let a=0;a<t;a++){let s;this.spawnArea?s=ct(this.spawnArea,o,i):this.mode==="snow"||this.mode==="rain"?s={x:h(0,o),y:-20}:s={x:h(0,o),y:h(-20,0)};let c,l;this.mode==="snow"?(c=O(h(-20,20)-90),l=h(.5,2)):this.mode==="rain"?(c=O(-90),l=h(8,15)):(c=C()*I.TWO_PI,l=h(2,6));let u=U(s.x,s.y,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,r.rotationSpeed,{images:n.images,tiltRange:n.tilt,spinSpeedRange:n.spinSpeed,depth3D:n.depth3D});this.particles.push(u)}}launchFirework(){if(!this.canvasContext)return;let{width:t,height:n}=this.canvasContext,{launchHeight:r,burstCount:o,spread:i,secondaryExplosions:a,rocketColors:s,burstColors:c,trailLength:l}=this.fireworkConfig,u=this.spawnArea?ct(this.spawnArea,t,n).x:h(t*.2,t*.8),f=n*(1-r),m=u+h(-50,50),p=U(u,n,O(-90+h(-10,10)),h(15,25),s,["circle"],[3,5],[1,1],2e3,0);p.data={isRocket:!0,targetY:f,targetX:m,burstCount:o,spread:i,burstColors:c,secondaryExplosions:a,trailLength:l},this.particles.push(p)}explodeFirework(t,n,r){let{burstCount:o=80,spread:i=360,burstColors:a,secondaryExplosions:s}=r,c=a??this.config.particle.colors,l=O(i);for(let u=0;u<o;u++){let f=u/o*l-l/2+O(-90),m=h(4,12),p=U(t,n,f,m,c,this.config.particle.shapes,[2,6],[.8,1],1500,this.config.physics.rotationSpeed);s&&C()<.1&&(p.data={willExplode:!0,burstColors:c}),this.particles.push(p)}}stop(){this.isRunning&&(this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanup(),this.deferred.resolve())}pause(){this.isPaused=!0}resume(){this.isPaused=!1}complete(){this.config.onComplete?.(),this.cleanup(),this.deferred.resolve()}cleanup(){this.isRunning=!1,this.isPaused=!1;let t=this.particles;for(let n=t.length-1;n>=0;n--)lt(t[n]);this.particles=[],this.canvasContext=null,W--,this.config.autoCleanup&&on()}addParticles(t){if(!(!this.isRunning||!this.canvasContext))if(this.mode==="continuous"||this.mode==="snow"||this.mode==="rain")this.spawnParticles(t);else{let{particle:n,direction:r,physics:o}=this.config,{x:i,y:a}=this.origin;for(let s=0;s<t;s++){let c;if(r.direction==="radial")c=C()*I.TWO_PI;else{let f=ce(r.direction,r.angle),m=O(r.spread);c=f+(C()-.5)*m}let l=h(r.velocity[0],r.velocity[1]),u=U(i,a,c,l,n.colors,n.shapes,n.size,n.opacity,n.lifespan,o.rotationSpeed);this.particles.push(u)}}}clear(){this.particles=[]}getParticleCount(){return st(this.particles)}getState(){return this.isRunning?this.isPaused?"paused":"running":"stopped"}createHandle(){return{stop:()=>this.stop(),pause:()=>this.pause(),resume:()=>this.resume(),promise:this.deferred.promise,addParticles:t=>this.addParticles(t),clear:()=>this.clear(),getParticleCount:()=>this.getParticleCount(),getState:()=>this.getState()}}};function me(e,t){return new fe(e,t).start()}function Ae(e,t){if(!e||!z())return null;let n=e.getBoundingClientRect(),r={x:n.left+n.width/2,y:n.top+n.height/2};return me(r,t)}function an(){return W}function sn(){b&&(b.remove(),b=null,L=null),W=0}import{useCallback as G,useRef as ln,useState as cn,useEffect as un}from"react";function Y(){let[e,t]=cn(!1),n=ln(new Set);un(()=>()=>{n.current.forEach(l=>l.stop()),n.current.clear()},[]);let r=G((l,u)=>{let f=me(l,u);return n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f},[]),o=G((l,u)=>{let f=Ae(l,u);return f?(n.current.add(f),t(!0),f.promise.then(()=>{n.current.delete(f),n.current.size===0&&t(!1)}),f):null},[]),i=G(()=>{n.current.forEach(l=>l.stop()),n.current.clear(),t(!1)},[]),a=G(()=>{n.current.forEach(l=>l.pause())},[]),s=G(()=>{n.current.forEach(l=>l.resume())},[]),c=G(()=>Array.from(n.current),[]);return{fire:r,fireFromElement:o,isActive:e,stopAll:i,pauseAll:a,resumeAll:s,getActiveHandles:c}}import{useEffect as pe,useRef as te,useCallback as ut,forwardRef as dt,useImperativeHandle as dn}from"react";import{jsx as mt}from"react/jsx-runtime";function fn({active:e,origin:t,triggerRef:n,options:r,onComplete:o}){let{fire:i,fireFromElement:a}=Y(),s=te(!1);return pe(()=>{if(e&&!s.current){s.current=!0;let c=null;n?.current?c=a(n.current,r):t&&(c=i(t,r)),c&&c.promise.then(()=>{o?.()})}},[e,t,n,r,i,a,o]),pe(()=>{e||(s.current=!1)},[e]),null}var mn=dt(({options:e,style:t},n)=>{let r=te(null),{fireFromElement:o}=Y();return dn(n,()=>({fire:()=>o(r.current,e)})),mt("div",{ref:r,style:{position:"absolute",width:1,height:1,pointerEvents:"none",...t},"aria-hidden":"true"})});mn.displayName="ConfettiTrigger";var ft=dt(({children:e,confettiOptions:t,fireOnClick:n=!0,onClick:r,...o},i)=>{let a=te(null),{fireFromElement:s}=Y(),c=ut(u=>{a.current=u,typeof i=="function"?i(u):i&&(i.current=u)},[i]),l=ut(u=>{n&&a.current&&s(a.current,t),r?.(u)},[n,s,t,r]);return mt("button",{ref:c,onClick:l,...o,children:e})});ft.displayName="ConfettiButton";function pn({width:e,height:t,numberOfPieces:n=200,confettiSource:r,initialVelocityX:o,initialVelocityY:i,recycle:a=!0,run:s=!0,gravity:c=.3,wind:l=0,opacity:u=1,drawShape:f,tweenDuration:m=100,colors:p,onConfettiComplete:P,frameRate:F}){let{fire:T}=Y(),y=te(null),w=te(!1);return pe(()=>{if(!s){y.current&&(y.current.stop(),y.current=null),w.current=!1;return}if(w.current)return;w.current=!0;let d=r?{type:"rect",x:r.x,y:r.y,w:r.w??window.innerWidth,h:r.h??10}:{type:"rect",x:0,y:0,w:e??window.innerWidth,h:10},x=typeof o=="number"?[o*.5,o*1.5]:o?[o.min,o.max]:[4,10],R=typeof i=="number"?[i*.5,i*1.5]:i?[i.min,i.max]:[10,30],A=(e??window.innerWidth)/2,H=0;return y.current=T({x:A,y:H},{particleCount:n,particle:{colors:p??["#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff"],opacity:[u*.8,u],shapes:["square","circle","rectangle"],drawShape:f},physics:{gravity:c*10,wind:l*5,windVariation:x[1]-x[0]},direction:{velocity:R},mode:"continuous",spawnArea:d,continuous:{recycle:a,numberOfPieces:n,spawnRate:30,run:s,tweenDuration:m},canvas:{width:e,height:t,frameRate:F,autoResize:!e&&!t},onComplete:P}),()=>{y.current&&(y.current.stop(),y.current=null)}},[s,e,t,n,r,o,i,a,c,l,u,f,m,p,P,F,T]),pe(()=>{y.current},[a]),null}pn.displayName="Confetti";var Wn=Math.PI*2,hn=Math.PI/180,pt=1e3/60;function v(){if(typeof crypto<"u"&&crypto.getRandomValues){let e=new Uint32Array(1);return crypto.getRandomValues(e),e[0]/4294967296}return Math.random()}function he(e){return e*hn}function N(e,t,n){return Math.min(Math.max(e,t),n)}function Se(e,t){let n=Math.max(0,e-t),r=n/pt;return Object.freeze({value:n,factor:r})}function ht(e){if(typeof e!="string"||e.length>50)return null;let t=e.trim().toLowerCase();if(t.startsWith("#")){let r=t.slice(1);if(!/^[0-9a-f]+$/.test(r))return null;let o,i,a,s=255;if(r.length===3)o=parseInt(r[0]+r[0],16),i=parseInt(r[1]+r[1],16),a=parseInt(r[2]+r[2],16);else if(r.length===6)o=parseInt(r.slice(0,2),16),i=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16);else if(r.length===8)o=parseInt(r.slice(0,2),16),i=parseInt(r.slice(2,4),16),a=parseInt(r.slice(4,6),16),s=parseInt(r.slice(6,8),16);else return null;return{r:o,g:i,b:a,a:s/255}}let n=t.match(/^rgba?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);return n?{r:N(parseInt(n[1],10),0,255),g:N(parseInt(n[2],10),0,255),b:N(parseInt(n[3],10),0,255),a:n[4]!==void 0?N(parseFloat(n[4]),0,1):1}:null}function Oe(e,t){let n=ht(e);if(!n)return e;let{r,g:o,b:i,a}=n,s=N(r+t,0,255),c=N(o+t,0,255),l=N(i+t,0,255);return a<1?`rgba(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)}, ${a})`:`rgb(${Math.round(s)}, ${Math.round(c)}, ${Math.round(l)})`}function q(){if(typeof window>"u")return!1;try{return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1}catch{return!1}}var gn=0;function ne(){return++gn}function ge(e){if(e.length===0)return;let t=Math.floor(v()*e.length);return e[t]}function be(e){return typeof requestAnimationFrame<"u"?requestAnimationFrame(e):setTimeout(e,pt)}function De(e){typeof cancelAnimationFrame<"u"?cancelAnimationFrame(e):clearTimeout(e)}function Me(){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,2)}var gt=Object.freeze(["#26ccff","#a25afd","#ff5e7e","#88ff5a","#fcff42","#ffa62d","#ff36ff"]),bn=Object.freeze(["square","circle"]),Ce=Math.PI*2,ye=class e{constructor(t,n,r,o,i,a,s,c,l,u,f,m,p,P,F,T,y){this.id=t,this.position=n,this.velocity=r,this.angle2D=o,this.gravity=i,this.drift=a,this.decay=s,this.wobble=c,this.tilt=l,this.roll=u,this.rotate=f,this.color=m,this.shape=p,this.size=P,this.scalar=F,this.flat=T,this.tick=0,this.totalTicks=y,this.destroyed=!1,this.opacity=1}static create(t,n,r={}){let{angle:o=90,spread:i=45,startVelocity:a=45,decay:s=.94,gravity:c=1,drift:l=0,flat:u=!1,ticks:f=200,origin:m={x:.5,y:.5},colors:p=gt,shapes:P=bn,scalar:F=1,size:T=4}=r,y={x:m.x*t,y:m.y*n},w=he(o),d=he(i),x=-w+(.5*d-v()*d),R=a*.5+v()*a,A={angle:v()*Ce,angleSpeed:v()*.1+.05,moveSpeed:-15+v()*30,distance:25+v()*15},H={value:v()*Ce,sinDirection:v()>=.5?1:-1,cosDirection:v()>=.5?1:-1,speed:(v()*.4+.3)*(v()>.5?1:-1),enable:!u},oe={angle:v()*Ce,speed:(15+v()*10)/60,horizontal:v()>.3,vertical:v()>.7,enable:!u},_={angle:v()*Ce,speed:(v()*2-1)*.1,enable:!u},j=ge(p)??gt[0],ie=ge(P)??"square";return new e(ne(),y,R,x,c*3,l,s,A,H,oe,_,j,ie,T,F,u,f)}get progress(){return this.tick/this.totalTicks}get computedSize(){return this.size*this.scalar}destroy(){this.destroyed=!0}clone(t){let n=Object.create(e.prototype);return Object.assign(n,this,t),n}},ve=class{constructor(t=1e3){this.pool=[];this.maxSize=t}acquire(t,n,r){let o=this.pool.pop();return o?this.resetParticle(o,t,n,r):ye.create(t,n,r)}release(t){this.pool.length<this.maxSize&&(t.destroyed=!0,this.pool.push(t))}clear(){this.pool.length=0}get size(){return this.pool.length}resetParticle(t,n,r,o){let i=ye.create(n,r,o);return Object.assign(t,i,{id:t.id}),t.destroyed=!1,t}};var S=Math.PI*2,_e=class{constructor(){this.id="base"}init(t){}isEnabled(t){return!t.destroyed}update(t,n){if(t.destroyed)return;let r=Math.cos(t.angle2D)*t.velocity,o=Math.sin(t.angle2D)*t.velocity;t.position.x+=r*n.factor+t.drift*n.factor,t.position.y+=o*n.factor+t.gravity*n.factor,t.velocity*=t.decay,t.tick++;let i=t.tick/t.totalTicks;t.opacity=1-Math.pow(i,2),t.tick>=t.totalTicks&&(t.destroyed=!0)}},Be=class{constructor(){this.id="wobble"}init(t){t.wobble||(t.wobble={angle:Math.random()*S,angleSpeed:Math.random()*.1+.05,moveSpeed:-15+Math.random()*30,distance:25+Math.random()*15})}isEnabled(t){return!t.destroyed&&!t.flat&&!!t.wobble}update(t,n){if(!this.isEnabled(t))return;let r=t.wobble;r.angle+=r.angleSpeed*n.factor,r.angle>S&&(r.angle-=S);let o=Math.cos(r.angle)*r.distance*.1;t.position.x+=o*n.factor}},Le=class{constructor(){this.id="tilt"}init(t){t.tilt||(t.tilt={value:Math.random()*S,sinDirection:Math.random()>=.5?1:-1,cosDirection:Math.random()>=.5?1:-1,speed:(Math.random()*.4+.3)*(Math.random()>.5?1:-1),enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.tilt?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.tilt;r.value+=r.speed*.01*n.factor,r.value>S?r.value-=S:r.value<0&&(r.value+=S)}getTransformValues(t){if(!t.tilt?.enable)return{};let n=t.tilt;return{b:Math.cos(n.value)*n.cosDirection*.5,c:Math.sin(n.value)*n.sinDirection*.5}}},Ne=class{constructor(){this.id="roll"}init(t){t.roll||(t.roll={angle:Math.random()*S,speed:(15+Math.random()*10)/60,horizontal:Math.random()>.3,vertical:Math.random()>.7,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.roll?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.roll;r.angle+=r.speed*n.factor,r.angle>S&&(r.angle-=S)}getTransformValues(t){if(!t.roll?.enable)return{};let n=t.roll;return{a:n.horizontal?Math.abs(Math.cos(n.angle)):void 0,d:n.vertical?Math.abs(Math.sin(n.angle)):void 0}}getDarkenAmount(t){if(!t.roll?.enable)return 0;let n=t.roll;return!n.horizontal&&!n.vertical?0:(n.horizontal?Math.cos(n.angle):Math.sin(n.angle))<0?25:0}},ke=class{constructor(){this.id="rotate"}init(t){t.rotate||(t.rotate={angle:Math.random()*S,speed:(Math.random()*2-1)*.1,enable:!t.flat})}isEnabled(t){return!t.destroyed&&t.rotate?.enable===!0}update(t,n){if(!this.isEnabled(t))return;let r=t.rotate;r.angle+=r.speed*n.factor,r.angle>S?r.angle-=S:r.angle<0&&(r.angle+=S)}},He=class{constructor(){this.id="opacity"}init(t){t.opacity=1}isEnabled(t){return!t.destroyed}update(t,n){if(!this.isEnabled(t))return;let r=t.tick/t.totalTicks;t.opacity=1-Math.pow(r,2)}};function bt(){return[new _e,new Be,new Le,new Ne,new ke,new He]}var Ct=Math.PI*2,ze=class{constructor(){this.type="circle"}draw(t,n,r){let o=n.flat?1:.6+Math.sin(n.wobble.angle)*.4;t.ellipse(0,0,r*o,r*(1-o*.3),n.tilt?.value??0,0,Ct)}},Ue=class{constructor(){this.type="square"}draw(t,n,r){let o=n.flat?0:Math.sin(n.wobble.angle)*r*.3;t.moveTo(-r+o,-r),t.lineTo(r+o,-r*.5),t.lineTo(r-o,r),t.lineTo(-r-o,r*.5)}},We=class{constructor(){this.type="rectangle"}draw(t,n,r){let o=r*1.5,i=r*.6,a=n.flat?0:Math.sin(n.wobble.angle)*i*.2;t.moveTo(-o+a,-i),t.lineTo(o+a,-i*.5),t.lineTo(o-a,i),t.lineTo(-o-a,i*.5)}},Ge=class{constructor(){this.type="star"}draw(t,n,r){let o=r,i=r*.5,a=5,s=Math.PI/a,c=-Math.PI/2;t.moveTo(0,-o);for(let l=0;l<a;l++)t.lineTo(Math.cos(c)*o,Math.sin(c)*o),c+=s,t.lineTo(Math.cos(c)*i,Math.sin(c)*i),c+=s}},Ye=class{constructor(){this.type="triangle"}draw(t,n,r){let o=r*Math.sqrt(3)/2;t.moveTo(0,-o),t.lineTo(-r,o),t.lineTo(r,o)}},qe=class{constructor(){this.type="diamond"}draw(t,n,r){t.moveTo(0,-r),t.lineTo(r*.6,0),t.lineTo(0,r),t.lineTo(-r*.6,0)}},Ve=class{constructor(){this.type="heart"}draw(t,n,r){let i=-r*.3,a=r*.3;t.moveTo(0,i+a),t.bezierCurveTo(0-r,i,0-r,i-a*2,0,i-a),t.bezierCurveTo(0+r,i-a*2,0+r,i,0,i+a)}},$e=class{constructor(){this.type="hexagon"}draw(t,n,r){let i=Ct/6;for(let a=0;a<6;a++){let s=i*a-Math.PI/2,c=Math.cos(s)*r,l=Math.sin(s)*r;a===0?t.moveTo(c,l):t.lineTo(c,l)}}},je=class{constructor(){this.drawers=new Map;this.register(new ze),this.register(new Ue),this.register(new We),this.register(new Ge),this.register(new Ye),this.register(new qe),this.register(new Ve),this.register(new $e)}register(t){this.drawers.set(t.type,t)}get(t){return this.drawers.get(t)}has(t){return this.drawers.has(t)}getTypes(){return Array.from(this.drawers.keys())}unregister(t){return this.drawers.delete(t)}clear(){this.drawers.clear()}},V=new je;var k=class{constructor(t={}){this.destroyed=!1;this.t=[];this.n=null;this.p=0;this.o=null;this.m=!1;this.i=null;this.P=t=>{if(this.destroyed)return;let n=Se(t,this.p);this.p=t,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let r=!1,o=[];for(let i=0;i<this.t.length;i++){let a=this.t[i];if(a.destroyed){o.push(i);continue}for(let s of this.e)s.isEnabled(a)&&s.update(a,n);if(a.destroyed){o.push(i);continue}r=!0,this.E(a)}for(let i=o.length-1;i>=0;i--){let a=o[i],s=this.t[a];this.l.release(s),this.t.splice(a,1)}r?this.n=be(this.P):(this.n=null,this.o?.(),this.o=null)};this.I=()=>{this.v()};this.id=`confetti-${ne()}`,this.f={canvas:t.canvas,resize:t.resize??!0,zIndex:t.zIndex??100,disableForReducedMotion:t.disableForReducedMotion??!1},t.canvas?this.canvas=t.canvas:(this.canvas=this.T(),this.m=!0);let n=this.canvas.getContext("2d",{alpha:!0,desynchronized:!0});if(!n)throw new Error("Failed to get 2D canvas context");this.ctx=n,this.e=bt(),this.l=new ve(500),this.f.resize&&this.F(),this.v()}get particles(){return this.t}async fire(t={}){if(this.f.disableForReducedMotion&&q())return Promise.resolve();if(this.destroyed)throw new Error("Cannot fire on destroyed container");let n=t.particleCount??100,r=this.canvas.width,o=this.canvas.height;for(let i=0;i<n;i++){let a=this.l.acquire(r,o,t);for(let s of this.e)s.init(a);this.t.push(a)}return this.n?new Promise(i=>{let a=this.o;this.o=()=>{a?.(),i()}}):new Promise(i=>{this.o=i,this.p=performance.now(),this.n=be(this.P)})}stop(){this.n&&(De(this.n),this.n=null);for(let t of this.t)this.l.release(t);this.t.length=0,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.o?.(),this.o=null}reset(){this.stop(),this.l.clear()}destroy(){this.destroyed||(this.stop(),this.i&&(this.i.disconnect(),this.i=null),this.m&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.destroyed=!0)}E(t){let n=this.ctx,r=t.size*t.scalar,o={a:1,b:0,c:0,d:1};for(let l of this.e)if(l.getTransformValues){let u=l.getTransformValues(t);u.a!==void 0&&(o.a=u.a),u.b!==void 0&&(o.b=u.b),u.c!==void 0&&(o.c=u.c),u.d!==void 0&&(o.d=u.d)}let a=this.e.find(l=>l.id==="roll")?.getDarkenAmount(t)??0,s=a>0?Oe(t.color,-a):t.color;n.save(),n.translate(t.position.x,t.position.y),n.rotate(t.rotate?.angle??0),n.transform(o.a??1,o.b??0,o.c??0,o.d??1,0,0),n.fillStyle=s,n.globalAlpha=t.opacity,n.beginPath();let c=V.get(t.shape);c?c.draw(n,t,r):V.get("square")?.draw(n,t,r),n.closePath(),n.fill(),n.restore()}T(){let t=document.createElement("canvas");return t.id=this.id,t.style.cssText=`
10
10
  position: fixed;
11
11
  top: 0;
12
12
  left: 0;
@@ -14,4 +14,4 @@ var Te=["#FF6B6B","#4ECDC4","#FFE66D","#95E1D3","#F38181","#AA96DA","#FCBAD3","#
14
14
  height: 100%;
15
15
  pointer-events: none;
16
16
  z-index: ${this.f.zIndex};
17
- `,document.body.appendChild(t),t}R(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this.I);return}this.o=new ResizeObserver(this.I),this.p?this.o.observe(document.body):this.canvas.parentElement&&this.o.observe(this.canvas.parentElement)}v(){let t=ke();if(this.p)this.canvas.width=window.innerWidth*t,this.canvas.height=window.innerHeight*t;else{let n=this.canvas.getBoundingClientRect();this.canvas.width=n.width*t,this.canvas.height=n.height*t}this.ctx.scale(t,t)}};var Ie=class{constructor(){this.e=[];this.C=[];this.u=[];this.s=null}addUpdater(t){this.e.some(n=>n.id===t.id)||this.e.push(t)}addMover(t){this.C.some(n=>n.id===t.id)||this.C.push(t)}addShapeDrawer(t){K.register(t)}getUpdaters(){return Object.freeze([...this.e])}getMovers(){return Object.freeze([...this.C])}getShapeDrawer(t){return K.get(t)}createContainer(t){let n=new U(t);return this.u.push(n),n}getDefaultContainer(){return(!this.s||this.s.destroyed)&&(this.s=new U,this.u.push(this.s)),this.s}destroyAll(){for(let t of this.u)t.destroy();this.u.length=0,this.s=null}get containerCount(){return this.u.length}},Je=null;function Ke(){return Je||(Je=new Ie),Je}var le=new Map;function yt(e,t){let n=le.get(e);if(!n||n.destroyed){let r=e==="default"?{resize:!0,...t}:{canvas:e,resize:t?.resize??!1,...t};n=new U(r),le.set(e,n)}return n}function Pt(e){return{particleCount:e.particleCount??100,size:e.size??4,angle:e.angle??90,spread:e.spread??45,startVelocity:e.startVelocity??45,decay:e.decay??.94,gravity:e.gravity??1,drift:e.drift??0,flat:e.flat??!1,ticks:e.ticks??200,origin:e.origin??{x:.5,y:.5},colors:e.colors??void 0,shapes:e.shapes??void 0,scalar:e.scalar??1}}function F(e={}){if(e.disableForReducedMotion&&J())return Promise.resolve();try{return yt("default").fire(Pt(e))}catch{return null}}F.create=function(e,t={}){let n=yt(e,t),r=(i={})=>{if((i.disableForReducedMotion??t.disableForReducedMotion)&&J())return Promise.resolve();try{return n.fire(Pt(i))}catch{return null}};return r.reset=()=>{n.stop()},r};F.reset=function(){let e=le.get("default");e&&!e.destroyed&&e.stop()};F.fireworks=async function(e={}){let t={particleCount:30,spread:55,...e};await Promise.all([F({...t,angle:60,origin:{x:0,y:.65}}),F({...t,angle:120,origin:{x:1,y:.65}})])};F.schoolPride=function(e={}){let t=Date.now()+3e3,n=e.colors??["#bb0000","#ffffff"];function r(){F({particleCount:2,angle:60,spread:55,origin:{x:0,y:.6},colors:n,...e}),F({particleCount:2,angle:120,spread:55,origin:{x:1,y:.6},colors:n,...e}),Date.now()<t&&requestAnimationFrame(r)}r()};F.snow=function(e={}){let{duration:t=5e3,...n}=e,r=Date.now()+t;function i(){F({particleCount:1,startVelocity:0,ticks:300,gravity:.3,origin:{x:Math.random(),y:0},colors:["#ffffff","#f0f8ff","#e6f3ff"],shapes:["circle"],scalar:.8+Math.random()*.4,drift:Math.random()-.5,...n}),Date.now()<r&&requestAnimationFrame(i)}i()};F.burst=function(e,t={}){return F({particleCount:80,spread:360,startVelocity:30,decay:.92,scalar:1.2,origin:e,...t})};F.destroyAll=function(){for(let e of le.values())e.destroy();le.clear(),Ke().destroyAll()};F.getShapes=function(){return["square","circle","star","triangle","rectangle","diamond","heart","hexagon"]};export{nn as ConfettiBurst,ht as ConfettiButton,he as ConfettiEngine,Te as DEFAULT_COLORS,B as DEFAULT_CONFIG,de as DEFAULT_DIRECTION,fe as DEFAULT_PARTICLE,ue as DEFAULT_PHYSICS,Ee as DIRECTION_ANGLES,xt as EASING_FUNCTIONS,_ as clamp,F as confetti,me as createConfettiExplosion,F as default,S as degToRad,Se as fireFromElement,Jt as forceCleanup,Zt as getActiveAnimationCount,pe as getDirectionAngle,Mt as getElementCenter,$ as isBrowser,Et as lerp,Ae as mergeConfig,re as parseColor,Ft as radToDeg,ne as randomFromArray,m as randomInRange,Rt as randomInt,ie as rgbaToString,Z as useConfetti};
17
+ `,document.body.appendChild(t),t}F(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this.I);return}this.i=new ResizeObserver(this.I),this.m?this.i.observe(document.body):this.canvas.parentElement&&this.i.observe(this.canvas.parentElement)}v(){let t=Me();if(this.m){let n=document.documentElement.clientWidth,r=document.documentElement.clientHeight;this.canvas.width=n*t,this.canvas.height=r*t,this.canvas.style.width=`${n}px`,this.canvas.style.height=`${r}px`}else{let n=this.canvas.getBoundingClientRect();this.canvas.width=n.width*t,this.canvas.height=n.height*t}this.ctx.scale(t,t)}};var we=class{constructor(){this.e=[];this.C=[];this.u=[];this.s=null}addUpdater(t){this.e.some(n=>n.id===t.id)||this.e.push(t)}addMover(t){this.C.some(n=>n.id===t.id)||this.C.push(t)}addShapeDrawer(t){V.register(t)}getUpdaters(){return Object.freeze([...this.e])}getMovers(){return Object.freeze([...this.C])}getShapeDrawer(t){return V.get(t)}createContainer(t){let n=new k(t);return this.u.push(n),n}getDefaultContainer(){return(!this.s||this.s.destroyed)&&(this.s=new k,this.u.push(this.s)),this.s}destroyAll(){for(let t of this.u)t.destroy();this.u.length=0,this.s=null}get containerCount(){return this.u.length}},Xe=null;function Ze(){return Xe||(Xe=new we),Xe}var re=new Map;function yt(e,t){let n=re.get(e);if(!n||n.destroyed){let r=e==="default"?{resize:!0,...t}:{canvas:e,resize:t?.resize??!1,...t};n=new k(r),re.set(e,n)}return n}function vt(e){return{particleCount:e.particleCount??100,size:e.size??4,angle:e.angle??90,spread:e.spread??45,startVelocity:e.startVelocity??45,decay:e.decay??.94,gravity:e.gravity??1,drift:e.drift??0,flat:e.flat??!1,ticks:e.ticks??200,origin:e.origin??{x:.5,y:.5},colors:e.colors??void 0,shapes:e.shapes??void 0,scalar:e.scalar??1}}function E(e={}){if(e.disableForReducedMotion&&q())return Promise.resolve();try{return yt("default").fire(vt(e))}catch{return null}}E.create=function(e,t={}){let n=yt(e,t),r=(o={})=>{if((o.disableForReducedMotion??t.disableForReducedMotion)&&q())return Promise.resolve();try{return n.fire(vt(o))}catch{return null}};return r.reset=()=>{n.stop()},r};E.reset=function(){let e=re.get("default");e&&!e.destroyed&&e.stop()};E.fireworks=async function(e={}){let t={particleCount:30,spread:55,...e};await Promise.all([E({...t,angle:60,origin:{x:0,y:.65}}),E({...t,angle:120,origin:{x:1,y:.65}})])};E.schoolPride=function(e={}){let t=Date.now()+3e3,n=e.colors??["#bb0000","#ffffff"];function r(){E({particleCount:2,angle:60,spread:55,origin:{x:0,y:.6},colors:n,...e}),E({particleCount:2,angle:120,spread:55,origin:{x:1,y:.6},colors:n,...e}),Date.now()<t&&requestAnimationFrame(r)}r()};E.snow=function(e={}){let{duration:t=5e3,...n}=e,r=Date.now()+t;function o(){E({particleCount:1,startVelocity:0,ticks:300,gravity:.3,origin:{x:Math.random(),y:0},colors:["#ffffff","#f0f8ff","#e6f3ff"],shapes:["circle"],scalar:.8+Math.random()*.4,drift:Math.random()-.5,...n}),Date.now()<r&&requestAnimationFrame(o)}o()};E.burst=function(e,t={}){return E({particleCount:80,spread:360,startVelocity:30,decay:.92,scalar:1.2,origin:e,...t})};E.destroyAll=function(){for(let e of re.values())e.destroy();re.clear(),Ze().destroyAll()};E.getShapes=function(){return["square","circle","star","triangle","rectangle","diamond","heart","hexagon"]};var wt={rainbow:X,pride:["#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],christmas:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],halloween:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],pastel:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF"],neon:["#FF00FF","#00FFFF","#FF0080","#80FF00","#FF8000"],gold:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],silver:["#C0C0C0","#A8A8A8","#D3D3D3","#DCDCDC","#E8E8E8"],hearts:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],ocean:["#006994","#00CED1","#20B2AA","#48D1CC","#87CEEB"]},$={celebration:["🎉","🎊","🥳","✨","🎈"],hearts:["❤️","💕","💖","💗","💓","💘"],stars:["⭐","🌟","✨","💫","⚡"],money:["💰","💵","💸","🤑","💎"],christmas:["🎄","🎅","🎁","❄️","⭐"],halloween:["🎃","👻","🦇","🕷️","💀"],birthday:["🎂","🎁","🎈","🎉","🥳"],food:["🍕","🍔","🍟","🌭","🍿"]},Je={default:{name:"default",description:"Default balanced confetti burst with realistic paper physics",options:{particleCount:60,particle:{shapes:["square","rectangle","circle"],size:[6,14],depth3D:.6,tilt:[-30,30]},physics:{gravity:.25,drag:.035,wobble:!0,wobbleSpeed:1.5}}},celebration:{name:"celebration",description:"Big celebration with lots of colorful confetti and realistic movement",options:{particleCount:120,particle:{colors:[...X],shapes:["square","rectangle","circle","star"],size:[8,16],lifespan:5e3,depth3D:.7,tilt:[-35,35]},direction:{direction:"radial",spread:360,velocity:[30,55]},physics:{gravity:.22,drag:.04,wobble:!0,wobbleSpeed:2,windVariation:.03}}},firework:{name:"firework",description:"Firework-style explosion with secondary bursts",options:{mode:"firework",particleCount:80,particle:{colors:[...wt.neon],shapes:["circle","star"],size:[4,8],trail:{enabled:!0,length:8,fade:.6},glow:{enabled:!0,blur:8,intensity:.7}},firework:{secondaryExplosions:!0,burstCount:80}}},snow:{name:"snow",description:"Gentle falling snowflakes",options:{mode:"snow",particleCount:150,particle:{colors:["#FFFFFF","#F0F8FF","#E0FFFF"],shapes:["circle"],size:[3,8],lifespan:8e3,opacity:[.6,1]},physics:{gravity:.05,wind:.3,windVariation:.2,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:150}}},rain:{name:"rain",description:"Rainfall effect",options:{mode:"rain",particleCount:200,particle:{colors:["#6CA0DC","#4A90D9","#2E7BB9"],shapes:["line"],size:[2,4],lifespan:2e3},physics:{gravity:.8,wind:.1},direction:{direction:"down",spread:10,velocity:[30,50]},continuous:{recycle:!0}}},sparkle:{name:"sparkle",description:"Sparkling stars with glow effect",options:{particleCount:40,particle:{colors:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00"],shapes:["star"],size:[6,12],glow:{enabled:!0,blur:15,intensity:.8}},physics:{gravity:.1},direction:{direction:"radial",spread:360,velocity:[30,60]}}},confetti:{name:"confetti",description:"Classic confetti falling with realistic paper flutter",options:{mode:"continuous",particleCount:200,particle:{shapes:["square","rectangle"],size:[6,14],depth3D:.8,tilt:[-40,40],lifespan:6e3},physics:{gravity:.18,drag:.045,wind:.08,windVariation:.04,wobble:!0,wobbleSpeed:2},continuous:{recycle:!0,numberOfPieces:200},spawnArea:{x:0,y:0,width:1920,height:0}}},emoji:{name:"emoji",description:"Emoji celebration",options:{particleCount:30,particle:{images:$.celebration.map(e=>({src:e,isEmoji:!0,scale:1.5})),size:[20,30],lifespan:4e3},direction:{direction:"up",spread:60,velocity:[20,35]}}},hearts:{name:"hearts",description:"Floating hearts",options:{particleCount:50,particle:{colors:["#FF69B4","#FF1493","#FF007F","#DC143C","#FFB6C1"],shapes:["heart"],size:[12,20],lifespan:5e3},physics:{gravity:-.1,wobble:!0},direction:{direction:"up",spread:90,velocity:[10,20]}}},stars:{name:"stars",description:"Shooting stars",options:{particleCount:60,particle:{colors:["#FFD700","#FFFFFF"],shapes:["star"],size:[8,16],trail:{enabled:!0,length:12,fade:.4}},direction:{direction:"radial",spread:360,velocity:[30,60]}}},money:{name:"money",description:"Money rain",options:{particleCount:40,particle:{colors:["#85BB65","#228B22","#32CD32"],images:$.money.map(e=>({src:e,isEmoji:!0})),size:[20,30],lifespan:4e3},physics:{gravity:.15,wobble:!0}}},pride:{name:"pride",description:"Pride rainbow celebration",options:{particleCount:100,particle:{colors:[...wt.pride],shapes:["square","rectangle","heart"],size:[10,16]},direction:{direction:"radial",spread:360,velocity:[25,45]}}},christmas:{name:"christmas",description:"Christmas celebration",options:{particleCount:80,particle:{colors:["#C41E3A","#165B33","#FFD700","#FFFFFF","#BB2528"],shapes:["star","circle"],size:[8,14],images:$.christmas.map(e=>({src:e,isEmoji:!0}))}}},halloween:{name:"halloween",description:"Spooky Halloween",options:{particleCount:60,particle:{colors:["#FF6600","#000000","#8B008B","#00FF00","#FFD700"],shapes:["circle","star"],images:$.halloween.map(e=>({src:e,isEmoji:!0})),size:[15,25]},physics:{gravity:.2,wobble:!0}}},newYear:{name:"newYear",description:"New Year celebration with fireworks",options:{mode:"firework",particleCount:100,particle:{colors:["#FFD700","#DAA520","#B8860B","#FFC125","#FFDF00","#C0C0C0","#A8A8A8"],shapes:["star","circle"],size:[6,12],trail:{enabled:!0,length:10},glow:{enabled:!0,blur:12}},firework:{secondaryExplosions:!0,burstCount:100}}},birthday:{name:"birthday",description:"Birthday party celebration",options:{particleCount:80,particle:{colors:["#FFB3BA","#FFDFBA","#FFFFBA","#BAFFC9","#BAE1FF","#E40303","#FF8C00","#FFED00","#008026","#24408E","#732982"],shapes:["star","circle","heart"],images:$.birthday.map(e=>({src:e,isEmoji:!0})),size:[12,20],lifespan:5e3},direction:{direction:"up",spread:80,velocity:[25,45]}}}};function vr(e){let t=Je[e];if(!t)throw new Error(`Preset "${e}" not found. Available presets: ${Object.keys(Je).join(", ")}`);return t}function wr(){return Object.keys(Je)}function Cn(e){let{path:t,matrix:n,fillColor:r,strokeColor:o,strokeWidth:i}=e,a=wn(t);return{type:"path",path:t,matrix:n?[...n]:void 0,fillColor:r,strokeColor:o,strokeWidth:i,bounds:a}}function Pt(e){let{text:t,scalar:n=1,color:r,fontFamily:o="serif",fontWeight:i="normal",fontStyle:a="normal"}=e;return{type:"text",text:t,scalar:n,color:r,fontFamily:o,fontWeight:String(i),fontStyle:a}}async function yn(e){let{src:t,scalar:n=1}=e;return typeof t!="string"?{type:"text",text:"",scalar:n,fontFamily:`url(${t.src})`}:(await Pn(t),{type:"text",text:"",scalar:n,fontFamily:`url(${t})`,color:void 0})}function vn(e,t={}){return e.map(n=>Pt({...t,text:n}))}function wn(e){let t=e.match(/-?\d*\.?\d+/g);if(!t||t.length<2)return{minX:-1,minY:-1,maxX:1,maxY:1};let n=1/0,r=1/0,o=-1/0,i=-1/0;for(let a=0;a<t.length-1;a+=2){let s=parseFloat(t[a]),c=parseFloat(t[a+1]);!isNaN(s)&&!isNaN(c)&&(n=Math.min(n,s),r=Math.min(r,c),o=Math.max(o,s),i=Math.max(i,c))}return isFinite(n)?{minX:n,minY:r,maxX:o,maxY:i}:{minX:-1,minY:-1,maxX:1,maxY:1}}function Pn(e){return new Promise((t,n)=>{let r=new Image;r.crossOrigin="anonymous",r.onload=()=>t(r),r.onerror=()=>n(new Error(`Failed to load image: ${e}`)),r.src=e})}export{wt as COLOR_PALETTES,fn as ConfettiBurst,ft as ConfettiButton,fe as ConfettiEngine,X as DEFAULT_COLORS,D as DEFAULT_CONFIG,se as DEFAULT_DIRECTION,le as DEFAULT_PARTICLE,ae as DEFAULT_PHYSICS,Te as DIRECTION_ANGLES,It as EASING_FUNCTIONS,$ as EMOJI_SETS,Je as PRESETS,M as clamp,E as confetti,me as createConfettiExplosion,E as default,O as degToRad,Ae as fireFromElement,sn as forceCleanup,an as getActiveAnimationCount,ce as getDirectionAngle,St as getElementCenter,en as getMaxPoolSize,vr as getPreset,wr as getPresetNames,z as isBrowser,Ft as lerp,Ee as mergeConfig,K as parseColor,xt as radToDeg,J as randomFromArray,h as randomInRange,Tt as randomInt,Q as rgbaToString,Qt as setMaxPoolSize,yn as shapeFromImage,Cn as shapeFromPath,Pt as shapeFromText,vn as shapesFromEmoji,Y as useConfetti};