@3driseai/3drise-core 1.0.22 → 1.0.23

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 (55) hide show
  1. package/dist/catalog/catalogInfo.js +4 -4
  2. package/dist/catalog/objectCatalog.d.ts.map +1 -1
  3. package/dist/catalog/objectCatalog.js +2 -7
  4. package/dist/data/defaults.d.ts +0 -12
  5. package/dist/data/defaults.d.ts.map +1 -1
  6. package/dist/data/defaults.js +0 -12
  7. package/dist/data/textDefaults.d.ts +1 -1
  8. package/dist/data/textDefaults.d.ts.map +1 -1
  9. package/dist/data/textDefaults.js +34 -14
  10. package/dist/properties/registry.d.ts +10 -5
  11. package/dist/properties/registry.d.ts.map +1 -1
  12. package/dist/properties/registry.js +49 -14
  13. package/dist/properties/tables/geometryProperties.d.ts +7 -0
  14. package/dist/properties/tables/geometryProperties.d.ts.map +1 -1
  15. package/dist/properties/tables/geometryProperties.js +9 -1
  16. package/dist/properties/tables/optionalProperties.d.ts.map +1 -1
  17. package/dist/properties/tables/optionalProperties.js +1 -0
  18. package/dist/properties/tables/textProperties.d.ts.map +1 -1
  19. package/dist/properties/tables/textProperties.js +38 -12
  20. package/dist/properties/types.d.ts +1 -1
  21. package/dist/properties/types.d.ts.map +1 -1
  22. package/dist/services/SceneActions.d.ts +9 -0
  23. package/dist/services/SceneActions.d.ts.map +1 -1
  24. package/dist/services/SceneActions.js +30 -0
  25. package/dist/three/LetterV.d.ts +7 -1
  26. package/dist/three/LetterV.d.ts.map +1 -1
  27. package/dist/three/Text2DV.d.ts +7 -1
  28. package/dist/three/Text2DV.d.ts.map +1 -1
  29. package/dist/three/Text3DV.d.ts +7 -1
  30. package/dist/three/Text3DV.d.ts.map +1 -1
  31. package/dist/types/actions.d.ts +0 -1
  32. package/dist/types/actions.d.ts.map +1 -1
  33. package/dist/types/index.d.ts +0 -1
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/objectSettings.d.ts +2 -0
  36. package/dist/types/objectSettings.d.ts.map +1 -1
  37. package/dist/types/scene3d.d.ts +4 -0
  38. package/dist/types/scene3d.d.ts.map +1 -1
  39. package/dist/types/textObjects.d.ts +22 -3
  40. package/dist/types/textObjects.d.ts.map +1 -1
  41. package/dist/types/textObjects.js +3 -3
  42. package/dist/utils/dataUtils.d.ts.map +1 -1
  43. package/dist/utils/dataUtils.js +0 -6
  44. package/dist/utils/index.d.ts +1 -0
  45. package/dist/utils/index.d.ts.map +1 -1
  46. package/dist/utils/index.js +1 -0
  47. package/dist/utils/objectEffects.d.ts +2 -2
  48. package/dist/utils/objectEffects.d.ts.map +1 -1
  49. package/dist/utils/objectEffects.js +3 -4
  50. package/dist/utils/objectMigration.d.ts.map +1 -1
  51. package/dist/utils/objectMigration.js +2 -1
  52. package/dist/utils/textMigration.d.ts +3 -0
  53. package/dist/utils/textMigration.d.ts.map +1 -0
  54. package/dist/utils/textMigration.js +56 -0
  55. package/package.json +1 -1
@@ -5,7 +5,7 @@
5
5
  // Per type and per variant: the words the Add menu and the AI choose by (description,
6
6
  // tags), the display name, and the transform / material a variant starts with.
7
7
  // Configs live in the registry's DEFAULT_* tables (effects, particles, grids, lights,
8
- // environment, space); only mesh, gallery and text variants carry their config here,
8
+ // environment, space); only mesh and gallery variants carry their config here,
9
9
  // because those families have no defaults table.
10
10
  //
11
11
  // `key` is permanent (it is what scenes store in config.type / shapeType / layout).
@@ -25,7 +25,7 @@ export const CATALOG_TYPES = [
25
25
  { key: "particles", legacyId: "f7b5bfba-6a68-11f1-8573-00163e32d101", description: "A particle system arranged in a configurable shape. Use for swarms, sparks, dust, dotted shapes.", icon: "sparkles", order: 8, enabled: true },
26
26
  { key: "path", legacyId: "f7d663ca-6a68-11f1-8573-00163e32d101", description: "A 3D spline or path that other objects can follow.", icon: "draw-polygon", order: 9, enabled: false },
27
27
  { key: "space", legacyId: "f7f6f91b-6a68-11f1-8573-00163e32d101", description: "Elements from space", icon: "planet-ringed", order: 10, enabled: true },
28
- { key: "text", legacyId: "e841a567-7fb1-49ac-9d90-eb26a414b07f", description: "2d text, 3d text and more", icon: "font", order: 11, enabled: true },
28
+ { key: "text", legacyId: "e841a567-7fb1-49ac-9d90-eb26a414b07f", description: "Flat text: plain labels and animated looks (handwriting, neon, ink, metal…)", icon: "font", order: 11, enabled: true },
29
29
  { key: "land", description: "Placeable patches of terrain - mountains, hills, dunes, canyon - sized and moved like any object, as many as you like. For the scene's one endless ground use the environment terrain.", icon: "mountain", order: 12, enabled: true, defaultVariant: "hills" },
30
30
  ];
