@skenora/scene-plan 0.1.2

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 (66) hide show
  1. package/README.md +114 -0
  2. package/dist/check/check-scene-input.d.ts +38 -0
  3. package/dist/check/check-scene-input.d.ts.map +1 -0
  4. package/dist/check/check-scene-input.js +209 -0
  5. package/dist/check/check-scene-input.js.map +1 -0
  6. package/dist/compilation/compile.d.ts +4 -0
  7. package/dist/compilation/compile.d.ts.map +1 -0
  8. package/dist/compilation/compile.js +498 -0
  9. package/dist/compilation/compile.js.map +1 -0
  10. package/dist/description/example-recipes.d.ts +66 -0
  11. package/dist/description/example-recipes.d.ts.map +1 -0
  12. package/dist/description/example-recipes.js +1097 -0
  13. package/dist/description/example-recipes.js.map +1 -0
  14. package/dist/description/examples.d.ts +18 -0
  15. package/dist/description/examples.d.ts.map +1 -0
  16. package/dist/description/examples.js +58 -0
  17. package/dist/description/examples.js.map +1 -0
  18. package/dist/description/information.d.ts +415 -0
  19. package/dist/description/information.d.ts.map +1 -0
  20. package/dist/description/information.js +980 -0
  21. package/dist/description/information.js.map +1 -0
  22. package/dist/description/recipes.d.ts +20 -0
  23. package/dist/description/recipes.d.ts.map +1 -0
  24. package/dist/description/recipes.js +163 -0
  25. package/dist/description/recipes.js.map +1 -0
  26. package/dist/description/scene-fields.d.ts +11 -0
  27. package/dist/description/scene-fields.d.ts.map +1 -0
  28. package/dist/description/scene-fields.js +471 -0
  29. package/dist/description/scene-fields.js.map +1 -0
  30. package/dist/diagnostics/diagnostics.d.ts +79 -0
  31. package/dist/diagnostics/diagnostics.d.ts.map +1 -0
  32. package/dist/diagnostics/diagnostics.js +91 -0
  33. package/dist/diagnostics/diagnostics.js.map +1 -0
  34. package/dist/generated/example-gallery.d.ts +2897 -0
  35. package/dist/generated/example-gallery.d.ts.map +1 -0
  36. package/dist/generated/example-gallery.js +3290 -0
  37. package/dist/generated/example-gallery.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/model/json.d.ts +14 -0
  43. package/dist/model/json.d.ts.map +1 -0
  44. package/dist/model/json.js +60 -0
  45. package/dist/model/json.js.map +1 -0
  46. package/dist/model/types.d.ts +329 -0
  47. package/dist/model/types.d.ts.map +1 -0
  48. package/dist/model/types.js +5 -0
  49. package/dist/model/types.js.map +1 -0
  50. package/dist/normalization/normalize.d.ts +7 -0
  51. package/dist/normalization/normalize.d.ts.map +1 -0
  52. package/dist/normalization/normalize.js +145 -0
  53. package/dist/normalization/normalize.js.map +1 -0
  54. package/dist/parsing/parse.d.ts +5 -0
  55. package/dist/parsing/parse.d.ts.map +1 -0
  56. package/dist/parsing/parse.js +330 -0
  57. package/dist/parsing/parse.js.map +1 -0
  58. package/dist/patch/patch.d.ts +6 -0
  59. package/dist/patch/patch.d.ts.map +1 -0
  60. package/dist/patch/patch.js +319 -0
  61. package/dist/patch/patch.js.map +1 -0
  62. package/dist/validation/validate.d.ts +16 -0
  63. package/dist/validation/validate.d.ts.map +1 -0
  64. package/dist/validation/validate.js +704 -0
  65. package/dist/validation/validate.js.map +1 -0
  66. package/package.json +31 -0
