vireuikit 0.2.0 → 0.4.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/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VireGlassMaterial, VireGlassGeometry, VireGlassMorph } from 'vireglass';
2
- import { V as VireUIKitMediumChannel } from './dynamics-DelasYER.cjs';
3
- export { M as MEDIUM_DEFAULTS, a as MEDIUM_DEFAULT_CELL_PX, b as MEDIUM_DRIFT_TURBULENCE, c as MEDIUM_EMISSION_BEATS, d as MEDIUM_EMISSION_PROBABILITY, e as MEDIUM_MIN_EMISSION_INTERVAL, f as MEDIUM_NATURAL_INTERVAL, g as MEDIUM_NATURAL_JITTER, h as MEDIUM_PLAYING_TURBULENCE_RANGE, i as MEDIUM_PROBE_FLOOR_PX, j as MEDIUM_SENSITIVE_BOTTOM, k as MEDIUM_SENSITIVE_TOP, l as MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, m as MEDIUM_TRACK_DEPTH_WIDTH_RANGE, n as MEDIUM_TRACK_PRESETS, o as MEDIUM_TURBULENCE_TAU, p as VireUIKitMediumDynamics, q as VireUIKitMediumDynamicsFrame, r as VireUIKitMediumDynamicsInput, s as VireUIKitMediumEmission, t as VireUIKitMediumParams, u as VireUIKitMediumPlaybackState, v as VireUIKitMediumTrackPreset, w as VireUIKitMediumTrackPresetName, x as applyTrackDepth, y as createMediumDynamics, z as depthFarOffsetPx, A as wrappedDistanceFromZero } from './dynamics-DelasYER.cjs';
2
+ import { V as VireUIKitMediumChannel, a as VireUIKitMediumLight } from './dynamics-DqGk_f1n.cjs';
3
+ export { M as MEDIUM_ALPHA_BURST_RAYS, b as MEDIUM_ALPHA_RAY_LENGTH_SCALE, c as MEDIUM_DEFAULTS, d as MEDIUM_DEFAULT_CELL_PX, e as MEDIUM_DEFAULT_LIGHTS, f as MEDIUM_DRIFT_TURBULENCE, g as MEDIUM_EMISSION_BEATS, h as MEDIUM_EMISSION_PROBABILITY, i as MEDIUM_MAX_LIGHTS, j as MEDIUM_MIN_EMISSION_INTERVAL, k as MEDIUM_NATURAL_INTERVAL, l as MEDIUM_NATURAL_JITTER, m as MEDIUM_PLAYING_TURBULENCE_RANGE, n as MEDIUM_PROBE_FLOOR_PX, o as MEDIUM_SENSITIVE_BOTTOM, p as MEDIUM_SENSITIVE_TOP, q as MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, r as MEDIUM_TRACK_DEPTH_WIDTH_RANGE, s as MEDIUM_TRACK_LAYER_BURST_ACCENT, t as MEDIUM_TRACK_LAYER_BURST_SPREAD, u as MEDIUM_TRACK_LAYER_CURL_PUSH, v as MEDIUM_TRACK_LAYER_FADE_GAMMA, w as MEDIUM_TRACK_LAYER_GRAVITY_SAG, x as MEDIUM_TRACK_LAYER_LIFE_SECONDS, y as MEDIUM_TRACK_LAYER_LOOK, z as MEDIUM_TRACK_LAYER_MAX_TRACKS, A as MEDIUM_TRACK_PRESETS, B as MEDIUM_TURBULENCE_TAU, C as VireUIKitMediumDynamics, D as VireUIKitMediumDynamicsFrame, E as VireUIKitMediumDynamicsInput, F as VireUIKitMediumEmission, G as VireUIKitMediumParams, H as VireUIKitMediumPlaybackState, I as VireUIKitMediumTrackPreset, J as VireUIKitMediumTrackPresetName, K as VireUIKitTrackLayerLook, L as applyTrackDepth, N as createMediumDynamics, O as depthFarOffsetPx, P as wrappedDistanceFromZero } from './dynamics-DqGk_f1n.cjs';
4
4
 
5
5
  type VireUIKitAtomKind = 'button' | 'iconButton' | 'switch' | 'slider' | 'segment' | 'chip' | 'field' | 'menu';