31
31
  export const CATALOG_VARIANTS = {
@@ -57,6 +57,7 @@ export const CATALOG_VARIANTS = {
57
57
  { key: "superformula", legacyId: "cd64b779-69da-4afa-98d5-683b48511568", name: "super formula", description: "Super formula mesh", tags: [], config: { type: "superformula", twist1: 0.3, twist2: 0.3, samples: 256, stretchX: 1, stretchY: 1, symmetry: 6, roundness: 0.3 } },
58
58
  { key: "tetrahedron", legacyId: "636570a9-6a6f-11f1-8573-00163e32d101", name: "tetrahedron", description: "4-sided polyhedron (triangular pyramid). Use for d4 dice, simple pyramids, sharp spikes.", tags: ["tetrahedron", "d4", "4-sided", "pyramid", "spike", "triangular-pyramid"], config: { type: "tetrahedron", detail: 0, radius: 0.5 } },
59
59
  { key: "torus", legacyId: "62a28904-6a6f-11f1-8573-00163e32d101", name: "torus", description: "Donut shape — a ring with thickness. Use for donuts, rings, tubes-as-loops.", tags: ["torus", "donut", "doughnut", "ring-thick", "loop"], config: { tube: 0.2, type: "torus", radius: 0.5, radialSegments: 16, tubularSegments: 100 } },
60
+ { key: "text", legacyId: "992fe6fa-0d34-4d07-a600-0acee0c881fa", name: "3d text", description: "A word or line extruded into a solid with bevelled edges, from the same fonts as the text looks; takes any material. Use for logos, signs, titles and chunky labels.", tags: ["text", "3d-text", "extruded", "letters", "logo", "sign", "title"], config: { type: "text", text: "Hello", font: "inter", size: 1, height: 0.2, letterSpacing: 0, bevelEnabled: true, bevelThickness: 0.02, bevelSize: 0.015, bevelSegments: 3 } },
60
61
  ],
61
62
  grid: [
62
63
  { key: "advancedGrid", legacyId: "71h8sjh8-6a6f-gu85-8573-00163e32d101", name: "advanced grid", description: "A Grid with shader material , animation and noise effects.", tags: ["grid"] },
@@ -186,8 +187,7 @@ export const CATALOG_VARIANTS = {
186
187
  { key: "stars", legacyId: "695c418b-6a6f-11f1-8573-00163e32d101", name: "stars", description: "Stars scattered in the sky", tags: ["stars", "sky", "celestial", "night", "background"], transform: { scale: [500, 500, 500] }, material: { materialType: "particles" } },
187
188
  ],
188
189
  text: [
189
- { key: "2dText", legacyId: "6e49e604-3007-4505-bd87-5e31b1393d94", name: "2d text", description: "2d 'bitmap' text", tags: ["text"], config: { text: "Hello", renderMode: "bitmap" } },
190
- { key: "3dText", legacyId: "992fe6fa-0d34-4d07-a600-0acee0c881fa", name: "3d text", description: "3d text", tags: ["text"], config: { text: "Hello", renderMode: "text3d" } },
190
+ { key: "plain", legacyId: "6e49e604-3007-4505-bd87-5e31b1393d94", name: "Plain", description: "Flat solid text from the font outlines with a weight axis, an optional outline and soft edges, anti-aliased from a signed distance field. Use for labels, captions, prices, menus and titles.", tags: ["plain", "label", "caption", "solid", "flat", "sans", "title", "text"] },
191
191
  { key: "handwriting", name: "Handwriting", description: "A pen writes the text in single strokes, slowing in tight curves where the ink pools and drying from wet sheen to rest colour; a faint sheen drifts over the dry ink. Use for signatures, titles and invitations.", tags: ["handwriting", "ink", "pen", "stroke", "script", "signature", "text"] },
192
192
  { key: "neonTube", name: "Neon Tube", description: "Letter outlines as glass neon tubing: a gas discharge ignites each contour, stuttering before it settles into a steady hum with slow breathing and the odd micro-dip. Use for signs, nightlife and retro titles.", tags: ["neon", "tube", "glow", "sign", "outline", "retro", "text"] },
193
193
  { key: "fourierSketch", name: "Fourier Sketch", description: "Each letter is traced by a chain of rotating circles whose radii are its Fourier coefficients; more terms sharpen the form, and glints keep circling the finished contours. Use for science, math and generative titles.", tags: ["fourier", "epicycle", "circles", "sketch", "trace", "maths", "text"] },
@@ -1 +1 @@
1
- {"version":3,"file":"objectCatalog.d.ts","sourceRoot":"","sources":["../../src/catalog/objectCatalog.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACjI;AAuBD,yEAAyE;AACzE,wBAAgB,aAAa,IAAI;IAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAuDhG"}
1
+ {"version":3,"file":"objectCatalog.d.ts","sourceRoot":"","sources":["../../src/catalog/objectCatalog.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACjI;AAsBD,yEAAyE;AACzE,wBAAgB,aAAa,IAAI;IAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAsDhG"}
@@ -8,8 +8,7 @@
8
8
  //
9
9
  // registry families effect, particles, grid, light, environment, space, text
10
10
  // → one variant per key of the defaults table (config = that default)
11
- // curated families mesh, gallery → the entries in catalogInfo (configs there); text is both: its curated 2d / 3d
12
- // entries (they carry a config) stay, then one variant per animated look in the registry
11
+ // curated families mesh, gallery → the entries in catalogInfo (configs there)
13
12
  // no variants group, model, path
14
13
  //
15
14
  // Output keeps the shapes the client already uses (ObjectTypeItem /
@@ -32,7 +31,7 @@ const REGISTRY_FAMILIES = {
32
31
  space: { defaults: DEFAULT_SPACE_OBJECTS, labels: SPACE_OBJECT_LABELS },
33
32
  environment: { defaults: DEFAULT_ENVIRONMENT_OBJECTS, labels: ENVIRONMENT_OBJECT_LABELS },
34
33
  land: { defaults: DEFAULT_LAND_OBJECTS, labels: LAND_OBJECT_LABELS },
35
- text: { defaults: DEFAULT_TEXT_OBJECTS, labels: TEXT_OBJECT_LABELS, keepCurated: true },
34
+ text: { defaults: DEFAULT_TEXT_OBJECTS, labels: TEXT_OBJECT_LABELS },
36
35
  };
37
36
  /** 'paw print' → 'Paw Print', 'tunnelPyramid' → 'Tunnel Pyramid'. */
38
37
  const titleCase = (s) => s.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/(^|\s)\S/g, c => c.toUpperCase());
@@ -78,10 +77,6 @@ export function objectCatalog() {
78
77
  const infoBy = new Map(infos.map(i => [i.key, i]));
79
78
  const family = REGISTRY_FAMILIES[type];
80
79
  if (family) {
81
- if (family.keepCurated)
82
- for (const info of infos)
83
- if (info.config && !(info.key in family.defaults))
84
- push(type, info.key, titleCase(info.name), info, info.config);
85
80
  // Catalog order first (what was curated), then any key only the registry has.
86
81
  const keys = [...infos.map(i => i.key).filter(k => k in family.defaults),
87
82
  ...Object.keys(family.defaults).filter(k => !infoBy.has(k))];
@@ -10,18 +10,6 @@ export declare const DEFAULTS_CONFIGS: {
10
10
  turbulence: number;
11
11
  splash: boolean;
12
12
  };
13
- text: {
14
- text: string;
15
- font: string;
16
- renderMode: string;
17
- fontSize: number;
18
- maxWidth: number;
19
- lineHeight: number;
20
- letterSpacing: number;
21
- textAlign: string;
22
- anchorX: string;
23
- anchorY: string;
24
- };
25
13
  grid: {
26
14
  cellSize: number;
27
15
  cellThickness: number;
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/data/defaults.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E5B,CAAC;AACF,eAAO,MAAM,kBAAkB,EAAE;IACrB,IAAI,EAAE;QACF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,KAAK,EAAE;QACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;IACF,KAAK,EAAE;QACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,aAAa,EAAE;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,MAAM,EAAE;QACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;CAOb,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE;IACpB,KAAK,EAAE;QACH,YAAY,EAAE,OAAO,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,KAAK,EAAE;QACH,YAAY,EAAE,WAAW,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE;QACJ,YAAY,EAAE,QAAQ,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;CAeb,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/data/defaults.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D5B,CAAC;AACF,eAAO,MAAM,kBAAkB,EAAE;IACrB,IAAI,EAAE;QACF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,KAAK,EAAE;QACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;IACF,KAAK,EAAE;QACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,aAAa,EAAE;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,MAAM,EAAE;QACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;CAOb,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE;IACpB,KAAK,EAAE;QACH,YAAY,EAAE,OAAO,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,KAAK,EAAE;QACH,YAAY,EAAE,WAAW,CAAC;KAC7B,CAAC;IACF,MAAM,EAAE;QACJ,YAAY,EAAE,QAAQ,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;CAeb,CAAC"}
@@ -11,18 +11,6 @@ export const DEFAULTS_CONFIGS = {
11
11
  turbulence: 0,
12
12
  splash: false,
13
13
  },
14
- text: {
15
- text: 'New Text',
16
- font: 'Arial',
17
- renderMode: 'bitmap',
18
- fontSize: 1,
19
- maxWidth: 10,
20
- lineHeight: 1,
21
- letterSpacing: 0,
22
- textAlign: 'center',
23
- anchorX: 'center',
24
- anchorY: 'middle',
25
- },
26
14
  grid: {
27
15
  cellSize: 1,
28
16
  cellThickness: 1,
@@ -11,6 +11,6 @@ export declare const TEXT_FONTS: ReadonlyArray<{
11
11
  label: string;
12
12
  family: string;
13
13
  }>;
14
- /** True when the config is one of the text looks (type 'text', config.type set; the legacy text has no config.type). */
14
+ /** True when the config is one of the text looks (object type 'text', config.type set). */
15
15
  export declare function isTextObjectConfig(config: unknown): config is TextObjectConfig;
16
16
  //# sourceMappingURL=textDefaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textDefaults.d.ts","sourceRoot":"","sources":["../../src/data/textDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAYjE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAazE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAa7D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,cAAc,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAyI9F,CAAC;AAEF,kHAAkH;AAClH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiBnF,CAAC;AAEF,wHAAwH;AACxH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,gBAAgB,CAG9E"}
1
+ {"version":3,"file":"textDefaults.d.ts","sourceRoot":"","sources":["../../src/data/textDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAYjE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAczE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAc7D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,cAAc,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAkJ9F,CAAC;AAEF,kHAAkH;AAClH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0BnF,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,gBAAgB,CAG9E"}
@@ -8,18 +8,19 @@
8
8
  // the playback timings are never listed.
9
9
  //
10
10
  export const DEFAULT_TEXT_OBJECTS = {
11
- handwriting: { type: 'handwriting', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'fade', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#efe6d2', color2: '#ffd9a0', weight: 1, wetTime: 1.1, sheen: 0.35, opacity: 1, penGlow: 1 },
12
- neonTube: { type: 'neonTube', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'trace', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#ff2f9a', color2: '#ffd2ec', tube: 0.04, core: 0.22, glow: 1, flicker: 1, offLevel: 0.07, opacity: 1 },
13
- fourierSketch: { type: 'fourierSketch', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'epicycle', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'fade', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#5fd0ff', color2: '#fff1c2', line: 0.03, terms: 96, circles: 1, trail: 0.9, bridges: 0.14, glint: 1, opacity: 1 },
14
- frostGrowth: { type: 'frostGrowth', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'grow', drawDuration: 6, drawEase: 'linear', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'sublimate', eraseDuration: 3, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, reach: 0.15, branching: 1, grains: 5, sparkle: 0.6, thickness: 1, seams: 0.75, haze: 0.5, seed: 7, color: '#d6edff', color2: '#4a90d4', opacity: 1 },
15
- plasmaDischarge: { type: 'plasmaDischarge', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'strike', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, branches: 0.72, reach: 0.55, branchiness: 0.6, pulse: 0.8, glow: 1, spectrum: 0.5, core: 0.0065, color: '#6c3dff', color2: '#a9ceff', opacity: 1, seed: 7 },
16
- burnAway: { type: 'burnAway', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'trace', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'burn', eraseDuration: 6, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2.5, hiddenTime: 0.5, color: '#efe2c4', color2: '#ff7a1c', char: 0.6, ashLace: 0.7, curl: 0.6, spread: 1, ember: 1, roughness: 0.6, singe: 0.55, opacity: 1, seed: 7 },
17
- lightPainting: { type: 'lightPainting', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'pen', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, exposure: 1, temperature: 3000, sparks: 110, spread: 0.7, bloom: 1, width: 0.012, strobe: 0, halation: 0.55, tremor: 0.5, color: '#ffe0b0', color2: '#ffffff', opacity: 1 },
18
- constellation: { type: 'constellation', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, stars: 5.5, brightness: 0, twinkle: 1, lines: 1, temperature: 0, seed: 7, color: '#7f9bd0', color2: '#dce8ff', opacity: 1 },
19
- inkBleed: { type: 'inkBleed', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'burn', eraseDuration: 6, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2.5, hiddenTime: 0.5, color: '#1b2d6a', color2: '#b0703c', bleed: 0.042, dryTime: 2.4, fibre: 0.7, pooling: 0.7, weight: 0.7, paper: 1, oxidation: 3.5, burn: 0.6, char: 0.6, spread: 1, opacity: 1 },
20
- liquidMetal: { type: 'liquidMetal', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'flow', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'melt', eraseDuration: 4.5, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, thickness: 0.06, roughness: 1, reflectivity: 0.8, environment: 1.15, tint: 0.7, rippleSpeed: 1, oxide: 0.4, spikes: 0, melt: 0.5, drips: 0.6, color: '#cdd5df', color2: '#f4f7ff', opacity: 1 },
21
- embroidery: { type: 'embroidery', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'stitch', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#c92f48', color2: '#e8c47a', density: 44, slant: 66, thickness: 1.35, sheen: 1, relief: 1, outline: 0.65, fabric: 0.4, pucker: 0.6, style: 'auto', opacity: 1 },
22
- chalkboard: { type: 'chalkboard', enabled: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'smudge', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, pressure: 0.55, chatter: 0.6, grain: 0.55, weight: 1, dust: 0.6, ghost: 0.5, swing: 0.6, board: 0, opacity: 1, color: '#ebe6d8', color2: '#c4dcf2' },
11
+ handwriting: { type: 'handwriting', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'fade', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#efe6d2', color2: '#ffd9a0', weight: 1, wetTime: 1.1, sheen: 0.35, opacity: 1, penGlow: 1 },
12
+ neonTube: { type: 'neonTube', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'trace', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#ff2f9a', color2: '#ffd2ec', tube: 0.04, core: 0.22, glow: 1, flicker: 1, offLevel: 0.07, opacity: 1 },
13
+ fourierSketch: { type: 'fourierSketch', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'epicycle', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'fade', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#5fd0ff', color2: '#fff1c2', line: 0.03, terms: 96, circles: 1, trail: 0.9, bridges: 0.14, glint: 1, opacity: 1 },
14
+ frostGrowth: { type: 'frostGrowth', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'grow', drawDuration: 6, drawEase: 'linear', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'sublimate', eraseDuration: 3, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, reach: 0.15, branching: 1, grains: 5, sparkle: 0.6, thickness: 1, seams: 0.75, haze: 0.5, seed: 7, color: '#d6edff', color2: '#4a90d4', opacity: 1 },
15
+ plasmaDischarge: { type: 'plasmaDischarge', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'strike', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, branches: 0.72, reach: 0.55, branchiness: 0.6, pulse: 0.8, glow: 1, spectrum: 0.5, core: 0.0065, color: '#6c3dff', color2: '#a9ceff', opacity: 1, seed: 7 },
16
+ burnAway: { type: 'burnAway', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'trace', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'burn', eraseDuration: 6, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2.5, hiddenTime: 0.5, color: '#efe2c4', color2: '#ff7a1c', char: 0.6, ashLace: 0.7, curl: 0.6, spread: 1, ember: 1, roughness: 0.6, singe: 0.55, opacity: 1, seed: 7 },
17
+ lightPainting: { type: 'lightPainting', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'pen', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, exposure: 1, temperature: 3000, sparks: 110, spread: 0.7, bloom: 1, width: 0.012, strobe: 0, halation: 0.55, tremor: 0.5, color: '#ffe0b0', color2: '#ffffff', opacity: 1 },
18
+ constellation: { type: 'constellation', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, stars: 5.5, brightness: 0, twinkle: 1, lines: 1, temperature: 0, seed: 7, color: '#7f9bd0', color2: '#dce8ff', opacity: 1 },
19
+ inkBleed: { type: 'inkBleed', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'burn', eraseDuration: 6, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2.5, hiddenTime: 0.5, color: '#1b2d6a', color2: '#b0703c', bleed: 0.042, dryTime: 2.4, fibre: 0.7, pooling: 0.7, weight: 0.7, paper: 1, oxidation: 3.5, burn: 0.6, char: 0.6, spread: 1, opacity: 1 },
20
+ liquidMetal: { type: 'liquidMetal', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'flow', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'melt', eraseDuration: 4.5, eraseEase: 'linear', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, thickness: 0.06, roughness: 1, reflectivity: 0.8, environment: 1.15, tint: 0.7, rippleSpeed: 1, oxide: 0.4, spikes: 0, melt: 0.5, drips: 0.6, color: '#cdd5df', color2: '#f4f7ff', opacity: 1 },
21
+ embroidery: { type: 'embroidery', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'stitch', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'undraw', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#c92f48', color2: '#e8c47a', density: 44, slant: 66, thickness: 1.35, sheen: 1, relief: 1, outline: 0.65, fabric: 0.4, pucker: 0.6, style: 'auto', opacity: 1 },
22
+ chalkboard: { type: 'chalkboard', shown: true, text: 'Hello, world', font: 'caveat', drawMethod: 'pen', drawDuration: 5, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'smudge', eraseDuration: 2, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, pressure: 0.55, chatter: 0.6, grain: 0.55, weight: 1, dust: 0.6, ghost: 0.5, swing: 0.6, board: 0, opacity: 1, color: '#ebe6d8', color2: '#c4dcf2' },
23
+ plain: { type: 'plain', shown: true, text: 'Hello', font: 'inter', drawMethod: 'fade', drawDuration: 1.2, drawEase: 'easeInOut', drawStagger: 0.6, drawAngle: 0, eraseMethod: 'fade', eraseDuration: 0.8, eraseEase: 'easeInOut', eraseStagger: 0.6, eraseAngle: 0, autoPlay: true, loop: false, yoyo: false, holdTime: 2, hiddenTime: 0.5, color: '#ffffff', color2: '#111111', weight: 0, outline: 0, fill: 1, softness: 0, opacity: 1 },
23
24
  };
24
25
  export const TEXT_OBJECT_LABELS = {
25
26
  handwriting: 'Handwriting',
@@ -34,6 +35,7 @@ export const TEXT_OBJECT_LABELS = {
34
35
  liquidMetal: 'Liquid Metal',
35
36
  embroidery: 'Embroidery',
36
37
  chalkboard: 'Chalkboard',
38
+ plain: 'Plain',
37
39
  };
38
40
  export const TEXT_OBJECTS_ANIMATABLE = {
39
41
  handwriting: [
@@ -172,9 +174,28 @@ export const TEXT_OBJECTS_ANIMATABLE = {
172
174
  { value: 'color', label: 'Chalk' },
173
175
  { value: 'color2', label: 'Highlight' },
174
176
  ],
177
+ plain: [
178
+ { value: 'color', label: 'Colour' },
179
+ { value: 'weight', label: 'Weight' },
180
+ { value: 'outline', label: 'Outline' },
181
+ { value: 'opacity', label: 'Opacity' },
182
+ { value: 'color2', label: 'Outline colour' },
183
+ { value: 'fill', label: 'Fill' },
184
+ { value: 'softness', label: 'Softness' },
185
+ ],
175
186
  };
176
187
  /** The typefaces every look can use: the id is stored, the family is the Google Fonts name used to preview it. */
177
188
  export const TEXT_FONTS = [
189
+ // clean text faces (plain labels, mesh text)
190
+ { id: 'inter', label: 'Inter', family: 'Inter' },
191
+ { id: 'roboto', label: 'Roboto', family: 'Roboto' },
192
+ { id: 'montserrat', label: 'Montserrat', family: 'Montserrat' },
193
+ { id: 'poppins', label: 'Poppins', family: 'Poppins' },
194
+ { id: 'oswald', label: 'Oswald', family: 'Oswald' },
195
+ { id: 'bebas-neue', label: 'Bebas Neue', family: 'Bebas Neue' },
196
+ { id: 'playfair-display', label: 'Playfair Display', family: 'Playfair Display' },
197
+ { id: 'lora', label: 'Lora', family: 'Lora' },
198
+ // handwriting faces (the pen looks)
178
199
  { id: 'caveat', label: 'Caveat', family: 'Caveat' },
179
200
  { id: 'kalam', label: 'Kalam', family: 'Kalam' },
180
201
  { id: 'handlee', label: 'Handlee', family: 'Handlee' },
@@ -190,9 +211,8 @@ export const TEXT_FONTS = [
190
211
  { id: 'kaushan-script', label: 'Kaushan Script', family: 'Kaushan Script' },
191
212
  { id: 'sriracha', label: 'Sriracha', family: 'Sriracha' },
192
213
  { id: 'pacifico', label: 'Pacifico', family: 'Pacifico' },
193
- { id: 'poppins', label: 'Poppins', family: 'Poppins' },
194
214
  ];
195
- /** True when the config is one of the text looks (type 'text', config.type set; the legacy text has no config.type). */
215
+ /** True when the config is one of the text looks (object type 'text', config.type set). */
196
216
  export function isTextObjectConfig(config) {
197
217
  const t = config?.type;
198
218
  return typeof t === 'string' && Object.prototype.hasOwnProperty.call(DEFAULT_TEXT_OBJECTS, t);
@@ -7,11 +7,7 @@ export declare const RAIN_ANIMATABLE_KEYS: readonly ["color", "size", "opacity",
7
7
  * renderer, so they have no material properties. They animate through config.
8
8
  */
9
9
  export declare const SELF_MANAGED_MATERIAL_TYPES: Set<string>;
10
- /**
11
- * True when the object draws with its own shaders: a whole object type from the set above, or a text look.
12
- * Object type 'text' also hosts the legacy bitmap / 3D text, which keeps its material, so text is decided per
13
- * object (config.type), not by type. Use this, never the set alone, wherever the material panel is decided.
14
- */
10
+ /** True when the object draws with its own shaders (the object types above): it gets no material specs. */
15
11
  export declare const selfManagesMaterial: (obj: {
16
12
  type?: string;
17
13
  config?: unknown;
@@ -45,6 +41,15 @@ export declare function getAnimatableSpecs(element: PropertyElement, settings: a
45
41
  export declare const TRACK_CONFIG_DOMAINS: ReadonlySet<PropertyDomain>;
46
42
  /** What an animation clip can key on this element (timeline track picker, AI clips). */
47
43
  export declare function getTrackSpecs(element: PropertyElement, settings: any): PropertySpec[];
44
+ /**
45
+ * Structural properties a clip can key as DISCRETE tracks (timeline): not writable per
46
+ * frame, so the clip sets them at its keys — the runtime lays the values at the playhead
47
+ * over the element's settings through the SceneActions patch layer, like an action, and
48
+ * the element re-renders. Every domain qualifies (it goes through the settings path, not
49
+ * a live handle); textures don't (no key editor for them). Not filtered by
50
+ * isPropertyLive: the switch that turns a layer on is itself one of these.
51
+ */
52
+ export declare function getDiscreteTrackSpecs(element: PropertyElement, settings: any): PropertySpec[];
48
53
  export declare function getPropertySpec(element: PropertyElement, settings: any, key: string): PropertySpec | undefined;
49
54
  /** Specs with the element's current values. */
50
55
  export declare function describeProperties(element: PropertyElement, settings: any): DescribedProperty[];
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/properties/registry.ts"],"names":[],"mappings":"AAsDA,OAAO,EACH,KAAK,gBAAgB,EAMxB,MAAM,6BAA6B,CAAC;AAWrC,OAAO,KAAK,EACR,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAkB,YAAY,EACjG,MAAM,SAAS,CAAC;AAMjB,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,+FAAgG,CAAC;AAUlI;;;GAGG;AACH,eAAO,MAAM,2BAA2B,aAAoF,CAAC;AAE7H;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAAG,OAC2B,CAAC;AAmB9H,4DAA4D;AAC5D,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,MACiC,CAAC;AAE9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpE;AAID,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAaxE;AAgCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM,SAAK,EAAE,MAAM,GAAE,cAAyB,GAAG,YAAY,EAAE,CAExH;AAwND,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAIxF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAKnG;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAE1F;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,cAAc,CAA6G,CAAC;AAE3K,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAIrF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE9G;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,iBAAiB,EAAE,CAE/F;AAED,wHAAwH;AACxH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,eAC+E,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/properties/registry.ts"],"names":[],"mappings":"AAuDA,OAAO,EACH,KAAK,gBAAgB,EAMxB,MAAM,6BAA6B,CAAC;AAWrC,OAAO,KAAK,EACR,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAkB,YAAY,EACjG,MAAM,SAAS,CAAC;AAMjB,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,+FAAgG,CAAC;AAUlI;;;GAGG;AACH,eAAO,MAAM,2BAA2B,aAA4F,CAAC;AAErI,2GAA2G;AAC3G,eAAO,MAAM,mBAAmB,GAAI,KAAK;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAAG,OAClC,CAAC;AAmBjE,4DAA4D;AAC5D,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,MACiC,CAAC;AAE9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpE;AAID,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAaxE;AAgCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM,SAAK,EAAE,MAAM,GAAE,cAAyB,GAAG,YAAY,EAAE,CAExH;AAkOD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAIxF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAUnG;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAE1F;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,cAAc,CAA6G,CAAC;AAE3K,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAIrF;AAgBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,EAAE,CAG7F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE9G;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,GAAG,iBAAiB,EAAE,CAE/F;AAED,wHAAwH;AACxH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,eAC+E,CAAC"}
@@ -5,9 +5,9 @@ import { GRIDS_ANIMATABLE } from '../data/gridsDefaults.js';
5
5
  import { ENVIRONMENT_OBJECTS_ANIMATABLE } from '../data/environmentDefaults.js';
6
6
  import { LAND_OBJECTS_ANIMATABLE } from '../data/landDefaults.js';
7
7
  import { SPACE_OBJECTS_ANIMATABLE } from '../data/spaceDefaults.js';
8
- import { TEXT_OBJECTS_ANIMATABLE, isTextObjectConfig } from '../data/textDefaults.js';
8
+ import { TEXT_OBJECTS_ANIMATABLE } from '../data/textDefaults.js';
9
9
  import { CLOUD_ANIMATABLE_PROPERTIES } from '../environment/cloudConfigs.js';
10
- import { skyOptionalProperties, skyStarsOptionalProperties, cloudDeckOptionalProperties, cirrusOptionalProperties, oceanSurfaceOptionalProperties, terrainOptionalProperties, rainOptionalProperties, cloudsOptionalProperties, textOptionalProperties, plainOptionalProperties, pathOptionalProperties, edgesOptionalProperties, } from './tables/optionalProperties.js';
10
+ import { skyOptionalProperties, skyStarsOptionalProperties, cloudDeckOptionalProperties, cirrusOptionalProperties, thunderOptionalProperties, oceanSurfaceOptionalProperties, terrainOptionalProperties, rainOptionalProperties, cloudsOptionalProperties, plainOptionalProperties, pathOptionalProperties, edgesOptionalProperties, } from './tables/optionalProperties.js';
11
11
  import { SHAPE_CONTROLS, MODE_CONTROLS } from './tables/geometryProperties.js';
12
12
  import { LIGHT_PROPERTIES, SHADOW_PROPERTIES } from './tables/lightProperties.js';
13
13
  import { PARTICLES_PROPERTIES } from './tables/particlesProperties.js';
@@ -34,13 +34,9 @@ const MATERIAL_STRUCTURAL = new Set([
34
34
  * Objects that own their shader: their materialSettings (if any) never reach the
35
35
  * renderer, so they have no material properties. They animate through config.
36
36
  */
37
- export const SELF_MANAGED_MATERIAL_TYPES = new Set(['effect', 'grid', 'light', 'particles', 'environment', 'space', 'land']);
38
- /**
39
- * True when the object draws with its own shaders: a whole object type from the set above, or a text look.
40
- * Object type 'text' also hosts the legacy bitmap / 3D text, which keeps its material, so text is decided per
41
- * object (config.type), not by type. Use this, never the set alone, wherever the material panel is decided.
42
- */
43
- export const selfManagesMaterial = (obj) => !!obj && (SELF_MANAGED_MATERIAL_TYPES.has(obj.type) || (obj.type === 'text' && isTextObjectConfig(obj.config)));
37
+ export const SELF_MANAGED_MATERIAL_TYPES = new Set(['effect', 'grid', 'light', 'particles', 'environment', 'space', 'land', 'text']);
38
+ /** True when the object draws with its own shaders (the object types above): it gets no material specs. */
39
+ export const selfManagesMaterial = (obj) => !!obj && SELF_MANAGED_MATERIAL_TYPES.has(obj.type);
44
40
  const CAMERA_SPECS = [
45
41
  { key: 'position', name: 'position', label: 'Position', kind: 'vec3', domain: 'camera', animatable: true },
46
42
  { key: 'controls.target', name: 'target', label: 'Target', kind: 'vec3', domain: 'camera', animatable: true },
@@ -192,6 +188,8 @@ function controlSpecs(controls, prefix, group) {
192
188
  animatable: false,
193
189
  default: c.default,
194
190
  };
191
+ if (c.type === 'select')
192
+ spec.options = c.options.map((value, i) => (c.optionLabels?.[i] ? { value, label: c.optionLabels[i] } : { value }));
195
193
  if (c.type === 'range') {
196
194
  spec.min = c.min;
197
195
  spec.max = c.max;
@@ -249,7 +247,7 @@ function familyOf(obj) {
249
247
  // Land objects only under their own object type: their keys are landform names ('hills'…).
250
248
  if (type === 'land' && LAND_OBJECTS_ANIMATABLE[t])
251
249
  return land();
252
- // Text looks only under the text object type, and only with a config.type: the legacy 2d / 3d text (no config.type) falls through to its own list below.
250
+ // Text looks only under the text object type (plain, handwriting, …).
253
251
  if (type === 'text' && TEXT_OBJECTS_ANIMATABLE[t])
254
252
  return text();
255
253
  if (t === 'rain')
@@ -266,8 +264,6 @@ function familyOf(obj) {
266
264
  if (GENERATIVE_PARTICLES_ANIMATABLE[t])
267
265
  return particles();
268
266
  }
269
- if (type === 'text')
270
- return { domain: 'config', list: textOptionalProperties, animatable: null };
271
267
  if (type === 'plain')
272
268
  return { domain: 'config', list: plainOptionalProperties, animatable: null };
273
269
  if (type === 'path')
@@ -300,6 +296,15 @@ function configSpecs(obj) {
300
296
  const kind = kindOfValue(name, obj?.config?.[name]) ?? 'number';
301
297
  out.push({ key: `${prefix}${name}`, name, label: label || propertyLabel(name), kind, domain, animatable: true });
302
298
  }
299
+ // Text's draw / erase trigger (config.shown: on plays the draw animation, off the erase).
300
+ // Its controller shows it as the Shown button; the per-look tables don't list it.
301
+ if (domain === 'text' && !seen.has('shown')) {
302
+ out.push({
303
+ key: `${prefix}shown`, name: 'shown', label: 'Shown',
304
+ description: 'The draw / erase trigger: switching it on plays the draw animation, off plays the erase animation (the text then stays hidden)',
305
+ kind: 'boolean', domain, animatable: false, default: true,
306
+ });
307
+ }
303
308
  if (domain === 'light') {
304
309
  for (const p of SHADOW_PROPERTIES[obj.config.type] ?? []) {
305
310
  out.push({ ...fromOptional(p, 'config.shadow.', 'shadow', false), group: 'shadow' });
@@ -332,6 +337,7 @@ function environmentSpecs(element, settings) {
332
337
  return [
333
338
  ...envSpecs(cloudDeckOptionalProperties(settings?.config?.deckType), 'config.', 'clouds'),
334
339
  ...envSpecs(cirrusOptionalProperties, 'cirrus.', 'cirrus'),
340
+ ...envSpecs(thunderOptionalProperties, 'thunder.', 'thunder'),
335
341
  ];
336
342
  case 'ocean':
337
343
  return envSpecs(oceanSurfaceOptionalProperties(settings?.config?.waterType, settings?.config?.host), 'config.', 'ocean');
@@ -359,8 +365,14 @@ export function getPropertySpecs(element, settings) {
359
365
  export function isPropertyLive(element, spec, settings) {
360
366
  if (spec.domain === 'edges')
361
367
  return settings?.edgesSettings?.enabled !== false;
362
- if (element === 'clouds')
363
- return spec.domain === 'cirrus' ? !!settings?.cirrus?.enabled : !!settings?.config?.enabled;
368
+ if (element === 'clouds') {
369
+ if (spec.domain === 'cirrus')
370
+ return !!settings?.cirrus?.enabled;
371
+ // Lightning needs cloud to strike in: the deck, and the thunder block itself.
372
+ if (spec.domain === 'thunder')
373
+ return !!settings?.config?.enabled && (spec.name === 'enabled' || !!settings?.thunder?.enabled);
374
+ return !!settings?.config?.enabled;
375
+ }
364
376
  if (spec.domain === 'stars')
365
377
  return settings?.stars?.visible !== false;
366
378
  return true;
@@ -383,6 +395,29 @@ export function getTrackSpecs(element, settings) {
383
395
  return specs;
384
396
  return specs.filter(s => s.domain === 'transform' || s.domain === 'material' || s.domain === 'edges' || TRACK_CONFIG_DOMAINS.has(s.domain));
385
397
  }
398
+ /**
399
+ * Text settings that configure HOW it draws / erases / replays — read only when a draw or
400
+ * erase starts, so keying them changes nothing you'd see. The timeline drives text with
401
+ * Shown (config.enabled) instead; these stay panel settings.
402
+ */
403
+ const TEXT_LIFECYCLE = new Set([
404
+ 'drawMethod', 'drawDuration', 'drawEase', 'drawStagger', 'drawAngle',
405
+ 'eraseMethod', 'eraseDuration', 'eraseEase', 'eraseStagger', 'eraseAngle',
406
+ 'autoPlay', 'loop', 'yoyo', 'holdTime', 'hiddenTime',
407
+ ]);
408
+ /** Kinds a structural (discrete) track can hold: a key value the timeline can edit. */
409
+ const DISCRETE_KINDS = new Set(['number', 'boolean', 'string', 'select', 'color', 'vec3', 'vec2']);
410
+ /**
411
+ * Structural properties a clip can key as DISCRETE tracks (timeline): not writable per
412
+ * frame, so the clip sets them at its keys — the runtime lays the values at the playhead
413
+ * over the element's settings through the SceneActions patch layer, like an action, and
414
+ * the element re-renders. Every domain qualifies (it goes through the settings path, not
415
+ * a live handle); textures don't (no key editor for them). Not filtered by
416
+ * isPropertyLive: the switch that turns a layer on is itself one of these.
417
+ */
418
+ export function getDiscreteTrackSpecs(element, settings) {
419
+ return getPropertySpecs(element, settings).filter(s => !s.animatable && DISCRETE_KINDS.has(s.kind) && !(s.domain === 'text' && TEXT_LIFECYCLE.has(s.name)));
420
+ }
386
421
  export function getPropertySpec(element, settings, key) {
387
422
  return getPropertySpecs(element, settings).find(s => s.key === key);
388
423
  }
@@ -20,6 +20,13 @@ export type ControlOf<K extends string> = {
20
20
  key: K;
21
21
  label: string;
22
22
  default: string;
23
+ } | {
24
+ type: 'select';
25
+ key: K;
26
+ label: string;
27
+ options: string[];
28
+ optionLabels?: string[];
29
+ default: string;
23
30
  };
24
31
  type OptKey = keyof GeometryShapeConfig & string;
25
32
  export declare const SHAPE_CONTROLS: Record<ShapeName, ControlOf<OptKey>[]>;
@@ -1 +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"}
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;AAG9G,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,GACxD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAY3G,KAAK,MAAM,GAAG,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAGjD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CA4CjE,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"}
@@ -1,7 +1,10 @@
1
+ import { TEXT_FONTS } from '../../data/textDefaults.js';
1
2
  const int = (key, label, min, max, def) => ({ type: 'range', key, label, min, max, step: 1, default: def });
2
3
  const num = (key, label, min, max, step, def) => ({ type: 'range', key, label, min, max, step, default: def, digits: 2 });
3
4
  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
5
  const str = (key, label, def) => ({ type: 'text', key, label, default: def });
6
+ const sel = (key, label, options, optionLabels, def) => ({ type: 'select', key, label, options, optionLabels, default: def });
7
+ const tog = (key, label, def) => ({ type: 'toggle', key, label, default: def });
5
8
  const CURVE = int('curveSegments', 'Curve detail', 6, 160, 64);
6
9
  export const SHAPE_CONTROLS = {
7
10
  heart: [CURVE],
@@ -39,7 +42,12 @@ export const SHAPE_CONTROLS = {
39
42
  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
43
  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
44
  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)],
45
+ // the string extruded into a solid from the packed outline fonts (the text looks' font list)
46
+ text: [
47
+ str('text', 'Text', 'Hello'), sel('font', 'Font', TEXT_FONTS.map((f) => f.id), TEXT_FONTS.map((f) => f.label), 'inter'),
48
+ num('size', 'Size', 0.2, 3, 0.01, 1), num('height', 'Depth', 0.02, 1, 0.01, 0.2), num('letterSpacing', 'Letter spacing', -0.1, 0.5, 0.005, 0),
49
+ tog('bevelEnabled', 'Bevel', true), num('bevelThickness', 'Bevel depth', 0, 0.1, 0.002, 0.02), num('bevelSize', 'Bevel size', 0, 0.1, 0.002, 0.015), int('bevelSegments', 'Bevel segments', 1, 8, 3),
50
+ ],
43
51
  point: [num('size', 'Size', 0.02, 0.5, 0.01, 0.1)],
44
52
  custom: [],
45
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"optionalProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/optionalProperties.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optionalProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/optionalProperties.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export const skyOptionalProperties = [
11
11
  // The sky's built-in stars (SkyStars): keyed under `stars.` on SkySettings. count and
12
12
  // milkyWay rebuild the dome, so they are structural; the rest are uniforms.
13
13
  export const skyStarsOptionalProperties = [
14
+ { name: 'visible', label: 'Visible', description: 'Show the night sky. With a sky on they come out after dark; with no sky they are a stand-alone layer', type: 'boolean', animatable: false, default: true },
14
15
  { name: 'brightness', label: 'Brightness', description: 'How bright the stars are once it is dark', type: 'number', min: 0, max: 4, step: 0.05, default: 1 },
15
16
  { name: 'count', label: 'Count', description: 'How many stars fill the sky', type: 'number', min: 500, max: 20000, step: 100, animatable: false, default: 4000 },
16
17
  { name: 'size', label: 'Size', description: 'Size of the star points', type: 'number', min: 0.3, max: 3, step: 0.05, default: 1 },
@@ -1 +1 @@
1
- {"version":3,"file":"textProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/textProperties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAO9D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAoWtE,CAAC"}
1
+ {"version":3,"file":"textProperties.d.ts","sourceRoot":"","sources":["../../../src/properties/tables/textProperties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAO9D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,EAAE,CA8XtE,CAAC"}