domma-cms 0.104.0 → 0.104.1
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.
|
@@ -943,7 +943,7 @@ Body content in **Markdown** is supported.
|
|
|
943
943
|
<code>[ticker-tape]</code>, <code>[butterflies]</code>, <code>[strobe]</code>,
|
|
944
944
|
<code>[animate]</code>, <code>[ambient]</code>, <code>[firework]</code>,
|
|
945
945
|
<code>[fireworks]</code> and <code>[celebrate]</code> (with shorthands such as
|
|
946
|
-
<code>[christmas /]</code>). Many can also be added to a card, box, hero, banner, column or
|
|
946
|
+
<code>[christmas /]</code>; <code>[christmas snow-only="true" /]</code> is just the falling snow). Many can also be added to a card, box, hero, banner, column or
|
|
947
947
|
button as attributes: <code>[card reveal reveal-animation="zoom"]</code>. Settings are at
|
|
948
948
|
<strong>System > Effects</strong>.</p>
|
|
949
949
|
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var f=Object.defineProperty;var y=(d,e,i)=>e in d?f(d,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):d[e]=i;var u=(d,e,i)=>y(d,typeof e!="symbol"?e+"":e,i);import{CanvasManager as p}from"./core/canvas.js";import{PhysicsEngine as w,updateMovingParticle as v,updateParticlePhysics as M}from"./core/physics.js";import{createParticle as P}from"./core/particles.js";const c=class c{static isDateInRange(e,i,s,o){const l=new Date,n=l.getMonth()+1,h=l.getDate();return s<e?n===e&&h>=i||n>e||n<e&&n<=s||n===s&&h<=o:(n>e||n===e&&h>=i)&&(n<s||n===s&&h<=o)}static getCurrentTheme(){for(const[e,i]of Object.entries(c.themes)){const[[s,o],[l,n]]=i.dates;if(c.isDateInRange(s,o,l,n))return e}return null}static isCelebrationSeason(){return c.getCurrentTheme()!==null}static getThemes(){return c.themes}constructor(e={}){this.options={theme:e.theme||"auto",intensity:e.intensity||"medium",enabled:e.enabled!==void 0?e.enabled:!0,zIndex:e.zIndex||999,overrides:e.overrides||{}},this.canvasManager=null,this.physicsEngine=null,this.themeModule=null,this.currentTheme=null,this.particles=[],this.specialParticles=[],this.animationFrame=null,this.lastTime=0,this.running=!1,this.initialized=!1}async init(){if(this.initialized){console.warn("[Celebrations] Already initialized");return}console.log("[Celebrations] Initializing...");let e=this.options.theme;if(e==="auto"&&(e=c.getCurrentTheme(),!e)){console.log("[Celebrations] No active celebration detected");return}if(!c.themes[e]){console.error(`[Celebrations] Unknown theme: ${e}`);return}this.currentTheme=e,console.log(`[Celebrations] Loading theme: ${e}`);try{const s=await import(c.themes[e].module);this.themeModule=s.default,console.log(`[Celebrations] Theme loaded: ${this.themeModule.displayName}`)}catch(i){console.error(`[Celebrations] Failed to load theme module: ${i.message}`);return}this.canvasManager=new p({canvasId:"celebrations-canvas",zIndex:this.options.zIndex}),this.canvasManager.create(),this.physicsEngine=new w({gustInterval:[5e3,15e3],gustStrength:[-2,2]}),window.addEventListener("resize",()=>{this.canvasManager.resize(),this.resetParticles()}),this.resetParticles(),this.initialized=!0,console.log("[Celebrations] Initialized successfully"),this.options.enabled&&this.start()}resetParticles(){const e=Object.assign({},this.themeModule.intensityConfig[this.options.intensity]),i=a=>String(a).toLowerCase().replace(/[^a-z0-9]/g,""),s=[...Object.keys(e),...this.themeModule.decorationKeys||[]],o=a=>s.find(r=>i(r)===i(a))||a,l=a=>["true","1","yes","on"].includes(String(a).toLowerCase());for(const[a,r]of Object.entries(this.options.overrides)){if((i(a)==="snowonly"||i(a)==="fallingonly")&&l(r)){for(const g of this.themeModule.decorationKeys||[])e[g]=0;continue}r==="off"&&(e[o(a)]=0)}this.config=e;const n=this.canvasManager.canvas.width,h=this.canvasManager.canvas.height;this.particles=[],this.specialParticles=[];const t=e.initialParticleRatio!==void 0?e.initialParticleRatio:1,m=Math.floor(e.count*t);if(this.themeModule.createFallingParticle)for(let a=0;a<m;a++){const r=this.themeModule.createFallingParticle(n,h,e);r.y=Math.random()*h,this.particles.push(r)}else for(let a=0;a<m;a++){const r=P(e,n,h);r.y=Math.random()*h,this.particles.push(r)}if(this.themeModule.createInitialDecorations){const a=this.themeModule.createInitialDecorations(n,h,e);this.specialParticles.push(...a),console.log(`[Celebrations] Created ${a.length} decorations`)}console.log(`[Celebrations] Created ${m}/${e.count} particles (${this.options.intensity}, ${Math.round(t*100)}% initial)`)}start(){if(!this.initialized){console.warn("[Celebrations] Cannot start - not initialized");return}if(this.running){console.warn("[Celebrations] Already running");return}console.log("[Celebrations] Starting animation"),this.running=!0,this.lastTime=performance.now(),this.animate()}pause(){this.running&&(console.log("[Celebrations] Pausing animation"),this.running=!1,this.animationFrame&&(cancelAnimationFrame(this.animationFrame),this.animationFrame=null))}resume(){this.running||this.start()}destroy(){console.log("[Celebrations] Destroying effect"),this.pause(),this.canvasManager&&this.canvasManager.canvas&&this.canvasManager.canvas.remove(),this.particles=[],this.specialParticles=[],this.canvasManager=null,this.physicsEngine=null,this.themeModule=null,this.initialized=!1}setIntensity(e){if(!["light","medium","heavy"].includes(e)){console.error(`[Celebrations] Invalid intensity: ${e}`);return}console.log(`[Celebrations] Changing intensity to: ${e}`),this.options.intensity=e,this.resetParticles()}async setTheme(e){console.log(`[Celebrations] Changing theme to: ${e}`);const i=this.running;this.pause(),await new Promise(s=>setTimeout(s,20)),this.initialized=!1,this.canvasManager&&this.canvasManager.clear(),this.particles=[],this.specialParticles=[],this.canvasManager&&this.canvasManager.clear(),this.options.theme=e,await this.init(),i&&this.start()}animate(){if(!this.running)return;const e=performance.now(),i=e-this.lastTime;this.lastTime=e,this.canvasManager.clear();const s=this.canvasManager.ctx,o=this.canvasManager.canvas.width,l=this.canvasManager.canvas.height,n=this.config;this.physicsEngine.updateWind(e);const h=this.physicsEngine.getWindForce();if(this.particles.length<n.count&&Math.random()<.05&&this.themeModule.createFallingParticle){const t=this.themeModule.createFallingParticle(o,l,n);(t.y===void 0||t.y<0)&&(t.y=-20),this.particles.push(t)}if(this.particles.forEach((t,m)=>{if(M(t,i,h),t.y>l+50&&(t.y=-20,t.x=Math.random()*o),t.x<-50&&(t.x=o+50),t.x>o+50&&(t.x=-50),this.themeModule.drawSnowflake&&t.type==="snowflake")this.themeModule.drawSnowflake(s,t);else if(this.themeModule["draw"+this.capitalizeFirst(t.type)]){const a="draw"+this.capitalizeFirst(t.type);this.themeModule[a](s,t,e)}else s.save(),s.globalAlpha=t.opacity,s.fillStyle=this.themeModule.colors?.primary||"#ffffff",s.beginPath(),s.arc(t.x,t.y,t.size,0,Math.PI*2),s.fill(),s.restore()}),this.themeModule.updateSpecialParticles&&this.themeModule.updateSpecialParticles(this.specialParticles,i,o,l),this.specialParticles=this.specialParticles.filter(t=>{if(!t.active)return!1;if(!t.static){v(t,i,e);const r=t.type==="train"?600:200;if(t.x<-r||t.x>o+r)return t.active=!1,!1}if(!isFinite(t.x)||!isFinite(t.y)||t.size&&!isFinite(t.size))return console.warn("[Celebrations] Invalid particle values, removing:",t.type),t.active=!1,!1;const a="draw"+this.capitalizeFirst(t.type);return this.themeModule[a]&&this.themeModule[a](s,t,e),!0}),this.themeModule.spawnSpecialParticle){const t=this.themeModule.spawnSpecialParticle(this.specialParticles,o,l,n);t&&this.specialParticles.push(t)}this.themeModule.drawGlobalEffects&&this.themeModule.drawGlobalEffects(s,e,o,l),this.animationFrame=requestAnimationFrame(()=>this.animate())}capitalizeFirst(e){if(!e)return"";const i=e.replace(/-([a-z])/g,(s,o)=>o.toUpperCase());return i.charAt(0).toUpperCase()+i.slice(1)}};u(c,"themes",{christmas:{module:"./themes/christmas.js?v=20260930-snow",dates:[[12,1],[1,1]],displayName:"Christmas",emoji:"\u{1F384}"},halloween:{module:"./themes/halloween.js?v=20260930-snow",dates:[[10,26],[10,31]],displayName:"Halloween",emoji:"\u{1F383}"},valentines:{module:"./themes/valentines.js?v=20260930-snow",dates:[[2,9],[2,14]],displayName:"Valentine's Day",emoji:"\u{1F495}"},"guy-fawkes":{module:"./themes/guy-fawkes.js?v=20260930-snow",dates:[[11,1],[11,5]],displayName:"Guy Fawkes Night",emoji:"\u{1F386}"},"st-patricks":{module:"./themes/st-patricks.js?v=20260930-snow",dates:[[3,12],[3,17]],displayName:"St Patrick's Day",emoji:"\u2618\uFE0F"},"st-andrews":{module:"./themes/st-andrews.js?v=20260930-snow",dates:[[11,25],[11,30]],displayName:"St Andrew's Day",emoji:"\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}"},"st-davids":{module:"./themes/st-davids.js?v=20260930-snow",dates:[[2,24],[3,1]],displayName:"St David's Day",emoji:"\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"},"st-georges":{module:"./themes/st-georges.js?v=20260930-snow",dates:[[4,18],[4,23]],displayName:"St George's Day",emoji:"\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}"}});export let CelebrationsEffect=c;export default CelebrationsEffect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createParticle as ee}from"./../core/particles.js";export default{name:"christmas",displayName:"Christmas",emoji:"\u{1F384}",intensityConfig:{light:{count:50,speedRange:[.5,1.5],sizeRange:[1,3],trees:3,wreaths:2,northStars:1,snowmen:2},medium:{count:150,speedRange:[.8,2.5],sizeRange:[1,4],trees:6,wreaths:3,northStars:1,snowmen:3},heavy:{count:300,speedRange:[1,3.5],sizeRange:[1,5],trees:10,wreaths:4,northStars:1,snowmen:4}},particles:["snowflake"],decorations:["tree","wreath","sleigh","robin","train","elf","firework","north-star","snowman"],colors:{primary:"#ffffff",secondary:"#228B22",accent:"#c00",gold:"#FFD700"},createSnowflakeParticle(e,i,s){const y=ee(s,e,i);return y.type="snowflake",y},createFallingParticle(e,i,s){return this.createSnowflakeParticle(e,i,s)},createTree(e,i,s={}){return{type:"tree",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:Math.random()*i,vx:0,vy:0,size:20+Math.random()*15,opacity:.6+Math.random()*.3,rotation:0,rotationSpeed:0,active:!0,static:!0}},createWreath(e,i,s={}){const y=[];for(let o=0;o<20;o++){const h=o/20*Math.PI*2;y.push({angle:h,radius:.9+Math.random()*.2,thickness:.2+Math.random()*.15,color:o%2===0?"#1a6b1a":"#228B22"})}return{type:"wreath",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:Math.random()*i,vx:0,vy:0,size:15+Math.random()*10,opacity:.7+Math.random()*.2,rotation:0,rotationSpeed:0,active:!0,static:!0,shape:y}},createNorthStar(e,i,s={}){return{type:"north-star",x:s.x!==void 0?s.x:e/2,y:s.y!==void 0?s.y:80,vx:0,vy:0,size:25,opacity:1,twinklePhase:Math.random()*Math.PI*2,twinkleSpeed:.003,active:!0,static:!0}},createSnowman(e,i,s={}){return{type:"snowman",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:i-50,vx:0,vy:0,size:15+Math.random()*10,opacity:1,time:Math.random()*1e3,wavePhase:Math.random()*Math.PI*2,active:!0,static:!0}},createInitialDecorations(e,i,s){const y=[],n=s.trees??6;for(let l=0;l<n;l++)y.push(this.createTree(e,i,{x:e/(n+1)*(l+1),y:i-60-Math.random()*20}));const o=s.wreaths??3;for(let l=0;l<o;l++)y.push(this.createWreath(e,i,{x:e/(o+1)*(l+1),y:50+Math.random()*100}));s.northStars!==0&&s.northStars&&y.push(this.createNorthStar(e,i,{x:e/2,y:60}));const h=s.snowmen??3;for(let l=0;l<h;l++)y.push(this.createSnowman(e,i,{x:e/(h+1)*(l+1),y:i-50-Math.random()*10}));return y},spawnSpecialParticle(e,i,s,y={}){const n=Math.random();if(n<5e-4){if(y.sleigh===0||e.some(a=>a.type==="sleigh"))return null;const o=Math.random()<.5,h=o?-100:i+100,l=100+Math.random()*(s*.3);return{type:"sleigh",x:h,startX:h,y:l,baseY:l,targetX:o?i+100:-100,canvasWidth:i,vx:o?3+Math.random()*2:-(3+Math.random()*2),vy:0,arcHeight:150+Math.random()*100,time:0,size:15+Math.random()*10,opacity:.9,rotation:0,active:!0,static:!1}}else if(n<.0013&&y.elf!==0){const o=Math.random()<.5;return{type:"elf",x:o?-50:i+50,y:s-30,baseY:s-30,vx:o?1.5+Math.random()*1:-(1.5+Math.random()*1),waveAmplitude:3,waveFrequency:.05,waveOffset:Math.random()*Math.PI*2,time:0,size:10+Math.random()*5,opacity:.95,rotation:0,active:!0,static:!1}}else if(n<.005&&y.train!==0){if(e.some(g=>g.type==="train"))return null;const o=Math.random()<.5,h=o?-500:i+500,l=21+Math.random()*9,a=l*.72,r=s-a-10;return{type:"train",x:h,y:r,baseY:r,vx:o?4+Math.random()*2:-(4+Math.random()*2),vy:0,size:l,opacity:1,time:0,smoke:[],active:!0,static:!1,carriages:2+Math.floor(Math.random()*2)}}else{if(n<.008&&y.firework!==0)return{type:"firework",x:Math.random()*i,y:s,vx:(Math.random()-.5)*4,vy:-10-Math.random()*5,size:2+Math.random()*2,opacity:1,active:!0,static:!1,time:0,exploded:!1,explosionTime:30+Math.random()*30};if(n<.012&&y.robin!==0){if(e.some(t=>t.type==="robin"))return null;const o=Math.random()<.5,h=Math.random()*(s*.2),l=o?-50:i+50,a=10+Math.random()*5,r=Math.max(a*3,Math.min(s*.6-a*2,s*.2+Math.random()*(s*.4))),g=Math.random()*(i*.6)+i*.2;return{type:"robin",state:"flying_in",x:l,y:h,startX:l,startY:h,targetX:g,targetY:r,vx:o?.5+Math.random()*.5:-(.5+Math.random()*.5),vy:0,size:a,opacity:.95,active:!0,static:!1,sitTime:3e3+Math.random()*2e3,sitStartTime:0,flightProgress:0,time:0,waveOffset:Math.random()*Math.PI*2}}}return null},updateSpecialParticles(e,i,s=1024,y=768){e.forEach(n=>{switch(n.time!==void 0&&(n.time+=i),n.type){case"sleigh":(n.vx>0&&n.x>n.targetX||n.vx<0&&n.x<n.targetX)&&(n.active=!1);break;case"robin":switch(n.state){case"flying_in":const o=n.targetX-n.x,h=n.targetY-n.y,l=Math.sqrt(o*o+h*h);if(l<20)n.state="sitting",n.vx=0,n.vy=0,n.sitStartTime=n.time;else{const P=o/l,M=h/l,m=3;n.vx=P*m;const k=30,S=.008,u=Math.sin(n.time*S+n.waveOffset)*k,v=Math.cos(n.time*S+n.waveOffset)*k*S;n.vy=M*m*.3+v}break;case"sitting":if(n.vx=0,n.vy=0,n.time-n.sitStartTime>n.sitTime){n.state="flying_away";const P=n.x<s/2?-4:4;n.vx=P,n.flyAwayStartTime=n.time}break;case"flying_away":const a=n.vx>0?1:-1;n.vx=a*4;const r=25,g=.01,t=n.time-n.flyAwayStartTime,f=Math.sin(t*g+n.waveOffset)*r,d=Math.cos(t*g+n.waveOffset)*r*g;n.vy=-1.5+d,(n.x<-50||n.x>s+50||n.y<-50)&&(n.active=!1);break}break;case"train":if(n.smoke||(n.smoke=[]),(n.vx>0&&n.x>s+500||n.vx<0&&n.x<-500)&&(n.active=!1),n.lastSmokeTime||(n.lastSmokeTime=0),n.time-n.lastSmokeTime>150){n.lastSmokeTime=n.time;const h=n.size*1.8/20,l=n.vx>0?1:-1,a=h*8,r=h*7,g=h*10,d=-a-h-r-g*2-h*8,P=h*70,M=h*25,k=(P-M)*.7,S=n.x+k*l,u=n.y+d,v={x:S,y:u,vx:(Math.random()-.5)*.8,vy:-.8-Math.random()*.4,size:8+Math.random()*6,opacity:.7+Math.random()*.2,fadeRate:.012+Math.random()*.008};n.smoke.push(v)}n.smoke=n.smoke.filter(o=>(o.x+=o.vx,o.y+=o.vy,o.vy*=.99,o.size*=1.02,o.opacity-=o.fadeRate,o.opacity>0));break;case"firework":if(!n.exploded){const o=n.y<=n.targetY,h=n.time>=n.explosionTime;(o||h)&&(n.exploded=!0,this.explodeFirework(n,e),n.active=!1)}break}})},drawSnowflake(e,i){e.save(),e.translate(i.x,i.y),e.rotate(i.rotation),e.globalAlpha=i.opacity,e.fillStyle="#ffffff",e.strokeStyle="#ffffff",e.lineWidth=Math.max(i.size*.15,.5);const s=6,y=i.size;for(let n=0;n<s;n++){const o=Math.PI*2*n/s;e.beginPath(),e.moveTo(0,0),e.lineTo(Math.cos(o)*y,Math.sin(o)*y),e.stroke();const h=y*.4,l=Math.PI/6,a=Math.cos(o)*(y*.6),r=Math.sin(o)*(y*.6);e.beginPath(),e.moveTo(a,r),e.lineTo(a+Math.cos(o-l)*h,r+Math.sin(o-l)*h),e.stroke(),e.beginPath(),e.moveTo(a,r),e.lineTo(a+Math.cos(o+l)*h,r+Math.sin(o+l)*h),e.stroke()}e.restore()},drawTree(e,i,s){const y=i.x,n=i.y,o=i.size;e.save(),e.translate(y,n),e.rotate(i.rotation),e.fillStyle="#654321",e.beginPath(),e.moveTo(-o*.2,o*.8),e.lineTo(o*.2,o*.8),e.lineTo(o*.15,o*1.3),e.lineTo(-o*.15,o*1.3),e.closePath(),e.fill(),e.strokeStyle="#4a2f1a",e.lineWidth=1;for(let t=0;t<3;t++)e.beginPath(),e.moveTo(-o*.15,o*.9+t*o*.12),e.lineTo(o*.15,o*.9+t*o*.12),e.stroke();e.fillStyle="#228B22";for(let t=0;t<3;t++){const f=t*o*.4,d=o*(1.2-t*.2);e.beginPath(),e.moveTo(0,-f),e.lineTo(-d,o*.3-f),e.lineTo(d,o*.3-f),e.closePath(),e.fill()}e.strokeStyle="#C0C0C0",e.lineWidth=1.5;for(let t=0;t<3;t++){const f=t*o*.4,d=o*(1.2-t*.2);e.beginPath();for(let P=0;P<=6;P++){const M=-d+P/6*d*2,m=o*.15-f+(P%2===0?-o*.1:0);P===0?e.moveTo(M,m):e.lineTo(M,m)}e.stroke()}const h=["#ff0000","#0000ff","#ffd700","#ff69b4","#00ff00"];for(let t=0;t<8;t++){const f=Math.floor(t/3),d=f*o*.4,P=o*(1.2-f*.2)*.7,M=t%3*(Math.PI*2/3)+f*.5,m=Math.cos(M)*P,k=o*.1-d;e.fillStyle=h[t%h.length],e.beginPath(),e.arc(m,k,o*.12,0,Math.PI*2),e.fill(),e.fillStyle="rgba(255,255,255,0.5)",e.beginPath(),e.arc(m-o*.04,k-o*.04,o*.04,0,Math.PI*2),e.fill()}const l=["#ffff00","#ff0000","#00ff00","#0000ff","#ffffff"];for(let t=0;t<12;t++){const f=Math.floor(t/4),d=f*o*.4,P=o*(1.2-f*.2)*.85,M=t%4*(Math.PI*2/4)+f*.3,m=Math.cos(M)*P,k=o*.2-d,S=(Math.sin(s*.003+t*.5)+1)*.5,u=.3+S*.7,v=e.createRadialGradient(m,k,0,m,k,o*.15),T=l[t%l.length];v.addColorStop(0,T),v.addColorStop(1,"rgba(255,255,255,0)"),e.globalAlpha=u,e.fillStyle=v,e.beginPath(),e.arc(m,k,o*.15,0,Math.PI*2),e.fill(),e.globalAlpha=.5+S*.5,e.fillStyle=T,e.beginPath(),e.arc(m,k,o*.08,0,Math.PI*2),e.fill(),e.globalAlpha=1}const a=o*.35,r=-o*1.4,g=e.createRadialGradient(0,r,0,0,r,a*2);g.addColorStop(0,"rgba(255,223,0,1)"),g.addColorStop(.3,"rgba(255,215,0,0.7)"),g.addColorStop(.6,"rgba(255,215,0,0.3)"),g.addColorStop(1,"rgba(255,215,0,0)"),e.fillStyle=g,e.beginPath(),e.arc(0,r,a*2,0,Math.PI*2),e.fill(),e.fillStyle="#FFD700",e.strokeStyle="#FFA500",e.lineWidth=2,e.save(),e.translate(0,r),e.beginPath();for(let t=0;t<10;t++){const f=Math.PI*2*t/10-Math.PI/2,d=t%2===0?a:a*.4,P=Math.cos(f)*d,M=Math.sin(f)*d;t===0?e.moveTo(P,M):e.lineTo(P,M)}e.closePath(),e.fill(),e.stroke(),e.restore(),e.restore()},drawWreath(e,i,s){const y=i.x,n=i.y,o=i.size;e.save(),e.translate(y,n),e.rotate(i.rotation),i.shape.forEach(a=>{e.lineWidth=o*a.thickness,e.strokeStyle=a.color,e.beginPath();const r=a.angle-Math.PI/i.shape.length,g=a.angle+Math.PI/i.shape.length;e.arc(0,0,o*a.radius,r,g),e.stroke()});const h=["#ff0000","#ffff00","#0000ff"];for(let a=0;a<4;a++){const r=a/4*Math.PI*2+i.rotation,g=Math.cos(r)*o,t=Math.sin(r)*o,f=(Math.sin(s*.002+a*.7)+1)/2;if(f>.5){const d=(f-.5)*2,P=h[a%h.length],M=e.createRadialGradient(g,t,0,g,t,o*.15);M.addColorStop(0,P),M.addColorStop(1,"rgba(255,255,255,0)"),e.globalAlpha=d,e.fillStyle=M,e.beginPath(),e.arc(g,t,o*.15,0,Math.PI*2),e.fill(),e.globalAlpha=1}}e.fillStyle="#c00";const l=-o;e.beginPath(),e.ellipse(-o*.3,l,o*.3,o*.4,-.3,0,Math.PI*2),e.fill(),e.beginPath(),e.ellipse(o*.3,l,o*.3,o*.4,.3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,l,o*.2,0,Math.PI*2),e.fill(),e.restore()},drawNorthStar(e,i,s){const y=i.x,n=i.y,o=i.size,h=.8+Math.sin(s*i.twinkleSpeed+i.twinklePhase)*.2;e.save(),e.translate(y,n);const l=o*4*h,a=e.createRadialGradient(0,0,0,0,0,l);a.addColorStop(0,"rgba(220, 230, 240, 0.4)"),a.addColorStop(.4,"rgba(200, 210, 220, 0.2)"),a.addColorStop(1,"rgba(180, 190, 200, 0)"),e.fillStyle=a,e.beginPath(),e.arc(0,0,l,0,Math.PI*2),e.fill();const r=o*1,g=o*1.5,t=o*.12,f=e.createRadialGradient(0,0,0,0,0,o);f.addColorStop(0,"#ffffff"),f.addColorStop(.3,"#f0f0f0"),f.addColorStop(.6,"#c0c0c0"),f.addColorStop(1,"#a0a0a0"),e.shadowColor="rgba(220, 230, 240, 0.9)",e.shadowBlur=o*.8*h,e.fillStyle=f,e.beginPath(),e.moveTo(0,-g),e.lineTo(t,-t),e.lineTo(r,0),e.lineTo(t,t),e.lineTo(0,g),e.lineTo(-t,t),e.lineTo(-r,0),e.lineTo(-t,-t),e.closePath(),e.fill(),e.shadowBlur=o*1.2*h,e.shadowColor="rgba(255, 255, 255, 1)";const d=e.createRadialGradient(0,0,0,0,0,o*.3);d.addColorStop(0,"#ffffff"),d.addColorStop(.6,"#f5f5f5"),d.addColorStop(1,"rgba(200, 200, 200, 0.8)"),e.fillStyle=d,e.beginPath(),e.arc(0,0,o*.3,0,Math.PI*2),e.fill(),e.shadowBlur=0,e.restore()},drawSleigh(e,i){const s=i.x,y=Math.abs(i.targetX-i.startX),n=Math.abs(i.x-i.startX),o=Math.min(1,n/y),h=Math.sin(o*Math.PI)*i.arcHeight,l=i.baseY-h,a=i.size*1.5,r=i.vx>0?1:-1,g=Math.abs(Math.sin(i.time*.007));if(!isFinite(s)||!isFinite(l)||!isFinite(a)){console.warn("[Christmas] Invalid sleigh values:",{x:s,y:l,size:a});return}const t=[{x:4.8,y:0},{x:4,y:-.3},{x:4,y:.3},{x:3.2,y:-.15},{x:3.2,y:.15}];t.forEach((T,F)=>{const b=s+r*(a*T.x),C=T.y*a;e.fillStyle="#9c6e49",e.strokeStyle="#7b563a",e.lineWidth=1,e.beginPath(),e.moveTo(b-r*a*.4,l+C),e.quadraticCurveTo(b,l+C-a*.4,b+r*a*.4,l+C),e.quadraticCurveTo(b,l+C+a*.4,b-r*a*.4,l+C),e.fill(),e.stroke();const R=b+r*a*.5,G=l+C-a*.3;e.beginPath(),e.ellipse(R,G,a*.25,a*.2,0,0,Math.PI*2),e.fill(),e.stroke(),e.strokeStyle="#6e4a2e",e.lineWidth=1.5;const Y=R-r*a*.1,A=G-a*.15;e.beginPath(),e.moveTo(Y,A),e.lineTo(Y-r*a*.2,A-a*.3),e.lineTo(Y-r*a*.1,A-a*.4),e.moveTo(Y-r*a*.2,A-a*.3),e.lineTo(Y-r*a*.3,A-a*.35),e.stroke();const X=l+C+a*.1;e.lineWidth=2.5,e.strokeStyle="#7b563a";const L=g*a*.45;e.beginPath(),e.moveTo(b+r*a*.3,X),e.lineTo(b+r*(a*.3+L),X+a*.3),e.stroke();const W=(1-g)*a*.45;if(e.beginPath(),e.moveTo(b-r*a*.3,X),e.lineTo(b-r*(a*.3+W),X+a*.3),e.stroke(),F===0){const z=R+r*a*.25,B=G;e.fillStyle="#ff0000",e.beginPath(),e.arc(z,B,a*.03,0,Math.PI*2),e.fill();const q=e.createRadialGradient(z,B,0,z,B,a*.1);q.addColorStop(0,"rgba(255,0,0,0.7)"),q.addColorStop(1,"rgba(255,0,0,0)"),e.fillStyle=q,e.beginPath(),e.arc(z,B,a*.1,0,Math.PI*2),e.fill()}}),e.fillStyle="#c00",e.strokeStyle="#FFD700",e.lineWidth=2;const f=l-a*.7,d=s+r*a*1.5,P=s-r*a*.3,M=l+a*.3;e.beginPath(),e.moveTo(d,f),e.quadraticCurveTo(s+r*a,l-a*.2,d-r*a*.8,l),e.lineTo(P,l),e.lineTo(P,M),e.lineTo(d,M),e.closePath(),e.fill(),e.stroke(),e.beginPath(),e.moveTo(P,l),e.quadraticCurveTo(P-r*a*.4,l-a*.5,P,f),e.quadraticCurveTo(P+r*a*.2,l-a*.4,P+r*a*.2,l),e.closePath(),e.fill(),e.stroke(),e.strokeStyle="#a52a2a",e.lineWidth=4;const m=M+a*.2;function k(T){e.beginPath(),e.moveTo(d+r*a*.1,m+T),e.quadraticCurveTo(s,m+T+a*.2,P-r*a*.2,m+T),e.stroke(),e.beginPath(),e.moveTo(d-r*a*.5,M),e.lineTo(d-r*a*.5,m+T),e.stroke(),e.beginPath(),e.moveTo(P+r*a*.5,M),e.lineTo(P+r*a*.5,m+T),e.stroke()}k(0),k(a*.1);const S=s-r*a*.05;e.fillStyle="#5c4033",e.beginPath(),e.moveTo(S-a*.3,l-a*.4),e.quadraticCurveTo(S-a*.6,l-a*.2,S-a*.4,l+a*.1),e.quadraticCurveTo(S,l+a*.3,S+a*.4,l+a*.1),e.quadraticCurveTo(S+a*.6,l-a*.2,S+a*.3,l-a*.4),e.closePath(),e.fill(),e.fillStyle="rgba(255, 255, 255, 0.2)",e.beginPath(),e.ellipse(S+a*.1,l-a*.3,a*.2,a*.1,-Math.PI/4,0,Math.PI*2),e.fill(),e.strokeStyle="#654321",e.lineWidth=1,e.beginPath(),e.arc(S,l-a*.4,a*.2,0,Math.PI,!0),e.stroke();const u=s+r*a*.6,v=l-a*.55;e.fillStyle="#c00",e.beginPath(),e.moveTo(u-a*.2,v),e.lineTo(u+a*.2,v),e.lineTo(u,v-a*.4),e.closePath(),e.fill(),e.fillStyle="#fff",e.fillRect(u-a*.22,v,a*.44,a*.08),e.beginPath(),e.arc(u,v-a*.4,a*.07,0,Math.PI*2),e.fill(),e.fillStyle="#FFD7BA",e.beginPath(),e.arc(u,v+a*.08,a*.18,0,Math.PI*2),e.fill(),e.fillStyle="#fff",e.beginPath(),e.ellipse(u,v+a*.2,a*.25,a*.2,0,0,Math.PI),e.fill(),e.strokeStyle="#654321",e.lineWidth=1,t.forEach(T=>{const F=s+r*(a*T.x),b=T.y*a,C=F+r*a*.5;e.beginPath(),e.moveTo(u,v+a*.1),e.quadraticCurveTo((u+C)/2,l+b-a*.5,C-r*a*.1,l+b-a*.3),e.stroke()})},drawElf(e,i){const s=i.x,y=i.y,n=i.size,o=i.vx>0?1:-1;e.save(),e.translate(s,y);const h=Math.sin(i.time*.05)*(Math.PI/3);e.fillStyle="#004d00",e.fillRect(o*-n*.1,n*.2,n*.2,n*.5+Math.sin(h+Math.PI)*n*.1),e.fillStyle="#4a2c2a",e.beginPath(),e.ellipse(o*0,n*.7+Math.sin(h+Math.PI)*n*.1,n*.3,n*.15,0,0,Math.PI*2),e.fill(),e.fillStyle="#006400",e.fillRect(o*n*.1,n*.2,n*.2,n*.5+Math.sin(h)*n*.1),e.fillStyle="#5d3836",e.beginPath(),e.ellipse(o*n*.2,n*.7+Math.sin(h)*n*.1,n*.3,n*.15,0,0,Math.PI*2),e.fill(),e.fillStyle="#008000",e.beginPath(),e.moveTo(0,-n*.5),e.lineTo(o*n*.4,n*.3),e.lineTo(o*-n*.4,n*.3),e.closePath(),e.fill(),e.fillStyle="#FFD7BA",e.beginPath(),e.arc(0,-n*.6,n*.3,0,Math.PI*2),e.fill(),e.fillStyle="#c00",e.beginPath(),e.moveTo(0,-n*.7),e.lineTo(o*n*.35,-n*.6),e.lineTo(o*-n*.35,-n*.6),e.closePath(),e.fill(),e.beginPath(),e.moveTo(0,-n*.7),e.quadraticCurveTo(o*n*.2,-n*1.1,o*n*.4,-n*1.3),e.stroke(),e.fillStyle="#ffff00",e.beginPath(),e.arc(o*n*.4,-n*1.3,n*.15,0,Math.PI*2),e.fill(),e.restore()},drawTrain(e,i){const s=i.x,y=i.y,n=i.size*1.8,o=i.vx>0?1:-1,h=i.time;i.smoke&&i.smoke.length>0&&i.smoke.forEach(w=>{e.save(),e.globalAlpha=w.opacity;const I=e.createRadialGradient(w.x,w.y,0,w.x,w.y,w.size);I.addColorStop(0,"#CCCCCC"),I.addColorStop(.5,"#AAAAAA"),I.addColorStop(1,"#888888"),e.fillStyle=I,e.beginPath(),e.arc(w.x,w.y,w.size,0,Math.PI*2),e.fill(),e.restore()}),e.save(),e.translate(s,y),o===-1&&e.scale(-1,1);const l=h*.005,a=n/20,r=0,g=a*8,t=a*5,f=a*7,d=a*35,P=-t-a,M=-g-a,m=P-d,k=a*30,S=a*10,u=M-f-S*2,v=a*70,T=a*25,F=v-T,b=a*60,C=a*15;for(let w=1;w<=i.carriages;w++){const I=-(T+w*(b+C)-C);e.fillStyle="#222",e.strokeStyle="#444",e.lineWidth=1,e.beginPath(),e.arc(I+b*.25,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(I+b*.75,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#004d00",e.strokeStyle="#DAA520",e.lineWidth=a*.5,e.fillRect(I,m,b,d),e.strokeRect(I,m,b,d);const U=d*.6,_=m+d*.2;e.shadowColor="#F1C40F",e.shadowBlur=15;const c=.8+Math.sin(h*.001+w)*.2;e.fillStyle=`rgba(255, 235, 150, ${c})`;const E=b*.25,$=I+b*.15,j=I+b*.6;e.fillRect($,_,E,U),e.fillRect(j,_,E,U),e.shadowBlur=0,e.fillStyle="rgba(0, 0, 0, 0.4)";const D=E*.2,V=$+E/2,J=_+D*1.8;e.beginPath(),e.arc(V,J,D,0,Math.PI*2),e.fill(),e.fillRect(V-D,J+D,D*2,D*2);const O=E*.18,K=j+E/2,Q=_+O*1.6;e.beginPath(),e.arc(K,Q,O,0,Math.PI*2),e.fill(),e.fillRect(K-O*1.2,Q,O*2.4,O*2.5);const N=a*4;e.fillStyle="#228B22",e.beginPath(),e.arc(I+b/2,m+d/2,N,0,Math.PI*2),e.arc(I+b/2,m+d/2,N*.6,0,Math.PI*2,!0),e.fill(),e.fillStyle="#c00",e.beginPath(),e.arc(I+b/2,m+d/2+N,N*.3,0,Math.PI*2),e.fill(),e.strokeStyle="#111",e.lineWidth=a,e.beginPath();const Z=P+f/2,x=w===1?-T:I+b+C;e.moveTo(I+b,Z),e.lineTo(x,Z),e.stroke()}e.fillStyle="#2C3E50",e.strokeStyle="#555",e.lineWidth=a;const R=[a*15,a*35,a*55];R.forEach(w=>{e.beginPath(),e.arc(w,-g,g,0,Math.PI*2),e.fill(),e.stroke()});const G=-a*10;e.beginPath(),e.arc(G,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#1C2833",e.fillRect(-T-a*5,M-f,v+a*5,f),e.fillStyle="#B03A2E",e.strokeStyle="#DAA520",e.lineWidth=a*.7;const Y=M-f-k;e.beginPath(),e.moveTo(-T,Y),e.lineTo(0,Y),e.lineTo(0,M-f),e.lineTo(-T-a*5,M-f),e.closePath(),e.fill(),e.stroke(),e.fillStyle=`rgba(255, 235, 150, ${.8+Math.sin(h*.001)*.2})`,e.fillRect(-T+a*4,Y+a*4,T-a*12,a*10),e.fillStyle="#2C3E50",e.beginPath(),e.moveTo(0,M-f),e.lineTo(F,M-f),e.arc(F,u+S,S,Math.PI/2,-Math.PI/2),e.lineTo(0,u),e.closePath(),e.fill(),e.stroke();const A=u-a*8;e.fillStyle="#17202A",e.beginPath(),e.moveTo(F*.7,u),e.lineTo(F*.7-a*2,A),e.lineTo(F*.7+a*10,A-a*4),e.lineTo(F*.7+a*8,u),e.closePath(),e.fill();const X=F+S,L=u+S,W=a*4,z=e.createRadialGradient(X,L,W*.2,X,L,W*1.5);z.addColorStop(0,"rgba(255, 255, 200, 1)"),z.addColorStop(.4,"rgba(255, 220, 100, 0.8)"),z.addColorStop(1,"rgba(255, 200, 0, 0)"),e.fillStyle=z,e.fillRect(X-W,L-W,W*2,W*2),e.strokeStyle="#99A3A4",e.lineWidth=a*2;const B=Math.sin(l)*g*.6,q=R[1]+Math.cos(l)*g*.6,H=v-a*10,p=M-f+a*2+Math.sin(h*.01)*a;e.beginPath(),e.moveTo(H,p),e.lineTo(q,-g+B),e.stroke(),e.lineWidth=a*1.5,[R[0],R[2]].forEach(w=>{const I=w+Math.cos(l)*g*.6;e.beginPath(),e.moveTo(q,-g+B),e.lineTo(I,-g+B),e.stroke()}),e.restore()},drawFirework(e,i){e.fillStyle=i.color||"#ffffff",e.beginPath(),e.arc(i.x,i.y,i.size,0,Math.PI*2),e.fill()},explodeFirework(e,i){const s=50+Math.random()*50,y=["#ff0000","#ffff00","#00ff00","#0000ff","#ffffff"];for(let n=0;n<s;n++){const o=Math.random()*Math.PI*2,h=Math.random()*5+2;i.push({type:"spark",x:e.x,y:e.y,vx:Math.cos(o)*h,vy:Math.sin(o)*h,size:2+Math.random()*2,opacity:1,active:!0,static:!1,color:y[Math.floor(Math.random()*y.length)]})}},drawRobin(e,i,s){const y=i.x,n=i.y,o=i.size,h=i.vx>=0?1:-1,l=i.state==="flying_in"||i.state==="flying_away",a=i.state==="sitting";i.wingIntensity===void 0&&(i.wingIntensity=l?1:0);const r=l?1:0,g=.02;i.wingIntensity+=(r-i.wingIntensity)*g;let t=0;if(i.wingIntensity>.01){const M=Math.sin(s*.012+i.waveOffset),m=Math.sin(M*Math.PI/2),k=Math.PI/6;t=m*k*i.wingIntensity}e.save(),e.translate(y,n),h===-1&&e.scale(-1,1),e.fillStyle="#A52A2A",e.beginPath(),e.ellipse(0,0,o*.6,o*.8,0,0,Math.PI*2),e.fill(),e.fillStyle="#DC143C",e.beginPath(),e.ellipse(o*.15,o*.1,o*.45,o*.6,0,0,Math.PI*2),e.fill(),e.fillStyle="#654321",e.strokeStyle="#4a2c2a",e.lineWidth=.5,e.beginPath(),e.moveTo(-o*.5,0),e.quadraticCurveTo(-o*.7,-o*.08,-o*.85,0),e.quadraticCurveTo(-o*.7,o*.08,-o*.5,0),e.fill(),e.stroke(),e.fillStyle="#8B4513",e.strokeStyle="#654321",e.lineWidth=1,e.save(),e.translate(-o*.3,-o*.1),e.rotate(t),e.beginPath(),e.ellipse(0,0,o*.45,o*.25,-Math.PI/6,0,Math.PI*2),e.fill(),e.stroke(),e.restore(),e.fillStyle="#A0692F",e.strokeStyle="#654321",e.lineWidth=1,e.save(),e.translate(-o*.3,o*.1),e.rotate(-t),e.beginPath(),e.ellipse(0,0,o*.45,o*.25,Math.PI/6,0,Math.PI*2),e.fill(),e.stroke(),e.restore(),e.fillStyle="#A52A2A",e.beginPath(),e.arc(o*.5,-o*.2,o*.35,0,Math.PI*2),e.fill(),e.fillStyle="#FFD700",e.strokeStyle="#DAA520",e.lineWidth=.5,e.beginPath(),e.moveTo(o*.75,-o*.2),e.lineTo(o*.95,-o*.15),e.lineTo(o*.75,-o*.1),e.closePath(),e.fill(),e.stroke(),e.fillStyle="#000000",e.beginPath(),e.arc(o*.6,-o*.25,o*.08,0,Math.PI*2),e.fill(),e.fillStyle="#FFFFFF",e.beginPath(),e.arc(o*.62,-o*.27,o*.03,0,Math.PI*2),e.fill(),a&&(e.strokeStyle="#8B4513",e.lineWidth=o*.08,e.lineCap="round",e.beginPath(),e.moveTo(o*.1,o*.7),e.lineTo(o*.1,o*1),e.stroke(),e.beginPath(),e.moveTo(-o*.1,o*.7),e.lineTo(-o*.1,o*1),e.stroke(),e.lineWidth=o*.06,e.beginPath(),e.moveTo(o*.1,o*1),e.lineTo(o*.25,o*1),e.stroke(),e.beginPath(),e.moveTo(-o*.1,o*1),e.lineTo(-o*.25,o*1),e.stroke());const f=o*.5,d=-o*.55;e.fillStyle="#c00",e.beginPath(),e.moveTo(f-o*.3,d),e.lineTo(f+o*.25,d),e.lineTo(f+o*.1,d-o*.5),e.closePath(),e.fill(),e.fillStyle="#FFFFFF",e.fillRect(f-o*.32,d,o*.58,o*.1),e.beginPath(),e.arc(f+o*.1,d-o*.5,o*.1,0,Math.PI*2),e.fill(),e.restore()},drawSnowman(e,i,s){const y=i.x,n=i.y,o=i.size,h=Math.sin(s*.002+i.wavePhase)*.03;e.save(),e.translate(y,n),e.rotate(h),e.fillStyle="rgba(0, 0, 0, 0.2)",e.beginPath(),e.ellipse(0,o*2,o*1.2,o*.3,0,0,Math.PI*2),e.fill(),e.fillStyle="#FFFFFF",e.strokeStyle="#E0E0E0",e.lineWidth=1,e.beginPath(),e.arc(0,o*1.3,o*1,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(0,o*.3,o*.7,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(0,-o*.6,o*.5,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#000000",e.beginPath(),e.arc(0,o*.5,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,o*.1,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,-o*.2,o*.08,0,Math.PI*2),e.fill(),e.strokeStyle="#654321",e.lineWidth=o*.1,e.beginPath(),e.moveTo(-o*.6,o*.3),e.lineTo(-o*1.2,o*0),e.lineTo(-o*1.5,-o*.1),e.stroke(),e.lineWidth=o*.05,e.beginPath(),e.moveTo(-o*1.5,-o*.1),e.lineTo(-o*1.7,-o*.3),e.stroke(),e.beginPath(),e.moveTo(-o*1.5,-o*.1),e.lineTo(-o*1.8,-o*.05),e.stroke(),e.lineWidth=o*.1,e.beginPath(),e.moveTo(o*.6,o*.3),e.lineTo(o*1.2,o*0),e.lineTo(o*1.5,-o*.1),e.stroke(),e.lineWidth=o*.05,e.beginPath(),e.moveTo(o*1.5,-o*.1),e.lineTo(o*1.7,-o*.3),e.stroke(),e.beginPath(),e.moveTo(o*1.5,-o*.1),e.lineTo(o*1.8,-o*.05),e.stroke(),e.fillStyle="#FF6347",e.beginPath(),e.moveTo(o*.15,-o*.6),e.lineTo(o*.6,-o*.65),e.lineTo(o*.15,-o*.55),e.closePath(),e.fill(),e.fillStyle="#000000",e.beginPath(),e.arc(-o*.15,-o*.7,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(o*.15,-o*.7,o*.08,0,Math.PI*2),e.fill(),[{x:-o*.2,y:-o*.4},{x:-o*.1,y:-o*.35},{x:0,y:-o*.33},{x:o*.1,y:-o*.35},{x:o*.2,y:-o*.4}].forEach(a=>{e.beginPath(),e.arc(a.x,a.y,o*.05,0,Math.PI*2),e.fill()}),e.fillStyle="#c00",e.strokeStyle="#8B0000",e.lineWidth=1,e.beginPath(),e.ellipse(0,-o*.15,o*.55,o*.15,0,0,Math.PI*2),e.fill(),e.stroke(),e.fillRect(o*.3,-o*.1,o*.2,o*.8),e.strokeRect(o*.3,-o*.1,o*.2,o*.8),e.strokeStyle="#8B0000",e.lineWidth=o*.03;for(let a=0;a<4;a++)e.beginPath(),e.moveTo(o*.33+a*o*.13,o*.7),e.lineTo(o*.33+a*o*.13,o*.85),e.stroke();e.fillStyle="#000000",e.strokeStyle="#333333",e.lineWidth=2,e.beginPath(),e.ellipse(0,-o*1.1,o*.7,o*.15,0,0,Math.PI*2),e.fill(),e.stroke(),e.fillRect(-o*.45,-o*1.8,o*.9,o*.7),e.strokeRect(-o*.45,-o*1.8,o*.9,o*.7),e.fillStyle="#c00",e.fillRect(-o*.45,-o*1.3,o*.9,o*.15),e.fillStyle="#228B22",e.beginPath(),e.arc(-o*.15,-o*1.22,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(o*.15,-o*1.22,o*.08,0,Math.PI*2),e.fill(),e.fillStyle="#FF0000",e.beginPath(),e.arc(0,-o*1.25,o*.06,0,Math.PI*2),e.fill(),e.restore()}};
|
|
1
|
+
import{createParticle as ee}from"./../core/particles.js";export default{name:"christmas",displayName:"Christmas",emoji:"\u{1F384}",intensityConfig:{light:{count:50,speedRange:[.5,1.5],sizeRange:[1,3],trees:3,wreaths:2,northStars:1,snowmen:2},medium:{count:150,speedRange:[.8,2.5],sizeRange:[1,4],trees:6,wreaths:3,northStars:1,snowmen:3},heavy:{count:300,speedRange:[1,3.5],sizeRange:[1,5],trees:10,wreaths:4,northStars:1,snowmen:4}},particles:["snowflake"],decorations:["tree","wreath","sleigh","robin","train","elf","firework","north-star","snowman"],decorationKeys:["trees","wreaths","northStars","snowmen","sleigh","elf","train","firework","robin"],colors:{primary:"#ffffff",secondary:"#228B22",accent:"#c00",gold:"#FFD700"},createSnowflakeParticle(e,i,s){const y=ee(s,e,i);return y.type="snowflake",y},createFallingParticle(e,i,s){return this.createSnowflakeParticle(e,i,s)},createTree(e,i,s={}){return{type:"tree",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:Math.random()*i,vx:0,vy:0,size:20+Math.random()*15,opacity:.6+Math.random()*.3,rotation:0,rotationSpeed:0,active:!0,static:!0}},createWreath(e,i,s={}){const y=[];for(let o=0;o<20;o++){const h=o/20*Math.PI*2;y.push({angle:h,radius:.9+Math.random()*.2,thickness:.2+Math.random()*.15,color:o%2===0?"#1a6b1a":"#228B22"})}return{type:"wreath",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:Math.random()*i,vx:0,vy:0,size:15+Math.random()*10,opacity:.7+Math.random()*.2,rotation:0,rotationSpeed:0,active:!0,static:!0,shape:y}},createNorthStar(e,i,s={}){return{type:"north-star",x:s.x!==void 0?s.x:e/2,y:s.y!==void 0?s.y:80,vx:0,vy:0,size:25,opacity:1,twinklePhase:Math.random()*Math.PI*2,twinkleSpeed:.003,active:!0,static:!0}},createSnowman(e,i,s={}){return{type:"snowman",x:s.x!==void 0?s.x:Math.random()*e,y:s.y!==void 0?s.y:i-50,vx:0,vy:0,size:15+Math.random()*10,opacity:1,time:Math.random()*1e3,wavePhase:Math.random()*Math.PI*2,active:!0,static:!0}},createInitialDecorations(e,i,s){const y=[],n=s.trees??6;for(let l=0;l<n;l++)y.push(this.createTree(e,i,{x:e/(n+1)*(l+1),y:i-60-Math.random()*20}));const o=s.wreaths??3;for(let l=0;l<o;l++)y.push(this.createWreath(e,i,{x:e/(o+1)*(l+1),y:50+Math.random()*100}));s.northStars!==0&&s.northStars&&y.push(this.createNorthStar(e,i,{x:e/2,y:60}));const h=s.snowmen??3;for(let l=0;l<h;l++)y.push(this.createSnowman(e,i,{x:e/(h+1)*(l+1),y:i-50-Math.random()*10}));return y},spawnSpecialParticle(e,i,s,y={}){const n=Math.random();if(n<5e-4){if(y.sleigh===0||e.some(a=>a.type==="sleigh"))return null;const o=Math.random()<.5,h=o?-100:i+100,l=100+Math.random()*(s*.3);return{type:"sleigh",x:h,startX:h,y:l,baseY:l,targetX:o?i+100:-100,canvasWidth:i,vx:o?3+Math.random()*2:-(3+Math.random()*2),vy:0,arcHeight:150+Math.random()*100,time:0,size:15+Math.random()*10,opacity:.9,rotation:0,active:!0,static:!1}}else if(n<.0013&&y.elf!==0){const o=Math.random()<.5;return{type:"elf",x:o?-50:i+50,y:s-30,baseY:s-30,vx:o?1.5+Math.random()*1:-(1.5+Math.random()*1),waveAmplitude:3,waveFrequency:.05,waveOffset:Math.random()*Math.PI*2,time:0,size:10+Math.random()*5,opacity:.95,rotation:0,active:!0,static:!1}}else if(n<.005&&y.train!==0){if(e.some(g=>g.type==="train"))return null;const o=Math.random()<.5,h=o?-500:i+500,l=21+Math.random()*9,a=l*.72,r=s-a-10;return{type:"train",x:h,y:r,baseY:r,vx:o?4+Math.random()*2:-(4+Math.random()*2),vy:0,size:l,opacity:1,time:0,smoke:[],active:!0,static:!1,carriages:2+Math.floor(Math.random()*2)}}else{if(n<.008&&y.firework!==0)return{type:"firework",x:Math.random()*i,y:s,vx:(Math.random()-.5)*4,vy:-10-Math.random()*5,size:2+Math.random()*2,opacity:1,active:!0,static:!1,time:0,exploded:!1,explosionTime:30+Math.random()*30};if(n<.012&&y.robin!==0){if(e.some(t=>t.type==="robin"))return null;const o=Math.random()<.5,h=Math.random()*(s*.2),l=o?-50:i+50,a=10+Math.random()*5,r=Math.max(a*3,Math.min(s*.6-a*2,s*.2+Math.random()*(s*.4))),g=Math.random()*(i*.6)+i*.2;return{type:"robin",state:"flying_in",x:l,y:h,startX:l,startY:h,targetX:g,targetY:r,vx:o?.5+Math.random()*.5:-(.5+Math.random()*.5),vy:0,size:a,opacity:.95,active:!0,static:!1,sitTime:3e3+Math.random()*2e3,sitStartTime:0,flightProgress:0,time:0,waveOffset:Math.random()*Math.PI*2}}}return null},updateSpecialParticles(e,i,s=1024,y=768){e.forEach(n=>{switch(n.time!==void 0&&(n.time+=i),n.type){case"sleigh":(n.vx>0&&n.x>n.targetX||n.vx<0&&n.x<n.targetX)&&(n.active=!1);break;case"robin":switch(n.state){case"flying_in":const o=n.targetX-n.x,h=n.targetY-n.y,l=Math.sqrt(o*o+h*h);if(l<20)n.state="sitting",n.vx=0,n.vy=0,n.sitStartTime=n.time;else{const P=o/l,M=h/l,m=3;n.vx=P*m;const w=30,S=.008,u=Math.sin(n.time*S+n.waveOffset)*w,v=Math.cos(n.time*S+n.waveOffset)*w*S;n.vy=M*m*.3+v}break;case"sitting":if(n.vx=0,n.vy=0,n.time-n.sitStartTime>n.sitTime){n.state="flying_away";const P=n.x<s/2?-4:4;n.vx=P,n.flyAwayStartTime=n.time}break;case"flying_away":const a=n.vx>0?1:-1;n.vx=a*4;const r=25,g=.01,t=n.time-n.flyAwayStartTime,f=Math.sin(t*g+n.waveOffset)*r,d=Math.cos(t*g+n.waveOffset)*r*g;n.vy=-1.5+d,(n.x<-50||n.x>s+50||n.y<-50)&&(n.active=!1);break}break;case"train":if(n.smoke||(n.smoke=[]),(n.vx>0&&n.x>s+500||n.vx<0&&n.x<-500)&&(n.active=!1),n.lastSmokeTime||(n.lastSmokeTime=0),n.time-n.lastSmokeTime>150){n.lastSmokeTime=n.time;const h=n.size*1.8/20,l=n.vx>0?1:-1,a=h*8,r=h*7,g=h*10,d=-a-h-r-g*2-h*8,P=h*70,M=h*25,w=(P-M)*.7,S=n.x+w*l,u=n.y+d,v={x:S,y:u,vx:(Math.random()-.5)*.8,vy:-.8-Math.random()*.4,size:8+Math.random()*6,opacity:.7+Math.random()*.2,fadeRate:.012+Math.random()*.008};n.smoke.push(v)}n.smoke=n.smoke.filter(o=>(o.x+=o.vx,o.y+=o.vy,o.vy*=.99,o.size*=1.02,o.opacity-=o.fadeRate,o.opacity>0));break;case"firework":if(!n.exploded){const o=n.y<=n.targetY,h=n.time>=n.explosionTime;(o||h)&&(n.exploded=!0,this.explodeFirework(n,e),n.active=!1)}break}})},drawSnowflake(e,i){e.save(),e.translate(i.x,i.y),e.rotate(i.rotation),e.globalAlpha=i.opacity,e.fillStyle="#ffffff",e.strokeStyle="#ffffff",e.lineWidth=Math.max(i.size*.15,.5);const s=6,y=i.size;for(let n=0;n<s;n++){const o=Math.PI*2*n/s;e.beginPath(),e.moveTo(0,0),e.lineTo(Math.cos(o)*y,Math.sin(o)*y),e.stroke();const h=y*.4,l=Math.PI/6,a=Math.cos(o)*(y*.6),r=Math.sin(o)*(y*.6);e.beginPath(),e.moveTo(a,r),e.lineTo(a+Math.cos(o-l)*h,r+Math.sin(o-l)*h),e.stroke(),e.beginPath(),e.moveTo(a,r),e.lineTo(a+Math.cos(o+l)*h,r+Math.sin(o+l)*h),e.stroke()}e.restore()},drawTree(e,i,s){const y=i.x,n=i.y,o=i.size;e.save(),e.translate(y,n),e.rotate(i.rotation),e.fillStyle="#654321",e.beginPath(),e.moveTo(-o*.2,o*.8),e.lineTo(o*.2,o*.8),e.lineTo(o*.15,o*1.3),e.lineTo(-o*.15,o*1.3),e.closePath(),e.fill(),e.strokeStyle="#4a2f1a",e.lineWidth=1;for(let t=0;t<3;t++)e.beginPath(),e.moveTo(-o*.15,o*.9+t*o*.12),e.lineTo(o*.15,o*.9+t*o*.12),e.stroke();e.fillStyle="#228B22";for(let t=0;t<3;t++){const f=t*o*.4,d=o*(1.2-t*.2);e.beginPath(),e.moveTo(0,-f),e.lineTo(-d,o*.3-f),e.lineTo(d,o*.3-f),e.closePath(),e.fill()}e.strokeStyle="#C0C0C0",e.lineWidth=1.5;for(let t=0;t<3;t++){const f=t*o*.4,d=o*(1.2-t*.2);e.beginPath();for(let P=0;P<=6;P++){const M=-d+P/6*d*2,m=o*.15-f+(P%2===0?-o*.1:0);P===0?e.moveTo(M,m):e.lineTo(M,m)}e.stroke()}const h=["#ff0000","#0000ff","#ffd700","#ff69b4","#00ff00"];for(let t=0;t<8;t++){const f=Math.floor(t/3),d=f*o*.4,P=o*(1.2-f*.2)*.7,M=t%3*(Math.PI*2/3)+f*.5,m=Math.cos(M)*P,w=o*.1-d;e.fillStyle=h[t%h.length],e.beginPath(),e.arc(m,w,o*.12,0,Math.PI*2),e.fill(),e.fillStyle="rgba(255,255,255,0.5)",e.beginPath(),e.arc(m-o*.04,w-o*.04,o*.04,0,Math.PI*2),e.fill()}const l=["#ffff00","#ff0000","#00ff00","#0000ff","#ffffff"];for(let t=0;t<12;t++){const f=Math.floor(t/4),d=f*o*.4,P=o*(1.2-f*.2)*.85,M=t%4*(Math.PI*2/4)+f*.3,m=Math.cos(M)*P,w=o*.2-d,S=(Math.sin(s*.003+t*.5)+1)*.5,u=.3+S*.7,v=e.createRadialGradient(m,w,0,m,w,o*.15),T=l[t%l.length];v.addColorStop(0,T),v.addColorStop(1,"rgba(255,255,255,0)"),e.globalAlpha=u,e.fillStyle=v,e.beginPath(),e.arc(m,w,o*.15,0,Math.PI*2),e.fill(),e.globalAlpha=.5+S*.5,e.fillStyle=T,e.beginPath(),e.arc(m,w,o*.08,0,Math.PI*2),e.fill(),e.globalAlpha=1}const a=o*.35,r=-o*1.4,g=e.createRadialGradient(0,r,0,0,r,a*2);g.addColorStop(0,"rgba(255,223,0,1)"),g.addColorStop(.3,"rgba(255,215,0,0.7)"),g.addColorStop(.6,"rgba(255,215,0,0.3)"),g.addColorStop(1,"rgba(255,215,0,0)"),e.fillStyle=g,e.beginPath(),e.arc(0,r,a*2,0,Math.PI*2),e.fill(),e.fillStyle="#FFD700",e.strokeStyle="#FFA500",e.lineWidth=2,e.save(),e.translate(0,r),e.beginPath();for(let t=0;t<10;t++){const f=Math.PI*2*t/10-Math.PI/2,d=t%2===0?a:a*.4,P=Math.cos(f)*d,M=Math.sin(f)*d;t===0?e.moveTo(P,M):e.lineTo(P,M)}e.closePath(),e.fill(),e.stroke(),e.restore(),e.restore()},drawWreath(e,i,s){const y=i.x,n=i.y,o=i.size;e.save(),e.translate(y,n),e.rotate(i.rotation),i.shape.forEach(a=>{e.lineWidth=o*a.thickness,e.strokeStyle=a.color,e.beginPath();const r=a.angle-Math.PI/i.shape.length,g=a.angle+Math.PI/i.shape.length;e.arc(0,0,o*a.radius,r,g),e.stroke()});const h=["#ff0000","#ffff00","#0000ff"];for(let a=0;a<4;a++){const r=a/4*Math.PI*2+i.rotation,g=Math.cos(r)*o,t=Math.sin(r)*o,f=(Math.sin(s*.002+a*.7)+1)/2;if(f>.5){const d=(f-.5)*2,P=h[a%h.length],M=e.createRadialGradient(g,t,0,g,t,o*.15);M.addColorStop(0,P),M.addColorStop(1,"rgba(255,255,255,0)"),e.globalAlpha=d,e.fillStyle=M,e.beginPath(),e.arc(g,t,o*.15,0,Math.PI*2),e.fill(),e.globalAlpha=1}}e.fillStyle="#c00";const l=-o;e.beginPath(),e.ellipse(-o*.3,l,o*.3,o*.4,-.3,0,Math.PI*2),e.fill(),e.beginPath(),e.ellipse(o*.3,l,o*.3,o*.4,.3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,l,o*.2,0,Math.PI*2),e.fill(),e.restore()},drawNorthStar(e,i,s){const y=i.x,n=i.y,o=i.size,h=.8+Math.sin(s*i.twinkleSpeed+i.twinklePhase)*.2;e.save(),e.translate(y,n);const l=o*4*h,a=e.createRadialGradient(0,0,0,0,0,l);a.addColorStop(0,"rgba(220, 230, 240, 0.4)"),a.addColorStop(.4,"rgba(200, 210, 220, 0.2)"),a.addColorStop(1,"rgba(180, 190, 200, 0)"),e.fillStyle=a,e.beginPath(),e.arc(0,0,l,0,Math.PI*2),e.fill();const r=o*1,g=o*1.5,t=o*.12,f=e.createRadialGradient(0,0,0,0,0,o);f.addColorStop(0,"#ffffff"),f.addColorStop(.3,"#f0f0f0"),f.addColorStop(.6,"#c0c0c0"),f.addColorStop(1,"#a0a0a0"),e.shadowColor="rgba(220, 230, 240, 0.9)",e.shadowBlur=o*.8*h,e.fillStyle=f,e.beginPath(),e.moveTo(0,-g),e.lineTo(t,-t),e.lineTo(r,0),e.lineTo(t,t),e.lineTo(0,g),e.lineTo(-t,t),e.lineTo(-r,0),e.lineTo(-t,-t),e.closePath(),e.fill(),e.shadowBlur=o*1.2*h,e.shadowColor="rgba(255, 255, 255, 1)";const d=e.createRadialGradient(0,0,0,0,0,o*.3);d.addColorStop(0,"#ffffff"),d.addColorStop(.6,"#f5f5f5"),d.addColorStop(1,"rgba(200, 200, 200, 0.8)"),e.fillStyle=d,e.beginPath(),e.arc(0,0,o*.3,0,Math.PI*2),e.fill(),e.shadowBlur=0,e.restore()},drawSleigh(e,i){const s=i.x,y=Math.abs(i.targetX-i.startX),n=Math.abs(i.x-i.startX),o=Math.min(1,n/y),h=Math.sin(o*Math.PI)*i.arcHeight,l=i.baseY-h,a=i.size*1.5,r=i.vx>0?1:-1,g=Math.abs(Math.sin(i.time*.007));if(!isFinite(s)||!isFinite(l)||!isFinite(a)){console.warn("[Christmas] Invalid sleigh values:",{x:s,y:l,size:a});return}const t=[{x:4.8,y:0},{x:4,y:-.3},{x:4,y:.3},{x:3.2,y:-.15},{x:3.2,y:.15}];t.forEach((T,F)=>{const b=s+r*(a*T.x),C=T.y*a;e.fillStyle="#9c6e49",e.strokeStyle="#7b563a",e.lineWidth=1,e.beginPath(),e.moveTo(b-r*a*.4,l+C),e.quadraticCurveTo(b,l+C-a*.4,b+r*a*.4,l+C),e.quadraticCurveTo(b,l+C+a*.4,b-r*a*.4,l+C),e.fill(),e.stroke();const R=b+r*a*.5,G=l+C-a*.3;e.beginPath(),e.ellipse(R,G,a*.25,a*.2,0,0,Math.PI*2),e.fill(),e.stroke(),e.strokeStyle="#6e4a2e",e.lineWidth=1.5;const Y=R-r*a*.1,A=G-a*.15;e.beginPath(),e.moveTo(Y,A),e.lineTo(Y-r*a*.2,A-a*.3),e.lineTo(Y-r*a*.1,A-a*.4),e.moveTo(Y-r*a*.2,A-a*.3),e.lineTo(Y-r*a*.3,A-a*.35),e.stroke();const X=l+C+a*.1;e.lineWidth=2.5,e.strokeStyle="#7b563a";const L=g*a*.45;e.beginPath(),e.moveTo(b+r*a*.3,X),e.lineTo(b+r*(a*.3+L),X+a*.3),e.stroke();const W=(1-g)*a*.45;if(e.beginPath(),e.moveTo(b-r*a*.3,X),e.lineTo(b-r*(a*.3+W),X+a*.3),e.stroke(),F===0){const z=R+r*a*.25,B=G;e.fillStyle="#ff0000",e.beginPath(),e.arc(z,B,a*.03,0,Math.PI*2),e.fill();const q=e.createRadialGradient(z,B,0,z,B,a*.1);q.addColorStop(0,"rgba(255,0,0,0.7)"),q.addColorStop(1,"rgba(255,0,0,0)"),e.fillStyle=q,e.beginPath(),e.arc(z,B,a*.1,0,Math.PI*2),e.fill()}}),e.fillStyle="#c00",e.strokeStyle="#FFD700",e.lineWidth=2;const f=l-a*.7,d=s+r*a*1.5,P=s-r*a*.3,M=l+a*.3;e.beginPath(),e.moveTo(d,f),e.quadraticCurveTo(s+r*a,l-a*.2,d-r*a*.8,l),e.lineTo(P,l),e.lineTo(P,M),e.lineTo(d,M),e.closePath(),e.fill(),e.stroke(),e.beginPath(),e.moveTo(P,l),e.quadraticCurveTo(P-r*a*.4,l-a*.5,P,f),e.quadraticCurveTo(P+r*a*.2,l-a*.4,P+r*a*.2,l),e.closePath(),e.fill(),e.stroke(),e.strokeStyle="#a52a2a",e.lineWidth=4;const m=M+a*.2;function w(T){e.beginPath(),e.moveTo(d+r*a*.1,m+T),e.quadraticCurveTo(s,m+T+a*.2,P-r*a*.2,m+T),e.stroke(),e.beginPath(),e.moveTo(d-r*a*.5,M),e.lineTo(d-r*a*.5,m+T),e.stroke(),e.beginPath(),e.moveTo(P+r*a*.5,M),e.lineTo(P+r*a*.5,m+T),e.stroke()}w(0),w(a*.1);const S=s-r*a*.05;e.fillStyle="#5c4033",e.beginPath(),e.moveTo(S-a*.3,l-a*.4),e.quadraticCurveTo(S-a*.6,l-a*.2,S-a*.4,l+a*.1),e.quadraticCurveTo(S,l+a*.3,S+a*.4,l+a*.1),e.quadraticCurveTo(S+a*.6,l-a*.2,S+a*.3,l-a*.4),e.closePath(),e.fill(),e.fillStyle="rgba(255, 255, 255, 0.2)",e.beginPath(),e.ellipse(S+a*.1,l-a*.3,a*.2,a*.1,-Math.PI/4,0,Math.PI*2),e.fill(),e.strokeStyle="#654321",e.lineWidth=1,e.beginPath(),e.arc(S,l-a*.4,a*.2,0,Math.PI,!0),e.stroke();const u=s+r*a*.6,v=l-a*.55;e.fillStyle="#c00",e.beginPath(),e.moveTo(u-a*.2,v),e.lineTo(u+a*.2,v),e.lineTo(u,v-a*.4),e.closePath(),e.fill(),e.fillStyle="#fff",e.fillRect(u-a*.22,v,a*.44,a*.08),e.beginPath(),e.arc(u,v-a*.4,a*.07,0,Math.PI*2),e.fill(),e.fillStyle="#FFD7BA",e.beginPath(),e.arc(u,v+a*.08,a*.18,0,Math.PI*2),e.fill(),e.fillStyle="#fff",e.beginPath(),e.ellipse(u,v+a*.2,a*.25,a*.2,0,0,Math.PI),e.fill(),e.strokeStyle="#654321",e.lineWidth=1,t.forEach(T=>{const F=s+r*(a*T.x),b=T.y*a,C=F+r*a*.5;e.beginPath(),e.moveTo(u,v+a*.1),e.quadraticCurveTo((u+C)/2,l+b-a*.5,C-r*a*.1,l+b-a*.3),e.stroke()})},drawElf(e,i){const s=i.x,y=i.y,n=i.size,o=i.vx>0?1:-1;e.save(),e.translate(s,y);const h=Math.sin(i.time*.05)*(Math.PI/3);e.fillStyle="#004d00",e.fillRect(o*-n*.1,n*.2,n*.2,n*.5+Math.sin(h+Math.PI)*n*.1),e.fillStyle="#4a2c2a",e.beginPath(),e.ellipse(o*0,n*.7+Math.sin(h+Math.PI)*n*.1,n*.3,n*.15,0,0,Math.PI*2),e.fill(),e.fillStyle="#006400",e.fillRect(o*n*.1,n*.2,n*.2,n*.5+Math.sin(h)*n*.1),e.fillStyle="#5d3836",e.beginPath(),e.ellipse(o*n*.2,n*.7+Math.sin(h)*n*.1,n*.3,n*.15,0,0,Math.PI*2),e.fill(),e.fillStyle="#008000",e.beginPath(),e.moveTo(0,-n*.5),e.lineTo(o*n*.4,n*.3),e.lineTo(o*-n*.4,n*.3),e.closePath(),e.fill(),e.fillStyle="#FFD7BA",e.beginPath(),e.arc(0,-n*.6,n*.3,0,Math.PI*2),e.fill(),e.fillStyle="#c00",e.beginPath(),e.moveTo(0,-n*.7),e.lineTo(o*n*.35,-n*.6),e.lineTo(o*-n*.35,-n*.6),e.closePath(),e.fill(),e.beginPath(),e.moveTo(0,-n*.7),e.quadraticCurveTo(o*n*.2,-n*1.1,o*n*.4,-n*1.3),e.stroke(),e.fillStyle="#ffff00",e.beginPath(),e.arc(o*n*.4,-n*1.3,n*.15,0,Math.PI*2),e.fill(),e.restore()},drawTrain(e,i){const s=i.x,y=i.y,n=i.size*1.8,o=i.vx>0?1:-1,h=i.time;i.smoke&&i.smoke.length>0&&i.smoke.forEach(k=>{e.save(),e.globalAlpha=k.opacity;const I=e.createRadialGradient(k.x,k.y,0,k.x,k.y,k.size);I.addColorStop(0,"#CCCCCC"),I.addColorStop(.5,"#AAAAAA"),I.addColorStop(1,"#888888"),e.fillStyle=I,e.beginPath(),e.arc(k.x,k.y,k.size,0,Math.PI*2),e.fill(),e.restore()}),e.save(),e.translate(s,y),o===-1&&e.scale(-1,1);const l=h*.005,a=n/20,r=0,g=a*8,t=a*5,f=a*7,d=a*35,P=-t-a,M=-g-a,m=P-d,w=a*30,S=a*10,u=M-f-S*2,v=a*70,T=a*25,F=v-T,b=a*60,C=a*15;for(let k=1;k<=i.carriages;k++){const I=-(T+k*(b+C)-C);e.fillStyle="#222",e.strokeStyle="#444",e.lineWidth=1,e.beginPath(),e.arc(I+b*.25,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(I+b*.75,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#004d00",e.strokeStyle="#DAA520",e.lineWidth=a*.5,e.fillRect(I,m,b,d),e.strokeRect(I,m,b,d);const U=d*.6,_=m+d*.2;e.shadowColor="#F1C40F",e.shadowBlur=15;const c=.8+Math.sin(h*.001+k)*.2;e.fillStyle=`rgba(255, 235, 150, ${c})`;const E=b*.25,$=I+b*.15,j=I+b*.6;e.fillRect($,_,E,U),e.fillRect(j,_,E,U),e.shadowBlur=0,e.fillStyle="rgba(0, 0, 0, 0.4)";const D=E*.2,K=$+E/2,V=_+D*1.8;e.beginPath(),e.arc(K,V,D,0,Math.PI*2),e.fill(),e.fillRect(K-D,V+D,D*2,D*2);const O=E*.18,J=j+E/2,Q=_+O*1.6;e.beginPath(),e.arc(J,Q,O,0,Math.PI*2),e.fill(),e.fillRect(J-O*1.2,Q,O*2.4,O*2.5);const N=a*4;e.fillStyle="#228B22",e.beginPath(),e.arc(I+b/2,m+d/2,N,0,Math.PI*2),e.arc(I+b/2,m+d/2,N*.6,0,Math.PI*2,!0),e.fill(),e.fillStyle="#c00",e.beginPath(),e.arc(I+b/2,m+d/2+N,N*.3,0,Math.PI*2),e.fill(),e.strokeStyle="#111",e.lineWidth=a,e.beginPath();const Z=P+f/2,x=k===1?-T:I+b+C;e.moveTo(I+b,Z),e.lineTo(x,Z),e.stroke()}e.fillStyle="#2C3E50",e.strokeStyle="#555",e.lineWidth=a;const R=[a*15,a*35,a*55];R.forEach(k=>{e.beginPath(),e.arc(k,-g,g,0,Math.PI*2),e.fill(),e.stroke()});const G=-a*10;e.beginPath(),e.arc(G,-t,t,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#1C2833",e.fillRect(-T-a*5,M-f,v+a*5,f),e.fillStyle="#B03A2E",e.strokeStyle="#DAA520",e.lineWidth=a*.7;const Y=M-f-w;e.beginPath(),e.moveTo(-T,Y),e.lineTo(0,Y),e.lineTo(0,M-f),e.lineTo(-T-a*5,M-f),e.closePath(),e.fill(),e.stroke(),e.fillStyle=`rgba(255, 235, 150, ${.8+Math.sin(h*.001)*.2})`,e.fillRect(-T+a*4,Y+a*4,T-a*12,a*10),e.fillStyle="#2C3E50",e.beginPath(),e.moveTo(0,M-f),e.lineTo(F,M-f),e.arc(F,u+S,S,Math.PI/2,-Math.PI/2),e.lineTo(0,u),e.closePath(),e.fill(),e.stroke();const A=u-a*8;e.fillStyle="#17202A",e.beginPath(),e.moveTo(F*.7,u),e.lineTo(F*.7-a*2,A),e.lineTo(F*.7+a*10,A-a*4),e.lineTo(F*.7+a*8,u),e.closePath(),e.fill();const X=F+S,L=u+S,W=a*4,z=e.createRadialGradient(X,L,W*.2,X,L,W*1.5);z.addColorStop(0,"rgba(255, 255, 200, 1)"),z.addColorStop(.4,"rgba(255, 220, 100, 0.8)"),z.addColorStop(1,"rgba(255, 200, 0, 0)"),e.fillStyle=z,e.fillRect(X-W,L-W,W*2,W*2),e.strokeStyle="#99A3A4",e.lineWidth=a*2;const B=Math.sin(l)*g*.6,q=R[1]+Math.cos(l)*g*.6,H=v-a*10,p=M-f+a*2+Math.sin(h*.01)*a;e.beginPath(),e.moveTo(H,p),e.lineTo(q,-g+B),e.stroke(),e.lineWidth=a*1.5,[R[0],R[2]].forEach(k=>{const I=k+Math.cos(l)*g*.6;e.beginPath(),e.moveTo(q,-g+B),e.lineTo(I,-g+B),e.stroke()}),e.restore()},drawFirework(e,i){e.fillStyle=i.color||"#ffffff",e.beginPath(),e.arc(i.x,i.y,i.size,0,Math.PI*2),e.fill()},explodeFirework(e,i){const s=50+Math.random()*50,y=["#ff0000","#ffff00","#00ff00","#0000ff","#ffffff"];for(let n=0;n<s;n++){const o=Math.random()*Math.PI*2,h=Math.random()*5+2;i.push({type:"spark",x:e.x,y:e.y,vx:Math.cos(o)*h,vy:Math.sin(o)*h,size:2+Math.random()*2,opacity:1,active:!0,static:!1,color:y[Math.floor(Math.random()*y.length)]})}},drawRobin(e,i,s){const y=i.x,n=i.y,o=i.size,h=i.vx>=0?1:-1,l=i.state==="flying_in"||i.state==="flying_away",a=i.state==="sitting";i.wingIntensity===void 0&&(i.wingIntensity=l?1:0);const r=l?1:0,g=.02;i.wingIntensity+=(r-i.wingIntensity)*g;let t=0;if(i.wingIntensity>.01){const M=Math.sin(s*.012+i.waveOffset),m=Math.sin(M*Math.PI/2),w=Math.PI/6;t=m*w*i.wingIntensity}e.save(),e.translate(y,n),h===-1&&e.scale(-1,1),e.fillStyle="#A52A2A",e.beginPath(),e.ellipse(0,0,o*.6,o*.8,0,0,Math.PI*2),e.fill(),e.fillStyle="#DC143C",e.beginPath(),e.ellipse(o*.15,o*.1,o*.45,o*.6,0,0,Math.PI*2),e.fill(),e.fillStyle="#654321",e.strokeStyle="#4a2c2a",e.lineWidth=.5,e.beginPath(),e.moveTo(-o*.5,0),e.quadraticCurveTo(-o*.7,-o*.08,-o*.85,0),e.quadraticCurveTo(-o*.7,o*.08,-o*.5,0),e.fill(),e.stroke(),e.fillStyle="#8B4513",e.strokeStyle="#654321",e.lineWidth=1,e.save(),e.translate(-o*.3,-o*.1),e.rotate(t),e.beginPath(),e.ellipse(0,0,o*.45,o*.25,-Math.PI/6,0,Math.PI*2),e.fill(),e.stroke(),e.restore(),e.fillStyle="#A0692F",e.strokeStyle="#654321",e.lineWidth=1,e.save(),e.translate(-o*.3,o*.1),e.rotate(-t),e.beginPath(),e.ellipse(0,0,o*.45,o*.25,Math.PI/6,0,Math.PI*2),e.fill(),e.stroke(),e.restore(),e.fillStyle="#A52A2A",e.beginPath(),e.arc(o*.5,-o*.2,o*.35,0,Math.PI*2),e.fill(),e.fillStyle="#FFD700",e.strokeStyle="#DAA520",e.lineWidth=.5,e.beginPath(),e.moveTo(o*.75,-o*.2),e.lineTo(o*.95,-o*.15),e.lineTo(o*.75,-o*.1),e.closePath(),e.fill(),e.stroke(),e.fillStyle="#000000",e.beginPath(),e.arc(o*.6,-o*.25,o*.08,0,Math.PI*2),e.fill(),e.fillStyle="#FFFFFF",e.beginPath(),e.arc(o*.62,-o*.27,o*.03,0,Math.PI*2),e.fill(),a&&(e.strokeStyle="#8B4513",e.lineWidth=o*.08,e.lineCap="round",e.beginPath(),e.moveTo(o*.1,o*.7),e.lineTo(o*.1,o*1),e.stroke(),e.beginPath(),e.moveTo(-o*.1,o*.7),e.lineTo(-o*.1,o*1),e.stroke(),e.lineWidth=o*.06,e.beginPath(),e.moveTo(o*.1,o*1),e.lineTo(o*.25,o*1),e.stroke(),e.beginPath(),e.moveTo(-o*.1,o*1),e.lineTo(-o*.25,o*1),e.stroke());const f=o*.5,d=-o*.55;e.fillStyle="#c00",e.beginPath(),e.moveTo(f-o*.3,d),e.lineTo(f+o*.25,d),e.lineTo(f+o*.1,d-o*.5),e.closePath(),e.fill(),e.fillStyle="#FFFFFF",e.fillRect(f-o*.32,d,o*.58,o*.1),e.beginPath(),e.arc(f+o*.1,d-o*.5,o*.1,0,Math.PI*2),e.fill(),e.restore()},drawSnowman(e,i,s){const y=i.x,n=i.y,o=i.size,h=Math.sin(s*.002+i.wavePhase)*.03;e.save(),e.translate(y,n),e.rotate(h),e.fillStyle="rgba(0, 0, 0, 0.2)",e.beginPath(),e.ellipse(0,o*2,o*1.2,o*.3,0,0,Math.PI*2),e.fill(),e.fillStyle="#FFFFFF",e.strokeStyle="#E0E0E0",e.lineWidth=1,e.beginPath(),e.arc(0,o*1.3,o*1,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(0,o*.3,o*.7,0,Math.PI*2),e.fill(),e.stroke(),e.beginPath(),e.arc(0,-o*.6,o*.5,0,Math.PI*2),e.fill(),e.stroke(),e.fillStyle="#000000",e.beginPath(),e.arc(0,o*.5,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,o*.1,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(0,-o*.2,o*.08,0,Math.PI*2),e.fill(),e.strokeStyle="#654321",e.lineWidth=o*.1,e.beginPath(),e.moveTo(-o*.6,o*.3),e.lineTo(-o*1.2,o*0),e.lineTo(-o*1.5,-o*.1),e.stroke(),e.lineWidth=o*.05,e.beginPath(),e.moveTo(-o*1.5,-o*.1),e.lineTo(-o*1.7,-o*.3),e.stroke(),e.beginPath(),e.moveTo(-o*1.5,-o*.1),e.lineTo(-o*1.8,-o*.05),e.stroke(),e.lineWidth=o*.1,e.beginPath(),e.moveTo(o*.6,o*.3),e.lineTo(o*1.2,o*0),e.lineTo(o*1.5,-o*.1),e.stroke(),e.lineWidth=o*.05,e.beginPath(),e.moveTo(o*1.5,-o*.1),e.lineTo(o*1.7,-o*.3),e.stroke(),e.beginPath(),e.moveTo(o*1.5,-o*.1),e.lineTo(o*1.8,-o*.05),e.stroke(),e.fillStyle="#FF6347",e.beginPath(),e.moveTo(o*.15,-o*.6),e.lineTo(o*.6,-o*.65),e.lineTo(o*.15,-o*.55),e.closePath(),e.fill(),e.fillStyle="#000000",e.beginPath(),e.arc(-o*.15,-o*.7,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(o*.15,-o*.7,o*.08,0,Math.PI*2),e.fill(),[{x:-o*.2,y:-o*.4},{x:-o*.1,y:-o*.35},{x:0,y:-o*.33},{x:o*.1,y:-o*.35},{x:o*.2,y:-o*.4}].forEach(a=>{e.beginPath(),e.arc(a.x,a.y,o*.05,0,Math.PI*2),e.fill()}),e.fillStyle="#c00",e.strokeStyle="#8B0000",e.lineWidth=1,e.beginPath(),e.ellipse(0,-o*.15,o*.55,o*.15,0,0,Math.PI*2),e.fill(),e.stroke(),e.fillRect(o*.3,-o*.1,o*.2,o*.8),e.strokeRect(o*.3,-o*.1,o*.2,o*.8),e.strokeStyle="#8B0000",e.lineWidth=o*.03;for(let a=0;a<4;a++)e.beginPath(),e.moveTo(o*.33+a*o*.13,o*.7),e.lineTo(o*.33+a*o*.13,o*.85),e.stroke();e.fillStyle="#000000",e.strokeStyle="#333333",e.lineWidth=2,e.beginPath(),e.ellipse(0,-o*1.1,o*.7,o*.15,0,0,Math.PI*2),e.fill(),e.stroke(),e.fillRect(-o*.45,-o*1.8,o*.9,o*.7),e.strokeRect(-o*.45,-o*1.8,o*.9,o*.7),e.fillStyle="#c00",e.fillRect(-o*.45,-o*1.3,o*.9,o*.15),e.fillStyle="#228B22",e.beginPath(),e.arc(-o*.15,-o*1.22,o*.08,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(o*.15,-o*1.22,o*.08,0,Math.PI*2),e.fill(),e.fillStyle="#FF0000",e.beginPath(),e.arc(0,-o*1.25,o*.06,0,Math.PI*2),e.fill(),e.restore()}};
|
package/public/js/effects.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";fetch("/api/effects/settings").then(function(y){return y.json()}).then(function(y){var z=y.respectMotion!==!1,A=y.defaultDuration||600,S=y.defaultAnimation||"fade",E=y.defaultThreshold!=null?y.defaultThreshold:.1,p=z&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,d=document.querySelector(".page-body");if(!d)return;function r(t,e){return t.getAttribute("data-fx-"+e)}function i(t,e,n){var a=r(t,e);return a!==null?parseFloat(a):n}function v(t,e,n){var a=r(t,e);return a===null?n:a==="true"||a==="1"}function b(t,e,n){var a=new IntersectionObserver(function(o){o[0].isIntersecting&&(a.unobserve(t),n())},{threshold:e});a.observe(t)}d.querySelectorAll(".dm-fx-reveal").forEach(function(t){var e=r(t,"animation")||S,n=i(t,"duration",A),a=i(t,"delay",0),o=i(t,"threshold",E),f=v(t,"once",!0);p||(t.style.opacity="0",t.style.transition="none",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"&&(t.style.transform="rotateY(90deg)"),requestAnimationFrame(function(){requestAnimationFrame(function(){t.style.transition="opacity "+n+"ms ease "+a+"ms, transform "+n+"ms ease "+a+"ms";var s=new IntersectionObserver(function(u){u.forEach(function(h){h.isIntersecting?(t.style.opacity="1",t.style.transform="",f&&s.unobserve(t)):f||(t.style.opacity="0",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"?t.style.transform="rotateY(90deg)":t.style.transform="")})},{threshold:o});s.observe(t)})}))}),d.querySelectorAll(".dm-fx-counter").forEach(function(t){var e=i(t,"to",0),n=i(t,"from",0),a=i(t,"duration",2e3),o=r(t,"prefix")||"",f=r(t,"suffix")||"",s=i(t,"decimals",0),u=r(t,"separator")||"";function h(m){var l=m.toFixed(s);if(u){var x=l.split(".");x[0]=x[0].replace(/\B(?=(\d{3})+(?!\d))/g,u),l=x.join(".")}return o+l+f}if(p){t.textContent=h(e);return}b(t,.5,function(){var m=null;requestAnimationFrame(function l(x){m||(m=x);var w=Math.min((x-m)/a,1),q=1-Math.pow(1-w,3);t.textContent=h(n+(e-n)*q),w<1&&requestAnimationFrame(l)})})}),p||d.querySelectorAll(".dm-fx-scramble").forEach(function(t){var e=i(t,"speed",50),n=t.textContent,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&",o=0;b(t,.3,function(){var f=setInterval(function(){for(var s="",u=0;u<n.length;u++)u<o||n[u]===" "?s+=n[u]:s+=a[Math.floor(Math.random()*a.length)];t.textContent=s,o<n.length?o++:clearInterval(f)},e)})}),p||d.querySelectorAll(".dm-fx-shake").forEach(function(t){var e=i(t,"intensity",5),n=i(t,"duration",500),a=r(t,"direction")||"horizontal",o=a==="vertical"?"translateY":"translateX";t.animate([{transform:o+"(0)"},{transform:o+"(-"+e+"px)"},{transform:o+"("+e+"px)"},{transform:o+"(-"+e+"px)"},{transform:o+"("+e+"px)"},{transform:o+"(0)"}],{duration:n,easing:"ease-in-out"})}),d.querySelectorAll(".dm-fx-ripple").forEach(function(t){t.style.position="relative",t.style.overflow="hidden",t.addEventListener("click",function(e){var n=r(t,"colour")||"rgba(255,255,255,0.3)",a=i(t,"duration",600),o=t.getBoundingClientRect(),f=Math.max(o.width,o.height)*2,s=document.createElement("span");s.style.cssText="position:absolute;border-radius:50%;pointer-events:none;width:"+f+"px;height:"+f+"px;left:"+(e.clientX-o.left-f/2)+"px;top:"+(e.clientY-o.top-f/2)+"px;background:"+n+";transform:scale(0);opacity:1;transition:transform "+a+"ms ease,opacity "+a+"ms ease;",t.appendChild(s),requestAnimationFrame(function(){s.style.transform="scale(1)",s.style.opacity="0"}),setTimeout(function(){s.remove()},a)})});var c=window.Domma&&window.Domma.effects;c&&(d.querySelectorAll(".dm-fx-breathe").forEach(function(t){if(!p){var e={};r(t,"amplitude")&&(e.amplitude=i(t,"amplitude",6)),r(t,"duration")&&(e.duration=i(t,"duration",3e3)),r(t,"easing")&&(e.easing=r(t,"easing")),r(t,"stagger")&&(e.stagger=i(t,"stagger",0)),c.breathe(t,e)}}),d.querySelectorAll(".dm-fx-pulse").forEach(function(t){if(!p){var e={};r(t,"scale")&&(e.scale=i(t,"scale",1.05)),r(t,"duration")&&(e.duration=i(t,"duration",2e3)),r(t,"easing")&&(e.easing=r(t,"easing")),c.pulse(t,e)}}),d.querySelectorAll(".dm-fx-scribe").forEach(function(t){var e={};r(t,"speed")&&(e.speed=i(t,"speed",50)),r(t,"delete-speed")&&(e.deleteSpeed=i(t,"delete-speed",30)),r(t,"cursor")&&(e.cursor=v(t,"cursor",!0)),r(t,"cursor-char")&&(e.cursorChar=r(t,"cursor-char")),r(t,"cursor-type")&&(e.cursorType=r(t,"cursor-type")),r(t,"mode")&&(e.mode=r(t,"mode")),r(t,"loop")&&(e.loop=v(t,"loop",!1)),r(t,"loop-delay")&&(e.loopDelay=i(t,"loop-delay",1e3)),r(t,"pause-on-hover")&&(e.pauseOnHover=v(t,"pause-on-hover",!1));var n=r(t,"actions");if(n)try{e.actions=JSON.parse(n)}catch{return}else{var a=t.textContent.trim();if(!a)return;t.textContent="",e.actions=[{render:a}]}c.scribe(t,e)}),d.querySelectorAll(".dm-fx-twinkle").forEach(function(t){var e={};r(t,"count")&&(e.count=i(t,"count",100)),r(t,"shape")&&(e.shape=r(t,"shape")),r(t,"colour")&&(e.colour=r(t,"colour")),r(t,"min-size")&&(e.minSize=i(t,"min-size",1)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",3)),c.twinkle(t,e)}),typeof c.tickerTape=="function"&&d.querySelectorAll(".dm-fx-ticker-tape").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",50)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"sway")&&(e.sway=i(t,"sway",60)),r(t,"rotation-speed")&&(e.rotationSpeed=i(t,"rotation-speed",6)),r(t,"min-width")&&(e.minWidth=i(t,"min-width",5)),r(t,"max-width")&&(e.maxWidth=i(t,"max-width",9)),r(t,"min-height")&&(e.minHeight=i(t,"min-height",12)),r(t,"max-height")&&(e.maxHeight=i(t,"max-height",22)),r(t,"fade-start")&&(e.fadeStart=i(t,"fade-start",.55)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",150)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?c.tickerTape(null,e):c.tickerTape(t,e)}}),typeof c.butterflies=="function"&&d.querySelectorAll(".dm-fx-butterflies").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",18)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"wander")&&(e.wander=i(t,"wander",1)),r(t,"rise-speed")&&(e.riseSpeed=i(t,"rise-speed",.4)),r(t,"flap-speed")&&(e.flapSpeed=i(t,"flap-speed",1)),r(t,"min-size")&&(e.minSize=i(t,"min-size",14)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",26)),r(t,"two-tone")&&(e.twoTone=v(t,"two-tone",!0)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",40)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?c.butterflies(null,e):c.butterflies(t,e)}}),typeof c.strobe=="function"&&d.querySelectorAll(".dm-fx-strobe").forEach(function(t){if(p)return;function e(s){var u=r(t,s);if(!u)return null;var h=u.split(",").map(function(m){return m.trim()}).filter(Boolean);return h.length?h:null}var n={};r(t,"preset")&&(n.preset=r(t,"preset")),r(t,"motion")&&(n.motion=r(t,"motion")),r(t,"speed")&&(n.speed=i(t,"speed",1)),r(t,"sweep-arc")&&(n.sweepArc=i(t,"sweep-arc",100)),r(t,"beam-width")&&(n.beamWidth=i(t,"beam-width",16)),r(t,"intensity")&&(n.intensity=i(t,"intensity",.7)),r(t,"flicker")&&(n.flicker=v(t,"flicker",!0)),r(t,"hz")&&(n.hz=i(t,"hz",10));var a=e("origins");a&&(n.origins=a);var o=e("colours");o&&(n.colours=o),r(t,"duration")&&(n.duration=i(t,"duration",null)),r(t,"z-index")&&(n.zIndex=i(t,"z-index",9999));var f=r(t,"mode");f==="page"?c.strobe(null,n):c.strobe(t,n)}));var g=d.querySelectorAll(".dm-fx-celebrate");g.length&&!p&&import("/public/js/celebrations/index.js").then(function(t){var e=t.CelebrationsEffect;g.forEach(function(n){var a=n.getAttribute("data-fx-theme")||"auto",o=n.getAttribute("data-fx-intensity")||"medium",f=n.getAttribute("data-fx-z-index")?parseInt(n.getAttribute("data-fx-z-index"),10):999;if(!(a==="auto"&&(a=e.getCurrentTheme(),!a))){var s={},u=["data-fx-theme","data-fx-intensity","data-fx-z-index"];Array.from(n.attributes).forEach(function(m){m.name.startsWith("data-fx-")&&!u.includes(m.name)&&(s[m.name.slice(8)]=m.value)});var h=new e({theme:a,intensity:o,enabled:!0,zIndex:f,overrides:s});h.init().then(function(){h.start()})}})}).catch(function(){})}).catch(function(){})})();
|
|
1
|
+
(function(){"use strict";fetch("/api/effects/settings").then(function(y){return y.json()}).then(function(y){var z=y.respectMotion!==!1,A=y.defaultDuration||600,S=y.defaultAnimation||"fade",E=y.defaultThreshold!=null?y.defaultThreshold:.1,p=z&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,d=document.querySelector(".page-body");if(!d)return;function r(t,e){return t.getAttribute("data-fx-"+e)}function i(t,e,n){var a=r(t,e);return a!==null?parseFloat(a):n}function v(t,e,n){var a=r(t,e);return a===null?n:a==="true"||a==="1"}function b(t,e,n){var a=new IntersectionObserver(function(o){o[0].isIntersecting&&(a.unobserve(t),n())},{threshold:e});a.observe(t)}d.querySelectorAll(".dm-fx-reveal").forEach(function(t){var e=r(t,"animation")||S,n=i(t,"duration",A),a=i(t,"delay",0),o=i(t,"threshold",E),f=v(t,"once",!0);p||(t.style.opacity="0",t.style.transition="none",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"&&(t.style.transform="rotateY(90deg)"),requestAnimationFrame(function(){requestAnimationFrame(function(){t.style.transition="opacity "+n+"ms ease "+a+"ms, transform "+n+"ms ease "+a+"ms";var s=new IntersectionObserver(function(u){u.forEach(function(h){h.isIntersecting?(t.style.opacity="1",t.style.transform="",f&&s.unobserve(t)):f||(t.style.opacity="0",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"?t.style.transform="rotateY(90deg)":t.style.transform="")})},{threshold:o});s.observe(t)})}))}),d.querySelectorAll(".dm-fx-counter").forEach(function(t){var e=i(t,"to",0),n=i(t,"from",0),a=i(t,"duration",2e3),o=r(t,"prefix")||"",f=r(t,"suffix")||"",s=i(t,"decimals",0),u=r(t,"separator")||"";function h(m){var l=m.toFixed(s);if(u){var x=l.split(".");x[0]=x[0].replace(/\B(?=(\d{3})+(?!\d))/g,u),l=x.join(".")}return o+l+f}if(p){t.textContent=h(e);return}b(t,.5,function(){var m=null;requestAnimationFrame(function l(x){m||(m=x);var w=Math.min((x-m)/a,1),q=1-Math.pow(1-w,3);t.textContent=h(n+(e-n)*q),w<1&&requestAnimationFrame(l)})})}),p||d.querySelectorAll(".dm-fx-scramble").forEach(function(t){var e=i(t,"speed",50),n=t.textContent,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&",o=0;b(t,.3,function(){var f=setInterval(function(){for(var s="",u=0;u<n.length;u++)u<o||n[u]===" "?s+=n[u]:s+=a[Math.floor(Math.random()*a.length)];t.textContent=s,o<n.length?o++:clearInterval(f)},e)})}),p||d.querySelectorAll(".dm-fx-shake").forEach(function(t){var e=i(t,"intensity",5),n=i(t,"duration",500),a=r(t,"direction")||"horizontal",o=a==="vertical"?"translateY":"translateX";t.animate([{transform:o+"(0)"},{transform:o+"(-"+e+"px)"},{transform:o+"("+e+"px)"},{transform:o+"(-"+e+"px)"},{transform:o+"("+e+"px)"},{transform:o+"(0)"}],{duration:n,easing:"ease-in-out"})}),d.querySelectorAll(".dm-fx-ripple").forEach(function(t){t.style.position="relative",t.style.overflow="hidden",t.addEventListener("click",function(e){var n=r(t,"colour")||"rgba(255,255,255,0.3)",a=i(t,"duration",600),o=t.getBoundingClientRect(),f=Math.max(o.width,o.height)*2,s=document.createElement("span");s.style.cssText="position:absolute;border-radius:50%;pointer-events:none;width:"+f+"px;height:"+f+"px;left:"+(e.clientX-o.left-f/2)+"px;top:"+(e.clientY-o.top-f/2)+"px;background:"+n+";transform:scale(0);opacity:1;transition:transform "+a+"ms ease,opacity "+a+"ms ease;",t.appendChild(s),requestAnimationFrame(function(){s.style.transform="scale(1)",s.style.opacity="0"}),setTimeout(function(){s.remove()},a)})});var c=window.Domma&&window.Domma.effects;c&&(d.querySelectorAll(".dm-fx-breathe").forEach(function(t){if(!p){var e={};r(t,"amplitude")&&(e.amplitude=i(t,"amplitude",6)),r(t,"duration")&&(e.duration=i(t,"duration",3e3)),r(t,"easing")&&(e.easing=r(t,"easing")),r(t,"stagger")&&(e.stagger=i(t,"stagger",0)),c.breathe(t,e)}}),d.querySelectorAll(".dm-fx-pulse").forEach(function(t){if(!p){var e={};r(t,"scale")&&(e.scale=i(t,"scale",1.05)),r(t,"duration")&&(e.duration=i(t,"duration",2e3)),r(t,"easing")&&(e.easing=r(t,"easing")),c.pulse(t,e)}}),d.querySelectorAll(".dm-fx-scribe").forEach(function(t){var e={};r(t,"speed")&&(e.speed=i(t,"speed",50)),r(t,"delete-speed")&&(e.deleteSpeed=i(t,"delete-speed",30)),r(t,"cursor")&&(e.cursor=v(t,"cursor",!0)),r(t,"cursor-char")&&(e.cursorChar=r(t,"cursor-char")),r(t,"cursor-type")&&(e.cursorType=r(t,"cursor-type")),r(t,"mode")&&(e.mode=r(t,"mode")),r(t,"loop")&&(e.loop=v(t,"loop",!1)),r(t,"loop-delay")&&(e.loopDelay=i(t,"loop-delay",1e3)),r(t,"pause-on-hover")&&(e.pauseOnHover=v(t,"pause-on-hover",!1));var n=r(t,"actions");if(n)try{e.actions=JSON.parse(n)}catch{return}else{var a=t.textContent.trim();if(!a)return;t.textContent="",e.actions=[{render:a}]}c.scribe(t,e)}),d.querySelectorAll(".dm-fx-twinkle").forEach(function(t){var e={};r(t,"count")&&(e.count=i(t,"count",100)),r(t,"shape")&&(e.shape=r(t,"shape")),r(t,"colour")&&(e.colour=r(t,"colour")),r(t,"min-size")&&(e.minSize=i(t,"min-size",1)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",3)),c.twinkle(t,e)}),typeof c.tickerTape=="function"&&d.querySelectorAll(".dm-fx-ticker-tape").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",50)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"sway")&&(e.sway=i(t,"sway",60)),r(t,"rotation-speed")&&(e.rotationSpeed=i(t,"rotation-speed",6)),r(t,"min-width")&&(e.minWidth=i(t,"min-width",5)),r(t,"max-width")&&(e.maxWidth=i(t,"max-width",9)),r(t,"min-height")&&(e.minHeight=i(t,"min-height",12)),r(t,"max-height")&&(e.maxHeight=i(t,"max-height",22)),r(t,"fade-start")&&(e.fadeStart=i(t,"fade-start",.55)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",150)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?c.tickerTape(null,e):c.tickerTape(t,e)}}),typeof c.butterflies=="function"&&d.querySelectorAll(".dm-fx-butterflies").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",18)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"wander")&&(e.wander=i(t,"wander",1)),r(t,"rise-speed")&&(e.riseSpeed=i(t,"rise-speed",.4)),r(t,"flap-speed")&&(e.flapSpeed=i(t,"flap-speed",1)),r(t,"min-size")&&(e.minSize=i(t,"min-size",14)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",26)),r(t,"two-tone")&&(e.twoTone=v(t,"two-tone",!0)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",40)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?c.butterflies(null,e):c.butterflies(t,e)}}),typeof c.strobe=="function"&&d.querySelectorAll(".dm-fx-strobe").forEach(function(t){if(p)return;function e(s){var u=r(t,s);if(!u)return null;var h=u.split(",").map(function(m){return m.trim()}).filter(Boolean);return h.length?h:null}var n={};r(t,"preset")&&(n.preset=r(t,"preset")),r(t,"motion")&&(n.motion=r(t,"motion")),r(t,"speed")&&(n.speed=i(t,"speed",1)),r(t,"sweep-arc")&&(n.sweepArc=i(t,"sweep-arc",100)),r(t,"beam-width")&&(n.beamWidth=i(t,"beam-width",16)),r(t,"intensity")&&(n.intensity=i(t,"intensity",.7)),r(t,"flicker")&&(n.flicker=v(t,"flicker",!0)),r(t,"hz")&&(n.hz=i(t,"hz",10));var a=e("origins");a&&(n.origins=a);var o=e("colours");o&&(n.colours=o),r(t,"duration")&&(n.duration=i(t,"duration",null)),r(t,"z-index")&&(n.zIndex=i(t,"z-index",9999));var f=r(t,"mode");f==="page"?c.strobe(null,n):c.strobe(t,n)}));var g=d.querySelectorAll(".dm-fx-celebrate");g.length&&!p&&import("/public/js/celebrations/index.js?v=20260930-snow").then(function(t){var e=t.CelebrationsEffect;g.forEach(function(n){var a=n.getAttribute("data-fx-theme")||"auto",o=n.getAttribute("data-fx-intensity")||"medium",f=n.getAttribute("data-fx-z-index")?parseInt(n.getAttribute("data-fx-z-index"),10):999;if(!(a==="auto"&&(a=e.getCurrentTheme(),!a))){var s={},u=["data-fx-theme","data-fx-intensity","data-fx-z-index"];Array.from(n.attributes).forEach(function(m){m.name.startsWith("data-fx-")&&!u.includes(m.name)&&(s[m.name.slice(8)]=m.value)});var h=new e({theme:a,intensity:o,enabled:!0,zIndex:f,overrides:s});h.init().then(function(){h.start()})}})}).catch(function(){})}).catch(function(){})})();
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
<script src="/public/js/forms.js?v=20260927-submit-btn" type="module"></script>
|
|
155
155
|
|
|
156
156
|
<!-- Core effects runtime -->
|
|
157
|
-
<script src="/public/js/effects.js"></script>
|
|
157
|
+
<script src="/public/js/effects.js?v=20260930-snow"></script>
|
|
158
158
|
|
|
159
159
|
<!-- Plugin body-end injection -->
|
|
160
160
|
{{bodyEndInject}}
|