6
6
  /** Hover and focus don't exist everywhere: touch has neither. The atom accepts them, but has to
@@ -176,6 +176,21 @@ declare const MEDIUM_TRACK_ADVECT_SHADER: string;
176
176
 
177
177
  declare const MEDIUM_COMPOSITE_SHADER: string;
178
178
 
179
- declare const MEDIUM_EMIT_SHADER = "\nuniform float2 u_source;\nuniform float2 u_head;\nuniform float u_headWidth;\nuniform float u_tailWidth;\nuniform float u_raggedAmp;\nuniform float u_raggedFreq;\nuniform float u_settle;\nuniform float u_tailDim;\nuniform float u_intensity;\nuniform float u_seed;\nuniform float3 u_channelMask;\n\n\nfloat vgHash21(float2 p) {\n float h = dot(p, float2(127.1, 311.7));\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat vgValueNoise(float2 p) {\n float2 i = floor(p);\n float2 f = fract(p);\n float a = vgHash21(i);\n float b = vgHash21(i + float2(1.0, 0.0));\n float c = vgHash21(i + float2(0.0, 1.0));\n float d = vgHash21(i + float2(1.0, 1.0));\n float2 u = f * f * (3.0 - 2.0 * f);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y) * 2.0 - 1.0;\n}\n\n\nhalf4 main(float2 xy) {\n float2 dir = u_head - u_source;\n float len = max(length(dir), 1.0);\n float2 side = float2(-dir.y, dir.x) / len;\n\n float best = 0.0;\n const int STEPS = 12;\n for (int i = 0; i < STEPS; i++) {\n float s = float(i) / float(STEPS - 1);\n float tailness = 1.0 - s;\n float ragged = u_raggedAmp * tailness * vgValueNoise(float2(s * u_raggedFreq + u_seed, u_seed * 3.7));\n float2 p = mix(u_source, u_head, s) + side * ragged + float2(0.0, u_settle * tailness * tailness);\n float w = max(mix(u_tailWidth, u_headWidth, s), 0.5);\n float amp = mix(u_tailDim, 1.0, s);\n float d = length(xy - p);\n float v = amp * exp(-(d * d) / (2.0 * w * w));\n best = max(best, v);\n }\n\n float3 dye = u_channelMask * (best * u_intensity);\n return half4(half3(dye), half(1.0));\n}\n";
179
+ declare const MEDIUM_EMIT_SHADER = "\nuniform float2 u_source;\nuniform float2 u_head;\nuniform float u_headWidth;\nuniform float u_tailWidth;\nuniform float u_raggedAmp;\nuniform float u_raggedFreq;\nuniform float u_settle;\nuniform float u_tailDim;\nuniform float u_intensity;\nuniform float u_seed;\n\n\nfloat vgHash21(float2 p) {\n float h = dot(p, float2(127.1, 311.7));\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat vgValueNoise(float2 p) {\n float2 i = floor(p);\n float2 f = fract(p);\n float a = vgHash21(i);\n float b = vgHash21(i + float2(1.0, 0.0));\n float c = vgHash21(i + float2(0.0, 1.0));\n float d = vgHash21(i + float2(1.0, 1.0));\n float2 u = f * f * (3.0 - 2.0 * f);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y) * 2.0 - 1.0;\n}\n\n\nhalf4 main(float2 xy) {\n float2 dir = u_head - u_source;\n float len = max(length(dir), 1.0);\n float2 side = float2(-dir.y, dir.x) / len;\n\n float best = 0.0;\n const int STEPS = 12;\n for (int i = 0; i < STEPS; i++) {\n float s = float(i) / float(STEPS - 1);\n float tailness = 1.0 - s;\n float ragged = u_raggedAmp * tailness * vgValueNoise(float2(s * u_raggedFreq + u_seed, u_seed * 3.7));\n float2 p = mix(u_source, u_head, s) + side * ragged + float2(0.0, u_settle * tailness * tailness);\n float w = max(mix(u_tailWidth, u_headWidth, s), 0.5);\n float amp = mix(u_tailDim, 1.0, s);\n float d = length(xy - p);\n float v = amp * exp(-(d * d) / (2.0 * w * w));\n best = max(best, v);\n }\n\n float3 dye = float3(best * u_intensity);\n return half4(half3(dye), half(1.0));\n}\n";
180
180
 
181
- export { ATOM_AT_REST, DEFAULT_GROWTH_TIMING, type GrowthFrame, type GrowthInk, type GrowthPhase, type GrowthPoint, type GrowthShape, type GrowthState, type GrowthTiming, LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_EMIT_SHADER, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, type Spring, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, type VireUIKitAtomKind, type VireUIKitAtomState, VireUIKitMediumChannel, type VireUIKitMediumCharacter, atomAtRest, atomLift, atomMaterial, characterOf, createGrowthState, growthFrame, growthInk, growthPhase, neutralSpecies, oklabToSrgb, smoothstep, speciesFamily, srgbToOklab, stepGrowth, stepSpring };
181
+ declare const MEDIUM_SHADOW_SHADER = "\nuniform shader u_vapor;\nuniform shader u_condensate;\nuniform float u_condensateGain;\nuniform float2 u_light1Grid;\nuniform float2 u_light2Grid;\nuniform float u_extinction;\n\nfloat vgOpticalDepth(float2 p, float2 lightP) {\n float2 toLight = lightP - p;\n float optical = 0.0;\n for (int i = 1; i <= 24; i++) {\n float2 q = p + toLight * (float(i) / 24.0);\n float inside = step(0.0, q.x) * step(q.x, u_resolution.x) * step(0.0, q.y) * step(q.y, u_resolution.y);\n half4 v = u_vapor.eval(q);\n half4 c = u_condensate.eval(q);\n optical += inside * (float(v.r + v.g + v.b) + float(c.r) * u_condensateGain);\n }\n return optical * length(toLight) / 24.0 / max(u_resolution.y, 1.0);\n}\n\nhalf4 main(float2 xy) {\n float2 p = float2(xy.x, u_resolution.y - xy.y);\n float t1 = exp(-vgOpticalDepth(p, u_light1Grid) * u_extinction);\n float t2 = exp(-vgOpticalDepth(p, u_light2Grid) * u_extinction);\n return half4(half(t1), half(t2), half(0.0), half(1.0));\n}\n";
182
+
183
+ /**
184
+ * Builds a light rig from a cover's character: spotlights take one tone each off the family spread
185
+ * around the cover's hue (`characterOf`/`MEDIUM_SPECIES_HUE_SPREAD`, the same arc `species.ts` uses
186
+ * for vapor), the edge strip only nudges toward it. With no cover, a caller simply doesn't call this
187
+ * — `MEDIUM_DEFAULT_LIGHTS` is already the neutral calm state, so there is no "no-cover" branch here
188
+ * to keep in sync with it.
189
+ */
190
+ declare function lightRigForCharacter(character: VireUIKitMediumCharacter, baseLights?: readonly VireUIKitMediumLight[]): readonly VireUIKitMediumLight[];
191
+ /** Convenience for callers that only have a cover color (not an already-derived character) — a
192
+ * cover-art palette step lands `characterOf` upstream of this in the product; a lab stand parsing
193
+ * `?cover=<hue>,<chroma>` from the URL builds the character directly instead. */
194
+ declare function lightRigForCover(cover: VireUIKitMediumChannel, baseLights?: readonly VireUIKitMediumLight[]): readonly VireUIKitMediumLight[];
195
+
196
+ export { ATOM_AT_REST, DEFAULT_GROWTH_TIMING, type GrowthFrame, type GrowthInk, type GrowthPhase, type GrowthPoint, type GrowthShape, type GrowthState, type GrowthTiming, LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_EMIT_SHADER, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SHADOW_SHADER, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, type Spring, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, type VireUIKitAtomKind, type VireUIKitAtomState, VireUIKitMediumChannel, type VireUIKitMediumCharacter, VireUIKitMediumLight, atomAtRest, atomLift, atomMaterial, characterOf, createGrowthState, growthFrame, growthInk, growthPhase, lightRigForCharacter, lightRigForCover, neutralSpecies, oklabToSrgb, smoothstep, speciesFamily, srgbToOklab, stepGrowth, stepSpring };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VireGlassMaterial, VireGlassGeometry, VireGlassMorph } from 'vireglass';
2
- import { V as VireUIKitMediumChannel } from './dynamics-DelasYER.js';
3
- export { M as MEDIUM_DEFAULTS, a as MEDIUM_DEFAULT_CELL_PX, b as MEDIUM_DRIFT_TURBULENCE, c as MEDIUM_EMISSION_BEATS, d as MEDIUM_EMISSION_PROBABILITY, e as MEDIUM_MIN_EMISSION_INTERVAL, f as MEDIUM_NATURAL_INTERVAL, g as MEDIUM_NATURAL_JITTER, h as MEDIUM_PLAYING_TURBULENCE_RANGE, i as MEDIUM_PROBE_FLOOR_PX, j as MEDIUM_SENSITIVE_BOTTOM, k as MEDIUM_SENSITIVE_TOP, l as MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, m as MEDIUM_TRACK_DEPTH_WIDTH_RANGE, n as MEDIUM_TRACK_PRESETS, o as MEDIUM_TURBULENCE_TAU, p as VireUIKitMediumDynamics, q as VireUIKitMediumDynamicsFrame, r as VireUIKitMediumDynamicsInput, s as VireUIKitMediumEmission, t as VireUIKitMediumParams, u as VireUIKitMediumPlaybackState, v as VireUIKitMediumTrackPreset, w as VireUIKitMediumTrackPresetName, x as applyTrackDepth, y as createMediumDynamics, z as depthFarOffsetPx, A as wrappedDistanceFromZero } from './dynamics-DelasYER.js';
2
+ import { V as VireUIKitMediumChannel, a as VireUIKitMediumLight } from './dynamics-DqGk_f1n.js';
3
+ export { M as MEDIUM_ALPHA_BURST_RAYS, b as MEDIUM_ALPHA_RAY_LENGTH_SCALE, c as MEDIUM_DEFAULTS, d as MEDIUM_DEFAULT_CELL_PX, e as MEDIUM_DEFAULT_LIGHTS, f as MEDIUM_DRIFT_TURBULENCE, g as MEDIUM_EMISSION_BEATS, h as MEDIUM_EMISSION_PROBABILITY, i as MEDIUM_MAX_LIGHTS, j as MEDIUM_MIN_EMISSION_INTERVAL, k as MEDIUM_NATURAL_INTERVAL, l as MEDIUM_NATURAL_JITTER, m as MEDIUM_PLAYING_TURBULENCE_RANGE, n as MEDIUM_PROBE_FLOOR_PX, o as MEDIUM_SENSITIVE_BOTTOM, p as MEDIUM_SENSITIVE_TOP, q as MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, r as MEDIUM_TRACK_DEPTH_WIDTH_RANGE, s as MEDIUM_TRACK_LAYER_BURST_ACCENT, t as MEDIUM_TRACK_LAYER_BURST_SPREAD, u as MEDIUM_TRACK_LAYER_CURL_PUSH, v as MEDIUM_TRACK_LAYER_FADE_GAMMA, w as MEDIUM_TRACK_LAYER_GRAVITY_SAG, x as MEDIUM_TRACK_LAYER_LIFE_SECONDS, y as MEDIUM_TRACK_LAYER_LOOK, z as MEDIUM_TRACK_LAYER_MAX_TRACKS, A as MEDIUM_TRACK_PRESETS, B as MEDIUM_TURBULENCE_TAU, C as VireUIKitMediumDynamics, D as VireUIKitMediumDynamicsFrame, E as VireUIKitMediumDynamicsInput, F as VireUIKitMediumEmission, G as VireUIKitMediumParams, H as VireUIKitMediumPlaybackState, I as VireUIKitMediumTrackPreset, J as VireUIKitMediumTrackPresetName, K as VireUIKitTrackLayerLook, L as applyTrackDepth, N as createMediumDynamics, O as depthFarOffsetPx, P as wrappedDistanceFromZero } from './dynamics-DqGk_f1n.js';
4
4
 