@@ -0,0 +1,498 @@
1
+ import { assertSceneDocument, createEmptySceneDocument, normalizeSceneDocument, findUnavailableSceneCapabilities, } from "@skenora/contracts";
2
+ import { createDiagnostic, finalizeDiagnostics, hasErrors, } from "../diagnostics/diagnostics.js";
3
+ import { isJsonObject } from "../model/json.js";
4
+ import { normalizeSceneBlueprint } from "../normalization/normalize.js";
5
+ import { validateNativeDocumentShape, validateNormalizedSceneBlueprint, } from "../validation/validate.js";
6
+ const DEFAULT_PRIMITIVE_COLOR = { r: 0.7, g: 0.72, b: 0.76 };
7
+ const DEFAULT_SHAPE_FILL = { r: 0.2, g: 0.55, b: 1 };
8
+ const DEFAULT_SHAPE_STROKE = { r: 0.3, g: 0.7, b: 1 };
9
+ const ZERO_VECTOR = { x: 0, y: 0, z: 0 };
10
+ const IDENTITY_SCALING = { x: 1, y: 1, z: 1 };
11
+ export function compileSceneBlueprint(input, context = {}) {
12
+ const normalized = normalizeSceneBlueprint(input);
13
+ if (!normalized.ok || !normalized.value) {
14
+ return {
15
+ ok: false,
16
+ sourceMappings: [],
17
+ diagnostics: normalized.diagnostics,
18
+ };
19
+ }
20
+ const blueprint = normalized.value;
21
+ const planHash = hashJson(blueprint);
22
+ const diagnostics = [
23
+ ...normalized.diagnostics,
24
+ ...validateNormalizedSceneBlueprint(blueprint, context, {
25
+ requireResourceBindings: true,
26
+ }),
27
+ ];
28
+ const sourceMappings = createSourceMappings(blueprint);
29
+ const preflight = finalizeDiagnostics(diagnostics);
30
+ if (hasErrors(preflight)) {
31
+ return {
32
+ ok: false,
33
+ planHash,
34
+ sourceMappings,
35
+ diagnostics: preflight,
36
+ };
37
+ }
38
+ const candidate = createCandidateDocument(blueprint, context, diagnostics);
39
+ if (!candidate) {
40
+ const finalized = finalizeDiagnostics(diagnostics);
41
+ return {
42
+ ok: false,
43
+ planHash,
44
+ sourceMappings,
45
+ diagnostics: finalized,
46
+ };
47
+ }
48
+ const nativeShape = validateNativeDocumentShape(candidate);
49
+ diagnostics.push(...nativeShape.diagnostics.map((diagnostic) => {
50
+ const mapping = sourceMappings.find((entry) => entry.documentPath.every((part, index) => part === diagnostic.path[index]));
51
+ return mapping
52
+ ? {
53
+ ...diagnostic,
54
+ path: [
55
+ ...mapping.planPath,
56
+ ...diagnostic.path.slice(mapping.documentPath.length),
57
+ ],
58
+ }
59
+ : diagnostic;
60
+ }));
61
+ if (context.capabilityAvailability && nativeShape.diagnostics.length === 0) {
62
+ for (const usage of findUnavailableSceneCapabilities(candidate, context.capabilityAvailability)) {
63
+ const mapping = sourceMappings.find((entry) => entry.documentPath.every((part, index) => part === usage.path[index]));
64
+ diagnostics.push(createDiagnostic({
65
+ code: "unavailable-scene-capability",
66
+ stage: "compile",
67
+ path: mapping
68
+ ? [
69
+ ...mapping.planPath,
70
+ ...usage.path.slice(mapping.documentPath.length),
71
+ ]
72
+ : usage.path,
73
+ message: `Required scene capability is unavailable: ${usage.id}@${usage.version}`,
74
+ recoverable: true,
75
+ }));
76
+ }
77
+ }
78
+ try {
79
+ assertSceneDocument(candidate);
80
+ }
81
+ catch (error) {
82
+ if (!nativeShape.diagnostics.length) {
83
+ diagnostics.push(createDiagnostic({
84
+ code: "native-document-invalid",
85
+ stage: "compile",
86
+ path: [],
87
+ message: error instanceof Error
88
+ ? error.message
89
+ : "Compiled SceneDocument candidate was rejected",
90
+ recoverable: false,
91
+ }));
92
+ }
93
+ }
94
+ const finalized = finalizeDiagnostics(diagnostics);
95
+ if (hasErrors(finalized)) {
96
+ return {
97
+ ok: false,
98
+ planHash,
99
+ sourceMappings,
100
+ diagnostics: finalized,
101
+ };
102
+ }
103
+ return {
104
+ ok: true,
105
+ document: structuredClone(candidate),
106
+ planHash,
107
+ sourceMappings,
108
+ diagnostics: finalized,
109
+ };
110
+ }
111
+ function createCandidateDocument(blueprint, context, diagnostics) {
112
+ const defaults = createEmptySceneDocument(blueprint.scene.id, blueprint.scene.name);
113
+ const assets = compileAssets(blueprint.resources, context, diagnostics);
114
+ const entities = {};
115
+ const rootEntityIds = [];
116
+ for (const entity of blueprint.entities) {
117
+ const compiled = compileEntity(entity);
118
+ entities[compiled.id] = compiled;
119
+ if (compiled.parentId === null)
120
+ rootEntityIds.push(compiled.id);
121
+ }
122
+ const materials = {};
123
+ for (const material of blueprint.materials) {
124
+ materials[material.id] = compileMaterial(material);
125
+ }
126
+ const materialBindings = Object.fromEntries(blueprint.materialBindings.map((binding) => [
127
+ binding.id,
128
+ structuredClone(binding),
129
+ ]));
130
+ const textureAnimations = Object.fromEntries(blueprint.textureAnimations.map((animation) => [
131
+ animation.id,
132
+ structuredClone(animation),
133
+ ]));
134
+ const cameraPaths = Object.fromEntries(blueprint.cameraPaths.map((path) => [path.id, structuredClone(path)]));
135
+ const flows = Object.fromEntries(blueprint.flows.map((flow) => [flow.id, structuredClone(flow)]));
136
+ const extensions = Object.fromEntries(blueprint.extensions.map((extension) => [
137
+ extension.namespace,
138
+ {
139
+ version: extension.version,
140
+ capability: extension.capability,
141
+ required: extension.required,
142
+ data: structuredClone(extension.data),
143
+ },
144
+ ]));
145
+ const raw = {
146
+ ...defaults,
147
+ assets,
148
+ entities,
149
+ rootEntityIds,
150
+ materials,
151
+ materialBindings,
152
+ textureAnimations,
153
+ camera: cloneOptional(blueprint.camera, defaults.camera),
154
+ cameraPaths,
155
+ environment: cloneOptional(blueprint.environment, defaults.environment),
156
+ ground: cloneOptional(blueprint.ground, defaults.ground),
157
+ fog: cloneOptional(blueprint.fog, defaults.fog),
158
+ weather: cloneOptional(blueprint.weather, defaults.weather),
159
+ lights: blueprint.lights === undefined
160
+ ? structuredClone(defaults.lights)
161
+ : structuredClone(blueprint.lights),
162
+ postProcess: cloneOptional(blueprint.postProcess, defaults.postProcess),
163
+ flows,
164
+ variables: structuredClone(blueprint.initialVariables),
165
+ extensions,
166
+ };
167
+ const normalized = normalizeSceneDocument(raw);
168
+ if (!isJsonObject(normalized)) {
169
+ diagnostics.push(createDiagnostic({
170
+ code: "native-document-invalid",
171
+ stage: "compile",
172
+ path: [],
173
+ message: "Native document normalization did not return an object",
174
+ recoverable: false,
175
+ }));
176
+ return null;
177
+ }
178
+ return normalized;
179
+ }
180
+ function compileAssets(resources, context, diagnostics) {
181
+ const assets = {};
182
+ for (const resource of resources) {
183
+ const binding = context.resourceBindings?.[resource.id];
184
+ if (!binding) {
185
+ diagnostics.push(createDiagnostic({
186
+ code: "missing-resource-binding",
187
+ stage: "compile",
188
+ path: ["resources", resource.id],
189
+ message: `Cannot compile resource without a binding: ${resource.id}`,
190
+ recoverable: true,
191
+ assetId: resource.id,
192
+ }));
193
+ continue;
194
+ }
195
+ const source = binding.source;
196
+ const legacyUri = binding.uri;
197
+ assets[resource.id] = {
198
+ id: resource.id,
199
+ kind: binding.kind,
200
+ ...(source === undefined ? {} : { source: structuredClone(source) }),
201
+ ...(source === undefined && legacyUri === undefined
202
+ ? {}
203
+ : source === undefined
204
+ ? { uri: legacyUri }
205
+ : {}),
206
+ ...((binding.mediaType ?? resource.mediaType)
207
+ ? { mediaType: binding.mediaType ?? resource.mediaType }
208
+ : {}),
209
+ ...((binding.label ?? resource.label)
210
+ ? { label: binding.label ?? resource.label }
211
+ : {}),
212
+ ...((binding.integrity ?? resource.integrity)
213
+ ? {
214
+ integrity: structuredClone(binding.integrity ?? resource.integrity),
215
+ }
216
+ : {}),
217
+ ...(binding.provenance === undefined
218
+ ? {}
219
+ : {
220
+ provenance: structuredClone(binding.provenance),
221
+ }),
222
+ };
223
+ }
224
+ return assets;
225
+ }
226
+ function compileEntity(entity) {
227
+ const source = entity;
228
+ const base = {
229
+ id: entity.id,
230
+ name: entity.name ?? entity.id,
231
+ type: entity.kind,
232
+ parentId: entity.parentId ?? null,
233
+ enabled: entity.enabled ?? true,
234
+ visible: entity.visible ?? true,
235
+ transform: compileTransform(entity.transform),
236
+ };
237
+ if (entity.kind === "model") {
238
+ return {
239
+ ...base,
240
+ type: "model",
241
+ assetId: entity.assetRef,
242
+ ...(entity.sourceNode === undefined
243
+ ? {}
244
+ : { sourceNode: entity.sourceNode }),
245
+ ...compileProperties(entity.properties, entity.alignment),
246
+ };
247
+ }
248
+ if (entity.kind === "group") {
249
+ return {
250
+ ...base,
251
+ type: "group",
252
+ ...compileProperties(entity.properties, undefined),
253
+ };
254
+ }
255
+ if (entity.kind === "primitive") {
256
+ const input = asObject(entity.properties);
257
+ const properties = {
258
+ ...input,
259
+ primitive: entity.primitive,
260
+ size: entity.size ?? numberOr(input.size, 1),
261
+ color: entity.color ?? colorOr(input.color, DEFAULT_PRIMITIVE_COLOR),
262
+ ...optionalProperty("width", entity.width ?? input.width),
263
+ ...optionalProperty("height", entity.height ?? input.height),
264
+ ...optionalProperty("depth", entity.depth ?? input.depth),
265
+ ...optionalProperty("diameter", entity.diameter ?? input.diameter),
266
+ };
267
+ return { ...base, type: "primitive", properties };
268
+ }
269
+ if (entity.kind === "procedural") {
270
+ const input = asObject(entity.properties);
271
+ return {
272
+ ...base,
273
+ type: "procedural",
274
+ properties: {
275
+ ...input,
276
+ program: structuredClone(entity.program),
277
+ color: entity.color ?? colorOr(input.color, DEFAULT_PRIMITIVE_COLOR),
278
+ },
279
+ };
280
+ }
281
+ if (entity.kind === "shape") {
282
+ const input = asObject(entity.properties);
283
+ const closed = entity.closed ??
284
+ booleanOr(input.closed, defaultShapeClosed(entity.shape));
285
+ const points = entity.points ?? vector3ArrayOr(input.points, createShapePoints(entity));
286
+ const properties = {
287
+ ...input,
288
+ shape: entity.shape,
289
+ points,
290
+ closed,
291
+ fillColor: entity.fillColor ?? colorOr(input.fillColor, DEFAULT_SHAPE_FILL),
292
+ fillAlpha: entity.fillAlpha ?? numberOr(input.fillAlpha, 0.35),
293
+ strokeColor: entity.strokeColor ?? colorOr(input.strokeColor, DEFAULT_SHAPE_STROKE),
294
+ ...optionalProperty("width", entity.width ?? input.width),
295
+ ...optionalProperty("height", entity.height ?? input.height),
296
+ ...optionalProperty("radius", entity.radius ?? input.radius),
297
+ ...optionalProperty("depth", entity.depth ?? input.depth),
298
+ ...optionalProperty("tubeRadius", entity.tubeRadius ?? input.tubeRadius),
299
+ ...optionalProperty("wallHeight", entity.wallHeight ?? input.wallHeight),
300
+ ...optionalProperty("segments", entity.segments ?? input.segments),
301
+ };
302
+ return { ...base, type: "shape", properties };
303
+ }
304
+ if (entity.kind === "particle") {
305
+ const input = asObject(entity.properties);
306
+ const properties = {
307
+ emitter: "point",
308
+ capacity: 2_000,
309
+ emitRate: 100,
310
+ minLifeTime: 0.5,
311
+ maxLifeTime: 2,
312
+ minSize: 0.05,
313
+ maxSize: 0.15,
314
+ minEmitPower: 0.5,
315
+ maxEmitPower: 1.5,
316
+ gravity: { x: 0, y: -0.5, z: 0 },
317
+ color1: { r: 1, g: 1, b: 1 },
318
+ color2: { r: 0.4, g: 0.65, b: 1 },
319
+ autoStart: true,
320
+ ...input,
321
+ ...(entity.textureAssetRef === undefined
322
+ ? {}
323
+ : { textureAssetId: entity.textureAssetRef }),
324
+ };
325
+ return { ...base, type: "particle", properties };
326
+ }
327
+ if (entity.kind === "annotation") {
328
+ const input = asObject(entity.properties);
329
+ return {
330
+ ...base,
331
+ type: "annotation",
332
+ properties: {
333
+ text: entity.name ?? entity.id,
334
+ color: "#ffffff",
335
+ offset: { ...ZERO_VECTOR },
336
+ priority: 0,
337
+ ...input,
338
+ },
339
+ };
340
+ }
341
+ if (entity.kind === "camera") {
342
+ const input = asObject(entity.properties);
343
+ return {
344
+ ...base,
345
+ type: "camera",
346
+ properties: {
347
+ projection: "perspective",
348
+ fov: 0.8,
349
+ minZ: 0.01,
350
+ maxZ: 10_000,
351
+ speed: 1,
352
+ ...input,
353
+ },
354
+ };
355
+ }
356
+ return { ...base, type: "mesh" };
357
+ }
358
+ function compileProperties(properties, alignment) {
359
+ const input = asObject(properties);
360
+ return {
361
+ properties: {
362
+ ...input,
363
+ ...(alignment === undefined
364
+ ? {}
365
+ : { alignment: structuredClone(alignment) }),
366
+ },
367
+ };
368
+ }
369
+ function compileTransform(transform) {
370
+ const source = transform;
371
+ return {
372
+ position: structuredClone(source?.position ?? ZERO_VECTOR),
373
+ rotation: structuredClone(source?.rotationRadians ?? ZERO_VECTOR),
374
+ scaling: structuredClone(source?.scaling ?? IDENTITY_SCALING),
375
+ ...(source?.rotationQuaternion === undefined
376
+ ? {}
377
+ : { rotationQuaternion: structuredClone(source.rotationQuaternion) }),
378
+ };
379
+ }
380
+ function compileMaterial(material) {
381
+ const { id, ...definition } = structuredClone(material);
382
+ return { id, ...definition };
383
+ }
384
+ function createShapePoints(entity) {
385
+ if (entity.shape === "rectangle" || entity.shape === "box") {
386
+ const width = entity.width ?? 1;
387
+ const height = entity.shape === "box" ? (entity.depth ?? 1) : (entity.height ?? 1);
388
+ return [
389
+ { x: -width / 2, y: 0, z: -height / 2 },
390
+ { x: width / 2, y: 0, z: -height / 2 },
391
+ { x: width / 2, y: 0, z: height / 2 },
392
+ { x: -width / 2, y: 0, z: height / 2 },
393
+ ];
394
+ }
395
+ if (entity.shape === "circle") {
396
+ const radius = entity.radius ?? 0.5;
397
+ const segments = entity.segments ?? 32;
398
+ return Array.from({ length: segments }, (_, index) => {
399
+ const angle = (index / segments) * Math.PI * 2;
400
+ return { x: Math.cos(angle) * radius, y: 0, z: Math.sin(angle) * radius };
401
+ });
402
+ }
403
+ return [];
404
+ }
405
+ function defaultShapeClosed(shape) {
406
+ return ["rectangle", "circle", "polygon", "box"].includes(shape);
407
+ }
408
+ function asObject(value) {
409
+ return isJsonObject(value) ? value : {};
410
+ }
411
+ function numberOr(value, fallback) {
412
+ return typeof value === "number" ? value : fallback;
413
+ }
414
+ function booleanOr(value, fallback) {
415
+ return typeof value === "boolean" ? value : fallback;
416
+ }
417
+ function colorOr(value, fallback) {
418
+ return isJsonObject(value) &&
419
+ typeof value.r === "number" &&
420
+ typeof value.g === "number" &&
421
+ typeof value.b === "number"
422
+ ? { r: value.r, g: value.g, b: value.b }
423
+ : { ...fallback };
424
+ }
425
+ function vector3ArrayOr(value, fallback) {
426
+ return Array.isArray(value)
427
+ ? structuredClone(value)
428
+ : structuredClone(fallback);
429
+ }
430
+ function optionalProperty(key, value) {
431
+ return value === undefined ? {} : { [key]: value };
432
+ }
433
+ function cloneOptional(value, fallback) {
434
+ return structuredClone(value === undefined ? fallback : value);
435
+ }
436
+ function createSourceMappings(blueprint) {
437
+ const mappings = [];
438
+ for (const [index, resource] of blueprint.resources.entries()) {
439
+ mappings.push({
440
+ planPath: ["resources", index],
441
+ documentPath: ["assets", resource.id],
442
+ kind: "resource",
443
+ id: resource.id,
444
+ });
445
+ }
446
+ for (const [index, entity] of blueprint.entities.entries()) {
447
+ mappings.push({
448
+ planPath: ["entities", index],
449
+ documentPath: ["entities", entity.id],
450
+ kind: "entity",
451
+ id: entity.id,
452
+ });
453
+ }
454
+ for (const [index, material] of blueprint.materials.entries()) {
455
+ mappings.push({
456
+ planPath: ["materials", index],
457
+ documentPath: ["materials", material.id],
458
+ kind: "material",
459
+ id: material.id,
460
+ });
461
+ }
462
+ for (const [index, binding] of blueprint.materialBindings.entries()) {
463
+ mappings.push({
464
+ planPath: ["materialBindings", index],
465
+ documentPath: ["materialBindings", binding.id],
466
+ kind: "binding",
467
+ id: binding.id,
468
+ });
469
+ }
470
+ for (const [index, flow] of blueprint.flows.entries()) {
471
+ mappings.push({
472
+ planPath: ["flows", index],
473
+ documentPath: ["flows", flow.id],
474
+ kind: "flow",
475
+ id: flow.id,
476
+ });
477
+ }
478
+ return Object.freeze(mappings);
479
+ }
480
+ function hashJson(value) {
481
+ const canonical = JSON.stringify(canonicalize(value));
482
+ let hash = 2_166_136_261;
483
+ for (let index = 0; index < canonical.length; index += 1) {
484
+ hash ^= canonical.charCodeAt(index);
485
+ hash = Math.imul(hash, 16_777_619);
486
+ }
487
+ return `fnv1a-${(hash >>> 0).toString(16).padStart(8, "0")}`;
488
+ }
489
+ function canonicalize(value) {
490
+ if (Array.isArray(value))
491
+ return value.map(canonicalize);
492
+ if (!isJsonObject(value))
493
+ return value;
494
+ return Object.fromEntries(Object.entries(value)
495
+ .sort(([left], [right]) => left.localeCompare(right))
496
+ .map(([key, child]) => [key, canonicalize(child)]));
497
+ }
498
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compilation/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { type Color3Value, type FieldRule } from "@skenora/contracts";
2
+ import { type SceneBlueprintInput } from "../model/types.js";
3
+ export interface ClippingSectionRecipeOptions {
4
+ readonly id?: string;
5
+ readonly radius?: number;
6
+ readonly offset?: number;
7
+ readonly side?: "positive" | "negative";
8
+ readonly edgeWidth?: number;
9
+ readonly edgeColor?: Color3Value;
10
+ readonly edgeIntensity?: number;
11
+ readonly surfaceColor?: Color3Value;
12
+ readonly capColor?: Color3Value;
13
+ readonly cap?: boolean;
14
+ }
15
+ export declare const CLIPPING_SECTION_RECIPE_OPTIONS_RULE: FieldRule;
16
+ export declare function createClippingSectionRecipe(options?: ClippingSectionRecipeOptions): SceneBlueprintInput;
17
+ export interface NeonLedRecipeOptions {
18
+ readonly id?: string;
19
+ readonly width?: number;
20
+ readonly height?: number;
21
+ readonly color?: Color3Value;
22
+ readonly intensity?: number;
23
+ readonly cellScale?: number;
24
+ readonly lineWidth?: number;
25
+ readonly pulseStrength?: number;
26
+ readonly pulseDurationMs?: number;
27
+ readonly glow?: boolean;
28
+ }
29
+ export declare const NEON_LED_RECIPE_OPTIONS_RULE: FieldRule;
30
+ export declare function createNeonLedRecipe(options?: NeonLedRecipeOptions): SceneBlueprintInput;
31
+ export interface ProceduralEarthRecipeOptions {
32
+ readonly id?: string;
33
+ readonly radius?: number;
34
+ readonly seed?: number;
35
+ readonly textureSize?: number;
36
+ readonly cloudOpacity?: number;
37
+ }
38
+ export declare const PROCEDURAL_EARTH_RECIPE_OPTIONS_RULE: FieldRule;
39
+ export declare function createProceduralEarthRecipe(options?: ProceduralEarthRecipeOptions): SceneBlueprintInput;
40
+ export interface LavaSurfaceRecipeOptions {
41
+ readonly id?: string;
42
+ readonly radius?: number;
43
+ readonly scale?: number;
44
+ readonly emission?: number;
45
+ readonly seed?: number;
46
+ }
47
+ export declare const LAVA_SURFACE_RECIPE_OPTIONS_RULE: FieldRule;
48
+ export declare function createLavaSurfaceRecipe(options?: LavaSurfaceRecipeOptions): SceneBlueprintInput;
49
+ export interface GlassTransmissionRecipeOptions {
50
+ readonly id?: string;
51
+ readonly radius?: number;
52
+ readonly indexOfRefraction?: number;
53
+ readonly intensity?: number;
54
+ readonly dispersion?: number;
55
+ readonly blurRadius?: number;
56
+ }
57
+ export declare const GLASS_TRANSMISSION_RECIPE_OPTIONS_RULE: FieldRule;
58
+ export declare function createGlassTransmissionRecipe(options?: GlassTransmissionRecipeOptions): SceneBlueprintInput;
59
+ export declare function describeSkenoraExampleRecipes(): {
60
+ rules: string[];
61
+ id: string;
62
+ version: number;
63
+ purpose: string;
64
+ options: FieldRule;
65
+ }[];
66
+ //# sourceMappingURL=example-recipes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-recipes.d.ts","sourceRoot":"","sources":["../../src/description/example-recipes.ts"],"names":[],"mappings":"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"}