@zylem/behaviors 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/chunk-7JJEIADR.js +2631 -0
- package/dist/chunk-7JJEIADR.js.map +1 -0
- package/dist/{chunk-POZER3MQ.js → chunk-ZPSAXX73.js} +100 -94
- package/dist/chunk-ZPSAXX73.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/particle-emitter/presets.d.ts +2 -2
- package/dist/particle-emitter/presets.js +1 -1
- package/dist/particle-emitter.d.ts +9 -4
- package/dist/particle-emitter.js +2 -2
- package/dist/spark-Dx3cJbTW.d.ts +356 -0
- package/package.json +159 -159
- package/dist/chunk-GYURWCIQ.js +0 -1985
- package/dist/chunk-GYURWCIQ.js.map +0 -1
- package/dist/chunk-POZER3MQ.js.map +0 -1
- package/dist/spark-DDlIg1nM.d.ts +0 -148
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/behaviors/particle-emitter/preset-builder.ts","../src/lib/behaviors/particle-emitter/gpu/particles.ts","../src/lib/behaviors/particle-emitter/gpu/types.ts","../src/lib/behaviors/particle-emitter/gpu/textures.ts","../src/lib/behaviors/particle-emitter/gpu/nodes.ts","../src/lib/behaviors/particle-emitter/gpu/easing.ts","../src/lib/behaviors/particle-emitter/gpu/utils.ts","../src/lib/behaviors/particle-emitter/presets/electricity/arc.ts","../src/lib/behaviors/particle-emitter/presets/electricity/pulse.ts","../src/lib/behaviors/particle-emitter/presets/electricity/spark.ts","../src/lib/behaviors/particle-emitter/presets/electricity/storm.ts","../src/lib/behaviors/particle-emitter/presets/electricity/surge.ts","../src/lib/behaviors/particle-emitter/presets/electricity/index.ts","../src/lib/behaviors/particle-emitter/presets/fire/blaze.ts","../src/lib/behaviors/particle-emitter/presets/fire/ember.ts","../src/lib/behaviors/particle-emitter/presets/fire/flamelet.ts","../src/lib/behaviors/particle-emitter/presets/fire/smolder.ts","../src/lib/behaviors/particle-emitter/presets/fire/spark.ts","../src/lib/behaviors/particle-emitter/presets/fire/index.ts","../src/lib/behaviors/particle-emitter/presets/gas/haze.ts","../src/lib/behaviors/particle-emitter/presets/gas/miasma.ts","../src/lib/behaviors/particle-emitter/presets/gas/plume.ts","../src/lib/behaviors/particle-emitter/presets/gas/smoke.ts","../src/lib/behaviors/particle-emitter/presets/gas/vapor.ts","../src/lib/behaviors/particle-emitter/presets/gas/index.ts","../src/lib/behaviors/particle-emitter/presets/magic/arcane.ts","../src/lib/behaviors/particle-emitter/presets/magic/corrupted.ts","../src/lib/behaviors/particle-emitter/presets/magic/holy.ts","../src/lib/behaviors/particle-emitter/presets/magic/nature.ts","../src/lib/behaviors/particle-emitter/presets/magic/psychic.ts","../src/lib/behaviors/particle-emitter/presets/magic/void.ts","../src/lib/behaviors/particle-emitter/presets/magic/index.ts","../src/lib/behaviors/particle-emitter/presets/water/drizzle.ts","../src/lib/behaviors/particle-emitter/presets/water/mist.ts","../src/lib/behaviors/particle-emitter/presets/water/splash.ts","../src/lib/behaviors/particle-emitter/presets/water/spray.ts","../src/lib/behaviors/particle-emitter/presets/water/torrent.ts","../src/lib/behaviors/particle-emitter/presets/water/index.ts"],"sourcesContent":["import {\n\tAdditiveBlending,\n\tColor,\n\ttype Blending,\n\ttype ColorRepresentation,\n\ttype Texture,\n} from 'three';\n\nimport { Particles } from './gpu';\nimport type {\n\tColorStop as GpuColorStop,\n\tEaseFunction,\n\tEmitterSettings,\n\tParticleSettings,\n\tParticlesConfig,\n\tRenderSettings,\n} from './gpu';\n\n/**\n * Builds {@link ParticlesConfig} objects for the WebGPU/TSL particle engine\n * ({@link Particles}) from a high-level \"semantic\" description.\n *\n * This module previously targeted the CPU-simulated `three.quarks`\n * `ParticleSystem`. The authoring surface (semantic presets, magic modifiers,\n * option names) is preserved; the output now drives the GPU engine instead.\n *\n * ## three.quarks feature-parity notes\n *\n * The GPU engine simulates each particle from a small set of per-instance\n * values, so several three.quarks behaviors are approximated or unsupported:\n *\n * - `ColorOverLife` -> sampled gradient (`particles.colors`). Per-stop alpha is\n * collapsed into a single fade-in/fade-out window (`fadeAlpha`).\n * - `SizeOverLife` (bezier) -> fade-in/out window (`fadeSize`), approximated\n * from the curve's endpoints.\n * - `SpeedOverLife` (bezier) -> chooses an `easeFunction` (accelerate vs.\n * decelerate); the exact curve is not reproduced.\n * - `ForceOverLife` -> constant `gravity` (midpoint of the configured ranges).\n * - `RotationOverLife` -> per-particle `rotationSpeed`.\n * - Cone/Sphere emitters -> emission direction/position ranges approximating\n * the shape; not an exact volumetric match.\n * - `renderMode` -> only billboard is supported (sprites always face the\n * camera); stretched/mesh/trail modes are ignored.\n * - `Noise`, `OrbitOverLife`, sprite-sheet tiling, and trails -> not supported.\n */\n\n/** Subset of three.quarks `RenderMode` kept for preset-authoring compatibility. */\nexport enum RenderMode {\n\tBillBoard = 0,\n\tStretchedBillBoard = 1,\n\tHorizontalBillBoard = 2,\n\tVerticalBillBoard = 3,\n\tMesh = 4,\n\tTrail = 5,\n}\n\n/** A particle effect factory returning a fresh {@link Particles} object. */\nexport interface ParticleEffectDefinition {\n\tcreate(): Particles;\n}\n\nexport interface ParticlePresetMaterialOptions {\n\ttexture?: Texture;\n\topacity?: number;\n\tdepthWrite?: boolean;\n\talphaTest?: number;\n\tblending?: Blending;\n\tuTileCount?: number;\n\tvTileCount?: number;\n\tblendTiles?: boolean;\n}\n\nexport type NumericRange = number | readonly [number, number];\nexport type CurvePoints = readonly [number, number, number, number];\nexport type ColorStop = readonly [ColorRepresentation, number];\nexport type AlphaStop = readonly [number, number];\n\nexport interface ParticleColorOverLifeConfig {\n\tcolors: readonly ColorStop[];\n\talpha: readonly AlphaStop[];\n}\n\nexport interface ParticleForceOverLifeConfig {\n\tx?: NumericRange;\n\ty?: NumericRange;\n\tz?: NumericRange;\n}\n\nexport interface ParticleNoiseConfig {\n\tfrequency: NumericRange;\n\tpower: NumericRange;\n\tpositionAmount?: NumericRange;\n\trotationAmount?: NumericRange;\n}\n\nexport interface ParticleOrbitConfig {\n\tspeed: NumericRange;\n\taxis?: readonly [number, number, number];\n}\n\nexport interface ParticleBehaviorConfig {\n\tcolorOverLife?: ParticleColorOverLifeConfig;\n\tsizeOverLife?: CurvePoints;\n\tspeedOverLife?: CurvePoints;\n\trotationOverLife?: NumericRange;\n\tforceOverLife?: ParticleForceOverLifeConfig;\n\tnoise?: ParticleNoiseConfig;\n\torbitOverLife?: ParticleOrbitConfig;\n}\n\nexport interface ParticleBehaviorOverrides {\n\tcolorOverLife?: ParticleColorOverLifeConfig | null;\n\tsizeOverLife?: CurvePoints | null;\n\tspeedOverLife?: CurvePoints | null;\n\trotationOverLife?: NumericRange | null;\n\tforceOverLife?: Partial<ParticleForceOverLifeConfig> | null;\n\tnoise?: Partial<ParticleNoiseConfig> | null;\n\torbitOverLife?: Partial<ParticleOrbitConfig> | null;\n}\n\nexport type ParticleShapeConfig =\n\t| { type: 'point' }\n\t| {\n\t\t\ttype: 'cone';\n\t\t\tradius?: number;\n\t\t\tthickness?: number;\n\t\t\tangle?: number;\n\t\t\tspeed?: NumericRange;\n\t }\n\t| {\n\t\t\ttype: 'sphere';\n\t\t\tradius?: number;\n\t\t\tthickness?: number;\n\t\t\tspeed?: NumericRange;\n\t };\n\ntype ParticleEmissionConfig =\n\t| {\n\t\t\ttype: 'burst';\n\t\t\tcount: number;\n\t }\n\t| {\n\t\t\ttype: 'rate';\n\t\t\trate: number;\n\t };\n\ninterface SemanticParticleSystemConfig {\n\tdefaults: {\n\t\tduration: number;\n\t\tlooping?: boolean;\n\t\tworldSpace?: boolean;\n\t\tcolor: ColorRepresentation;\n\t\tlife: NumericRange;\n\t\tsize: NumericRange;\n\t\tspeed: NumericRange;\n\t\trotation?: NumericRange;\n\t\topacity?: number;\n\t\trenderMode?: RenderMode;\n\t};\n\temission: ParticleEmissionConfig;\n\tshape?: ParticleShapeConfig;\n\tbehaviors?: ParticleBehaviorConfig;\n\t/** Reserved for renderer-specific hints; ignored by the GPU engine. */\n\trendererEmitterSettings?: Record<string, unknown>;\n}\n\nexport interface SemanticParticlePresetDefinition<\n\tFamily extends string = string,\n\tVariant extends string = string,\n> {\n\tfamily: Family;\n\tvariant: Variant;\n\tdescription: string;\n\taxes: Readonly<Record<string, string>>;\n\tsystem: SemanticParticleSystemConfig;\n}\n\nexport type ParticleMagicAlignment =\n\t| 'arcane'\n\t| 'holy'\n\t| 'corrupted'\n\t| 'nature'\n\t| 'void'\n\t| 'psychic';\n\nexport type ParticleMagicTemperament =\n\t| 'calm'\n\t| 'ominous'\n\t| 'playful'\n\t| 'regal'\n\t| 'predatory';\n\nexport type ParticleMagicAgency =\n\t| 'passive'\n\t| 'reactive'\n\t| 'seeking'\n\t| 'sentient-feeling';\n\nexport type ParticleMagicOrder = 'geometric' | 'organic' | 'chaotic';\n\nexport type ParticleMagicRealityEffect =\n\t| 'warping'\n\t| 'illuminating'\n\t| 'binding'\n\t| 'decaying'\n\t| 'healing';\n\nexport interface ParticleMagicModifierOptions {\n\talignment: ParticleMagicAlignment;\n\ttemperament?: ParticleMagicTemperament;\n\tagency?: ParticleMagicAgency;\n\torder?: ParticleMagicOrder;\n\trealityEffect?: ParticleMagicRealityEffect;\n\tintensity?: number;\n}\n\nexport type ParticleMagicModifierInput =\n\t| ParticleMagicAlignment\n\t| ParticleMagicModifierOptions;\n\nexport interface SemanticParticlePresetOptions\n\textends ParticlePresetMaterialOptions {\n\tbehaviors?: ParticleBehaviorOverrides;\n\tcolor?: ColorRepresentation;\n\tcount?: number;\n\tduration?: number;\n\temissionRate?: number;\n\tlife?: NumericRange;\n\tlooping?: boolean;\n\tmagic?: ParticleMagicModifierInput;\n\trenderMode?: RenderMode;\n\trendererEmitterSettings?: Record<string, unknown>;\n\trotation?: NumericRange;\n\tshape?: ParticleShapeConfig;\n\tsize?: NumericRange;\n\tspeed?: NumericRange;\n\tworldSpace?: boolean;\n}\n\ninterface MagicPalette {\n\tstart: ColorRepresentation;\n\tmid: ColorRepresentation;\n\tend: ColorRepresentation;\n}\n\nconst DEFAULT_MAGIC_BEHAVIOR_BY_ALIGNMENT: Record<\n\tParticleMagicAlignment,\n\tOmit<ParticleMagicModifierOptions, 'alignment'>\n> = {\n\tarcane: {\n\t\ttemperament: 'regal',\n\t\tagency: 'reactive',\n\t\torder: 'geometric',\n\t\trealityEffect: 'warping',\n\t\tintensity: 1,\n\t},\n\tholy: {\n\t\ttemperament: 'calm',\n\t\tagency: 'passive',\n\t\torder: 'geometric',\n\t\trealityEffect: 'illuminating',\n\t\tintensity: 1,\n\t},\n\tcorrupted: {\n\t\ttemperament: 'ominous',\n\t\tagency: 'seeking',\n\t\torder: 'chaotic',\n\t\trealityEffect: 'decaying',\n\t\tintensity: 1.05,\n\t},\n\tnature: {\n\t\ttemperament: 'calm',\n\t\tagency: 'reactive',\n\t\torder: 'organic',\n\t\trealityEffect: 'healing',\n\t\tintensity: 0.9,\n\t},\n\tvoid: {\n\t\ttemperament: 'ominous',\n\t\tagency: 'seeking',\n\t\torder: 'chaotic',\n\t\trealityEffect: 'warping',\n\t\tintensity: 1.15,\n\t},\n\tpsychic: {\n\t\ttemperament: 'predatory',\n\t\tagency: 'sentient-feeling',\n\t\torder: 'organic',\n\t\trealityEffect: 'binding',\n\t\tintensity: 1,\n\t},\n};\n\nconst MAGIC_PALETTES: Record<ParticleMagicAlignment, MagicPalette> = {\n\tarcane: { start: '#dbeafe', mid: '#60a5fa', end: '#1d4ed8' },\n\tholy: { start: '#fff7d1', mid: '#fde68a', end: '#f59e0b' },\n\tcorrupted: { start: '#bef264', mid: '#84cc16', end: '#4d7c0f' },\n\tnature: { start: '#dcfce7', mid: '#4ade80', end: '#15803d' },\n\tvoid: { start: '#c4b5fd', mid: '#475569', end: '#0f172a' },\n\tpsychic: { start: '#fce7f3', mid: '#f472b6', end: '#db2777' },\n};\n\nexport function particleEffect(create: () => Particles): ParticleEffectDefinition {\n\treturn { create };\n}\n\nexport function defineSemanticParticlePreset<\n\tT extends SemanticParticlePresetDefinition,\n>(preset: T): T {\n\treturn preset;\n}\n\nexport function createMagicModifier(\n\talignment: ParticleMagicAlignment,\n\toverrides: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n): ParticleMagicModifierOptions {\n\treturn {\n\t\talignment,\n\t\t...DEFAULT_MAGIC_BEHAVIOR_BY_ALIGNMENT[alignment],\n\t\t...overrides,\n\t};\n}\n\n/**\n * Builds a {@link ParticlesConfig} from a semantic preset and per-call options,\n * then wraps it in a {@link ParticleEffectDefinition} factory.\n */\nexport function createSemanticParticleEffect(\n\tpreset: SemanticParticlePresetDefinition,\n\toptions: SemanticParticlePresetOptions = {},\n): ParticleEffectDefinition {\n\tconst config = buildParticlesConfig(preset, options);\n\treturn particleEffect(() => new Particles(config));\n}\n\nexport function buildParticlesConfig(\n\tpreset: SemanticParticlePresetDefinition,\n\toptions: SemanticParticlePresetOptions = {},\n): ParticlesConfig {\n\tconst defaults = preset.system.defaults;\n\tconst magic = normalizeMagicModifier(options.magic);\n\tconst resolvedShape = mergeShapeConfig(preset.system.shape, options.shape);\n\tconst baseBehaviors = mergeBehaviorConfig(preset.system.behaviors, options.behaviors);\n\n\tconst baseColor = options.color ?? defaults.color;\n\tconst resolvedColor = magic\n\t\t? mixColors(baseColor, MAGIC_PALETTES[magic.alignment].start, 0.2)\n\t\t: baseColor;\n\tconst behaviors = magic\n\t\t? applyMagicBehaviors(baseBehaviors, resolvedColor, magic)\n\t\t: baseBehaviors;\n\n\tconst duration = options.duration ?? defaults.duration;\n\tconst looping =\n\t\toptions.looping ?? defaults.looping ?? preset.system.emission.type === 'rate';\n\tconst life = toRange(options.life ?? defaults.life);\n\tconst size = toRange(options.size ?? defaults.size);\n\tconst baseSpeed = toRange(options.speed ?? defaults.speed);\n\tconst shapeSpeed = resolvedShape && 'speed' in resolvedShape ? resolvedShape.speed : undefined;\n\tconst speed = shapeSpeed !== undefined ? toRange(addRanges(baseSpeed, shapeSpeed)!) : baseSpeed;\n\n\tconst intensity = magic ? clamp(magic.intensity ?? 1, 0.5, 1.5) : (defaults.opacity ?? 1);\n\n\tconst colors = behaviors?.colorOverLife\n\t\t? [behaviors.colorOverLife.colors.map(([color, stop]) => toGpuColorStop(color, stop))]\n\t\t: [\n\t\t\t\t[\n\t\t\t\t\t{ color: toHexColor(resolvedColor), stop: 0 },\n\t\t\t\t\t{ color: toHexColor(resolvedColor), stop: 1 },\n\t\t\t\t],\n\t\t\t];\n\n\tconst fadeAlpha = behaviors?.colorOverLife\n\t\t? deriveFadeFromAlpha(behaviors.colorOverLife.alpha)\n\t\t: [0.1, 0.85];\n\tconst fadeSize = behaviors?.sizeOverLife\n\t\t? deriveFadeFromSizeCurve(behaviors.sizeOverLife)\n\t\t: [0.15, 0.9];\n\tconst gravity = behaviors?.forceOverLife\n\t\t? forceToGravity(behaviors.forceOverLife)\n\t\t: [0, 0, 0];\n\tconst easeFunction = behaviors?.speedOverLife\n\t\t? speedCurveToEase(behaviors.speedOverLife)\n\t\t: 'easeLinear';\n\n\tconst emission = resolveEmission(preset.system.emission, options, duration, life[1]);\n\tconst direction = shapeToDirection(resolvedShape);\n\tconst startPosition = shapeToStartPosition(resolvedShape);\n\tconst startRotation = rotationToStart(options.rotation ?? defaults.rotation);\n\tconst rotationSpeed = behaviors?.rotationOverLife\n\t\t? rangeToRotationSpeedZ(behaviors.rotationOverLife)\n\t\t: { min: [0, 0, 0] as Vec3, max: [0, 0, 0] as Vec3 };\n\n\tconst blending = (options.blending ?? AdditiveBlending) as RenderSettings['blendingMode'];\n\n\tconst particles: Partial<ParticleSettings> & Pick<ParticleSettings, 'count'> = {\n\t\tcount: emission.count,\n\t\tintensity,\n\t\tfadeSize: fadeSize as [number, number],\n\t\tfadeAlpha: fadeAlpha as [number, number],\n\t\tgravity: gravity as Vec3,\n\t\tcolors,\n\t\teaseFunction,\n\t};\n\tif (options.texture) {\n\t\tparticles.alphaMapsStart = [options.texture] as unknown as ParticleSettings['alphaMapsStart'];\n\t}\n\n\tconst emitter: Partial<EmitterSettings> = {\n\t\tduration,\n\t\trate: emission.rate,\n\t\tspawnMode: emission.spawnMode,\n\t\tloop: looping,\n\t\tstatic: 0,\n\t\tworldUpRight: false,\n\t\tlifetime: life as [number, number],\n\t\tspeed: speed as [number, number],\n\t\tsize: size as [number, number],\n\t\tdirectionMin: direction.min,\n\t\tdirectionMax: direction.max,\n\t\tstartPositionMin: startPosition.min,\n\t\tstartPositionMax: startPosition.max,\n\t\tstartRotationMin: startRotation.min,\n\t\tstartRotationMax: startRotation.max,\n\t\trotationSpeedMin: rotationSpeed.min,\n\t\trotationSpeedMax: rotationSpeed.max,\n\t};\n\n\treturn {\n\t\tparticles,\n\t\temitter,\n\t\trender: { blendingMode: blending },\n\t};\n}\n\ntype Vec3 = [number, number, number];\n\ninterface EmissionResult {\n\tspawnMode: 'time' | 'burst';\n\trate: number;\n\tcount: number;\n}\n\nfunction resolveEmission(\n\temission: ParticleEmissionConfig,\n\toptions: SemanticParticlePresetOptions,\n\tduration: number,\n\tmaxLifetime: number,\n): EmissionResult {\n\tif (emission.type === 'burst') {\n\t\tconst count = Math.max(1, Math.round(options.count ?? emission.count));\n\t\treturn { spawnMode: 'burst', rate: count, count };\n\t}\n\n\tconst perSecond = Math.max(0, options.emissionRate ?? emission.rate);\n\tconst rate = Math.max(1, Math.round(perSecond * Math.max(duration, 0.0001)));\n\tconst simultaneous = Math.ceil(perSecond * Math.max(maxLifetime, 0.0001) * 1.5);\n\tconst count = Math.min(200000, Math.max(rate, simultaneous, 8));\n\treturn { spawnMode: 'time', rate, count };\n}\n\nfunction deriveFadeFromAlpha(alpha: readonly AlphaStop[]): [number, number] {\n\tif (!alpha || alpha.length === 0) return [0.1, 0.85];\n\tconst sorted = [...alpha].sort((a, b) => a[1] - b[1]);\n\tconst maxAlpha = Math.max(...sorted.map(([value]) => value), 0.0001);\n\n\tlet fadeIn = 0.15;\n\tfor (const [value, stop] of sorted) {\n\t\tif (value >= maxAlpha * 0.6) {\n\t\t\tfadeIn = stop;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet fadeOut = 0.85;\n\tfor (const [value, stop] of sorted) {\n\t\tif (value >= maxAlpha * 0.4) fadeOut = stop;\n\t}\n\n\tfadeIn = clamp(fadeIn, 0.02, 0.45);\n\tfadeOut = clamp(fadeOut, 0.55, 0.99);\n\tif (fadeOut <= fadeIn) fadeOut = Math.min(0.99, fadeIn + 0.3);\n\treturn [fadeIn, fadeOut];\n}\n\nfunction deriveFadeFromSizeCurve(points: CurvePoints): [number, number] {\n\tconst start = points[0];\n\tconst end = points[3];\n\tconst fadeIn = start < 0.5 ? 0.25 : 0.02;\n\tconst fadeOut = end < 0.5 ? 0.75 : 0.98;\n\treturn [fadeIn, fadeOut];\n}\n\nfunction forceToGravity(force: ParticleForceOverLifeConfig): Vec3 {\n\tconst mid = (range: NumericRange | undefined): number => {\n\t\tif (range === undefined) return 0;\n\t\tconst [min, max] = toRange(range);\n\t\treturn (min + max) * 0.5;\n\t};\n\treturn [mid(force.x), mid(force.y), mid(force.z)];\n}\n\nfunction speedCurveToEase(points: CurvePoints): EaseFunction {\n\tconst start = points[0];\n\tconst end = points[3];\n\tif (end < start - 0.05) return 'easeOutCubic';\n\tif (end > start + 0.05) return 'easeInCubic';\n\treturn 'easeLinear';\n}\n\nfunction shapeToDirection(shape: ParticleShapeConfig | undefined): { min: Vec3; max: Vec3 } {\n\tif (!shape || shape.type === 'point' || shape.type === 'sphere') {\n\t\treturn { min: [-1, -1, -1], max: [1, 1, 1] };\n\t}\n\tconst angle = shape.angle ?? 0.3;\n\tconst spread = Math.tan(clamp(angle, 0, 1.4));\n\treturn { min: [-spread, 1, -spread], max: [spread, 1, spread] };\n}\n\nfunction shapeToStartPosition(shape: ParticleShapeConfig | undefined): { min: Vec3; max: Vec3 } {\n\tif (!shape || shape.type === 'point') {\n\t\treturn { min: [0, 0, 0], max: [0, 0, 0] };\n\t}\n\tconst r = shape.radius ?? 0;\n\tif (shape.type === 'sphere') {\n\t\treturn { min: [-r, -r, -r], max: [r, r, r] };\n\t}\n\treturn { min: [-r, 0, -r], max: [r, 0, r] };\n}\n\nfunction rotationToStart(rotation: NumericRange | undefined): { min: Vec3; max: Vec3 } {\n\tif (rotation === undefined) {\n\t\treturn { min: [0, 0, 0], max: [0, 0, 0] };\n\t}\n\tconst [min, max] = toRange(rotation);\n\tconst norm = (theta: number) => theta / Math.PI - 1;\n\treturn { min: [0, 0, norm(min)], max: [0, 0, norm(max)] };\n}\n\nfunction rangeToRotationSpeedZ(rotation: NumericRange): { min: Vec3; max: Vec3 } {\n\tconst [min, max] = toRange(rotation);\n\treturn { min: [0, 0, min], max: [0, 0, max] };\n}\n\nfunction toGpuColorStop(color: ColorRepresentation, stop: number): GpuColorStop {\n\treturn { color: toHexColor(color), stop };\n}\n\nfunction normalizeMagicModifier(\n\tinput?: ParticleMagicModifierInput,\n): ParticleMagicModifierOptions | null {\n\tif (!input) return null;\n\tif (typeof input === 'string') return createMagicModifier(input);\n\treturn createMagicModifier(input.alignment, input);\n}\n\nfunction applyMagicBehaviors(\n\tbase: ParticleBehaviorConfig | undefined,\n\tbaseColor: ColorRepresentation,\n\tmagic: ParticleMagicModifierOptions,\n): ParticleBehaviorConfig {\n\tconst intensity = clamp(magic.intensity ?? 1, 0.25, 1.5);\n\tconst palette = MAGIC_PALETTES[magic.alignment];\n\n\treturn {\n\t\t...base,\n\t\tcolorOverLife: tintColorOverLife(base?.colorOverLife, baseColor, palette, intensity),\n\t\trotationOverLife: addRanges(base?.rotationOverLife, resolveMagicRotation(magic, intensity)),\n\t\tforceOverLife: mergeForce(base?.forceOverLife, resolveMagicForce(magic, intensity)),\n\t\tnoise: mergeNoise(base?.noise, resolveMagicNoise(magic, intensity)),\n\t\torbitOverLife: resolveMagicOrbit(magic, intensity) ?? base?.orbitOverLife,\n\t};\n}\n\nfunction resolveMagicRotation(\n\tmagic: ParticleMagicModifierOptions,\n\tintensity: number,\n): NumericRange | undefined {\n\tconst amount = 0.7 + intensity * 1.4;\n\n\tswitch (magic.order) {\n\t\tcase 'geometric':\n\t\t\treturn [amount * 0.45, amount];\n\t\tcase 'organic':\n\t\t\treturn [-amount * 0.55, amount * 0.55];\n\t\tcase 'chaotic':\n\t\t\treturn [-amount * 2.4, amount * 2.4];\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction resolveMagicForce(\n\tmagic: ParticleMagicModifierOptions,\n\tintensity: number,\n): ParticleForceOverLifeConfig | undefined {\n\tconst amount = 0.2 + intensity * 0.55;\n\n\tswitch (magic.realityEffect) {\n\t\tcase 'illuminating':\n\t\tcase 'healing':\n\t\t\treturn { y: [amount * 0.6, amount] };\n\t\tcase 'decaying':\n\t\t\treturn { y: [-amount, -amount * 0.5] };\n\t\tcase 'binding':\n\t\t\treturn { y: [-amount * 0.35, amount * 0.15] };\n\t\tcase 'warping':\n\t\t\treturn { x: [-amount * 0.35, amount * 0.35], z: [-amount * 0.35, amount * 0.35] };\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction resolveMagicNoise(\n\tmagic: ParticleMagicModifierOptions,\n\tintensity: number,\n): ParticleNoiseConfig {\n\tconst calmMultiplier = magic.temperament === 'calm' ? 0.6 : 1;\n\tconst ominousBoost = magic.temperament === 'ominous' ? 1.25 : 1;\n\tconst basePower = (0.08 + intensity * 0.1) * calmMultiplier * ominousBoost;\n\n\tswitch (magic.order) {\n\t\tcase 'geometric':\n\t\t\treturn {\n\t\t\t\tfrequency: [1.5, 3.5],\n\t\t\t\tpower: [basePower * 0.4, basePower * 0.8],\n\t\t\t\tpositionAmount: [0.08, 0.2],\n\t\t\t\trotationAmount: [0.1, 0.2],\n\t\t\t};\n\t\tcase 'organic':\n\t\t\treturn {\n\t\t\t\tfrequency: [2.5, 5.5],\n\t\t\t\tpower: [basePower * 0.7, basePower * 1.2],\n\t\t\t\tpositionAmount: [0.12, 0.3],\n\t\t\t\trotationAmount: [0.14, 0.26],\n\t\t\t};\n\t\tcase 'chaotic':\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfrequency: [4, 8],\n\t\t\t\tpower: [basePower, basePower * 1.7],\n\t\t\t\tpositionAmount: [0.18, 0.38],\n\t\t\t\trotationAmount: [0.18, 0.34],\n\t\t\t};\n\t}\n}\n\nfunction resolveMagicOrbit(\n\tmagic: ParticleMagicModifierOptions,\n\tintensity: number,\n): ParticleOrbitConfig | undefined {\n\tif (magic.order === 'geometric') {\n\t\treturn { speed: [3 + intensity * 2, 6 + intensity * 3], axis: [0, 1, 0] };\n\t}\n\tif (magic.agency === 'sentient-feeling') {\n\t\treturn { speed: [1 + intensity, 2.5 + intensity * 1.2], axis: [0, 1, 0] };\n\t}\n\treturn undefined;\n}\n\nfunction tintColorOverLife(\n\tbase: ParticleColorOverLifeConfig | undefined,\n\tbaseColor: ColorRepresentation,\n\tpalette: MagicPalette,\n\tintensity: number,\n): ParticleColorOverLifeConfig {\n\tif (!base) {\n\t\treturn {\n\t\t\tcolors: [\n\t\t\t\t[mixColors(baseColor, palette.start, 0.25), 0],\n\t\t\t\t[mixColors(baseColor, palette.mid, 0.55), 0.45],\n\t\t\t\t[mixColors(baseColor, palette.end, 0.75), 1],\n\t\t\t],\n\t\t\talpha: [\n\t\t\t\t[0.22, 0],\n\t\t\t\t[1, 0.12],\n\t\t\t\t[0.52 + intensity * 0.08, 0.64],\n\t\t\t\t[0, 1],\n\t\t\t],\n\t\t};\n\t}\n\n\treturn {\n\t\tcolors: base.colors.map(([color, stop], index) => {\n\t\t\tconst target =\n\t\t\t\tindex === 0\n\t\t\t\t\t? palette.start\n\t\t\t\t\t: index === base.colors.length - 1\n\t\t\t\t\t\t? palette.end\n\t\t\t\t\t\t: palette.mid;\n\t\t\tconst amount = index === 0 ? 0.18 : 0.3 + intensity * 0.15;\n\t\t\treturn [mixColors(color, target, amount), stop] as const;\n\t\t}),\n\t\talpha: base.alpha,\n\t};\n}\n\nfunction mergeNoise(\n\tbase: ParticleNoiseConfig | undefined,\n\toverlay: ParticleNoiseConfig | undefined,\n): ParticleNoiseConfig | undefined {\n\tif (!base) return overlay;\n\tif (!overlay) return base;\n\treturn {\n\t\tfrequency: addRanges(base.frequency, overlay.frequency) ?? base.frequency,\n\t\tpower: addRanges(base.power, overlay.power) ?? base.power,\n\t\tpositionAmount: addRanges(base.positionAmount, overlay.positionAmount),\n\t\trotationAmount: addRanges(base.rotationAmount, overlay.rotationAmount),\n\t};\n}\n\nfunction mergeForce(\n\tbase: ParticleForceOverLifeConfig | undefined,\n\toverlay: ParticleForceOverLifeConfig | undefined,\n): ParticleForceOverLifeConfig | undefined {\n\tif (!base) return overlay;\n\tif (!overlay) return base;\n\treturn {\n\t\tx: addRanges(base.x, overlay.x),\n\t\ty: addRanges(base.y, overlay.y),\n\t\tz: addRanges(base.z, overlay.z),\n\t};\n}\n\nfunction mergeBehaviorConfig(\n\tbase: ParticleBehaviorConfig | undefined,\n\toverrides: ParticleBehaviorOverrides | undefined,\n): ParticleBehaviorConfig | undefined {\n\tif (!base && !overrides) return undefined;\n\n\tconst merged: ParticleBehaviorConfig = {};\n\n\tassignIfDefined(merged, 'colorOverLife', resolveOverrideValue(base?.colorOverLife, overrides?.colorOverLife));\n\tassignIfDefined(merged, 'sizeOverLife', resolveOverrideValue(base?.sizeOverLife, overrides?.sizeOverLife));\n\tassignIfDefined(merged, 'speedOverLife', resolveOverrideValue(base?.speedOverLife, overrides?.speedOverLife));\n\tassignIfDefined(merged, 'rotationOverLife', resolveOverrideValue(base?.rotationOverLife, overrides?.rotationOverLife));\n\tassignIfDefined(merged, 'forceOverLife', resolvePartialOverride(base?.forceOverLife, overrides?.forceOverLife));\n\tassignIfDefined(merged, 'noise', resolveNoiseOverride(base?.noise, overrides?.noise));\n\tassignIfDefined(merged, 'orbitOverLife', resolveOrbitOverride(base?.orbitOverLife, overrides?.orbitOverLife));\n\n\treturn Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeShapeConfig(\n\tbase: ParticleShapeConfig | undefined,\n\toverride: ParticleShapeConfig | undefined,\n): ParticleShapeConfig | undefined {\n\tif (!override) return base;\n\tif (!base || override.type !== base.type) return override;\n\tif (override.type === 'point') return override;\n\tif (override.type === 'cone' && base.type === 'cone') return { ...base, ...override };\n\tif (override.type === 'sphere' && base.type === 'sphere') return { ...base, ...override };\n\treturn override;\n}\n\nfunction addRanges(\n\tbase: NumericRange | undefined,\n\toverlay: NumericRange | undefined,\n): NumericRange | undefined {\n\tif (base === undefined) return overlay;\n\tif (overlay === undefined) return base;\n\tconst [baseMin, baseMax] = toRange(base);\n\tconst [overlayMin, overlayMax] = toRange(overlay);\n\treturn [baseMin + overlayMin, baseMax + overlayMax];\n}\n\nfunction resolveOverrideValue<T>(\n\tbase: T | undefined,\n\toverride: T | null | undefined,\n): T | undefined {\n\tif (override === null) return undefined;\n\treturn override ?? base;\n}\n\nfunction resolvePartialOverride<T extends object>(\n\tbase: T | undefined,\n\toverride: Partial<T> | null | undefined,\n): T | undefined {\n\tif (override === null) return undefined;\n\tif (!override) return base;\n\tconst resolved = { ...base, ...override };\n\treturn Object.keys(resolved).length > 0 ? (resolved as T) : undefined;\n}\n\nfunction resolveNoiseOverride(\n\tbase: ParticleNoiseConfig | undefined,\n\toverride: Partial<ParticleNoiseConfig> | null | undefined,\n): ParticleNoiseConfig | undefined {\n\tif (override === null) return undefined;\n\tif (!override) return base;\n\tconst frequency = override.frequency ?? base?.frequency;\n\tconst power = override.power ?? base?.power;\n\tif (frequency === undefined || power === undefined) return undefined;\n\treturn { ...base, ...override, frequency, power };\n}\n\nfunction resolveOrbitOverride(\n\tbase: ParticleOrbitConfig | undefined,\n\toverride: Partial<ParticleOrbitConfig> | null | undefined,\n): ParticleOrbitConfig | undefined {\n\tif (override === null) return undefined;\n\tif (!override) return base;\n\tconst speed = override.speed ?? base?.speed;\n\tif (speed === undefined) return undefined;\n\treturn { ...base, ...override, speed };\n}\n\nfunction assignIfDefined<T extends object, K extends keyof T>(\n\ttarget: T,\n\tkey: K,\n\tvalue: T[K] | undefined,\n) {\n\tif (value !== undefined) target[key] = value;\n}\n\nfunction toHexColor(color: ColorRepresentation): string {\n\treturn `#${new Color(color).getHexString()}`;\n}\n\nfunction toRange(value: NumericRange): readonly [number, number] {\n\tif (Array.isArray(value)) {\n\t\treturn [value[0] ?? 0, value[1] ?? value[0] ?? 0];\n\t}\n\treturn [value as number, value as number];\n}\n\nfunction mixColors(\n\tbase: ColorRepresentation,\n\toverlay: ColorRepresentation,\n\tamount: number,\n): string {\n\tconst color = new Color(base);\n\tcolor.lerp(new Color(overlay), clamp(amount, 0, 1));\n\treturn `#${color.getHexString()}`;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n","/**\n * WebGPU-accelerated particle system using Three.js TSL.\n *\n * Ported/adapted from the `threeparticles` project (MIT). The per-particle\n * simulation (position/rotation/scale/color over life) runs in the node\n * material on the GPU; emission is done on the CPU in `update(delta)`. No\n * renderer/compute access is required, so it ticks from the behavior system\n * exactly like the previous three.quarks `BatchedRenderer` node did.\n *\n * @module\n */\n// @ts-nocheck - TSL types are incompatible with TypeScript\nimport * as THREE from 'three/webgpu';\nimport { texture, uniform, instancedArray } from 'three/tsl';\nimport type { EmitterSettings, ParticlesConfig, ParticleSettings, RenderSettings } from './types';\nimport { EASE_FUNCTIONS } from './types';\nimport { createTextureAtlas, createColorGradientTexture } from './textures';\nimport { createParticleMaterialTemplate } from './nodes';\nimport { randFloat, randInt } from './utils';\n\ninterface ResolvedConfig {\n\tparticles: ParticleSettings;\n\trender: RenderSettings;\n\temitter: EmitterSettings;\n}\n\nexport class Particles extends THREE.Object3D {\n\tprivate mesh: THREE.InstancedMesh;\n\t/** Base object for positioning the emitter. */\n\tpublic base: THREE.Object3D;\n\tprivate debugMesh: THREE.Mesh;\n\tprivate material: THREE.NodeMaterial;\n\tprivate config: ResolvedConfig;\n\n\tprivate uniforms: Record<string, unknown>;\n\tprivate buffers: Record<string, Float32Array>;\n\tprivate attributes: Record<string, unknown>;\n\n\tprivate easingIndex = 0;\n\tprivate alphaMapCount = 0;\n\tprivate emitted = 0;\n\tprivate cursor = 0;\n\t/** Whether the particle system is currently running. */\n\tpublic running = false;\n\n\tconstructor(config: ParticlesConfig, geometry?: THREE.BufferGeometry) {\n\t\tsuper();\n\n\t\tthis.name = 'Particles';\n\t\tthis.type = 'Particles';\n\n\t\tthis.base = new THREE.Object3D();\n\t\tthis.base.name = 'Base';\n\t\tthis.add(this.base);\n\n\t\t// Debug Mesh\n\t\tthis.debugMesh = new THREE.Mesh(\n\t\t\tnew THREE.BoxGeometry(0.2, 0.2, 0.2),\n\t\t\tnew THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true }),\n\t\t);\n\t\tthis.debugMesh.name = 'Debug';\n\t\tthis.base.add(this.debugMesh);\n\n\t\tconst p = config.particles;\n\t\tconst r = config.render ?? {};\n\t\tconst e = config.emitter ?? {};\n\n\t\tthis.config = {\n\t\t\tparticles: {\n\t\t\t\tcount: p.count ?? 1000,\n\t\t\t\tintensity: p.intensity ?? 1,\n\t\t\t\tfadeSize: p.fadeSize ?? [0.1, 0.9],\n\t\t\t\tfadeAlpha: p.fadeAlpha ?? [0.0, 1.0],\n\t\t\t\tfadeAlphaMap: p.fadeAlphaMap ?? [0.0, 1.0],\n\t\t\t\tgravity: p.gravity ?? [0, 0, 0],\n\t\t\t\talphaMapsStart: p.alphaMapsStart ?? [],\n\t\t\t\talphaMapsEnd: p.alphaMapsEnd ?? [],\n\t\t\t\tcolors: p.colors ?? [[{ color: '#ffffff', stop: 0 }]],\n\t\t\t\tappearance: p.appearance ?? 0,\n\t\t\t\teaseFunction: p.easeFunction ?? 'easeLinear',\n\t\t\t},\n\t\t\trender: {\n\t\t\t\talphaMapSize: r.alphaMapSize ?? 256,\n\t\t\t\talphaMapFilter: r.alphaMapFilter ?? THREE.LinearFilter,\n\t\t\t\tfrustumCulled: r.frustumCulled ?? true,\n\t\t\t\tblendingMode: r.blendingMode ?? THREE.AdditiveBlending,\n\t\t\t\tside: r.side ?? THREE.FrontSide,\n\t\t\t\tdepthTest: r.depthTest ?? true,\n\t\t\t},\n\t\t\temitter: {\n\t\t\t\tduration: e.duration ?? 1,\n\t\t\t\trate: e.rate ?? 1000,\n\t\t\t\tspawnMode: e.spawnMode ?? 'time',\n\t\t\t\tstatic: e.static ?? 0.0,\n\t\t\t\tworldUpRight: e.worldUpRight ?? false,\n\t\t\t\tloop: e.loop ?? false,\n\t\t\t\tdelay: e.delay ?? 0,\n\t\t\t\tdebug: e.debug ?? false,\n\t\t\t\tlifetime: e.lifetime ?? [0.1, 1],\n\t\t\t\tspeed: e.speed ?? [5, 20],\n\t\t\t\tsize: e.size ?? [0.1, 1],\n\t\t\t\tstartPositionMin: e.startPositionMin ?? [0, 0, 0],\n\t\t\t\tstartPositionMax: e.startPositionMax ?? [0, 0, 0],\n\t\t\t\tstartRotationMin: e.startRotationMin ?? [0, 0, 0],\n\t\t\t\tstartRotationMax: e.startRotationMax ?? [0, 0, 0],\n\t\t\t\trotationSpeedMin: e.rotationSpeedMin ?? [0, 0, 0],\n\t\t\t\trotationSpeedMax: e.rotationSpeedMax ?? [0, 0, 0],\n\t\t\t\tdirectionMin: e.directionMin ?? [0, 0, 0],\n\t\t\t\tdirectionMax: e.directionMax ?? [0, 0, 0],\n\t\t\t},\n\t\t};\n\n\t\tthis.debugMesh.visible = this.config.emitter.debug;\n\t\tthis.easingIndex = EASE_FUNCTIONS.indexOf(this.config.particles.easeFunction);\n\t\tif (this.easingIndex < 0) this.easingIndex = 0;\n\n\t\tconst alphaMaps = [\n\t\t\t...(this.config.particles.alphaMapsStart ?? []),\n\t\t\t...(this.config.particles.alphaMapsEnd ?? []),\n\t\t];\n\t\tthis.alphaMapCount = alphaMaps.length;\n\n\t\tlet atlas: THREE.Texture | null = null;\n\t\tif (alphaMaps.length > 0) {\n\t\t\tatlas = createTextureAtlas(\n\t\t\t\talphaMaps,\n\t\t\t\tundefined,\n\t\t\t\tthis.config.render.alphaMapSize,\n\t\t\t\tthis.config.render.alphaMapFilter,\n\t\t\t);\n\t\t} else {\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tatlas = new THREE.CanvasTexture(canvas);\n\t\t}\n\n\t\tconst colorGradientTexture = createColorGradientTexture(this.config.particles.colors, 128);\n\n\t\tthis.uniforms = {\n\t\t\tcursor: uniform(0),\n\t\t\trate: uniform(0),\n\t\t\tuTime: uniform(0),\n\t\t\tuPosition: uniform(this.base.position),\n\t\t\talphaMap: texture(atlas),\n\t\t\tuColorGradient: texture(colorGradientTexture),\n\t\t};\n\n\t\tconst defaultGeometry = geometry ?? new THREE.PlaneGeometry(0.5, 0.5);\n\t\tconst count = this.config.particles.count;\n\n\t\tthis.buffers = {\n\t\t\tinstanceLifetime: new Float32Array(count * 2),\n\t\t\tinstance: new Float32Array(count * 7),\n\t\t\tinstanceDirection: new Float32Array(count * 3),\n\t\t\tinstanceRotationSpeed: new Float32Array(count * 3),\n\t\t\tinstanceAlphaMapUVOffset: new Float32Array(count * 2),\n\t\t\tinstanceSpeed: new Float32Array(count),\n\t\t};\n\n\t\tthis.attributes = {\n\t\t\tinstanceLifetime: instancedArray(this.buffers.instanceLifetime, 'float'),\n\t\t\tinstance: instancedArray(this.buffers.instance, 'float'),\n\t\t\tinstanceDirection: instancedArray(this.buffers.instanceDirection, 'float'),\n\t\t\tinstanceRotationSpeed: instancedArray(this.buffers.instanceRotationSpeed, 'float'),\n\t\t\tinstanceAlphaMapUVOffset: instancedArray(this.buffers.instanceAlphaMapUVOffset, 'float'),\n\t\t\tinstanceSpeed: instancedArray(this.buffers.instanceSpeed, 'float'),\n\t\t};\n\n\t\tthis.material = this.createMaterial();\n\t\tthis.mesh = new THREE.InstancedMesh(defaultGeometry, this.material, count);\n\n\t\tthis.mesh.userData = {\n\t\t\tattributes: this.attributes,\n\t\t\tuniforms: this.uniforms,\n\t\t\tconfig: this.config,\n\t\t\talphaMapCount: this.alphaMapCount,\n\t\t\teasingIndex: this.easingIndex,\n\t\t};\n\n\t\tthis.add(this.mesh);\n\t\tthis.mesh.frustumCulled = this.config.render.frustumCulled ?? false;\n\t}\n\n\tprivate createMaterial(): THREE.NodeMaterial {\n\t\tconst _mat = createParticleMaterialTemplate();\n\t\t_mat.blending = this.config.render.blendingMode;\n\t\t_mat.premultipliedAlpha =\n\t\t\tthis.config.render.blendingMode === THREE.SubtractiveBlending ||\n\t\t\tthis.config.render.blendingMode === THREE.MultiplyBlending;\n\t\t_mat.depthWrite = false;\n\t\t_mat.side = this.config.render.side;\n\t\t_mat.depthTest = this.config.render.depthTest;\n\t\t_mat.transparent = true;\n\t\treturn _mat;\n\t}\n\n\t/** Starts the particle system from the beginning. */\n\tpublic start(): void {\n\t\tthis.running = true;\n\t\tthis.uniforms.uTime.value = 0;\n\t\tthis.cursor = 0;\n\t\tthis.emitted = 0;\n\t\tthis.visible = true;\n\t\tthis.mesh.visible = true;\n\t\tthis.attributes.instanceLifetime.value.array.fill(0);\n\t}\n\n\t/** Restarts (alias for start). */\n\tpublic restart(): void {\n\t\tthis.start();\n\t}\n\n\t/** Pauses the particle system, keeping current state. */\n\tpublic pause(): void {\n\t\tthis.running = false;\n\t}\n\n\t/** Resumes a paused system without resetting its state. */\n\tpublic resume(): void {\n\t\tthis.running = true;\n\t\tthis.visible = true;\n\t\tthis.mesh.visible = true;\n\t}\n\n\t/** Stops the particle system and hides it. */\n\tpublic stop(): void {\n\t\tthis.running = false;\n\t\tthis.visible = false;\n\t\tthis.mesh.visible = false;\n\t}\n\n\t/** Whether emission loops continuously. */\n\tpublic get looping(): boolean {\n\t\treturn this.config.emitter.loop;\n\t}\n\n\t/**\n\t * For non-looping systems, whether all emitted particles have aged past\n\t * their maximum lifetime (so the effect is visually finished).\n\t */\n\tpublic isComplete(): boolean {\n\t\tif (this.config.emitter.loop) return false;\n\t\tconst e = this.config.emitter;\n\t\tconst maxLifetime = e.lifetime[1];\n\t\tconst endTime = e.delay + e.duration + maxLifetime;\n\t\treturn this.emitted >= e.rate && this.uniforms.uTime.value > endTime;\n\t}\n\n\t/** Updates the particle system. Call each frame. */\n\tpublic update(delta: number): void {\n\t\tthis.mesh.visible = this.visible;\n\t\tif (!this.running) return;\n\t\tthis._update();\n\t\tthis.uniforms.uTime.value += delta;\n\t}\n\n\tprivate _compute(i: number): void {\n\t\tconst { emitter } = this.config;\n\t\tconst pos = this.uniforms.uPosition.value;\n\t\tconst dynamicFactor = 1 - emitter.static;\n\n\t\tconst inst = this.attributes.instance.value.array;\n\t\tconst i7 = i * 7;\n\t\tinst[i7 + 0] =\n\t\t\trandFloat(emitter.startPositionMin[0], emitter.startPositionMax[0]) + pos.x * dynamicFactor;\n\t\tinst[i7 + 1] =\n\t\t\trandFloat(emitter.startPositionMin[1], emitter.startPositionMax[1]) + pos.y * dynamicFactor;\n\t\tinst[i7 + 2] =\n\t\t\trandFloat(emitter.startPositionMin[2], emitter.startPositionMax[2]) + pos.z * dynamicFactor;\n\t\tinst[i7 + 3] = randFloat(emitter.startRotationMin[0], emitter.startRotationMax[0]);\n\t\tinst[i7 + 4] = randFloat(emitter.startRotationMin[1], emitter.startRotationMax[1]);\n\t\tinst[i7 + 5] = randFloat(emitter.startRotationMin[2], emitter.startRotationMax[2]);\n\t\tinst[i7 + 6] = randFloat(emitter.size[0], emitter.size[1]);\n\n\t\tconst i3 = i * 3;\n\t\tconst dir = this.attributes.instanceDirection.value.array;\n\t\tdir[i3 + 0] = randFloat(emitter.directionMin[0], emitter.directionMax[0]);\n\t\tdir[i3 + 1] = randFloat(emitter.directionMin[1], emitter.directionMax[1]);\n\t\tdir[i3 + 2] = randFloat(emitter.directionMin[2], emitter.directionMax[2]);\n\n\t\tconst rotSpeed = this.attributes.instanceRotationSpeed.value.array;\n\t\trotSpeed[i3 + 0] = randFloat(emitter.rotationSpeedMin[0], emitter.rotationSpeedMax[0]);\n\t\trotSpeed[i3 + 1] = randFloat(emitter.rotationSpeedMin[1], emitter.rotationSpeedMax[1]);\n\t\trotSpeed[i3 + 2] = randFloat(emitter.rotationSpeedMin[2], emitter.rotationSpeedMax[2]);\n\n\t\tconst i2 = i * 2;\n\t\tconst lifetime = this.attributes.instanceLifetime.value.array;\n\t\tlifetime[i2 + 0] = this.uniforms.uTime.value;\n\t\tlifetime[i2 + 1] = randFloat(emitter.lifetime[0], emitter.lifetime[1]);\n\n\t\tconst startCount = this.config.particles.alphaMapsStart?.length ?? 0;\n\t\tconst endCount = this.config.particles.alphaMapsEnd?.length ?? 0;\n\t\tconst startIdx = startCount > 0 ? randInt(0, startCount - 1) : 0;\n\t\tlet endIdx = 0;\n\t\tif (endCount > 0) {\n\t\t\tendIdx = startCount + randInt(0, endCount - 1);\n\t\t} else if (startCount > 0) {\n\t\t\tendIdx = randInt(0, startCount - 1);\n\t\t}\n\t\tconst alphaOffset = this.attributes.instanceAlphaMapUVOffset.value.array;\n\t\talphaOffset[i2 + 0] = startIdx;\n\t\talphaOffset[i2 + 1] = endIdx;\n\n\t\tthis.attributes.instanceSpeed.value.array[i] = randFloat(emitter.speed[0], emitter.speed[1]);\n\t}\n\n\tprivate _update(): void {\n\t\tconst loop = this.config.emitter.loop;\n\t\tconst spawnMode = this.config.emitter.spawnMode;\n\t\tconst maxParticlesTotal = this.config.particles.count;\n\t\tconst maxParticles = this.config.emitter.rate;\n\t\tconst duration = this.config.emitter.duration;\n\t\tconst delay = this.config.emitter.delay;\n\n\t\tconst amount =\n\t\t\tspawnMode === 'burst'\n\t\t\t\t? maxParticles\n\t\t\t\t: Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.floor(((this.uniforms.uTime.value - delay) / duration) * maxParticles),\n\t\t\t\t\t);\n\n\t\tconst rate = amount - this.emitted;\n\n\t\tif (this.emitted >= maxParticles && !loop) return;\n\n\t\tif (spawnMode === 'time') {\n\t\t\tif (this.cursor >= maxParticlesTotal) this.cursor = 0;\n\t\t\tthis.uniforms.cursor.value = this.cursor;\n\t\t\tthis.uniforms.rate.value = rate;\n\t\t}\n\n\t\tfor (let _i = this.cursor; _i < this.cursor + rate; _i++) {\n\t\t\tthis._compute(_i % maxParticlesTotal);\n\t\t}\n\n\t\tthis.attributes.instance.value.needsUpdate = true;\n\t\tthis.attributes.instanceDirection.value.needsUpdate = true;\n\t\tthis.attributes.instanceRotationSpeed.value.needsUpdate = true;\n\t\tthis.attributes.instanceLifetime.value.needsUpdate = true;\n\t\tthis.attributes.instanceAlphaMapUVOffset.value.needsUpdate = true;\n\t\tthis.attributes.instanceSpeed.value.needsUpdate = true;\n\n\t\tif (spawnMode === 'time') {\n\t\t\tthis.cursor += rate;\n\t\t\tthis.cursor = this.cursor % maxParticlesTotal;\n\t\t}\n\n\t\tthis.emitted += rate;\n\t}\n\n\t/** Updates configuration at runtime (shallow per-section merge). */\n\tpublic updateConfig(config: Partial<ParticlesConfig>): void {\n\t\tif (config.particles) Object.assign(this.config.particles, config.particles);\n\t\tif (config.render) Object.assign(this.config.render, config.render);\n\t\tif (config.emitter) Object.assign(this.config.emitter, config.emitter);\n\t}\n\n\t/** Disposes of all resources used by the particle system. */\n\tpublic dispose(): void {\n\t\tthis.stop();\n\t\tthis.mesh.geometry.dispose();\n\t\tthis.material.dispose();\n\t}\n}\n","import type * as THREE from 'three/webgpu';\n\n/**\n * GPU particle engine configuration types.\n *\n * Ported/adapted from the `threeparticles` project (MIT) — a WebGPU/TSL\n * particle system — to replace the previous three.quarks backend. Editor-only\n * export types from the original are omitted.\n */\n\n/** Color stop definition for gradient textures. */\nexport interface ColorStop {\n\t/** CSS color string (hex, rgb, named color, etc.) */\n\tcolor: string;\n\t/** Position in gradient from 0 to 1 */\n\tstop: number;\n}\n\n/** Available easing function identifiers. */\nexport type EaseFunction =\n\t| 'easeLinear'\n\t| 'easeInPower1'\n\t| 'easeOutPower1'\n\t| 'easeInOutPower1'\n\t| 'easeInPower2'\n\t| 'easeOutPower2'\n\t| 'easeInOutPower2'\n\t| 'easeInPower3'\n\t| 'easeOutPower3'\n\t| 'easeInOutPower3'\n\t| 'easeInPower4'\n\t| 'easeOutPower4'\n\t| 'easeInOutPower4'\n\t| 'easeInQuad'\n\t| 'easeOutQuad'\n\t| 'easeInOutQuad'\n\t| 'easeInCubic'\n\t| 'easeOutCubic'\n\t| 'easeInOutCubic'\n\t| 'easeInQuart'\n\t| 'easeOutQuart'\n\t| 'easeInOutQuart'\n\t| 'easeInQuint'\n\t| 'easeOutQuint'\n\t| 'easeInOutQuint'\n\t| 'easeInSine'\n\t| 'easeOutSine'\n\t| 'easeInOutSine'\n\t| 'easeInExpo'\n\t| 'easeOutExpo'\n\t| 'easeInOutExpo'\n\t| 'easeInCirc'\n\t| 'easeOutCirc'\n\t| 'easeInOutCirc'\n\t| 'easeInElastic'\n\t| 'easeOutElastic'\n\t| 'easeInOutElastic'\n\t| 'easeInBack'\n\t| 'easeOutBack'\n\t| 'easeInOutBack';\n\n/** All easing function names, ordered by shader ID. */\nexport const EASE_FUNCTIONS: EaseFunction[] = [\n\t'easeLinear',\n\t'easeInPower1',\n\t'easeOutPower1',\n\t'easeInOutPower1',\n\t'easeInPower2',\n\t'easeOutPower2',\n\t'easeInOutPower2',\n\t'easeInPower3',\n\t'easeOutPower3',\n\t'easeInOutPower3',\n\t'easeInPower4',\n\t'easeOutPower4',\n\t'easeInOutPower4',\n\t'easeInQuad',\n\t'easeOutQuad',\n\t'easeInOutQuad',\n\t'easeInCubic',\n\t'easeOutCubic',\n\t'easeInOutCubic',\n\t'easeInQuart',\n\t'easeOutQuart',\n\t'easeInOutQuart',\n\t'easeInQuint',\n\t'easeOutQuint',\n\t'easeInOutQuint',\n\t'easeInSine',\n\t'easeOutSine',\n\t'easeInOutSine',\n\t'easeInExpo',\n\t'easeOutExpo',\n\t'easeInOutExpo',\n\t'easeInCirc',\n\t'easeOutCirc',\n\t'easeInOutCirc',\n\t'easeInElastic',\n\t'easeOutElastic',\n\t'easeInOutElastic',\n\t'easeInBack',\n\t'easeOutBack',\n\t'easeInOutBack',\n];\n\n/** Particle shape rendering modes. */\nexport enum AppearanceMode {\n\t/** Square/quad particles */\n\tSquare = 0,\n\t/** Circular particles with soft edges */\n\tCircular = 1,\n}\n\n/** Configuration for particle visual appearance and behavior. */\nexport interface ParticleSettings {\n\t/** Maximum number of particles in the system */\n\tcount: number;\n\t/** Color intensity multiplier (1.0 = normal) */\n\tintensity: number;\n\t/** Size fade range [start, end] as progress values (0-1) */\n\tfadeSize: [min: number, max: number];\n\t/** Alpha fade range [start, end] as progress values (0-1) */\n\tfadeAlpha: [min: number, max: number];\n\t/** Alpha map morph range [start, end] as progress values (0-1) */\n\tfadeAlphaMap: [min: number, max: number];\n\t/** World-space gravity force [x, y, z] */\n\tgravity: [x: number, y: number, z: number];\n\t/** Alpha map textures for particle start state */\n\talphaMapsStart?: THREE.Texture[];\n\t/** Alpha map textures for particle end state */\n\talphaMapsEnd?: THREE.Texture[];\n\t/** Color gradient definitions per row */\n\tcolors: ColorStop[][];\n\t/** Particle shape mode */\n\tappearance: AppearanceMode;\n\t/** Easing function for particle animation */\n\teaseFunction: EaseFunction;\n}\n\n/** Configuration for WebGPU rendering settings. */\nexport interface RenderSettings {\n\t/** Size of each alpha map slot in the texture atlas (pixels) */\n\talphaMapSize: number;\n\t/** Texture filtering mode for alpha maps */\n\talphaMapFilter: THREE.MagnificationTextureFilter;\n\t/** Enable frustum culling for the particle mesh */\n\tfrustumCulled: boolean;\n\t/** Blending mode for particle rendering */\n\tblendingMode: THREE.Blending;\n\t/** Which side of faces to render */\n\tside: THREE.Side;\n\t/** Enable depth testing */\n\tdepthTest: boolean;\n}\n\n/** Configuration for particle emission behavior. */\nexport interface EmitterSettings {\n\t/** Total duration of emission in seconds */\n\tduration: number;\n\t/** Number of particles to emit per cycle */\n\trate: number;\n\t/** Emission timing mode: \"time\" spreads over duration, \"burst\" emits all at once */\n\tspawnMode: 'time' | 'burst';\n\t/** Static position blend (0 = dynamic, 1 = static at spawn position) */\n\tstatic: number;\n\t/** Apply world up-right correction during animation */\n\tworldUpRight: boolean;\n\t/** Loop the emission continuously */\n\tloop: boolean;\n\t/** Delay before first emission in seconds */\n\tdelay: number;\n\t/** Show debug wireframe mesh at emitter position */\n\tdebug: boolean;\n\t/** Particle lifetime range [min, max] in seconds */\n\tlifetime: [min: number, max: number];\n\t/** Speed range [min, max] in units per second */\n\tspeed: [min: number, max: number];\n\t/** Size range [min, max] */\n\tsize: [min: number, max: number];\n\t/** Minimum spawn position offset [x, y, z] */\n\tstartPositionMin: [x: number, y: number, z: number];\n\t/** Maximum spawn position offset [x, y, z] */\n\tstartPositionMax: [x: number, y: number, z: number];\n\t/** Minimum initial rotation [x, y, z] normalized -1 to 1 */\n\tstartRotationMin: [x: number, y: number, z: number];\n\t/** Maximum initial rotation [x, y, z] normalized -1 to 1 */\n\tstartRotationMax: [x: number, y: number, z: number];\n\t/** Minimum rotation speed [x, y, z] in radians per second */\n\trotationSpeedMin: [x: number, y: number, z: number];\n\t/** Maximum rotation speed [x, y, z] in radians per second */\n\trotationSpeedMax: [x: number, y: number, z: number];\n\t/** Minimum emission direction [x, y, z] */\n\tdirectionMin: [x: number, y: number, z: number];\n\t/** Maximum emission direction [x, y, z] */\n\tdirectionMax: [x: number, y: number, z: number];\n}\n\n/**\n * Complete particle system configuration. All sections are deep-partial at the\n * authoring boundary; the {@link Particles} constructor fills defaults.\n */\nexport interface ParticlesConfig {\n\tparticles: Partial<ParticleSettings> & Pick<ParticleSettings, 'count'>;\n\trender?: Partial<RenderSettings>;\n\temitter?: Partial<EmitterSettings>;\n}\n","import * as THREE from 'three/webgpu';\nimport type { ColorStop } from './types';\n\n/**\n * Texture helpers for the GPU particle engine. Ported from `threeparticles` (MIT).\n *\n * Both helpers use a 2D canvas, so they run only in a DOM/browser environment\n * (which is where WebGPU rendering happens anyway).\n */\n\n/**\n * Combines multiple textures into a horizontal atlas strip.\n *\n * @returns Combined canvas texture, or null if no textures provided.\n */\nexport function createTextureAtlas(\n\ttextures: THREE.Texture[],\n\tonLoad?: () => void,\n\tsize = 512,\n\tfilter?: THREE.MagnificationTextureFilter,\n): THREE.CanvasTexture | null {\n\tif (!textures || textures.length === 0) return null;\n\n\tconst canvas = document.createElement('canvas');\n\tconst ctx = canvas.getContext('2d')!;\n\n\tconst count = textures.length;\n\tcanvas.width = size * count;\n\tcanvas.height = size;\n\n\tlet loadedCount = 0;\n\tlet imagesLoaded = 0;\n\n\ttextures.forEach((texture, i) => {\n\t\tconst img = texture.image as HTMLImageElement;\n\t\tif (img && img.complete && img.width > 0) {\n\t\t\tctx.drawImage(img, i * size, 0, size, size);\n\t\t\timagesLoaded++;\n\t\t} else {\n\t\t\tconst checkAndDraw = () => {\n\t\t\t\tconst ready = texture.image as HTMLImageElement;\n\t\t\t\tif (ready && ready.complete && ready.width > 0) {\n\t\t\t\t\tctx.drawImage(ready, i * size, 0, size, size);\n\t\t\t\t\tloadedCount++;\n\t\t\t\t\tif (loadedCount === count - imagesLoaded) {\n\t\t\t\t\t\tatlasTexture.needsUpdate = true;\n\t\t\t\t\t\tif (onLoad) onLoad();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(checkAndDraw, 100);\n\t\t\t\t}\n\t\t\t};\n\t\t\tcheckAndDraw();\n\t\t}\n\t});\n\n\tconst atlasTexture = new THREE.CanvasTexture(canvas);\n\tif (filter !== undefined) {\n\t\tatlasTexture.minFilter = filter;\n\t\tatlasTexture.magFilter = filter;\n\t}\n\tatlasTexture.needsUpdate = true;\n\n\treturn atlasTexture;\n}\n\n/**\n * Builds a gradient lookup texture (one row per color-stop array) sampled by\n * the particle material to color particles over their lifetime progress.\n */\nexport function createColorGradientTexture(\n\trows: ColorStop[][],\n\twidth = 512,\n): THREE.CanvasTexture {\n\tlet safeRows = rows;\n\tif (!safeRows || safeRows.length === 0) safeRows = [[{ color: 'white', stop: 0 }]];\n\n\tconst normalized = safeRows.map((row) => {\n\t\tconst sorted = [...row].sort((a, b) => a.stop - b.stop);\n\t\tif (sorted[0]!.stop > 0) sorted.unshift({ color: sorted[0]!.color, stop: 0 });\n\t\tif (sorted[sorted.length - 1]!.stop < 1)\n\t\t\tsorted.push({ color: sorted[sorted.length - 1]!.color, stop: 1 });\n\t\treturn sorted;\n\t});\n\n\tconst canvas = document.createElement('canvas');\n\tconst ctx = canvas.getContext('2d')!;\n\tcanvas.width = width;\n\tcanvas.height = normalized.length;\n\n\tfor (let y = 0; y < normalized.length; y++) {\n\t\tconst stops = normalized[y]!;\n\t\tconst g = ctx.createLinearGradient(0, 0, width, 0);\n\t\tfor (const s of stops) g.addColorStop(THREE.MathUtils.clamp(s.stop, 0, 1), s.color);\n\t\tctx.fillStyle = g;\n\t\tctx.fillRect(0, y, width, 1);\n\t}\n\n\tconst tex = new THREE.CanvasTexture(canvas);\n\ttex.minFilter = THREE.LinearFilter;\n\ttex.magFilter = THREE.LinearFilter;\n\ttex.wrapS = THREE.ClampToEdgeWrapping;\n\ttex.wrapT = THREE.ClampToEdgeWrapping;\n\ttex.needsUpdate = true;\n\n\treturn tex;\n}\n","/**\n * TSL shader nodes for WebGPU based particle computation.\n * Handle position, rotation, scale, and color on the GPU from storage buffers.\n *\n * Ported from the `threeparticles` project (MIT).\n * @module\n */\n// @ts-nocheck - TSL types are incompatible with TypeScript\nimport * as THREE from 'three/webgpu';\nimport {\n\tnormalize,\n\tmax,\n\tvarying,\n\tIf,\n\tdistance,\n\tDiscard,\n\tselect,\n\tlength,\n\trange,\n\tinstanceIndex,\n\tvec3,\n\tfloat,\n\tmix,\n\ttexture,\n\tvec4,\n\tFn,\n\tvec2,\n\tsmoothstep,\n\tuv,\n\tuint,\n\tmodelWorldMatrix,\n\ttranspose,\n\tmat3,\n\tbool,\n} from 'three/tsl';\nimport { applyEasing } from './easing';\n\n// Instance index multipliers for accessing packed buffer data\nconst idx7 = instanceIndex.mul(7);\nconst idx3 = instanceIndex.mul(3);\nconst idx2 = instanceIndex.mul(2);\n\n/** Varying progress value shared between shader nodes */\nconst vProgress = varying(float(0), 'vProgress');\n\n/** TSL node for computing particle position based on time, velocity, and gravity. */\nconst positionNode = /*@__PURE__*/ Fn(\n\t([pos, age, duration, vProgress, uGravity, dir, speed, worldUpRight, easingIndex]) => {\n\t\tconst progress = age.div(duration);\n\t\tconst _pos = vec3(pos);\n\n\t\tIf(progress.lessThan(0.0).or(progress.greaterThan(1.0)), () => {\n\t\t\tvProgress.assign(1.0);\n\t\t\t_pos.assign(vec3(0, 9999, 0));\n\t\t}).Else(() => {\n\t\t\tvProgress.assign(applyEasing(progress, easingIndex));\n\t\t\tconst normalizedDirection = select(length(dir).greaterThan(0), normalize(dir), vec3(0));\n\t\t\tconst gravityForce = uGravity.mul(0.5).mul(age.mul(age));\n\t\t\tconst easedAge = vProgress.mul(duration);\n\t\t\tconst offset = normalizedDirection.mul(easedAge).mul(speed).add(gravityForce);\n\n\t\t\tIf(worldUpRight, () => {\n\t\t\t\tconst m = mat3(modelWorldMatrix);\n\t\t\t\tconst rot = mat3(normalize(m[0]), normalize(m[1]), normalize(m[2]));\n\t\t\t\tconst inverseRotation = transpose(rot);\n\t\t\t\tconst worldOffset = inverseRotation.mul(offset);\n\t\t\t\tconst blendedOffset = mix(offset, worldOffset, vProgress);\n\t\t\t\t_pos.addAssign(blendedOffset);\n\t\t\t}).Else(() => {\n\t\t\t\t_pos.addAssign(offset);\n\t\t\t});\n\t\t});\n\n\t\treturn _pos;\n\t},\n);\n\n/** TSL node for computing particle rotation over time. */\nconst rotationNode = /*@__PURE__*/ Fn(([rot, rotSpeed, age]) => {\n\tconst tau = float(Math.PI * 2.0).toConst();\n\tconst init = rot.z.add(1.0).mul(0.5).mul(tau);\n\tconst angle = init.add(rotSpeed.z.mul(age));\n\tconst wrapped = angle.mod(tau);\n\treturn wrapped.add(tau).mod(tau);\n});\n\n/** TSL node for computing particle scale with fade. */\nconst scaleNode = /*@__PURE__*/ Fn(([fadeSize, scale, vProgress]) => {\n\tconst uFadeSize = vec2(fadeSize[0], fadeSize[1]).toVar();\n\treturn smoothstep(0.0, uFadeSize.x, vProgress)\n\t\t.mul(smoothstep(1.01, uFadeSize.y, vProgress))\n\t\t.mul(scale);\n});\n\n/** TSL node for computing particle color with gradient lookup and alpha mapping. */\nconst colorNode = /*@__PURE__*/ Fn(\n\t([\n\t\tcolors,\n\t\tintensity,\n\t\tfadeAlpha,\n\t\tfadeAlphaMap,\n\t\tvProgress,\n\t\tuColorGradient,\n\t\tuAlphaMapCount,\n\t\tvAlphaMapUVOffsetX,\n\t\tvAlphaMapUVOffsetY,\n\t\talphaMap,\n\t]) => {\n\t\tconst vColorGradientRow = range(0, colors.length - 1).toVar();\n\t\tconst uColorGradientRows = float(colors.length).toVar();\n\t\tconst uIntensity = float(intensity).toVar();\n\t\tconst uFadeAlpha = vec2(fadeAlpha[0], fadeAlpha[1]).toVar();\n\t\tconst uFadeAlphaMap = vec2(fadeAlphaMap[0], fadeAlphaMap[1]).toVar();\n\n\t\tconst u = vProgress;\n\t\tconst v = vColorGradientRow.add(0.5).div(max(uColorGradientRows, 1.0));\n\t\tconst finalColor = uColorGradient.sample(vec2(u, v)).rgb;\n\t\tfinalColor.mulAssign(uIntensity);\n\n\t\tconst alpha = smoothstep(0.0, uFadeAlpha.x, vProgress).mul(\n\t\t\tsmoothstep(1.01, uFadeAlpha.y, vProgress),\n\t\t);\n\n\t\tconst vUv = uv();\n\n\t\tIf(uAlphaMapCount.equal(0), () => {\n\t\t\tconst center = vec2(0.5).toVar();\n\t\t\tconst dist = distance(vUv, center);\n\t\t\tconst radius = float(0.5);\n\t\t\tconst feather = float(0.98);\n\t\t\tconst _alpha = float(1.0).sub(smoothstep(radius.sub(feather), radius, dist));\n\t\t\talpha.assign(_alpha.mul(alpha));\n\t\t\tIf(_alpha.lessThan(0.01), () => Discard());\n\t\t}).ElseIf(uAlphaMapCount.greaterThan(0), () => {\n\t\t\tconst startU = vAlphaMapUVOffsetX.add(vUv.x).div(uAlphaMapCount);\n\t\t\tconst startUV = vec2(startU, vUv.y);\n\t\t\tconst startAlpha = alphaMap.sample(startUV).a;\n\n\t\t\tIf(uAlphaMapCount.greaterThan(1), () => {\n\t\t\t\tconst endU = vAlphaMapUVOffsetY.add(vUv.x).div(uAlphaMapCount);\n\t\t\t\tconst endUV = vec2(endU, vUv.y);\n\t\t\t\tconst endAlpha = alphaMap.sample(endUV).a;\n\t\t\t\tconst morphProgress = smoothstep(uFadeAlphaMap.x, uFadeAlphaMap.y, vProgress);\n\t\t\t\tconst morphedAlpha = mix(startAlpha, endAlpha, morphProgress);\n\t\t\t\talpha.assign(morphedAlpha.mul(alpha));\n\t\t\t}).Else(() => {\n\t\t\t\talpha.assign(startAlpha.mul(alpha));\n\t\t\t});\n\t\t});\n\n\t\treturn vec4(finalColor, alpha);\n\t},\n);\n\n/** Custom THREE.Node for instance position computation. */\nclass InstancePositionNode extends THREE.Node {\n\tconstructor() {\n\t\tsuper('vec3');\n\t\tthis.updateType = THREE.NodeUpdateType.OBJECT;\n\t}\n\n\tsetup(frame) {\n\t\tconst mesh = frame.object;\n\t\tconst { attributes, uniforms, config, easingIndex } = mesh.userData;\n\n\t\tconst uPosition = uniforms.uPosition;\n\n\t\tconst _static = float(config.emitter.static).toVar();\n\t\tconst posX = attributes.instance.element(idx7.add(0));\n\t\tconst posY = attributes.instance.element(idx7.add(1));\n\t\tconst posZ = attributes.instance.element(idx7.add(2));\n\t\tconst pos = vec3(posX, posY, posZ).add(uPosition.mul(_static));\n\n\t\tconst dirX = attributes.instanceDirection.element(idx3.add(0));\n\t\tconst dirY = attributes.instanceDirection.element(idx3.add(1));\n\t\tconst dirZ = attributes.instanceDirection.element(idx3.add(2));\n\t\tconst dir = vec3(dirX, dirY, dirZ);\n\n\t\tconst time = uniforms.uTime;\n\t\tconst uGravity = vec3(...config.particles.gravity);\n\n\t\tconst worldUpRight = bool(config.emitter.worldUpRight);\n\n\t\tconst startTime = attributes.instanceLifetime.element(idx2.add(0));\n\t\tconst duration = attributes.instanceLifetime.element(idx2.add(1));\n\n\t\tconst speed = attributes.instanceSpeed.element(instanceIndex).toVar();\n\t\tconst age = select(speed.lessThan(0.0), duration.sub(time.sub(startTime)), time.sub(startTime));\n\n\t\treturn positionNode(pos, age, duration, vProgress, uGravity, dir, speed, worldUpRight, easingIndex);\n\t}\n}\n\n/** Custom THREE.Node for instance rotation computation. */\nclass InstanceRotationNode extends THREE.Node {\n\tconstructor() {\n\t\tsuper('vec3');\n\t\tthis.updateType = THREE.NodeUpdateType.OBJECT;\n\t}\n\n\tsetup(frame) {\n\t\tconst mesh = frame.object;\n\t\tconst { attributes, uniforms } = mesh.userData;\n\n\t\tconst rotX = attributes.instance.element(idx7.add(3));\n\t\tconst rotY = attributes.instance.element(idx7.add(4));\n\t\tconst rotZ = attributes.instance.element(idx7.add(5));\n\t\tconst rot = vec3(rotX, rotY, rotZ);\n\n\t\tconst rotSpeedX = attributes.instanceRotationSpeed.element(idx3.add(0));\n\t\tconst rotSpeedY = attributes.instanceRotationSpeed.element(idx3.add(1));\n\t\tconst rotSpeedZ = attributes.instanceRotationSpeed.element(idx3.add(2));\n\t\tconst rotSpeed = vec3(rotSpeedX, rotSpeedY, rotSpeedZ);\n\n\t\tconst time = uniforms.uTime;\n\t\tconst startTime = attributes.instanceLifetime.element(idx2.add(0));\n\t\tconst duration = attributes.instanceLifetime.element(idx2.add(1));\n\n\t\tconst speed = attributes.instanceSpeed.element(instanceIndex).toVar();\n\t\tconst age = select(speed.lessThan(0.0), duration.sub(time.sub(startTime)), time.sub(startTime));\n\n\t\treturn rotationNode(rot, rotSpeed, age);\n\t}\n}\n\n/** Custom THREE.Node for instance scale computation. */\nclass InstanceScaleNode extends THREE.Node {\n\tconstructor() {\n\t\tsuper('vec3');\n\t\tthis.updateType = THREE.NodeUpdateType.OBJECT;\n\t}\n\n\tsetup(frame) {\n\t\tconst mesh = frame.object;\n\t\tconst { attributes, config } = mesh.userData;\n\n\t\tconst scale = attributes.instance.element(idx7.add(6));\n\n\t\treturn scaleNode(config.particles.fadeSize, scale, vProgress);\n\t}\n}\n\n/** Custom THREE.Node for instance color computation. */\nclass InstanceColorNode extends THREE.Node {\n\tconstructor() {\n\t\tsuper('vec3');\n\t\tthis.updateType = THREE.NodeUpdateType.OBJECT;\n\t}\n\n\tsetup(frame) {\n\t\tconst mesh = frame.object;\n\t\tconst { attributes, uniforms, config, alphaMapCount } = mesh.userData;\n\n\t\tconst uAlphaMapCount = uint(alphaMapCount).toVar();\n\n\t\tconst vAlphaMapUVOffsetX = attributes.instanceAlphaMapUVOffset.element(idx2.add(0));\n\t\tconst vAlphaMapUVOffsetY = attributes.instanceAlphaMapUVOffset.element(idx2.add(1));\n\n\t\treturn colorNode(\n\t\t\tconfig.particles.colors,\n\t\t\tconfig.particles.intensity,\n\t\t\tconfig.particles.fadeAlpha,\n\t\t\tconfig.particles.fadeAlphaMap,\n\t\t\tvProgress,\n\t\t\tuniforms.uColorGradient,\n\t\t\tuAlphaMapCount,\n\t\t\tvAlphaMapUVOffsetX,\n\t\t\tvAlphaMapUVOffsetY,\n\t\t\tuniforms.alphaMap,\n\t\t);\n\t}\n}\n\n/**\n * Builds a fresh sprite material wired to the instance nodes. (Each system gets\n * its own material; the nodes read per-mesh data via `mesh.userData`.)\n */\nexport function createParticleMaterialTemplate(): THREE.SpriteNodeMaterial {\n\tconst mat = new THREE.SpriteNodeMaterial();\n\tmat.positionNode = new InstancePositionNode();\n\tmat.rotationNode = new InstanceRotationNode();\n\tmat.scaleNode = new InstanceScaleNode();\n\tmat.colorNode = new InstanceColorNode();\n\treturn mat;\n}\n","/**\n * TSL easing functions for WebGPU based particle animation.\n * All functions take a progress value t (0-1) and return the eased value.\n *\n * Ported from the `threeparticles` project (MIT).\n * @module\n */\n// @ts-nocheck - TSL types are incompatible with TypeScript\nimport { PI, float, mul, sub, pow, add, cos, sin, sqrt, select, Fn, If, Switch } from 'three/tsl';\n\n// Linear\nexport const easeLinear = /*@__PURE__*/ Fn(([t]) => t, { t: 'float', return: 'float' });\n\n// Power 1\nexport const easeInPower1 = /*@__PURE__*/ Fn(([t]) => t, { t: 'float', return: 'float' });\nexport const easeOutPower1 = /*@__PURE__*/ Fn(([t]) => sub(1.0, sub(1.0, t)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutPower1 = /*@__PURE__*/ Fn(([t]) => t, { t: 'float', return: 'float' });\n\n// Power 2\nexport const easeInPower2 = /*@__PURE__*/ Fn(([t]) => t.mul(t), { t: 'float', return: 'float' });\nexport const easeOutPower2 = /*@__PURE__*/ Fn(([t]) => sub(1.0, pow(sub(1.0, t), 2.0)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutPower2 = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(2.0, t).mul(t),\n\t\t\tsub(1.0, pow(float(-2.0).mul(t).add(2.0), 2.0).div(2.0)),\n\t\t),\n\t{ t: 'float', return: 'float' },\n);\n\n// Power 3\nexport const easeInPower3 = /*@__PURE__*/ Fn(([t]) => t.mul(t).mul(t), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeOutPower3 = /*@__PURE__*/ Fn(([t]) => sub(1.0, pow(sub(1.0, t), 3.0)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutPower3 = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(4.0, t).mul(t).mul(t),\n\t\t\tsub(1.0, pow(float(-2.0).mul(t).add(2.0), 3.0).div(2.0)),\n\t\t),\n\t{ t: 'float', return: 'float' },\n);\n\n// Power 4\nexport const easeInPower4 = /*@__PURE__*/ Fn(([t]) => t.mul(t).mul(t).mul(t), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeOutPower4 = /*@__PURE__*/ Fn(([t]) => sub(1.0, pow(sub(1.0, t), 4.0)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutPower4 = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(8.0, t).mul(t).mul(t).mul(t),\n\t\t\tsub(1.0, pow(float(-2.0).mul(t).add(2.0), 4.0).div(2.0)),\n\t\t),\n\t{ t: 'float', return: 'float' },\n);\n\n// Quad\nexport const easeInQuad = /*@__PURE__*/ Fn(([t]) => t.mul(t), { t: 'float', return: 'float' });\nexport const easeOutQuad = /*@__PURE__*/ Fn(([t]) => t.mul(sub(2.0, t)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutQuad = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(t.lessThan(0.5), mul(2.0, t).mul(t), float(-1.0).add(sub(4.0, mul(2.0, t)).mul(t))),\n\t{ t: 'float', return: 'float' },\n);\n\n// Cubic\nexport const easeInCubic = /*@__PURE__*/ Fn(([t]) => t.mul(t).mul(t), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeOutCubic = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn add(1.0, t1.mul(t1).mul(t1));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutCubic = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(4.0, t).mul(t).mul(t),\n\t\t\tt.sub(1.0).mul(mul(2.0, t).sub(2.0)).mul(mul(2.0, t).sub(2.0)).add(1.0),\n\t\t),\n\t{ t: 'float', return: 'float' },\n);\n\n// Quart\nexport const easeInQuart = /*@__PURE__*/ Fn(([t]) => t.mul(t).mul(t).mul(t), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeOutQuart = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn sub(1.0, t1.mul(t1).mul(t1).mul(t1));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutQuart = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn select(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(8.0, t).mul(t).mul(t).mul(t),\n\t\t\tsub(1.0, mul(8.0, t1).mul(t1).mul(t1).mul(t1)),\n\t\t);\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Quint\nexport const easeInQuint = /*@__PURE__*/ Fn(([t]) => t.mul(t).mul(t).mul(t).mul(t), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeOutQuint = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn add(1.0, t1.mul(t1).mul(t1).mul(t1).mul(t1));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutQuint = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn select(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(16.0, t).mul(t).mul(t).mul(t).mul(t),\n\t\t\tadd(1.0, mul(16.0, t1).mul(t1).mul(t1).mul(t1).mul(t1)),\n\t\t);\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Sine\nexport const easeInSine = /*@__PURE__*/ Fn(\n\t([t]) => float(-1.0).mul(cos(t.mul(PI).mul(0.5))).add(1.0),\n\t{ t: 'float', return: 'float' },\n);\nexport const easeOutSine = /*@__PURE__*/ Fn(([t]) => sin(t.mul(PI).mul(0.5)), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutSine = /*@__PURE__*/ Fn(([t]) => float(-0.5).mul(cos(PI.mul(t)).sub(1.0)), {\n\tt: 'float',\n\treturn: 'float',\n});\n\n// Expo\nexport const easeInExpo = /*@__PURE__*/ Fn(\n\t([t]) => select(t.equal(0.0), 0.0, pow(2.0, mul(10.0, t.sub(1.0)))),\n\t{ t: 'float', return: 'float' },\n);\nexport const easeOutExpo = /*@__PURE__*/ Fn(\n\t([t]) => select(t.equal(1.0), 1.0, sub(1.0, pow(2.0, float(-10.0).mul(t)))),\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutExpo = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tIf(t.equal(0.0).or(t.equal(1.0)), () => t);\n\t\treturn select(\n\t\t\tt.lessThan(0.5),\n\t\t\tmul(0.5, pow(2.0, mul(20.0, t).sub(10.0))),\n\t\t\tmul(0.5, pow(2.0, float(-20.0).mul(t).add(10.0)).negate().add(2.0)),\n\t\t);\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Circ\nexport const easeInCirc = /*@__PURE__*/ Fn(\n\t([t]) => float(-1.0).mul(sqrt(sub(1.0, t.mul(t))).sub(1.0)),\n\t{ t: 'float', return: 'float' },\n);\nexport const easeOutCirc = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = t.sub(1.0);\n\t\treturn sqrt(sub(1.0, t1.mul(t1)));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutCirc = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst t1 = mul(2.0, t);\n\t\tconst t2 = t1.sub(2.0);\n\t\treturn select(\n\t\t\tt.lessThan(0.5),\n\t\t\tfloat(-0.5).mul(sqrt(sub(1.0, t1.mul(t1))).sub(1.0)),\n\t\t\tmul(0.5, sqrt(sub(1.0, t2.mul(t2))).add(1.0)),\n\t\t);\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Elastic\nexport const easeInElastic = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tIf(t.equal(0.0).or(t.equal(1.0)), () => t);\n\t\treturn pow(2.0, mul(10.0, t.sub(1.0)))\n\t\t\t.negate()\n\t\t\t.mul(sin(t.sub(1.075).mul(mul(2.0, PI)).div(0.3)));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeOutElastic = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tIf(t.equal(0.0).or(t.equal(1.0)), () => t);\n\t\treturn pow(2.0, float(-10.0).mul(t))\n\t\t\t.mul(sin(t.sub(0.075).mul(mul(2.0, PI)).div(0.3)))\n\t\t\t.add(1.0);\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutElastic = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tIf(t.lessThan(0.5), () =>\n\t\t\tfloat(-0.5)\n\t\t\t\t.mul(pow(2.0, mul(20.0, t).sub(10.0)))\n\t\t\t\t.mul(sin(mul(20.0, t).sub(11.125).mul(mul(2.0, PI)).div(4.5))),\n\t\t);\n\t\treturn pow(2.0, float(-20.0).mul(t).add(10.0))\n\t\t\t.mul(sin(mul(20.0, t).sub(11.125).mul(mul(2.0, PI)).div(4.5)))\n\t\t\t.mul(0.5)\n\t\t\t.add(1.0);\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Back\nexport const easeInBack = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst s = float(1.70158);\n\t\treturn t.mul(t).mul(s.add(1.0).mul(t).sub(s));\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeOutBack = /*@__PURE__*/ Fn(\n\t([t]) => {\n\t\tconst s = float(1.70158);\n\t\tconst t1 = t.sub(1.0);\n\t\treturn t1.mul(t1).mul(s.add(1.0).mul(t1).add(s)).add(1.0);\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInOutBack = /*@__PURE__*/ Fn(\n\t([t_immutable]) => {\n\t\tconst t = t_immutable.toVar();\n\t\tconst s = float(1.70158 * 1.525);\n\t\tt.mulAssign(2.0);\n\t\tIf(t.lessThan(1.0), () => mul(0.5, t.mul(t).mul(s.add(1.0).mul(t).sub(s))));\n\t\tt.subAssign(2.0);\n\t\treturn mul(0.5, t.mul(t).mul(s.add(1.0).mul(t).add(s)).add(2.0));\n\t},\n\t{ t: 'float', return: 'float' },\n);\n\n// Bounce\nexport const easeOutBounce = /*@__PURE__*/ Fn(\n\t([t_immutable]) => {\n\t\tconst t = t_immutable.toVar();\n\t\tIf(t.lessThan(1.0 / 2.75), () => mul(7.5625, t).mul(t))\n\t\t\t.ElseIf(t.lessThan(2.0 / 2.75), () => {\n\t\t\t\tt.subAssign(1.5 / 2.75);\n\t\t\t\treturn mul(7.5625, t).mul(t).add(0.75);\n\t\t\t})\n\t\t\t.ElseIf(t.lessThan(2.5 / 2.75), () => {\n\t\t\t\tt.subAssign(2.25 / 2.75);\n\t\t\t\treturn mul(7.5625, t).mul(t).add(0.9375);\n\t\t\t})\n\t\t\t.Else(() => {\n\t\t\t\tt.subAssign(2.625 / 2.75);\n\t\t\t\treturn mul(7.5625, t).mul(t).add(0.984375);\n\t\t\t});\n\t},\n\t{ t: 'float', return: 'float' },\n);\nexport const easeInBounce = /*@__PURE__*/ Fn(([t]) => sub(1.0, easeOutBounce(sub(1.0, t))), {\n\tt: 'float',\n\treturn: 'float',\n});\nexport const easeInOutBounce = /*@__PURE__*/ Fn(\n\t([t]) =>\n\t\tselect(\n\t\t\tt.lessThan(0.5),\n\t\t\tsub(1.0, easeOutBounce(sub(1.0, mul(2.0, t)))).mul(0.5),\n\t\t\tadd(1.0, easeOutBounce(mul(2.0, t).sub(1.0))).mul(0.5),\n\t\t),\n\t{ t: 'float', return: 'float' },\n);\n\n/**\n * Applies an easing function based on its index in EASE_FUNCTIONS.\n * Used by the particle shader to select the correct easing at runtime.\n */\nexport const applyEasing = /*@__PURE__*/ Fn(\n\t([t, easingId]) => {\n\t\tSwitch(easingId)\n\t\t\t.Case(0, () => easeLinear(t))\n\t\t\t.Case(1, () => easeInPower1(t))\n\t\t\t.Case(2, () => easeOutPower1(t))\n\t\t\t.Case(3, () => easeInOutPower1(t))\n\t\t\t.Case(4, () => easeInPower2(t))\n\t\t\t.Case(5, () => easeOutPower2(t))\n\t\t\t.Case(6, () => easeInOutPower2(t))\n\t\t\t.Case(7, () => easeInPower3(t))\n\t\t\t.Case(8, () => easeOutPower3(t))\n\t\t\t.Case(9, () => easeInOutPower3(t))\n\t\t\t.Case(10, () => easeInPower4(t))\n\t\t\t.Case(11, () => easeOutPower4(t))\n\t\t\t.Case(12, () => easeInOutPower4(t))\n\t\t\t.Case(13, () => easeInQuad(t))\n\t\t\t.Case(14, () => easeOutQuad(t))\n\t\t\t.Case(15, () => easeInOutQuad(t))\n\t\t\t.Case(16, () => easeInCubic(t))\n\t\t\t.Case(17, () => easeOutCubic(t))\n\t\t\t.Case(18, () => easeInOutCubic(t))\n\t\t\t.Case(19, () => easeInQuart(t))\n\t\t\t.Case(20, () => easeOutQuart(t))\n\t\t\t.Case(21, () => easeInOutQuart(t))\n\t\t\t.Case(22, () => easeInQuint(t))\n\t\t\t.Case(23, () => easeOutQuint(t))\n\t\t\t.Case(24, () => easeInOutQuint(t))\n\t\t\t.Case(25, () => easeInSine(t))\n\t\t\t.Case(26, () => easeOutSine(t))\n\t\t\t.Case(27, () => easeInOutSine(t))\n\t\t\t.Case(28, () => easeInExpo(t))\n\t\t\t.Case(29, () => easeOutExpo(t))\n\t\t\t.Case(30, () => easeInOutExpo(t))\n\t\t\t.Case(31, () => easeInCirc(t))\n\t\t\t.Case(32, () => easeOutCirc(t))\n\t\t\t.Case(33, () => easeInOutCirc(t))\n\t\t\t.Case(34, () => easeInElastic(t))\n\t\t\t.Case(35, () => easeOutElastic(t))\n\t\t\t.Case(36, () => easeInOutElastic(t))\n\t\t\t.Case(37, () => easeInBack(t))\n\t\t\t.Case(38, () => easeOutBack(t))\n\t\t\t.Case(39, () => easeInOutBack(t));\n\t\treturn t;\n\t},\n\t{ t: 'float', easingId: 'int', return: 'float' },\n);\n","/** Generates a random float within [min, max). */\nexport function randFloat(min: number, max: number): number {\n\treturn Math.random() * (max - min) + min;\n}\n\n/** Generates a random integer within [min, max]. */\nexport function randInt(min: number, max: number): number {\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const electricityArcPreset = defineSemanticParticlePreset({\n\tfamily: 'electricity',\n\tvariant: 'arc',\n\tdescription: 'directed snapping bridge of charge',\n\taxes: {\n\t\t'continuity vs discontinuity': 'semi-continuous',\n\t\t'branching tendency': 'medium',\n\t\t'snap/crackle quality': 'high',\n\t\t'seeking behavior': 'medium',\n\t\t'charge buildup': 'medium',\n\t\t'rhythmic pulsing': 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.7,\n\t\t\tlooping: true,\n\t\t\tcolor: '#60a5fa',\n\t\t\tlife: [0.12, 0.26],\n\t\t\tsize: [0.06, 0.14],\n\t\t\tspeed: [2.4, 4],\n\t\t\trotation: [-0.3, 0.3],\n\t\t\topacity: 0.96,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 28 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.06,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.05,\n\t\t\tspeed: [1.2, 2.4],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#7dd3fc', 0.3],\n\t\t\t\t\t['#2563eb', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.2, 0],\n\t\t\t\t\t[1, 0.05],\n\t\t\t\t\t[0.46, 0.5],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.7, 0.96, 0.82, 0.26],\n\t\t\tspeedOverLife: [1.08, 0.94, 0.7, 0.38],\n\t\t\tnoise: {\n\t\t\t\tfrequency: [2.4, 4.8],\n\t\t\t\tpower: [0.05, 0.12],\n\t\t\t\tpositionAmount: [0.14, 0.28],\n\t\t\t\trotationAmount: [0.04, 0.12],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.62,\n\t\t\tlengthFactor: 1.16,\n\t\t},\n\t},\n});\n\nexport function arc(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(electricityArcPreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const electricityPulsePreset = defineSemanticParticlePreset({\n\tfamily: 'electricity',\n\tvariant: 'pulse',\n\tdescription: 'rhythmic swelling packet of charge',\n\taxes: {\n\t\t'continuity vs discontinuity': 'discrete rhythmic',\n\t\t'branching tendency': 'low',\n\t\t'snap/crackle quality': 'medium',\n\t\t'seeking behavior': 'low',\n\t\t'charge buildup': 'medium',\n\t\t'rhythmic pulsing': 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.28,\n\t\t\tcolor: '#a5f3fc',\n\t\t\tlife: [0.14, 0.3],\n\t\t\tsize: [0.18, 0.34],\n\t\t\tspeed: [0.18, 0.42],\n\t\t\topacity: 0.88,\n\t\t},\n\t\temission: { type: 'burst', count: 10 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.04,\n\t\t\tthickness: 0.5,\n\t\t\tspeed: [0.02, 0.08],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#a5f3fc', 0.4],\n\t\t\t\t\t['#0891b2', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.14, 0],\n\t\t\t\t\t[0.92, 0.08],\n\t\t\t\t\t[0.42, 0.54],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.2, 0.92, 1.26, 0.18],\n\t\t},\n\t},\n});\n\nexport function pulse(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(electricityPulsePreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const electricitySparkPreset = defineSemanticParticlePreset({\n\tfamily: 'electricity',\n\tvariant: 'spark',\n\tdescription: 'tiny discontinuous discharge',\n\taxes: {\n\t\t'continuity vs discontinuity': 'highly discontinuous',\n\t\t'branching tendency': 'low',\n\t\t'snap/crackle quality': 'high',\n\t\t'seeking behavior': 'low',\n\t\t'charge buildup': 'low',\n\t\t'rhythmic pulsing': 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.2,\n\t\t\tcolor: '#7dd3fc',\n\t\t\tlife: [0.08, 0.18],\n\t\t\tsize: [0.08, 0.16],\n\t\t\tspeed: [2.2, 4.2],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.92,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'burst', count: 12 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.06,\n\t\t\tthickness: 0.95,\n\t\t\tspeed: [0.8, 1.6],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#bae6fd', 0.3],\n\t\t\t\t\t['#38bdf8', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.22, 0],\n\t\t\t\t\t[1, 0.06],\n\t\t\t\t\t[0.48, 0.4],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.44, 0.98, 0.7, 0.04],\n\t\t\tspeedOverLife: [1.24, 0.9, 0.36, 0.04],\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.46,\n\t\t\tlengthFactor: 1.02,\n\t\t},\n\t},\n});\n\nexport function spark(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(electricitySparkPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const electricityStormPreset = defineSemanticParticlePreset({\n\tfamily: 'electricity',\n\tvariant: 'storm',\n\tdescription: 'restless volume of crackling atmospheric charge',\n\taxes: {\n\t\t'continuity vs discontinuity': 'mixed',\n\t\t'branching tendency': 'high',\n\t\t'snap/crackle quality': 'high',\n\t\t'seeking behavior': 'medium-high',\n\t\t'charge buildup': 'high',\n\t\t'rhythmic pulsing': 'medium',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1.2,\n\t\t\tlooping: true,\n\t\t\tcolor: '#38bdf8',\n\t\t\tlife: [0.32, 0.82],\n\t\t\tsize: [0.08, 0.2],\n\t\t\tspeed: [2.2, 4.8],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.94,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 34 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.16,\n\t\t\tthickness: 0.98,\n\t\t\tspeed: [1, 2],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#67e8f9', 0.25],\n\t\t\t\t\t['#2563eb', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.18, 0],\n\t\t\t\t\t[0.98, 0.06],\n\t\t\t\t\t[0.5, 0.5],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.62, 0.96, 0.84, 0.26],\n\t\t\tspeedOverLife: [1.18, 0.94, 0.66, 0.32],\n\t\t\tnoise: {\n\t\t\t\tfrequency: [4.8, 8.4],\n\t\t\t\tpower: [0.08, 0.18],\n\t\t\t\tpositionAmount: [0.18, 0.38],\n\t\t\t\trotationAmount: [0.08, 0.18],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.66,\n\t\t\tlengthFactor: 1.18,\n\t\t},\n\t},\n});\n\nexport function storm(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(electricityStormPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const electricitySurgePreset = defineSemanticParticlePreset({\n\tfamily: 'electricity',\n\tvariant: 'surge',\n\tdescription: 'charge-rich spike that overwhelms the space',\n\taxes: {\n\t\t'continuity vs discontinuity': 'bursting',\n\t\t'branching tendency': 'medium',\n\t\t'snap/crackle quality': 'high',\n\t\t'seeking behavior': 'medium',\n\t\t'charge buildup': 'high',\n\t\t'rhythmic pulsing': 'medium',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.34,\n\t\t\tcolor: '#38bdf8',\n\t\t\tlife: [0.18, 0.36],\n\t\t\tsize: [0.12, 0.26],\n\t\t\tspeed: [2.8, 5.2],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.98,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'burst', count: 24 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.08,\n\t\t\tthickness: 0.98,\n\t\t\tspeed: [1.1, 2.2],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#67e8f9', 0.22],\n\t\t\t\t\t['#0ea5e9', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.22, 0],\n\t\t\t\t\t[1, 0.04],\n\t\t\t\t\t[0.52, 0.44],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.32, 0.9, 0.84, 0.08],\n\t\t\tspeedOverLife: [1.22, 0.88, 0.42, 0.06],\n\t\t\tnoise: {\n\t\t\t\tfrequency: [4.5, 8],\n\t\t\t\tpower: [0.08, 0.18],\n\t\t\t\tpositionAmount: [0.22, 0.42],\n\t\t\t\trotationAmount: [0.08, 0.16],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.68,\n\t\t\tlengthFactor: 1.2,\n\t\t},\n\t},\n});\n\nexport function surge(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(electricitySurgePreset, options);\n}\n","export { arc, electricityArcPreset } from './arc';\nexport { pulse, electricityPulsePreset } from './pulse';\nexport { spark, electricitySparkPreset } from './spark';\nexport { storm, electricityStormPreset } from './storm';\nexport { surge, electricitySurgePreset } from './surge';\n\nimport { arc } from './arc';\nimport { pulse } from './pulse';\nimport { spark } from './spark';\nimport { storm } from './storm';\nimport { surge } from './surge';\n\nexport const electricityPresets = {\n\tspark,\n\tarc,\n\tsurge,\n\tpulse,\n\tstorm,\n} as const;\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const fireBlazePreset = defineSemanticParticlePreset({\n\tfamily: 'fire',\n\tvariant: 'blaze',\n\tdescription: 'sustained, strong open burning',\n\taxes: {\n\t\t'heat feel': 'intense',\n\t\t'hunger/spread tendency': 'high',\n\t\t'smoke affinity': 'medium',\n\t\tturbulence: 'high',\n\t\tresiduality: 'medium',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1.8,\n\t\t\tlooping: true,\n\t\t\tcolor: '#f97316',\n\t\t\tlife: [0.55, 1.1],\n\t\t\tsize: [0.32, 0.62],\n\t\t\tspeed: [0.55, 1.4],\n\t\t\trotation: [-0.24, 0.24],\n\t\t\topacity: 0.96,\n\t\t\trenderMode: RenderMode.VerticalBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 42 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.18,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.28,\n\t\t\tspeed: [0.35, 0.95],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#fde68a', 0.18],\n\t\t\t\t\t['#fb923c', 0.5],\n\t\t\t\t\t['#ef4444', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.18, 0],\n\t\t\t\t\t[1, 0.08],\n\t\t\t\t\t[0.56, 0.54],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.45, 0.92, 1.14, 0.22],\n\t\t\tspeedOverLife: [1.08, 0.96, 0.62, 0.16],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.38, 0.72],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [4.5, 6.5],\n\t\t\t\tpower: [0.1, 0.18],\n\t\t\t\tpositionAmount: [0.32, 0.55],\n\t\t\t\trotationAmount: [0.18, 0.3],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function blaze(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(fireBlazePreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const fireEmberPreset = defineSemanticParticlePreset({\n\tfamily: 'fire',\n\tvariant: 'ember',\n\tdescription: 'lingering, warm, residual, drifting',\n\taxes: {\n\t\t'heat feel': 'warm',\n\t\t'hunger/spread tendency': 'low',\n\t\t'smoke affinity': 'medium',\n\t\tturbulence: 'low',\n\t\tresiduality: 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 2.2,\n\t\t\tlooping: true,\n\t\t\tcolor: '#fb923c',\n\t\t\tlife: [1.1, 2.2],\n\t\t\tsize: [0.05, 0.14],\n\t\t\tspeed: [0.08, 0.32],\n\t\t\trotation: [-0.45, 0.45],\n\t\t\topacity: 0.9,\n\t\t},\n\t\temission: { type: 'rate', rate: 8 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.12,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.22,\n\t\t\tspeed: [0.08, 0.26],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#fff7d1', 0],\n\t\t\t\t\t['#fb923c', 0.35],\n\t\t\t\t\t['#b45309', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.12, 0],\n\t\t\t\t\t[0.9, 0.12],\n\t\t\t\t\t[0.42, 0.7],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.42, 0.9, 0.72, 0.18],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.18, 0.42],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.2, 2.6],\n\t\t\t\tpower: [0.02, 0.08],\n\t\t\t\tpositionAmount: [0.06, 0.14],\n\t\t\t\trotationAmount: [0.04, 0.1],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function ember(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(fireEmberPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const fireFlameletPreset = defineSemanticParticlePreset({\n\tfamily: 'fire',\n\tvariant: 'flamelet',\n\tdescription: 'small coherent tongue of flame',\n\taxes: {\n\t\t'heat feel': 'hot',\n\t\t'hunger/spread tendency': 'medium',\n\t\t'smoke affinity': 'low',\n\t\tturbulence: 'medium',\n\t\tresiduality: 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1.2,\n\t\t\tlooping: true,\n\t\t\tcolor: '#fb923c',\n\t\t\tlife: [0.48, 0.9],\n\t\t\tsize: [0.2, 0.38],\n\t\t\tspeed: [0.35, 0.9],\n\t\t\trotation: [-0.18, 0.18],\n\t\t\topacity: 0.94,\n\t\t\trenderMode: RenderMode.VerticalBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 22 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.1,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.18,\n\t\t\tspeed: [0.3, 0.72],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#fff7d1', 0],\n\t\t\t\t\t['#fbbf24', 0.24],\n\t\t\t\t\t['#fb923c', 0.62],\n\t\t\t\t\t['#ef4444', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.16, 0],\n\t\t\t\t\t[0.94, 0.1],\n\t\t\t\t\t[0.48, 0.58],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.44, 0.92, 1.08, 0.16],\n\t\t\tspeedOverLife: [1.08, 0.95, 0.62, 0.18],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.3, 0.55],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [3, 5],\n\t\t\t\tpower: [0.08, 0.14],\n\t\t\t\tpositionAmount: [0.24, 0.42],\n\t\t\t\trotationAmount: [0.16, 0.24],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function flamelet(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(fireFlameletPreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const fireSmolderPreset = defineSemanticParticlePreset({\n\tfamily: 'fire',\n\tvariant: 'smolder',\n\tdescription: 'low-oxygen, persistent, smoky heat',\n\taxes: {\n\t\t'heat feel': 'buried-hot',\n\t\t'hunger/spread tendency': 'low',\n\t\t'smoke affinity': 'high',\n\t\tturbulence: 'low',\n\t\tresiduality: 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 2.6,\n\t\t\tlooping: true,\n\t\t\tcolor: '#c2410c',\n\t\t\tlife: [1.4, 2.8],\n\t\t\tsize: [0.28, 0.58],\n\t\t\tspeed: [0.06, 0.22],\n\t\t\trotation: [-0.35, 0.35],\n\t\t\topacity: 0.76,\n\t\t},\n\t\temission: { type: 'rate', rate: 14 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.16,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.12,\n\t\t\tspeed: [0.04, 0.16],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#fed7aa', 0],\n\t\t\t\t\t['#c2410c', 0.28],\n\t\t\t\t\t['#525252', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.14, 0],\n\t\t\t\t\t[0.76, 0.12],\n\t\t\t\t\t[0.4, 0.68],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.34, 0.86, 1.08, 0.46],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.08, 0.2],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.6, 3.1],\n\t\t\t\tpower: [0.04, 0.12],\n\t\t\t\tpositionAmount: [0.12, 0.26],\n\t\t\t\trotationAmount: [0.06, 0.14],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function smolder(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(fireSmolderPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const fireSparkPreset = defineSemanticParticlePreset({\n\tfamily: 'fire',\n\tvariant: 'spark',\n\tdescription: 'tiny, sudden, energetic, fleeting',\n\taxes: {\n\t\t'heat feel': 'sharp-hot',\n\t\t'hunger/spread tendency': 'low',\n\t\t'smoke affinity': 'low',\n\t\tturbulence: 'high',\n\t\tresiduality: 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.24,\n\t\t\tcolor: '#ffd166',\n\t\t\tlife: [0.12, 0.24],\n\t\t\tsize: [0.08, 0.16],\n\t\t\tspeed: [1.8, 4.6],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'burst', count: 10 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.05,\n\t\t\tthickness: 0.92,\n\t\t\tspeed: [0.45, 1.2],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#fde68a', 0.2],\n\t\t\t\t\t['#fb923c', 0.62],\n\t\t\t\t\t['#ef4444', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.18, 0],\n\t\t\t\t\t[1, 0.08],\n\t\t\t\t\t[0.52, 0.5],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.48, 1.08, 0.88, 0.06],\n\t\t\tspeedOverLife: [1.18, 0.88, 0.42, 0.04],\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.55,\n\t\t\tlengthFactor: 1.08,\n\t\t},\n\t},\n});\n\nexport function spark(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(fireSparkPreset, options);\n}\n","export { blaze, fireBlazePreset } from './blaze';\nexport { ember, fireEmberPreset } from './ember';\nexport { flamelet, fireFlameletPreset } from './flamelet';\nexport { smolder, fireSmolderPreset } from './smolder';\nexport { spark, fireSparkPreset } from './spark';\n\nimport { blaze } from './blaze';\nimport { ember } from './ember';\nimport { flamelet } from './flamelet';\nimport { smolder } from './smolder';\nimport { spark } from './spark';\n\nexport const firePresets = {\n\tspark,\n\tember,\n\tflamelet,\n\tblaze,\n\tsmolder,\n} as const;\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const gasHazePreset = defineSemanticParticlePreset({\n\tfamily: 'gas',\n\tvariant: 'haze',\n\tdescription: 'broad, thin atmospheric contamination',\n\taxes: {\n\t\t'opacity feel': 'low',\n\t\ttoxicity: 'low-medium',\n\t\tbuoyancy: 'neutral',\n\t\t'spread tendency': 'high',\n\t\tthickness: 'thin',\n\t\t'staining / contaminating character': 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 4.4,\n\t\t\tlooping: true,\n\t\t\tcolor: '#cbd5e1',\n\t\t\tlife: [3.4, 5.4],\n\t\t\tsize: [0.9, 1.7],\n\t\t\tspeed: [0.02, 0.08],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.18,\n\t\t},\n\t\temission: { type: 'rate', rate: 10 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.64,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.5,\n\t\t\tspeed: [0.01, 0.04],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#f8fafc', 0],\n\t\t\t\t\t['#cbd5e1', 0.4],\n\t\t\t\t\t['#94a3b8', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.04, 0],\n\t\t\t\t\t[0.2, 0.24],\n\t\t\t\t\t[0.08, 0.88],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.88, 1.08, 1.28, 1.42],\n\t\t\tnoise: {\n\t\t\t\tfrequency: [0.6, 1.4],\n\t\t\t\tpower: [0.02, 0.06],\n\t\t\t\tpositionAmount: [0.08, 0.16],\n\t\t\t\trotationAmount: [0.06, 0.1],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function haze(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(gasHazePreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const gasMiasmaPreset = defineSemanticParticlePreset({\n\tfamily: 'gas',\n\tvariant: 'miasma',\n\tdescription: 'thick, toxic, contaminating exhalation',\n\taxes: {\n\t\t'opacity feel': 'medium',\n\t\ttoxicity: 'high',\n\t\tbuoyancy: 'low-medium',\n\t\t'spread tendency': 'high',\n\t\tthickness: 'sticky',\n\t\t'staining / contaminating character': 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 3.8,\n\t\t\tlooping: true,\n\t\t\tcolor: '#84cc16',\n\t\t\tlife: [2.8, 4.6],\n\t\t\tsize: [0.52, 1.08],\n\t\t\tspeed: [0.03, 0.16],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.5,\n\t\t},\n\t\temission: { type: 'rate', rate: 16 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.3,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.3,\n\t\t\tspeed: [0.02, 0.08],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ecfccb', 0],\n\t\t\t\t\t['#84cc16', 0.4],\n\t\t\t\t\t['#3f6212', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.08, 0],\n\t\t\t\t\t[0.58, 0.14],\n\t\t\t\t\t[0.24, 0.8],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.4, 0.92, 1.3, 1.9],\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.8, 3.8],\n\t\t\t\tpower: [0.08, 0.18],\n\t\t\t\tpositionAmount: [0.16, 0.34],\n\t\t\t\trotationAmount: [0.08, 0.18],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function miasma(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(gasMiasmaPreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const gasPlumePreset = defineSemanticParticlePreset({\n\tfamily: 'gas',\n\tvariant: 'plume',\n\tdescription: 'columnar rising release with strong lift',\n\taxes: {\n\t\t'opacity feel': 'medium',\n\t\ttoxicity: 'medium',\n\t\tbuoyancy: 'very-high',\n\t\t'spread tendency': 'medium',\n\t\tthickness: 'medium',\n\t\t'staining / contaminating character': 'medium',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 2.8,\n\t\t\tlooping: true,\n\t\t\tcolor: '#94a3b8',\n\t\t\tlife: [1.8, 3.2],\n\t\t\tsize: [0.32, 0.72],\n\t\t\tspeed: [0.16, 0.52],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.48,\n\t\t},\n\t\temission: { type: 'rate', rate: 22 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.18,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.18,\n\t\t\tspeed: [0.08, 0.24],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#e2e8f0', 0],\n\t\t\t\t\t['#94a3b8', 0.36],\n\t\t\t\t\t['#475569', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.06, 0],\n\t\t\t\t\t[0.54, 0.14],\n\t\t\t\t\t[0.2, 0.84],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.42, 0.92, 1.36, 1.84],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.28, 0.6],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.6, 3.4],\n\t\t\t\tpower: [0.08, 0.14],\n\t\t\t\tpositionAmount: [0.14, 0.28],\n\t\t\t\trotationAmount: [0.08, 0.16],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function plume(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(gasPlumePreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const gasSmokePreset = defineSemanticParticlePreset({\n\tfamily: 'gas',\n\tvariant: 'smoke',\n\tdescription: 'opaque, buoyant, lingering combustion residue',\n\taxes: {\n\t\t'opacity feel': 'medium-high',\n\t\ttoxicity: 'medium',\n\t\tbuoyancy: 'high',\n\t\t'spread tendency': 'medium',\n\t\tthickness: 'medium',\n\t\t'staining / contaminating character': 'medium',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 3.2,\n\t\t\tlooping: true,\n\t\t\tcolor: '#737373',\n\t\t\tlife: [2.4, 4.2],\n\t\t\tsize: [0.45, 0.92],\n\t\t\tspeed: [0.08, 0.3],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.58,\n\t\t},\n\t\temission: { type: 'rate', rate: 14 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.24,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.28,\n\t\t\tspeed: [0.04, 0.14],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#d4d4d8', 0],\n\t\t\t\t\t['#737373', 0.4],\n\t\t\t\t\t['#404040', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.08, 0],\n\t\t\t\t\t[0.68, 0.14],\n\t\t\t\t\t[0.24, 0.84],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.38, 0.88, 1.4, 2.08],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.12, 0.28],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.2, 2.8],\n\t\t\t\tpower: [0.08, 0.16],\n\t\t\t\tpositionAmount: [0.12, 0.26],\n\t\t\t\trotationAmount: [0.08, 0.18],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function smoke(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(gasSmokePreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const gasVaporPreset = defineSemanticParticlePreset({\n\tfamily: 'gas',\n\tvariant: 'vapor',\n\tdescription: 'visible gaseous release with light buoyancy',\n\taxes: {\n\t\t'opacity feel': 'light',\n\t\ttoxicity: 'neutral',\n\t\tbuoyancy: 'high',\n\t\t'spread tendency': 'medium',\n\t\tthickness: 'thin',\n\t\t'staining / contaminating character': 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 3,\n\t\t\tlooping: true,\n\t\t\tcolor: '#e2e8f0',\n\t\t\tlife: [2.2, 3.6],\n\t\t\tsize: [0.38, 0.78],\n\t\t\tspeed: [0.04, 0.18],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.28,\n\t\t},\n\t\temission: { type: 'rate', rate: 18 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.28,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.36,\n\t\t\tspeed: [0.02, 0.08],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#f8fafc', 0],\n\t\t\t\t\t['#e2e8f0', 0.36],\n\t\t\t\t\t['#cbd5e1', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.06, 0],\n\t\t\t\t\t[0.34, 0.22],\n\t\t\t\t\t[0.12, 0.84],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.42, 0.9, 1.38, 1.98],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.06, 0.18],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1, 2],\n\t\t\t\tpower: [0.04, 0.08],\n\t\t\t\tpositionAmount: [0.1, 0.2],\n\t\t\t\trotationAmount: [0.08, 0.14],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function vapor(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(gasVaporPreset, options);\n}\n","export { haze, gasHazePreset } from './haze';\nexport { miasma, gasMiasmaPreset } from './miasma';\nexport { plume, gasPlumePreset } from './plume';\nexport { smoke, gasSmokePreset } from './smoke';\nexport { vapor, gasVaporPreset } from './vapor';\n\nimport { haze } from './haze';\nimport { miasma } from './miasma';\nimport { plume } from './plume';\nimport { smoke } from './smoke';\nimport { vapor } from './vapor';\n\nexport const gasPresets = {\n\tvapor,\n\tsmoke,\n\thaze,\n\tplume,\n\tmiasma,\n} as const;\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function arcane(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('arcane', options);\n}\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function corrupted(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('corrupted', options);\n}\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function holy(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('holy', options);\n}\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function nature(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('nature', options);\n}\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function psychic(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('psychic', options);\n}\n","import {\n\tcreateMagicModifier,\n\ttype ParticleMagicModifierOptions,\n} from '../../preset-builder';\n\nexport function voidMagic(\n\toptions: Omit<ParticleMagicModifierOptions, 'alignment'> = {},\n) {\n\treturn createMagicModifier('void', options);\n}\n","export { arcane } from './arcane';\nexport { corrupted } from './corrupted';\nexport { holy } from './holy';\nexport { nature } from './nature';\nexport { psychic } from './psychic';\nexport { voidMagic } from './void';\n\nimport { arcane } from './arcane';\nimport { corrupted } from './corrupted';\nimport { holy } from './holy';\nimport { nature } from './nature';\nimport { psychic } from './psychic';\nimport { voidMagic } from './void';\n\nexport const magicPresets = {\n\tarcane,\n\tholy,\n\tcorrupted,\n\tnature,\n\tvoid: voidMagic,\n\tpsychic,\n} as const;\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const waterDrizzlePreset = defineSemanticParticlePreset({\n\tfamily: 'water',\n\tvariant: 'drizzle',\n\tdescription: 'soft, continuous, light fall',\n\taxes: {\n\t\tpressure: 'low',\n\t\t'surface tension feel': 'light',\n\t\taeration: 'low',\n\t\tcoherence: 'discrete',\n\t\t'gravitational obedience': 'very-high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1.4,\n\t\t\tlooping: true,\n\t\t\tcolor: '#e0f2fe',\n\t\t\tlife: [0.6, 1.05],\n\t\t\tsize: [0.05, 0.1],\n\t\t\tspeed: [2.8, 4.4],\n\t\t\topacity: 0.62,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 26 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.46,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.04,\n\t\t\tspeed: [1.8, 2.6],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#f8fafc', 0],\n\t\t\t\t\t['#e0f2fe', 0.45],\n\t\t\t\t\t['#7dd3fc', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.12, 0],\n\t\t\t\t\t[0.78, 0.08],\n\t\t\t\t\t[0.52, 0.58],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tspeedOverLife: [1.02, 1, 0.94, 0.88],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [-8.2, -6.4],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.42,\n\t\t\tlengthFactor: 1.24,\n\t\t},\n\t},\n});\n\nexport function drizzle(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(waterDrizzlePreset, options);\n}\n","import {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const waterMistPreset = defineSemanticParticlePreset({\n\tfamily: 'water',\n\tvariant: 'mist',\n\tdescription: 'diffuse suspended moisture',\n\taxes: {\n\t\tpressure: 'low',\n\t\t'surface tension feel': 'soft',\n\t\taeration: 'low',\n\t\tcoherence: 'diffuse',\n\t\t'gravitational obedience': 'low',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 3.2,\n\t\t\tlooping: true,\n\t\t\tcolor: '#dbeafe',\n\t\t\tlife: [2.4, 3.8],\n\t\t\tsize: [0.4, 0.82],\n\t\t\tspeed: [0.05, 0.2],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.36,\n\t\t},\n\t\temission: { type: 'rate', rate: 16 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.32,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.42,\n\t\t\tspeed: [0.02, 0.08],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#f8fafc', 0],\n\t\t\t\t\t['#dbeafe', 0.35],\n\t\t\t\t\t['#bfdbfe', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.08, 0],\n\t\t\t\t\t[0.44, 0.2],\n\t\t\t\t\t[0.18, 0.82],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.38, 0.86, 1.42, 2.02],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [0.02, 0.12],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [0.8, 1.8],\n\t\t\t\tpower: [0.04, 0.1],\n\t\t\t\tpositionAmount: [0.1, 0.18],\n\t\t\t\trotationAmount: [0.08, 0.14],\n\t\t\t},\n\t\t},\n\t},\n});\n\nexport function mist(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(waterMistPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const waterSplashPreset = defineSemanticParticlePreset({\n\tfamily: 'water',\n\tvariant: 'splash',\n\tdescription: 'sudden impact-driven burst',\n\taxes: {\n\t\tpressure: 'impact-driven',\n\t\t'surface tension feel': 'beaded',\n\t\taeration: 'medium',\n\t\tcoherence: 'shattering',\n\t\t'gravitational obedience': 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 0.34,\n\t\t\tcolor: '#7dd3fc',\n\t\t\tlife: [0.26, 0.55],\n\t\t\tsize: [0.1, 0.22],\n\t\t\tspeed: [1.4, 3.1],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.82,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'burst', count: 18 },\n\t\tshape: {\n\t\t\ttype: 'sphere',\n\t\t\tradius: 0.08,\n\t\t\tthickness: 0.96,\n\t\t\tspeed: [0.7, 1.4],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#ffffff', 0],\n\t\t\t\t\t['#bae6fd', 0.4],\n\t\t\t\t\t['#38bdf8', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.18, 0],\n\t\t\t\t\t[0.88, 0.08],\n\t\t\t\t\t[0.42, 0.54],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.32, 0.86, 0.92, 0.08],\n\t\t\tspeedOverLife: [1.12, 0.88, 0.46, 0.08],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [-4.4, -2.6],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.36,\n\t\t\tlengthFactor: 0.88,\n\t\t},\n\t},\n});\n\nexport function splash(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(waterSplashPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const waterSprayPreset = defineSemanticParticlePreset({\n\tfamily: 'water',\n\tvariant: 'spray',\n\tdescription: 'fine ejected droplets',\n\taxes: {\n\t\tpressure: 'medium-high',\n\t\t'surface tension feel': 'light',\n\t\taeration: 'medium',\n\t\tcoherence: 'broken',\n\t\t'gravitational obedience': 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1,\n\t\t\tlooping: true,\n\t\t\tcolor: '#93c5fd',\n\t\t\tlife: [0.45, 0.9],\n\t\t\tsize: [0.08, 0.16],\n\t\t\tspeed: [1.1, 2.3],\n\t\t\trotation: [-Math.PI, Math.PI],\n\t\t\topacity: 0.72,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 38 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.12,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.24,\n\t\t\tspeed: [0.85, 1.8],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#eff6ff', 0],\n\t\t\t\t\t['#93c5fd', 0.45],\n\t\t\t\t\t['#60a5fa', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.16, 0],\n\t\t\t\t\t[0.82, 0.08],\n\t\t\t\t\t[0.52, 0.58],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.72, 0.96, 0.82, 0.28],\n\t\t\tspeedOverLife: [1.04, 0.92, 0.68, 0.38],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [-5.8, -3.8],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.2, 2.2],\n\t\t\t\tpower: [0.04, 0.08],\n\t\t\t\tpositionAmount: [0.08, 0.16],\n\t\t\t\trotationAmount: [0.04, 0.08],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.5,\n\t\t\tlengthFactor: 0.95,\n\t\t},\n\t},\n});\n\nexport function spray(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(waterSprayPreset, options);\n}\n","import { RenderMode } from '../../preset-builder';\n\nimport {\n\tcreateSemanticParticleEffect,\n\tdefineSemanticParticlePreset,\n\ttype SemanticParticlePresetOptions,\n} from '../../preset-builder';\n\nexport const waterTorrentPreset = defineSemanticParticlePreset({\n\tfamily: 'water',\n\tvariant: 'torrent',\n\tdescription: 'strong, forceful, dense flow',\n\taxes: {\n\t\tpressure: 'high',\n\t\t'surface tension feel': 'driven',\n\t\taeration: 'medium',\n\t\tcoherence: 'strong',\n\t\t'gravitational obedience': 'high',\n\t},\n\tsystem: {\n\t\tdefaults: {\n\t\t\tduration: 1,\n\t\t\tlooping: true,\n\t\t\tcolor: '#38bdf8',\n\t\t\tlife: [0.35, 0.75],\n\t\t\tsize: [0.1, 0.22],\n\t\t\tspeed: [2.6, 4.9],\n\t\t\trotation: [-0.3, 0.3],\n\t\t\topacity: 0.84,\n\t\t\trenderMode: RenderMode.StretchedBillBoard,\n\t\t},\n\t\temission: { type: 'rate', rate: 60 },\n\t\tshape: {\n\t\t\ttype: 'cone',\n\t\t\tradius: 0.18,\n\t\t\tthickness: 1,\n\t\t\tangle: 0.12,\n\t\t\tspeed: [1.8, 3.1],\n\t\t},\n\t\tbehaviors: {\n\t\t\tcolorOverLife: {\n\t\t\t\tcolors: [\n\t\t\t\t\t['#f0f9ff', 0],\n\t\t\t\t\t['#7dd3fc', 0.35],\n\t\t\t\t\t['#0ea5e9', 1],\n\t\t\t\t],\n\t\t\t\talpha: [\n\t\t\t\t\t[0.18, 0],\n\t\t\t\t\t[0.92, 0.08],\n\t\t\t\t\t[0.56, 0.52],\n\t\t\t\t\t[0, 1],\n\t\t\t\t],\n\t\t\t},\n\t\t\tsizeOverLife: [0.72, 0.94, 0.84, 0.28],\n\t\t\tspeedOverLife: [1.04, 0.92, 0.68, 0.34],\n\t\t\tforceOverLife: {\n\t\t\t\ty: [-6.8, -4.8],\n\t\t\t},\n\t\t\tnoise: {\n\t\t\t\tfrequency: [1.4, 2.6],\n\t\t\t\tpower: [0.04, 0.09],\n\t\t\t\tpositionAmount: [0.08, 0.14],\n\t\t\t\trotationAmount: [0.06, 0.1],\n\t\t\t},\n\t\t},\n\t\trendererEmitterSettings: {\n\t\t\tspeedFactor: 0.56,\n\t\t\tlengthFactor: 1.08,\n\t\t},\n\t},\n});\n\nexport function torrent(\n\toptions: SemanticParticlePresetOptions = {},\n) {\n\treturn createSemanticParticleEffect(waterTorrentPreset, options);\n}\n","export { drizzle, waterDrizzlePreset } from './drizzle';\nexport { mist, waterMistPreset } from './mist';\nexport { splash, waterSplashPreset } from './splash';\nexport { spray, waterSprayPreset } from './spray';\nexport { torrent, waterTorrentPreset } from './torrent';\n\nimport { drizzle } from './drizzle';\nimport { mist } from './mist';\nimport { splash } from './splash';\nimport { spray } from './spray';\nimport { torrent } from './torrent';\n\nexport const waterPresets = {\n\tmist,\n\tspray,\n\tsplash,\n\tdrizzle,\n\ttorrent,\n} as const;\n"],"mappings":"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","names":["AdditiveBlending","THREE","texture","texture","THREE","If","select","float","Fn","float","Fn","vProgress","If","select","max","texture","AdditiveBlending","count","range","max","spark","spark"]}
|