3d-spinner 0.9.2 → 0.9.4
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/README.md +66 -4
- package/dist/animation-label.d.ts +8 -0
- package/dist/animation-label.js +47 -0
- package/dist/animation.d.ts +2 -0
- package/dist/animations/charged-orb.d.ts +55 -0
- package/dist/animations/charged-orb.js +229 -0
- package/dist/animations/ghost-train.d.ts +72 -0
- package/dist/animations/ghost-train.js +247 -0
- package/dist/animations/grid-assembly.d.ts +70 -0
- package/dist/animations/grid-assembly.js +282 -0
- package/dist/animations/object-motion.d.ts +19 -7
- package/dist/animations/object-motion.js +38 -32
- package/dist/animations/particles.d.ts +110 -0
- package/dist/animations/particles.js +209 -0
- package/dist/animations/rocket-launch.d.ts +58 -0
- package/dist/animations/rocket-launch.js +375 -0
- package/dist/cjs/animations/charged-orb.cjs +1334 -0
- package/dist/cjs/animations/grid-assembly.cjs +1380 -0
- package/dist/cjs/animations/object-motion.cjs +124 -43
- package/dist/cjs/animations/particles.cjs +1940 -0
- package/dist/cjs/animations/spin.cjs +4 -3
- package/dist/cjs/composite-animation.cjs +58 -0
- package/dist/cjs/engines/little-3d-engine/little-3d-engine.cjs +143 -22
- package/dist/cjs/engines/little-3d-engine/loaders/obj.cjs +30 -1
- package/dist/cjs/engines/little-3d-engine/renderers/canvas2d-textured.cjs +345 -0
- package/dist/cjs/engines/little-3d-engine/renderers/webgl-textured.cjs +528 -0
- package/dist/cjs/engines/little-3d-engine/renderers/webgpu-textured.cjs +712 -0
- package/dist/cjs/prefabs/prefabs.cjs +3916 -0
- package/dist/composite-animation.d.ts +18 -0
- package/dist/composite-animation.js +39 -0
- package/dist/engines/little-3d-engine/little-3d-engine.d.ts +17 -12
- package/dist/engines/little-3d-engine/little-3d-engine.js +13 -8
- package/dist/engines/little-3d-engine/loaders/obj.d.ts +12 -4
- package/dist/engines/little-3d-engine/loaders/obj.js +44 -5
- package/dist/engines/little-3d-engine/renderer.d.ts +7 -1
- package/dist/engines/little-3d-engine/renderer.js +2 -0
- package/dist/engines/little-3d-engine/renderers/canvas2d-textured.d.ts +20 -0
- package/dist/engines/little-3d-engine/renderers/canvas2d-textured.js +135 -0
- package/dist/engines/little-3d-engine/renderers/textured-helpers.d.ts +9 -0
- package/dist/engines/little-3d-engine/renderers/textured-helpers.js +35 -0
- package/dist/engines/little-3d-engine/renderers/webgl-textured.d.ts +43 -0
- package/dist/engines/little-3d-engine/renderers/webgl-textured.js +211 -0
- package/dist/engines/little-3d-engine/renderers/webgpu-textured.d.ts +45 -0
- package/dist/engines/little-3d-engine/renderers/webgpu-textured.js +300 -0
- package/dist/engines/little-3d-engine/renderers/webgpu.d.ts +11 -6
- package/dist/engines/little-3d-engine/shapes/complex/plane.d.ts +3 -0
- package/dist/engines/little-3d-engine/shapes/complex/plane.js +33 -0
- package/dist/engines/little-3d-engine/shapes/{cube.d.ts → primitives/cube.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{octahedron.d.ts → primitives/octahedron.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{pyramid.d.ts → primitives/pyramid.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/primitives/quad.d.ts +9 -0
- package/dist/engines/little-3d-engine/shapes/primitives/quad.js +18 -0
- package/dist/engines/little-3d-engine/shapes/{cube-sphere.d.ts → primitives/spheres/cube-sphere.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{icosphere.d.ts → primitives/spheres/icosphere.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{icosphere.js → primitives/spheres/icosphere.js} +1 -1
- package/dist/engines/little-3d-engine/shapes/{octa-sphere.d.ts → primitives/spheres/octa-sphere.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{octa-sphere.js → primitives/spheres/octa-sphere.js} +1 -1
- package/dist/engines/little-3d-engine/shapes/{uv-sphere.d.ts → primitives/spheres/uv-sphere.d.ts} +1 -1
- package/dist/engines/little-3d-engine/shapes/{tetrahedron.d.ts → primitives/tetrahedron.d.ts} +1 -1
- package/dist/engines/little-3d-engine/textures/dynamic/canvas-texture.d.ts +1 -0
- package/dist/engines/little-3d-engine/textures/dynamic/canvas-texture.js +8 -0
- package/dist/engines/little-3d-engine/textures/dynamic/shine.d.ts +2 -0
- package/dist/engines/little-3d-engine/textures/dynamic/shine.js +14 -0
- package/dist/engines/little-3d-engine/textures/dynamic/star.d.ts +14 -0
- package/dist/engines/little-3d-engine/textures/dynamic/star.js +31 -0
- package/dist/engines/little-3d-engine/textures/dynamic/streak.d.ts +5 -0
- package/dist/engines/little-3d-engine/textures/dynamic/streak.js +20 -0
- package/dist/index.d.ts +2 -1
- package/dist/prefabs/charged-orb.d.ts +17 -0
- package/dist/prefabs/charged-orb.js +37 -0
- package/dist/prefabs/crystal-comet.d.ts +4 -0
- package/dist/prefabs/crystal-comet.js +41 -0
- package/dist/prefabs/ghost-train.d.ts +10 -0
- package/dist/prefabs/ghost-train.js +37 -0
- package/dist/prefabs/grid-assembly.d.ts +13 -0
- package/dist/prefabs/grid-assembly.js +15 -0
- package/dist/prefabs/monochrome-streak.d.ts +4 -0
- package/dist/prefabs/monochrome-streak.js +25 -0
- package/dist/prefabs/plane-star-trail.d.ts +4 -0
- package/dist/prefabs/plane-star-trail.js +40 -0
- package/dist/prefabs/prefabs.d.ts +10 -0
- package/dist/prefabs/prefabs.js +9 -0
- package/dist/prefabs/pulsing-starfield.d.ts +4 -0
- package/dist/prefabs/pulsing-starfield.js +27 -0
- package/dist/prefabs/rocket-launch.d.ts +10 -0
- package/dist/prefabs/rocket-launch.js +16 -0
- package/dist/prefabs/spinner.d.ts +7 -0
- package/dist/prefabs/spinner.js +17 -0
- package/dist/prefabs/star-swarm.d.ts +4 -0
- package/dist/prefabs/star-swarm.js +27 -0
- package/dist/prefabs/types.d.ts +46 -0
- package/dist/prefabs/types.js +1 -0
- package/dist/umd/spinner.global.js +2407 -85
- package/dist/umd/spinner.global.min.js +60 -5
- package/package.json +43 -2
- /package/dist/engines/little-3d-engine/shapes/{cube.js → primitives/cube.js} +0 -0
- /package/dist/engines/little-3d-engine/shapes/{octahedron.js → primitives/octahedron.js} +0 -0
- /package/dist/engines/little-3d-engine/shapes/{pyramid.js → primitives/pyramid.js} +0 -0
- /package/dist/engines/little-3d-engine/shapes/{cube-sphere.js → primitives/spheres/cube-sphere.js} +0 -0
- /package/dist/engines/little-3d-engine/shapes/{uv-sphere.js → primitives/spheres/uv-sphere.js} +0 -0
- /package/dist/engines/little-3d-engine/shapes/{tetrahedron.js → primitives/tetrahedron.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Spinner3D=(()=>{var
|
|
1
|
+
var Spinner3D=(()=>{var ut=Object.defineProperty;var Oi=Object.getOwnPropertyDescriptor;var Ti=Object.getOwnPropertyNames;var Si=Object.prototype.hasOwnProperty;var D=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(i){throw t=[i],i}};var ae=(n,e)=>{for(var t in e)ut(n,t,{get:e[t],enumerable:!0})},Pi=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ti(e))!Si.call(n,r)&&r!==t&&ut(n,r,{get:()=>e[r],enumerable:!(i=Oi(e,r))||i.enumerable});return n};var Ei=n=>Pi(ut({},"__esModule",{value:!0}),n);function ln(n,e,t){return{x:n,y:e,z:t}}function T(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function A(n,e){return{x:n.y*e.z-n.z*e.y,y:n.z*e.x-n.x*e.z,z:n.x*e.y-n.y*e.x}}function q(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function R(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function M(n){let e=Math.hypot(n.x,n.y,n.z);return e===0?{x:0,y:0,z:0}:{x:n.x/e,y:n.y/e,z:n.z/e}}function E(n,e){let t=new Array(16);for(let i=0;i<4;i++)for(let r=0;r<4;r++){let o=0;for(let s=0;s<4;s++)o+=n[s*4+r]*e[i*4+s];t[i*4+r]=o}return t}function Me(n,e,t){return[1,0,0,0,0,1,0,0,0,0,1,0,n,e,t,1]}function un(n){return[n,0,0,0,0,n,0,0,0,0,n,0,0,0,0,1]}function we(n){let e=Math.cos(n),t=Math.sin(n);return[1,0,0,0,0,e,t,0,0,-t,e,0,0,0,0,1]}function Fe(n){let e=Math.cos(n),t=Math.sin(n);return[e,0,-t,0,0,1,0,0,t,0,e,0,0,0,0,1]}function _e(n){let e=Math.cos(n),t=Math.sin(n);return[e,t,0,0,-t,e,0,0,0,0,1,0,0,0,0,1]}function pn(n,e,t,i){let r=1/Math.tan(n/2),o=1/(t-i);return[r/e,0,0,0,0,r,0,0,0,0,(i+t)*o,-1,0,0,2*i*t*o,0]}function ke(n,e){let t=n[0]*e.x+n[4]*e.y+n[8]*e.z+n[12],i=n[1]*e.x+n[5]*e.y+n[9]*e.z+n[13],r=n[2]*e.x+n[6]*e.y+n[10]*e.z+n[14],o=n[3]*e.x+n[7]*e.y+n[11]*e.z+n[15]||1;return{x:t/o,y:i/o,z:r/o}}function de(n,e){return{x:n[0]*e.x+n[4]*e.y+n[8]*e.z+n[12],y:n[1]*e.x+n[5]*e.y+n[9]*e.z+n[13],z:n[2]*e.x+n[6]*e.y+n[10]*e.z+n[14]}}var j=D(()=>{"use strict"});function ce(n){let e=n.trim().replace("#",""),t=e.length===3?e.split("").map(r=>r+r).join(""):e,i=parseInt(t,16);return[i>>16&255,i>>8&255,i&255]}function N(n){let e=0;for(let s of n.faces)e+=Math.max(0,s.indices.length-2);let t=new Float32Array(e*9),i=new Float32Array(e*9),r=new Float32Array(e*9),o=0;for(let s of n.faces){let a=n.vertices[s.indices[0]],c=n.vertices[s.indices[1]],u=n.vertices[s.indices[2]],l=M(A(T(c,a),T(u,a))),[p,d,h]=ce(s.color),f=p/255,b=d/255,m=h/255;for(let y=1;y<s.indices.length-1;y++){let x=[s.indices[0],s.indices[y],s.indices[y+1]];for(let g of x){let O=n.vertices[g];t[o]=O.x,t[o+1]=O.y,t[o+2]=O.z,i[o]=l.x,i[o+1]=l.y,i[o+2]=l.z,r[o]=f,r[o+1]=b,r[o+2]=m,o+=3}}}return{positions:t,normals:i,colors:r,count:t.length/3}}function pt(n,e){return{x:(n.x+e.x)/2,y:(n.y+e.y)/2,z:(n.z+e.z)/2}}function Ve(n,e,t,i,r){let o=t/2,s=e.map(l=>l.map(p=>M(n[p]))),a=Math.max(0,Math.floor(i)-1);for(let l=0;l<a;l++){let p=[];for(let[d,h,f]of s){let b=M(pt(d,h)),m=M(pt(h,f)),y=M(pt(f,d));p.push([d,b,y],[h,m,b],[f,y,m],[b,m,y])}s=p}let c=[],u=s.map((l,p)=>{let d=c.length;return c.push(R(l[0],o),R(l[1],o),R(l[2],o)),{indices:[d,d+1,d+2],color:r[p%r.length]}});return{vertices:c,faces:u}}var Q=D(()=>{"use strict";j()});function Ri(n){return Math.min(1,Math.max(0,n))}function ht(n,e,t){let i=Math.max(0,q(n,t.toLight)),r=Ri(t.ambient+t.intensity*i),[o,s,a]=ce(e);return`rgb(${Math.round(o*r)}, ${Math.round(s*r)}, ${Math.round(a*r)})`}var zi,fe,De=D(()=>{"use strict";j();Q();zi={direction:{x:-.4,y:-.7,z:-.6},intensity:.85,ambient:.25};fe=class{constructor(e){this.options={...zi,...e},this.params={toLight:M(R(this.options.direction,-1)),intensity:this.options.intensity,ambient:this.options.ambient}}shade(e,t){return ht(e,t,this.params)}}});var dn={};ae(dn,{WebGLRenderer:()=>ve});function hn(n,e,t){let i=n.createShader(e);if(n.shaderSource(i,t),n.compileShader(i),!n.getShaderParameter(i,n.COMPILE_STATUS))throw new Error(`3d-spinner: shader compile failed: ${n.getShaderInfoLog(i)}`);return i}function _i(n){let e=n.createProgram();if(n.attachShader(e,hn(n,n.VERTEX_SHADER,wi)),n.attachShader(e,hn(n,n.FRAGMENT_SHADER,Fi)),n.linkProgram(e),!n.getProgramParameter(e,n.LINK_STATUS))throw new Error(`3d-spinner: program link failed: ${n.getProgramInfoLog(e)}`);return e}var wi,Fi,ve,dt=D(()=>{"use strict";Q();K();wi=`#version 300 es
|
|
2
2
|
in vec3 aPos;
|
|
3
3
|
in vec3 aNormal;
|
|
4
4
|
in vec3 aColor;
|
|
@@ -10,7 +10,7 @@ void main() {
|
|
|
10
10
|
vNormal = mat3(uModel) * aNormal;
|
|
11
11
|
vColor = aColor;
|
|
12
12
|
gl_Position = uViewProj * uModel * vec4(aPos, 1.0);
|
|
13
|
-
}`,
|
|
13
|
+
}`,Fi=`#version 300 es
|
|
14
14
|
precision mediump float;
|
|
15
15
|
in vec3 vNormal;
|
|
16
16
|
in vec3 vColor;
|
|
@@ -23,7 +23,7 @@ void main() {
|
|
|
23
23
|
float lambert = max(dot(normalize(vNormal), normalize(uToLight)), 0.0);
|
|
24
24
|
float brightness = clamp(uAmbient + uIntensity * lambert, 0.0, 1.0);
|
|
25
25
|
fragColor = vec4(vColor * brightness, uOpacity);
|
|
26
|
-
}`;
|
|
26
|
+
}`;ve=class{constructor(e={}){this.cache=new Map;if(e.background){let[t,i,r]=ce(e.background);this.clearColor=[t/255,i/255,r/255,1]}else this.clearColor=[0,0,0,0]}init(e){let t=e.getContext("webgl2");if(!t)throw new Error("3d-spinner: WebGL2 is not supported in this browser.");this.gl=t,this.program=_i(t),this.locations={aPos:t.getAttribLocation(this.program,"aPos"),aNormal:t.getAttribLocation(this.program,"aNormal"),aColor:t.getAttribLocation(this.program,"aColor"),uViewProj:t.getUniformLocation(this.program,"uViewProj"),uModel:t.getUniformLocation(this.program,"uModel"),uToLight:t.getUniformLocation(this.program,"uToLight"),uIntensity:t.getUniformLocation(this.program,"uIntensity"),uAmbient:t.getUniformLocation(this.program,"uAmbient"),uOpacity:t.getUniformLocation(this.program,"uOpacity")},t.enable(t.DEPTH_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.frontFace(t.CCW)}resize(){let e=this.gl;if(!e)return;let t=e.canvas;e.viewport(0,0,t.width,t.height)}buffers(e){let t=this.cache.get(e);if(t)return t;let i=this.gl,r=this.locations,o=N(e),s=i.createVertexArray();i.bindVertexArray(s);let a=(u,l)=>{if(u<0)return;let p=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,p),i.bufferData(i.ARRAY_BUFFER,l,i.STATIC_DRAW),i.enableVertexAttribArray(u),i.vertexAttribPointer(u,3,i.FLOAT,!1,0,0)};a(r.aPos,o.positions),a(r.aNormal,o.normals),a(r.aColor,o.colors),i.bindVertexArray(null);let c={vao:s,count:o.count};return this.cache.set(e,c),c}render(e){let t=this.gl,i=this.locations;if(!(!t||!this.program||!i)){t.clearColor(...this.clearColor),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.useProgram(this.program),t.uniformMatrix4fv(i.uViewProj,!1,new Float32Array(e.viewProjection)),t.uniform3f(i.uToLight,e.light.toLight.x,e.light.toLight.y,e.light.toLight.z),t.uniform1f(i.uIntensity,e.light.intensity),t.uniform1f(i.uAmbient,e.light.ambient),t.disable(t.BLEND),t.depthMask(!0),t.cullFace(t.BACK);for(let r of e.items){if(r.transparency)continue;let o=this.buffers(r.mesh);t.uniformMatrix4fv(i.uModel,!1,new Float32Array(r.model)),t.uniform1f(i.uOpacity,1),t.bindVertexArray(o.vao),t.drawArrays(t.TRIANGLES,0,o.count)}t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.depthMask(!1);for(let r of e.items){let o=r.transparency;if(!o)continue;let s=this.buffers(r.mesh);if(t.uniformMatrix4fv(i.uModel,!1,new Float32Array(r.model)),t.bindVertexArray(s.vao),o.mode==="two-sided"){let a=G(o);t.cullFace(t.FRONT),t.uniform1f(i.uOpacity,a.back),t.drawArrays(t.TRIANGLES,0,s.count),t.cullFace(t.BACK),t.uniform1f(i.uOpacity,a.front),t.drawArrays(t.TRIANGLES,0,s.count)}else t.cullFace(t.BACK),t.uniform1f(i.uOpacity,z(o.opacity,.35)),t.drawArrays(t.TRIANGLES,0,s.count)}t.depthMask(!0),t.disable(t.BLEND),t.cullFace(t.BACK),t.bindVertexArray(null)}}destroy(){let e=this.gl;if(e){for(let t of this.cache.values())e.deleteVertexArray(t.vao);this.program&&e.deleteProgram(this.program)}this.cache.clear(),this.gl=void 0,this.program=void 0,this.locations=void 0}}});var mn={};ae(mn,{WebGPURenderer:()=>Ae});var ki,Vi,Be,Ae,mt=D(()=>{"use strict";Q();j();K();ki=`
|
|
27
27
|
struct Uniforms {
|
|
28
28
|
viewProj: mat4x4<f32>,
|
|
29
29
|
model: mat4x4<f32>,
|
|
@@ -54,5 +54,60 @@ fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
|
54
54
|
let brightness = clamp(u.params.y + u.params.x * lambert, 0.0, 1.0);
|
|
55
55
|
return vec4<f32>(in.color * brightness, u.params.z);
|
|
56
56
|
}
|
|
57
|
-
`,Qt=[1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1],ne=256,ye=class{constructor(e={}){this.uniformCapacity=0;this.depthSize="";this.destroyed=!1;this.cache=new Map;if(e.background){let[t,r,i]=V(e.background);this.clearValue={r:t/255,g:r/255,b:i/255,a:1},this.alphaMode="opaque"}else this.clearValue={r:0,g:0,b:0,a:0},this.alphaMode="premultiplied"}async init(e){let t=navigator.gpu;if(!t)throw new Error("3d-spinner: WebGPU is not supported in this browser.");let r=await t.requestAdapter();if(!r)throw new Error("3d-spinner: no WebGPU adapter is available.");let i=await r.requestDevice();if(this.destroyed){i.destroy?.();return}let o=e.getContext("webgpu");if(!o)throw new Error("3d-spinner: could not get a WebGPU canvas context.");let s=t.getPreferredCanvasFormat();o.configure({device:i,format:s,alphaMode:this.alphaMode});let a=i.createShaderModule({code:Yt}),c=globalThis.GPUShaderStage,m=i.createBindGroupLayout({entries:[{binding:0,visibility:c.VERTEX|c.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0,minBindingSize:160}}]}),u=d=>({arrayStride:12,attributes:[{shaderLocation:d,offset:0,format:"float32x3"}]}),h=i.createPipelineLayout({bindGroupLayouts:[m]}),l={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},p=(d,x)=>i.createRenderPipeline({layout:h,vertex:{module:a,entryPoint:"vs",buffers:[u(0),u(1),u(2)]},fragment:{module:a,entryPoint:"fs",targets:[{format:s,...x?{blend:l}:{}}]},primitive:{topology:"triangle-list",cullMode:d,frontFace:"ccw"},depthStencil:{format:"depth24plus",depthWriteEnabled:!x,depthCompare:"less"}});this.pipeline=p("back",!1),this.transparentBackPipeline=p("front",!0),this.transparentFrontPipeline=p("back",!0),this.canvas=e,this.device=i,this.context=o}resize(){this.ensureDepth()}ensureDepth(){let e=this.canvas;if(!this.device||!e)return;let t=Math.max(1,e.width),r=Math.max(1,e.height),i=`${t}x${r}`;i===this.depthSize&&this.depthTexture||(this.depthTexture?.destroy?.(),this.depthTexture=this.device.createTexture({size:{width:t,height:r},format:"depth24plus",usage:globalThis.GPUTextureUsage.RENDER_ATTACHMENT}),this.depthSize=i)}buffers(e){let t=this.cache.get(e);if(t)return t;let r=j(e),i=globalThis.GPUBufferUsage.VERTEX|globalThis.GPUBufferUsage.COPY_DST,o=a=>{let c=this.device.createBuffer({size:a.byteLength,usage:i});return this.device.queue.writeBuffer(c,0,a),c},s={position:o(r.positions),normal:o(r.normals),color:o(r.colors),count:r.count};return this.cache.set(e,s),s}ensureUniformCapacity(e){e<=this.uniformCapacity&&this.uniformBuffer||(this.uniformBuffer?.destroy?.(),this.uniformBuffer=this.device.createBuffer({size:Math.max(1,e)*ne,usage:globalThis.GPUBufferUsage.UNIFORM|globalThis.GPUBufferUsage.COPY_DST}),this.uniformCapacity=e)}render(e){if(this.destroyed||!this.device||!this.context||!this.pipeline||e.width===0||e.height===0||e.items.length===0)return;this.ensureDepth();let t=[];for(let c of e.items)c.transparency||t.push({item:c,opacity:1,pipeline:this.pipeline});for(let c of e.items){let m=c.transparency;if(m)if(m.mode==="two-sided"){let u=k(m);t.push({item:c,opacity:u.back,pipeline:this.transparentBackPipeline}),t.push({item:c,opacity:u.front,pipeline:this.transparentFrontPipeline})}else t.push({item:c,opacity:C(m.opacity,.35),pipeline:this.transparentFrontPipeline})}this.ensureUniformCapacity(t.length);let r=T(Qt,e.viewProjection),i=this.pipeline.getBindGroupLayout(0),o=this.device.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:this.uniformBuffer,offset:0,size:160}}]});t.forEach((c,m)=>{let u=new Float32Array(ne/4);u.set(r,0),u.set(c.item.model,16),u.set([e.light.toLight.x,e.light.toLight.y,e.light.toLight.z,0],32),u.set([e.light.intensity,e.light.ambient,c.opacity,0],36),this.device.queue.writeBuffer(this.uniformBuffer,m*ne,u)});let s=this.device.createCommandEncoder(),a=s.beginRenderPass({colorAttachments:[{view:this.context.getCurrentTexture().createView(),clearValue:this.clearValue,loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:this.depthTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});t.forEach((c,m)=>{let u=this.buffers(c.item.mesh);a.setPipeline(c.pipeline),a.setBindGroup(0,o,[m*ne]),a.setVertexBuffer(0,u.position),a.setVertexBuffer(1,u.normal),a.setVertexBuffer(2,u.color),a.draw(u.count)}),a.end(),this.device.queue.submit([s.finish()])}destroy(){this.destroyed=!0;for(let e of this.cache.values())e.position.destroy?.(),e.normal.destroy?.(),e.color.destroy?.();this.cache.clear(),this.uniformBuffer?.destroy?.(),this.depthTexture?.destroy?.(),this.device?.destroy?.(),this.device=void 0,this.context=void 0,this.pipeline=void 0,this.transparentBackPipeline=void 0,this.transparentFrontPipeline=void 0,this.uniformBuffer=void 0,this.depthTexture=void 0,this.canvas=void 0}}});var ht={};Q(ht,{Canvas2DRenderer:()=>xe});var xe,lt=P(()=>{"use strict";ee();I();D();xe=class{constructor(e={}){this.options=e;this.dpr=1}init(e){this.ctx=e.getContext("2d")??void 0}resize(e,t,r){this.dpr=r,this.ctx?.setTransform(r,0,0,r,0,0)}render(e){let t=this.ctx;if(!t)return;this.options.background?(t.fillStyle=this.options.background,t.fillRect(0,0,e.width,e.height)):t.clearRect(0,0,e.width,e.height);let r=[];for(let i of e.items){let o=i.mesh.vertices.map(a=>$(i.model,a)),s=i.transparency?.mode==="two-sided"?k(i.transparency):void 0;for(let a of i.mesh.faces){let c=o[a.indices[0]],m=o[a.indices[1]],u=o[a.indices[2]],h=M(z(O(m,c),O(u,c))),l=L(h,O(e.eye,c))>0,p=i.transparency;if(!l&&p?.mode!=="two-sided")continue;let d=1;p?.mode==="one-sided"?d=C(p.opacity,.35):s&&(d=l?s.front:s.back);let x=a.indices.map(y=>{let g=ot(e.viewProjection,o[y]);return{x:(g.x*.5+.5)*e.width,y:(1-(g.y*.5+.5))*e.height}}),b=0;for(let y of a.indices){let g=O(o[y],e.eye);b+=L(g,g)}b/=a.indices.length,r.push({points:x,color:fe(h,a.color,e.light),depth:b,opacity:d})}}r.sort((i,o)=>o.depth-i.depth);for(let i of r)if(!(i.points.length<3)){t.beginPath(),t.moveTo(i.points[0].x,i.points[0].y);for(let o=1;o<i.points.length;o++)t.lineTo(i.points[o].x,i.points[o].y);t.closePath(),t.fillStyle=i.color,t.strokeStyle=i.color,t.lineWidth=1,t.globalAlpha=i.opacity,t.fill(),t.stroke()}t.globalAlpha=1}destroy(){this.ctx=void 0}}});function C(n,e){return Math.max(0,Math.min(1,n??e))}function k(n){let e=C(n.frontOpacity??n.opacity,.56),t=n.opacity===void 0?.84:e*(2/3);return{front:e,back:C(n.backOpacity,t)}}function re(n,e){let t=[],r=[];for(let i of n)(i.transparency?r:t).push(i);return r.sort((i,o)=>{let s=i.model[12]-e.x,a=i.model[13]-e.y,c=i.model[14]-e.z,m=o.model[12]-e.x,u=o.model[13]-e.y,h=o.model[14]-e.z;return m*m+u*u+h*h-(s*s+a*a+c*c)}),t.concat(r)}async function mt(n,e={}){switch(n){case"webgl":return new(await Promise.resolve().then(()=>(ct(),at))).WebGLRenderer(e);case"webgpu":return new(await Promise.resolve().then(()=>(pt(),ut))).WebGPURenderer(e);default:return new(await Promise.resolve().then(()=>(lt(),ht))).Canvas2DRenderer(e)}}var D=P(()=>{"use strict"});var kn={};Q(kn,{Camera:()=>R,Light:()=>B,Little3dEngine:()=>F,LittleTweenEngine:()=>et,ObjectMotionAnimation:()=>$e,SpinAnimation:()=>Qe,centerAndScaleMesh:()=>Ct,circleMotion:()=>Pt,createSpinner:()=>_t,cross:()=>z,cube:()=>ie,cubeSphere:()=>Mt,cubic:()=>ve,dot:()=>L,ease:()=>ce,easeInBack:()=>ke,easeInBounce:()=>He,easeInCirc:()=>Re,easeInCubic:()=>oe,easeInElastic:()=>Ue,easeInExpo:()=>we,easeInOutBack:()=>_e,easeInOutBounce:()=>We,easeInOutCirc:()=>Be,easeInOutCubic:()=>Ie,easeInOutElastic:()=>Ge,easeInOutExpo:()=>Fe,easeInOutQuad:()=>Ee,easeInOutQuart:()=>Pe,easeInOutQuint:()=>Ve,easeInOutSine:()=>Se,easeInQuad:()=>U,easeInQuart:()=>se,easeInQuint:()=>ae,easeInSine:()=>ze,easeOutBack:()=>De,easeOutBounce:()=>_,easeOutCirc:()=>je,easeOutCubic:()=>W,easeOutElastic:()=>Ne,easeOutExpo:()=>q,easeOutQuad:()=>H,easeOutQuart:()=>Ce,easeOutQuint:()=>Le,easeOutSine:()=>Ae,easeTypes:()=>qe,enterFromObjectDirection:()=>yn,expandToTriangles:()=>j,figureEightMotion:()=>Vt,grow:()=>Xe,icosphere:()=>xt,leaveInObjectDirection:()=>xn,linear:()=>ge,normalize:()=>M,octaSphere:()=>gt,octahedron:()=>ft,orderRenderItems:()=>re,parseObj:()=>Bn,pyramid:()=>bt,quadratic:()=>Me,quartic:()=>Oe,quintic:()=>Te,scale:()=>A,shrink:()=>Ze,squareMotion:()=>Lt,subtract:()=>O,tetrahedron:()=>dt,transform:()=>te,uvSphere:()=>yt,vec3:()=>nt,wanderMotion:()=>wt});function tt(n){return Number.isNaN(n)?0:Math.min(1,Math.max(0,n))}function Dt(n,e,t){return n+(e-n)*t}function _t(n,e){if(!(n instanceof HTMLElement))throw new Error("3d-spinner: createSpinner requires a target HTMLElement.");let{animation:t}=e,r=e.type==="indeterminate";if(r&&e.periodMs!==void 0&&(!Number.isFinite(e.periodMs)||e.periodMs<=0))throw new RangeError("3d-spinner: periodMs must be a finite number greater than zero.");t.mount(n);let i=performance.now(),o=0,s=!1,a=!1,c=!1,m=!1,u=0,h=0,l=1/0;if(!r){let v=e;typeof v.progress=="number"&&(u=tt(v.progress),h=u),typeof v.timeout=="number"&&(l=Math.min(l,i+v.timeout)),v.until instanceof Date&&(l=Math.min(l,v.until.getTime()))}function p(v){if(!r)return v>=l&&(h=1),u=Dt(u,h,.12),Math.abs(h-u)<5e-4&&(u=h),u;let E=e,he=E.periodMs??2e3,Y=(v-i)/he;if((E.loop??"bounce")==="restart")return Y-Math.floor(Y);let le=Y-2*Math.floor(Y/2);return le<=1?le:2-le}function d(v){if(s)return;let E=p(v);!c&&(r||E>0)&&(t.enter(v),c=!0),!m&&c&&!r&&E>=1&&h>=1&&(t.exit(v),m=!0);let he=r?E:h;if(t.render(v,{progress:E,targetProgress:he,indeterminate:r}),m&&t.isFinished()){x();return}o=requestAnimationFrame(d)}function x(){s||(s=!0,o&&cancelAnimationFrame(o),o=0)}function b(v){r||(h=tt(v))}function y(){if(!(s||m)){if(!c){x();return}t.exit(performance.now()),m=!0}}function g(){a||(a=!0,x(),t.destroy())}return o=requestAnimationFrame(d),{setProgress:b,stop:y,destroy:g}}I();var Ut={position:{x:0,y:0,z:4},fov:55*Math.PI/180,near:.1,far:100},R=class{constructor(e){this.options={...Ut,...e}}toView(e){let{position:t}=this.options;return $(N(-t.x,-t.y,-t.z),e)}viewProjection(e){let{position:t,fov:r,near:i,far:o}=this.options,s=N(-t.x,-t.y,-t.z),a=it(r,e,i,o);return T(a,s)}toScreen(e,t,r){return{x:(e.x*.5+.5)*t,y:(1-(e.y*.5+.5))*r}}};ee();I();function te(n){return{position:n?.position??{x:0,y:0,z:0},rotation:n?.rotation??{x:0,y:0,z:0},scale:n?.scale??1}}D();ee();var Xt=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function ie(n=1,e=Xt){let t=n/2,r=[{x:-t,y:-t,z:t},{x:t,y:-t,z:t},{x:t,y:t,z:t},{x:-t,y:t,z:t},{x:-t,y:-t,z:-t},{x:t,y:-t,z:-t},{x:t,y:t,z:-t},{x:-t,y:t,z:-t}],i=[{indices:[0,1,2,3],color:e[0%e.length]},{indices:[5,4,7,6],color:e[1%e.length]},{indices:[3,2,6,7],color:e[2%e.length]},{indices:[4,5,1,0],color:e[3%e.length]},{indices:[1,5,6,2],color:e[4%e.length]},{indices:[4,0,3,7],color:e[5%e.length]}];return{vertices:r,faces:i}}var Zt=["#3b82f6","#8b5cf6","#ec4899","#f59e0b"];function dt(n=1,e=Zt){let t=n/2,r=[{x:t,y:t,z:t},{x:t,y:-t,z:-t},{x:-t,y:t,z:-t},{x:-t,y:-t,z:t}],i=[{indices:[0,1,2],color:e[0%e.length]},{indices:[0,3,1],color:e[1%e.length]},{indices:[0,2,3],color:e[2%e.length]},{indices:[1,3,2],color:e[3%e.length]}];return{vertices:r,faces:i}}var Kt=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444","#06b6d4","#eab308"];function ft(n=1,e=Kt){let t=n/2,r=[{x:t,y:0,z:0},{x:-t,y:0,z:0},{x:0,y:t,z:0},{x:0,y:-t,z:0},{x:0,y:0,z:t},{x:0,y:0,z:-t}],i=[{indices:[4,0,2],color:e[0%e.length]},{indices:[4,2,1],color:e[1%e.length]},{indices:[4,1,3],color:e[2%e.length]},{indices:[4,3,0],color:e[3%e.length]},{indices:[5,2,0],color:e[4%e.length]},{indices:[5,1,2],color:e[5%e.length]},{indices:[5,3,1],color:e[6%e.length]},{indices:[5,0,3],color:e[7%e.length]}];return{vertices:r,faces:i}}var $t=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981"];function bt(n=1,e=$t){let t=n/2,r=[{x:-t,y:-t,z:t},{x:t,y:-t,z:t},{x:t,y:-t,z:-t},{x:-t,y:-t,z:-t},{x:0,y:t,z:0}],i=[{indices:[0,3,2,1],color:e[0%e.length]},{indices:[4,0,1],color:e[1%e.length]},{indices:[4,1,2],color:e[2%e.length]},{indices:[4,2,3],color:e[3%e.length]},{indices:[4,3,0],color:e[4%e.length]}];return{vertices:r,faces:i}}var Jt=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function yt(n=1,e=1,t=Jt){let r=n/2,i=Math.max(1,Math.floor(e)),o=Math.max(4,i*4),s=Math.max(2,i*2),a=[{x:0,y:r,z:0}],c=(p,d)=>1+(p-1)*o+d;for(let p=1;p<s;p++){let d=Math.PI*p/s,x=r*Math.cos(d),b=r*Math.sin(d);for(let y=0;y<o;y++){let g=2*Math.PI*y/o;a.push({x:b*Math.cos(g),y:x,z:b*Math.sin(g)})}}let m=a.length;a.push({x:0,y:-r,z:0});let u=[],h=0,l=()=>t[h++%t.length];for(let p=0;p<o;p++)u.push({indices:[0,c(1,(p+1)%o),c(1,p)],color:l()});for(let p=1;p<s-1;p++)for(let d=0;d<o;d++){let x=(d+1)%o;u.push({indices:[c(p,d),c(p,x),c(p+1,x),c(p+1,d)],color:l()})}for(let p=0;p<o;p++)u.push({indices:[m,c(s-1,p),c(s-1,(p+1)%o)],color:l()});return{vertices:a,faces:u}}w();var en=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],S=(1+Math.sqrt(5))/2,tn=[{x:-1,y:S,z:0},{x:1,y:S,z:0},{x:-1,y:-S,z:0},{x:1,y:-S,z:0},{x:0,y:-1,z:S},{x:0,y:1,z:S},{x:0,y:-1,z:-S},{x:0,y:1,z:-S},{x:S,y:0,z:-1},{x:S,y:0,z:1},{x:-S,y:0,z:-1},{x:-S,y:0,z:1}],nn=[[0,11,5],[0,5,1],[0,1,7],[0,7,10],[0,10,11],[1,5,9],[5,11,4],[11,10,2],[10,7,6],[7,1,8],[3,9,4],[3,4,2],[3,2,6],[3,6,8],[3,8,9],[4,9,5],[2,4,11],[6,2,10],[8,6,7],[9,8,1]];function xt(n=1,e=1,t=en){return J(tn,nn,n,e,t)}w();var rn=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],on=[{x:1,y:0,z:0},{x:-1,y:0,z:0},{x:0,y:1,z:0},{x:0,y:-1,z:0},{x:0,y:0,z:1},{x:0,y:0,z:-1}],sn=[[4,0,2],[4,2,1],[4,1,3],[4,3,0],[5,2,0],[5,1,2],[5,3,1],[5,0,3]];function gt(n=1,e=1,t=rn){return J(on,sn,n,e,t)}var an=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],cn=[{normal:[0,0,1],right:[1,0,0],up:[0,1,0]},{normal:[0,0,-1],right:[-1,0,0],up:[0,1,0]},{normal:[1,0,0],right:[0,0,-1],up:[0,1,0]},{normal:[-1,0,0],right:[0,0,1],up:[0,1,0]},{normal:[0,1,0],right:[1,0,0],up:[0,0,-1]},{normal:[0,-1,0],right:[1,0,0],up:[0,0,1]}];function Mt(n=1,e=1,t=an){let r=n/2,i=Math.max(1,Math.floor(e)),o=[],s=[],a=0;for(let c of cn){let m=o.length;for(let h=0;h<=i;h++)for(let l=0;l<=i;l++){let p=-1+2*h/i,d=-1+2*l/i,x=c.normal[0]+p*c.right[0]+d*c.up[0],b=c.normal[1]+p*c.right[1]+d*c.up[1],y=c.normal[2]+p*c.right[2]+d*c.up[2],g=Math.hypot(x,b,y);o.push({x:x/g*r,y:b/g*r,z:y/g*r})}let u=(h,l)=>m+h*(i+1)+l;for(let h=0;h<i;h++)for(let l=0;l<i;l++)s.push({indices:[u(h,l),u(h+1,l),u(h+1,l+1),u(h,l+1)],color:t[a++%t.length]})}return{vertices:o,faces:s}}w();D();I();function un(n){let e=T(K(n.rotation.z),T(Z(n.rotation.y),X(n.rotation.x)));return T(N(n.position.x,n.position.y,n.position.z),T(e,rt(n.scale)))}var F=class{constructor(e={}){this.scene=[];this.cssWidth=0;this.cssHeight=0;this.ready=!1;this.generation=0;this.rafId=0;this.running=!1;this.camera=new R(e.camera),this.light=new B(e.light),this.backend=e.backend??"canvas2d",this.background=e.background}async mount(e){let t=document.createElement("canvas");t.style.display="block",t.style.width="100%",t.style.height="100%",e.appendChild(t),this.canvas=t,this.observer=new ResizeObserver(()=>this.resize()),this.observer.observe(t),this.resize();let r=this.generation,i=()=>{this.canvas===t&&(this.observer?.disconnect(),this.observer=void 0,t.remove(),this.canvas=void 0)};try{let o=await mt(this.backend,{background:this.background});if(r!==this.generation){o.destroy(),i();return}if(await o.init(t),r!==this.generation){o.destroy(),i();return}this.renderer=o,this.resize(),this.ready=!0}catch(o){throw i(),o}}add(e,t){let r={mesh:e,transform:te(t),transparency:t?.transparency,remove:()=>{let i=this.scene.indexOf(r);i>=0&&this.scene.splice(i,1)}};return this.scene.push(r),r}resize(){let e=this.canvas;if(!e)return;let t=window.devicePixelRatio||1;this.cssWidth=e.clientWidth||e.parentElement?.clientWidth||0,this.cssHeight=e.clientHeight||e.parentElement?.clientHeight||0,e.width=Math.max(1,Math.round(this.cssWidth*t)),e.height=Math.max(1,Math.round(this.cssHeight*t)),this.renderer?.resize(this.cssWidth,this.cssHeight,t)}render(){if(!this.ready||!this.renderer)return;let e=this.cssWidth,t=this.cssHeight;if(e===0||t===0)return;let r=this.scene.map(o=>({mesh:o.mesh,model:un(o.transform),transparency:o.transparency})),i=this.camera.options.position;this.renderer.render({items:re(r,i),viewProjection:this.camera.viewProjection(e/t),eye:i,light:this.light.params,width:e,height:t})}start(){if(this.running)return;this.running=!0;let e=()=>{this.running&&(this.render(),this.rafId=requestAnimationFrame(e))};this.rafId=requestAnimationFrame(e)}stop(){this.running=!1,this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0}destroy(){this.generation++,this.ready=!1,this.stop(),this.observer?.disconnect(),this.observer=void 0,this.renderer?.destroy(),this.renderer=void 0,this.canvas?.remove(),this.canvas=void 0}};function f(n,e){return Number.isNaN(n)?0:e?n:Math.min(1,Math.max(0,n))}function ge(n,e=!1){return f(n,e)}function Me(n,e=!1){return U(n,e)}function ve(n,e=!1){return oe(n,e)}function Oe(n,e=!1){return se(n,e)}function Te(n,e=!1){return ae(n,e)}function ze(n,e=!1){let t=f(n,e);return 1-Math.cos(t*Math.PI/2)}function Ae(n,e=!1){let t=f(n,e);return Math.sin(t*Math.PI/2)}function Se(n,e=!1){let t=f(n,e);return-(Math.cos(Math.PI*t)-1)/2}function U(n,e=!1){let t=f(n,e);return t*t}function H(n,e=!1){let t=f(n,e);return 1-(1-t)*(1-t)}function Ee(n,e=!1){let t=f(n,e);return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function oe(n,e=!1){let t=f(n,e);return t*t*t}function W(n,e=!1){let t=f(n,e);return 1-Math.pow(1-t,3)}function Ie(n,e=!1){let t=f(n,e);return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2}function se(n,e=!1){let t=f(n,e);return t*t*t*t}function Ce(n,e=!1){let t=f(n,e);return 1-Math.pow(1-t,4)}function Pe(n,e=!1){let t=f(n,e);return t<.5?8*t*t*t*t:1-Math.pow(-2*t+2,4)/2}function ae(n,e=!1){let t=f(n,e);return t*t*t*t*t}function Le(n,e=!1){let t=f(n,e);return 1-Math.pow(1-t,5)}function Ve(n,e=!1){let t=f(n,e);return t<.5?16*t*t*t*t*t:1-Math.pow(-2*t+2,5)/2}function we(n,e=!1){let t=f(n,e);return t===0?0:Math.pow(2,10*t-10)}function q(n,e=!1){let t=f(n,e);return t===1?1:1-Math.pow(2,-10*t)}function Fe(n,e=!1){let t=f(n,e);return t===0?0:t===1?1:t<.5?Math.pow(2,20*t-10)/2:(2-Math.pow(2,-20*t+10))/2}function Re(n,e=!1){let t=f(n,e);return 1-Math.sqrt(1-Math.pow(t,2))}function je(n,e=!1){let t=f(n,e);return Math.sqrt(1-Math.pow(t-1,2))}function Be(n,e=!1){let t=f(n,e);return t<.5?(1-Math.sqrt(1-Math.pow(2*t,2)))/2:(Math.sqrt(1-Math.pow(-2*t+2,2))+1)/2}function ke(n,e=!1){let t=f(n,e),r=1.70158;return(r+1)*t*t*t-r*t*t}function De(n,e=!1){let t=f(n,e),r=1.70158;return 1+(r+1)*Math.pow(t-1,3)+r*Math.pow(t-1,2)}function _e(n,e=!1){let t=f(n,e),i=1.70158*1.525;return t<.5?Math.pow(2*t,2)*((i+1)*2*t-i)/2:(Math.pow(2*t-2,2)*((i+1)*(t*2-2)+i)+2)/2}function Ue(n,e=!1){let t=f(n,e),r=2*Math.PI/3;return t===0?0:t===1?1:-Math.pow(2,10*t-10)*Math.sin((t*10-10.75)*r)}function Ne(n,e=!1){let t=f(n,e),r=2*Math.PI/3;return t===0?0:t===1?1:Math.pow(2,-10*t)*Math.sin((t*10-.75)*r)+1}function Ge(n,e=!1){let t=f(n,e),r=2*Math.PI/4.5;return t===0?0:t===1?1:t<.5?-(Math.pow(2,20*t-10)*Math.sin((20*t-11.125)*r))/2:Math.pow(2,-20*t+10)*Math.sin((20*t-11.125)*r)/2+1}function He(n,e=!1){let t=f(n,e);return 1-_(1-t,!0)}function _(n,e=!1){let t=f(n,e),r=7.5625,i=2.75;return t<1/i?r*t*t:t<2/i?(t-=1.5/i,r*t*t+.75):t<2.5/i?(t-=2.25/i,r*t*t+.9375):(t-=2.625/i,r*t*t+.984375)}function We(n,e=!1){let t=f(n,e);return t<.5?(1-_(1-2*t,!0))/2:(1+_(2*t-1,!0))/2}var qe={linear:ge,quadratic:Me,cubic:ve,quartic:Oe,quintic:Te,easeInSine:ze,easeOutSine:Ae,easeInOutSine:Se,easeInQuad:U,easeOutQuad:H,easeInOutQuad:Ee,easeInCubic:oe,easeOutCubic:W,easeInOutCubic:Ie,easeInQuart:se,easeOutQuart:Ce,easeInOutQuart:Pe,easeInQuint:ae,easeOutQuint:Le,easeInOutQuint:Ve,easeInExpo:we,easeOutExpo:q,easeInOutExpo:Fe,easeInCirc:Re,easeOutCirc:je,easeInOutCirc:Be,easeInBack:ke,easeOutBack:De,easeInOutBack:_e,easeInElastic:Ue,easeOutElastic:Ne,easeInOutElastic:Ge,easeInBounce:He,easeOutBounce:_,easeInOutBounce:We};function ce(n,e,t=!1){return qe[n](e,t)}function pn(n={}){return{popDurationMs:n.popDurationMs??500,overextend:n.overextend??.2,startSnapRatio:n.startSnapRatio??.2,loadingText:n.loadingText===void 0?"loading":n.loadingText,doneText:n.doneText??"done",doneFadeDurationMs:n.doneFadeDurationMs??2e3,removeOnComplete:n.removeOnComplete??!1}}function Ye(n,e,t){return t<=0?1:Math.min(1,Math.max(0,(n-e)/t))}var ue=class{constructor(e={}){this.phase="idle";this.phaseStart=0;this.activeProgress=0;this.popTarget=0;this.doneFadeStart=0;this.options=pn(e)}enter(e){this.phase==="idle"&&(this.phase="startPop",this.phaseStart=e,this.activeProgress=0,this.popTarget=0)}exit(e){this.phase!=="startPop"&&this.phase!=="active"||(this.phase="endPop",this.phaseStart=e)}isFinished(){return this.phase==="finished"}update(e,t,r){let{popDurationMs:i,overextend:o,startSnapRatio:s,loadingText:a,doneText:c,doneFadeDurationMs:m,removeOnComplete:u}=this.options,h=r??t;(this.phase==="startPop"||this.phase==="active")&&(this.activeProgress=t,this.phase==="startPop"&&(this.popTarget=Math.max(this.popTarget,h,t)));let l=0,p=null,d=0,x=!1;if(this.phase==="startPop"){let b=Ye(e,this.phaseStart,i),y=this.popTarget*(1+o);if(b<s){let g=s>0?b/s:1;l=y*q(g)}else{let g=s<1?(b-s)/(1-s):1;l=y+(this.activeProgress-y)*W(g)}b>=1&&(this.phase="active")}else if(this.phase==="active")l=this.activeProgress;else if(this.phase==="endPop"){let b=Ye(e,this.phaseStart,i),y=1+o;b<.5?l=1+(y-1)*H(b*2):l=y*(1-U((b-.5)*2)),b>=1&&(this.phase="done",this.doneFadeStart=e,l=0)}if(this.phase==="startPop"||this.phase==="active")a!==!1&&(p=a,d=.65);else if(this.phase==="endPop")p=c,d=.65;else if(this.phase==="done"){let b=Ye(e,this.doneFadeStart,m);b>=1?(u&&(x=!0),this.phase="finished"):(p=c,d=.65*(1-b))}return{scale:l,text:p,textOpacity:d,hidden:x}}};var hn=["position:absolute","inset:0","display:flex","align-items:center","justify-content:center","pointer-events:none","font:600 1.1rem/1.2 system-ui,sans-serif","letter-spacing:0.06em","text-transform:lowercase","color:rgba(255,255,255,0.65)","z-index:1"].join(";");function ln(n){return n?typeof n=="function"?n():n:ie()}function mn(n,e){if(e===void 0||Array.isArray(e)&&e.length===0)return n;let t=Array.isArray(e)?r=>e[r%e.length]:()=>e;return{vertices:n.vertices,faces:n.faces.map((r,i)=>({...r,color:t(i)}))}}var Qe=class{constructor(e={}){this.exited=!1;this.mesh=mn(ln(e.shape),e.color),this.spinX=e.spinX??7e-4,this.spinY=e.spinY??.0011,this.backend=e.backend,this.transparency=e.transparency,this.progress=e.progressAnimation?new ue(e.progressAnimation):void 0}mount(e){e.style.position="relative";let t=new F({backend:this.backend,camera:{position:{x:0,y:0,z:2.8}}});if(this.handle=t.add(this.mesh,{transparency:this.transparency}),this.engine=t,t.mount(e).catch(r=>{e.textContent=r instanceof Error?r.message:String(r)}),this.progress){let r=document.createElement("div");r.style.cssText=hn,r.setAttribute("aria-hidden","true"),r.hidden=!0,e.appendChild(r),this.label=r}}enter(e){this.progress?.enter(e)}exit(e){this.exited=!0,this.progress?.exit(e)}isFinished(){return this.progress?this.progress.isFinished():this.exited}render(e,t){if(!this.engine||!this.handle)return;let r=this.handle.transform.rotation;if(r.x=e*this.spinX,r.y=e*this.spinY,this.progress){let i=this.progress.update(e,t.progress,t.targetProgress);this.handle.transform.scale=i.hidden?0:i.scale,this.applyLabel(i)}else this.handle.transform.scale=1;this.engine.render()}destroy(){this.label?.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handle=void 0}applyLabel(e){if(this.label){if(e.hidden||e.text==null){this.label.hidden=!0,this.label.textContent="";return}this.label.hidden=!1,this.label.textContent=e.text,this.label.style.opacity=String(e.textOpacity)}}};I();function vt(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function pe(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function Ot(n){return Math.hypot(n.x,n.y,n.z)}function dn(n){let e=Ot(n);return e<1e-6?{x:1,y:0,z:0}:pe(n,1/e)}function fn(n,e){return dn(e??n.direction??n.velocity??{x:1,y:0,z:0})}function bn(n){let t=n-1;return 1+(1.70158+1)*t*t*t+1.70158*t*t}function Tt(n,e,t){let r=n.velocity?Ot(n.velocity):0;if(n.velocity&&r>1e-6&&!e.direction)return n.velocity;let i=e.distance??3.5;return pe(fn(n,e.direction),i/t)}function yn(n={}){return e=>{let t=Math.max(1,e.durationMs),r=Tt(e,n,t),i=t-e.elapsedMs;return{position:vt(e.position,pe(r,-i))}}}function xn(n={}){return e=>{let t=Math.max(1,e.durationMs),r=Tt(e,n,t);return{position:vt(e.position,pe(r,e.elapsedMs))}}}function Xe(){return n=>({size:(n.size??1)*bn(n.delta)})}function Ze(){return n=>({size:(n.size??1)*(1-n.delta*n.delta)})}var gn=["position:absolute","inset:0","display:flex","align-items:center","justify-content:center","pointer-events:none","font:700 1.6rem/1 system-ui,sans-serif","letter-spacing:0.02em","color:rgba(255,255,255,0.9)","text-shadow:0 1px 10px rgba(0,0,0,0.6)","z-index:1"].join(";"),Mn={x:0,y:1,z:0},vn=2100,On=2100,Tn=26,zt=.7,zn=.12,Ke=8,An={"+x":n=>n,"-x":n=>({x:-n.x,y:n.y,z:-n.z}),"+z":n=>({x:n.z,y:n.y,z:-n.x}),"-z":n=>({x:-n.z,y:n.y,z:n.x}),"+y":n=>({x:n.y,y:-n.x,z:n.z}),"-y":n=>({x:-n.y,y:n.x,z:n.z})};function Sn(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function En(n){return typeof n=="function"?n():n}function In(n,e){return{vertices:n.vertices,faces:n.faces.map(t=>({...t,color:e}))}}function Cn(n,e){if(e==="+x")return n;let t=An[e];return{vertices:n.vertices.map(t),faces:n.faces}}function Ct(n,e){let t=1/0,r=1/0,i=1/0,o=-1/0,s=-1/0,a=-1/0;for(let p of n.vertices)t=Math.min(t,p.x),r=Math.min(r,p.y),i=Math.min(i,p.z),o=Math.max(o,p.x),s=Math.max(s,p.y),a=Math.max(a,p.z);let c=(t+o)/2,m=(r+s)/2,u=(i+a)/2,h=Math.max(o-t,s-r,a-i)||1,l=e/h;return{vertices:n.vertices.map(p=>({x:(p.x-c)*l,y:(p.y-m)*l,z:(p.z-u)*l})),faces:n.faces}}function Pn(n,e){let t=M(n),r=z(t,Mn);Math.hypot(r.x,r.y,r.z)<1e-4&&(r={x:0,y:0,z:1}),r=M(r);let i=z(r,t),o=Sn(A(i,Math.cos(e)),A(r,Math.sin(e))),s=M(z(t,o));return{x:Math.atan2(z(s,t).z,s.z),y:Math.asin(Math.max(-1,Math.min(1,-t.z))),z:Math.atan2(t.y,t.x)}}function At(n,e,t){return T(K(t),T(Z(e),X(n)))}function Ln(n){return Math.hypot(n[0],n[1])>1e-6?{x:Math.atan2(n[9],n[10]),y:Math.asin(Math.max(-1,Math.min(1,-n[8]))),z:Math.atan2(n[4],n[0])}:{x:Math.atan2(-n[6],n[5]),y:Math.asin(Math.max(-1,Math.min(1,-n[8]))),z:0}}function Vn(n,e){return Ln(T(At(n.x,n.y,n.z),At(e.x,e.y,e.z)))}function wn(n){return Math.max(0,Math.min(1,n))}function St(n,e){return A(O(n.positionAt(e+1),n.positionAt(e-1)),.5)}function Et(n,e){return Math.hypot(n.x,n.y,n.z)>1e-6?M(n):e}function It(n,e,t){return n?typeof n=="function"?{transition:n,durationMs:t}:{transition:n.transition,durationMs:Math.max(0,n.durationMs??t)}:{transition:e,durationMs:t}}var $e=class{constructor(e){this.handles=[];this.banks=[];this.headings=[];this.started=!1;this.finished=!1;this.introStart=0;this.outroStart=1/0;this.outroPosition={x:0,y:0,z:0};this.outroVelocity={x:0,y:0,z:0};this.outroDirection={x:1,y:0,z:0};let t=Ct(En(e.mesh),e.size??1),r=Cn(t,e.facing??"+x");this.mesh=In(r,e.color??"#cbd5e1"),this.motion=e.motion,this.backend=e.backend,this.transparency=e.transparency,this.labelText=e.label,this.tailCount=Math.max(0,Math.floor(e.tail?.count??0)),this.tailGap=Math.max(0,e.tail?.gapMs??0),this.intro=It(e.intro,Xe(),vn),this.outro=It(e.outro,Ze(),On);let i=e.rotation;this.rotationOffset={x:i?.x??0,y:i?.y??0,z:i?.z??0},this.rotationSpin={x:i?.spinX??0,y:i?.spinY??0,z:i?.spinZ??0},this.hasExtraRotation=this.rotationOffset.x!==0||this.rotationOffset.y!==0||this.rotationOffset.z!==0||this.rotationSpin.x!==0||this.rotationSpin.y!==0||this.rotationSpin.z!==0}mount(e){e.style.position="relative";let t=new F({backend:this.backend,camera:{position:{x:0,y:0,z:3}}});for(let i=0;i<=this.tailCount;i++)this.handles.push(t.add(this.mesh,{transparency:this.transparency})),this.banks.push(0),this.headings.push({x:1,y:0,z:0});this.engine=t,t.mount(e).catch(i=>{e.textContent=i instanceof Error?i.message:String(i)});let r=document.createElement("div");r.style.cssText=gn,r.setAttribute("role","status"),e.appendChild(r),this.label=r}enter(e){this.started||(this.started=!0,this.introStart=e)}exit(e){!this.started||this.outroStart!==1/0||(this.outroPosition=this.motion.positionAt(e),this.outroVelocity=St(this.motion,e),this.outroDirection=Et(this.outroVelocity,this.headings[0]),this.outroStart=e)}isFinished(){return this.finished}render(e,t){if(!(!this.engine||!this.label)){this.outroStart!==1/0&&e>=this.outroStart+this.outro.durationMs+this.tailCount*this.tailGap&&(this.finished=!0);for(let r=0;r<this.handles.length;r++){let i=this.handles[r].transform,o=e-r*this.tailGap,s=this.sampleAt(o);if(!s){i.scale=0;continue}i.scale=s.size;let a=s.orientation;if(!a){let c=O(this.positionAt(o+Ke)??s.position,s.position);Math.hypot(c.x,c.y,c.z)>1e-5&&(this.headings[r]=M(c));let m=this.aheadAt(o)??this.headings[r],u=Math.max(-zt,Math.min(zt,z(this.headings[r],m).y*Tn));this.banks[r]+=(u-this.banks[r])*zn,a=Pn(this.headings[r],this.banks[r])}this.hasExtraRotation&&(a=Vn(a,{x:this.rotationOffset.x+this.rotationSpin.x*o,y:this.rotationOffset.y+this.rotationSpin.y*o,z:this.rotationOffset.z+this.rotationSpin.z*o})),i.position.x=s.position.x,i.position.y=s.position.y,i.position.z=s.position.z,i.rotation.x=a.x,i.rotation.y=a.y,i.rotation.z=a.z}this.label.textContent=t.indeterminate?this.labelText??"":`${Math.round(t.progress*100)}%`,this.engine.render()}}destroy(){this.label?.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handles.length=0}aheadAt(e){let t=this.positionAt(e+Ke),r=this.positionAt(e+2*Ke);if(!t||!r)return;let i=O(r,t);if(!(Math.hypot(i.x,i.y,i.z)<=1e-5))return M(i)}positionAt(e){return this.sampleAt(e)?.position}sampleAt(e){if(!(!this.started||e<this.introStart)){if(e<this.introStart+this.intro.durationMs)return this.transitionSample("intro",e,this.intro,this.introStart);if(this.outroStart!==1/0){if(e>this.outroStart+this.outro.durationMs)return;if(e>=this.outroStart)return this.transitionSample("outro",e,this.outro,this.outroStart)}return{position:this.motion.positionAt(e),size:1}}}transitionSample(e,t,r,i){let o=Math.max(0,t-i),s=r.durationMs===0?1:wn(o/r.durationMs),a=this.transitionInput(e,s,o,r.durationMs,i),c=r.transition(a);return this.applyTransitionOutput(a,c)}transitionInput(e,t,r,i,o){if(e==="intro"){let s=o+i,a=St(this.motion,s);return{delta:t,position:this.motion.positionAt(s),direction:Et(a,{x:1,y:0,z:0}),velocity:a,size:1,durationMs:i,elapsedMs:r,phase:e}}return{delta:t,position:this.outroPosition,direction:this.outroDirection,velocity:this.outroVelocity,size:1,durationMs:i,elapsedMs:r,phase:e}}applyTransitionOutput(e,t){return{position:t.position??e.position,size:t.size??e.size??1,orientation:t.orientation}}};function Pt(n={}){let e=n.radius??1.3,t=n.periodMs??3e3,r=n.tilt??.5,i=n.direction??1,o=Math.cos(r),s=Math.sin(r);return{positionAt(a){let c=i*a/t*Math.PI*2,m=e*Math.cos(c),u=e*Math.sin(c);return{x:m,y:u*o,z:u*s}}}}function Lt(n={}){let e=(n.size??2.4)/2,t=n.periodMs??4e3,r=n.tilt??.45,i=n.direction??1,o=Math.cos(r),s=Math.sin(r);return{positionAt(a){let c=i*a/t,m=(c-Math.floor(c))*4,u=Math.floor(m),h=m-u,l,p;return u===0?(l=-e+2*e*h,p=-e):u===1?(l=e,p=-e+2*e*h):u===2?(l=e-2*e*h,p=e):(l=-e,p=e-2*e*h),{x:l,y:p*o,z:p*s}}}}function Vt(n={}){let e=n.size??1,t=n.periodMs??3600;return{positionAt(r){let i=r/t*Math.PI*2;return{x:e*1.5*Math.sin(i),y:e*1*Math.sin(i)*Math.cos(i),z:e*1.05*Math.cos(i)}}}}function Fn(n){let e=n>>>0;return()=>{e=e+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function Je(n,e,t){let r=[0,1,2].map(()=>({freq:.5+n()*1.4,phase:n()*Math.PI*2,weight:.5+n()})),i=r.reduce((o,s)=>o+s.weight,0);return o=>{let s=0;for(let a of r)s+=a.weight*Math.sin(e*a.freq*o+a.phase);return s/i*t}}function wt(n={}){let e=n.bounds?.x??1.4,t=n.bounds?.y??1,r=n.bounds?.z??.6,i=n.periodMs??9e3,o=n.seed??Math.random()*1e9|0,s=Fn(o),a=2*Math.PI/i,c=Je(s,a,e),m=Je(s,a,t),u=Je(s,a,r);return{positionAt(h){return{x:c(h),y:m(h),z:u(h)}}}}var Rn=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function jn(n,e){let t=parseInt(n,10);return t<0?e+t:t-1}function Bn(n,e={}){let t=e.colors??Rn,r=[],i=[];for(let o of n.split(`
|
|
58
|
-
|
|
57
|
+
`,Vi=[1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1],Be=256,Ae=class{constructor(e={}){this.uniformCapacity=0;this.depthSize="";this.destroyed=!1;this.cache=new Map;if(e.background){let[t,i,r]=ce(e.background);this.clearValue={r:t/255,g:i/255,b:r/255,a:1},this.alphaMode="opaque"}else this.clearValue={r:0,g:0,b:0,a:0},this.alphaMode="premultiplied"}async init(e){let t=navigator.gpu;if(!t)throw new Error("3d-spinner: WebGPU is not supported in this browser.");let i=await t.requestAdapter();if(!i)throw new Error("3d-spinner: no WebGPU adapter is available.");let r=await i.requestDevice();if(this.destroyed){r.destroy?.();return}let o=e.getContext("webgpu");if(!o)throw new Error("3d-spinner: could not get a WebGPU canvas context.");let s=t.getPreferredCanvasFormat();o.configure({device:r,format:s,alphaMode:this.alphaMode});let a=r.createShaderModule({code:ki}),c=globalThis.GPUShaderStage,u=r.createBindGroupLayout({entries:[{binding:0,visibility:c.VERTEX|c.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0,minBindingSize:160}}]}),l=f=>({arrayStride:12,attributes:[{shaderLocation:f,offset:0,format:"float32x3"}]}),p=r.createPipelineLayout({bindGroupLayouts:[u]}),d={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},h=(f,b)=>r.createRenderPipeline({layout:p,vertex:{module:a,entryPoint:"vs",buffers:[l(0),l(1),l(2)]},fragment:{module:a,entryPoint:"fs",targets:[{format:s,...b?{blend:d}:{}}]},primitive:{topology:"triangle-list",cullMode:f,frontFace:"ccw"},depthStencil:{format:"depth24plus",depthWriteEnabled:!b,depthCompare:"less"}});this.pipeline=h("back",!1),this.transparentBackPipeline=h("front",!0),this.transparentFrontPipeline=h("back",!0),this.canvas=e,this.device=r,this.context=o}resize(){this.ensureDepth()}ensureDepth(){let e=this.canvas;if(!this.device||!e)return;let t=Math.max(1,e.width),i=Math.max(1,e.height),r=`${t}x${i}`;r===this.depthSize&&this.depthTexture||(this.depthTexture?.destroy?.(),this.depthTexture=this.device.createTexture({size:{width:t,height:i},format:"depth24plus",usage:globalThis.GPUTextureUsage.RENDER_ATTACHMENT}),this.depthSize=r)}buffers(e){let t=this.cache.get(e);if(t)return t;let i=N(e),r=globalThis.GPUBufferUsage.VERTEX|globalThis.GPUBufferUsage.COPY_DST,o=a=>{let c=this.device.createBuffer({size:a.byteLength,usage:r});return this.device.queue.writeBuffer(c,0,a),c},s={position:o(i.positions),normal:o(i.normals),color:o(i.colors),count:i.count};return this.cache.set(e,s),s}ensureUniformCapacity(e){e<=this.uniformCapacity&&this.uniformBuffer||(this.uniformBuffer?.destroy?.(),this.uniformBuffer=this.device.createBuffer({size:Math.max(1,e)*Be,usage:globalThis.GPUBufferUsage.UNIFORM|globalThis.GPUBufferUsage.COPY_DST}),this.uniformCapacity=e)}render(e){if(this.destroyed||!this.device||!this.context||!this.pipeline||e.width===0||e.height===0||e.items.length===0)return;this.ensureDepth();let t=[];for(let c of e.items)c.transparency||t.push({item:c,opacity:1,pipeline:this.pipeline});for(let c of e.items){let u=c.transparency;if(u)if(u.mode==="two-sided"){let l=G(u);t.push({item:c,opacity:l.back,pipeline:this.transparentBackPipeline}),t.push({item:c,opacity:l.front,pipeline:this.transparentFrontPipeline})}else t.push({item:c,opacity:z(u.opacity,.35),pipeline:this.transparentFrontPipeline})}this.ensureUniformCapacity(t.length);let i=E(Vi,e.viewProjection),r=this.pipeline.getBindGroupLayout(0),o=this.device.createBindGroup({layout:r,entries:[{binding:0,resource:{buffer:this.uniformBuffer,offset:0,size:160}}]});t.forEach((c,u)=>{let l=new Float32Array(Be/4);l.set(i,0),l.set(c.item.model,16),l.set([e.light.toLight.x,e.light.toLight.y,e.light.toLight.z,0],32),l.set([e.light.intensity,e.light.ambient,c.opacity,0],36),this.device.queue.writeBuffer(this.uniformBuffer,u*Be,l)});let s=this.device.createCommandEncoder(),a=s.beginRenderPass({colorAttachments:[{view:this.context.getCurrentTexture().createView(),clearValue:this.clearValue,loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:this.depthTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});t.forEach((c,u)=>{let l=this.buffers(c.item.mesh);a.setPipeline(c.pipeline),a.setBindGroup(0,o,[u*Be]),a.setVertexBuffer(0,l.position),a.setVertexBuffer(1,l.normal),a.setVertexBuffer(2,l.color),a.draw(l.count)}),a.end(),this.device.queue.submit([s.finish()])}destroy(){this.destroyed=!0;for(let e of this.cache.values())e.position.destroy?.(),e.normal.destroy?.(),e.color.destroy?.();this.cache.clear(),this.uniformBuffer?.destroy?.(),this.depthTexture?.destroy?.(),this.device?.destroy?.(),this.device=void 0,this.context=void 0,this.pipeline=void 0,this.transparentBackPipeline=void 0,this.transparentFrontPipeline=void 0,this.uniformBuffer=void 0,this.depthTexture=void 0,this.canvas=void 0}}});var fn={};ae(fn,{Canvas2DRenderer:()=>Oe});var Oe,ft=D(()=>{"use strict";De();j();K();Oe=class{constructor(e={}){this.options=e;this.dpr=1}init(e){this.ctx=e.getContext("2d")??void 0}resize(e,t,i){this.dpr=i,this.ctx?.setTransform(i,0,0,i,0,0)}render(e){let t=this.ctx;if(!t)return;this.options.background?(t.fillStyle=this.options.background,t.fillRect(0,0,e.width,e.height)):t.clearRect(0,0,e.width,e.height);let i=[];for(let r of e.items){let o=r.mesh.vertices.map(a=>de(r.model,a)),s=r.transparency?.mode==="two-sided"?G(r.transparency):void 0;for(let a of r.mesh.faces){let c=o[a.indices[0]],u=o[a.indices[1]],l=o[a.indices[2]],p=M(A(T(u,c),T(l,c))),d=q(p,T(e.eye,c))>0,h=r.transparency;if(!d&&h?.mode!=="two-sided")continue;let f=1;h?.mode==="one-sided"?f=z(h.opacity,.35):s&&(f=d?s.front:s.back);let b=a.indices.map(y=>{let x=ke(e.viewProjection,o[y]);return{x:(x.x*.5+.5)*e.width,y:(1-(x.y*.5+.5))*e.height}}),m=0;for(let y of a.indices){let x=T(o[y],e.eye);m+=q(x,x)}m/=a.indices.length,i.push({points:b,color:ht(p,a.color,e.light),depth:m,opacity:f})}}i.sort((r,o)=>o.depth-r.depth);for(let r of i)if(!(r.points.length<3)){t.beginPath(),t.moveTo(r.points[0].x,r.points[0].y);for(let o=1;o<r.points.length;o++)t.lineTo(r.points[o].x,r.points[o].y);t.closePath(),t.fillStyle=r.color,t.strokeStyle=r.color,t.lineWidth=1,t.globalAlpha=r.opacity,t.fill(),t.stroke()}t.globalAlpha=1}destroy(){this.ctx=void 0}}});function z(n,e){return Math.max(0,Math.min(1,n??e))}function G(n){let e=z(n.frontOpacity??n.opacity,.56),t=n.opacity===void 0?.84:e*(2/3);return{front:e,back:z(n.backOpacity,t)}}function Ue(n,e){let t=[],i=[];for(let r of n)(r.transparency?i:t).push(r);return i.sort((r,o)=>{let s=r.model[12]-e.x,a=r.model[13]-e.y,c=r.model[14]-e.z,u=o.model[12]-e.x,l=o.model[13]-e.y,p=o.model[14]-e.z;return u*u+l*l+p*p-(s*s+a*a+c*c)}),t.concat(i)}async function bn(n,e={}){if(typeof n=="function")return n(e);switch(n){case"webgl":return new(await Promise.resolve().then(()=>(dt(),dn))).WebGLRenderer(e);case"webgpu":return new(await Promise.resolve().then(()=>(mt(),mn))).WebGPURenderer(e);default:return new(await Promise.resolve().then(()=>(ft(),fn))).Canvas2DRenderer(e)}}var K=D(()=>{"use strict"});function Ze(n){let e=1/0,t=1/0,i=-1/0,r=-1/0;for(let l of n.vertices)e=Math.min(e,l.x),t=Math.min(t,l.y),i=Math.max(i,l.x),r=Math.max(r,l.y);let o=i-e||1,s=r-t||1,a=0;for(let l of n.faces)a+=Math.max(0,l.indices.length-2);let c=new Float32Array(a*6),u=0;for(let l of n.faces)for(let p=1;p<l.indices.length-1;p++)for(let d of[l.indices[0],l.indices[p],l.indices[p+1]]){let h=n.vertices[d];c[u]=(h.x-e)/o,c[u+1]=1-(h.y-t)/s,u+=2}return c}var Yt=D(()=>{"use strict"});var qt={};ae(qt,{WebGPUTexturedRenderer:()=>Je});function Sr(n){return n?n.mode==="two-sided"?G(n).front:z(n.opacity,.35):1}var Or,Tr,$e,Je,et=D(()=>{"use strict";Q();j();K();Yt();mt();Or=`
|
|
58
|
+
struct Uniforms {
|
|
59
|
+
viewProj: mat4x4<f32>,
|
|
60
|
+
model: mat4x4<f32>,
|
|
61
|
+
params: vec4<f32>,
|
|
62
|
+
};
|
|
63
|
+
@group(0) @binding(0) var<uniform> u: Uniforms;
|
|
64
|
+
@group(0) @binding(1) var tex: texture_2d<f32>;
|
|
65
|
+
@group(0) @binding(2) var samp: sampler;
|
|
66
|
+
|
|
67
|
+
struct VSOut {
|
|
68
|
+
@builtin(position) position: vec4<f32>,
|
|
69
|
+
@location(0) uv: vec2<f32>,
|
|
70
|
+
@location(1) color: vec3<f32>,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
@vertex
|
|
74
|
+
fn vs(@location(0) pos: vec3<f32>, @location(1) uv: vec2<f32>, @location(2) color: vec3<f32>) -> VSOut {
|
|
75
|
+
var out: VSOut;
|
|
76
|
+
out.uv = uv;
|
|
77
|
+
out.color = color;
|
|
78
|
+
out.position = u.viewProj * u.model * vec4<f32>(pos, 1.0);
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@fragment
|
|
83
|
+
fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
84
|
+
let t = textureSample(tex, samp, in.uv);
|
|
85
|
+
return vec4<f32>(t.rgb * in.color, t.a * u.params.x);
|
|
86
|
+
}
|
|
87
|
+
`,Tr=[1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1],$e=256;Je=class extends Ae{constructor(){super(...arguments);this.texturedCapacity=0;this.sources=new Map;this.textures=new Map;this.retired=[];this.texturedBuffers=new Map;this.bindGroups=new Map}setTexture(t,i){this.sources.set(t,i)}async init(t){await super.init(t);let i=this.device;if(!i)return;let r=navigator.gpu.getPreferredCanvasFormat(),o=i.createShaderModule({code:Or}),s=globalThis.GPUShaderStage,a=i.createBindGroupLayout({entries:[{binding:0,visibility:s.VERTEX|s.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0,minBindingSize:144}},{binding:1,visibility:s.FRAGMENT,texture:{}},{binding:2,visibility:s.FRAGMENT,sampler:{}}]}),c=(u,l)=>({arrayStride:l*4,attributes:[{shaderLocation:u,offset:0,format:`float32x${l}`}]});this.texturedPipeline=i.createRenderPipeline({layout:i.createPipelineLayout({bindGroupLayouts:[a]}),vertex:{module:o,entryPoint:"vs",buffers:[c(0,3),c(1,2),c(2,3)]},fragment:{module:o,entryPoint:"fs",targets:[{format:r,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list",cullMode:"back",frontFace:"ccw"},depthStencil:{format:"depth24plus",depthWriteEnabled:!1,depthCompare:"less"}}),this.sampler=i.createSampler({magFilter:"linear",minFilter:"linear"})}textureFor(t){let i=this.textures.get(t);if(i)return i;let r=this.device,o=globalThis.GPUTextureUsage,s=r.createTexture({size:{width:1,height:1},format:"rgba8unorm",usage:o.TEXTURE_BINDING|o.COPY_DST});r.queue.writeTexture({texture:s},new Uint8Array([255,255,255,255]),{},{width:1,height:1}),this.textures.set(t,s);let a=async u=>{let l=u instanceof HTMLImageElement?await createImageBitmap(u):u;if(this.destroyed||!this.device||this.textures.get(t)!==s)return;let p=l.width||1,d=l.height||1,h=this.device.createTexture({size:{width:p,height:d},format:"rgba8unorm",usage:o.TEXTURE_BINDING|o.COPY_DST|o.RENDER_ATTACHMENT});this.device.queue.copyExternalImageToTexture({source:l},{texture:h},{width:p,height:d}),this.retired.push(s),this.textures.set(t,h),this.bindGroups.delete(t)},c=this.sources.get(t);if(typeof c=="string"){let u=new Image;u.onload=()=>{a(u)},u.src=c}else a(c);return this.textures.get(t)}buffersFor(t){let i=this.texturedBuffers.get(t);if(i)return i;let r=N(t),o=globalThis.GPUBufferUsage.VERTEX|globalThis.GPUBufferUsage.COPY_DST,s=c=>{let u=this.device.createBuffer({size:c.byteLength,usage:o});return this.device.queue.writeBuffer(u,0,c),u},a={position:s(r.positions),uv:s(Ze(t)),color:s(r.colors),count:r.count};return this.texturedBuffers.set(t,a),a}bindGroupFor(t){let i=this.textureFor(t),r=this.bindGroups.get(t);if(r&&r.buffer===this.texturedUniforms&&r.texture===i)return r.group;let o=this.device.createBindGroup({layout:this.texturedPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.texturedUniforms,offset:0,size:144}},{binding:1,resource:i.createView()},{binding:2,resource:this.sampler}]});return this.bindGroups.set(t,{group:o,buffer:this.texturedUniforms,texture:i}),o}render(t){let i=[],r=[];for(let u of t.items)(this.sources.has(u.mesh)?r:i).push(u);if(super.render(r.length?{...t,items:i}:t),!r.length||this.destroyed||!this.device||!this.context||!this.texturedPipeline||t.width===0||t.height===0)return;this.ensureDepth(),(r.length>this.texturedCapacity||!this.texturedUniforms)&&(this.texturedUniforms?.destroy?.(),this.texturedUniforms=this.device.createBuffer({size:r.length*$e,usage:globalThis.GPUBufferUsage.UNIFORM|globalThis.GPUBufferUsage.COPY_DST}),this.texturedCapacity=r.length);let o=E(Tr,t.viewProjection);r.forEach((u,l)=>{let p=new Float32Array($e/4);p.set(o,0),p.set(u.model,16),p.set([Sr(u.transparency),0,0,0],32),this.device.queue.writeBuffer(this.texturedUniforms,l*$e,p)});let s=i.length>0,a=this.device.createCommandEncoder(),c=a.beginRenderPass({colorAttachments:[{view:this.context.getCurrentTexture().createView(),clearValue:this.clearValue,loadOp:s?"load":"clear",storeOp:"store"}],depthStencilAttachment:{view:this.depthTexture.createView(),depthClearValue:1,depthLoadOp:s?"load":"clear",depthStoreOp:"store"}});c.setPipeline(this.texturedPipeline),r.forEach((u,l)=>{let p=this.buffersFor(u.mesh);c.setBindGroup(0,this.bindGroupFor(u.mesh),[l*$e]),c.setVertexBuffer(0,p.position),c.setVertexBuffer(1,p.uv),c.setVertexBuffer(2,p.color),c.draw(p.count)}),c.end(),this.device.queue.submit([a.finish()])}destroy(){for(let t of this.textures.values())t.destroy?.();for(let t of this.retired.splice(0))t.destroy?.();for(let t of this.texturedBuffers.values())t.position.destroy?.(),t.uv.destroy?.(),t.color.destroy?.();this.textures.clear(),this.texturedBuffers.clear(),this.bindGroups.clear(),this.sources.clear(),this.texturedUniforms?.destroy?.(),this.texturedUniforms=void 0,this.texturedPipeline=void 0,this.sampler=void 0,super.destroy()}}});var Qt={};ae(Qt,{WebGLTexturedRenderer:()=>tt});function zn(n,e,t){let i=n.createShader(e);if(n.shaderSource(i,t),n.compileShader(i),!n.getShaderParameter(i,n.COMPILE_STATUS))throw new Error(`3d-spinner: shader compile failed: ${n.getShaderInfoLog(i)}`);return i}function Lr(n){let e=n.createProgram();if(n.attachShader(e,zn(n,n.VERTEX_SHADER,Pr)),n.attachShader(e,zn(n,n.FRAGMENT_SHADER,Er)),n.linkProgram(e),!n.getProgramParameter(e,n.LINK_STATUS))throw new Error(`3d-spinner: program link failed: ${n.getProgramInfoLog(e)}`);return e}function Ir(n){return n?n.mode==="two-sided"?G(n).front:z(n.opacity,.35):1}var Pr,Er,tt,nt=D(()=>{"use strict";Q();K();Yt();dt();Pr=`#version 300 es
|
|
88
|
+
in vec3 aPos;
|
|
89
|
+
in vec2 aUV;
|
|
90
|
+
in vec3 aColor;
|
|
91
|
+
uniform mat4 uViewProj;
|
|
92
|
+
uniform mat4 uModel;
|
|
93
|
+
out vec2 vUV;
|
|
94
|
+
out vec3 vColor;
|
|
95
|
+
void main() {
|
|
96
|
+
vUV = aUV;
|
|
97
|
+
vColor = aColor;
|
|
98
|
+
gl_Position = uViewProj * uModel * vec4(aPos, 1.0);
|
|
99
|
+
}`,Er=`#version 300 es
|
|
100
|
+
precision mediump float;
|
|
101
|
+
in vec2 vUV;
|
|
102
|
+
in vec3 vColor;
|
|
103
|
+
uniform sampler2D uTexture;
|
|
104
|
+
uniform float uOpacity;
|
|
105
|
+
out vec4 fragColor;
|
|
106
|
+
void main() {
|
|
107
|
+
vec4 t = texture(uTexture, vUV);
|
|
108
|
+
fragColor = vec4(t.rgb * vColor, t.a * uOpacity);
|
|
109
|
+
}`;tt=class{constructor(e={}){this.sources=new Map;this.textures=new Map;this.buffers=new Map;this.inner=new ve(e)}setTexture(e,t){this.sources.set(e,t)}init(e){this.inner.init(e);let t=e.getContext("webgl2");this.gl=t,this.program=Lr(t),this.locations={aPos:t.getAttribLocation(this.program,"aPos"),aUV:t.getAttribLocation(this.program,"aUV"),aColor:t.getAttribLocation(this.program,"aColor"),uViewProj:t.getUniformLocation(this.program,"uViewProj"),uModel:t.getUniformLocation(this.program,"uModel"),uTexture:t.getUniformLocation(this.program,"uTexture"),uOpacity:t.getUniformLocation(this.program,"uOpacity")}}resize(){this.inner.resize()}textureFor(e){let t=this.textures.get(e);if(t)return t;let i=this.gl,r=i.createTexture();i.bindTexture(i.TEXTURE_2D,r),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,1,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array([255,255,255,255])),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),this.textures.set(e,r);let o=a=>{!this.gl||this.textures.get(e)!==r||(this.gl.bindTexture(this.gl.TEXTURE_2D,r),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,a))},s=this.sources.get(e);if(typeof s=="string"){let a=new Image;a.onload=()=>o(a),a.src=s}else o(s);return r}buffersFor(e){let t=this.buffers.get(e);if(t)return t;let i=this.gl,r=this.locations,o=N(e),s=i.createVertexArray();i.bindVertexArray(s);let a=(u,l,p)=>{if(u<0)return;let d=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,d),i.bufferData(i.ARRAY_BUFFER,l,i.STATIC_DRAW),i.enableVertexAttribArray(u),i.vertexAttribPointer(u,p,i.FLOAT,!1,0,0)};a(r.aPos,o.positions,3),a(r.aColor,o.colors,3),a(r.aUV,Ze(e),2),i.bindVertexArray(null);let c={vao:s,count:o.count};return this.buffers.set(e,c),c}render(e){let t=[],i=[];for(let s of e.items)(this.sources.has(s.mesh)?i:t).push(s);if(this.inner.render(i.length?{...e,items:t}:e),!i.length)return;let r=this.gl,o=this.locations;if(!(!r||!this.program||!o)){r.useProgram(this.program),r.uniformMatrix4fv(o.uViewProj,!1,new Float32Array(e.viewProjection)),r.uniform1i(o.uTexture,0),r.activeTexture(r.TEXTURE0),r.enable(r.BLEND),r.blendFunc(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA),r.depthMask(!1);for(let s of i){let a=this.buffersFor(s.mesh);r.bindTexture(r.TEXTURE_2D,this.textureFor(s.mesh)),r.uniformMatrix4fv(o.uModel,!1,new Float32Array(s.model)),r.uniform1f(o.uOpacity,Ir(s.transparency)),r.bindVertexArray(a.vao),r.drawArrays(r.TRIANGLES,0,a.count)}r.depthMask(!0),r.disable(r.BLEND),r.bindVertexArray(null)}}destroy(){let e=this.gl;if(e){for(let t of this.textures.values())e.deleteTexture(t);for(let t of this.buffers.values())e.deleteVertexArray(t.vao);this.program&&e.deleteProgram(this.program)}this.textures.clear(),this.buffers.clear(),this.sources.clear(),this.gl=void 0,this.program=void 0,this.locations=void 0,this.inner.destroy()}}});var Zt={};ae(Zt,{Canvas2DTexturedRenderer:()=>Kt});function Rn(n){if(n instanceof HTMLImageElement)return n.complete&&n.naturalWidth>0?{width:n.naturalWidth,height:n.naturalHeight}:void 0;if(n instanceof HTMLVideoElement)return n.readyState>=2?{width:n.videoWidth,height:n.videoHeight}:void 0;if(n instanceof SVGImageElement){let t=n.width.baseVal.value,i=n.height.baseVal.value;return t>0&&i>0?{width:t,height:i}:void 0}if(typeof VideoFrame<"u"&&n instanceof VideoFrame)return{width:n.displayWidth,height:n.displayHeight};let e=n;return e.width>0&&e.height>0?{width:e.width,height:e.height}:void 0}function wn(n,e,t,i){let[r,o,s]=t,[a,c,u]=i,l=r.x*(o.y-s.y)+o.x*(s.y-r.y)+s.x*(r.y-o.y);if(Math.abs(l)<1e-8)return;let p=(a.x*(o.y-s.y)+c.x*(s.y-r.y)+u.x*(r.y-o.y))/l,d=(a.x*(s.x-o.x)+c.x*(r.x-s.x)+u.x*(o.x-r.x))/l,h=(a.x*(o.x*s.y-s.x*o.y)+c.x*(s.x*r.y-r.x*s.y)+u.x*(r.x*o.y-o.x*r.y))/l,f=(a.y*(o.y-s.y)+c.y*(s.y-r.y)+u.y*(r.y-o.y))/l,b=(a.y*(s.x-o.x)+c.y*(r.x-s.x)+u.y*(o.x-r.x))/l,m=(a.y*(o.x*s.y-s.x*o.y)+c.y*(s.x*r.y-r.x*s.y)+u.y*(r.x*o.y-o.x*r.y))/l;n.save(),n.beginPath(),n.moveTo(a.x,a.y),n.lineTo(c.x,c.y),n.lineTo(u.x,u.y),n.closePath(),n.clip(),n.transform(p,f,d,b,h,m),n.drawImage(e,0,0),n.restore()}var Kt,$t=D(()=>{"use strict";j();K();ft();Kt=class{constructor(e={}){this.sources=new Map;this.loaded=new Map;this.dpr=1;this.inner=new Oe(e)}setTexture(e,t){if(this.sources.set(e,t),typeof t=="string"&&!this.loaded.has(t)){let i=new Image;i.src=t,this.loaded.set(t,i)}}init(e){this.inner.init(e),this.ctx=e.getContext("2d")??void 0}resize(e,t,i){this.dpr=i,this.inner.resize(e,t,i)}drawable(e){let t=this.sources.get(e);return typeof t=="string"?this.loaded.get(t):t}render(e){let t=e.items.filter(o=>{if(!this.sources.has(o.mesh))return!0;let s=this.drawable(o.mesh);return!s||!Rn(s)});this.inner.render({...e,items:t});let i=this.ctx;if(!i)return;i.setTransform(this.dpr,0,0,this.dpr,0,0);let r=new Map;for(let o of e.items){let s=this.drawable(o.mesh);if(!s)continue;let a=Rn(s);if(!a)continue;let c=r.get(o.mesh);if(!c){c=document.createElement("canvas"),c.width=a.width,c.height=a.height;let m=c.getContext("2d");if(!m)continue;m.drawImage(s,0,0,a.width,a.height),m.globalCompositeOperation="source-in",m.fillStyle=o.mesh.faces[0]?.color??"#ffffff",m.fillRect(0,0,a.width,a.height),r.set(o.mesh,c)}let l=o.mesh.vertices.map(m=>de(o.model,m)).map(m=>{let y=ke(e.viewProjection,m);return{x:(y.x*.5+.5)*e.width,y:(1-(y.y*.5+.5))*e.height}}),p=o.mesh.faces[0];if(!p||p.indices.length!==4)continue;let[d,h,f,b]=p.indices.map(m=>l[m]);i.globalAlpha=o.transparency?.mode==="one-sided"?z(o.transparency.opacity,.35):1,wn(i,c,[{x:0,y:a.height},{x:a.width,y:a.height},{x:a.width,y:0}],[d,h,f]),wn(i,c,[{x:0,y:a.height},{x:a.width,y:0},{x:0,y:0}],[d,f,b])}i.globalAlpha=1}destroy(){this.inner.destroy(),this.ctx=void 0,this.sources.clear(),this.loaded.clear()}}});var Go={};ae(Go,{Camera:()=>me,ChargedOrbAnimation:()=>Pe,CompositeAnimation:()=>U,GridAssemblyAnimation:()=>Ie,Light:()=>fe,Little3dEngine:()=>S,LittleTweenEngine:()=>an,ObjectMotionAnimation:()=>he,ParticlesAnimation:()=>P,SpinAnimation:()=>Gt,WebGLTexturedRenderer:()=>tt,WebGPUTexturedRenderer:()=>Je,centerAndScaleMesh:()=>Cn,chargedOrb:()=>$n,circleMotion:()=>Ai,createSpinner:()=>Ii,cross:()=>A,crystalComet:()=>Jn,cube:()=>J,cubeSphere:()=>Mn,cubic:()=>xt,dot:()=>q,ease:()=>qe,easeInBack:()=>Ft,easeInBounce:()=>jt,easeInCirc:()=>zt,easeInCubic:()=>re,easeInElastic:()=>kt,easeInExpo:()=>It,easeInOutBack:()=>_t,easeInOutBounce:()=>Bt,easeInOutCirc:()=>wt,easeInOutCubic:()=>pe,easeInOutElastic:()=>Dt,easeInOutExpo:()=>Ct,easeInOutQuad:()=>Tt,easeInOutQuart:()=>Pt,easeInOutQuint:()=>Lt,easeInOutSine:()=>Ot,easeInQuad:()=>ie,easeInQuart:()=>Xe,easeInQuint:()=>Ye,easeInSine:()=>vt,easeOutBack:()=>H,easeOutBounce:()=>be,easeOutCirc:()=>Rt,easeOutCubic:()=>Z,easeOutElastic:()=>Vt,easeOutExpo:()=>Se,easeOutQuad:()=>ue,easeOutQuart:()=>St,easeOutQuint:()=>Et,easeOutSine:()=>At,easeTypes:()=>Ut,enterFromObjectDirection:()=>Ht,expandToTriangles:()=>N,figureEightMotion:()=>xe,ghostTrain:()=>oi,gridAssembly:()=>si,grow:()=>ar,icosphere:()=>Te,leaveInObjectDirection:()=>Wt,linear:()=>bt,monochromeStreak:()=>ai,normalize:()=>M,octaSphere:()=>gn,octahedron:()=>yn,orderRenderItems:()=>Ue,parseObj:()=>No,particleField:()=>Vn,planeMesh:()=>He,planeStarTrail:()=>ci,pulsingStarfield:()=>li,pyramid:()=>Ge,quad:()=>le,quadratic:()=>yt,quartic:()=>gt,quintic:()=>Mt,rocketLaunch:()=>Mi,scale:()=>R,shineTexture:()=>ne,shrink:()=>cr,squareMotion:()=>st,starSwarm:()=>vi,starTexture:()=>te,streakTexture:()=>We,subtract:()=>T,tetrahedron:()=>Ne,transform:()=>je,uvSphere:()=>xn,vec3:()=>ln,wanderMotion:()=>lt});function cn(n){return Number.isNaN(n)?0:Math.min(1,Math.max(0,n))}function Li(n,e,t){return n+(e-n)*t}function Ii(n,e){if(!(n instanceof HTMLElement))throw new Error("3d-spinner: createSpinner requires a target HTMLElement.");let{animation:t}=e,i=e.type==="indeterminate";if(i&&e.periodMs!==void 0&&(!Number.isFinite(e.periodMs)||e.periodMs<=0))throw new RangeError("3d-spinner: periodMs must be a finite number greater than zero.");t.mount(n);let r=performance.now(),o=0,s=!1,a=!1,c=!1,u=!1,l=0,p=0,d=1/0;if(!i){let g=e;typeof g.progress=="number"&&(l=cn(g.progress),p=l),typeof g.timeout=="number"&&(d=Math.min(d,r+g.timeout)),g.until instanceof Date&&(d=Math.min(d,g.until.getTime()))}function h(g){if(!i)return g>=d&&(p=1),l=Li(l,p,.12),Math.abs(p-l)<5e-4&&(l=p),l;let O=e,k=O.periodMs??2e3,V=(g-r)/k;if((O.loop??"bounce")==="restart")return V-Math.floor(V);let $=V-2*Math.floor(V/2);return $<=1?$:2-$}function f(g){if(s)return;let O=h(g);!c&&(i||O>0)&&(t.enter(g),c=!0),!u&&c&&!i&&O>=1&&p>=1&&(t.exit(g),u=!0);let k=i?O:p;if(t.render(g,{progress:O,targetProgress:k,indeterminate:i}),u&&t.isFinished()){b();return}o=requestAnimationFrame(f)}function b(){s||(s=!0,o&&cancelAnimationFrame(o),o=0)}function m(g){i||(p=cn(g))}function y(){if(!(s||u)){if(!c){b();return}t.exit(performance.now()),u=!0}}function x(){a||(a=!0,b(),t.destroy())}return o=requestAnimationFrame(f),{setProgress:m,stop:y,destroy:x}}j();var Ci={position:{x:0,y:0,z:4},fov:55*Math.PI/180,near:.1,far:100},me=class{constructor(e){this.options={...Ci,...e}}toView(e){let{position:t}=this.options;return de(Me(-t.x,-t.y,-t.z),e)}viewProjection(e){let{position:t,fov:i,near:r,far:o}=this.options,s=Me(-t.x,-t.y,-t.z),a=pn(i,e,r,o);return E(a,s)}toScreen(e,t,i){return{x:(e.x*.5+.5)*t,y:(1-(e.y*.5+.5))*i}}};De();j();function je(n){return{position:n?.position??{x:0,y:0,z:0},rotation:n?.rotation??{x:0,y:0,z:0},scale:n?.scale??1}}K();De();var Di=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function J(n=1,e=Di){let t=n/2,i=[{x:-t,y:-t,z:t},{x:t,y:-t,z:t},{x:t,y:t,z:t},{x:-t,y:t,z:t},{x:-t,y:-t,z:-t},{x:t,y:-t,z:-t},{x:t,y:t,z:-t},{x:-t,y:t,z:-t}],r=[{indices:[0,1,2,3],color:e[0%e.length]},{indices:[5,4,7,6],color:e[1%e.length]},{indices:[3,2,6,7],color:e[2%e.length]},{indices:[4,5,1,0],color:e[3%e.length]},{indices:[1,5,6,2],color:e[4%e.length]},{indices:[4,0,3,7],color:e[5%e.length]}];return{vertices:i,faces:r}}var ji=["#3b82f6"];function le(n=1,e=ji){let t=n/2;return{vertices:[{x:-t,y:-t,z:0},{x:t,y:-t,z:0},{x:t,y:t,z:0},{x:-t,y:t,z:0}],faces:[{indices:[0,1,2,3],color:e[0]}]}}var Bi=["#3b82f6","#8b5cf6","#ec4899","#f59e0b"];function Ne(n=1,e=Bi){let t=n/2,i=[{x:t,y:t,z:t},{x:t,y:-t,z:-t},{x:-t,y:t,z:-t},{x:-t,y:-t,z:t}],r=[{indices:[0,1,2],color:e[0%e.length]},{indices:[0,3,1],color:e[1%e.length]},{indices:[0,2,3],color:e[2%e.length]},{indices:[1,3,2],color:e[3%e.length]}];return{vertices:i,faces:r}}var Ui=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444","#06b6d4","#eab308"];function yn(n=1,e=Ui){let t=n/2,i=[{x:t,y:0,z:0},{x:-t,y:0,z:0},{x:0,y:t,z:0},{x:0,y:-t,z:0},{x:0,y:0,z:t},{x:0,y:0,z:-t}],r=[{indices:[4,0,2],color:e[0%e.length]},{indices:[4,2,1],color:e[1%e.length]},{indices:[4,1,3],color:e[2%e.length]},{indices:[4,3,0],color:e[3%e.length]},{indices:[5,2,0],color:e[4%e.length]},{indices:[5,1,2],color:e[5%e.length]},{indices:[5,3,1],color:e[6%e.length]},{indices:[5,0,3],color:e[7%e.length]}];return{vertices:i,faces:r}}var Ni=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981"];function Ge(n=1,e=Ni){let t=n/2,i=[{x:-t,y:-t,z:t},{x:t,y:-t,z:t},{x:t,y:-t,z:-t},{x:-t,y:-t,z:-t},{x:0,y:t,z:0}],r=[{indices:[0,3,2,1],color:e[0%e.length]},{indices:[4,0,1],color:e[1%e.length]},{indices:[4,1,2],color:e[2%e.length]},{indices:[4,2,3],color:e[3%e.length]},{indices:[4,3,0],color:e[4%e.length]}];return{vertices:i,faces:r}}var Gi=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function xn(n=1,e=1,t=Gi){let i=n/2,r=Math.max(1,Math.floor(e)),o=Math.max(4,r*4),s=Math.max(2,r*2),a=[{x:0,y:i,z:0}],c=(h,f)=>1+(h-1)*o+f;for(let h=1;h<s;h++){let f=Math.PI*h/s,b=i*Math.cos(f),m=i*Math.sin(f);for(let y=0;y<o;y++){let x=2*Math.PI*y/o;a.push({x:m*Math.cos(x),y:b,z:m*Math.sin(x)})}}let u=a.length;a.push({x:0,y:-i,z:0});let l=[],p=0,d=()=>t[p++%t.length];for(let h=0;h<o;h++)l.push({indices:[0,c(1,(h+1)%o),c(1,h)],color:d()});for(let h=1;h<s-1;h++)for(let f=0;f<o;f++){let b=(f+1)%o;l.push({indices:[c(h,f),c(h,b),c(h+1,b),c(h+1,f)],color:d()})}for(let h=0;h<o;h++)l.push({indices:[u,c(s-1,h),c(s-1,(h+1)%o)],color:d()});return{vertices:a,faces:l}}Q();var Hi=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],w=(1+Math.sqrt(5))/2,Wi=[{x:-1,y:w,z:0},{x:1,y:w,z:0},{x:-1,y:-w,z:0},{x:1,y:-w,z:0},{x:0,y:-1,z:w},{x:0,y:1,z:w},{x:0,y:-1,z:-w},{x:0,y:1,z:-w},{x:w,y:0,z:-1},{x:w,y:0,z:1},{x:-w,y:0,z:-1},{x:-w,y:0,z:1}],Xi=[[0,11,5],[0,5,1],[0,1,7],[0,7,10],[0,10,11],[1,5,9],[5,11,4],[11,10,2],[10,7,6],[7,1,8],[3,9,4],[3,4,2],[3,2,6],[3,6,8],[3,8,9],[4,9,5],[2,4,11],[6,2,10],[8,6,7],[9,8,1]];function Te(n=1,e=1,t=Hi){return Ve(Wi,Xi,n,e,t)}Q();var Yi=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],qi=[{x:1,y:0,z:0},{x:-1,y:0,z:0},{x:0,y:1,z:0},{x:0,y:-1,z:0},{x:0,y:0,z:1},{x:0,y:0,z:-1}],Qi=[[4,0,2],[4,2,1],[4,1,3],[4,3,0],[5,2,0],[5,1,2],[5,3,1],[5,0,3]];function gn(n=1,e=1,t=Yi){return Ve(qi,Qi,n,e,t)}var Ki=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"],Zi=[{normal:[0,0,1],right:[1,0,0],up:[0,1,0]},{normal:[0,0,-1],right:[-1,0,0],up:[0,1,0]},{normal:[1,0,0],right:[0,0,-1],up:[0,1,0]},{normal:[-1,0,0],right:[0,0,1],up:[0,1,0]},{normal:[0,1,0],right:[1,0,0],up:[0,0,-1]},{normal:[0,-1,0],right:[1,0,0],up:[0,0,1]}];function Mn(n=1,e=1,t=Ki){let i=n/2,r=Math.max(1,Math.floor(e)),o=[],s=[],a=0;for(let c of Zi){let u=o.length;for(let p=0;p<=r;p++)for(let d=0;d<=r;d++){let h=-1+2*p/r,f=-1+2*d/r,b=c.normal[0]+h*c.right[0]+f*c.up[0],m=c.normal[1]+h*c.right[1]+f*c.up[1],y=c.normal[2]+h*c.right[2]+f*c.up[2],x=Math.hypot(b,m,y);o.push({x:b/x*i,y:m/x*i,z:y/x*i})}let l=(p,d)=>u+p*(r+1)+d;for(let p=0;p<r;p++)for(let d=0;d<r;d++)s.push({indices:[l(p,d),l(p+1,d),l(p+1,d+1),l(p,d+1)],color:t[a++%t.length]})}return{vertices:o,faces:s}}var L=["#e0f2fe","#7dd3fc","#38bdf8","#f8fafc"];function He(n=L){return{vertices:[{x:.9,y:0,z:0},{x:-.2,y:0,z:.82},{x:-.55,y:0,z:.16},{x:-.72,y:0,z:0},{x:-.55,y:0,z:-.16},{x:-.2,y:0,z:-.82},{x:-.08,y:.12,z:0},{x:-.08,y:-.1,z:0},{x:-.52,y:.38,z:0}],faces:[{indices:[6,1,0],color:n[0]??L[0]},{indices:[6,2,1],color:n[3]??L[3]},{indices:[6,3,2],color:n[1]??L[1]},{indices:[6,4,3],color:n[2]??L[2]},{indices:[6,5,4],color:n[3]??L[3]},{indices:[6,0,5],color:n[0]??L[0]},{indices:[7,0,1],color:n[1]??L[1]},{indices:[7,1,2],color:n[2]??L[2]},{indices:[7,2,3],color:n[1]??L[1]},{indices:[7,3,4],color:n[2]??L[2]},{indices:[7,4,5],color:n[1]??L[1]},{indices:[7,5,0],color:n[2]??L[2]},{indices:[3,6,8],color:n[0]??L[0]},{indices:[3,8,6],color:n[1]??L[1]}]}}function ee(n,e=96){let t=document.createElement("canvas");t.width=t.height=e;let i=t.getContext("2d");return i&&n(i),t}function vn(n){n.save(),n.translate(48,48),n.fillStyle="#fff",n.beginPath();for(let e=0;e<10;e++){let t=e%2===0?43:16,i=e*Math.PI/5-Math.PI/2;n.lineTo(t*Math.cos(i),t*Math.sin(i))}n.closePath(),n.fill(),n.restore()}function te(n={}){let e=Math.max(0,n.glow??0);return ee(t=>{e>0&&(t.save(),t.filter=`blur(${e}px)`,vn(t),t.restore()),vn(t)})}function ne(){return ee(n=>{let e=n.createRadialGradient(48,48,1,48,48,46);e.addColorStop(0,"rgba(255,255,255,1)"),e.addColorStop(.08,"rgba(255,255,255,1)"),e.addColorStop(.22,"rgba(210,240,255,0.7)"),e.addColorStop(.55,"rgba(120,200,255,0.22)"),e.addColorStop(1,"rgba(80,160,255,0)"),n.fillStyle=e,n.fillRect(0,0,96,96)})}function We(){return ee(n=>{let e=n.createLinearGradient(5,0,91,0);e.addColorStop(0,"rgba(255,255,255,0)"),e.addColorStop(.7,"rgba(255,255,255,0.4)"),e.addColorStop(1,"rgba(255,255,255,1)"),n.strokeStyle=e,n.lineWidth=3.5,n.lineCap="round",n.beginPath(),n.moveTo(5,48),n.lineTo(91,48),n.stroke()})}Q();K();j();function $i(n){let e=E(_e(n.rotation.z),E(Fe(n.rotation.y),we(n.rotation.x)));return E(Me(n.position.x,n.position.y,n.position.z),E(e,un(n.scale)))}var S=class{constructor(e={}){this.scene=[];this.cssWidth=0;this.cssHeight=0;this.ready=!1;this.generation=0;this.rafId=0;this.running=!1;this.camera=new me(e.camera),this.light=new fe(e.light),this.backend=e.backend??"canvas2d",this.background=e.background}async mount(e){let t=document.createElement("canvas");t.style.display="block",t.style.width="100%",t.style.height="100%",e.appendChild(t),this.canvas=t,this.observer=new ResizeObserver(()=>this.resize()),this.observer.observe(t),this.resize();let i=this.generation,r=()=>{this.canvas===t&&(this.observer?.disconnect(),this.observer=void 0,t.remove(),this.canvas=void 0)};try{let o=await bn(this.backend,{background:this.background});if(i!==this.generation){o.destroy(),r();return}if(await o.init(t),i!==this.generation){o.destroy(),r();return}this.renderer=o,this.resize(),this.ready=!0}catch(o){throw r(),o}}add(e,t){let i={mesh:e,transform:je(t),transparency:t?.transparency,remove:()=>{let r=this.scene.indexOf(i);r>=0&&this.scene.splice(r,1)}};return this.scene.push(i),i}resize(){let e=this.canvas;if(!e)return;let t=window.devicePixelRatio||1;this.cssWidth=e.clientWidth||e.parentElement?.clientWidth||0,this.cssHeight=e.clientHeight||e.parentElement?.clientHeight||0,e.width=Math.max(1,Math.round(this.cssWidth*t)),e.height=Math.max(1,Math.round(this.cssHeight*t)),this.renderer?.resize(this.cssWidth,this.cssHeight,t)}render(){if(!this.ready||!this.renderer)return;let e=this.cssWidth,t=this.cssHeight;if(e===0||t===0)return;let i=this.scene.map(o=>({mesh:o.mesh,model:$i(o.transform),transparency:o.transparency})),r=this.camera.options.position;this.renderer.render({items:Ue(i,r),viewProjection:this.camera.viewProjection(e/t),eye:r,light:this.light.params,width:e,height:t})}start(){if(this.running)return;this.running=!0;let e=()=>{this.running&&(this.render(),this.rafId=requestAnimationFrame(e))};this.rafId=requestAnimationFrame(e)}stop(){this.running=!1,this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0}destroy(){this.generation++,this.ready=!1,this.stop(),this.observer?.disconnect(),this.observer=void 0,this.renderer?.destroy(),this.renderer=void 0,this.canvas?.remove(),this.canvas=void 0}};function v(n,e){return Number.isNaN(n)?0:e?n:Math.min(1,Math.max(0,n))}function bt(n,e=!1){return v(n,e)}function yt(n,e=!1){return ie(n,e)}function xt(n,e=!1){return re(n,e)}function gt(n,e=!1){return Xe(n,e)}function Mt(n,e=!1){return Ye(n,e)}function vt(n,e=!1){let t=v(n,e);return 1-Math.cos(t*Math.PI/2)}function At(n,e=!1){let t=v(n,e);return Math.sin(t*Math.PI/2)}function Ot(n,e=!1){let t=v(n,e);return-(Math.cos(Math.PI*t)-1)/2}function ie(n,e=!1){let t=v(n,e);return t*t}function ue(n,e=!1){let t=v(n,e);return 1-(1-t)*(1-t)}function Tt(n,e=!1){let t=v(n,e);return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function re(n,e=!1){let t=v(n,e);return t*t*t}function Z(n,e=!1){let t=v(n,e);return 1-Math.pow(1-t,3)}function pe(n,e=!1){let t=v(n,e);return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2}function Xe(n,e=!1){let t=v(n,e);return t*t*t*t}function St(n,e=!1){let t=v(n,e);return 1-Math.pow(1-t,4)}function Pt(n,e=!1){let t=v(n,e);return t<.5?8*t*t*t*t:1-Math.pow(-2*t+2,4)/2}function Ye(n,e=!1){let t=v(n,e);return t*t*t*t*t}function Et(n,e=!1){let t=v(n,e);return 1-Math.pow(1-t,5)}function Lt(n,e=!1){let t=v(n,e);return t<.5?16*t*t*t*t*t:1-Math.pow(-2*t+2,5)/2}function It(n,e=!1){let t=v(n,e);return t===0?0:Math.pow(2,10*t-10)}function Se(n,e=!1){let t=v(n,e);return t===1?1:1-Math.pow(2,-10*t)}function Ct(n,e=!1){let t=v(n,e);return t===0?0:t===1?1:t<.5?Math.pow(2,20*t-10)/2:(2-Math.pow(2,-20*t+10))/2}function zt(n,e=!1){let t=v(n,e);return 1-Math.sqrt(1-Math.pow(t,2))}function Rt(n,e=!1){let t=v(n,e);return Math.sqrt(1-Math.pow(t-1,2))}function wt(n,e=!1){let t=v(n,e);return t<.5?(1-Math.sqrt(1-Math.pow(2*t,2)))/2:(Math.sqrt(1-Math.pow(-2*t+2,2))+1)/2}function Ft(n,e=!1){let t=v(n,e),i=1.70158;return(i+1)*t*t*t-i*t*t}function H(n,e=!1){let t=v(n,e),i=1.70158;return 1+(i+1)*Math.pow(t-1,3)+i*Math.pow(t-1,2)}function _t(n,e=!1){let t=v(n,e),r=1.70158*1.525;return t<.5?Math.pow(2*t,2)*((r+1)*2*t-r)/2:(Math.pow(2*t-2,2)*((r+1)*(t*2-2)+r)+2)/2}function kt(n,e=!1){let t=v(n,e),i=2*Math.PI/3;return t===0?0:t===1?1:-Math.pow(2,10*t-10)*Math.sin((t*10-10.75)*i)}function Vt(n,e=!1){let t=v(n,e),i=2*Math.PI/3;return t===0?0:t===1?1:Math.pow(2,-10*t)*Math.sin((t*10-.75)*i)+1}function Dt(n,e=!1){let t=v(n,e),i=2*Math.PI/4.5;return t===0?0:t===1?1:t<.5?-(Math.pow(2,20*t-10)*Math.sin((20*t-11.125)*i))/2:Math.pow(2,-20*t+10)*Math.sin((20*t-11.125)*i)/2+1}function jt(n,e=!1){let t=v(n,e);return 1-be(1-t,!0)}function be(n,e=!1){let t=v(n,e),i=7.5625,r=2.75;return t<1/r?i*t*t:t<2/r?(t-=1.5/r,i*t*t+.75):t<2.5/r?(t-=2.25/r,i*t*t+.9375):(t-=2.625/r,i*t*t+.984375)}function Bt(n,e=!1){let t=v(n,e);return t<.5?(1-be(1-2*t,!0))/2:(1+be(2*t-1,!0))/2}var Ut={linear:bt,quadratic:yt,cubic:xt,quartic:gt,quintic:Mt,easeInSine:vt,easeOutSine:At,easeInOutSine:Ot,easeInQuad:ie,easeOutQuad:ue,easeInOutQuad:Tt,easeInCubic:re,easeOutCubic:Z,easeInOutCubic:pe,easeInQuart:Xe,easeOutQuart:St,easeInOutQuart:Pt,easeInQuint:Ye,easeOutQuint:Et,easeInOutQuint:Lt,easeInExpo:It,easeOutExpo:Se,easeInOutExpo:Ct,easeInCirc:zt,easeOutCirc:Rt,easeInOutCirc:wt,easeInBack:Ft,easeOutBack:H,easeInOutBack:_t,easeInElastic:kt,easeOutElastic:Vt,easeInOutElastic:Dt,easeInBounce:jt,easeOutBounce:be,easeInOutBounce:Bt};function qe(n,e,t=!1){return Ut[n](e,t)}function Ji(n={}){return{popDurationMs:n.popDurationMs??500,overextend:n.overextend??.2,startSnapRatio:n.startSnapRatio??.2,loadingText:n.loadingText===void 0?"loading":n.loadingText,doneText:n.doneText??"done",doneFadeDurationMs:n.doneFadeDurationMs??2e3,removeOnComplete:n.removeOnComplete??!1}}function Nt(n,e,t){return t<=0?1:Math.min(1,Math.max(0,(n-e)/t))}var Qe=class{constructor(e={}){this.phase="idle";this.phaseStart=0;this.activeProgress=0;this.popTarget=0;this.doneFadeStart=0;this.options=Ji(e)}enter(e){this.phase==="idle"&&(this.phase="startPop",this.phaseStart=e,this.activeProgress=0,this.popTarget=0)}exit(e){this.phase!=="startPop"&&this.phase!=="active"||(this.phase="endPop",this.phaseStart=e)}isFinished(){return this.phase==="finished"}update(e,t,i){let{popDurationMs:r,overextend:o,startSnapRatio:s,loadingText:a,doneText:c,doneFadeDurationMs:u,removeOnComplete:l}=this.options,p=i??t;(this.phase==="startPop"||this.phase==="active")&&(this.activeProgress=t,this.phase==="startPop"&&(this.popTarget=Math.max(this.popTarget,p,t)));let d=0,h=null,f=0,b=!1;if(this.phase==="startPop"){let m=Nt(e,this.phaseStart,r),y=this.popTarget*(1+o);if(m<s){let x=s>0?m/s:1;d=y*Se(x)}else{let x=s<1?(m-s)/(1-s):1;d=y+(this.activeProgress-y)*Z(x)}m>=1&&(this.phase="active")}else if(this.phase==="active")d=this.activeProgress;else if(this.phase==="endPop"){let m=Nt(e,this.phaseStart,r),y=1+o;m<.5?d=1+(y-1)*ue(m*2):d=y*(1-ie((m-.5)*2)),m>=1&&(this.phase="done",this.doneFadeStart=e,d=0)}if(this.phase==="startPop"||this.phase==="active")a!==!1&&(h=a,f=.65);else if(this.phase==="endPop")h=c,f=.65;else if(this.phase==="done"){let m=Nt(e,this.doneFadeStart,u);m>=1?(l&&(b=!0),this.phase="finished"):(h=c,f=.65*(1-m))}return{scale:d,text:h,textOpacity:f,hidden:b}}};var er=["position:absolute","inset:0","display:flex","align-items:center","justify-content:center","pointer-events:none","font:600 1.1rem/1.2 system-ui,sans-serif","letter-spacing:0.06em","text-transform:lowercase","color:rgba(255,255,255,0.65)","z-index:1"].join(";");function tr(n){return n?typeof n=="function"?n():n:J()}function nr(n,e){if(e===void 0||Array.isArray(e)&&e.length===0)return n;let t=Array.isArray(e)?i=>e[i%e.length]:()=>e;return{vertices:n.vertices,faces:n.faces.map((i,r)=>({...i,color:t(r)}))}}var Gt=class{constructor(e={}){this.exited=!1;this.mesh=nr(tr(e.shape),e.color),this.spinX=e.spinX??7e-4,this.spinY=e.spinY??.0011,this.backend=e.backend,this.transparency=e.transparency,this.progress=e.progressAnimation?new Qe(e.progressAnimation):void 0}mount(e){e.style.position="relative";let t=new S({backend:this.backend,camera:{position:{x:0,y:0,z:2.8}}});if(this.handle=t.add(this.mesh,{transparency:this.transparency}),this.engine=t,t.mount(e).catch(i=>{e.textContent=i instanceof Error?i.message:String(i)}),this.progress){let i=document.createElement("div");i.style.cssText=er,i.setAttribute("aria-hidden","true"),i.hidden=!0,e.appendChild(i),this.label=i}}enter(e){this.progress?.enter(e)}exit(e){this.exited=!0,this.progress?.exit(e)}isFinished(){return this.progress?this.progress.isFinished():this.exited}render(e,t){if(!this.engine||!this.handle)return;let i=this.handle.transform.rotation;if(i.x=e*this.spinX,i.y=e*this.spinY,this.progress){let r=this.progress.update(e,t.progress,t.targetProgress);this.handle.transform.scale=r.hidden?0:r.scale,this.applyLabel(r)}else this.handle.transform.scale=1;this.engine.render()}destroy(){this.label?.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handle=void 0}applyLabel(e){if(this.label){if(e.hidden||e.text==null){this.label.hidden=!0,this.label.textContent="";return}this.label.hidden=!1,this.label.textContent=e.text,this.label.style.opacity=String(e.textOpacity)}}};var ir=["position:absolute","inset:0","display:flex","align-items:center","justify-content:center","pointer-events:none","font:700 1.6rem/1 system-ui,sans-serif","letter-spacing:0.02em","color:rgba(255,255,255,0.9)","text-shadow:0 1px 10px rgba(0,0,0,0.6)","z-index:1"].join(";");function W(n,e,t,i,r){if(e===1/0)return 0;let o=t<=0?1:Math.max(0,Math.min(1,(n-e)/t)),s=i===1/0?1:r<=0?0:Math.max(0,Math.min(1,1-(n-i)/r));return Math.min(o,s)}function X(n,e){var i;let t=document.createElement("div");return t.style.cssText=ir,t.setAttribute("role","status"),typeof e=="string"?t.textContent=e:e&&((i=e.style).pointerEvents||(i.pointerEvents="auto"),t.appendChild(e)),n.appendChild(t),{container:t,setText(r){typeof e!="object"&&(t.textContent=r)},setOpacity(r){t.style.opacity=String(r)}}}j();function An(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function Ke(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function On(n){return Math.hypot(n.x,n.y,n.z)}function rr(n){let e=On(n);return e<1e-6?{x:1,y:0,z:0}:Ke(n,1/e)}function or(n,e){return rr(e??n.direction??n.velocity??{x:1,y:0,z:0})}function sr(n){let t=n-1;return 1+(1.70158+1)*t*t*t+1.70158*t*t}function Tn(n,e,t){let i=n.velocity?On(n.velocity):0;if(n.velocity&&i>1e-6&&!e.direction)return n.velocity;let r=e.distance??3.5;return Ke(or(n,e.direction),r/t)}function Ht(n={}){return e=>{let t=Math.max(1,e.durationMs),i=Tn(e,n,t),r=t-e.elapsedMs;return{position:An(e.position,Ke(i,-r))}}}function Wt(n={}){return e=>{let t=Math.max(1,e.durationMs),i=Tn(e,n,t);return{position:An(e.position,Ke(i,e.elapsedMs))}}}function ar(){return n=>({size:(n.size??1)*sr(n.delta)})}function cr(){return n=>({size:(n.size??1)*(1-n.delta*n.delta)})}var lr={x:0,y:1,z:0},ur=2100,pr=2100,hr=26,Sn=.7,dr=.12,Xt=8,mr={"+x":n=>n,"-x":n=>({x:-n.x,y:n.y,z:-n.z}),"+z":n=>({x:n.z,y:n.y,z:-n.x}),"-z":n=>({x:-n.z,y:n.y,z:n.x}),"+y":n=>({x:n.y,y:-n.x,z:n.z}),"-y":n=>({x:-n.y,y:n.x,z:n.z})};function fr(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function br(n){return typeof n=="function"?n():n}function yr(n,e){return e===void 0?n:{vertices:n.vertices,faces:n.faces.map(t=>({...t,color:e}))}}function xr(n,e){if(e==="+x")return n;let t=mr[e];return{vertices:n.vertices.map(t),faces:n.faces}}function Cn(n,e){let t=1/0,i=1/0,r=1/0,o=-1/0,s=-1/0,a=-1/0;for(let h of n.vertices)t=Math.min(t,h.x),i=Math.min(i,h.y),r=Math.min(r,h.z),o=Math.max(o,h.x),s=Math.max(s,h.y),a=Math.max(a,h.z);let c=(t+o)/2,u=(i+s)/2,l=(r+a)/2,p=Math.max(o-t,s-i,a-r)||1,d=e/p;return{vertices:n.vertices.map(h=>({x:(h.x-c)*d,y:(h.y-u)*d,z:(h.z-l)*d})),faces:n.faces}}function gr(n,e){let t=M(n),i=A(t,lr);Math.hypot(i.x,i.y,i.z)<1e-4&&(i={x:0,y:0,z:1}),i=M(i);let r=A(i,t),o=fr(R(r,Math.cos(e)),R(i,Math.sin(e))),s=M(A(t,o));return{x:Math.atan2(A(s,t).z,s.z),y:Math.asin(Math.max(-1,Math.min(1,-t.z))),z:Math.atan2(t.y,t.x)}}function Pn(n,e,t){return E(_e(t),E(Fe(e),we(n)))}function Mr(n){return Math.hypot(n[0],n[1])>1e-6?{x:Math.atan2(n[9],n[10]),y:Math.asin(Math.max(-1,Math.min(1,-n[8]))),z:Math.atan2(n[4],n[0])}:{x:Math.atan2(-n[6],n[5]),y:Math.asin(Math.max(-1,Math.min(1,-n[8]))),z:0}}function vr(n,e){return Mr(E(Pn(n.x,n.y,n.z),Pn(e.x,e.y,e.z)))}function Ar(n){return Math.max(0,Math.min(1,n))}function En(n,e){return R(T(n.positionAt(e+1),n.positionAt(e-1)),.5)}function Ln(n,e){return Math.hypot(n.x,n.y,n.z)>1e-6?M(n):e}function In(n,e,t){return n?typeof n=="function"?{transition:n,durationMs:t}:{transition:n.transition,durationMs:Math.max(0,n.durationMs??t)}:{transition:e,durationMs:t}}var he=class{constructor(e){this.handles=[];this.banks=[];this.headings=[];this.started=!1;this.finished=!1;this.introStart=0;this.outroStart=1/0;this.outroPosition={x:0,y:0,z:0};this.outroVelocity={x:0,y:0,z:0};this.outroDirection={x:1,y:0,z:0};let t=Cn(br(e.mesh),e.size??1),i=xr(t,e.facing??"+x");this.mesh=yr(i,e.color),this.motion=e.motion,this.backend=e.backend,this.transparency=e.transparency,this.labelContent=e.label,this.fadeLabel=e.fadeLabel??!0,this.tailCount=Math.max(0,Math.floor(e.tail?.count??0)),this.tailGap=Math.max(0,e.tail?.gapMs??0),this.intro=In(e.intro,Ht(),ur),this.outro=In(e.outro,Wt(),pr);let r=e.rotation;this.rotationOffset={x:r?.x??0,y:r?.y??0,z:r?.z??0},this.rotationSpin={x:r?.spinX??0,y:r?.spinY??0,z:r?.spinZ??0},this.hasExtraRotation=this.rotationOffset.x!==0||this.rotationOffset.y!==0||this.rotationOffset.z!==0||this.rotationSpin.x!==0||this.rotationSpin.y!==0||this.rotationSpin.z!==0}mount(e){e.style.position||(e.style.position="relative");let t=new S({backend:this.backend,camera:{position:{x:0,y:0,z:3}}});for(let i=0;i<=this.tailCount;i++)this.handles.push(t.add(this.mesh,{transparency:this.transparency})),this.banks.push(0),this.headings.push({x:1,y:0,z:0});this.engine=t,t.mount(e).catch(i=>{e.textContent=i instanceof Error?i.message:String(i)}),this.label=X(e,this.labelContent),this.fadeLabel&&this.label.setOpacity(0)}enter(e){this.started||(this.started=!0,this.introStart=e)}exit(e){!this.started||this.outroStart!==1/0||(this.outroPosition=this.motion.positionAt(e),this.outroVelocity=En(this.motion,e),this.outroDirection=Ln(this.outroVelocity,this.headings[0]),this.outroStart=e)}isFinished(){return this.finished}get outroDurationMs(){return this.outro.durationMs}trailEmitter(){return{positionAt:e=>this.sampleAt(e)?.position??this.motion.positionAt(e)}}render(e,t){if(!(!this.engine||!this.label)){this.outroStart!==1/0&&e>=this.outroStart+this.outro.durationMs+this.tailCount*this.tailGap&&(this.finished=!0);for(let i=0;i<this.handles.length;i++){let r=this.handles[i].transform,o=e-i*this.tailGap,s=this.sampleAt(o);if(!s){r.scale=0;continue}r.scale=s.size;let a=s.orientation;if(!a){let c=T(this.positionAt(o+Xt)??s.position,s.position);Math.hypot(c.x,c.y,c.z)>1e-5&&(this.headings[i]=M(c));let u=this.aheadAt(o)??this.headings[i],l=Math.max(-Sn,Math.min(Sn,A(this.headings[i],u).y*hr));this.banks[i]+=(l-this.banks[i])*dr,a=gr(this.headings[i],this.banks[i])}this.hasExtraRotation&&(a=vr(a,{x:this.rotationOffset.x+this.rotationSpin.x*o,y:this.rotationOffset.y+this.rotationSpin.y*o,z:this.rotationOffset.z+this.rotationSpin.z*o})),r.position.x=s.position.x,r.position.y=s.position.y,r.position.z=s.position.z,r.rotation.x=a.x,r.rotation.y=a.y,r.rotation.z=a.z}this.label.setText(t.indeterminate?typeof this.labelContent=="string"?this.labelContent:"":`${Math.round(t.progress*100)}%`),this.fadeLabel&&this.label.setOpacity(W(e,this.started?this.introStart:1/0,this.intro.durationMs,this.outroStart,this.outro.durationMs)),this.engine.render()}}destroy(){this.label?.container.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handles.length=0}aheadAt(e){let t=this.positionAt(e+Xt),i=this.positionAt(e+2*Xt);if(!t||!i)return;let r=T(i,t);if(!(Math.hypot(r.x,r.y,r.z)<=1e-5))return M(r)}positionAt(e){return this.sampleAt(e)?.position}sampleAt(e){if(!(!this.started||e<this.introStart)){if(e<this.introStart+this.intro.durationMs)return this.transitionSample("intro",e,this.intro,this.introStart);if(this.outroStart!==1/0){if(e>this.outroStart+this.outro.durationMs)return;if(e>=this.outroStart)return this.transitionSample("outro",e,this.outro,this.outroStart)}return{position:this.motion.positionAt(e),size:1}}}transitionSample(e,t,i,r){let o=Math.max(0,t-r),s=i.durationMs===0?1:Ar(o/i.durationMs),a=this.transitionInput(e,s,o,i.durationMs,r),c=i.transition(a);return this.applyTransitionOutput(a,c,e,t)}transitionInput(e,t,i,r,o){if(e==="intro"){let s=o+r,a=En(this.motion,s);return{delta:t,position:this.motion.positionAt(s),direction:Ln(a,{x:1,y:0,z:0}),velocity:a,size:1,durationMs:r,elapsedMs:i,phase:e}}return{delta:t,position:this.outroPosition,direction:this.outroDirection,velocity:this.outroVelocity,size:1,durationMs:r,elapsedMs:i,phase:e}}applyTransitionOutput(e,t,i,r){return{position:t.position??(i==="intro"?this.motion.positionAt(r):e.position),size:t.size??e.size??1,orientation:t.orientation}}};var Cr=["#fde047","#fb923c","#f472b6","#60a5fa"],kn=.15,zr=.6;function ye(n,e,t){let i=(n^Math.imul(e+1,2654435769)^Math.imul(t+1,2246822507))>>>0;return i=Math.imul(i^i>>>16,73244475),i=Math.imul(i^i>>>16,73244475),i^=i>>>16,(i>>>0)/4294967296}function Fn(n,e,t){let i=Math.max(0,Math.min(1,(t-n)/(e-n)));return i*i*(3-2*i)}function _n(n,e){if(!Number.isFinite(n)||n<=0)throw new RangeError(`3d-spinner: ${e} must be a finite number greater than zero.`);return n}function Rr(n){let e=M(n),t=Math.abs(e.y)<.99?{x:0,y:1,z:0}:{x:1,y:0,z:0},i=M(A(t,e));return{d:e,right:i,up:A(e,i)}}function Vn(n={}){let e=_n(n.rate??20,"rate"),t=_n(n.lifeMs??1800,"lifeMs"),i=n.size??.16,r=n.speed??.6,o=n.gravity,s=n.spread??.5,a=Math.max(0,Math.min(1,n.opacity??.9)),c=n.spin??.002,u=n.alignToMotion??!1,l=n.seed??1,p=n.direction&&Rr(n.direction),d=1e3/e,h=f=>{let b=ye(l,f,0),m=2*Math.PI*ye(l,f,1);if(!p){let V=2*b-1,$=Math.sqrt(Math.max(0,1-V*V));return{x:$*Math.cos(m),y:$*Math.sin(m),z:V}}let y=1-b*(1-Math.cos(s)),x=Math.sqrt(Math.max(0,1-y*y)),{d:g,right:O,up:k}=p;return{x:g.x*y+(O.x*Math.cos(m)+k.x*Math.sin(m))*x,y:g.y*y+(O.y*Math.cos(m)+k.y*Math.sin(m))*x,z:g.z*y+(O.z*Math.cos(m)+k.z*Math.sin(m))*x}};return{maxLive:Math.ceil(t*e/1e3)+1,spawnGapMs:d,lifeMs:t,sample(f,b){if(f<0)return;let m=b-f*d;if(m<0||m>=t)return;let y=m/1e3,x=h(f),g=r*(.6+.8*ye(l,f,2)),O=g*y,k=o?.5*y*y:0,V=m/t,$=u?Math.atan2(x.y*g+(o?.y??0)*y,x.x*g+(o?.x??0)*y):2*Math.PI*ye(l,f,3)+(2*ye(l,f,4)-1)*c*m;return{position:{x:x.x*O+(o?o.x*k:0),y:x.y*O+(o?o.y*k:0),z:x.z*O+(o?o.z*k:0)},roll:$,size:i*(.7+.6*ye(l,f,5)),opacity:a*Fn(0,kn,V)*(1-Fn(zr,1,V))}}}}var P=class{constructor(e={}){this.handles=[];this.fades=[];this.enterAt=1/0;this.exitAt=1/0;this.finished=!1;this.field=Vn(e),this.colors=e.colors??Cr,this.backend=e.backend,this.texture=e.texture,this.labelContent=e.label,this.fadeLabel=e.fadeLabel??!0,this.emitter=e.emitter,this.outroMs=Math.max(0,e.outroMs??0)}mount(e){e.style.position||(e.style.position="relative");let t=this.colors.map(s=>le(1,[s])),i=this.texture,r=i?async s=>{let a=this.backend==="webgpu"?new(await Promise.resolve().then(()=>(et(),qt))).WebGPUTexturedRenderer(s):this.backend==="webgl"?new(await Promise.resolve().then(()=>(nt(),Qt))).WebGLTexturedRenderer(s):new(await Promise.resolve().then(()=>($t(),Zt))).Canvas2DTexturedRenderer(s);for(let c of t)a.setTexture(c,i);return a}:this.backend,o=new S({backend:r,camera:{position:{x:0,y:0,z:3}},light:{intensity:0,ambient:1}});for(let s=0;s<this.field.maxLive;s++){let a={mode:"one-sided",opacity:0};this.fades.push(a),this.handles.push(o.add(t[s%t.length],{scale:0,transparency:a}))}this.engine=o,o.mount(e).catch(s=>{e.textContent=s instanceof Error?s.message:String(s)}),this.label=X(e,this.labelContent),this.fadeLabel&&this.label.setOpacity(0)}enter(e){this.enterAt===1/0&&(this.enterAt=e)}exit(e){this.exitAt===1/0&&(this.exitAt=e)}isFinished(){return this.finished}render(e,t){if(!(!this.engine||!this.label)){this.exitAt!==1/0&&e>=this.exitAt+this.outroMs+this.field.lifeMs&&(this.finished=!0);for(let i of this.handles)i.transform.scale=0;if(this.enterAt!==1/0){let i=e-this.enterAt,r=this.field.spawnGapMs,o=Math.max(0,Math.ceil((i-this.field.lifeMs)/r)),s=Math.floor(i/r);this.exitAt!==1/0&&(s=Math.min(s,Math.floor((this.exitAt-this.enterAt+this.outroMs)/r))),o=Math.max(o,s-this.field.maxLive+1);for(let a=o;a<=s;a++){let c=this.field.sample(a,i);if(!c)continue;let u=a%this.handles.length,l=this.handles[u].transform,p=this.emitter?.positionAt(this.enterAt+a*r);l.position.x=c.position.x+(p?.x??0),l.position.y=c.position.y+(p?.y??0),l.position.z=c.position.z+(p?.z??0),l.rotation.z=c.roll,l.scale=c.size,this.fades[u].opacity=c.opacity}}this.label.setText(t.indeterminate?typeof this.labelContent=="string"?this.labelContent:"":`${Math.round(t.progress*100)}%`),this.fadeLabel&&this.label.setOpacity(W(e,this.enterAt,this.field.lifeMs*kn,this.exitAt,this.field.lifeMs)),this.engine.render()}}destroy(){this.label?.container.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handles.length=0,this.fades.length=0}};var F=10,wr=3,Dn=.76,Fr=.36,_r={mode:"two-sided",frontOpacity:.68,backOpacity:.87},jn=1.2,Bn=.8,Jt=Math.PI*2,kr=500,Vr=550,Dr=2.5,jr=250,en=250,tn=1300,Gn=600,Hn=45,Un=Gn+(F-1)*Hn+150,Br=420,Ur={x:0,y:0,z:50},Nr=["#67e8f9","#22d3ee","#0ea5e9","#38bdf8","#7dd3fc"],Nn=[["#e0f2fe","#bae6fd","#7dd3fc"],["#c7d2fe","#a5b4fc","#818cf8"],["#a5f3fc","#67e8f9","#22d3ee"]];function it(n){return Math.max(0,Math.min(1,n))}var Pe=class{constructor(e={}){this.minis=[];this.blends=new Array(F).fill(0);this.offsets=new Array(F).fill(0);this.enterAt=1/0;this.exitAt=1/0;this.allOutAt=1/0;this.lastNow=0;this.finished=!1;this.orbitPeriodMs=e.orbitPeriodMs??6e3,this.backend=e.backend}mount(e){e.style.position||(e.style.position="relative");let t=new S({backend:this.backend,camera:{position:{x:0,y:0,z:wr}}});this.center=t.add(Te(1,2,Nr),{scale:0});for(let i=0;i<F;i++){let r=Te(1,1,Nn[i%Nn.length]);this.minis.push(t.add(r,{scale:0,transparency:{..._r}}))}this.engine=t,t.mount(e).catch(i=>{e.textContent=i instanceof Error?i.message:String(i)})}enter(e){this.enterAt===1/0&&(this.enterAt=e)}exit(e){this.exitAt===1/0&&(this.exitAt=e)}isFinished(){return this.finished}get outroEmitMs(){return en+tn+Un}satelliteEmitter(e){return{positionAt:t=>{let i=[];for(let o=0;o<F;o++){let s=this.miniSample(o,t);s&&i.push(s.position)}if(i.length===0)return Ur;let r=Math.abs(Math.floor(t/e))%i.length;return i[r]}}}render(e,t){if(!this.engine||!this.center)return;if(this.enterAt===1/0){this.center.transform.scale=0;for(let o of this.minis)o.transform.scale=0;this.engine.render();return}let i=this.lastNow===0?16:Math.min(50,e-this.lastNow);this.lastNow=e,this.updateBlends(i,t.progress,e),this.updateSpread(i);let r=e-this.enterAt;this.center.transform.scale=this.centerScale(e,r),this.center.transform.rotation.x=r*2e-4,this.center.transform.rotation.y=r*5e-4;for(let o=0;o<F;o++){let s=this.minis[o].transform,a=this.miniSample(o,e);if(!a){s.scale=0;continue}s.position.x=a.position.x,s.position.y=a.position.y,s.position.z=a.position.z,s.scale=a.scale,s.rotation.y=r*.0012}this.engine.render()}destroy(){this.engine?.destroy(),this.engine=void 0,this.center=void 0,this.minis.length=0}updateBlends(e,t,i){let r=this.exitAt!==1/0,o=r?F:Math.min(F,Math.floor(t*F+1e-9)),s=e/Vr*(r?Dr:1);for(let a=0;a<F;a++){let c=a<o?1:0,u=this.blends[a];c>u&&(a===0||this.blends[a-1]>=.6)?(this.blends[a]=Math.min(1,u+s),u===0&&(this.offsets[a]=this.slotAngle(a))):c<u&&(a===F-1||this.blends[a+1]<=.4)&&(this.blends[a]=Math.max(0,u-s))}r&&this.allOutAt===1/0&&this.blends.every(a=>a>=1)&&(this.allOutAt=i)}updateSpread(e){let t=1-Math.exp(-e/jr);for(let i=0;i<F;i++)this.blends[i]<=0||(this.offsets[i]+=(this.slotAngle(i)-this.offsets[i])*t)}slotAngle(e){let t=Math.max(1,this.blends.filter(i=>i>0).length);return Jt*Math.min(e,t-1)/t}baseAngleAt(e){let t=-Jt*(e-this.enterAt)/this.orbitPeriodMs;if(this.allOutAt!==1/0){let i=it((e-this.allOutAt-en)/tn);t-=Jt*pe(i)}return t}reenterStart(){return this.allOutAt+en+tn}miniSample(e,t){let i=this.blends[e];if(i<=0)return;let r=Z(i),o=Fr*H(i);if(this.allOutAt!==1/0){let c=this.reenterStart()+e*Hn,u=re(it((t-c)/Gn));if(u>=1)return;r*=1-u,o*=1-u}let s=this.baseAngleAt(t)+this.offsets[e],a=Math.sin(s)*jn*r;return{position:{x:Math.cos(s)*jn*r,y:a*Math.cos(Bn),z:a*Math.sin(Bn)},scale:o}}centerScale(e,t){if(this.allOutAt!==1/0){let i=it((e-this.reenterStart()-Un)/Br);if(i>=1)return this.finished=!0,0;if(i>0)return Dn*(i<.35?1+.18*ue(i/.35):1.18*(1-ie((i-.35)/.65)))}return Dn*H(it(t/kr))}};var ot=5,I=ot*ot,Wn=4,Xn=55*Math.PI/180,oe=Math.PI*2,Kn=900,Zn=60,Gr=(I-1)*Zn+Kn,Hr=.35,Wr=.65,Xr=2.5,Yr=2e3,Yn=380,qr=80,Qr=1e3,Ee=700,Kr=500,qn=170,Zr=600,$r=["#8397c6","#7186b8","#6176a8","#93a6cf","#556a9c","#7a8fc0"],Jr=[()=>J(1,$r)];function rt(n){return Math.max(0,Math.min(1,n))}function eo(n){let e=rt(n);return e*e*(3-2*e)}function to(n){return typeof n=="function"?n():n}function Qn(n){let e=n-oe*Math.floor(n/oe);return e>Math.PI?e-oe:e}function Le(n,e){let t=(Math.imul(n+1,2654435769)^Math.imul(e+1,2246822507))>>>0;return t=Math.imul(t^t>>>16,73244475),t^=t>>>16,(t>>>0)/4294967296}var Ie=class{constructor(e={}){this.handles=[];this.blends=new Array(I).fill(0);this.dockedAt=new Array(I).fill(1/0);this.tumbleX=[];this.tumbleY=[];this.collapseDelay=[];this.popStarted=new Array(I).fill(!1);this.maxCollapseDelay=0;this.fades=[];this.slots=[];this.aspect=16/9;this.enterAt=1/0;this.exitAt=1/0;this.allDockedAt=1/0;this.collapseAt=1/0;this.lastNow=0;this.finished=!1;let t=e.meshes&&e.meshes.length>0?e.meshes:Jr;this.meshes=t.map(to),this.size=e.size??.34,this.orbitPeriodMs=e.orbitPeriodMs??9e3,this.dockMs=e.dockMs??800,this.backend=e.backend,this.labelContent=e.label,this.fadeLabel=e.fadeLabel??!0;let i=this.size+(e.gap??.12);for(let r=0;r<I;r++){let o=Math.floor(r/ot),s=r%ot;this.slots.push({x:(s-2)*i,y:(2-o)*i,z:0}),this.tumbleX.push(oe*Le(r,2)-Math.PI),this.tumbleY.push(oe*Le(r,4)-Math.PI),this.collapseDelay.push(Le(r,7)*Kr)}this.maxCollapseDelay=Math.max(...this.collapseDelay)}mount(e){e.style.position||(e.style.position="relative");let t=new S({backend:this.backend,camera:{position:{x:0,y:0,z:Wn},fov:Xn}});for(let r=0;r<I;r++)this.fades.push({mode:"one-sided",opacity:1}),this.handles.push(t.add(this.meshes[r%this.meshes.length],{scale:0}));this.engine=t,t.mount(e).catch(r=>{e.textContent=r instanceof Error?r.message:String(r)});let i=()=>{e.clientWidth>0&&e.clientHeight>0&&(this.aspect=e.clientWidth/e.clientHeight)};i(),this.observer=new ResizeObserver(i),this.observer.observe(e),this.label=X(e,this.labelContent),this.fadeLabel&&this.label.setOpacity(0)}enter(e){this.enterAt===1/0&&(this.enterAt=e)}exit(e){this.exitAt===1/0&&(this.exitAt=e)}isFinished(){return this.finished}render(e,t){if(!this.engine||!this.label)return;if(this.enterAt===1/0){for(let r of this.handles)r.transform.scale=0;this.engine.render();return}let i=this.lastNow===0?16:Math.min(50,e-this.lastNow);this.lastNow=e,this.updateBlends(i,t.progress,e),this.exitAt!==1/0&&this.allDockedAt!==1/0&&this.collapseAt===1/0&&(this.collapseAt=Math.max(this.exitAt,this.allDockedAt)+Qr),e>=this.collapseAt?this.renderCollapse(e):this.renderStory(e,i),this.label.setText(t.indeterminate?typeof this.labelContent=="string"?this.labelContent:"":`${Math.round(t.progress*100)}%`),this.fadeLabel&&this.label.setOpacity(W(e,this.enterAt,Zr,this.collapseAt,Ee)),this.collapseAt!==1/0&&e>=this.collapseAt+this.maxCollapseDelay+Ee+qn&&(this.finished=!0),this.engine.render()}destroy(){this.observer?.disconnect(),this.observer=void 0,this.label?.container.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.handles.length=0,this.fades.length=0}updateBlends(e,t,i){let r=this.exitAt!==1/0,s=i-this.enterAt>=Gr?r?I:Math.min(I,Math.floor(t*I+1e-9)):0,a=e/this.dockMs*(r?Xr:1);for(let u=0;u<I;u++){let l=u<s?1:0,p=this.blends[u];l>p&&(u===0||this.blends[u-1]>=Hr)?this.blends[u]=Math.min(1,p+a):l<p&&(u===I-1||this.blends[u+1]<=Wr)&&(this.blends[u]=Math.max(0,p-a)),this.blends[u]>=1?this.dockedAt[u]===1/0&&(this.dockedAt[u]=i):this.dockedAt[u]=1/0}s===I&&this.blends.every(u=>u>=1)?this.allDockedAt===1/0&&(this.allDockedAt=i):r||(this.allDockedAt=1/0)}renderStory(e,t){let i=e-this.enterAt,r=Math.tan(Xn/2)*Wn,o=r*this.aspect,s=Math.max(.6,Math.min(o,r)-this.size*.55),a=(Math.max(o,r)*1.25+this.size*2)/s;for(let c=0;c<I;c++){let u=this.handles[c].transform,l=eo(this.blends[c]),p=rt((i-c*Zn)/Kn),d=1+(a-1)*(1-Z(p)),h=Math.PI/2-c/I*oe-i/this.orbitPeriodMs*oe,f=Math.cos(h)*s*d,b=Math.sin(h)*s*d,m=this.slots[c];if(u.position.x=f+(m.x-f)*l,u.position.y=b+(m.y-b)*l,u.position.z=0,u.scale=this.size,this.blends[c]===0&&(this.tumbleX[c]=Qn(this.tumbleX[c]+(4e-4+8e-4*Le(c,1))*t),this.tumbleY[c]=Qn(this.tumbleY[c]+(6e-4+.001*Le(c,3))*t)),u.rotation.z=0,this.blends[c]>=1){let y=(i+c*qr)%Yr,x=y<Yn&&e-y>=this.dockedAt[c];u.rotation.x=0,u.rotation.y=x?oe*pe(y/Yn):0}else{let y=1-l;u.rotation.x=this.tumbleX[c]*y,u.rotation.y=this.tumbleY[c]*y}}}renderCollapse(e){this.captured||(this.captured=this.handles.map(t=>({...t.transform.position})));for(let t=0;t<I;t++){let i=this.handles[t].transform,r=this.captured[t],o=e-this.collapseAt-this.collapseDelay[t];if(o<=0){i.position.x=r.x,i.position.y=r.y,i.position.z=r.z,i.scale=this.size;continue}let s=re(rt(o/Ee));if(i.position.x=r.x*(1-s),i.position.y=r.y*(1-s),i.position.z=r.z*(1-s),i.scale=this.size*(1-.99*s),o>=Ee){this.popStarted[t]||(this.popStarted[t]=!0,this.handles[t].transparency=this.fades[t]);let a=rt((o-Ee)/qn);this.fades[t].opacity=1-a,i.scale=a>=1?0:this.size*.01*(1+1.6*Math.sin(Math.PI*a))}}}};var U=class{constructor(e){this.elements=[];this.layers=e.map(t=>"animation"in t?t:{animation:t})}mount(e){e.style.position="relative";for(let[t,i]of this.layers.entries()){let r=document.createElement("div");r.style.cssText=`position:absolute;inset:0;z-index:${i.zIndex??t}`,e.appendChild(r),this.elements.push(r),i.animation.mount(r)}}enter(e){for(let t of this.layers)t.animation.enter(e)}exit(e){for(let t of this.layers)t.animation.exit(e)}render(e,t){for(let i of this.layers)i.animation.render(e,t)}isFinished(){return this.layers.every(e=>e.animation.isFinished())}destroy(){for(let e of this.layers)e.animation.destroy();for(let e of this.elements)e.remove();this.elements.length=0}};function Y(n,e){return{type:"indeterminate",animation:n,loop:e.loop,periodMs:e.periodMs}}function se(n,e){return{type:"progress",animation:n,progress:e.progress??.001,timeout:e.timeout,until:e.until}}function $n(n={}){let e=n.particles??{},t=e.rate??60,i=new Pe({backend:n.backend,...n.orb}),r=new P({rate:t,lifeMs:1200,size:.12,speed:.05,colors:["#ffffff","#a5f3fc","#818cf8"],texture:e.texture??ne(),emitter:i.satelliteEmitter(1e3/t),outroMs:i.outroEmitMs,seed:5,backend:n.backend,...e,label:n.label??e.label,fadeLabel:n.fadeLabel??e.fadeLabel});return se(new U([i,r]),n)}function xe(n={}){let e=n.size??1,t=n.periodMs??3600;return{positionAt(i){let r=i/t*Math.PI*2;return{x:e*1.5*Math.sin(r),y:e*1*Math.sin(r)*Math.cos(r),z:e*1.05*Math.cos(r)}}}}function Jn(n={}){let e=n.object?.motion??xe({size:.66,periodMs:7200}),t=n.particles??{},i=new he({mesh:()=>Ne(1,["#f0f9ff","#7dd3fc","#818cf8","#e879f9"]),motion:e,size:.42,rotation:{spinX:.002,spinY:.003},backend:n.backend,...n.object,label:n.object?.label}),r=new U([new P({rate:44,lifeMs:2300,size:.25,speed:.08,colors:["#ffffff","#bae6fd","#818cf8"],texture:t.texture??ne(),emitter:i.trailEmitter(),outroMs:i.outroDurationMs,seed:28,backend:n.backend,...t,label:n.label??t.label??"Polishing pixels",fadeLabel:n.fadeLabel??t.fadeLabel}),i]);return Y(r,n)}function st(n={}){let e=(n.size??2.4)/2,t=n.periodMs??4e3,i=n.tilt??.45,r=n.direction??1,o=Math.cos(i),s=Math.sin(i);return{positionAt(a){let c=r*a/t,u=(c-Math.floor(c))*4,l=Math.floor(u),p=u-l,d,h;return l===0?(d=-e+2*e*p,h=-e):l===1?(d=e,h=-e+2*e*p):l===2?(d=e-2*e*p,h=e):(d=-e,h=e-2*e*p),{x:d,y:h*o,z:h*s}}}}var ge=50,ii=3,ri=55*Math.PI/180,ei=Math.tan(ri/2)*ii,no=130,ti=320,io=8,ro=.4*Math.PI/180,oo=4e3,so=1e3,ni=1200,ao={mode:"two-sided",opacity:.275},co=["#bae6fd","#7dd3fc","#38bdf8","#0ea5e9","#a5f3fc","#e0f2fe"],lo={x:0,y:1,z:0};function uo(n){return Math.max(0,Math.min(1,n))}function po(n){let e=M(n),t=A(e,lo);Math.hypot(t.x,t.y,t.z)<1e-4&&(t={x:0,y:0,z:1}),t=M(t);let i=A(t,e),r=M(A(e,i));return{x:Math.atan2(A(r,e).z,r.z),y:Math.asin(Math.max(-1,Math.min(1,-e.z))),z:Math.atan2(e.y,e.x)}}function ho(n,e,t){let i=M(n),r=M(e),o=Math.max(-1,Math.min(1,q(i,r))),s=Math.acos(o);if(s<=t||s<1e-4)return r;let a=Math.sin(s);if(a<1e-4)return r;let c=t/s,u=Math.sin((1-c)*s)/a,l=Math.sin(c*s)/a;return M({x:i.x*u+r.x*l,y:i.y*u+r.y*l,z:i.z*u+r.z*l})}var at=class{constructor(e={}){this.cars=[];this.appear=new Array(ge).fill(0);this.headings=new Array(ge).fill(void 0);this.aspect=16/9;this.enterAt=1/0;this.outroAt=1/0;this.carsAtOutro=0;this.exitPathTime=0;this.exitPoint={x:0,y:0,z:0};this.exitDir={x:1,y:0,z:0};this.exitSpeed=.001;this.lastNow=0;this.finished=!1;this.motion=e.motion??st({size:1.7,periodMs:6800,tilt:.5}),this.size=e.size??.15,this.backend=e.backend,this.labelContent=e.label,this.fadeLabel=e.fadeLabel??!0}mount(e){e.style.position||(e.style.position="relative");let t=new S({backend:this.backend,camera:{position:{x:0,y:0,z:ii},fov:ri}}),i=J(1,co);for(let o=0;o<ge;o++)this.cars.push(t.add(i,{scale:0,transparency:{...ao}}));this.engine=t,t.mount(e).catch(o=>{e.textContent=o instanceof Error?o.message:String(o)});let r=()=>{e.clientWidth>0&&e.clientHeight>0&&(this.aspect=e.clientWidth/e.clientHeight)};r(),this.observer=new ResizeObserver(r),this.observer.observe(e),this.label=X(e,this.labelContent),this.fadeLabel&&this.label.setOpacity(0)}enter(e){this.enterAt===1/0&&(this.enterAt=e)}exit(e){if(this.outroAt!==1/0||this.enterAt===1/0)return;this.outroAt=e,this.carsAtOutro=this.appear.filter(o=>o>.5).length,this.exitPathTime=e-this.enterAt;let t=this.motion.positionAt(this.exitPathTime),i=T(this.motion.positionAt(this.exitPathTime+1),this.motion.positionAt(this.exitPathTime-1)),r=Math.hypot(i.x,i.y,i.z);this.exitPoint=t,r>1e-6&&(this.exitSpeed=r/2),this.exitDir=r>1e-6?M(i):{x:1,y:0,z:0}}isFinished(){return this.finished}get outroDurationMs(){return ni}trailEmitter(){return{positionAt:e=>this.enterAt===1/0?this.motion.positionAt(e):this.pathPosition(e-this.enterAt+this.warp(e))}}render(e,t){if(!this.engine||!this.label)return;for(let c of this.cars)c.transform.scale=0;if(this.enterAt===1/0){this.engine.render();return}let i=this.lastNow===0?16:Math.min(50,e-this.lastNow);this.lastNow=e;let r=this.outroAt!==1/0?this.carsAtOutro:Math.min(ge,Math.round(t.progress*ge)),o=ei*this.aspect,s=this.warp(e),a=!1;for(let c=0;c<ge;c++){let u=c<r?1:0;if(this.appear[c]=uo(this.appear[c]+Math.sign(u-this.appear[c])*(i/ti)),this.appear[c]<=0){this.headings[c]=void 0;continue}let l=e-this.enterAt-c*no+s,p=this.pathPosition(l);if(Math.abs(p.x)>o+this.size||Math.abs(p.y)>ei+this.size)continue;let d=T(this.pathPosition(l+io),p),h=Math.hypot(d.x,d.y,d.z)>1e-5?d:this.headings[c]??{x:1,y:0,z:0};this.headings[c]=this.headings[c]?ho(this.headings[c],h,ro*i):M(h);let f=po(this.headings[c]),b=this.cars[c].transform;b.position.x=p.x,b.position.y=p.y,b.position.z=p.z,b.rotation.x=f.x,b.rotation.y=f.y,b.rotation.z=f.z,b.scale=this.size*H(this.appear[c]),a=!0}this.label.setText(t.indeterminate?typeof this.labelContent=="string"?this.labelContent:"":`${Math.round(t.progress*100)}%`),this.fadeLabel&&this.label.setOpacity(W(e,this.enterAt,ti,this.outroAt,ni)),this.outroAt!==1/0&&e>this.outroAt+300&&(!a||e>=this.outroAt+oo)&&(this.finished=!0),this.engine.render()}destroy(){this.observer?.disconnect(),this.observer=void 0,this.label?.container.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.cars.length=0}warp(e){if(this.outroAt===1/0)return 0;let t=(e-this.outroAt)/1e3;return .5*so*t*t}pathPosition(e){if(this.outroAt===1/0||e<=this.exitPathTime)return this.motion.positionAt(e);let t=this.exitSpeed*(e-this.exitPathTime);return{x:this.exitPoint.x+this.exitDir.x*t,y:this.exitPoint.y+this.exitDir.y*t,z:this.exitPoint.z+this.exitDir.z*t}}};function oi(n={}){let e=n.particles??{},t=new at({motion:n.object?.motion,backend:n.backend}),i=new P({rate:30,lifeMs:1700,size:.15,speed:.11,colors:["#e0f2fe","#a5f3fc","#c4b5fd"],texture:e.texture??te({glow:5}),emitter:t.trailEmitter(),outroMs:t.outroDurationMs,seed:17,backend:n.backend,...e,label:n.label??e.label,fadeLabel:n.fadeLabel??e.fadeLabel});return se(new U([i,t]),n)}function si(n={}){return se(new Ie({backend:n.backend,label:n.label,fadeLabel:n.fadeLabel,...n.assembly}),n)}function ai(n={}){let e=n.particles??{};return Y(new P({rate:70,lifeMs:2800,size:.38,speed:1.35,direction:{x:0,y:1,z:0},spread:.62,gravity:{x:0,y:-1.45,z:0},colors:["#fff","#000"],texture:e.texture??We(),spin:0,alignToMotion:!0,seed:37,backend:n.backend,...e,label:n.label??e.label??"Loading...",fadeLabel:n.fadeLabel??e.fadeLabel}),n)}function ci(n={}){let e=n.object?.motion??xe({size:.72,periodMs:6200}),t=n.particles??{},i=new he({mesh:He,motion:e,size:.48,backend:n.backend,...n.object,label:n.object?.label}),r=new U([new P({rate:34,lifeMs:1900,size:.16,speed:.11,colors:["#fde047","#f472b6","#7dd3fc"],texture:t.texture??te(),emitter:i.trailEmitter(),outroMs:i.outroDurationMs,seed:11,backend:n.backend,...t,label:n.label??t.label??"Flying in...",fadeLabel:n.fadeLabel??t.fadeLabel}),i]);return Y(r,n)}function mo(){let n=document.createElement("div");return n.innerHTML=`<style>
|
|
110
|
+
@keyframes spinner-prefab-pulse { 0%,100% { color:#fff; transform:scale(1); } 50% { color:#93c5fd; transform:scale(1.06); } }
|
|
111
|
+
</style><div style="animation:spinner-prefab-pulse 2.4s ease-in-out infinite;font-size:2rem">Loading the good stuff</div>`,n}function li(n={}){let e=n.particles??{};return Y(new P({rate:48,lifeMs:4200,size:.3,speed:.34,colors:["#ffffff","#dbeafe","#93c5fd","#c4b5fd"],texture:e.texture??ne(),seed:71,backend:n.backend,...e,label:n.label??e.label??mo(),fadeLabel:n.fadeLabel??e.fadeLabel}),n)}var C=20,xi=3,gi=55*Math.PI/180,ui=Math.tan(gi/2)*xi,Ce=.12,ze=-.5,pi=.3,hi=460,di=.45,fo=2.5,nn=620,bo=5.2,yo=2e3,xo=3,mi=.2,go=.8,fi=30,Mo=50,vo=Math.PI/180,rn=1400,Ao=320,Oo=.55,To=.17,So=.16,Po=104,on=420,Eo=55,Lo=950,bi=.25,Io=.09,Co=.15,zo=.9,Ro=140,wo=["#e2e8f0","#cbd5e1"],Fo=["#fef3c7","#fde047","#fb923c","#ef4444"],_o=["#e2e8f0","#f8fafc","#cbd5e1","#94a3b8","#e2e8f0"];function ko(n){return Math.max(0,Math.min(1,n))}function Re(n,e,t){let i=ko((t-n)/(e-n));return i*i*(3-2*i)}function _(n,e){let t=(Math.imul(n+1,2654435769)^Math.imul(e+1,2246822507))>>>0;return t=Math.imul(t^t>>>16,73244475),t^=t>>>16,(t>>>0)/4294967296}function yi(n,e){return ee(t=>{let i=t.createRadialGradient(48,48,1,48,48,47);i.addColorStop(0,`rgba(255,255,255,${n})`),i.addColorStop(e,`rgba(255,255,255,${n*.6})`),i.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=i,t.fillRect(0,0,96,96)})}var ct=class{constructor(e={}){this.rockets=[];this.smoke=[];this.fire=[];this.smokeFades=[];this.fireFades=[];this.blends=new Array(C).fill(0);this.groundedAt=new Array(C).fill(1/0);this.turnS=new Array(C).fill(1/0);this.turnDir=[];this.turnRoll=new Array(C).fill(0);this.stagger=new Array(C).fill(0);this.aspect=16/9;this.enterAt=1/0;this.exitAt=1/0;this.launchedAt=1/0;this.lastNow=0;this.finished=!1;this.backend=e.backend,this.labelContent=e.label,this.fadeLabel=e.fadeLabel??!0;for(let i=0;i<C;i++)this.turnDir.push({x:0,y:1}),this.stagger[i]=_(i,7)*nn;let t=Array.from({length:C},(i,r)=>r).sort((i,r)=>_(i,11)-_(r,11));for(let i of t.slice(0,xo)){let r=mi+_(i,12)*(go-mi),o=(fi+_(i,13)*(Mo-fi))*vo,s=_(i,14)<.5?-1:1;this.turnS[i]=r-ze,this.turnDir[i]={x:s*Math.sin(o),y:Math.cos(o)},this.turnRoll[i]=-s*o}}mount(e){e.style.position||(e.style.position="relative");let t=wo.map(l=>le(1,[l])),i=Fo.map(l=>le(1,[l])),r=yi(.85,.5),o=yi(1,.32),s=async l=>{let p=this.backend==="webgpu"?new(await Promise.resolve().then(()=>(et(),qt))).WebGPUTexturedRenderer(l):this.backend==="webgl"?new(await Promise.resolve().then(()=>(nt(),Qt))).WebGLTexturedRenderer(l):new(await Promise.resolve().then(()=>($t(),Zt))).Canvas2DTexturedRenderer(l);for(let d of t)p.setTexture(d,r);for(let d of i)p.setTexture(d,o);return p},a=new S({backend:s,camera:{position:{x:0,y:0,z:xi},fov:gi}}),c=Ge(1,_o);for(let l=0;l<C;l++)this.rockets.push(a.add(c,{scale:0}));for(let l=0;l<Po;l++){let p={mode:"one-sided",opacity:0};this.smokeFades.push(p),this.smoke.push(a.add(t[l%t.length],{scale:0,transparency:p}))}for(let l=0;l<Ro;l++){let p={mode:"one-sided",opacity:0};this.fireFades.push(p),this.fire.push(a.add(i[l%i.length],{scale:0,transparency:p}))}this.engine=a,a.mount(e).catch(l=>{e.textContent=l instanceof Error?l.message:String(l)});let u=()=>{e.clientWidth>0&&e.clientHeight>0&&(this.aspect=e.clientWidth/e.clientHeight)};u(),this.observer=new ResizeObserver(u),this.observer.observe(e),this.label=X(e,this.labelContent),this.fadeLabel&&this.label.setOpacity(0)}enter(e){this.enterAt===1/0&&(this.enterAt=e)}exit(e){this.exitAt===1/0&&(this.exitAt=e)}isFinished(){return this.finished}render(e,t){if(!this.engine||!this.label)return;for(let p of this.rockets)p.transform.scale=0;for(let p of this.smokeFades)p.opacity=0;for(let p of this.fireFades)p.opacity=0;for(let p of this.smoke)p.transform.scale=0;for(let p of this.fire)p.transform.scale=0;if(this.enterAt===1/0){this.engine.render();return}let i=this.lastNow===0?16:Math.min(50,e-this.lastNow);this.lastNow=e;let r=this.exitAt!==1/0;this.updateBlends(i,t.progress,e,r),r&&this.launchedAt===1/0&&this.blends.every(p=>p>=1)&&(this.launchedAt=e);let o=this.launchedAt!==1/0,s=ui*this.aspect,a=Math.min(s*.8,1.18),c=s+.6,u=0,l=0;for(let p=0;p<C;p++){let d=-a+2*a*p/(C-1),h=o?this.launchedAt+this.stagger[p]:1/0,f=e-h;if(o&&f>=0){this.renderAscent(p,d,f,s),l=this.emitFire(p,d,f,l);continue}let b=this.blends[p];if(b<=0)continue;let m=this.rockets[p].transform;m.position.x=c+(d-c)*H(b),m.position.y=ze,m.position.z=0,m.rotation.x=0,m.rotation.y=0,m.rotation.z=0,m.scale=Ce*Re(0,.6,b),this.groundedAt[p]!==1/0&&(u=this.emitSmoke(p,d,e,h,u))}this.label.setText(t.indeterminate?typeof this.labelContent=="string"?this.labelContent:"":`${Math.round(t.progress*100)}%`),this.fadeLabel&&this.label.setOpacity(W(e,this.enterAt,hi,this.launchedAt,nn)),o&&e>=this.launchedAt+nn+yo&&(this.finished=!0),this.engine.render()}destroy(){this.observer?.disconnect(),this.observer=void 0,this.label?.container.remove(),this.label=void 0,this.engine?.destroy(),this.engine=void 0,this.rockets.length=0,this.smoke.length=0,this.fire.length=0,this.smokeFades.length=0,this.fireFades.length=0}updateBlends(e,t,i,r){let o=r?C:Math.min(C,Math.round(t*C)),s=e/hi*(r?fo:1);for(let a=0;a<C;a++){let c=a<o?1:0,u=this.blends[a];c>u&&(a===0||this.blends[a-1]>=di)?this.blends[a]=Math.min(1,u+s):c<u&&(a===C-1||this.blends[a+1]<=1-di)&&(this.blends[a]=Math.max(0,u-s)),this.blends[a]>=1?this.groundedAt[a]===1/0&&(this.groundedAt[a]=i):this.groundedAt[a]=1/0}}ascentDistance(e){let t=e/1e3;return .5*bo*t*t}ascentPose(e,t,i){let r=this.ascentDistance(i),o=this.turnS[e];if(r<=o)return{pos:{x:t,y:ze+r},dir:{x:0,y:1},roll:0};let s=r-o,a=this.turnDir[e];return{pos:{x:t+a.x*s,y:ze+o+a.y*s},dir:a,roll:this.turnRoll[e]}}renderAscent(e,t,i,r){let{pos:o,roll:s}=this.ascentPose(e,t,i);if(o.y>ui+.4||Math.abs(o.x)>r+.4)return;let a=this.rockets[e].transform;a.position.x=o.x,a.position.y=o.y,a.position.z=0,a.rotation.x=0,a.rotation.y=0,a.rotation.z=s,a.scale=Ce}emitFire(e,t,i,r){let o=Eo,s=Math.min(Math.floor(i/o),Math.floor(Lo/o)),a=Math.max(0,Math.ceil((i-on)/o));for(let c=a;c<=s;c++){if(r>=this.fire.length)return r;let u=c*o,l=i-u;if(l<0||l>=on)continue;let p=l/on,d=l/1e3,h=this.ascentPose(e,t,u),f={x:-h.dir.x,y:-h.dir.y},b={x:-h.dir.y,y:h.dir.x},m=(_(e*97+c,1)-.5)*Io,y=h.pos.x+f.x*Ce*.5,x=h.pos.y+f.y*Ce*.5,g=this.fire[r].transform;g.position.x=y+f.x*bi*d+b.x*m,g.position.y=x+f.y*bi*d+b.y*m-.12*d*d,g.position.z=pi,g.rotation.z=_(e*97+c,2)*Math.PI*2,g.scale=Co*(.7+.5*_(e*97+c,3))*(1-.55*p),this.fireFades[r].opacity=zo*Re(0,.15,p)*(1-Re(.55,1,p)),r++}return r}emitSmoke(e,t,i,r,o){let s=this.groundedAt[e],a=i-s,c=Ao,u=Number.isFinite(r)?r-s:a,l=Math.min(Math.floor(a/c),Math.floor(u/c)),p=Math.max(0,Math.ceil((a-rn)/c)),d=ze-Ce*.4;for(let h=p;h<=l;h++){if(o>=this.smoke.length)return o;let f=a-h*c;if(f<0||f>=rn)continue;let b=f/rn,m=(_(e*131+h,1)-.5)*.14,y=this.smoke[o].transform;y.position.x=t+m*b,y.position.y=d+Oo*b,y.position.z=pi,y.rotation.z=_(e*131+h,2)*Math.PI*2,y.scale=To*(.5+.8*b)*(.7+.6*_(e*131+h,3)),this.smokeFades[o].opacity=So*Re(0,.25,b)*(1-Re(.5,1,b)),o++}return o}};function Mi(n={}){return se(new ct({backend:n.backend,label:n.label,fadeLabel:n.fadeLabel}),n)}function Vo(n){let e=n>>>0;return()=>{e=e+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function sn(n,e,t){let i=[0,1,2].map(()=>({freq:.5+n()*1.4,phase:n()*Math.PI*2,weight:.5+n()})),r=i.reduce((o,s)=>o+s.weight,0);return o=>{let s=0;for(let a of i)s+=a.weight*Math.sin(e*a.freq*o+a.phase);return s/r*t}}function lt(n={}){let e=n.bounds?.x??1.4,t=n.bounds?.y??1,i=n.bounds?.z??.6,r=n.periodMs??9e3,o=n.seed??Math.random()*1e9|0,s=Vo(o),a=2*Math.PI/r,c=sn(s,a,e),u=sn(s,a,t),l=sn(s,a,i);return{positionAt(p){return{x:c(p),y:u(p),z:l(p)}}}}function vi(n={}){let e=n.particles??{},t=e.emitter??lt({bounds:{x:1.1,y:.72,z:.35},periodMs:7200,seed:19});return Y(new P({rate:38,lifeMs:2600,size:.15,speed:.17,colors:["#fef08a","#f9a8d4","#a5f3fc"],texture:e.texture??te(),emitter:t,seed:91,backend:n.backend,...e,label:n.label??e.label??"Loading...",fadeLabel:n.fadeLabel??e.fadeLabel}),n)}function Ai(n={}){let e=n.radius??1.3,t=n.periodMs??3e3,i=n.tilt??.5,r=n.direction??1,o=Math.cos(i),s=Math.sin(i);return{positionAt(a){let c=r*a/t*Math.PI*2,u=e*Math.cos(c),l=e*Math.sin(c);return{x:u,y:l*o,z:l*s}}}}nt();et();var Do=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#ef4444"];function jo(n){let e=Number.parseFloat(n);if(Number.isFinite(e))return Math.round(Math.min(1,Math.max(0,e))*255).toString(16).padStart(2,"0")}function Bo(n){let e=new Map,t;for(let i of n.split(`
|
|
112
|
+
`)){let r=i.trim();if(r===""||r.startsWith("#"))continue;let o=r.split(/\s+/);if(o[0]==="newmtl")t=o.slice(1).join(" ");else if(o[0]==="Kd"&&t){let s=o.slice(1,4).map(jo);s.length===3&&s.every(a=>a!==void 0)&&e.set(t,`#${s.join("")}`)}}return e}function Uo(n,e){let t=parseInt(n,10);return t<0?e+t:t-1}function No(n,e={}){let t=e.colors??Do,i=e.useMtlColors&&e.mtl?Bo(e.mtl):void 0,r=[],o=[],s;for(let a of n.split(`
|
|
113
|
+
`)){let c=a.trim();if(c===""||c.startsWith("#"))continue;let u=c.split(/\s+/),l=u[0];if(l==="v")r.push({x:parseFloat(u[1]),y:parseFloat(u[2]),z:parseFloat(u[3])});else if(l==="usemtl")s=u.slice(1).join(" ");else if(l==="f"){let p=[];for(let d=1;d<u.length;d++){let h=u[d].split("/")[0];p.push(Uo(h,r.length))}if(p.length>=3){let h=(s?i?.get(s):void 0)??(i?t[0]??"#888888":t[o.length%t.length]);o.push({indices:p,color:h})}}}return{vertices:r,faces:o}}var an=class{constructor(e={}){this.type=e.type??"linear",this.overextend=e.overextend??!1}value(e,t=this.type,i=this.overextend){return qe(t,e,i)}};return Ei(Go);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "3d-spinner",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "A lightweight, zero-dependency 3D spinner, loader, and progress indicator for JavaScript.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.cjs",
|
|
@@ -25,6 +25,31 @@
|
|
|
25
25
|
"import": "./dist/animations/object-motion.js",
|
|
26
26
|
"require": "./dist/cjs/animations/object-motion.cjs"
|
|
27
27
|
},
|
|
28
|
+
"./animations/particles": {
|
|
29
|
+
"types": "./dist/animations/particles.d.ts",
|
|
30
|
+
"import": "./dist/animations/particles.js",
|
|
31
|
+
"require": "./dist/cjs/animations/particles.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./animations/charged-orb": {
|
|
34
|
+
"types": "./dist/animations/charged-orb.d.ts",
|
|
35
|
+
"import": "./dist/animations/charged-orb.js",
|
|
36
|
+
"require": "./dist/cjs/animations/charged-orb.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./animations/grid-assembly": {
|
|
39
|
+
"types": "./dist/animations/grid-assembly.d.ts",
|
|
40
|
+
"import": "./dist/animations/grid-assembly.js",
|
|
41
|
+
"require": "./dist/cjs/animations/grid-assembly.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./composite-animation": {
|
|
44
|
+
"types": "./dist/composite-animation.d.ts",
|
|
45
|
+
"import": "./dist/composite-animation.js",
|
|
46
|
+
"require": "./dist/cjs/composite-animation.cjs"
|
|
47
|
+
},
|
|
48
|
+
"./prefabs": {
|
|
49
|
+
"types": "./dist/prefabs/prefabs.d.ts",
|
|
50
|
+
"import": "./dist/prefabs/prefabs.js",
|
|
51
|
+
"require": "./dist/cjs/prefabs/prefabs.cjs"
|
|
52
|
+
},
|
|
28
53
|
"./motion": {
|
|
29
54
|
"types": "./dist/motion/motion.d.ts",
|
|
30
55
|
"import": "./dist/motion/motion.js",
|
|
@@ -40,6 +65,21 @@
|
|
|
40
65
|
"import": "./dist/engines/little-3d-engine/little-3d-engine.js",
|
|
41
66
|
"require": "./dist/cjs/engines/little-3d-engine/little-3d-engine.cjs"
|
|
42
67
|
},
|
|
68
|
+
"./engines/little-3d-engine/renderers/webgl-textured": {
|
|
69
|
+
"types": "./dist/engines/little-3d-engine/renderers/webgl-textured.d.ts",
|
|
70
|
+
"import": "./dist/engines/little-3d-engine/renderers/webgl-textured.js",
|
|
71
|
+
"require": "./dist/cjs/engines/little-3d-engine/renderers/webgl-textured.cjs"
|
|
72
|
+
},
|
|
73
|
+
"./engines/little-3d-engine/renderers/canvas2d-textured": {
|
|
74
|
+
"types": "./dist/engines/little-3d-engine/renderers/canvas2d-textured.d.ts",
|
|
75
|
+
"import": "./dist/engines/little-3d-engine/renderers/canvas2d-textured.js",
|
|
76
|
+
"require": "./dist/cjs/engines/little-3d-engine/renderers/canvas2d-textured.cjs"
|
|
77
|
+
},
|
|
78
|
+
"./engines/little-3d-engine/renderers/webgpu-textured": {
|
|
79
|
+
"types": "./dist/engines/little-3d-engine/renderers/webgpu-textured.d.ts",
|
|
80
|
+
"import": "./dist/engines/little-3d-engine/renderers/webgpu-textured.js",
|
|
81
|
+
"require": "./dist/cjs/engines/little-3d-engine/renderers/webgpu-textured.cjs"
|
|
82
|
+
},
|
|
43
83
|
"./engines/little-3d-engine/loaders/obj": {
|
|
44
84
|
"types": "./dist/engines/little-3d-engine/loaders/obj.d.ts",
|
|
45
85
|
"import": "./dist/engines/little-3d-engine/loaders/obj.js",
|
|
@@ -66,6 +106,7 @@
|
|
|
66
106
|
"prepublishOnly": "npm run build"
|
|
67
107
|
},
|
|
68
108
|
"keywords": [
|
|
109
|
+
"3d-spinner",
|
|
69
110
|
"spinner",
|
|
70
111
|
"loader",
|
|
71
112
|
"loading",
|
|
@@ -78,7 +119,7 @@
|
|
|
78
119
|
"type": "git",
|
|
79
120
|
"url": "git+https://github.com/runelaang/3d-spinner.git"
|
|
80
121
|
},
|
|
81
|
-
"homepage": "https://github.
|
|
122
|
+
"homepage": "https://runelaang.github.io/3d-spinner/",
|
|
82
123
|
"bugs": {
|
|
83
124
|
"url": "https://github.com/runelaang/3d-spinner/issues"
|
|
84
125
|
},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/engines/little-3d-engine/shapes/{cube-sphere.js → primitives/spheres/cube-sphere.js}
RENAMED
|
File without changes
|
/package/dist/engines/little-3d-engine/shapes/{uv-sphere.js → primitives/spheres/uv-sphere.js}
RENAMED
|
File without changes
|
|
File without changes
|