5
5
  type VireUIKitAtomKind = 'button' | 'iconButton' | 'switch' | 'slider' | 'segment' | 'chip' | 'field' | 'menu';
6
6
  /** Hover and focus don't exist everywhere: touch has neither. The atom accepts them, but has to
@@ -176,6 +176,21 @@ declare const MEDIUM_TRACK_ADVECT_SHADER: string;
176
176
 
177
177
  declare const MEDIUM_COMPOSITE_SHADER: string;
178
178
 
179
- declare const MEDIUM_EMIT_SHADER = "\nuniform float2 u_source;\nuniform float2 u_head;\nuniform float u_headWidth;\nuniform float u_tailWidth;\nuniform float u_raggedAmp;\nuniform float u_raggedFreq;\nuniform float u_settle;\nuniform float u_tailDim;\nuniform float u_intensity;\nuniform float u_seed;\nuniform float3 u_channelMask;\n\n\nfloat vgHash21(float2 p) {\n float h = dot(p, float2(127.1, 311.7));\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat vgValueNoise(float2 p) {\n float2 i = floor(p);\n float2 f = fract(p);\n float a = vgHash21(i);\n float b = vgHash21(i + float2(1.0, 0.0));\n float c = vgHash21(i + float2(0.0, 1.0));\n float d = vgHash21(i + float2(1.0, 1.0));\n float2 u = f * f * (3.0 - 2.0 * f);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y) * 2.0 - 1.0;\n}\n\n\nhalf4 main(float2 xy) {\n float2 dir = u_head - u_source;\n float len = max(length(dir), 1.0);\n float2 side = float2(-dir.y, dir.x) / len;\n\n float best = 0.0;\n const int STEPS = 12;\n for (int i = 0; i < STEPS; i++) {\n float s = float(i) / float(STEPS - 1);\n float tailness = 1.0 - s;\n float ragged = u_raggedAmp * tailness * vgValueNoise(float2(s * u_raggedFreq + u_seed, u_seed * 3.7));\n float2 p = mix(u_source, u_head, s) + side * ragged + float2(0.0, u_settle * tailness * tailness);\n float w = max(mix(u_tailWidth, u_headWidth, s), 0.5);\n float amp = mix(u_tailDim, 1.0, s);\n float d = length(xy - p);\n float v = amp * exp(-(d * d) / (2.0 * w * w));\n best = max(best, v);\n }\n\n float3 dye = u_channelMask * (best * u_intensity);\n return half4(half3(dye), half(1.0));\n}\n";
179
+ declare const MEDIUM_EMIT_SHADER = "\nuniform float2 u_source;\nuniform float2 u_head;\nuniform float u_headWidth;\nuniform float u_tailWidth;\nuniform float u_raggedAmp;\nuniform float u_raggedFreq;\nuniform float u_settle;\nuniform float u_tailDim;\nuniform float u_intensity;\nuniform float u_seed;\n\n\nfloat vgHash21(float2 p) {\n float h = dot(p, float2(127.1, 311.7));\n return fract(sin(h) * 43758.5453123);\n}\n\nfloat vgValueNoise(float2 p) {\n float2 i = floor(p);\n float2 f = fract(p);\n float a = vgHash21(i);\n float b = vgHash21(i + float2(1.0, 0.0));\n float c = vgHash21(i + float2(0.0, 1.0));\n float d = vgHash21(i + float2(1.0, 1.0));\n float2 u = f * f * (3.0 - 2.0 * f);\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y) * 2.0 - 1.0;\n}\n\n\nhalf4 main(float2 xy) {\n float2 dir = u_head - u_source;\n float len = max(length(dir), 1.0);\n float2 side = float2(-dir.y, dir.x) / len;\n\n float best = 0.0;\n const int STEPS = 12;\n for (int i = 0; i < STEPS; i++) {\n float s = float(i) / float(STEPS - 1);\n float tailness = 1.0 - s;\n float ragged = u_raggedAmp * tailness * vgValueNoise(float2(s * u_raggedFreq + u_seed, u_seed * 3.7));\n float2 p = mix(u_source, u_head, s) + side * ragged + float2(0.0, u_settle * tailness * tailness);\n float w = max(mix(u_tailWidth, u_headWidth, s), 0.5);\n float amp = mix(u_tailDim, 1.0, s);\n float d = length(xy - p);\n float v = amp * exp(-(d * d) / (2.0 * w * w));\n best = max(best, v);\n }\n\n float3 dye = float3(best * u_intensity);\n return half4(half3(dye), half(1.0));\n}\n";
180
180
 
181
- export { ATOM_AT_REST, DEFAULT_GROWTH_TIMING, type GrowthFrame, type GrowthInk, type GrowthPhase, type GrowthPoint, type GrowthShape, type GrowthState, type GrowthTiming, LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_EMIT_SHADER, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, type Spring, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, type VireUIKitAtomKind, type VireUIKitAtomState, VireUIKitMediumChannel, type VireUIKitMediumCharacter, atomAtRest, atomLift, atomMaterial, characterOf, createGrowthState, growthFrame, growthInk, growthPhase, neutralSpecies, oklabToSrgb, smoothstep, speciesFamily, srgbToOklab, stepGrowth, stepSpring };
181
+ declare const MEDIUM_SHADOW_SHADER = "\nuniform shader u_vapor;\nuniform shader u_condensate;\nuniform float u_condensateGain;\nuniform float2 u_light1Grid;\nuniform float2 u_light2Grid;\nuniform float u_extinction;\n\nfloat vgOpticalDepth(float2 p, float2 lightP) {\n float2 toLight = lightP - p;\n float optical = 0.0;\n for (int i = 1; i <= 24; i++) {\n float2 q = p + toLight * (float(i) / 24.0);\n float inside = step(0.0, q.x) * step(q.x, u_resolution.x) * step(0.0, q.y) * step(q.y, u_resolution.y);\n half4 v = u_vapor.eval(q);\n half4 c = u_condensate.eval(q);\n optical += inside * (float(v.r + v.g + v.b) + float(c.r) * u_condensateGain);\n }\n return optical * length(toLight) / 24.0 / max(u_resolution.y, 1.0);\n}\n\nhalf4 main(float2 xy) {\n float2 p = float2(xy.x, u_resolution.y - xy.y);\n float t1 = exp(-vgOpticalDepth(p, u_light1Grid) * u_extinction);\n float t2 = exp(-vgOpticalDepth(p, u_light2Grid) * u_extinction);\n return half4(half(t1), half(t2), half(0.0), half(1.0));\n}\n";
182
+
183
+ /**
184
+ * Builds a light rig from a cover's character: spotlights take one tone each off the family spread
185
+ * around the cover's hue (`characterOf`/`MEDIUM_SPECIES_HUE_SPREAD`, the same arc `species.ts` uses
186
+ * for vapor), the edge strip only nudges toward it. With no cover, a caller simply doesn't call this
187
+ * — `MEDIUM_DEFAULT_LIGHTS` is already the neutral calm state, so there is no "no-cover" branch here
188
+ * to keep in sync with it.
189
+ */
190
+ declare function lightRigForCharacter(character: VireUIKitMediumCharacter, baseLights?: readonly VireUIKitMediumLight[]): readonly VireUIKitMediumLight[];
191
+ /** Convenience for callers that only have a cover color (not an already-derived character) — a
192
+ * cover-art palette step lands `characterOf` upstream of this in the product; a lab stand parsing
193
+ * `?cover=<hue>,<chroma>` from the URL builds the character directly instead. */
194
+ declare function lightRigForCover(cover: VireUIKitMediumChannel, baseLights?: readonly VireUIKitMediumLight[]): readonly VireUIKitMediumLight[];
195
+
196
+ export { ATOM_AT_REST, DEFAULT_GROWTH_TIMING, type GrowthFrame, type GrowthInk, type GrowthPhase, type GrowthPoint, type GrowthShape, type GrowthState, type GrowthTiming, LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_EMIT_SHADER, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SHADOW_SHADER, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, type Spring, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, type VireUIKitAtomKind, type VireUIKitAtomState, VireUIKitMediumChannel, type VireUIKitMediumCharacter, VireUIKitMediumLight, atomAtRest, atomLift, atomMaterial, characterOf, createGrowthState, growthFrame, growthInk, growthPhase, lightRigForCharacter, lightRigForCover, neutralSpecies, oklabToSrgb, smoothstep, speciesFamily, srgbToOklab, stepGrowth, stepSpring };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_DEFAULTS, MEDIUM_DEFAULT_CELL_PX, MEDIUM_DRIFT_TURBULENCE, MEDIUM_EMISSION_BEATS, MEDIUM_EMISSION_PROBABILITY, MEDIUM_EMIT_SHADER, MEDIUM_MIN_EMISSION_INTERVAL, MEDIUM_NATURAL_INTERVAL, MEDIUM_NATURAL_JITTER, MEDIUM_PLAYING_TURBULENCE_RANGE, MEDIUM_PROBE_FLOOR_PX, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SENSITIVE_BOTTOM, MEDIUM_SENSITIVE_TOP, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, MEDIUM_TRACK_DEPTH_WIDTH_RANGE, MEDIUM_TRACK_PRESETS, MEDIUM_TURBULENCE_TAU, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, applyTrackDepth, characterOf, createMediumDynamics, depthFarOffsetPx, neutralSpecies, oklabToSrgb, speciesFamily, srgbToOklab, wrappedDistanceFromZero } from './chunk-BV5P6MF7.js';
1
+ export { LINEAR_TO_LMS, LMS_TO_LINEAR, LMS_TO_OKLAB, MEDIUM_ALPHA_BURST_RAYS, MEDIUM_ALPHA_RAY_LENGTH_SCALE, MEDIUM_COMPOSITE_SHADER, MEDIUM_CONDENSATE_CORRECT_SHADER, MEDIUM_CONDENSATE_FORWARD_SHADER, MEDIUM_CONDENSATE_REACT_SHADER, MEDIUM_DEFAULTS, MEDIUM_DEFAULT_CELL_PX, MEDIUM_DEFAULT_LIGHTS, MEDIUM_DRIFT_TURBULENCE, MEDIUM_EMISSION_BEATS, MEDIUM_EMISSION_PROBABILITY, MEDIUM_EMIT_SHADER, MEDIUM_MAX_LIGHTS, MEDIUM_MIN_EMISSION_INTERVAL, MEDIUM_NATURAL_INTERVAL, MEDIUM_NATURAL_JITTER, MEDIUM_PLAYING_TURBULENCE_RANGE, MEDIUM_PROBE_FLOOR_PX, MEDIUM_RESAMPLE_SHADER, MEDIUM_SEED_SHADER, MEDIUM_SENSITIVE_BOTTOM, MEDIUM_SENSITIVE_TOP, MEDIUM_SHADOW_SHADER, MEDIUM_SPECIES_HUE_SPREAD, MEDIUM_SPECIES_LIGHTNESS, MEDIUM_TIME_PERIOD, MEDIUM_TRACK_ADVECT_SHADER, MEDIUM_TRACK_DEPTH_INTENSITY_RANGE, MEDIUM_TRACK_DEPTH_WIDTH_RANGE, MEDIUM_TRACK_LAYER_BURST_ACCENT, MEDIUM_TRACK_LAYER_BURST_SPREAD, MEDIUM_TRACK_LAYER_CURL_PUSH, MEDIUM_TRACK_LAYER_FADE_GAMMA, MEDIUM_TRACK_LAYER_GRAVITY_SAG, MEDIUM_TRACK_LAYER_LIFE_SECONDS, MEDIUM_TRACK_LAYER_LOOK, MEDIUM_TRACK_LAYER_MAX_TRACKS, MEDIUM_TRACK_PRESETS, MEDIUM_TURBULENCE_TAU, MEDIUM_VAPOR_CORRECT_SHADER, MEDIUM_VAPOR_FORWARD_SHADER, MEDIUM_VAPOR_REACT_SHADER, OKLAB_TO_LMS, VG_CURL_NOISE, VG_OKLAB_TO_SRGB, VG_VALUE_NOISE, applyTrackDepth, characterOf, createMediumDynamics, depthFarOffsetPx, lightRigForCharacter, lightRigForCover, neutralSpecies, oklabToSrgb, speciesFamily, srgbToOklab, wrappedDistanceFromZero } from './chunk-VY22O2II.js';
2
2
  import { activeMaterial, halfMinDp } from 'vireglass';
3
3
 
4
4
  var ATOM_AT_REST = {