@3driseai/3drise-core 1.0.19 → 1.0.21

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 (155) 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 +419 -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 +199 -0
  85. package/dist/properties/tables/index.d.ts +8 -0
  86. package/dist/properties/tables/index.d.ts.map +1 -0
  87. package/dist/properties/tables/index.js +7 -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/ShadersLibrary.d.ts +1 -1
  104. package/dist/services/ShadersLibrary.d.ts.map +1 -1
  105. package/dist/shaders/ApollonianGridMaterial.d.ts +70 -0
  106. package/dist/shaders/ApollonianGridMaterial.d.ts.map +1 -0
  107. package/dist/shaders/ApollonianGridMaterial.js +289 -0
  108. package/dist/shaders/ConformalGridMaterial.d.ts +91 -0
  109. package/dist/shaders/ConformalGridMaterial.d.ts.map +1 -0
  110. package/dist/shaders/ConformalGridMaterial.js +335 -0
  111. package/dist/shaders/HilbertGridMaterial.d.ts +79 -0
  112. package/dist/shaders/HilbertGridMaterial.d.ts.map +1 -0
  113. package/dist/shaders/HilbertGridMaterial.js +329 -0
  114. package/dist/shaders/LensingGridMaterial.d.ts +73 -0
  115. package/dist/shaders/LensingGridMaterial.d.ts.map +1 -0
  116. package/dist/shaders/LensingGridMaterial.js +253 -0
  117. package/dist/shaders/ParastichyGridMaterial.d.ts +76 -0
  118. package/dist/shaders/ParastichyGridMaterial.d.ts.map +1 -0
  119. package/dist/shaders/ParastichyGridMaterial.js +282 -0
  120. package/dist/shaders/PhyllotaxisGridMaterial.d.ts +85 -0
  121. package/dist/shaders/PhyllotaxisGridMaterial.d.ts.map +1 -0
  122. package/dist/shaders/PhyllotaxisGridMaterial.js +532 -0
  123. package/dist/shaders/TruchetGridMaterial.d.ts +76 -0
  124. package/dist/shaders/TruchetGridMaterial.d.ts.map +1 -0
  125. package/dist/shaders/TruchetGridMaterial.js +290 -0
  126. package/dist/shaders/WallpaperGridMaterial.d.ts.map +1 -1
  127. package/dist/shaders/WallpaperGridMaterial.js +6 -1
  128. package/dist/shaders/index.d.ts +7 -0
  129. package/dist/shaders/index.d.ts.map +1 -1
  130. package/dist/shaders/index.js +7 -0
  131. package/dist/three/GalleryLayoutV.d.ts.map +1 -1
  132. package/dist/three/GalleryLayoutV.js +0 -10
  133. package/dist/three/SceneBuilderV.d.ts.map +1 -1
  134. package/dist/three/SceneBuilderV.js +1 -7
  135. package/dist/types/generativeEffects.d.ts +0 -4
  136. package/dist/types/generativeEffects.d.ts.map +1 -1
  137. package/dist/types/generativeParticles.d.ts +175 -2
  138. package/dist/types/generativeParticles.d.ts.map +1 -1
  139. package/dist/types/objectSettings.d.ts +45 -4
  140. package/dist/types/objectSettings.d.ts.map +1 -1
  141. package/dist/types/scene3d.d.ts +3 -3
  142. package/dist/types/scene3d.d.ts.map +1 -1
  143. package/dist/utils/generativeAnimatable.d.ts +1 -1
  144. package/dist/utils/generativeAnimatable.d.ts.map +1 -1
  145. package/dist/utils/generativeAnimatable.js +7 -1
  146. package/dist/utils/getAnimatableProperties.d.ts +12 -1
  147. package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
  148. package/dist/utils/getAnimatableProperties.js +35 -138
  149. package/dist/utils/index.d.ts +1 -0
  150. package/dist/utils/index.d.ts.map +1 -1
  151. package/dist/utils/index.js +1 -0
  152. package/dist/utils/objectEffects.d.ts +6 -0
  153. package/dist/utils/objectEffects.d.ts.map +1 -0
  154. package/dist/utils/objectEffects.js +5 -0
  155. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ const int = (key, label, min, max, def) => ({ type: 'range', key, label, min, max, step: 1, default: def });
