@3driseai/3drise-core 1.0.18 → 1.0.20

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.
Files changed (146) hide show
  1. package/dist/animations/index.d.ts +2 -0
  2. package/dist/animations/index.d.ts.map +1 -0
  3. package/dist/animations/index.js +1 -0
  4. package/dist/animations/trackGenerators.d.ts +140 -0
  5. package/dist/animations/trackGenerators.d.ts.map +1 -0
  6. package/dist/animations/trackGenerators.js +443 -0
  7. package/dist/autoAnimate/bounds.d.ts +7 -0
  8. package/dist/autoAnimate/bounds.d.ts.map +1 -0
  9. package/dist/autoAnimate/bounds.js +23 -0
  10. package/dist/autoAnimate/composer.d.ts +30 -0
  11. package/dist/autoAnimate/composer.d.ts.map +1 -0
  12. package/dist/autoAnimate/composer.js +251 -0
  13. package/dist/autoAnimate/describeScene.d.ts +105 -0
  14. package/dist/autoAnimate/describeScene.d.ts.map +1 -0
  15. package/dist/autoAnimate/describeScene.js +165 -0
  16. package/dist/autoAnimate/draft.d.ts +59 -0
  17. package/dist/autoAnimate/draft.d.ts.map +1 -0
  18. package/dist/autoAnimate/draft.js +2 -0
  19. package/dist/autoAnimate/index.d.ts +14 -0
  20. package/dist/autoAnimate/index.d.ts.map +1 -0
  21. package/dist/autoAnimate/index.js +9 -0
  22. package/dist/autoAnimate/recipes.d.ts +87 -0
  23. package/dist/autoAnimate/recipes.d.ts.map +1 -0
  24. package/dist/autoAnimate/recipes.js +224 -0
  25. package/dist/autoAnimate/rng.d.ts +10 -0
  26. package/dist/autoAnimate/rng.d.ts.map +1 -0
  27. package/dist/autoAnimate/rng.js +16 -0
  28. package/dist/autoAnimate/sceneAnalyzer.d.ts +7 -0
  29. package/dist/autoAnimate/sceneAnalyzer.d.ts.map +1 -0
  30. package/dist/autoAnimate/sceneAnalyzer.js +291 -0
  31. package/dist/autoAnimate/types.d.ts +124 -0
  32. package/dist/autoAnimate/types.d.ts.map +1 -0
  33. package/dist/autoAnimate/types.js +1 -0
  34. package/dist/autoAnimate/validator.d.ts +10 -0
  35. package/dist/autoAnimate/validator.d.ts.map +1 -0
  36. package/dist/autoAnimate/validator.js +59 -0
  37. package/dist/data/effectsDefaults.d.ts +4 -0
  38. package/dist/data/effectsDefaults.d.ts.map +1 -1
  39. package/dist/data/effectsDefaults.js +393 -2
  40. package/dist/data/gridsDefaults.d.ts +5 -0
  41. package/dist/data/gridsDefaults.d.ts.map +1 -0
  42. package/dist/data/gridsDefaults.js +290 -0
  43. package/dist/data/index.d.ts +1 -0
  44. package/dist/data/index.d.ts.map +1 -1
  45. package/dist/data/index.js +1 -0
  46. package/dist/data/particlesDefaults.d.ts +3 -1
  47. package/dist/data/particlesDefaults.d.ts.map +1 -1
  48. package/dist/data/particlesDefaults.js +78 -0
  49. package/dist/environment/cloudConfigs.d.ts +313 -0
  50. package/dist/environment/cloudConfigs.d.ts.map +1 -0
  51. package/dist/environment/cloudConfigs.js +342 -0
  52. package/dist/environment/index.d.ts +5 -0
  53. package/dist/environment/index.d.ts.map +1 -0
  54. package/dist/environment/index.js +6 -0
  55. package/dist/environment/landscapeConfigs.d.ts +220 -0
  56. package/dist/environment/landscapeConfigs.d.ts.map +1 -0
  57. package/dist/environment/landscapeConfigs.js +256 -0
  58. package/dist/environment/oceanConfigs.d.ts +293 -0
  59. package/dist/environment/oceanConfigs.d.ts.map +1 -0
  60. package/dist/environment/oceanConfigs.js +380 -0
  61. package/dist/environment/terrainConfigs.d.ts +254 -0
  62. package/dist/environment/terrainConfigs.d.ts.map +1 -0
  63. package/dist/environment/terrainConfigs.js +292 -0
  64. package/dist/index.d.ts +4 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +4 -0
  67. package/dist/properties/index.d.ts +4 -0
  68. package/dist/properties/index.d.ts.map +1 -0
  69. package/dist/properties/index.js +3 -0
  70. package/dist/properties/registry.d.ts +44 -0
  71. package/dist/properties/registry.d.ts.map +1 -0
  72. package/dist/properties/registry.js +343 -0
  73. package/dist/properties/tables/effectsProperties.d.ts +40 -0
  74. package/dist/properties/tables/effectsProperties.d.ts.map +1 -0
  75. package/dist/properties/tables/effectsProperties.js +512 -0
  76. package/dist/properties/tables/geometryProperties.d.ts +38 -0
  77. package/dist/properties/tables/geometryProperties.d.ts.map +1 -0
  78. package/dist/properties/tables/geometryProperties.js +91 -0
  79. package/dist/properties/tables/getPropertyConfig.d.ts +3 -0
  80. package/dist/properties/tables/getPropertyConfig.d.ts.map +1 -0
  81. package/dist/properties/tables/getPropertyConfig.js +16 -0
  82. package/dist/properties/tables/gridProperties.d.ts +6 -0
  83. package/dist/properties/tables/gridProperties.d.ts.map +1 -0
  84. package/dist/properties/tables/gridProperties.js +121 -0
  85. package/dist/properties/tables/index.d.ts +9 -0
  86. package/dist/properties/tables/index.d.ts.map +1 -0
  87. package/dist/properties/tables/index.js +8 -0
  88. package/dist/properties/tables/lightProperties.d.ts +14 -0
  89. package/dist/properties/tables/lightProperties.d.ts.map +1 -0
  90. package/dist/properties/tables/lightProperties.js +263 -0
  91. package/dist/properties/tables/materialBounds.d.ts +33 -0
  92. package/dist/properties/tables/materialBounds.d.ts.map +1 -0
  93. package/dist/properties/tables/materialBounds.js +180 -0
  94. package/dist/properties/tables/optionalProperties.d.ts +83 -0
  95. package/dist/properties/tables/optionalProperties.d.ts.map +1 -0
  96. package/dist/properties/tables/optionalProperties.js +710 -0
  97. package/dist/properties/tables/particlesProperties.d.ts +17 -0
  98. package/dist/properties/tables/particlesProperties.d.ts.map +1 -0
  99. package/dist/properties/tables/particlesProperties.js +334 -0
  100. package/dist/properties/types.d.ts +43 -0
  101. package/dist/properties/types.d.ts.map +1 -0
  102. package/dist/properties/types.js +12 -0
  103. package/dist/services/AnimationsManager.d.ts +6 -106
  104. package/dist/services/AnimationsManager.d.ts.map +1 -1
  105. package/dist/services/AnimationsManager.js +5 -391
  106. package/dist/services/SceneActions.d.ts +17 -3
  107. package/dist/services/SceneActions.d.ts.map +1 -1
  108. package/dist/services/SceneActions.js +12 -8
  109. package/dist/services/ShadersLibrary.d.ts +1 -1
  110. package/dist/services/ShadersLibrary.d.ts.map +1 -1
  111. package/dist/services/index.d.ts +1 -2
  112. package/dist/services/index.d.ts.map +1 -1
  113. package/dist/shaders/WallpaperGridMaterial.d.ts.map +1 -1
  114. package/dist/shaders/WallpaperGridMaterial.js +6 -1
  115. package/dist/three/GalleryLayoutV.d.ts.map +1 -1
  116. package/dist/three/GalleryLayoutV.js +0 -10
  117. package/dist/three/SceneBuilderV.d.ts.map +1 -1
  118. package/dist/three/SceneBuilderV.js +1 -7
  119. package/dist/types/actions.d.ts +8 -1
  120. package/dist/types/actions.d.ts.map +1 -1
  121. package/dist/types/actions.js +0 -4
  122. package/dist/types/animations.d.ts +0 -51
  123. package/dist/types/animations.d.ts.map +1 -1
  124. package/dist/types/generativeEffects.d.ts +0 -4
  125. package/dist/types/generativeEffects.d.ts.map +1 -1
  126. package/dist/types/generativeParticles.d.ts +175 -2
  127. package/dist/types/generativeParticles.d.ts.map +1 -1
  128. package/dist/types/objectSettings.d.ts +96 -17
  129. package/dist/types/objectSettings.d.ts.map +1 -1
  130. package/dist/types/scene3d.d.ts +3 -3
  131. package/dist/types/scene3d.d.ts.map +1 -1
  132. package/dist/types/types.d.ts +3 -2
  133. package/dist/types/types.d.ts.map +1 -1
  134. package/dist/utils/generativeAnimatable.d.ts +1 -1
  135. package/dist/utils/generativeAnimatable.d.ts.map +1 -1
  136. package/dist/utils/generativeAnimatable.js +7 -1
  137. package/dist/utils/getAnimatableProperties.d.ts +12 -1
  138. package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
  139. package/dist/utils/getAnimatableProperties.js +35 -138
  140. package/dist/utils/index.d.ts +1 -0
  141. package/dist/utils/index.d.ts.map +1 -1
  142. package/dist/utils/index.js +1 -0
  143. package/dist/utils/objectEffects.d.ts +6 -0
  144. package/dist/utils/objectEffects.d.ts.map +1 -0
  145. package/dist/utils/objectEffects.js +5 -0
  146. package/package.json +1 -1
