shardlight 0.1.0
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/README.md +328 -0
- package/dist/baker-BmlWqsXG.d.ts +290 -0
- package/dist/chunk-MARSXMGB.js +263 -0
- package/dist/chunk-MARSXMGB.js.map +1 -0
- package/dist/chunk-W7WG7K5R.js +67 -0
- package/dist/chunk-W7WG7K5R.js.map +1 -0
- package/dist/chunk-ZWPHIC3K.js +1786 -0
- package/dist/chunk-ZWPHIC3K.js.map +1 -0
- package/dist/core/index.d.ts +901 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/createShardLight-DTUyJQML.d.ts +56 -0
- package/dist/effects-bjjSnDyP.d.ts +287 -0
- package/dist/r3f/index.d.ts +59 -0
- package/dist/r3f/index.js +164 -0
- package/dist/r3f/index.js.map +1 -0
- package/dist/react/index.d.ts +62 -0
- package/dist/react/index.js +204 -0
- package/dist/react/index.js.map +1 -0
- package/dist/testing/index.d.ts +44 -0
- package/dist/testing/index.js +81 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/three/index.d.ts +13 -0
- package/dist/three/index.js +4 -0
- package/dist/three/index.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/kinds/registry.ts","../src/core/kinds/draw.ts","../src/core/kinds/blob.ts","../src/core/kinds/fan.ts","../src/core/kinds/clusters.ts","../src/core/kinds/halo.ts","../src/core/kinds/index.ts","../src/core/effects/registry.ts","../src/core/effects/pulse.ts","../src/core/effects/flicker.ts","../src/core/effects/spin.ts","../src/core/effects/hover.ts","../src/core/effects/collapse.ts","../src/core/effects/index.ts","../src/core/presets/registry.ts","../src/core/presets/star.ts","../src/core/presets/sun.ts","../src/core/presets/sparkle.ts","../src/core/presets/starburst.ts","../src/core/presets/ember.ts","../src/core/presets/index.ts","../src/core/util/color.ts","../src/core/config/resolve.ts","../src/core/config/migrate.ts","../src/core/effects/frame-values.ts","../src/core/bake/baker.ts","../src/core/util/hash.ts","../src/core/util/rng.ts","../src/core/util/dom.ts","../src/core/bake/canvas2d.ts","../src/core/bake/cache.ts","../src/core/bake/scheduler.ts","../src/core/util/stringify.ts","../src/core/model/layers.ts","../src/core/bake/prewarm.ts","../src/core/util/object.ts","../src/core/model/light-model.ts"],"names":["warn","effects","blob","hover","collapse"],"mappings":"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","file":"chunk-ZWPHIC3K.js","sourcesContent":["import type { ParamMap } from '../config/schema.js';\nimport type { ShardKindDefinition } from './types.js';\n\n/**\n * The kind registry. Lookups go through `getShardKind` only, so a scoped\n * registry can be added later without breaking anything.\n */\nconst kinds = new Map<string, ShardKindDefinition<never, ParamMap>>();\n\n/** Define a kind object. Does not register it. */\nexport function defineShardKind<K extends string, const P extends ParamMap>(\n def: ShardKindDefinition<K, P>,\n): ShardKindDefinition<K, P> {\n return def;\n}\n\nexport function registerShardKind(def: ShardKindDefinition<string, ParamMap>): void {\n if (kinds.has(def.kind)) {\n warn(`overwriting already-registered shard kind \"${def.kind}\"`);\n }\n kinds.set(def.kind, def as unknown as ShardKindDefinition<never, ParamMap>);\n}\n\nexport function getShardKind(kind: string): ShardKindDefinition<string, ParamMap> | undefined {\n return kinds.get(kind) as unknown as ShardKindDefinition<string, ParamMap> | undefined;\n}\n\nexport function listShardKinds(): ShardKindDefinition<string, ParamMap>[] {\n return [...kinds.values()] as unknown as ShardKindDefinition<string, ParamMap>[];\n}\n\nexport function unregisterShardKind(kind: string): void {\n kinds.delete(kind);\n}\n\nfunction warn(message: string): void {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return;\n console.warn(`[shardlight] ${message}`);\n}\n","import type { Ctx2D, DrawEnv } from './types.js';\n\n/** Gradients approximate their curves with 16 colour stops. */\nexport const GRADIENT_STOPS = 16;\n\n/**\n * Multiply every ray-marked param by `rayScale`. Applied by the baker before a\n * kind's `draw`/`blur` run, so a light tuned at one size can be shown much\n * larger without its rays thickening.\n */\nexport function applyRayScale(\n params: Record<string, unknown>,\n schema: Record<string, { ray?: boolean }>,\n rayScale: number,\n): Record<string, unknown> {\n if (rayScale === 1) return params;\n const out: Record<string, unknown> = { ...params };\n for (const [name, def] of Object.entries(schema)) {\n if (def.ray && typeof out[name] === 'number') {\n out[name] = (out[name] as number) * rayScale;\n }\n }\n return out;\n}\n\nexport interface RayDraw {\n /** Direction of the ray, radians. */\n angleRad: number;\n /** Distance from the centre to the root, px. */\n rootDist: number;\n /** Distance from the centre to the tip, px. */\n tipDist: number;\n /** Half-width at the root, px. */\n rootHalf: number;\n /** Half-width at the tip, px. */\n tipHalf: number;\n strength: number;\n falloff: number;\n /** Ramp-in distance from the root, px. */\n fadeIn: number;\n}\n\n/**\n * One fan/cluster ray: a quad tapering root → tip, filled with a linear\n * gradient whose alpha follows `(1 - t)^falloff` and the fade-in ramp.\n */\nexport function drawRay(ctx: Ctx2D, env: DrawEnv, o: RayDraw): void {\n const length = o.tipDist - o.rootDist;\n if (length <= 0 || o.strength <= 0) return;\n\n ctx.save();\n ctx.rotate(o.angleRad);\n\n const gradient = ctx.createLinearGradient(o.rootDist, 0, o.tipDist, 0);\n for (let i = 0; i <= GRADIENT_STOPS; i++) {\n const t = i / GRADIENT_STOPS;\n const along = Math.pow(1 - t, o.falloff);\n const ramp = o.fadeIn > 0 ? Math.min(1, (t * length) / o.fadeIn) : 1;\n gradient.addColorStop(t, env.rgba(o.strength * along * ramp));\n }\n\n ctx.fillStyle = gradient;\n ctx.beginPath();\n ctx.moveTo(o.rootDist, -o.rootHalf);\n ctx.lineTo(o.tipDist, -o.tipHalf);\n ctx.lineTo(o.tipDist, o.tipHalf);\n ctx.lineTo(o.rootDist, o.rootHalf);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\ninterface VarianceParams {\n variance?: number;\n}\n\n/**\n * The variance mask: a conic gradient with 12 evenly spaced stops,\n * each alpha `1 − variance · rng()`, the last repeating the first so there is no\n * seam. Applied with `destination-in` on the untransformed scratch canvas.\n */\nexport function conicVarianceMask(\n ctx: Ctx2D,\n params: VarianceParams,\n env: DrawEnv,\n size: number,\n): void {\n const variance = params.variance ?? 0;\n if (variance <= 0) return;\n\n const createConic = (\n ctx as unknown as {\n createConicGradient?: (angle: number, x: number, y: number) => CanvasGradient;\n }\n ).createConicGradient;\n if (typeof createConic !== 'function') return;\n\n const center = size / 2;\n const gradient = createConic.call(ctx, 0, center, center);\n const stops = 12;\n const alphas: number[] = [];\n for (let i = 0; i < stops; i++) alphas.push(1 - variance * env.rng());\n for (let i = 0; i < stops; i++) {\n gradient.addColorStop(i / stops, env.rgba(alphas[i]!));\n }\n gradient.addColorStop(1, env.rgba(alphas[0]!));\n\n ctx.save();\n ctx.globalCompositeOperation = 'destination-in';\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, size, size);\n ctx.restore();\n}\n","import { defineShardKind } from './registry.js';\nimport { conicVarianceMask, GRADIENT_STOPS } from './draw.js';\n\n/** `blob`: a soft round glow. A radial gradient from the centre out to `size`. */\nexport const blob = defineShardKind({\n kind: 'blob',\n label: 'Glow',\n params: {\n strength: { type: 'number', default: 1, min: 0, max: 2 },\n size: { type: 'number', default: 0.5, min: 0, max: 2 },\n hardness: { type: 'number', default: 0, min: 0, max: 0.999 },\n falloff: { type: 'number', default: 2, min: 0.1, max: 8 },\n aspect: { type: 'number', default: 1, min: 0.1, max: 10 },\n angle: { type: 'angle', default: 0 },\n softness: { type: 'number', default: 0, min: 0, max: 50, unit: 'px' },\n variance: { type: 'number', default: 0, min: 0, max: 1 },\n },\n draw(ctx, p, env) {\n const radius = p.size * env.unit;\n if (radius <= 0 || p.strength <= 0) return;\n\n ctx.save();\n ctx.rotate((p.angle * Math.PI) / 180);\n ctx.scale(p.aspect, 1);\n\n const gradient = ctx.createRadialGradient(0, 0, 0, 0, 0, radius);\n for (let i = 0; i <= GRADIENT_STOPS; i++) {\n const t = i / GRADIENT_STOPS;\n let a: number;\n if (p.hardness >= 1) {\n a = t < 1 ? 1 : 0;\n } else if (p.hardness > 0 && t <= p.hardness) {\n a = 1;\n } else {\n a = Math.pow((1 - t) / (1 - p.hardness), p.falloff);\n }\n gradient.addColorStop(t, env.rgba(Math.max(0, a) * p.strength));\n }\n\n ctx.fillStyle = gradient;\n ctx.beginPath();\n ctx.arc(0, 0, radius, 0, Math.PI * 2);\n ctx.fill();\n ctx.restore();\n },\n mask: conicVarianceMask,\n});\n","import { defineShardKind } from './registry.js';\nimport { drawRay } from './draw.js';\n\n/**\n * `fan`: `count` rays spread evenly round the centre. Each ray is a quad\n * tapering from root to tip, filled with a linear gradient along its length.\n */\nexport const fan = defineShardKind({\n kind: 'fan',\n label: 'Rays',\n params: {\n strength: { type: 'number', default: 1, min: 0, max: 2 },\n size: { type: 'number', default: 1, min: 0, max: 2 },\n count: { type: 'number', default: 4, min: 1, max: 256, step: 1 },\n angle: { type: 'angle', default: 0 },\n jitter: { type: 'number', default: 0, min: 0, max: 1 },\n inner: { type: 'number', default: 0, min: 0, max: 1 },\n variance: { type: 'number', default: 0, min: 0, max: 1 },\n width: { type: 'number', default: 4, min: 0, max: 100, unit: 'px', ray: true },\n taper: { type: 'number', default: 1, min: 0, max: 1 },\n falloff: { type: 'number', default: 1, min: 0, max: 8 },\n fadeIn: { type: 'number', default: 0, min: 0, max: 1 },\n softness: { type: 'number', default: 1, min: 0, max: 50, unit: 'px', ray: true },\n },\n draw(ctx, p, env) {\n const count = Math.max(1, Math.round(p.count));\n const gap = (Math.PI * 2) / count;\n const rootDist = p.inner * env.unit;\n const lengthPx = p.size * env.unit;\n const rootHalf = (p.width * env.px) / 2;\n\n for (let i = 0; i < count; i++) {\n const jitterR = env.rng();\n const varianceR = env.rng();\n\n const base = (p.angle * Math.PI) / 180 + i * gap;\n const angle = base + (jitterR * 2 - 1) * p.jitter * (gap / 2);\n\n const lengthMul = 1 - p.variance * varianceR;\n const brightMul = 1 - p.variance * varianceR;\n const widthMul = 1 - 0.5 * p.variance * varianceR;\n\n const half = rootHalf * widthMul;\n drawRay(ctx, env, {\n angleRad: angle,\n rootDist,\n tipDist: rootDist + lengthPx * lengthMul,\n rootHalf: half,\n tipHalf: half * (1 - p.taper),\n strength: p.strength * brightMul,\n falloff: p.falloff,\n fadeIn: p.fadeIn * env.unit,\n });\n }\n },\n});\n","import { defineShardKind } from './registry.js';\nimport { drawRay } from './draw.js';\n\n/**\n * `clusters`: `clusters` bundles, spread evenly round the centre, of\n * `perCluster` fine rays each. Rays are drawn like `fan` rays.\n */\nexport const clusters = defineShardKind({\n kind: 'clusters',\n label: 'Streaks',\n params: {\n clusters: { type: 'number', default: 4, min: 1, max: 64, step: 1 },\n perCluster: { type: 'number', default: 5, min: 1, max: 64, step: 1 },\n spread: { type: 'number', default: 20, min: 0, max: 360 },\n inner: { type: 'number', default: 0.1, min: 0, max: 1 },\n strength: { type: 'number', default: 0.5, min: 0, max: 2 },\n size: { type: 'number', default: 0.5, min: 0, max: 2 },\n angle: { type: 'angle', default: 0 },\n variance: { type: 'number', default: 0.5, min: 0, max: 1 },\n width: { type: 'number', default: 2, min: 0, max: 100, unit: 'px', ray: true },\n taper: { type: 'number', default: 0.5, min: 0, max: 1 },\n falloff: { type: 'number', default: 1, min: 0, max: 8 },\n fadeIn: { type: 'number', default: 0.1, min: 0, max: 1 },\n softness: { type: 'number', default: 1, min: 0, max: 50, unit: 'px', ray: true },\n },\n draw(ctx, p, env) {\n const clusterCount = Math.max(1, Math.round(p.clusters));\n const perCluster = Math.max(1, Math.round(p.perCluster));\n const gap = (Math.PI * 2) / clusterCount;\n const spreadRad = (p.spread * Math.PI) / 180;\n const lengthPx = p.size * env.unit;\n const rootHalf = (p.width * env.px) / 2;\n\n for (let c = 0; c < clusterCount; c++) {\n const center = (p.angle * Math.PI) / 180 + c * gap;\n for (let i = 0; i < perCluster; i++) {\n const dirR = env.rng();\n const innerR = env.rng();\n const varianceR = env.rng();\n\n const angle = center + (dirR - 0.5) * spreadRad;\n const inner = Math.max(0, p.inner + (innerR - 0.5) * p.variance);\n const rootDist = inner * env.unit;\n\n const lengthMul = 1 - p.variance * varianceR;\n const brightMul = 1 - p.variance * varianceR;\n const widthMul = 1 - 0.5 * p.variance * varianceR;\n\n const half = rootHalf * widthMul;\n drawRay(ctx, env, {\n angleRad: angle,\n rootDist,\n tipDist: rootDist + lengthPx * lengthMul,\n rootHalf: half,\n tipHalf: half * (1 - p.taper),\n strength: p.strength * brightMul,\n falloff: p.falloff,\n fadeIn: p.fadeIn * env.unit,\n });\n }\n }\n },\n});\n","import { defineShardKind } from './registry.js';\nimport { conicVarianceMask, GRADIENT_STOPS } from './draw.js';\n\n/**\n * `halo`: a ring. A radial gradient between `size − width/2` and\n * `size + width/2`, brightest at `size`.\n */\nexport const halo = defineShardKind({\n kind: 'halo',\n label: 'Halo',\n params: {\n strength: { type: 'number', default: 0.1, min: 0, max: 2 },\n size: { type: 'number', default: 0.5, min: 0, max: 2 },\n width: { type: 'number', default: 0.05, min: 0, max: 2 },\n falloff: { type: 'number', default: 1, min: 0, max: 8 },\n softness: { type: 'number', default: 0, min: 0, max: 50, unit: 'px' },\n variance: { type: 'number', default: 0, min: 0, max: 1 },\n },\n draw(ctx, p, env) {\n const inner = Math.max(0, p.size - p.width / 2) * env.unit;\n const outer = Math.max(inner, (p.size + p.width / 2) * env.unit);\n if (outer <= 0 || p.strength <= 0) return;\n\n const gradient = ctx.createRadialGradient(0, 0, inner, 0, 0, outer);\n for (let i = 0; i <= GRADIENT_STOPS; i++) {\n const t = i / GRADIENT_STOPS;\n const across = 1 - Math.abs(2 * t - 1);\n gradient.addColorStop(t, env.rgba(Math.pow(across, p.falloff) * p.strength));\n }\n\n ctx.fillStyle = gradient;\n ctx.beginPath();\n ctx.arc(0, 0, outer, 0, Math.PI * 2);\n ctx.fill();\n },\n mask: conicVarianceMask,\n});\n","import { registerShardKind } from './registry.js';\nimport { blob } from './blob.js';\nimport { fan } from './fan.js';\nimport { clusters } from './clusters.js';\nimport { halo } from './halo.js';\n\n/** Register the built-in kinds as ordinary definitions. */\nexport function registerBuiltInKinds(): void {\n registerShardKind(blob as never);\n registerShardKind(fan as never);\n registerShardKind(clusters as never);\n registerShardKind(halo as never);\n}\n\nregisterBuiltInKinds();\n\nexport { blob, fan, clusters, halo };\n","import type { ParamMap } from '../config/schema.js';\nimport type { EffectDefinition } from './types.js';\n\nconst effects = new Map<string, EffectDefinition<string, ParamMap>>();\n\n/** Define an effect object. Does not register it. */\nexport function defineEffect<N extends string, const P extends ParamMap>(\n def: EffectDefinition<N, P>,\n): EffectDefinition<N, P> {\n return def;\n}\n\nexport function registerEffect(def: EffectDefinition<string, ParamMap>): void {\n if (effects.has(def.name)) {\n warn(`overwriting already-registered effect \"${def.name}\"`);\n }\n effects.set(def.name, def as unknown as EffectDefinition<string, ParamMap>);\n}\n\nexport function getEffect(name: string): EffectDefinition<string, ParamMap> | undefined {\n return effects.get(name);\n}\n\nexport function listEffects(): EffectDefinition<string, ParamMap>[] {\n return [...effects.values()];\n}\n\nexport function unregisterEffect(name: string): void {\n effects.delete(name);\n}\n\nfunction warn(message: string): void {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return;\n console.warn(`[shardlight] ${message}`);\n}\n","import { defineEffect } from './registry.js';\n\n/**\n * `pulse`: multiplies each channel's scale by `1 + amount·sin(2π·speed·t)`.\n */\nexport const pulse = defineEffect({\n name: 'pulse',\n label: 'Pulse',\n params: {\n channels: { type: 'channels', default: ['main'] },\n speed: { type: 'number', default: 1, min: 0, max: 10, step: 0.01 },\n amount: { type: 'number', default: 0.1, min: 0, max: 1 },\n },\n apply(t, p, out) {\n const k = 1 + Math.sin(t * p.speed * Math.PI * 2) * p.amount;\n for (const channel of p.channels) out.channel(channel).scale *= k;\n },\n});\n","import { defineEffect } from './registry.js';\n\n/**\n * `flicker`: a two-sine brightness wobble, applied to each channel's opacity.\n * `channels: ['*']` (the default) means every channel.\n */\nexport const flicker = defineEffect({\n name: 'flicker',\n label: 'Flicker',\n params: {\n amount: { type: 'number', default: 0.15, min: 0, max: 1 },\n speed: { type: 'number', default: 1, min: 0, max: 10, step: 0.01 },\n channels: { type: 'channels', default: ['*'] },\n },\n apply(t, p, out) {\n const s = t * p.speed;\n const factor =\n 1 - p.amount * (0.5 + 0.25 * Math.sin(11.3 * s) + 0.25 * Math.sin(17.9 * s + 1.7));\n const targets = p.channels.includes('*') ? out.channels() : p.channels;\n for (const channel of targets) out.channel(channel).opacity *= factor;\n },\n});\n","import { defineEffect } from './registry.js';\n\n/**\n * `spin`: adds `phase + speed · 360 · t` degrees to each target channel's\n * rotation. Several spin effects on one channel add up, so a shard can turn at\n * the sum of their speeds.\n */\nexport const spin = defineEffect({\n name: 'spin',\n label: 'Spin',\n params: {\n channels: { type: 'channels', default: ['main'] },\n speed: { type: 'number', default: 0.1, min: -10, max: 10, step: 0.01, unit: 'turns/s' },\n phase: { type: 'angle', default: 0 },\n },\n apply(t, p, out) {\n const rotation = p.phase + p.speed * 360 * t;\n for (const channel of p.channels) out.channel(channel).rotation += rotation;\n },\n});\n","import { defineEffect } from './registry.js';\n\n/**\n * `hover`: eases each target channel toward `scale` / `opacity` / `rotate` as\n * the pointer sits over the light, and keeps turning at `spin` turns/s while it\n * is there. `out.hover` is the light-wide hover amount (0..1) and\n * `out.hoverTime` is the seconds accumulated while hovered, both eased by the\n * model, so the response is the same shape everywhere.\n *\n * Hover is user-driven, so it keeps running under `prefers-reduced-motion`.\n */\nexport const hover = defineEffect({\n name: 'hover',\n label: 'Hover',\n params: {\n channels: { type: 'channels', default: ['main'] },\n scale: { type: 'number', default: 1.15, min: 0, max: 4, step: 0.01 },\n opacity: { type: 'number', default: 1, min: 0, max: 4, step: 0.01 },\n rotate: { type: 'angle', default: 0 },\n spin: { type: 'number', default: 0, min: -10, max: 10, step: 0.01, unit: 'turns/s' },\n },\n reducedMotion: 'keep',\n apply(_t, p, out) {\n const h = out.hover;\n for (const channel of p.channels) {\n const values = out.channel(channel);\n values.scale *= 1 + (p.scale - 1) * h;\n values.opacity *= 1 + (p.opacity - 1) * h;\n // A fixed nudge at full hover, plus a continuous turn banked while hovered.\n values.rotation += p.rotate * h + p.spin * 360 * out.hoverTime;\n }\n },\n});\n","import type { EffectConfig } from '../config/types.js';\nimport { defineEffect } from './registry.js';\n\n/** How a light reacts to a click when it has a `collapse` effect. */\nexport type CollapseTrigger = 'click' | 'once' | 'none';\n\n/**\n * `collapse`: shrinks (`scale`) and fades (`opacity`) each target channel as the\n * light is clicked. `out.collapse` is the light-wide collapsed amount (0..1),\n * eased by the model.\n *\n * `trigger` decides the built-in click behavior: `'click'` toggles, `'once'`\n * collapses and stays, `'none'` leaves the click alone so you can drive\n * `setCollapsed()` yourself.\n *\n * Click is user-driven, so it keeps running under `prefers-reduced-motion`.\n */\nexport const collapse = defineEffect({\n name: 'collapse',\n label: 'Collapse',\n params: {\n channels: { type: 'channels', default: ['*'] },\n scale: { type: 'number', default: 0, min: 0, max: 4, step: 0.01 },\n opacity: { type: 'number', default: 1, min: 0, max: 4, step: 0.01 },\n trigger: { type: 'enum', default: 'click', values: ['click', 'once', 'none'] },\n },\n reducedMotion: 'keep',\n apply(_t, p, out) {\n const amount = out.collapse;\n if (amount <= 0) return;\n const targets = p.channels.includes('*') ? out.channels() : p.channels;\n for (const channel of targets) {\n const values = out.channel(channel);\n values.scale *= 1 + (p.scale - 1) * amount;\n values.opacity *= 1 + (p.opacity - 1) * amount;\n }\n },\n});\n\n/**\n * The built-in click behavior for a light's `collapse` effects. `'none'` wins\n * when set (an explicit opt-out), then `'once'`, otherwise `'click'`.\n */\nexport function collapseTrigger(effects: readonly EffectConfig[]): CollapseTrigger {\n let has = false;\n let once = false;\n for (const effect of effects) {\n if (effect.type !== 'collapse') continue;\n has = true;\n if (effect.trigger === 'none') return 'none';\n if (effect.trigger === 'once') once = true;\n }\n if (!has) return 'none';\n return once ? 'once' : 'click';\n}\n","import { registerEffect } from './registry.js';\nimport { pulse } from './pulse.js';\nimport { flicker } from './flicker.js';\nimport { spin } from './spin.js';\nimport { hover } from './hover.js';\nimport { collapse, collapseTrigger } from './collapse.js';\nexport type { CollapseTrigger } from './collapse.js';\n\n/** Register the built-in effects as ordinary definitions. */\nexport function registerBuiltInEffects(): void {\n registerEffect(pulse as never);\n registerEffect(flicker as never);\n registerEffect(spin as never);\n registerEffect(hover as never);\n registerEffect(collapse as never);\n}\n\nregisterBuiltInEffects();\n\nexport { pulse, flicker, spin, hover, collapse, collapseTrigger };\n","import type { ShardLightConfig } from '../config/types.js';\n\nconst presets = new Map<string, ShardLightConfig>();\n\n/** Define a preset object. Does not register it, so it can be passed directly. */\nexport function definePreset(config: ShardLightConfig): ShardLightConfig {\n return config;\n}\n\nexport function registerPreset(name: string, config: ShardLightConfig): void {\n if (presets.has(name)) {\n warn(`overwriting already-registered preset \"${name}\"`);\n }\n presets.set(name, config);\n}\n\nexport function getPreset(name: string): ShardLightConfig | undefined {\n return presets.get(name);\n}\n\nexport function listPresets(): string[] {\n return [...presets.keys()];\n}\n\nexport function unregisterPreset(name: string): void {\n presets.delete(name);\n}\n\nfunction warn(message: string): void {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return;\n console.warn(`[shardlight] ${message}`);\n}\n","import { definePreset } from './registry.js';\n\n/** `star` (default): a warm 4-point star with a soft bloom and a faint ring. */\nexport const star = definePreset({\n version: 1,\n color: '#FFF4E0',\n rotation: 45,\n seed: 1,\n shards: [\n {\n id: 'bloom',\n kind: 'blob',\n channel: 'body',\n strength: 0.4,\n size: 0.85,\n hardness: 0,\n falloff: 3,\n softness: 3,\n },\n {\n id: 'hotspot',\n kind: 'blob',\n channel: 'body',\n strength: 1,\n size: 0.13,\n hardness: 0.4,\n falloff: 2.2,\n },\n {\n id: 'beam',\n kind: 'fan',\n channel: 'rays',\n strength: 0.9,\n size: 1,\n count: 4,\n variance: 0.08,\n width: 5,\n taper: 1,\n falloff: 2,\n softness: 2,\n },\n {\n id: 'ring',\n kind: 'halo',\n channel: 'rays',\n strength: 0.06,\n size: 0.62,\n width: 0.05,\n falloff: 2,\n softness: 1.5,\n variance: 0.35,\n },\n ],\n});\n","import { definePreset } from './registry.js';\n\n/** `sun`: a big soft sun with many faint, slightly jittered rays. */\nexport const sun = definePreset({\n version: 1,\n color: '#FFE9B8',\n rotation: 0,\n seed: 1,\n shards: [\n {\n id: 'bloom',\n kind: 'blob',\n channel: 'body',\n strength: 0.55,\n size: 1.15,\n hardness: 0,\n falloff: 2.6,\n softness: 5,\n },\n {\n id: 'hotspot',\n kind: 'blob',\n channel: 'body',\n strength: 1,\n size: 0.22,\n hardness: 0.3,\n falloff: 2,\n },\n {\n id: 'rays',\n kind: 'fan',\n channel: 'rays',\n strength: 0.45,\n size: 1,\n count: 32,\n variance: 0.7,\n jitter: 0.55,\n inner: 0.06,\n width: 2,\n taper: 1,\n falloff: 1.6,\n fadeIn: 0.05,\n softness: 1.5,\n },\n {\n id: 'ring',\n kind: 'halo',\n channel: 'rays',\n strength: 0.04,\n size: 0.8,\n width: 0.07,\n falloff: 2,\n softness: 2.5,\n variance: 0.4,\n },\n ],\n});\n","import { definePreset } from './registry.js';\n\n/** `sparkle`: a small crisp glint — a tight core with two crossed fans. */\nexport const sparkle = definePreset({\n version: 1,\n color: '#FFFFFF',\n rotation: 0,\n seed: 4,\n shards: [\n {\n id: 'bloom',\n kind: 'blob',\n channel: 'body',\n strength: 0.25,\n size: 0.28,\n hardness: 0,\n falloff: 3,\n softness: 2,\n },\n {\n id: 'hotspot',\n kind: 'blob',\n channel: 'body',\n strength: 1,\n size: 0.08,\n hardness: 0.5,\n falloff: 2,\n },\n {\n id: 'spikes',\n kind: 'fan',\n channel: 'rays',\n strength: 1,\n size: 0.42,\n count: 6,\n width: 3,\n taper: 1,\n falloff: 2,\n softness: 1,\n },\n {\n id: 'glint',\n kind: 'fan',\n channel: 'glint',\n strength: 0.6,\n size: 0.26,\n count: 6,\n angle: 30,\n width: 2,\n taper: 1,\n falloff: 2,\n softness: 1,\n },\n ],\n});\n","import { definePreset } from './registry.js';\n\n/** `starburst`: a bright core throwing many long, fine, uneven rays. */\nexport const starburst = definePreset({\n version: 1,\n color: '#FFFFFF',\n rotation: 0,\n seed: 7,\n shards: [\n {\n id: 'glow',\n kind: 'blob',\n channel: 'body',\n strength: 0.3,\n size: 0.5,\n hardness: 0,\n falloff: 3,\n softness: 4,\n },\n {\n id: 'core',\n kind: 'blob',\n channel: 'body',\n strength: 1,\n size: 0.1,\n hardness: 0.5,\n falloff: 2,\n },\n {\n id: 'rays',\n kind: 'fan',\n channel: 'rays',\n strength: 0.7,\n size: 1.1,\n count: 24,\n variance: 0.45,\n width: 2,\n taper: 1,\n falloff: 1.6,\n fadeIn: 0.02,\n softness: 1,\n },\n ],\n});\n","import { definePreset } from './registry.js';\n\n/** `ember`: a warm, low glow with a few short, uneven sparks. */\nexport const ember = definePreset({\n version: 1,\n color: '#FF9A4D',\n rotation: 0,\n seed: 6,\n shards: [\n {\n id: 'bloom',\n kind: 'blob',\n channel: 'body',\n strength: 0.5,\n size: 1,\n hardness: 0,\n falloff: 2.2,\n softness: 6,\n },\n {\n id: 'hotspot',\n kind: 'blob',\n channel: 'body',\n strength: 1,\n size: 0.18,\n hardness: 0.25,\n falloff: 2.4,\n },\n {\n id: 'sparks',\n kind: 'fan',\n channel: 'rays',\n strength: 0.3,\n size: 0.85,\n count: 6,\n variance: 0.8,\n jitter: 0.4,\n inner: 0.15,\n width: 2,\n taper: 1,\n falloff: 2,\n fadeIn: 0.15,\n softness: 1,\n },\n ],\n});\n","import { registerPreset } from './registry.js';\nimport { star } from './star.js';\nimport { sun } from './sun.js';\nimport { sparkle } from './sparkle.js';\nimport { starburst } from './starburst.js';\nimport { ember } from './ember.js';\n\n/** Register the built-in presets by name. */\nexport function registerBuiltInPresets(): void {\n registerPreset('star', star);\n registerPreset('sun', sun);\n registerPreset('sparkle', sparkle);\n registerPreset('starburst', starburst);\n registerPreset('ember', ember);\n}\n\nregisterBuiltInPresets();\n\nexport { star, sun, sparkle, starburst, ember };\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nconst HEX = /^#?([0-9a-f]{3,8})$/i;\nconst RGB_FN = /^rgba?\\(\\s*([^)]+)\\)$/i;\n\nfunction clampByte(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\n/**\n * Parse the common CSS colour forms used by lights: #rgb, #rgba, #rrggbb,\n * #rrggbbaa, rgb()/rgba(). Falls back to opaque white for anything unknown so a\n * malformed colour never blanks a whole light.\n */\nexport function parseColor(input: string): RGB {\n const value = (input ?? '').trim();\n\n const hex = HEX.exec(value);\n if (hex) {\n const h = hex[1]!;\n if (h.length === 3 || h.length === 4) {\n const r = parseInt(h[0]! + h[0]!, 16);\n const g = parseInt(h[1]! + h[1]!, 16);\n const b = parseInt(h[2]! + h[2]!, 16);\n const a = h.length === 4 ? parseInt(h[3]! + h[3]!, 16) / 255 : 1;\n return { r, g, b, a };\n }\n if (h.length === 6 || h.length === 8) {\n const r = parseInt(h.slice(0, 2), 16);\n const g = parseInt(h.slice(2, 4), 16);\n const b = parseInt(h.slice(4, 6), 16);\n const a = h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1;\n return { r, g, b, a };\n }\n }\n\n const fn = RGB_FN.exec(value);\n if (fn) {\n const parts = fn[1]!\n .split(/[\\s,/]+/)\n .filter(Boolean)\n .map(Number);\n if (parts.length >= 3 && parts.every((n) => Number.isFinite(n))) {\n return {\n r: clampByte(parts[0]!),\n g: clampByte(parts[1]!),\n b: clampByte(parts[2]!),\n a: parts.length >= 4 ? Math.max(0, Math.min(1, parts[3]!)) : 1,\n };\n }\n }\n\n return { r: 255, g: 255, b: 255, a: 1 };\n}\n\n/** A function that formats a colour at a given alpha, for a draw env. */\nexport type RgbaFormatter = (alpha: number) => string;\n\nexport function makeRgba(color: string): RgbaFormatter {\n const { r, g, b, a } = parseColor(color);\n return (alpha: number) => {\n const clamped = Math.max(0, Math.min(1, alpha)) * a;\n return `rgba(${r},${g},${b},${clamped})`;\n };\n}\n\n/** Loose validity check for names used in CSS custom properties. */\nexport function isCssIdentifier(name: string): boolean {\n return /^-?[_a-zA-Z][-_a-zA-Z0-9]*$/.test(name);\n}\n","import type {\n EffectConfig,\n Preset,\n ResolvedCollapse,\n ResolvedHover,\n ResolvedLight,\n ResolvedShard,\n ResolvedSpin,\n ShardCollapse,\n ShardConfig,\n ShardHover,\n ShardInput,\n ShardLightConfig,\n ShardSpin,\n} from './types.js';\nimport type { ParamSchema } from './schema.js';\nimport { getShardKind } from '../kinds/registry.js';\nimport { getPreset } from '../presets/registry.js';\nimport { getEffect } from '../effects/registry.js';\nimport { isCssIdentifier } from '../util/color.js';\n\nexport interface ResolveInput {\n /** Starting config. Omitted or `null` = start empty (only the shards you give). */\n preset?: Preset | null;\n /** Data-driven config merged over the preset. */\n config?: Partial<ShardLightConfig> | null;\n /** Per-shard overrides (`<Shard>` children / the `shards` option). */\n shards?: readonly ShardInput[] | null;\n /** Effects; overrides `config.effects` when provided. */\n effects?: readonly EffectConfig[] | null;\n color?: string;\n rotation?: number;\n seed?: number;\n}\n\nexport interface ResolveOptions {\n /** Force development warnings on/off. Defaults to NODE_ENV !== 'production'. */\n warn?: boolean;\n /** Preset used when `preset` is omitted. Defaults to none. */\n defaultPreset?: string | null;\n}\n\nconst DEFAULT_COLOR = '#FFFFFF';\n\n/**\n * The single place that decides what gets drawn. Every adapter calls\n * it. Order: preset → config → shard overrides, merged per shard by `id`; then\n * kind defaults are filled in; then values are clamped.\n */\nexport function resolveConfig(\n input: ResolveInput = {},\n options: ResolveOptions = {},\n): ResolvedLight {\n const warn = makeWarn(options.warn);\n\n const presetConfig = resolvePreset(input.preset, options.defaultPreset ?? null, warn);\n const config = input.config ?? undefined;\n\n // Light-wide values: preset < config < explicit options.\n const color = input.color ?? config?.color ?? presetConfig?.color ?? DEFAULT_COLOR;\n const rotation = input.rotation ?? config?.rotation ?? presetConfig?.rotation ?? 0;\n const seed = input.seed ?? config?.seed ?? presetConfig?.seed ?? 1;\n\n // Shard list: preset, then config.shards, then explicit overrides.\n let list: ShardConfig[] = presetConfig ? presetConfig.shards.map((s) => ({ ...s })) : [];\n if (config?.shards) list = mergeShardList(list, config.shards, warn);\n if (input.shards) list = mergeShardList(list, input.shards, warn);\n\n // Effects: explicit overrides config.effects overrides the preset's.\n const effects = input.effects ?? config?.effects ?? presetConfig?.effects ?? [];\n\n const shards: ResolvedShard[] = [];\n for (const shard of list) {\n const resolved = resolveShard(shard, color, seed, warn);\n if (resolved) shards.push(resolved);\n }\n resolveRelativeAngles(shards);\n const motionEffects = applyShardMotion(shards, warn);\n\n return {\n version: 1,\n color,\n rotation,\n seed,\n shards,\n effects: [...resolveEffects(effects, warn), ...motionEffects],\n };\n}\n\nfunction resolvePreset(\n preset: Preset | null | undefined,\n defaultName: string | null,\n warn: Warn,\n): ShardLightConfig | undefined {\n // No preset given: start empty, or use the caller's configured default.\n if (preset === undefined) preset = defaultName ?? null;\n if (preset === null) return undefined;\n\n if (typeof preset === 'string') {\n const found = getPreset(preset);\n if (!found) {\n warn(`unknown preset \"${preset}\"`);\n return defaultName ? getPreset(defaultName) : undefined;\n }\n return found;\n }\n return preset;\n}\n\n/**\n * Merge overrides into a base list by `id`. A full shard (with `kind`) whose id\n * matches nothing is added; a partial one whose id matches nothing is skipped\n * with a warning.\n */\nfunction mergeShardList(\n base: ShardConfig[],\n overrides: readonly ShardInput[],\n warn: Warn,\n): ShardConfig[] {\n const list = base.map((s) => ({ ...s }));\n const indexById = new Map(list.map((s, i) => [s.id, i] as const));\n\n for (const override of overrides) {\n const id = (override as { id?: unknown }).id;\n if (typeof id !== 'string') {\n warn('a shard override without a string `id` was skipped');\n continue;\n }\n const index = indexById.get(id);\n if (index === undefined) {\n if ((override as { kind?: unknown }).kind === undefined) {\n warn(`override for unknown shard \"${id}\" skipped (no \\`kind\\` to add it)`);\n continue;\n }\n list.push({ ...override } as ShardConfig);\n indexById.set(id, list.length - 1);\n } else {\n list[index] = { ...list[index], ...override } as ShardConfig;\n }\n }\n\n return list;\n}\n\nfunction resolveShard(\n shard: ShardConfig,\n lightColor: string,\n lightSeed: number,\n warn: Warn,\n): ResolvedShard | null {\n const kindDef = getShardKind(shard.kind);\n if (!kindDef) {\n warn(`unknown shard kind \"${shard.kind}\" (shard \"${shard.id}\") skipped`);\n return null;\n }\n\n const params: Record<string, unknown> = {};\n for (const [name, schema] of Object.entries(kindDef.params)) {\n const raw = (shard as unknown as Record<string, unknown>)[name];\n params[name] = coerce(schema, raw, `${shard.id}.${name}`, warn);\n }\n\n const relativeTo = (shard as unknown as { relativeTo?: unknown }).relativeTo;\n if (typeof relativeTo === 'string') params.relativeTo = relativeTo;\n\n const channel = shard.channel ?? 'main';\n if (!isCssIdentifier(channel)) {\n warn(`shard \"${shard.id}\" channel \"${channel}\" is not a valid CSS identifier`);\n }\n\n return {\n id: shard.id,\n kind: shard.kind,\n visible: shard.visible ?? true,\n channel,\n blend: shard.blend ?? 'add',\n color: shard.color ?? lightColor,\n seed: shard.seed ?? lightSeed,\n spin: resolveSpin(shard.spin, shard.id, warn),\n hover: resolveHover(shard.hover, shard.id, warn),\n collapse: resolveCollapse(shard.collapse, shard.id, warn),\n params,\n };\n}\n\nconst DEFAULT_SPIN_SPEED = 0.1;\nconst HOVER_DEFAULTS: ResolvedHover = { scale: 1.15, opacity: 1, rotate: 0, spin: 0 };\nconst COLLAPSE_DEFAULTS: ResolvedCollapse = { scale: 0, opacity: 1 };\n\nfunction resolveSpin(\n value: number | ShardSpin | boolean | undefined | null,\n id: string,\n warn: Warn,\n): ResolvedSpin | undefined {\n if (value === undefined || value === null || value === false) return undefined;\n if (value === true) return { speed: DEFAULT_SPIN_SPEED, phase: 0 };\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || value === 0) return undefined;\n return { speed: value, phase: 0 };\n }\n if (typeof value === 'object') {\n const speed = Number(value.speed);\n if (!Number.isFinite(speed)) {\n warn(`shard \"${id}\" spin.speed is not a number; spin ignored`);\n return undefined;\n }\n if (speed === 0) return undefined;\n const phase = Number(value.phase ?? 0);\n return { speed, phase: Number.isFinite(phase) ? phase : 0 };\n }\n warn(`shard \"${id}\" spin must be a number, boolean or object; spin ignored`);\n return undefined;\n}\n\nfunction resolveHover(\n value: ShardHover | boolean | undefined | null,\n id: string,\n warn: Warn,\n): ResolvedHover | undefined {\n if (value === undefined || value === null || value === false) return undefined;\n if (value === true) return { ...HOVER_DEFAULTS };\n if (typeof value === 'object') {\n return {\n scale: finiteOr(value.scale, HOVER_DEFAULTS.scale),\n opacity: finiteOr(value.opacity, HOVER_DEFAULTS.opacity),\n rotate: finiteOr(value.rotate, HOVER_DEFAULTS.rotate),\n spin: finiteOr(value.spin, HOVER_DEFAULTS.spin),\n };\n }\n warn(`shard \"${id}\" hover must be a boolean or object; hover ignored`);\n return undefined;\n}\n\nfunction resolveCollapse(\n value: ShardCollapse | boolean | undefined | null,\n id: string,\n warn: Warn,\n): ResolvedCollapse | undefined {\n if (value === undefined || value === null || value === false) return undefined;\n if (value === true) return { ...COLLAPSE_DEFAULTS };\n if (typeof value === 'object') {\n return {\n scale: finiteOr(value.scale, COLLAPSE_DEFAULTS.scale),\n opacity: finiteOr(value.opacity, COLLAPSE_DEFAULTS.opacity),\n };\n }\n warn(`shard \"${id}\" collapse must be a boolean or object; collapse ignored`);\n return undefined;\n}\n\nfunction finiteOr(value: unknown, fallback: number): number {\n const n = Number(value);\n return Number.isFinite(n) ? n : fallback;\n}\n\n/**\n * Turn per-shard `spin` / `hover` / `collapse` into channel effects. A shard\n * that shares its channel with others is moved to its own channel (named after\n * its id) so it can move independently; a shard already alone on its channel\n * keeps it.\n */\nfunction applyShardMotion(shards: ResolvedShard[], warn: Warn): EffectConfig[] {\n const effects: EffectConfig[] = [];\n const originalChannels = shards.map((shard) => shard.channel);\n const taken = new Set(originalChannels);\n\n for (const shard of shards) {\n if (!shard.spin && !shard.hover && !shard.collapse) continue;\n\n const shared = originalChannels.filter((channel) => channel === shard.channel).length > 1;\n if (shared) {\n const name = uniqueChannel(shard.id, taken);\n shard.channel = name;\n taken.add(name);\n if (!isCssIdentifier(name)) {\n warn(`shard \"${shard.id}\" got an invalid motion channel \"${name}\"`);\n }\n }\n\n if (shard.spin) {\n effects.push({\n type: 'spin',\n channels: [shard.channel],\n speed: shard.spin.speed,\n phase: shard.spin.phase,\n });\n }\n if (shard.hover) {\n effects.push({\n type: 'hover',\n channels: [shard.channel],\n scale: shard.hover.scale,\n opacity: shard.hover.opacity,\n rotate: shard.hover.rotate,\n spin: shard.hover.spin,\n });\n }\n if (shard.collapse) {\n effects.push({\n type: 'collapse',\n channels: [shard.channel],\n scale: shard.collapse.scale,\n opacity: shard.collapse.opacity,\n });\n }\n }\n\n return effects;\n}\n\nfunction uniqueChannel(id: string, taken: ReadonlySet<string>): string {\n const base = isCssIdentifier(id)\n ? id\n : `shard-${id.replace(/[^_a-zA-Z0-9-]/g, '-').replace(/^-+/, '')}`;\n let name = base;\n let i = 2;\n while (taken.has(name)) {\n name = `${base}-${i}`;\n i += 1;\n }\n return name;\n}\n\n/** `relativeTo` measures a fan/cluster's `angle` from another shard's `angle`. */\nfunction resolveRelativeAngles(shards: ResolvedShard[]): void {\n const byId = new Map(shards.map((s) => [s.id, s] as const));\n for (const shard of shards) {\n const relativeTo = shard.params.relativeTo;\n if (typeof relativeTo !== 'string') continue;\n const target = byId.get(relativeTo);\n if (!target) continue;\n if (typeof target.params.angle === 'number' && typeof shard.params.angle === 'number') {\n shard.params.angle += target.params.angle;\n }\n }\n}\n\nfunction resolveEffects(effects: readonly EffectConfig[], warn: Warn): EffectConfig[] {\n const out: EffectConfig[] = [];\n for (const effect of effects) {\n const def = getEffect(effect.type);\n if (!def) {\n warn(`unknown effect \"${effect.type}\" skipped`);\n continue;\n }\n const params: Record<string, unknown> = { type: effect.type };\n for (const [name, schema] of Object.entries(def.params)) {\n params[name] = coerce(\n schema,\n (effect as Record<string, unknown>)[name],\n `effect ${effect.type}.${name}`,\n warn,\n );\n }\n out.push(params as EffectConfig);\n }\n return out;\n}\n\nfunction coerce(schema: ParamSchema, raw: unknown, label: string, warn: Warn): unknown {\n switch (schema.type) {\n case 'number':\n case 'angle': {\n let value = raw === undefined || raw === null ? schema.default : Number(raw);\n if (!Number.isFinite(value)) {\n warn(`${label} is not a number; using default ${schema.default}`);\n value = schema.default;\n }\n if (schema.min !== undefined && value < schema.min) {\n warn(`${label} (${value}) clamped to min ${schema.min}`);\n value = schema.min;\n }\n if (schema.max !== undefined && value > schema.max) {\n warn(`${label} (${value}) clamped to max ${schema.max}`);\n value = schema.max;\n }\n return value;\n }\n case 'boolean':\n return raw === undefined || raw === null ? schema.default : Boolean(raw);\n case 'color':\n return raw === undefined || raw === null ? schema.default : String(raw);\n case 'enum': {\n const value = raw === undefined || raw === null ? schema.default : String(raw);\n if (!schema.values.includes(value)) {\n warn(`${label} \"${value}\" is not one of ${schema.values.join(', ')}; using default`);\n return schema.default;\n }\n return value;\n }\n case 'channels': {\n if (raw === undefined || raw === null) return [...schema.default];\n if (!Array.isArray(raw)) {\n warn(`${label} is not an array; using default`);\n return [...schema.default];\n }\n return raw.map((v) => String(v));\n }\n default:\n return raw;\n }\n}\n\ntype Warn = (message: string) => void;\n\nfunction makeWarn(enabled?: boolean): Warn {\n const on =\n enabled ?? (typeof process !== 'undefined' ? process.env?.NODE_ENV !== 'production' : true);\n if (!on) return () => {};\n return (message: string) => {\n console.warn(`[shardlight] ${message}`);\n };\n}\n","import type { ShardLightConfig } from './types.js';\n\nexport const CURRENT_VERSION = 1;\n\n/**\n * Upgrade older config JSON to the current schema version, step by step\n *. Adapters run this on every config they're given, so old saves\n * keep working. Unknown fields are preserved so a config from a newer version\n * degrades gracefully rather than throwing.\n */\nexport function migrateConfig(input: unknown): ShardLightConfig {\n if (!input || typeof input !== 'object') {\n throw new Error('shardlight: migrateConfig expected a config object');\n }\n\n let config: Record<string, unknown> = { ...(input as Record<string, unknown>) };\n let version = typeof config.version === 'number' ? config.version : CURRENT_VERSION;\n\n if (version > CURRENT_VERSION) {\n // From the future: leave it alone and let unknown kinds/effects be skipped.\n return config as unknown as ShardLightConfig;\n }\n\n // No historical versions yet. Future steps chain here: `while (version < N)`.\n while (version < CURRENT_VERSION) {\n version += 1;\n config = { ...config, version };\n }\n\n if (config.version !== CURRENT_VERSION) config = { ...config, version: CURRENT_VERSION };\n return config as unknown as ShardLightConfig;\n}\n","import { getEffect } from './registry.js';\nimport type { FrameValues } from './types.js';\nimport type { ChannelValues } from '../index.js';\nimport type { EffectConfig } from '../config/types.js';\n\n/** Values set by hand through `set()`; effects compose on top of these. */\nexport interface FrameBase {\n channels?: Record<string, { scale?: number; opacity?: number; rotation?: number }>;\n opacity?: number;\n /** Light-wide hover amount, 0..1. Default 0. */\n hover?: number;\n /** Seconds accumulated while hovered. Default 0. */\n hoverTime?: number;\n /** Light-wide collapsed amount, 0..1. Default 0. */\n collapse?: number;\n}\n\n/**\n * Compute a frame: start from the manual base (scale 1 / opacity 1 / rotation 0),\n * seed every known channel, then let each effect multiply scale and opacity and\n * add to rotation.\n */\nexport function computeFrame(\n base: FrameBase,\n effects: readonly EffectConfig[],\n t: number,\n channelNames: readonly string[] = [],\n): FrameValues {\n const map = new Map<string, ChannelValues>();\n for (const name of channelNames) map.set(name, { scale: 1, opacity: 1, rotation: 0 });\n if (base.channels) {\n for (const [name, values] of Object.entries(base.channels)) {\n const current = map.get(name) ?? { scale: 1, opacity: 1, rotation: 0 };\n map.set(name, {\n scale: values.scale ?? current.scale,\n opacity: values.opacity ?? current.opacity,\n rotation: values.rotation ?? current.rotation,\n });\n }\n }\n\n const out: FrameValues = {\n opacity: base.opacity ?? 1,\n hover: base.hover ?? 0,\n hoverTime: base.hoverTime ?? 0,\n collapse: base.collapse ?? 0,\n channel(name) {\n let channel = map.get(name);\n if (!channel) {\n channel = { scale: 1, opacity: 1, rotation: 0 };\n map.set(name, channel);\n }\n return channel;\n },\n channels() {\n return [...map.keys()];\n },\n };\n\n for (const effect of effects) {\n const def = getEffect(effect.type);\n if (!def) continue;\n def.apply(t, effect as never, out);\n }\n\n return out;\n}\n","import type { ResolvedLayer } from '../config/types.js';\n\n/**\n * What a baked layer can become. Adapters say which types they\n * accept, and the model asks the baker for a compatible one: DOM takes `url`,\n * three takes `bitmap` or `canvas`.\n */\nexport type LayerSource =\n | { type: 'url'; url: string }\n | { type: 'bitmap'; bitmap: ImageBitmap }\n | { type: 'canvas'; canvas: HTMLCanvasElement | OffscreenCanvas };\n\nexport interface BakeOptions {\n resolution: number;\n rayScale: number;\n accept: LayerSource['type'][];\n}\n\n/**\n * Baking sits behind this interface, so where and how it happens can change\n * without touching kinds or adapters. The baker's `id` is part of the cache key.\n */\nexport interface Baker {\n id: string;\n bake(layer: ResolvedLayer, opts: BakeOptions, signal: AbortSignal): Promise<LayerSource>;\n}\n\n/**\n * Thrown when a 2D context is unavailable (canvas memory cap). Treat it as a\n * non-fatal \"try again later\": the result is left uncached.\n */\nexport class NullContextError extends Error {\n constructor() {\n super('shardlight: 2D context unavailable (canvas memory cap?)');\n this.name = 'NullContextError';\n }\n}\n","/**\n * FNV-1a string hash. Deterministic across runs and platforms.\n * Used to seed a shard's PRNG from its `id`, so reordering or inserting\n * shards never reshuffles the other shards' randomness.\n */\nexport function hashString(input: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return h >>> 0;\n}\n","import { hashString } from './hash.js';\n\n/** mulberry32: a tiny, fast, seedable PRNG. */\nexport function mulberry32(seed: number): () => number {\n let a = seed >>> 0;\n return function next(): number {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/**\n * A shard's PRNG seed: `hash(id) ^ (shard.seed ?? light.seed)`.\n * Seeding by id (not position) keeps each shard's randomness stable.\n */\nexport function shardSeed(id: string, seed: number): number {\n return (hashString(id) ^ (seed >>> 0)) >>> 0;\n}\n","/** Environment helpers shared by the bakers and adapters. */\n\nexport type AnyCanvas = HTMLCanvasElement | OffscreenCanvas;\nexport type AnyCanvasContext = CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/** Create a canvas of the best available flavour for the current host. */\nexport function createCanvas(width: number, height: number): AnyCanvas {\n if (typeof OffscreenCanvas !== 'undefined') {\n return new OffscreenCanvas(width, height);\n }\n if (typeof document !== 'undefined') {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n // No canvas host (SSR / unit tests). The caller treats a missing context as\n // a non-fatal \"try again later\".\n throw new Error('shardlight: no canvas implementation available in this environment');\n}\n\nexport function get2dContext(canvas: AnyCanvas): AnyCanvasContext | null {\n try {\n return canvas.getContext('2d') as AnyCanvasContext | null;\n } catch {\n return null;\n }\n}\n\n/**\n * Free a scratch canvas immediately rather than waiting for the GC.\n * Setting both dimensions to 0 releases the backing store in browsers.\n */\nexport function freeCanvas(canvas: AnyCanvas): void {\n try {\n canvas.width = 0;\n canvas.height = 0;\n } catch {\n /* ignore */\n }\n}\n\nexport function canvasToBlob(canvas: AnyCanvas): Promise<Blob> {\n if (typeof (canvas as OffscreenCanvas).convertToBlob === 'function') {\n return (canvas as OffscreenCanvas).convertToBlob({ type: 'image/png' });\n }\n const el = canvas as HTMLCanvasElement;\n return new Promise((resolve, reject) => {\n el.toBlob((blob) => {\n if (blob) resolve(blob);\n else reject(new Error('shardlight: canvas.toBlob returned null'));\n }, 'image/png');\n });\n}\n\nexport function isLowMemoryDevice(): boolean {\n if (typeof navigator === 'undefined') return false;\n const nav = navigator as Navigator & { deviceMemory?: number };\n if (typeof nav.deviceMemory === 'number') return nav.deviceMemory <= 2;\n return false;\n}\n","import { getShardKind } from '../kinds/registry.js';\nimport { applyRayScale } from '../kinds/draw.js';\nimport { mulberry32, shardSeed } from '../util/rng.js';\nimport { makeRgba } from '../util/color.js';\nimport { canvasToBlob, createCanvas, freeCanvas, get2dContext } from '../util/dom.js';\nimport type { ResolvedLayer } from '../config/types.js';\nimport type { BakeOptions, Baker, LayerSource } from './baker.js';\nimport { NullContextError } from './baker.js';\n\n/**\n * The default baker. Draws each shard to its own scratch canvas with\n * the kind's `draw`, applies its variance mask, then composites it onto the\n * layer canvas with `lighter` and a per-shard blur.\n */\nexport const canvas2dBaker: Baker = {\n id: 'canvas2d',\n\n async bake(layer: ResolvedLayer, opts: BakeOptions, signal: AbortSignal): Promise<LayerSource> {\n throwIfAborted(signal);\n const resolution = Math.max(1, Math.floor(opts.resolution));\n\n const canvas = createCanvas(resolution, resolution);\n const ctx = get2dContext(canvas);\n if (!ctx) {\n freeCanvas(canvas);\n throw new NullContextError();\n }\n ctx.clearRect(0, 0, resolution, resolution);\n\n const unit = resolution / 2;\n const px = resolution / 1024;\n\n for (const shard of layer.shards) {\n throwIfAborted(signal);\n if (!shard.visible) continue;\n const def = getShardKind(shard.kind);\n if (!def) continue;\n\n const scratch = createCanvas(resolution, resolution);\n const scratchCtx = get2dContext(scratch);\n if (!scratchCtx) {\n freeCanvas(scratch);\n continue;\n }\n\n const params = applyRayScale(\n shard.params,\n def.params as Record<string, { ray?: boolean }>,\n opts.rayScale,\n );\n const env = {\n unit,\n px,\n color: shard.color,\n rayScale: opts.rayScale,\n size: resolution,\n rng: mulberry32(shardSeed(shard.id, shard.seed)),\n rgba: makeRgba(shard.color),\n };\n\n // The context is centred and turned by the light's rotation for the shard.\n scratchCtx.save();\n scratchCtx.translate(unit, unit);\n scratchCtx.rotate((layer.rotation * Math.PI) / 180);\n try {\n def.draw(scratchCtx, params as never, env);\n } catch {\n // A misbehaving custom kind must not take down the whole bake.\n }\n scratchCtx.restore();\n\n if (def.mask) {\n try {\n def.mask(scratchCtx, params as never, env, resolution);\n } catch {\n /* ignore */\n }\n }\n\n let blur = 0;\n if (def.blur) blur = def.blur(params as never, env);\n else if (typeof params.softness === 'number') blur = params.softness;\n\n ctx.save();\n ctx.globalCompositeOperation = 'lighter';\n if (blur > 0 && typeof ctx.filter === 'string') ctx.filter = `blur(${blur}px)`;\n ctx.drawImage(scratch as unknown as CanvasImageSource, 0, 0);\n ctx.restore();\n\n freeCanvas(scratch);\n }\n\n return encode(canvas, opts, signal);\n },\n};\n\nasync function encode(\n canvas: HTMLCanvasElement | OffscreenCanvas,\n opts: BakeOptions,\n signal: AbortSignal,\n): Promise<LayerSource> {\n const accept = opts.accept;\n\n if (accept.includes('url')) {\n const blob = await canvasToBlob(canvas);\n freeCanvas(canvas);\n throwIfAborted(signal);\n return { type: 'url', url: URL.createObjectURL(blob) };\n }\n\n if (accept.includes('bitmap') && typeof createImageBitmap === 'function') {\n try {\n // Straight (non-premultiplied) alpha, no colour-space conversion: three\n // uploads it as-is and premultiplies once on blending, exactly like the\n // DOM composites the PNG. The default is premultiplied, which three then\n // premultiplies again, darkening faint (low-alpha) pixels.\n const bitmap = await createImageBitmap(canvas as unknown as ImageBitmapSource, {\n premultiplyAlpha: 'none',\n colorSpaceConversion: 'none',\n });\n throwIfAborted(signal);\n freeCanvas(canvas);\n return { type: 'bitmap', bitmap };\n } catch (error) {\n if (isAbort(error)) throw error;\n // Fall through to a canvas source.\n }\n }\n\n if (accept.includes('canvas') || accept.includes('bitmap')) {\n return { type: 'canvas', canvas };\n }\n\n const blob = await canvasToBlob(canvas);\n freeCanvas(canvas);\n throwIfAborted(signal);\n return { type: 'url', url: URL.createObjectURL(blob) };\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (signal.aborted) {\n const error = new Error('Aborted');\n error.name = 'AbortError';\n throw error;\n }\n}\n\nfunction isAbort(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","import type { LayerSource } from './baker.js';\n\n/**\n * A ref-counted cache keyed by the layer's content hash, shared across every\n * light and target on the page. A null/deferred context is not an\n * error: the source simply never lands in the cache, so the next call retries.\n *\n * The cache — not the caller — owns each bake's `AbortController`. Several\n * lights can wait on one in-flight bake; it is cancelled only when the last\n * interested light releases it. This prevents one consumer's `dispose()` from\n * aborting a bake another consumer is still waiting for (which StrictMode's\n * mount/unmount/remount triggers immediately).\n */\nconst sources = new Map<string, LayerSource>();\nconst refs = new Map<string, number>();\nconst pending = new Map<string, Pending>();\n\ninterface Pending {\n promise: Promise<LayerSource>;\n controller: AbortController;\n}\n\nexport function acquireSource(\n key: string,\n start: (signal: AbortSignal) => Promise<LayerSource>,\n): Promise<LayerSource> {\n refs.set(key, (refs.get(key) ?? 0) + 1);\n\n const existing = sources.get(key);\n if (existing) return Promise.resolve(existing);\n\n const inflight = pending.get(key);\n if (inflight) return inflight.promise;\n\n const controller = new AbortController();\n const entry: Pending = { controller, promise: undefined as unknown as Promise<LayerSource> };\n entry.promise = start(controller.signal).then(\n (source) => {\n if (pending.get(key) === entry) pending.delete(key);\n sources.set(key, source);\n // Everyone released while we were baking: free it right away.\n if (!refs.has(key)) {\n sources.delete(key);\n disposeSource(source);\n }\n return source;\n },\n (error) => {\n if (pending.get(key) === entry) pending.delete(key);\n throw error;\n },\n );\n pending.set(key, entry);\n return entry.promise;\n}\n\nexport function releaseSource(key: string): void {\n const next = (refs.get(key) ?? 0) - 1;\n if (next > 0) {\n refs.set(key, next);\n return;\n }\n refs.delete(key);\n\n const source = sources.get(key);\n if (source) {\n sources.delete(key);\n disposeSource(source);\n return;\n }\n\n const inflight = pending.get(key);\n if (inflight) {\n // Nobody wants it any more: cancel and drop it immediately, so a later\n // acquire starts a fresh bake instead of adopting an aborted one.\n pending.delete(key);\n inflight.controller.abort();\n }\n}\n\nexport function disposeSource(source: LayerSource): void {\n if (source.type === 'url') {\n if (typeof URL !== 'undefined' && typeof URL.revokeObjectURL === 'function') {\n URL.revokeObjectURL(source.url);\n }\n } else if (source.type === 'bitmap') {\n try {\n source.bitmap.close();\n } catch {\n /* ignore */\n }\n } else if (source.type === 'canvas') {\n try {\n source.canvas.width = 0;\n source.canvas.height = 0;\n } catch {\n /* ignore */\n }\n }\n}\n\n/** Number of live entries; used by the memory tests. */\nexport function cacheSize(): number {\n return sources.size;\n}\n\nexport function clearCache(): void {\n for (const source of sources.values()) disposeSource(source);\n sources.clear();\n refs.clear();\n for (const inflight of pending.values()) inflight.controller.abort();\n pending.clear();\n}\n","/**\n * Runs bakes one layer per task, yielding between them, so a big light never\n * blocks a frame and stale bakes never finish.\n */\nexport interface Scheduler {\n run<T>(task: () => Promise<T>, signal?: AbortSignal): Promise<T>;\n /** Drop everything still queued (does not cancel the running task). */\n clear(): void;\n}\n\nexport interface SchedulerOptions {\n /** Delay between tasks, in ms. 0 (a macrotask) still yields. */\n yieldDelay?: number;\n}\n\nexport function createScheduler(options: SchedulerOptions = {}): Scheduler {\n const delay = options.yieldDelay ?? 0;\n interface Item {\n task: () => Promise<unknown>;\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n signal?: AbortSignal;\n }\n const queue: Item[] = [];\n let running = false;\n\n async function pump(): Promise<void> {\n if (running) return;\n running = true;\n try {\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (item.signal?.aborted) {\n item.reject(abortError());\n continue;\n }\n try {\n item.resolve(await item.task());\n } catch (error) {\n item.reject(error);\n }\n if (queue.length > 0) await sleep(delay);\n }\n } finally {\n running = false;\n }\n }\n\n return {\n run<T>(task: () => Promise<T>, signal?: AbortSignal): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n queue.push({\n task: task as () => Promise<unknown>,\n resolve: resolve as (value: unknown) => void,\n reject,\n signal,\n });\n void pump();\n });\n },\n clear(): void {\n queue.length = 0;\n },\n };\n}\n\nexport function abortError(): Error {\n if (typeof DOMException !== 'undefined') {\n return new DOMException('Aborted', 'AbortError');\n }\n const error = new Error('Aborted');\n error.name = 'AbortError';\n return error;\n}\n\nexport function isAbortError(error: unknown): boolean {\n return (\n (error instanceof Error && error.name === 'AbortError') ||\n (typeof DOMException !== 'undefined' &&\n error instanceof DOMException &&\n error.name === 'AbortError')\n );\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/**\n * Stable, deterministic serialisation used for cache keys and diffing.\n * Key order never affects the output.\n */\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortValue);\n if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj).sort()) out[key] = sortValue(obj[key]);\n return out;\n }\n if (typeof value === 'number') {\n // Normalise -0 and NaN so keys are stable.\n if (Object.is(value, -0)) return 0;\n if (Number.isNaN(value)) return 'NaN';\n }\n return value;\n}\n","import type { ResolvedLight, ResolvedLayer, ResolvedShard } from '../config/types.js';\nimport { hashString } from '../util/hash.js';\nimport { stableStringify } from '../util/stringify.js';\n\nexport interface BakeInputs {\n resolution: number;\n rayScale: number;\n baker: string;\n accept: string[];\n}\n\n/**\n * Group shards into layers: shards that share `channel` + `blend` are baked\n * baked together into one image. The layer `key` is a stable content\n * hash (resolved shards + light-wide bake inputs) used for caching and sharing.\n */\nexport function buildLayers(light: ResolvedLight, inputs: BakeInputs): ResolvedLayer[] {\n const groups = new Map<string, ResolvedShard[]>();\n for (const shard of light.shards) {\n if (!shard.visible) continue;\n const id = layerId(shard.channel, shard.blend);\n let group = groups.get(id);\n if (!group) {\n group = [];\n groups.set(id, group);\n }\n group.push(shard);\n }\n\n const layers: ResolvedLayer[] = [];\n for (const [id, shards] of groups) {\n const [channel, blend] = id.split('|') as [string, string];\n const content = {\n shards: shards.map((s) => ({\n id: s.id,\n kind: s.kind,\n params: s.params,\n color: s.color,\n seed: s.seed,\n })),\n color: light.color,\n rotation: light.rotation,\n seed: light.seed,\n resolution: inputs.resolution,\n rayScale: inputs.rayScale,\n baker: inputs.baker,\n accept: inputs.accept,\n };\n layers.push({\n key: `sl_${hashString(stableStringify(content)).toString(36)}`,\n id,\n channel,\n blend: blend as 'add' | 'screen',\n shards,\n color: light.color,\n rotation: light.rotation,\n seed: light.seed,\n });\n }\n return layers;\n}\n\nexport function layerId(channel: string, blend: string): string {\n return `${channel}|${blend}`;\n}\n","import { resolveConfig, type ResolveInput } from '../config/resolve.js';\nimport { migrateConfig } from '../config/migrate.js';\nimport { buildLayers } from '../model/layers.js';\nimport { canvas2dBaker } from './canvas2d.js';\nimport { acquireSource, releaseSource } from './cache.js';\nimport type { Baker, LayerSource } from './baker.js';\nimport { createScheduler } from './scheduler.js';\n\nexport interface PrewarmOptions extends ResolveInput {\n resolution?: number;\n rayScale?: number;\n baker?: Baker;\n accepts?: LayerSource['type'][];\n warn?: boolean;\n}\n\nconst prewarmed: string[] = [];\n\n/**\n * Bake a config into the shared cache ahead of time, so a light that appears on\n * a key moment (a reveal, an entrance) is ready before it's needed.\n * Holds a cache reference until `releasePrewarm()` is called.\n */\nexport async function prewarm(options: PrewarmOptions = {}): Promise<void> {\n const baker = options.baker ?? canvas2dBaker;\n const resolution = options.resolution ?? 1024;\n const rayScale = options.rayScale ?? 1;\n const accepts = options.accepts ?? (['url'] as LayerSource['type'][]);\n const config = options.config ? migrateConfig(options.config) : undefined;\n\n const light = resolveConfig(\n {\n preset: options.preset,\n config,\n shards: options.shards,\n effects: options.effects,\n color: options.color,\n rotation: options.rotation,\n seed: options.seed,\n },\n { warn: options.warn },\n );\n\n const layers = buildLayers(light, {\n resolution,\n rayScale,\n baker: baker.id,\n accept: accepts,\n });\n\n const scheduler = createScheduler();\n await Promise.all(\n layers.map((layer) => {\n prewarmed.push(layer.key);\n return acquireSource(layer.key, (signal) =>\n scheduler.run(\n () => baker.bake(layer, { resolution, rayScale, accept: accepts }, signal),\n signal,\n ),\n );\n }),\n );\n}\n\n/** Release the cache references held by `prewarm()`. */\nexport function releasePrewarm(): void {\n for (const key of prewarmed) releaseSource(key);\n prewarmed.length = 0;\n}\n","/**\n * Copy only the own properties whose value is not `undefined`.\n *\n * Used when merging options over defaults: a caller that spreads an optional\n * prop (e.g. `{ baker }` where `baker` is undefined) must not wipe out the\n * default. `null` is kept, since it is a meaningful value for `preset`.\n */\nexport function definedOnly<T extends object>(value: T): Partial<T> {\n const out: Partial<T> = {};\n for (const key of Object.keys(value) as (keyof T)[]) {\n if (value[key] !== undefined) out[key] = value[key];\n }\n return out;\n}\n","import { resolveConfig, type ResolveInput } from '../config/resolve.js';\nimport { migrateConfig } from '../config/migrate.js';\nimport type { EffectConfig, ResolvedLayer, ResolvedLight } from '../config/types.js';\nimport { getEffect } from '../effects/registry.js';\nimport { computeFrame } from '../effects/frame-values.js';\nimport type { FrameValues } from '../effects/types.js';\nimport { canvas2dBaker } from '../bake/canvas2d.js';\nimport { acquireSource, releaseSource } from '../bake/cache.js';\nimport type { Baker, LayerSource } from '../bake/baker.js';\nimport { createScheduler } from '../bake/scheduler.js';\nimport { isAbortError } from '../bake/scheduler.js';\nimport { buildLayers } from './layers.js';\nimport { definedOnly } from '../util/object.js';\n\n/** One host unit: one baked image, one `<img>` or plane. */\nexport interface Layer {\n /** Stable while the layer exists: `${channel}|${blend}`. */\n id: string;\n /** Content hash; changes when the layer needs re-baking. */\n key: string;\n channel: string;\n blend: 'add' | 'screen';\n source: LayerSource | null;\n}\n\nexport interface SetValues {\n channels?: Record<string, { scale?: number; opacity?: number; rotation?: number }>;\n /** The whole light's opacity. */\n opacity?: number;\n /** Direct hover amount 0..1; also snaps the eased hover target. */\n hover?: number;\n /** Direct collapsed amount 0..1; also snaps the eased collapse target. */\n collapse?: number;\n}\n\nexport interface LightModelOptions extends ResolveInput {\n resolution?: number;\n rayScale?: number;\n baker?: Baker;\n accepts?: LayerSource['type'][];\n /** Pause effects under `prefers-reduced-motion`. */\n reducedMotion?: boolean;\n /** Seconds for hover to ease in/out. Default 0.25; 0 snaps. */\n hoverEase?: number;\n /** Seconds for the click collapse to ease in/out. Default 0.3; 0 snaps. */\n collapseEase?: number;\n warn?: boolean;\n onError?: (error: unknown) => void;\n}\n\nexport interface LightModel {\n subscribe(listener: (layers: Layer[]) => void): () => void;\n onFrame(listener: (values: FrameValues) => void): () => void;\n update(patch: Partial<LightModelOptions>): void;\n set(values: SetValues): void;\n setChannel(\n channel: string,\n values: { scale?: number; opacity?: number; rotation?: number },\n ): void;\n /** Ease the light-wide hover amount toward 0 or 1. */\n setHover(hovered: boolean): void;\n /** Ease the light-wide collapse toward 0 (expanded) or 1 (collapsed). */\n setCollapsed(collapsed: boolean): void;\n /** Flip between expanded and collapsed. */\n toggleCollapsed(): void;\n tick(dt: number): void;\n dispose(): void;\n readonly layers: readonly Layer[];\n readonly resolved: ResolvedLight;\n /** Resolves once every currently-known layer has a baked source. */\n readonly ready: Promise<void>;\n}\n\nconst DEFAULT_RESOLUTION = 1024;\nconst DEFAULT_ACCEPTS: LayerSource['type'][] = ['url'];\nconst DEFAULT_HOVER_EASE = 0.25;\nconst DEFAULT_COLLAPSE_EASE = 0.3;\n\n/**\n * The headless controller every target wraps. It owns everything that\n * isn't drawing to a host: resolving, grouping, baking, caching, diffing and\n * effects.\n */\nexport function createLightModel(options: LightModelOptions = {}): LightModel {\n let opts: LightModelOptions = {\n resolution: DEFAULT_RESOLUTION,\n rayScale: 1,\n baker: canvas2dBaker,\n accepts: DEFAULT_ACCEPTS,\n ...definedOnly(options),\n };\n\n const scheduler = createScheduler();\n const layerListeners = new Set<(layers: Layer[]) => void>();\n const frameListeners = new Set<(values: FrameValues) => void>();\n const acquired = new Map<string, number>();\n const readyWaiters: Array<() => void> = [];\n\n let resolved: ResolvedLight = resolve(opts);\n let layers: Layer[] = [];\n let manual: SetValues = {};\n let time = 0;\n let hover = 0;\n let hoverTarget = 0;\n let hoverTime = 0;\n let collapse = 0;\n let collapseTarget = 0;\n let disposed = false;\n\n function resolve(current: LightModelOptions): ResolvedLight {\n const config = current.config ? migrateConfig(current.config) : undefined;\n return resolveConfig(\n {\n preset: current.preset,\n config,\n shards: current.shards,\n effects: current.effects,\n color: current.color,\n rotation: current.rotation,\n seed: current.seed,\n },\n { warn: current.warn },\n );\n }\n\n function activeEffects(): EffectConfig[] {\n if (!opts.reducedMotion) return resolved.effects;\n return resolved.effects.filter((effect) => getEffect(effect.type)?.reducedMotion === 'keep');\n }\n\n function channelNames(): string[] {\n return [...new Set(layers.map((layer) => layer.channel))];\n }\n\n function hasEffect(type: string): boolean {\n return resolved.effects.some((effect) => effect.type === type);\n }\n\n function emitLayers(): void {\n const snapshot = layers.slice();\n for (const listener of layerListeners) listener(snapshot);\n }\n\n function frame(): FrameValues {\n return computeFrame(\n { ...manual, hover, hoverTime, collapse },\n activeEffects(),\n time,\n channelNames(),\n );\n }\n\n function emitFrame(): void {\n const values = frame();\n for (const listener of frameListeners) listener(values);\n }\n\n function pendingCount(): number {\n return layers.reduce((count, layer) => count + (layer.source ? 0 : 1), 0);\n }\n\n function flushReady(): void {\n if (pendingCount() !== 0) return;\n while (readyWaiters.length > 0) readyWaiters.shift()!();\n }\n\n function bake(resolvedLayer: ResolvedLayer, view: Layer): void {\n acquireSource(view.key, (signal) =>\n scheduler.run(\n () =>\n opts.baker!.bake(\n resolvedLayer,\n {\n resolution: opts.resolution ?? DEFAULT_RESOLUTION,\n rayScale: opts.rayScale ?? 1,\n accept: opts.accepts ?? DEFAULT_ACCEPTS,\n },\n signal,\n ),\n signal,\n ),\n )\n .then((source) => {\n if (disposed) return;\n const current = currentView(view);\n if (!current) return;\n current.source = source;\n emitLayers();\n flushReady();\n })\n .catch((error) => {\n if (disposed || isAbortError(error)) return;\n opts.onError?.(error);\n // Leave it pending so a later update retries.\n });\n }\n\n /** Find the current view for a possibly-replaced layer. */\n function currentView(view: Layer): Layer | undefined {\n return layers.find((layer) => layer.id === view.id && layer.key === view.key);\n }\n\n /** Rebuild the resolved layers and reconcile host layers + bakes. */\n function sync(): void {\n const desired = buildLayers(resolved, {\n resolution: opts.resolution ?? DEFAULT_RESOLUTION,\n rayScale: opts.rayScale ?? 1,\n baker: opts.baker!.id,\n accept: opts.accepts ?? DEFAULT_ACCEPTS,\n });\n\n const desiredKeys = new Set(desired.map((layer) => layer.key));\n for (const key of [...acquired.keys()]) {\n if (!desiredKeys.has(key)) {\n releaseSource(key);\n acquired.delete(key);\n }\n }\n\n const previous = new Map(layers.map((layer) => [layer.id, layer] as const));\n layers = desired.map((layer) => {\n const prev = previous.get(layer.id);\n return {\n id: layer.id,\n key: layer.key,\n channel: layer.channel,\n blend: layer.blend,\n source: prev && prev.key === layer.key ? prev.source : null,\n };\n });\n\n emitLayers();\n\n for (let i = 0; i < desired.length; i++) {\n const layer = layers[i]!;\n if (acquired.has(layer.key)) continue;\n acquired.set(layer.key, 1);\n bake(desired[i]!, layer);\n }\n\n flushReady();\n }\n\n const model: LightModel = {\n subscribe(listener) {\n layerListeners.add(listener);\n listener(layers.slice());\n return () => layerListeners.delete(listener);\n },\n onFrame(listener) {\n frameListeners.add(listener);\n listener(frame());\n return () => frameListeners.delete(listener);\n },\n update(patch) {\n if (disposed) return;\n opts = { ...opts, ...definedOnly(patch) };\n resolved = resolve(opts);\n sync();\n // Effects may have changed: recompute the current frame.\n emitFrame();\n },\n set(values) {\n if (values.hover !== undefined) {\n hover = clamp01(values.hover);\n hoverTarget = hover;\n }\n if (values.collapse !== undefined) {\n collapse = clamp01(values.collapse);\n collapseTarget = collapse;\n }\n manual = {\n ...manual,\n ...values,\n channels: values.channels ? { ...manual.channels, ...values.channels } : manual.channels,\n };\n emitFrame();\n },\n setChannel(channel, values) {\n model.set({ channels: { [channel]: values } });\n },\n setHover(hovered) {\n if (disposed) return;\n if (!hasEffect('hover')) return;\n hoverTarget = hovered ? 1 : 0;\n if ((opts.hoverEase ?? DEFAULT_HOVER_EASE) <= 0) {\n hover = hoverTarget;\n emitFrame();\n }\n },\n setCollapsed(collapsed) {\n if (disposed) return;\n if (!hasEffect('collapse')) return;\n collapseTarget = collapsed ? 1 : 0;\n if ((opts.collapseEase ?? DEFAULT_COLLAPSE_EASE) <= 0) {\n collapse = collapseTarget;\n emitFrame();\n }\n },\n toggleCollapsed() {\n model.setCollapsed(collapseTarget < 0.5);\n },\n tick(dt) {\n if (disposed) return;\n const idle = activeEffects().length === 0;\n if (idle && hover === hoverTarget && collapse === collapseTarget) return;\n time += dt;\n if (hover !== hoverTarget) {\n const ease = opts.hoverEase ?? DEFAULT_HOVER_EASE;\n if (ease <= 0) {\n hover = hoverTarget;\n } else {\n hover += (hoverTarget - hover) * (1 - Math.exp(-dt / ease));\n if (Math.abs(hoverTarget - hover) < 0.001) hover = hoverTarget;\n }\n }\n if (collapse !== collapseTarget) {\n const ease = opts.collapseEase ?? DEFAULT_COLLAPSE_EASE;\n if (ease <= 0) {\n collapse = collapseTarget;\n } else {\n collapse += (collapseTarget - collapse) * (1 - Math.exp(-dt / ease));\n if (Math.abs(collapseTarget - collapse) < 0.001) collapse = collapseTarget;\n }\n }\n // Bank time spent hovering, so `hover.spin` can wind up and down.\n hoverTime += hover * dt;\n emitFrame();\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n scheduler.clear();\n for (const key of acquired.keys()) releaseSource(key);\n acquired.clear();\n layerListeners.clear();\n frameListeners.clear();\n flushReady();\n },\n get layers() {\n return layers;\n },\n get resolved() {\n return resolved;\n },\n get ready() {\n if (pendingCount() === 0) return Promise.resolve();\n return new Promise<void>((resolveReady) => readyWaiters.push(resolveReady));\n },\n };\n\n sync();\n return model;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n"]}
|