2
+ const num = (key, label, min, max, step, def) => ({ type: 'range', key, label, min, max, step, default: def, digits: 2 });
3
+ const ang = (key, label, def) => ({ type: 'range', key, label, min: 0, max: Math.PI * 2, step: 0.05, default: def, digits: 2, unit: 'rad' });
4
+ const str = (key, label, def) => ({ type: 'text', key, label, default: def });
5
+ const CURVE = int('curveSegments', 'Curve detail', 6, 160, 64);
6
+ export const SHAPE_CONTROLS = {
7
+ heart: [CURVE],
8
+ star: [int('points', 'Points', 2, 12, 5), num('outer', 'Outer radius', 0.1, 0.6, 0.01, 0.5), num('inner', 'Inner radius', 0.05, 0.5, 0.01, 0.2), CURVE],
9
+ polygon: [int('sides', 'Sides', 3, 12, 6), CURVE],
10
+ gear: [int('teeth', 'Teeth', 4, 32, 12), num('outer', 'Outer', 0.2, 0.6, 0.01, 0.5), num('inner', 'Root', 0.15, 0.55, 0.01, 0.38), num('hole', 'Bore', 0.05, 0.35, 0.01, 0.16), CURVE],
11
+ flower: [int('petals', 'Petals', 3, 16, 6), num('outer', 'Outer', 0.2, 0.6, 0.01, 0.5), num('inner', 'Inner', 0.05, 0.5, 0.01, 0.26), num('sharp', 'Sharpness', 0.2, 3, 0.05, 0.7), CURVE],
12
+ spade: [CURVE],
13
+ club: [CURVE],
14
+ diamond: [CURVE],
15
+ droplet: [num('width', 'Width', 0.2, 0.8, 0.01, 0.5), num('taper', 'Taper', 0.4, 1.8, 0.01, 1), CURVE],
16
+ lightning: [num('width', 'Width', 0.3, 1, 0.01, 0.6), num('height', 'Height', 0.5, 1.4, 0.01, 1), CURVE],
17
+ sparkle: [int('points', 'Points', 3, 12, 4), num('outer', 'Outer', 0.2, 0.6, 0.01, 0.5), num('inner', 'Pinch', 0.02, 0.4, 0.01, 0.14), CURVE],
18
+ shield: [num('width', 'Width', 0.4, 1.2, 0.01, 0.8), CURVE],
19
+ pawPrint: [CURVE],
20
+ superformula: [
21
+ int('symmetry', 'Symmetry', 1, 20, 6), num('roundness', 'Roundness', 0.1, 2, 0.05, 0.3),
22
+ num('twist1', 'Twist 1', 0.1, 4, 0.05, 0.3), num('twist2', 'Twist 2', 0.1, 4, 0.05, 0.3),
23
+ num('stretchX', 'Stretch X', 0.3, 2, 0.05, 1), num('stretchY', 'Stretch Y', 0.3, 2, 0.05, 1),
24
+ int('samples', 'Resolution', 32, 512, 256), CURVE,
25
+ ],
26
+ infinity: [num('waist', 'Waist', 0.04, 0.3, 0.01, 0.14), num('thickness', 'Ribbon', 0.05, 0.25, 0.01, 0.12), int('samples', 'Resolution', 64, 512, 220), CURVE],
27
+ box: [int('subdivisions', 'Subdivisions', 1, 24, 1)],
28
+ sphere: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), int('segments', 'Segments', 3, 64, 32), int('rings', 'Rings', 2, 64, 32)],
29
+ cylinder: [num('radiusTop', 'Top radius', 0, 2, 0.01, 0.5), num('radiusBottom', 'Bottom radius', 0, 2, 0.01, 0.5), num('height', 'Height', 0.1, 3, 0.01, 1), int('radialSegments', 'Radial segments', 3, 64, 32)],
30
+ cone: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), num('height', 'Height', 0.1, 3, 0.01, 1), int('radialSegments', 'Radial segments', 3, 64, 32)],
31
+ torus: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), num('tube', 'Tube', 0.02, 0.6, 0.01, 0.2), int('radialSegments', 'Radial segments', 3, 64, 16), int('tubularSegments', 'Tubular segments', 3, 200, 100)],
32
+ capsule: [num('radius', 'Radius', 0.05, 1.5, 0.01, 0.3), num('length', 'Length', 0.1, 3, 0.01, 1), int('capSegments', 'Cap segments', 1, 16, 4), int('radialSegments', 'Radial segments', 3, 64, 8)],
33
+ icosahedron: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), int('detail', 'Detail', 0, 5, 0)],
34
+ octahedron: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), int('detail', 'Detail', 0, 5, 0)],
35
+ tetrahedron: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), int('detail', 'Detail', 0, 5, 0)],
36
+ dodecahedron: [num('radius', 'Radius', 0.1, 2, 0.01, 0.5), int('detail', 'Detail', 0, 5, 0)],
37
+ plane: [num('width', 'Width', 0.2, 3, 0.01, 1), num('height', 'Height', 0.2, 3, 0.01, 1), int('widthSegments', 'Width segments', 1, 64, 1), int('heightSegments', 'Height segments', 1, 64, 1)],
38
+ ring: [num('innerRadius', 'Inner radius', 0.05, 1.5, 0.01, 0.3), num('outerRadius', 'Outer radius', 0.1, 2, 0.01, 0.8), int('thetaSegments', 'Theta segments', 3, 64, 32), int('phiSegments', 'Phi segments', 1, 32, 8)],
39
+ arcPlane: [num('radius', 'Radius', 0.2, 3, 0.01, 1), num('width', 'Band width', 0.02, 1, 0.01, 0.2), ang('startAngle', 'Start angle', 0), ang('endAngle', 'End angle', Math.PI), int('segments', 'Segments', 3, 128, 32)],
40
+ bentPlane: [num('radius', 'Radius', 0.2, 5, 0.01, 2), num('height', 'Height', 0.1, 3, 0.01, 1), ang('arc', 'Arc', Math.PI / 2), int('widthSegments', 'Width segments', 1, 64, 32), int('heightSegments', 'Height segments', 1, 64, 1)],
41
+ bentPlaneInverse: [num('radius', 'Radius', 0.2, 5, 0.01, 2), num('height', 'Height', 0.1, 3, 0.01, 1), ang('arc', 'Arc', Math.PI / 2), int('widthSegments', 'Width segments', 1, 64, 32), int('heightSegments', 'Height segments', 1, 64, 1)],
42
+ text: [str('text', 'Text', 'Hello'), num('size', 'Size', 0.2, 3, 0.01, 1), num('height', 'Depth', 0.05, 1, 0.01, 0.2)],
43
+ point: [num('size', 'Size', 0.02, 0.5, 0.01, 0.1)],
44
+ custom: [],
45
+ };
46
+ export const ALL_SHAPES = Object.keys(SHAPE_CONTROLS);
47
+ export function defaultShapeOptions(type = 'heart') {
48
+ const opts = { type };
49
+ for (const c of SHAPE_CONTROLS[type])
50
+ opts[c.key] = c.default;
51
+ return opts;
52
+ }
53
+ export function defaultShapeConfig(type = 'heart') {
54
+ return defaultShapeOptions(type);
55
+ }
56
+ export function defaultModeConfig(mode = 'solid') {
57
+ return { mode, count: 1000, symmetry: 6, spacing: 1, slices: 24, linkRadius: 0.18, angle: 18, lineWidth: 2.5 };
58
+ }
59
+ const cnt = { type: 'range', key: 'count', label: 'Count', min: 1000, max: 40000, step: 500, default: 1000, format: (v) => v.toLocaleString() };
60
+ const lw = { type: 'range', key: 'lineWidth', label: 'Line weight', min: 0.5, max: 8, step: 0.1, default: 2.5, digits: 1 };
61
+ export const MODE_CONTROLS = {
62
+ solid: [],
63
+ volume: [cnt],
64
+ surface: [cnt],
65
+ symmetric: [cnt, int('symmetry', 'Symmetry', 2, 16, 6)],
66
+ evenScatter: [cnt, num('spacing', 'Spacing', 0.5, 3, 0.05, 1)],
67
+ vertices: [],
68
+ edges3d: [int('angle', 'Edge angle', 0, 80, 18), lw],
69
+ profile2d: [lw],
70
+ wireframe: [lw],
71
+ contourSlices: [int('slices', 'Slices', 4, 60, 24), lw],
72
+ plexus: [cnt, num('linkRadius', 'Link radius', 0.05, 0.5, 0.01, 0.18), lw],
73
+ };
74
+ export const MODE_GROUPS = [
75
+ { label: 'mesh', modes: ['solid'] },
76
+ { label: 'points', modes: ['volume', 'surface', 'symmetric', 'evenScatter', 'vertices'] },
77
+ { label: 'lines', modes: ['edges3d', 'profile2d', 'wireframe', 'contourSlices', 'plexus'] },
78
+ ];
79
+ export const MODE_LABEL = {
80
+ solid: 'Solid',
81
+ volume: 'Volume',
82
+ surface: 'Surface',
83
+ symmetric: 'Symmetric',
84
+ evenScatter: 'Even',
85
+ vertices: 'Vertices',
86
+ edges3d: 'Edges',
87
+ profile2d: 'Profile',
88
+ wireframe: 'Wireframe',
89
+ contourSlices: 'Contours',
90
+ plexus: 'Plexus',
91
+ };
@@ -0,0 +1,3 @@
1
+ /** Property rows for a generative effect / particles type or an environment element. */
2
+ export declare const getPropertyConfig: (type: string) => import("./optionalProperties").OptionalProperty[];
3
+ //# sourceMappingURL=getPropertyConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPropertyConfig.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/getPropertyConfig.ts"],"names":[],"mappings":"AAWA,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,sDAK7C,CAAC"}
@@ -0,0 +1,16 @@
1
+ // Moved from client (client/app/utils/getPropertyConfig.ts).
2
+ import { EFFECT_PROPERTIES } from './effectsProperties.js';
3
+ import { PARTICLES_PROPERTIES } from './particlesProperties.js';
4
+ import { environmentOptionalProperties } from './optionalProperties.js';
5
+ const allProperties = {
6
+ ...EFFECT_PROPERTIES,
7
+ ...PARTICLES_PROPERTIES,
8
+ ...environmentOptionalProperties,
9
+ };
10
+ /** Property rows for a generative effect / particles type or an environment element. */
11
+ export const getPropertyConfig = (type) => {
12
+ if (type in allProperties) {
13
+ return allProperties[type];
14
+ }
15
+ return undefined;
16
+ };
@@ -0,0 +1,6 @@
1
+ import type { OptionalProperty } from './optionalProperties';
2
+ /** Knobs every shader-plane grid shares. */
3
+ export declare const GRID_SURFACE_PROPERTIES: OptionalProperty[];
4
+ /** Every shader-plane grid's inputs: its own knobs first, then the shared surface. */
5
+ export declare const GRID_PROPERTIES: Record<string, OptionalProperty[]>;
6
+ //# sourceMappingURL=gridProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/gridProperties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiB7D,4CAA4C;AAC5C,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAwBrD,CAAC;AAiKF,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAE9D,CAAC"}
@@ -0,0 +1,199 @@
1
+ // =============================================================================
2
+ // GRID OPTIONAL PROPERTIES
3
+ // The configurable inputs of each shader-plane grid (createdObject type 'grid'),
4
+ // keyed by config.type. Every grid shares the surface vocabulary below; each adds
5
+ // its own knobs. Rendered by ConfigControllerUi, so a grid slider looks and behaves
6
+ // like every other slider in the app.
7
+ //
8
+ // Each entry must be a real config key of that grid (viewer types/gridConfigs.ts).
9
+ // =============================================================================
10
+ const LINE_MODES = ['0', '1', '2', '3', '4'];
11
+ const LINE_MODE_LABELS = ['Static', 'Ripple', 'Flow', 'Scan', 'Pulse'];
12
+ const CELL_MODES = ['0', '1', '2', '3', '4'];
13
+ const CELL_MODE_LABELS = ['Off', 'Wave', 'Twinkle', 'Ripple', 'Alternate'];
14
+ /** Knobs every shader-plane grid shares. */
15
+ export const GRID_SURFACE_PROPERTIES = [
16
+ { name: 'cellSize', description: 'Size of one tile, in world units', type: 'number', min: 0.1, max: 40, step: 0.1 },
17
+ { name: 'lineWidth', description: 'Line thickness, in pixels', type: 'number', min: 0, max: 6, step: 0.05 },
18
+ { name: 'sectionSize', description: 'How many tiles make one accent group', type: 'number', min: 0, max: 20, step: 1 },
19
+ { name: 'sectionWidth', description: 'Accent line thickness, in pixels; 0 hides the accents', type: 'number', min: 0, max: 6, step: 0.05 },
20
+ { name: 'lineMode', description: 'How the lines animate', type: 'select', options: LINE_MODES, optionLabels: LINE_MODE_LABELS },
21
+ { name: 'cellMode', description: 'How the cells light up', type: 'select', options: CELL_MODES, optionLabels: CELL_MODE_LABELS },
22
+ { name: 'animSpeed', description: 'Animation speed', type: 'number', min: 0, max: 5, step: 0.05 },
23
+ { name: 'animScale', description: 'Spatial scale of the animation', type: 'number', min: 0, max: 3, step: 0.05 },
24
+ { name: 'animIntensity', description: 'Strength of the animation', type: 'number', min: 0, max: 3, step: 0.05 },
25
+ { name: 'fadeDistance', description: 'Radius at which the grid fades out', type: 'number', min: 1, max: 200, step: 0.5 },
26
+ { name: 'fadeStrength', description: 'How hard the edge fades', type: 'number', min: 0, max: 1, step: 0.01 },
27
+ { name: 'displace', description: 'Lift the surface along its normal (subdivides the plane)', type: 'number', min: 0, max: 5, step: 0.05 },
28
+ { name: 'size', description: 'Size of the plane, per side', type: 'number', min: 5, max: 400, step: 1 },
29
+ { name: 'lineColor', description: 'Line colour', type: 'color' },
30
+ { name: 'sectionColor', description: 'Accent colour', type: 'color' },
31
+ { name: 'cellColor', description: 'Cell fill colour', type: 'color' },
32
+ { name: 'glowColor', description: 'Glow colour of the animated highlights', type: 'color' },
33
+ { name: 'bgColor', description: 'Background colour', type: 'color' },
34
+ { name: 'bgOpacity', description: 'Background opacity; 0 leaves only the lines', type: 'number', min: 0, max: 1, step: 0.01 },
35
+ { name: 'flat', description: 'Lie flat (on) or stand upright (off)', type: 'boolean' },
36
+ { name: 'followMouse', description: 'Ripples and focus follow the pointer', type: 'boolean' },
37
+ { name: 'reveal', description: 'How much of the grid is built (0 gone, 1 complete)', type: 'number', min: 0, max: 1, step: 0.01 },
38
+ { name: 'revealDuration', description: 'Seconds to build or dissolve; 0 applies instantly', type: 'number', min: 0, max: 10, step: 0.1 },
39
+ ];
40
+ const own = {
41
+ advancedGrid: [],
42
+ quasiGrid: [
43
+ { name: 'symmetry', description: 'Line families, 3..9. 5 is Penrose; 4 and 6 come out periodic', type: 'number', min: 3, max: 9, step: 1 },
44
+ { name: 'phase', description: 'Slides the pattern through itself', type: 'number', min: 0, max: 1, step: 0.01 },
45
+ ],
46
+ hexGrid: [
47
+ { name: 'plateau', description: 'With displacement, each hex lifts as a flat plate', type: 'boolean' },
48
+ ],
49
+ circuitGrid: [
50
+ { name: 'powered', description: 'Fraction of tiles carrying a powered trace', type: 'number', min: 0, max: 1, step: 0.01 },
51
+ { name: 'chipChance', description: 'Fraction of tiles replaced by a chip; 0 disables chips', type: 'number', min: 0, max: 1, step: 0.01 },
52
+ { name: 'padSize', description: 'Solder-pad size; 0 disables pads', type: 'number', min: 0, max: 2, step: 0.01 },
53
+ ],
54
+ voronoiGrid: [
55
+ { name: 'jitter', description: '0 regular lattice, 1 fully scattered seeds', type: 'number', min: 0, max: 1, step: 0.01 },
56
+ { name: 'drift', description: 'How far the seeds wander; 0 freezes the cells', type: 'number', min: 0, max: 2, step: 0.01 },
57
+ ],
58
+ radarGrid: [
59
+ { name: 'spokes', description: 'Radial spokes; 0 disables them', type: 'number', min: 0, max: 72, step: 1 },
60
+ { name: 'sweepWidth', description: 'Length of the sweep trail, as a fraction of a turn', type: 'number', min: 0, max: 1, step: 0.01 },
61
+ { name: 'blipDensity', description: 'Chance a sector holds a blip', type: 'number', min: 0, max: 1, step: 0.01 },
62
+ ],
63
+ moireGrid: [
64
+ { name: 'shape', description: 'Lattice shape of both layers', type: 'select', options: ['square', 'hex', 'rings'], optionLabels: ['Square', 'Hex', 'Rings'] },
65
+ { name: 'layerAngle', description: 'Angle between the layers, in radians; small values beat slowly', type: 'number', min: 0, max: 0.5, step: 0.001 },
66
+ { name: 'layerScale', description: 'Spacing ratio of the second layer; near 1 gives long beats', type: 'number', min: 0.8, max: 1.25, step: 0.001 },
67
+ { name: 'spin', description: 'Counter-rotation speed; 0 freezes the pattern', type: 'number', min: -5, max: 5, step: 0.05 },
68
+ ],
69
+ fractalGrid: [
70
+ { name: 'depth', description: 'Maximum subdivision levels', type: 'number', min: 1, max: 6, step: 1 },
71
+ { name: 'splitRadius', description: 'Radius around the focus inside which cells subdivide', type: 'number', min: 0, max: 10, step: 0.05 },
72
+ { name: 'splitJitter', description: 'Wobble of the split edge', type: 'number', min: 0, max: 1, step: 0.01 },
73
+ ],
74
+ contourGrid: [
75
+ { name: 'levels', description: 'Contour steps across the height range', type: 'number', min: 2, max: 64, step: 1 },
76
+ { name: 'roughness', description: 'Terrain roughness: 0.35 rolling, 0.65 craggy', type: 'number', min: 0, max: 1, step: 0.01 },
77
+ { name: 'warp', description: 'Bends the contours into ridges and valleys', type: 'number', min: 0, max: 2, step: 0.01 },
78
+ ],
79
+ flowNetGrid: [
80
+ { name: 'obstacleRadius', description: 'Cylinder radius, in cells', type: 'number', min: 0, max: 10, step: 0.05 },
81
+ { name: 'circulation', description: 'Circulation around the cylinder (lift)', type: 'number', min: -6, max: 6, step: 1 },
82
+ { name: 'flowAngle', description: 'Free-stream direction, in radians', type: 'number', min: -3.1416, max: 3.1416, step: 0.01 },
83
+ ],
84
+ chladniGrid: [
85
+ { name: 'modeN', description: 'First mode number of the standing wave', type: 'number', min: 1, max: 12, step: 1 },
86
+ { name: 'modeM', description: 'Second mode number of the standing wave', type: 'number', min: 1, max: 12, step: 1 },
87
+ { name: 'morph', description: 'Drift to the neighbouring resonance; 0 holds the pattern', type: 'number', min: 0, max: 2, step: 0.01 },
88
+ { name: 'grain', description: 'Amount of sand on the plate', type: 'number', min: 0, max: 1, step: 0.01 },
89
+ ],
90
+ hyperbolicGrid: [
91
+ { name: 'sides', description: 'Sides of each polygon (p)', type: 'number', min: 3, max: 12, step: 1 },
92
+ { name: 'valence', description: 'Polygons around each vertex (q)', type: 'number', min: 3, max: 12, step: 1 },
93
+ { name: 'drift', description: 'How far the tiling glides through itself', type: 'number', min: 0, max: 1, step: 0.01 },
94
+ ],
95
+ gravWaveGrid: [
96
+ { name: 'strain', description: 'Wave amplitude; 0 leaves only the static wells', type: 'number', min: 0, max: 3, step: 0.01 },
97
+ { name: 'chirpTime', description: 'Seconds per inspiral-merger-ringdown cycle', type: 'number', min: 4, max: 60, step: 0.5 },
98
+ { name: 'waveSpeed', description: 'Wave speed, in cells per second', type: 'number', min: 0.5, max: 20, step: 0.1 },
99
+ { name: 'massRatio', description: 'Mass ratio m2/m1', type: 'number', min: 0.1, max: 1, step: 0.01 },
100
+ ],
101
+ girihGrid: [
102
+ { name: 'tiling', description: 'Base tiling', type: 'select', options: ['0', '1', '2'], optionLabels: ['4.8.8', 'Hexagons', '3.6.3.6'] },
103
+ { name: 'contactAngle', description: 'Hankin contact angle, degrees; 67.5 is the classic 8-point star', type: 'number', min: 20, max: 85, step: 0.5 },
104
+ { name: 'strapWidth', description: 'Width of the strapwork band, in cells', type: 'number', min: 0, max: 0.3, step: 0.005 },
105
+ { name: 'angleDrift', description: 'Degrees the contact angle drifts, morphing the pattern', type: 'number', min: 0, max: 30, step: 0.5 },
106
+ ],
107
+ wallpaperGrid: [
108
+ { name: 'group', description: 'Wallpaper group (-1 cycles through all 17)', type: 'number', min: -1, max: 16, step: 1 },
109
+ { name: 'cycleTime', description: 'Seconds per group while cycling', type: 'number', min: 1, max: 60, step: 0.5 },
110
+ { name: 'motif', description: 'Motif complexity', type: 'number', min: 0, max: 1, step: 0.01 },
111
+ { name: 'levels', description: 'Number of contour levels', type: 'number', min: 2, max: 32, step: 1 },
112
+ ],
113
+ reactionDiffusionGrid: [
114
+ { name: 'feed', description: 'Gray-Scott feed rate F', type: 'number', min: 0.01, max: 0.08, step: 0.0005 },
115
+ { name: 'kill', description: 'Gray-Scott kill rate k', type: 'number', min: 0.04, max: 0.075, step: 0.0005 },
116
+ { name: 'variation', description: 'Spread of F and k across the tile, so morphologies coexist', type: 'number', min: 0, max: 1, step: 0.01 },
117
+ { name: 'tileCells', description: 'Cells covered by one simulation tile', type: 'number', min: 1, max: 20, step: 1 },
118
+ ],
119
+ };
120
+ /**
121
+ * Grids that always lie flat (the parent object's transform orients them) and
122
+ * leave pointer behaviour to the Pointer tab: their surface rows have no `flat`
123
+ * and no `followMouse`. `section` re-describes `sectionSize` where the grid
124
+ * gives it its own meaning (spiral count, bloom rings, inversion levels).
125
+ */
126
+ const SURFACE_PARENT_ORIENTED = GRID_SURFACE_PROPERTIES.filter((p) => p.name !== 'flat' && p.name !== 'followMouse');
127
+ const surfaceFor = (section) => section ? SURFACE_PARENT_ORIENTED.map((p) => (p.name === 'sectionSize' ? { ...p, ...section } : p)) : SURFACE_PARENT_ORIENTED;
128
+ const parentOriented = {
129
+ lensingGrid: {
130
+ own: [
131
+ { name: 'mass', description: "Einstein radius of the lens, in cells; 0 leaves the lattice undistorted", type: 'number', min: 0, max: 12, step: 0.1 },
132
+ { name: 'orbit', description: "Radius the lens circles the centre on, in cells; 0 holds it at the centre", type: 'number', min: 0, max: 15, step: 0.1 },
133
+ { name: 'ringGlow', description: "Brightness of the Einstein ring and its halo", type: 'number', min: 0, max: 3, step: 0.05 },
134
+ ],
135
+ },
136
+ conformalGrid: {
137
+ own: [
138
+ { name: 'flowMap', description: "The flow: 0 source + sink, 1 spiral vortex, 2 spinning cylinder, 3 corner", type: 'select', options: ['0', '1', '2', '3'], optionLabels: ['Source + sink', 'Spiral vortex', 'Spinning cylinder', 'Corner'] },
139
+ { name: 'poleSpread', description: "Distance from the centre to the poles, or the cylinder radius, in world units", type: 'number', min: 1, max: 25, step: 0.1 },
140
+ { name: 'spokes', description: "Lattice lines per turn round a pole (whole number, so the log seam closes)", type: 'number', min: 4, max: 64, step: 1 },
141
+ { name: 'arms', description: "Spiral arms of the vortex flow; 0 gives a plain polar web", type: 'number', min: -8, max: 8, step: 1 },
142
+ { name: 'circulation', description: "Circulation round the cylinder (lift); at ±2 both stagnation points meet", type: 'number', min: -3, max: 3, step: 0.01 },
143
+ { name: 'drift', description: "How fast the lattice streams along the flow; negative reverses it", type: 'number', min: -1, max: 1, step: 0.01 },
144
+ { name: 'fill', description: "Strength of the speed-coloured stream-tube fill", type: 'number', min: 0, max: 1, step: 0.01 },
145
+ { name: 'dye', description: "Brightness of the dashes carried along the streamlines", type: 'number', min: 0, max: 2, step: 0.01 },
146
+ ],
147
+ section: { description: "Streamlines per accent streamline" },
148
+ },
149
+ truchetGrid: {
150
+ own: [
151
+ { name: 'flip', description: "Chance a tile re-deals its orientation each epoch; 0 freezes the paths", type: 'number', min: 0, max: 1, step: 0.01 },
152
+ { name: 'bias', description: "Balance of the two tile orientations: 0.5 is a maze, the ends are stripes", type: 'number', min: 0, max: 1, step: 0.01 },
153
+ { name: 'pulse', description: "Brightness of the comets travelling the loops", type: 'number', min: 0, max: 2, step: 0.01 },
154
+ { name: 'regionFill', description: "Fill of one colour of the two-colouring", type: 'number', min: 0, max: 1, step: 0.01 },
155
+ ],
156
+ section: { description: "Tiles per tile of the coarser Truchet accent layer" },
157
+ },
158
+ phyllotaxisGrid: {
159
+ own: [
160
+ { name: 'divergence', description: "Angle between successive seeds, degrees; 137.508 is the golden angle", type: 'number', min: 130, max: 145, step: 0.001 },
161
+ { name: 'bloomRate', description: "Speed of the bloom rings travelling rim to centre; negative reverses them", type: 'number', min: -0.3, max: 0.3, step: 0.001 },
162
+ { name: 'relief', description: "Depth of the lit dome on each floret", type: 'number', min: 0, max: 1, step: 0.01 },
163
+ { name: 'shape', description: "The mark each floret carries (0 draws only the domes)", type: 'select', options: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21'], optionLabels: ['Domes only', 'Seed', 'Ring', 'Crescent', 'Sparkle', 'Reuleaux', 'Spiral', 'Target', 'Pebble', 'Dot', 'Dots (sunflower)', 'Square', 'Star', 'Hexagon', 'Triangle', 'Cross', 'Heart', 'Chevron', 'Infinity', 'Gear', 'Atom', 'Sunburst'] },
164
+ { name: 'shapeSize', description: "Size of the mark relative to its floret", type: 'number', min: 0.3, max: 1.2, step: 0.01 },
165
+ { name: 'shapeGlow', description: "Brightness of the marks", type: 'number', min: 0, max: 2, step: 0.01 },
166
+ ],
167
+ section: { description: "Bloom rings across the head at once", min: 1, max: 6, step: 1 },
168
+ },
169
+ parastichyGrid: {
170
+ own: [
171
+ { name: 'divergence', description: "Angle between successive seeds, degrees; 137.508 is the golden angle", type: 'number', min: 135, max: 140, step: 0.001 },
172
+ { name: 'third', description: "Weight of the third spiral family that splits cells into triangles", type: 'number', min: 0, max: 1, step: 0.01 },
173
+ { name: 'sap', description: "Brightness of the light running inward along the spirals", type: 'number', min: 0, max: 2, step: 0.01 },
174
+ { name: 'fill', description: "Strength of the faceted cell fill", type: 'number', min: 0, max: 1, step: 0.01 },
175
+ ],
176
+ section: { description: "Spirals in the main family (a Fibonacci number: 13, 21, 34, 55)", min: 3, max: 55, step: 1 },
177
+ },
178
+ apollonianGrid: {
179
+ own: [
180
+ { name: 'depth', description: "Inversion levels: how deep the packing nests", type: 'number', min: 1, max: 24, step: 1 },
181
+ { name: 'morph', description: "Strength of the Möbius flow that re-balances the packing; 0 holds it symmetric", type: 'number', min: 0, max: 0.9, step: 0.01 },
182
+ ],
183
+ section: { description: "Circles shallower than this many levels get the accent rim", min: 0, max: 12, step: 1 },
184
+ },
185
+ hilbertGrid: {
186
+ own: [
187
+ { name: 'order', description: "Curve order: the loop covers 2^order cells per side", type: 'number', min: 2, max: 8, step: 1 },
188
+ { name: 'signals', description: "Signals circulating round the loop", type: 'number', min: 1, max: 32, step: 1 },
189
+ { name: 'trail', description: "Length of each signal trail, in cells", type: 'number', min: 1, max: 128, step: 0.5 },
190
+ { name: 'signalSpeed', description: "Signal speed, in cells per second", type: 'number', min: 0, max: 40, step: 0.1 },
191
+ ],
192
+ section: { description: "Cells per cell of the coarser accent curve (a power of two)", min: 0, max: 32, step: 1 },
193
+ },
194
+ };
195
+ /** Every shader-plane grid's inputs: its own knobs first, then the shared surface. */
196
+ export const GRID_PROPERTIES = Object.fromEntries(Object.entries(own).map(([type, props]) => [type, [...props, ...GRID_SURFACE_PROPERTIES]]));
197
+ for (const [type, { own: props, section }] of Object.entries(parentOriented)) {
198
+ GRID_PROPERTIES[type] = [...props, ...surfaceFor(section)];
199
+ }
@@ -0,0 +1,8 @@
1
+ export * from './optionalProperties';
2
+ export * from './lightProperties';
3
+ export * from './particlesProperties';
4
+ export * from './effectsProperties';
5
+ export * from './gridProperties';
6
+ export * from './materialBounds';
7
+ export * from './geometryProperties';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './optionalProperties.js';
2
+ export * from './lightProperties.js';
3
+ export * from './particlesProperties.js';
4
+ export * from './effectsProperties.js';
5
+ export * from './gridProperties.js';
6
+ export * from './materialBounds.js';
7
+ export * from './geometryProperties.js';
@@ -0,0 +1,14 @@
1
+ import type { LightType } from '../../types/lights';
2
+ import type { OptionalProperty } from './optionalProperties';
3
+ export type LightTab = 'light' | 'bulb' | 'beam' | 'array' | 'tube' | 'flame' | 'candle';
4
+ export type LightProperty = OptionalProperty & {
5
+ tab?: LightTab;
6
+ };
7
+ export declare const LIGHT_PROPERTIES: Record<LightType, LightProperty[]>;
8
+ /** Re-export under the name the controller already uses; the table itself lives in core. */
9
+ export declare const LIGHT_DEFAULTS: Record<LightType, Record<string, unknown>>;
10
+ /** Knobs hidden by another knob's value (colour vs temperature, tint only when tinted). */
11
+ export declare function isLightPropertyHidden(name: string, values: Record<string, unknown>): boolean;
12
+ export declare const SHADOW_MAP_SIZES: string[];
13
+ export declare const SHADOW_PROPERTIES: Record<LightType, OptionalProperty[]>;
14
+ //# sourceMappingURL=lightProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/lightProperties.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACzF,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAAE,GAAG,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAQlE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,CA4I/D,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAkB,CAAC;AAEzF,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CA2C5F;AAMD,eAAO,MAAM,gBAAgB,UAAyC,CAAC;AAmBvE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAkBnE,CAAC"}