@@ -0,0 +1,512 @@
1
+ // =============================================================================
2
+ // EFFECTS OPTIONAL PROPERTIES
3
+ // Describes the configurable inputs for each generative effect type.
4
+ // Used by BaseControllerUi to drive slider bounds, toggles, and color pickers.
5
+ // Only properties listed here will render — everything else is silently skipped.
6
+ // The `description` field is shown as a tooltip on each control label.
7
+ //
8
+ // Each effect declares ONLY the properties its component actually reads.
9
+ // =============================================================================
10
+ export const moleculesEffectProperties = [
11
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
12
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
13
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
14
+ { name: 'color', description: 'Positive-phase lobe colour', type: 'color' },
15
+ { name: 'atomCount', description: 'Atoms around the centre; they spread out to minimise repulsion', type: 'number', min: 0, max: 20, step: 1 },
16
+ { name: 'orbitRadius', description: 'Bond length, as a multiple of the bounding radius', type: 'number', min: 0.5, max: 5, step: 0.05 },
17
+ { name: 'atomSize', description: 'Size of the outer atoms’ electron clouds', type: 'number', min: 0.02, max: 0.3, step: 0.005 },
18
+ { name: 'showBonds', description: 'Show the bonding density between the atoms', type: 'boolean' },
19
+ { name: 'bondColor', description: 'Bond density colour', type: 'color' },
20
+ { name: 'randomizeAxes', description: 'Tumble about a tilted axis', type: 'boolean' },
21
+ { name: 'orbital', description: 'Central orbital: −1 cycles, 0 1s, 1 2p, 2 3d z², 3 3d xy, 4 4f z³, 5 4f xyz', type: 'number', min: -1, max: 5, step: 1 },
22
+ { name: 'phaseColor', description: 'Negative-phase lobe colour', type: 'color' },
23
+ { name: 'cloudDensity', description: 'Number of points in the electron clouds', type: 'number', min: 0.25, max: 2, step: 0.05 },
24
+ ];
25
+ export const shockwaveEffectProperties = [
26
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
27
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
28
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
29
+ { name: 'color', description: 'Colour of the birth flash and the hottest part of the front', type: 'color' },
30
+ { name: 'rimColor', description: 'Colour the front cools to as it slows down', type: 'color' },
31
+ { name: 'ringCount', description: 'How many shock fronts are alive at once', type: 'number', min: 1, max: 4, step: 1 },
32
+ { name: 'expansionRadius', description: 'Largest radius a front reaches, as a multiple of the bounding radius', type: 'number', min: 1.2, max: 10, step: 0.05 },
33
+ { name: 'thickness', description: 'Thickness of the bright front, relative to the bounding radius', type: 'number', min: 0.005, max: 0.2, step: 0.005 },
34
+ { name: 'intervalSeconds', description: 'Seconds between two launches', type: 'number', min: 0.2, max: 10, step: 0.1 },
35
+ { name: 'shapeNum', description: 'Ground ring (0) or spherical shell for mid-air blasts (1)', type: 'number', min: 0, max: 1, step: 1 },
36
+ { name: 'deceleration', description: 'How the front slows: 0 constant speed, 1 true Sedov–Taylor (fast burst, long coast)', type: 'number', min: 0, max: 1, step: 0.01 },
37
+ { name: 'instability', description: 'Slow lobes that grow on the front as the shell thins (Vishniac instability)', type: 'number', min: 0, max: 1, step: 0.01 },
38
+ { name: 'dust', description: 'Debris kicked up where the front sweeps past', type: 'number', min: 0, max: 1, step: 0.01 },
39
+ { name: 'condensation', description: 'Brief Wilson-cloud haze just behind the front', type: 'number', min: 0, max: 1, step: 0.01 },
40
+ ];
41
+ export const auraEffectProperties = [
42
+ { name: 'intensity', description: 'Overall glow brightness multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
43
+ { name: 'speed', description: 'Pulse animation speed multiplier', type: 'number', min: 0.1, max: 10, step: 0.1 },
44
+ { name: 'opacity', description: 'Transparency of the shell layers', type: 'number', min: 0, max: 1, step: 0.01 },
45
+ { name: 'layerCount', description: 'Number of concentric shell layers', type: 'number', min: 1, max: 5, step: 1 },
46
+ { name: 'fresnelPower', description: 'Edge glow sharpness — higher = thinner rim', type: 'number', min: 1, max: 8, step: 0.1 },
47
+ { name: 'pulseSpeed', description: 'Speed of the breathe/pulse animation', type: 'number', min: 0.1, max: 5, step: 0.1 },
48
+ { name: 'noiseAmount', description: 'FBM surface noise blend amount', type: 'number', min: 0, max: 1, step: 0.01 },
49
+ { name: 'sizeMultiplier', description: 'Shell radius as a multiplier of the bounding radius', type: 'number', min: 1, max: 3, step: 0.1 },
50
+ { name: 'innerColor', description: 'Core hue — drives the iridescent color cycle', type: 'color' },
51
+ { name: 'outerColor', description: 'Outer diffuse glow color (mixed with iridescence)', type: 'color' },
52
+ ];
53
+ export const dataStreamEffectProperties = [
54
+ { name: 'intensity', description: 'Particle glow size multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
55
+ { name: 'speed', description: 'Stream flow speed multiplier', type: 'number', min: 0.1, max: 10, step: 0.1 },
56
+ { name: 'opacity', description: 'Transparency of stream particles', type: 'number', min: 0, max: 1, step: 0.01 },
57
+ { name: 'particleCount', description: 'Number of stream particles (doubled for dual helix)', type: 'number', min: 50, max: 500, step: 10 },
58
+ { name: 'spiralTurns', description: 'Number of helix turns along the stream height', type: 'number', min: 1, max: 8, step: 1 },
59
+ { name: 'streamRadius', description: 'Helix radius as a multiplier of the bounding radius', type: 'number', min: 0.5, max: 5, step: 0.1 },
60
+ { name: 'particleSize', description: 'Base size of individual stream particles', type: 'number', min: 0.01, max: 0.2, step: 0.01 },
61
+ { name: 'inward', description: 'Reverse flow direction — stream flows toward object', type: 'boolean' },
62
+ { name: 'color', description: 'Tint laid over the whole palette', type: 'color' },
63
+ { name: 'coldColor', description: 'Palette start color (t = 0 along the stream)', type: 'color' },
64
+ { name: 'midColor', description: 'Palette midpoint color', type: 'color' },
65
+ { name: 'hotColor', description: 'Palette end color (t = 1 along the stream)', type: 'color' },
66
+ ];
67
+ export const constellationEffectProperties = [
68
+ { name: 'speed', description: 'Rotation speed of the star cloud', type: 'number', min: 0.1, max: 10, step: 0.1 },
69
+ { name: 'opacity', description: 'Transparency of stars and connecting lines', type: 'number', min: 0, max: 1, step: 0.01 },
70
+ { name: 'starCount', description: 'Number of stars distributed on a sphere', type: 'number', min: 10, max: 200, step: 5 },
71
+ { name: 'connectRadius', description: 'Max star distance for drawing a connecting line', type: 'number', min: 0.5, max: 5, step: 0.1 },
72
+ { name: 'orbitRadius', description: 'Star cloud radius as a multiplier of bounding radius', type: 'number', min: 0.5, max: 5, step: 0.1 },
73
+ { name: 'twinkleSpeed', description: 'Speed of the per-star twinkle animation', type: 'number', min: 0.1, max: 5, step: 0.1 },
74
+ { name: 'lineOpacity', description: 'Opacity of constellation connecting lines', type: 'number', min: 0, max: 1, step: 0.01 },
75
+ { name: 'starSize', description: 'Base size of individual star sprites', type: 'number', min: 0.01, max: 0.2, step: 0.01 },
76
+ { name: 'color', description: 'Star and line tint color', type: 'color' },
77
+ ];
78
+ export const hologramEffectProperties = [
79
+ { name: 'intensity', description: 'Overall brightness of the hologram planes', type: 'number', min: 0, max: 5, step: 0.05 },
80
+ { name: 'speed', description: 'Scanline sweep speed multiplier', type: 'number', min: 0.1, max: 10, step: 0.1 },
81
+ { name: 'opacity', description: 'Transparency of the scan planes', type: 'number', min: 0, max: 1, step: 0.01 },
82
+ { name: 'scanlineCount', description: 'Number of horizontal scan planes stacked vertically', type: 'number', min: 2, max: 20, step: 1 },
83
+ { name: 'scanSpeed', description: 'Speed of the scanline sweep across each plane', type: 'number', min: 0.1, max: 5, step: 0.1 },
84
+ { name: 'flickerAmount', description: 'Probability of random brightness flicker events', type: 'number', min: 0, max: 1, step: 0.01 },
85
+ { name: 'gridEnabled', description: 'Overlay a fine grid pattern on the scan planes', type: 'boolean' },
86
+ { name: 'glitchEnabled', description: 'Enable random block-shift glitch distortions', type: 'boolean' },
87
+ { name: 'scanColor', description: 'Tint color for scanlines, grid, and interference', type: 'color' },
88
+ ];
89
+ export const portalEffectProperties = [
90
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
91
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
92
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
93
+ { name: 'radius', description: 'Portal radius, as a multiple of the bounding radius', type: 'number', min: 0.5, max: 4, step: 0.05 },
94
+ { name: 'spiralTurns', description: 'Tightness of the spiral arms', type: 'number', min: 0, max: 12, step: 0.1 },
95
+ { name: 'innerGlowColor', description: 'Hot inner glow', type: 'color' },
96
+ { name: 'outerGlowColor', description: 'Cool outer glow', type: 'color' },
97
+ { name: 'rotationSpeed', description: 'Swirl and infall speed', type: 'number', min: 0, max: 5, step: 0.05 },
98
+ { name: 'particleRingEnabled', description: 'Show matter falling into the throat', type: 'boolean' },
99
+ { name: 'particleCount', description: 'Infalling particles', type: 'number', min: 0, max: 400, step: 5 },
100
+ { name: 'throatSize', description: 'Throat radius, as a fraction of the portal radius', type: 'number', min: 0.15, max: 0.7, step: 0.01 },
101
+ { name: 'funnelDepth', description: 'Depth of the funnel, as a fraction of the portal radius', type: 'number', min: 0, max: 1.5, step: 0.01 },
102
+ { name: 'otherSideColor', description: 'Nebula colour on the other side', type: 'color' },
103
+ ];
104
+ export const dnaHelixEffectProperties = [
105
+ { name: 'intensity', description: 'Backbone glow and bolt brightness multiplier', type: 'number', min: 0, max: 3, step: 0.05 },
106
+ { name: 'speed', description: 'Rotation and energy bolt travel speed', type: 'number', min: 0.1, max: 10, step: 0.1 },
107
+ { name: 'opacity', description: 'Transparency of rung lines and junction dots', type: 'number', min: 0, max: 1, step: 0.01 },
108
+ { name: 'particleCount', description: 'Backbone vertex density per strand (more = smoother)', type: 'number', min: 60, max: 300, step: 10 },
109
+ { name: 'strandCount', description: 'Number of helix strands (2 = double helix)', type: 'number', min: 2, max: 3, step: 1 },
110
+ { name: 'helixRadius', description: 'Helix radius as a multiplier of the bounding radius', type: 'number', min: 0.2, max: 3, step: 0.1 },
111
+ { name: 'helixHeight', description: 'Helix height as a multiplier of the bounding radius', type: 'number', min: 0.5, max: 5, step: 0.1 },
112
+ { name: 'runningLightEnabled', description: 'Show energy bolts traveling up the helix strands', type: 'boolean' },
113
+ { name: 'basePairColor', description: 'Color of the horizontal rung lines and junction dots', type: 'color' },
114
+ ];
115
+ export const orbEffectProperties = [
116
+ { name: 'intensity', description: 'Overall glow brightness multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
117
+ { name: 'speed', description: 'Pulse and corona rotation speed multiplier', type: 'number', min: 0.1, max: 10, step: 0.1 },
118
+ { name: 'opacity', description: 'Transparency of all orb layers', type: 'number', min: 0, max: 1, step: 0.01 },
119
+ { name: 'coreSize', description: 'Core sphere radius as a multiplier of bounding radius', type: 'number', min: 0.05, max: 0.5, step: 0.01 },
120
+ { name: 'glowLayers', description: 'Number of layered plasma shell spheres', type: 'number', min: 1, max: 5, step: 1 },
121
+ { name: 'noiseAmount', description: 'FBM surface boiling noise blend intensity', type: 'number', min: 0, max: 1, step: 0.01 },
122
+ { name: 'pulseSpeed', description: 'Speed of the breathe/pulse animation', type: 'number', min: 0.1, max: 5, step: 0.1 },
123
+ { name: 'coronaEnabled', description: 'Show the tilted equatorial corona ring', type: 'boolean' },
124
+ { name: 'innerColor', description: 'Hot core color (solar surface)', type: 'color' },
125
+ { name: 'outerColor', description: 'Outer atmospheric diffuse glow color', type: 'color' },
126
+ { name: 'coronaColor', description: 'Equatorial corona ring tint color', type: 'color' },
127
+ ];
128
+ export const lightningEffectProperties = [
129
+ { name: 'intensity', description: 'Overall bolt brightness and glow sprite size', type: 'number', min: 0, max: 5, step: 0.05 },
130
+ { name: 'speed', description: 'Bolt travel and cycle speed multiplier', type: 'number', min: 0.1, max: 10, step: 0.1 },
131
+ { name: 'opacity', description: 'Transparency of the effect', type: 'number', min: 0, max: 1, step: 0.01 },
132
+ { name: 'boltCount', description: 'Number of simultaneous lightning bolts', type: 'number', min: 1, max: 8, step: 1 },
133
+ { name: 'branchDepth', description: 'Fractal midpoint depth — higher = more jagged detail', type: 'number', min: 2, max: 6, step: 1 },
134
+ { name: 'strikeRadius', description: 'Distance of bolt origin from the object center', type: 'number', min: 1, max: 4, step: 0.1 },
135
+ { name: 'color', description: 'Bolt core color (head and corona)', type: 'color' },
136
+ { name: 'glowColor', description: 'Outer electric halo glow color', type: 'color' },
137
+ ];
138
+ export const auroraEffectProperties = [
139
+ { name: 'intensity', description: 'Overall ribbon brightness multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
140
+ { name: 'speed', description: 'Ribbon wave deformation and slow rotation speed', type: 'number', min: 0.1, max: 10, step: 0.1 },
141
+ { name: 'opacity', description: 'Transparency of the ribbon planes', type: 'number', min: 0, max: 1, step: 0.01 },
142
+ { name: 'ribbonCount', description: 'Number of aurora ribbon panels in the fan arc', type: 'number', min: 3, max: 10, step: 1 },
143
+ { name: 'waveAmplitude', description: 'Horizontal wave deformation amplitude', type: 'number', min: 0.1, max: 1.5, step: 0.05 },
144
+ { name: 'colorShift', description: 'Base hue offset into aurora spectrum (0=green, 1=full cycle)', type: 'number', min: 0, max: 1, step: 0.01 },
145
+ { name: 'arcWidth', description: 'Fan spread — 0=narrow column, 1=full circle arc', type: 'number', min: 0.3, max: 1, step: 0.05 },
146
+ ];
147
+ export const fireEffectProperties = [
148
+ { name: 'intensity', description: 'Flame brightness (and the light it casts)', type: 'number', min: 0, max: 5, step: 0.05 },
149
+ { name: 'speed', description: 'How fast the flames rise and flicker', type: 'number', min: 0, max: 5, step: 0.05 },
150
+ { name: 'turbulence', description: 'How much the flame breaks up into licks', type: 'number', min: 0, max: 4, step: 0.05 },
151
+ { name: 'sway', description: 'Side-to-side lean of the flame', type: 'number', min: 0, max: 4, step: 0.05 },
152
+ { name: 'tint', description: 'Colour multiplied over the blackbody flame', type: 'color' },
153
+ { name: 'mode', description: 'Tongues scatter flames over the host; Crown sits one flame on top', type: 'select', options: ['tongues', 'crown'], optionLabels: ['Tongues', 'Crown'] },
154
+ { name: 'coverage', description: 'How far down the host the tongues reach (0 top only, 1 all over)', type: 'number', min: 0, max: 1, step: 0.01 },
155
+ { name: 'tongues', description: 'Number of flame tongues over the host', type: 'number', min: 1, max: 120, step: 1 },
156
+ { name: 'radius', description: 'Flame radius when there is no host', type: 'number', min: 0.1, max: 5, step: 0.05 },
157
+ { name: 'height', description: 'Flame height when there is no host', type: 'number', min: 0.1, max: 10, step: 0.05 },
158
+ { name: 'radiusScale', description: 'Flame radius as a multiple of the fitted size', type: 'number', min: 0.1, max: 3, step: 0.05 },
159
+ { name: 'heightScale', description: 'Flame height as a multiple of the fitted size', type: 'number', min: 0.1, max: 4, step: 0.05 },
160
+ { name: 'light', description: 'Cast a flickering point light', type: 'boolean' },
161
+ ];
162
+ export const forcefieldEffectProperties = [
163
+ { name: 'intensity', description: 'Hex edge glow and fresnel rim brightness', type: 'number', min: 0, max: 5, step: 0.05 },
164
+ { name: 'speed', description: 'Ripple fire rate — higher = more frequent impacts', type: 'number', min: 0.1, max: 10, step: 0.1 },
165
+ { name: 'opacity', description: 'Overall transparency of the shield sphere', type: 'number', min: 0, max: 1, step: 0.01 },
166
+ { name: 'hexSize', description: 'Hex cell size — smaller = denser grid', type: 'number', min: 0.02, max: 0.15, step: 0.005 },
167
+ { name: 'rippleEnabled', description: 'Show expanding wave ripples from random impact points', type: 'boolean' },
168
+ { name: 'shieldColor', description: 'Primary hex grid line color', type: 'color' },
169
+ { name: 'rimColor', description: 'Fresnel edge glow color', type: 'color' },
170
+ ];
171
+ export const neuralNetworkEffectProperties = [
172
+ { name: 'intensity', description: 'Node sphere size and glow sprite size multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
173
+ { name: 'speed', description: 'Animation speed multiplier for orbit and pulses', type: 'number', min: 0.1, max: 10, step: 0.1 },
174
+ { name: 'opacity', description: 'Transparency of nodes, edges, and pulse sprites', type: 'number', min: 0, max: 1, step: 0.01 },
175
+ { name: 'nodeCount', description: 'Number of neural nodes distributed on a sphere cloud', type: 'number', min: 8, max: 40, step: 1 },
176
+ { name: 'signalSpeed', description: 'Speed at which synapse pulse sprites travel along edges', type: 'number', min: 0.3, max: 3, step: 0.1 },
177
+ { name: 'orbitSpeed', description: 'Speed of individual node orbit rotation', type: 'number', min: 0.1, max: 1, step: 0.05 },
178
+ { name: 'nodeColor', description: 'Node sphere and edge line tint color', type: 'color' },
179
+ { name: 'pulseColor', description: 'Traveling signal pulse sprite color', type: 'color' },
180
+ ];
181
+ export const blackHoleEffectProperties = [
182
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
183
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
184
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
185
+ { name: 'color', description: 'Photon-ring glow colour', type: 'color' },
186
+ { name: 'diskColor', description: 'Colour of the cooler outer disk; the inner disk runs white-hot', type: 'color' },
187
+ { name: 'jetEnabled', description: 'Show the relativistic jets along the spin axis', type: 'boolean' },
188
+ { name: 'jetColor', description: 'Jet colour', type: 'color' },
189
+ { name: 'rotationSpeed', description: 'Disk rotation speed', type: 'number', min: 0, max: 5, step: 0.05 },
190
+ { name: 'tilt', description: 'Tilt of the disk, in degrees', type: 'number', min: -90, max: 90, step: 0.5 },
191
+ { name: 'horizonSize', description: 'Event-horizon radius as a multiple of the bounding radius', type: 'number', min: 0.15, max: 1, step: 0.01 },
192
+ { name: 'diskOuter', description: 'Outer edge of the disk, as a multiple of the bounding radius', type: 'number', min: 1.5, max: 6, step: 0.05 },
193
+ { name: 'lensing', description: 'Strength of light bending; 1 is physical', type: 'number', min: 0, max: 1.5, step: 0.01 },
194
+ { name: 'beaming', description: 'Relativistic brightening of the approaching side; 1 is physical', type: 'number', min: 0, max: 1, step: 0.01 },
195
+ ];
196
+ export const iceCrystalsEffectProperties = [
197
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
198
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
199
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
200
+ { name: 'spikeCount', description: 'Number of crystals', type: 'number', min: 10, max: 60, step: 1 },
201
+ { name: 'spikeLength', description: 'Crystal size, relative to the bounding radius', type: 'number', min: 0.3, max: 3, step: 0.05 },
202
+ { name: 'frostEnabled', description: 'Show drifting diamond dust around the crystals', type: 'boolean' },
203
+ { name: 'iceColor', description: 'Ice colour', type: 'color' },
204
+ { name: 'pulseSpeed', description: 'How fast crystals grow, hold and sublimate', type: 'number', min: 0, max: 3, step: 0.05 },
205
+ { name: 'habit', description: 'Crystal habit: 0 hexagonal plates, 1 feathery dendrites', type: 'number', min: 0, max: 1, step: 0.01 },
206
+ { name: 'branches', description: 'Side branches per arm', type: 'number', min: 0, max: 7, step: 1 },
207
+ { name: 'sparkle', description: 'Strength of facet glints and diamond-dust flashes', type: 'number', min: 0, max: 2, step: 0.05 },
208
+ ];
209
+ export const smokePlumeEffectProperties = [
210
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
211
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
212
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
213
+ { name: 'particleCount', description: 'Number of smoke puffs', type: 'number', min: 40, max: 600, step: 10 },
214
+ { name: 'height', description: 'Plume height, as a multiple of the bounding radius', type: 'number', min: 0.5, max: 6, step: 0.05 },
215
+ { name: 'spread', description: 'Width of the source, as a multiple of the bounding radius', type: 'number', min: 0.1, max: 2, step: 0.01 },
216
+ { name: 'smokeColor', description: 'Smoke colour', type: 'color' },
217
+ { name: 'turbulence', description: 'Strength of the billowing swirl', type: 'number', min: 0, max: 1.5, step: 0.01 },
218
+ { name: 'heat', description: 'Glowing, fire-lit base', type: 'number', min: 0, max: 1, step: 0.01 },
219
+ { name: 'wind', description: 'Crosswind that bends the plume', type: 'number', min: -2, max: 2, step: 0.01 },
220
+ ];
221
+ export const volumetricFogEffectProperties = [
222
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
223
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
224
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
225
+ { name: 'color', description: 'Light colour', type: 'color' },
226
+ { name: 'particleCount', description: 'Quality: ray-march samples are half this number', type: 'number', min: 24, max: 128, step: 1 },
227
+ { name: 'fogRadius', description: 'Fog bank radius, as a multiple of the bounding radius', type: 'number', min: 0.5, max: 5, step: 0.05 },
228
+ { name: 'driftSpeed', description: 'How fast the fog rolls', type: 'number', min: 0, max: 2, step: 0.01 },
229
+ { name: 'fogColor', description: 'Fog colour', type: 'color' },
230
+ { name: 'density', description: 'Fog density', type: 'number', min: 0, max: 2, step: 0.01 },
231
+ { name: 'layerHeight', description: 'Height of the fog layer, as a multiple of the bounding radius', type: 'number', min: 0.3, max: 4, step: 0.05 },
232
+ { name: 'anisotropy', description: 'Forward scattering: higher glows more when looking toward the light', type: 'number', min: 0, max: 0.9, step: 0.01 },
233
+ { name: 'noiseScale', description: 'Size of the fog banks; higher is finer', type: 'number', min: 0.3, max: 4, step: 0.05 },
234
+ ];
235
+ export const smokeRingEffectProperties = [
236
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
237
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
238
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
239
+ { name: 'ringCount', description: 'Rings alive at once', type: 'number', min: 1, max: 4, step: 1 },
240
+ { name: 'expansionRadius', description: 'How far rings travel before fading, as a multiple of the bounding radius', type: 'number', min: 1.2, max: 6, step: 0.05 },
241
+ { name: 'riseSpeed', description: 'Launch speed of each ring', type: 'number', min: 0.1, max: 2, step: 0.01 },
242
+ { name: 'intervalSeconds', description: 'Seconds between launches', type: 'number', min: 0.3, max: 10, step: 0.1 },
243
+ { name: 'smokeColor', description: 'Smoke colour', type: 'color' },
244
+ { name: 'thickness', description: 'Core thickness of each ring', type: 'number', min: 0.05, max: 0.5, step: 0.01 },
245
+ { name: 'leapfrog', description: 'Launch rings in pairs that pass through each other', type: 'boolean' },
246
+ { name: 'wobble', description: 'How strongly rings wobble as they age', type: 'number', min: 0, max: 2, step: 0.01 },
247
+ ];
248
+ export const fieldLinesEffectProperties = [
249
+ { name: 'intensity', description: 'Overall brightness of lines and particles', type: 'number', min: 0, max: 5, step: 0.05 },
250
+ { name: 'speed', description: 'Rotation, bounce and drift speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
251
+ { name: 'opacity', description: 'Transparency of the field', type: 'number', min: 0, max: 1, step: 0.01 },
252
+ { name: 'shells', description: 'Number of nested field shells', type: 'number', min: 1, max: 8, step: 1 },
253
+ { name: 'linesPerShell', description: 'Field lines around each shell', type: 'number', min: 2, max: 32, step: 1 },
254
+ { name: 'extent', description: 'Outermost shell as a multiplier of the bounding radius', type: 'number', min: 1.5, max: 6, step: 0.05 },
255
+ { name: 'twist', description: 'Twists the lines around the axis, like a flux rope', type: 'number', min: -2, max: 2, step: 0.01 },
256
+ { name: 'tilt', description: 'Tilt of the magnetic axis, in degrees', type: 'number', min: 0, max: 45, step: 0.5 },
257
+ { name: 'particleCount', description: 'Trapped particles bouncing along each line', type: 'number', min: 0, max: 40, step: 1 },
258
+ { name: 'particleSize', description: 'Particle sprite size', type: 'number', min: 0, max: 4, step: 0.05 },
259
+ { name: 'color', description: 'Footpoint colour, where the field is strongest', type: 'color' },
260
+ { name: 'apexColor', description: 'Colour at the top of each arc, where the field is weakest', type: 'color' },
261
+ ];
262
+ export const strangeAttractorEffectProperties = [
263
+ { name: 'intensity', description: 'Overall brightness of the trails', type: 'number', min: 0, max: 5, step: 0.05 },
264
+ { name: 'speed', description: 'Speed of the comet heads and rotation', type: 'number', min: 0, max: 5, step: 0.05 },
265
+ { name: 'opacity', description: 'Transparency of the trails', type: 'number', min: 0, max: 1, step: 0.01 },
266
+ { name: 'system', description: 'Attractor: 0 Lorenz, 1 Aizawa, 2 Thomas', type: 'number', min: 0, max: 2, step: 1 },
267
+ { name: 'strands', description: 'Number of trajectories; they start together and drift apart', type: 'number', min: 1, max: 12, step: 1 },
268
+ { name: 'chaos', description: 'Pushes the system parameter; 0.5 is the textbook value', type: 'number', min: 0, max: 1, step: 0.01 },
269
+ { name: 'trailLength', description: 'Length of the bright trail, as a fraction of the path', type: 'number', min: 0.02, max: 0.6, step: 0.01 },
270
+ { name: 'scale', description: 'Size as a multiplier of the bounding radius', type: 'number', min: 0.5, max: 3, step: 0.05 },
271
+ { name: 'ghostOpacity', description: 'Opacity of the full path behind the trail', type: 'number', min: 0, max: 0.3, step: 0.005 },
272
+ { name: 'particleSize', description: 'Size of the glowing beads at the head', type: 'number', min: 0, max: 6, step: 0.1 },
273
+ { name: 'color', description: 'Colour of the cool, older part of the trail', type: 'color' },
274
+ { name: 'headColor', description: 'Colour of the hot head of each trail', type: 'color' },
275
+ ];
276
+ export const harmonicShellEffectProperties = [
277
+ { name: 'intensity', description: 'Overall brightness of the shell', type: 'number', min: 0, max: 5, step: 0.05 },
278
+ { name: 'speed', description: 'How fast the harmonics morph', type: 'number', min: 0, max: 5, step: 0.05 },
279
+ { name: 'opacity', description: 'Transparency of the shell', type: 'number', min: 0, max: 1, step: 0.01 },
280
+ { name: 'degree', description: 'Highest harmonic band; higher means more lobes', type: 'number', min: 1, max: 4, step: 1 },
281
+ { name: 'amplitude', description: 'How far the harmonics push the shell in and out', type: 'number', min: 0, max: 0.6, step: 0.01 },
282
+ { name: 'sizeMultiplier', description: 'Shell radius as a multiplier of the bounding radius', type: 'number', min: 1, max: 3, step: 0.05 },
283
+ { name: 'filmThickness', description: 'Soap-film thickness in nanometres; sets the colour bands', type: 'number', min: 100, max: 1000, step: 5 },
284
+ { name: 'nodalLines', description: 'Brightness of the lines where the harmonic crosses zero', type: 'number', min: 0, max: 1, step: 0.01 },
285
+ { name: 'color', description: 'Base tint under the iridescence', type: 'color' },
286
+ { name: 'rimColor', description: 'Rim and nodal-line colour', type: 'color' },
287
+ ];
288
+ // =============================================================================
289
+ // LOOKUP MAP — keyed by GenerativeEffectType
290
+ // =============================================================================
291
+ export const galaxyEffectProperties = [
292
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
293
+ { name: 'speed', description: 'Rotation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
294
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
295
+ { name: 'color', description: 'Colour of the young stars that light the arms', type: 'color' },
296
+ { name: 'starCount', description: 'Number of stars', type: 'number', min: 2000, max: 40000, step: 500 },
297
+ { name: 'radius', description: 'Galaxy radius, as a multiple of the bounding radius', type: 'number', min: 1, max: 8, step: 0.05 },
298
+ { name: 'armTwist', description: 'How tightly the arms wind; 0 gives a barred ellipse', type: 'number', min: 0, max: 12, step: 0.05 },
299
+ { name: 'ellipticity', description: 'How elongated the orbits are; stronger arms when higher', type: 'number', min: 0, max: 0.6, step: 0.01 },
300
+ { name: 'bulgeSize', description: 'Size of the central bulge, as a fraction of the radius', type: 'number', min: 0, max: 0.5, step: 0.01 },
301
+ { name: 'dust', description: 'Darkness of the dust lanes along the arms', type: 'number', min: 0, max: 1, step: 0.01 },
302
+ { name: 'tilt', description: 'Tilt of the galactic disk, in degrees', type: 'number', min: -90, max: 90, step: 0.5 },
303
+ { name: 'coreColor', description: 'Colour of the old stars in the bulge', type: 'color' },
304
+ ];
305
+ export const fireflySwarmEffectProperties = [
306
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
307
+ { name: 'speed', description: 'Simulation speed multiplier (drift and flashing)', type: 'number', min: 0, max: 5, step: 0.05 },
308
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
309
+ { name: 'color', description: 'Colour of the faint firefly bodies between flashes', type: 'color' },
310
+ { name: 'count', description: 'Number of fireflies', type: 'number', min: 20, max: 400, step: 1 },
311
+ { name: 'coupling', description: 'How strongly neighbours pull each other into step; 0 never syncs', type: 'number', min: 0, max: 3, step: 0.01 },
312
+ { name: 'frequency', description: 'Flashes per second', type: 'number', min: 0.1, max: 2, step: 0.01 },
313
+ { name: 'spread', description: 'Outer radius of the swarm, as a multiple of the bounding radius', type: 'number', min: 1.4, max: 6, step: 0.05 },
314
+ { name: 'driftSpeed', description: 'How fast the fireflies wander', type: 'number', min: 0, max: 4, step: 0.05 },
315
+ { name: 'glowSize', description: 'Size of the flash glow', type: 'number', min: 0.2, max: 3, step: 0.01 },
316
+ { name: 'flashColor', description: 'Colour of the bioluminescent flash', type: 'color' },
317
+ ];
318
+ export const murmurationEffectProperties = [
319
+ { name: 'intensity', description: 'Overall brightness of the birds', type: 'number', min: 0, max: 5, step: 0.05 },
320
+ { name: 'speed', description: 'Flight speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
321
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
322
+ { name: 'color', description: 'Colour of the birds; dense folds of the flock read darker and denser', type: 'color' },
323
+ { name: 'count', description: 'Number of birds', type: 'number', min: 100, max: 4000, step: 10 },
324
+ { name: 'flockRadius', description: 'Size of the airspace the flock uses, as a multiple of the bounding radius', type: 'number', min: 1.5, max: 8, step: 0.05 },
325
+ { name: 'cohesion', description: 'Pull toward the centre of the nearest neighbours; high values give tight balls', type: 'number', min: 0, max: 3, step: 0.01 },
326
+ { name: 'alignment', description: 'How strongly a bird matches its neighbours heading; drives the travelling waves', type: 'number', min: 0, max: 3, step: 0.01 },
327
+ { name: 'separation', description: 'Push away from the nearest neighbours; high values thin the flock out', type: 'number', min: 0, max: 3, step: 0.01 },
328
+ { name: 'birdSize', description: 'Size of each bird', type: 'number', min: 0.2, max: 4, step: 0.01 },
329
+ ];
330
+ export const planetaryRingsEffectProperties = [
331
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
332
+ { name: 'speed', description: 'How fast the rings orbit', type: 'number', min: 0, max: 5, step: 0.05 },
333
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
334
+ { name: 'color', description: 'Colour of the icy ring particles', type: 'color' },
335
+ { name: 'gapColor', description: 'Colour of the thin material inside the divisions', type: 'color' },
336
+ { name: 'dustColor', description: 'Colour of the fine dust that scatters light forward', type: 'color' },
337
+ { name: 'innerRadius', description: 'Inner edge of the rings, as a multiple of the bounding radius', type: 'number', min: 1.02, max: 4, step: 0.01 },
338
+ { name: 'outerRadius', description: 'Outer edge of the rings, as a multiple of the bounding radius', type: 'number', min: 1.2, max: 8, step: 0.01 },
339
+ { name: 'tilt', description: 'Tilt of the ring plane, in degrees', type: 'number', min: -90, max: 90, step: 0.5 },
340
+ { name: 'moons', description: 'Resonant moons: each one opens gaps and starts spiral density waves', type: 'number', min: 0, max: 3, step: 1 },
341
+ { name: 'spokes', description: 'Faint radial dust streaks that turn with the planet, not with the orbits', type: 'number', min: 0, max: 1, step: 0.01 },
342
+ { name: 'forwardScatter', description: 'How much fine dust there is; dusty rings blaze when lit from behind', type: 'number', min: 0, max: 1, step: 0.01 },
343
+ { name: 'sunAngle', description: 'Direction of the sun around the planet, in degrees', type: 'number', min: 0, max: 360, step: 1 },
344
+ { name: 'sunElevation', description: 'Height of the sun above the world horizon, in degrees', type: 'number', min: -60, max: 60, step: 0.5 },
345
+ ];
346
+ export const waterCausticsEffectProperties = [
347
+ { name: 'intensity', description: 'Overall brightness of the caustic light', type: 'number', min: 0, max: 5, step: 0.05 },
348
+ { name: 'speed', description: 'Speed of the waves', type: 'number', min: 0, max: 5, step: 0.05 },
349
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
350
+ { name: 'color', description: 'Tint of the light coming through the water', type: 'color' },
351
+ { name: 'waterDepth', description: 'Height of the water surface above the floor, in bounding radii; deeper water gives a coarser, softer web', type: 'number', min: 0.2, max: 6, step: 0.05 },
352
+ { name: 'waveScale', description: 'Wavelength of the ripples, in bounding radii', type: 'number', min: 0.2, max: 3, step: 0.01 },
353
+ { name: 'waveHeight', description: 'Steepness of the ripples; higher focuses the light into sharper filaments', type: 'number', min: 0, max: 3, step: 0.01 },
354
+ { name: 'dispersion', description: 'Spread of the refractive index across red, green and blue (1 is real water, n = 1.327 to 1.336)', type: 'number', min: 0, max: 1, step: 0.01 },
355
+ { name: 'radius', description: 'Radius of the lit floor disc, in bounding radii', type: 'number', min: 1, max: 8, step: 0.05 },
356
+ { name: 'showOnHost', description: 'Also project the caustics onto the object itself', type: 'boolean' },
357
+ ];
358
+ export const iceHaloEffectProperties = [
359
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
360
+ { name: 'speed', description: 'How fast the crystals drift', type: 'number', min: 0, max: 5, step: 0.05 },
361
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
362
+ { name: 'color', description: 'Tint of the light itself; the halo keeps its own refracted colours', type: 'color' },
363
+ { name: 'haloScale', description: 'Angular size of the halo; 1 is the physical 22°, which fills a normal lens', type: 'number', min: 0.1, max: 1, step: 0.01 },
364
+ { name: 'sunDogs', description: 'Bright spots left and right of the source, on its own level', type: 'number', min: 0, max: 1, step: 0.01 },
365
+ { name: 'outerHalo', description: 'The wider, fainter 46° halo from the 90° prism faces', type: 'number', min: 0, max: 1, step: 0.01 },
366
+ { name: 'parhelicCircle', description: 'Faint white circle running horizontally through the source', type: 'number', min: 0, max: 1, step: 0.01 },
367
+ { name: 'pillar', description: 'Vertical streak above and below the source', type: 'number', min: 0, max: 1, step: 0.01 },
368
+ { name: 'glare', description: 'Soft glow right around the source', type: 'number', min: 0, max: 2, step: 0.01 },
369
+ ];
370
+ export const fallingLeavesEffectProperties = [
371
+ { name: 'intensity', description: 'Brightness of the light on the leaves', type: 'number', min: 0, max: 5, step: 0.05 },
372
+ { name: 'speed', description: 'Speed of the fall', type: 'number', min: 0, max: 5, step: 0.05 },
373
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
374
+ { name: 'color', description: 'Colour of the greener leaves', type: 'color' },
375
+ { name: 'leafCount', description: 'Number of leaves in the air at once', type: 'number', min: 4, max: 400, step: 2 },
376
+ { name: 'leafSize', description: 'Size of a leaf, as a fraction of the bounding radius', type: 'number', min: 0.2, max: 3, step: 0.05 },
377
+ { name: 'fallHeight', description: 'Height of the column the leaves fall through, in bounding radii', type: 'number', min: 1, max: 8, step: 0.05 },
378
+ { name: 'spread', description: 'Radius of the column the leaves fall through, in bounding radii', type: 'number', min: 1, max: 6, step: 0.05 },
379
+ { name: 'tumble', description: 'Share of leaves in the tumbling regime rather than the fluttering one', type: 'number', min: 0, max: 1, step: 0.01 },
380
+ { name: 'wind', description: 'Strength of the sideways breeze', type: 'number', min: 0, max: 3, step: 0.01 },
381
+ { name: 'autumnColor', description: 'Colour of the turned leaves; each leaf is mixed between the two', type: 'color' },
382
+ ];
383
+ export const lichtenbergEffectProperties = [
384
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
385
+ { name: 'speed', description: 'Animation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
386
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
387
+ { name: 'color', description: 'Colour of the glow around the channels', type: 'color' },
388
+ { name: 'nodeCount', description: 'Number of sites the discharge can grow through; more gives finer branches', type: 'number', min: 800, max: 8000, step: 100 },
389
+ { name: 'branching', description: 'Growth exponent η: low values give dense bushy ferns, high values sparse lightning', type: 'number', min: 0.5, max: 5, step: 0.05 },
390
+ { name: 'growthTime', description: 'Seconds for one grow, hold and fade cycle', type: 'number', min: 2, max: 30, step: 0.5 },
391
+ { name: 'lineWidth', description: 'Width of the channels on screen', type: 'number', min: 0.2, max: 4, step: 0.05 },
392
+ { name: 'pulse', description: 'Strength of the slow pulses running outward along the channels', type: 'number', min: 0, max: 2, step: 0.01 },
393
+ { name: 'coreColor', description: 'Colour of the hot core inside the thickest channels', type: 'color' },
394
+ ];
395
+ export const dandelionSeedsEffectProperties = [
396
+ { name: 'intensity', description: 'Overall brightness', type: 'number', min: 0, max: 5, step: 0.05 },
397
+ { name: 'speed', description: 'Simulation speed multiplier', type: 'number', min: 0, max: 5, step: 0.05 },
398
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
399
+ { name: 'color', description: 'Colour of the pappus filaments', type: 'color' },
400
+ { name: 'seedCount', description: 'Number of seeds on the head and in the air', type: 'number', min: 10, max: 260, step: 1 },
401
+ { name: 'windSpeed', description: 'Mean wind speed; also how quickly seeds are pulled loose', type: 'number', min: 0, max: 2, step: 0.01 },
402
+ { name: 'windDirection', description: 'Wind direction, in degrees around the vertical', type: 'number', min: 0, max: 360, step: 1 },
403
+ { name: 'turbulence', description: 'Strength of the swirling gusts on top of the mean wind', type: 'number', min: 0, max: 2, step: 0.01 },
404
+ { name: 'seedSize', description: 'Size of each seed', type: 'number', min: 0.3, max: 3, step: 0.01 },
405
+ { name: 'lift', description: 'Updraft strength; at 1 it about cancels the seeds slow fall', type: 'number', min: 0, max: 3, step: 0.01 },
406
+ { name: 'stemColor', description: 'Colour of the beak and the seed body hanging below', type: 'color' },
407
+ ];
408
+ export const flaresEffectProperties = [
409
+ { name: 'intensity', description: 'Flare brightness', type: 'number', min: 0, max: 5, step: 0.05 },
410
+ { name: 'speed', description: 'How fast the bursts erupt and fade', type: 'number', min: 0, max: 5, step: 0.05 },
411
+ { name: 'opacity', description: 'Overall strength (additive: scales the brightness)', type: 'number', min: 0, max: 1, step: 0.01 },
412
+ { name: 'color', description: 'Colour of the flare tips (the roots burn white-hot)', type: 'color' },
413
+ { name: 'radius', description: 'Size of the flare disc, as a multiple of the host radius', type: 'number', min: 0.1, max: 5, step: 0.05 },
414
+ { name: 'padding', description: 'Extra room around the limb for the bursts to reach into', type: 'number', min: 0.1, max: 3, step: 0.05 },
415
+ { name: 'shooting', description: 'Bursts shoot out from the centre instead of rooting on the limb', type: 'boolean' },
416
+ { name: 'maskResolution', description: 'Resolution of the host silhouette mask, in pixels', type: 'number', min: 128, max: 2048, step: 128 },
417
+ ];
418
+ export const sparklesBurstEffectProperties = [
419
+ { name: 'intensity', description: 'Burst brightness', type: 'number', min: 0, max: 5, step: 0.05 },
420
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
421
+ { name: 'coreColor', description: 'Colour of the bright core', type: 'color' },
422
+ { name: 'burstColor', description: 'Colour of the rays', type: 'color' },
423
+ { name: 'rayCount', description: 'Number of rays', type: 'number', min: 3, max: 32, step: 1 },
424
+ { name: 'scale', description: 'Size of the burst', type: 'number', min: 0.1, max: 20, step: 0.1 },
425
+ { name: 'durationMs', description: 'Length of one burst, in milliseconds', type: 'number', min: 200, max: 10000, step: 50 },
426
+ { name: 'loop', description: 'Repeat the burst', type: 'boolean' },
427
+ { name: 'hoverColor', description: 'Colour where the pointer hovers', type: 'color' },
428
+ { name: 'hoverRadius', description: 'Size of the hover highlight', type: 'number', min: 0, max: 1.4, step: 0.01 },
429
+ { name: 'hoverIntensity', description: 'Strength of the hover highlight', type: 'number', min: 0, max: 5, step: 0.05 },
430
+ ];
431
+ export const bubblesEffectProperties = [
432
+ { name: 'speed', description: 'Time multiplier for the rise and the shimmer', type: 'number', min: 0.05, max: 5, step: 0.05 },
433
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
434
+ { name: 'colors', description: 'Three thin-film colours the bubbles cycle through', type: 'color' },
435
+ { name: 'iridescence', description: 'Strength of the thin-film colour shift', type: 'number', min: 0, max: 1, step: 0.01 },
436
+ { name: 'scale', description: 'Bubble size', type: 'number', min: 0.05, max: 10, step: 0.05 },
437
+ { name: 'spawnRate', description: 'Bubbles per second', type: 'number', min: 0, max: 60, step: 1 },
438
+ { name: 'floatSpeed', description: 'Rise speed', type: 'number', min: 0, max: 3, step: 0.05 },
439
+ { name: 'lifetimeMs', description: 'How long a bubble lives, in milliseconds', type: 'number', min: 500, max: 15000, step: 100 },
440
+ ];
441
+ export const glyphsEffectProperties = [
442
+ { name: 'intensity', description: 'Glow brightness', type: 'number', min: 0, max: 5, step: 0.05 },
443
+ { name: 'opacity', description: 'Overall opacity', type: 'number', min: 0, max: 1, step: 0.01 },
444
+ { name: 'ringColor', description: 'Colour of the ring', type: 'color' },
445
+ { name: 'glyphsColor', description: 'Colour of the glyphs', type: 'color' },
446
+ { name: 'shadesMultiplier', description: 'Depth of the shading inside the glyphs', type: 'number', min: 0, max: 3, step: 0.05 },
447
+ { name: 'glyphCount', description: 'Number of glyphs around the ring', type: 'number', min: 3, max: 48, step: 1 },
448
+ { name: 'ringRadius', description: 'Ring radius when there is no host', type: 'number', min: 0.1, max: 20, step: 0.1 },
449
+ { name: 'rotationSpeed', description: 'Ring rotation speed (negative reverses)', type: 'number', min: -5, max: 5, step: 0.05 },
450
+ { name: 'morphSpeed', description: 'How fast the glyphs change shape', type: 'number', min: 0, max: 5, step: 0.05 },
451
+ { name: 'hoverColor', description: 'Colour where the pointer hovers', type: 'color' },
452
+ { name: 'hoverRadius', description: 'Size of the hover highlight', type: 'number', min: 0, max: 1.4, step: 0.01 },
453
+ { name: 'hoverIntensity', description: 'Strength of the hover highlight', type: 'number', min: 0, max: 5, step: 0.05 },
454
+ ];
455
+ export const smokeRibbonEffectProperties = [
456
+ { name: 'speed', description: 'How fast the smoke rises', type: 'number', min: 0, max: 3, step: 0.01 },
457
+ { name: 'density', description: 'Smoke thickness', type: 'number', min: 0, max: 3, step: 0.05 },
458
+ { name: 'color', description: 'Smoke colour at the base', type: 'color' },
459
+ { name: 'colorTop', description: 'Smoke colour at the top', type: 'color' },
460
+ { name: 'detail', description: 'Scale of the noise that breaks the smoke up', type: 'number', min: 0.1, max: 5, step: 0.05 },
461
+ { name: 'remapLow', description: 'Noise floor: raise it for thinner, wispier smoke', type: 'number', min: 0, max: 1, step: 0.01 },
462
+ { name: 'remapHigh', description: 'Noise ceiling: lower it for denser cores', type: 'number', min: 0, max: 1.5, step: 0.01 },
463
+ { name: 'edgeX', description: 'Soft fade at the sides', type: 'number', min: 0, max: 0.5, step: 0.01 },
464
+ { name: 'edgeY', description: 'Soft fade at the top and bottom', type: 'number', min: 0, max: 0.5, step: 0.01 },
465
+ { name: 'twistStrength', description: 'How far the column twists as it rises', type: 'number', min: 0, max: 20, step: 0.1 },
466
+ { name: 'twistSpeed', description: 'How fast the twist travels', type: 'number', min: 0, max: 3, step: 0.01 },
467
+ { name: 'twistScale', description: 'Vertical scale of the twist noise', type: 'number', min: 0.1, max: 5, step: 0.05 },
468
+ { name: 'twistStart', description: 'Height where the twist begins (0 base, 1 top)', type: 'number', min: 0, max: 1, step: 0.01 },
469
+ { name: 'width', description: 'Ribbon width', type: 'number', min: 0.1, max: 10, step: 0.05 },
470
+ { name: 'height', description: 'Ribbon height', type: 'number', min: 0.5, max: 20, step: 0.1 },
471
+ { name: 'planes', description: 'Crossed planes for volume: 1 flat, 2 cross, 3 star', type: 'number', min: 1, max: 3, step: 1 },
472
+ { name: 'segmentsPerLength', description: 'Mesh density; keep it high so the twist bends smoothly', type: 'number', min: 2, max: 24, step: 1 },
473
+ { name: 'interactive', description: 'Lean away from the pointer on hover', type: 'boolean' },
474
+ ];
475
+ export const EFFECT_PROPERTIES = {
476
+ molecules: moleculesEffectProperties,
477
+ shockwave: shockwaveEffectProperties,
478
+ aura: auraEffectProperties,
479
+ dataStream: dataStreamEffectProperties,
480
+ constellation: constellationEffectProperties,
481
+ hologram: hologramEffectProperties,
482
+ portal: portalEffectProperties,
483
+ dnaHelix: dnaHelixEffectProperties,
484
+ orb: orbEffectProperties,
485
+ lightning: lightningEffectProperties,
486
+ aurora: auroraEffectProperties,
487
+ fire: fireEffectProperties,
488
+ forcefield: forcefieldEffectProperties,
489
+ neuralNetwork: neuralNetworkEffectProperties,
490
+ blackHole: blackHoleEffectProperties,
491
+ iceCrystals: iceCrystalsEffectProperties,
492
+ smokePlume: smokePlumeEffectProperties,
493
+ volumetricFog: volumetricFogEffectProperties,
494
+ smokeRing: smokeRingEffectProperties,
495
+ fieldLines: fieldLinesEffectProperties,
496
+ strangeAttractor: strangeAttractorEffectProperties,
497
+ harmonicShell: harmonicShellEffectProperties,
498
+ galaxy: galaxyEffectProperties,
499
+ fireflySwarm: fireflySwarmEffectProperties,
500
+ murmuration: murmurationEffectProperties,
501
+ planetaryRings: planetaryRingsEffectProperties,
502
+ waterCaustics: waterCausticsEffectProperties,
503
+ iceHalo: iceHaloEffectProperties,
504
+ fallingLeaves: fallingLeavesEffectProperties,
505
+ lichtenberg: lichtenbergEffectProperties,
506
+ dandelionSeeds: dandelionSeedsEffectProperties,
507
+ flares: flaresEffectProperties,
508
+ sparklesBurst: sparklesBurstEffectProperties,
509
+ bubbles: bubblesEffectProperties,
510
+ glyphs: glyphsEffectProperties,
511
+ smokeRibbon: smokeRibbonEffectProperties,
512
+ };
@@ -0,0 +1,38 @@
1
+ import type { ShapeName, GeometryShapeConfig, DisplayMode, ModeConfig, ModeGroup } from '../../types/scene3d';
2
+ export type ControlOf<K extends string> = {
3
+ type: 'range';
4
+ key: K;
5
+ label: string;
6
+ min: number;
7
+ max: number;
8
+ step: number;
9
+ default: number;
10
+ digits?: number;
11
+ unit?: string;
12
+ format?: (v: number) => string;
13
+ } | {
14
+ type: 'toggle';
15
+ key: K;
16
+ label: string;
17
+ default: boolean;
18
+ } | {
19
+ type: 'text';
20
+ key: K;
21
+ label: string;
22
+ default: string;
23
+ };
24
+ type OptKey = keyof GeometryShapeConfig & string;
25
+ export declare const SHAPE_CONTROLS: Record<ShapeName, ControlOf<OptKey>[]>;
26
+ export declare const ALL_SHAPES: ShapeName[];
27
+ export declare function defaultShapeOptions(type?: ShapeName): GeometryShapeConfig;
28
+ export declare function defaultShapeConfig(type?: ShapeName): GeometryShapeConfig;
29
+ export declare function defaultModeConfig(mode?: DisplayMode): ModeConfig;
30
+ type CfgKey = keyof ModeConfig & string;
31
+ export declare const MODE_CONTROLS: Record<DisplayMode, ControlOf<CfgKey>[]>;
32
+ export declare const MODE_GROUPS: {
33
+ label: ModeGroup;
34
+ modes: DisplayMode[];
35
+ }[];
36
+ export declare const MODE_LABEL: Record<DisplayMode, string>;
37
+ export {};
38
+ //# sourceMappingURL=geometryProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometryProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/geometryProperties.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9G,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GACjK;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,KAAK,MAAM,GAAG,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAGjD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAuCjE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAkC,SAAS,EAAE,CAAC;AAErE,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,SAAmB,GAAG,mBAAmB,CAIlF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,SAAmB,GAAG,mBAAmB,CAEjF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,WAAqB,GAAG,UAAU,CAEzE;AAED,KAAK,MAAM,GAAG,MAAM,UAAU,GAAG,MAAM,CAAC;AAIxC,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAYlE,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,EAInE,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAYlD,CAAC"}