Schema
The persisted-document type closure — every type reachable from ModelJson by following its own import type lines, breadth-first. A response type (Changes, RenderCell, …) never appears here unless the document closure itself reaches it. See Open surface for the fields this closure leaves unconstrained.
Index
28 types in the persisted-document closure (BFS from ModelJson, following import type lines only). 0 not tabulated (see the schema page).
| type | referenced by (in this closure) |
|---|---|
ModelJson | (root) |
BehaviorNode | ModelJson, ObjectNode |
ComponentNode | ModelJson |
LayerNode | ModelJson |
MaterialNode | ModelJson |
ModelSettings | ModelJson |
ObjectNode | ModelJson |
ParameterNode | ModelJson |
PatternNode | ModelJson |
ViewNode | ModelJson |
Argument | BehaviorNode, ComponentNode, LayerNode, MaterialNode, ObjectNode, ParameterNode, PatternNode, PatternStepNode, PropertyNode, StepNode, ViewNode |
ComponentMethod | ComponentNode |
AddLayerMethod | LayerNode |
PropertyNode | LayerNode, MaterialNode, ObjectNode, PatternNode, ViewNode |
AddMaterialMethod | MaterialNode |
Environment | ModelSettings |
UnitConfig | ModelSettings |
ObjectMethod | ObjectNode |
StepNode | ObjectNode |
ParameterMethod | ParameterNode |
AddPatternMethod | PatternNode |
PatternStepNode | PatternNode |
ViewMethod | ViewNode |
EnvironmentHdri | Environment |
Site | Environment |
SunMoment | Environment |
LengthUnit | UnitConfig |
LineFamilyMethod | PatternStepNode |
Types
ModelJson
Model = meta + assets + parameters (header) + scene (body). The ONE declaration of the persisted document. Cross-field refinements (one key namespace across every lane, the material/pattern library shape) run post-deserialize in crate::validate — serde has no schema-level array-uniqueness refine.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ComponentNode } from "./ComponentNode.js";
import type { LayerNode } from "./LayerNode.js";
import type { MaterialNode } from "./MaterialNode.js";
import type { ModelSettings } from "./ModelSettings.js";
import type { ObjectNode } from "./ObjectNode.js";
import type { ParameterNode } from "./ParameterNode.js";
import type { PatternNode } from "./PatternNode.js";
import type { ViewNode } from "./ViewNode.js";
/**
* Model = meta + assets + parameters (header) + scene (body). The ONE
* declaration of the persisted document. Cross-field refinements (one key
* namespace across every lane, the material/pattern library shape) run post-deserialize
* in `crate::validate` — serde has no schema-level array-uniqueness refine.
*/
export type ModelJson = {
/**
* identity — the platform's PUBLISH sequence, stamped by the host.
* 0/absent = never published. Not a JSON-format/schema version number.
*/
version?: number,
/**
* intent — content name printed on the artifact, verbatim text (a
* human types it; nothing evaluates it).
*/
title: string,
/**
* intent — units, active view, environment; absent = every field's own default.
*/
settings?: ModelSettings,
/**
* intent — the materials lane.
*/
materials?: Array<MaterialNode>,
/**
* intent — the layers lane.
*/
layers?: Array<LayerNode>,
/**
* intent — the patterns lane.
*/
patterns?: Array<PatternNode>,
/**
* intent — Header: named value bindings.
*/
parameters?: Array<ParameterNode>,
/**
* intent — acts this model performs on its siblings when it is placed
* as a component (AGENTS.md "Behaviors"); dormant in an open document —
* the root has no siblings — active once placed via `placeComponent`.
*/
behaviors?: Array<BehaviorNode>,
/**
* intent — Root body: the SET of scene objects, model-wide unique keys.
*/
objects?: Array<ObjectNode>,
/**
* intent — Named views, per-lane unique keys.
*/
views?: Array<ViewNode>,
/**
* intent — the components lane: documents this one places.
*/
components?: Array<ComponentNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
version | number | yes | identity | identity — the platform's PUBLISH sequence, stamped by the host. 0/absent = never published. Not a JSON-format/schema version number. |
title | string | no | intent | intent — content name printed on the artifact, verbatim text (a human types it; nothing evaluates it). |
settings | ModelSettings | yes | intent | intent — units, active view, environment; absent = every field's own default. |
materials | Array<MaterialNode> | yes | intent | intent — the materials lane. |
layers | Array<LayerNode> | yes | intent | intent — the layers lane. |
patterns | Array<PatternNode> | yes | intent | intent — the patterns lane. |
parameters | Array<ParameterNode> | yes | intent | intent — Header: named value bindings. |
behaviors | Array<BehaviorNode> | yes | intent | intent — acts this model performs on its siblings when it is placed as a component (AGENTS.md "Behaviors"); dormant in an open document — the root has no siblings — active once placed via placeComponent. |
objects | Array<ObjectNode> | yes | intent | intent — Root body: the SET of scene objects, model-wide unique keys. |
views | Array<ViewNode> | yes | intent | intent — Named views, per-lane unique keys. |
components | Array<ComponentNode> | yes | intent | intent — the components lane: documents this one places. |
BehaviorNode
One behaviors[] entry — a verb the engine performs on this object's siblings after the parent set evaluates; each method at most once, presence means enabled.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One `behaviors[]` entry — a verb the engine performs on this object's
* siblings after the parent set evaluates; each method at most once,
* presence means enabled.
*/
export type BehaviorNode = {
/**
* intent — the catalog `behaviors`-context method this act invokes.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
method | string | no | intent | intent — the catalog behaviors-context method this act invokes. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ComponentNode
A components[] entry: a keyed lane node whose value is a whole ModelJson placed by placeComponent(key). That document's own components lane is its private scope.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ComponentMethod } from "./ComponentMethod.js";
/**
* A `components[]` entry: a keyed lane node whose value is a whole
* `ModelJson` placed by `placeComponent(key)`. That document's own
* `components` lane is its private scope.
*/
export type ComponentNode = {
/**
* identity — unique in the document's one key namespace, every lane; `placeComponent.component` names it.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim.
*/
label?: string,
/**
* intent — `createComponent` (arg `data`) or `loadComponent` (arg `id`).
*/
method: ComponentMethod,
/**
* intent — `data` (the document) or `id` (a platform model id).
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane; placeComponent.component names it. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim. |
method | ComponentMethod | no | intent | intent — createComponent (arg data) or loadComponent (arg id). |
args | Array<Argument> | yes | intent | intent — data (the document) or id (a platform model id). |
LayerNode
A layers[] entry: a head with no args, identity is key, plus properties carrying attributes/visible.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddLayerMethod } from "./AddLayerMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `layers[]` entry: a head with no args, identity is `key`, plus
* `properties` carrying `attributes`/`visible`.
*/
export type LayerNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim.
*/
label?: string,
/**
* intent — the one closed-literal layers-lane head.
*/
method: AddLayerMethod,
/**
* intent — this head takes no args; kept for NODE LAW shape parity.
*/
args?: Array<Argument>,
/**
* intent — `attributes`/`visible`.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim. |
method | AddLayerMethod | no | intent | intent — the one closed-literal layers-lane head. |
args | Array<Argument> | yes | intent | intent — this head takes no args; kept for NODE LAW shape parity. |
properties | Array<PropertyNode> | yes | intent | intent — attributes/visible. |
MaterialNode
A materials[] entry: the addMaterial head plus a properties list for everything else. Identity is key, unique within materials[].
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddMaterialMethod } from "./AddMaterialMethod.js";
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `materials[]` entry: the `addMaterial` head plus a `properties` list
* for everything else. Identity is `key`, unique within `materials[]`.
*/
export type MaterialNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim.
*/
label?: string,
/**
* intent — the one closed-literal materials-lane head.
*/
method: AddMaterialMethod,
/**
* intent — `baseColor`/`texture`/`tileWidth`/`tileHeight`.
*/
args?: Array<Argument>,
/**
* intent — every other `ResolvedMaterial` field.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim. |
method | AddMaterialMethod | no | intent | intent — the one closed-literal materials-lane head. |
args | Array<Argument> | yes | intent | intent — baseColor/texture/tileWidth/tileHeight. |
properties | Array<PropertyNode> | yes | intent | intent — every other ResolvedMaterial field. |
ModelSettings
Model-level settings — one document-config block. Permanent conventions (Z-up, internal mm, display chord deflection as a render() argument, never a setting) are not fields here.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Environment } from "./Environment.js";
import type { UnitConfig } from "./UnitConfig.js";
/**
* Model-level settings — one document-config block. Permanent conventions
* (Z-up, internal mm, display chord deflection as a `render()` argument,
* never a setting) are not fields here.
*/
export type ModelSettings = {
/**
* intent — absent = `{length: "mm"}`, the one place that default is written.
*/
units?: UnitConfig,
/**
* intent — the sun, sky and HDRI; absent = the host's neutral default.
*/
environment?: Environment, };| field | type | optional | class | doc |
|---|---|---|---|---|
units | UnitConfig | yes | intent | intent — absent = {length: "mm"}, the one place that default is written. |
environment | Environment | yes | intent | intent — the sun, sky and HDRI; absent = the host's neutral default. |
ObjectNode
ONE node type per lane: {key, method, args?} plus steps (Object = createObject, a data chain) or objects (Block = createBlock, a nest, recursive) — method alone decides which body is legal; a node naming neither, or the wrong body for its method, fails validate by name.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { BehaviorNode } from "./BehaviorNode.js";
import type { ObjectMethod } from "./ObjectMethod.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { StepNode } from "./StepNode.js";
/**
* ONE node type per lane: `{key, method, args?}` plus `steps` (`Object` =
* `createObject`, a data chain) or `objects` (`Block` = `createBlock`, a
* nest, recursive) — `method` alone decides which body is legal; a node
* naming neither, or the wrong body for its method, fails validate by name.
*/
export type ObjectNode = {
/**
* identity — unique in the document's one key namespace, every lane,
* nested children included.
*/
key: string,
/**
* intent — editor-chrome display text, printed verbatim; absent falls
* back to `key`.
*/
label?: string,
/**
* intent — `createObject` (body `steps`) or `createBlock` (body `objects`).
*/
method: ObjectMethod,
/**
* intent — every object's args stay empty: `createBlock` and
* `createObject` alike take no args of their own. Placement
* (`pivot`/`translation`/`rotation`/`scale`/`copies`) is INSTANCE and
* lives in `properties` below, same as every other object.
*/
args?: Array<Argument>,
/**
* intent — placement (`pivot`/`translation`/`rotation`/`scale`/
* `copies`) plus paint and identity (`name`/`material`/`layer`/
* `visible`/`attributes`) on this object itself.
*/
properties?: Array<PropertyNode>,
/**
* intent — a verb the engine performs on this object's siblings once
* the parent set evaluates (AGENTS.md "Behaviors"); each method at
* most once.
*/
behaviors?: Array<BehaviorNode>,
/**
* intent — the data chain, legal only on `method: createObject`.
*/
steps?: Array<StepNode>,
/**
* intent — the nested children, legal only on `method: createBlock`.
*/
objects?: Array<ObjectNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane, nested children included. |
label | string | yes | intent | intent — editor-chrome display text, printed verbatim; absent falls back to key. |
method | ObjectMethod | no | intent | intent — createObject (body steps) or createBlock (body objects). |
args | Array<Argument> | yes | intent | intent — every object's args stay empty: createBlock and createObject alike take no args of their own. Placement (pivot/translation/rotation/scale/copies) is INSTANCE and lives in properties below, same as every other object. |
properties | Array<PropertyNode> | yes | intent | intent — placement (pivot/translation/rotation/scale/ copies) plus paint and identity (name/material/layer/ visible/attributes) on this object itself. |
behaviors | Array<BehaviorNode> | yes | intent | intent — a verb the engine performs on this object's siblings once the parent set evaluates (AGENTS.md "Behaviors"); each method at most once. |
steps | Array<StepNode> | yes | intent | intent — the data chain, legal only on method: createObject. |
objects | Array<ObjectNode> | yes | intent | intent — the nested children, legal only on method: createBlock. |
ParameterNode
One parameters[] entry — a named value binding. key is required: the name every expression resolves it by.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { ParameterMethod } from "./ParameterMethod.js";
/**
* One `parameters[]` entry — a named value binding. `key` is required: the
* name every expression resolves it by.
*/
export type ParameterNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display text, printed verbatim; absent falls
* back to `key`.
*/
label?: string,
/**
* intent — which of the 13 value methods this parameter binds.
*/
method: ParameterMethod,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display text, printed verbatim; absent falls back to key. |
method | ParameterMethod | no | intent | intent — which of the 13 value methods this parameter binds. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
PatternNode
A patterns[] entry: identity key, plus steps — one lineFamily step per drawn family, non-empty (enforced post-deserialize, see crate::validate) — plus a properties list carrying only attributes.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddPatternMethod } from "./AddPatternMethod.js";
import type { Argument } from "./Argument.js";
import type { PatternStepNode } from "./PatternStepNode.js";
import type { PropertyNode } from "./PropertyNode.js";
/**
* A `patterns[]` entry: identity `key`, plus `steps` — one `lineFamily`
* step per drawn family, non-empty (enforced post-deserialize, see
* `crate::validate`) — plus a `properties` list carrying only `attributes`.
*/
export type PatternNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor-chrome display name, printed verbatim.
*/
label?: string,
/**
* intent — the one closed-literal patterns-lane head.
*/
method: AddPatternMethod,
/**
* intent — this head takes no args; kept for NODE LAW shape parity.
*/
args?: Array<Argument>,
/**
* intent — one `lineFamily` step per drawn family, non-empty.
*/
steps: Array<PatternStepNode>,
/**
* intent — `attributes` only.
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor-chrome display name, printed verbatim. |
method | AddPatternMethod | no | intent | intent — the one closed-literal patterns-lane head. |
args | Array<Argument> | yes | intent | intent — this head takes no args; kept for NODE LAW shape parity. |
steps | Array<PatternStepNode> | no | intent | intent — one lineFamily step per drawn family, non-empty. |
properties | Array<PropertyNode> | yes | intent | intent — attributes only. |
ViewNode
A views[] entry — {key, method, args?, properties?}, the same node shape a materials/layers entry carries: ONE method, view, taking position/target/up, projection ('perspective' | 'orthographic', default 'perspective'), and both lenses — fov (perspective) and height (orthographic) — may be stored at once; only the active projection's lens is read at evaluate. properties carries display style (background/shading/exposure/shadows/axes).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { PropertyNode } from "./PropertyNode.js";
import type { ViewMethod } from "./ViewMethod.js";
/**
* A `views[]` entry — `{key, method, args?, properties?}`, the same node
* shape a materials/layers entry carries: ONE method, `view`, taking
* `position`/`target`/`up`, `projection` (`'perspective'` | `'orthographic'`,
* default `'perspective'`), and both lenses — `fov` (perspective) and
* `height` (orthographic) — may be stored at once; only the active
* projection's lens is read at evaluate. `properties` carries display
* style (`background`/`shading`/`exposure`/`shadows`/`axes`).
*/
export type ViewNode = {
/**
* identity — unique in the document's one key namespace, every lane.
*/
key: string,
/**
* intent — editor chrome, printed VERBATIM (not an expression).
*/
label?: string,
/**
* intent — the one closed-literal views-lane head, `view`.
*/
method: ViewMethod,
/**
* intent — the pose args (`position`/`target`/`up`), `projection`, and
* both lenses (`fov`/`height`).
*/
args?: Array<Argument>,
/**
* intent — display style (`background`/`shading`/`exposure`/`shadows`/`axes`).
*/
properties?: Array<PropertyNode>, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — unique in the document's one key namespace, every lane. |
label | string | yes | intent | intent — editor chrome, printed VERBATIM (not an expression). |
method | ViewMethod | no | intent | intent — the one closed-literal views-lane head, view. |
args | Array<Argument> | yes | intent | intent — the pose args (position/target/up), projection, and both lenses (fov/height). |
properties | Array<PropertyNode> | yes | intent | intent — display style (background/shading/exposure/shadows/axes). |
Argument
One value + its domain — the shape of every arg (a parameter's value, a step arg, a properties arg). min/max are numeric-only; options, when present, is the arg's whole domain.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* One value + its domain — the shape of every arg (a parameter's value, a
* step arg, a properties arg). `min`/`max` are numeric-only; `options`, when
* present, is the arg's whole domain.
*/
export type Argument = {
/**
* identity — the arg's name, unique among its owning node's `args`.
*/
key: string,
/**
* geometry — an expression string; may be empty (an unselected file
* parameter authors nothing, so this arg's min/max/options do not apply).
*/
input: string,
/**
* intent — expression → number, inclusive lower bound.
*/
min?: string,
/**
* intent — expression → number, inclusive upper bound.
*/
max?: string,
/**
* intent — expression → non-empty array, the arg's whole domain.
*/
options?: string, };| field | type | optional | class | doc |
|---|---|---|---|---|
key | string | no | identity | identity — the arg's name, unique among its owning node's args. |
input | string | no | geometry | geometry — an expression string; may be empty (an unselected file parameter authors nothing, so this arg's min/max/options do not apply). |
min | string | yes | intent | intent — expression → number, inclusive lower bound. |
max | string | yes | intent | intent — expression → number, inclusive upper bound. |
options | string | yes | intent | intent — expression → non-empty array, the arg's whole domain. |
ComponentMethod
The two components-lane methods, a closed pair: createComponent holds the component document inline (data), loadComponent names a platform model the host resolves (id). Both evaluate to a ModelJson.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The two components-lane methods, a closed pair: `createComponent` holds
* the component document inline (`data`), `loadComponent` names a
* platform model the host resolves (`id`). Both evaluate to a `ModelJson`.
*/
export type ComponentMethod = "createComponent" | "loadComponent";Values: "createComponent", "loadComponent".
AddLayerMethod
The one layers-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one layers-lane head method.
*/
export type AddLayerMethod = "addLayer";Values: "addLayer".
PropertyNode
One entry of a properties list — { method, args? }, OPEN at the shape tier: which methods are legal in which home is a registry check (crate::validate::registry), never a schema enum.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One entry of a `properties` list — `{ method, args? }`, OPEN at the shape
* tier: which methods are legal in which home is a registry check
* (`crate::validate::registry`), never a schema enum.
*/
export type PropertyNode = {
/**
* intent — the registry-checked property method.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
method | string | no | intent | intent — the registry-checked property method. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
AddMaterialMethod
The one materials-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one materials-lane head method.
*/
export type AddMaterialMethod = "addMaterial";Values: "addMaterial".
Environment
The light that has no place in space — the sun, sky and an HDRI. ONE per document. The sun is DERIVED from site + moment, never authored.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { EnvironmentHdri } from "./EnvironmentHdri.js";
import type { Site } from "./Site.js";
import type { SunMoment } from "./SunMoment.js";
/**
* The light that has no place in space — the sun, sky and an HDRI. ONE per
* document. The sun is DERIVED from `site` + `moment`, never authored.
*/
export type Environment = {
/**
* intent — where the model stands on Earth; absent means `sun_lux`/
* `sun_kelvin` name the sun directly with no site to derive it from.
*/
site?: Site,
/**
* intent — the moment the sun is computed for.
*/
moment?: SunMoment,
/**
* intent — sun illuminance in lux; absent lets `site`+`moment` derive it.
*/
sunLux?: number,
/**
* intent — sun color temperature in kelvin; absent = the resolver's default.
*/
sunKelvin?: number,
/**
* intent — the sky-fill color; absent = the resolver's default.
*/
skyColor?: string,
/**
* intent — the ground-fill color; absent = the resolver's default.
*/
groundColor?: string,
/**
* intent — sky illuminance in lux; absent = the resolver's default.
*/
skyLux?: number,
/**
* intent — image-based lighting; absent = the host's neutral built-in room.
*/
hdri?: EnvironmentHdri, };| field | type | optional | class | doc |
|---|---|---|---|---|
site | Site | yes | intent | intent — where the model stands on Earth; absent means sun_lux/ sun_kelvin name the sun directly with no site to derive it from. |
moment | SunMoment | yes | intent | intent — the moment the sun is computed for. |
sunLux | number | yes | intent | intent — sun illuminance in lux; absent lets site+moment derive it. |
sunKelvin | number | yes | intent | intent — sun color temperature in kelvin; absent = the resolver's default. |
skyColor | string | yes | intent | intent — the sky-fill color; absent = the resolver's default. |
groundColor | string | yes | intent | intent — the ground-fill color; absent = the resolver's default. |
skyLux | number | yes | intent | intent — sky illuminance in lux; absent = the resolver's default. |
hdri | EnvironmentHdri | yes | intent | intent — image-based lighting; absent = the host's neutral built-in room. |
UnitConfig
length is REQUIRED, no default: validate is not a normalizer.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { LengthUnit } from "./LengthUnit.js";
/**
* `length` is REQUIRED, no default: validate is not a normalizer.
*/
export type UnitConfig = {
/**
* intent — the display/input unit a surface shows length values in.
*/
length: LengthUnit, };| field | type | optional | class | doc |
|---|---|---|---|---|
length | LengthUnit | no | intent | intent — the display/input unit a surface shows length values in. |
ObjectMethod
The two structural object methods, a closed enum — Object admits only steps (a data chain), Block admits only objects (a nest). A record producer (dimensionLinear/hatch/sectionPlane/…) is no longer a third object-tier shape: it is an ordinary steps[] producer step.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The two structural object methods, a closed enum — `Object` admits only
* `steps` (a data chain), `Block` admits only `objects` (a nest). A record
* producer (`dimensionLinear`/`hatch`/`sectionPlane`/…) is no longer a
* third object-tier shape: it is an ordinary `steps[]` producer step.
*/
export type ObjectMethod = "createObject" | "createBlock";Values: "createObject", "createBlock".
StepNode
One step of a data-streaming chain — no key (nothing references a step; a reference names an object) and no enabled (every arg is already an expression).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
/**
* One step of a data-streaming chain — no key (nothing references a step;
* a reference names an object) and no `enabled` (every arg is already an
* expression).
*/
export type StepNode = {
/**
* intent — editor-chrome display text for this step, printed verbatim;
* absent falls back to the registry's friendly name for `method`.
*/
label?: string,
/**
* intent — the catalog method this step invokes.
*/
method: string,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
label | string | yes | intent | intent — editor-chrome display text for this step, printed verbatim; absent falls back to the registry's friendly name for method. |
method | string | no | intent | intent — the catalog method this step invokes. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ParameterMethod
The 13 value methods a parameters[] entry may bind — a closed list (AGENTS.md "H8"), unlike StepNode.method: the catalog closes that one, data not a type, because a chain step's method set is open-ended (catalog::NODES); a parameter's is exactly these 13.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The 13 value methods a `parameters[]` entry may bind — a closed list
* (AGENTS.md "H8"), unlike `StepNode.method`: the catalog closes that one,
* data not a type, because a chain step's method set is open-ended
* (`catalog::NODES`); a parameter's is exactly these 13.
*/
export type ParameterMethod = "length" | "lengths" | "number" | "integer" | "angle" | "boolean" | "color" | "text" | "url" | "object" | "curve" | "surface" | "function";Values: "length", "lengths", "number", "integer", "angle", "boolean", "color", "text", "url", "object", "curve", "surface", "function".
AddPatternMethod
The one patterns-lane head method.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one patterns-lane head method.
*/
export type AddPatternMethod = "addPattern";Values: "addPattern".
PatternStepNode
One patterns[].steps entry — a drawn line family. Carries the same shape as StepNode (H9): a pattern step is a step.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Argument } from "./Argument.js";
import type { LineFamilyMethod } from "./LineFamilyMethod.js";
/**
* One `patterns[].steps` entry — a drawn line family. Carries the same
* shape as `StepNode` (H9): a pattern step is a step.
*/
export type PatternStepNode = {
/**
* intent — editor chrome, verbatim; no UI reads it yet.
*/
label?: string,
/**
* intent — the one closed-literal pattern-step method.
*/
method: LineFamilyMethod,
/**
* intent — the method's arguments.
*/
args?: Array<Argument>, };| field | type | optional | class | doc |
|---|---|---|---|---|
label | string | yes | intent | intent — editor chrome, verbatim; no UI reads it yet. |
method | LineFamilyMethod | no | intent | intent — the one closed-literal pattern-step method. |
args | Array<Argument> | yes | intent | intent — the method's arguments. |
ViewMethod
The one views-lane head method, a closed enum — a view is ONE node, not a chain: method is fixed to view, and its projection ARG (not the method) picks perspective or orthographic. SketchUp Sketchup::Camera is ONE class for both projections (perspective?/perspective=; fov "only applicable to perspective cameras"; height "only valid if it is not a perspective camera" — https://ruby.sketchup.com/Sketchup/Camera.html). Blender's bpy.types.Camera is the same shape: one type enum ('PERSP'/'ORTHO'/'PANO') plus BOTH lens fields present at once — lens ("Perspective Camera lens value in millimeters") and ortho_scale ("Orthographic Camera scale (similar to zoom)") — https://docs.blender.org/api/current/bpy.types.Camera.html.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one views-lane head method, a closed enum — a view is ONE node, not
* a chain: `method` is fixed to `view`, and its `projection` ARG (not the
* method) picks perspective or orthographic. SketchUp `Sketchup::Camera` is
* ONE class for both projections (`perspective?`/`perspective=`; `fov`
* "only applicable to perspective cameras"; `height` "only valid if it is
* not a perspective camera" — https://ruby.sketchup.com/Sketchup/Camera.html).
* Blender's `bpy.types.Camera` is the same shape: one `type` enum
* (`'PERSP'`/`'ORTHO'`/`'PANO'`) plus BOTH lens fields present at once —
* `lens` ("Perspective Camera lens value in millimeters") and
* `ortho_scale` ("Orthographic Camera scale (similar to zoom)") —
* https://docs.blender.org/api/current/bpy.types.Camera.html.
*/
export type ViewMethod = "view";Values: "view".
EnvironmentHdri
Image-based lighting. Absent = the host's neutral built-in room. Exactly one of parameter/url is set (checked post-deserialize, validate::lanes::environment_errors) — H6: the old single name field told the two apart by sniffing https:/data:, an implicit pairing.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Image-based lighting. Absent = the host's neutral built-in room. Exactly
* one of `parameter`/`url` is set (checked post-deserialize,
* `validate::lanes::environment_errors`) — H6: the old single `name` field
* told the two apart by sniffing `https:`/`data:`, an implicit pairing.
*/
export type EnvironmentHdri = {
/**
* identity — the KEY of a `url`-method parameter (checked at validate).
*/
parameter?: string,
/**
* identity — a direct https:/data: address.
*/
url?: string,
/**
* intent — absent = the resolver's own default intensity.
*/
intensity?: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
parameter | string | yes | identity | identity — the KEY of a url-method parameter (checked at validate). |
url | string | yes | identity | identity — a direct https:/data: address. |
intensity | number | yes | intent | intent — absent = the resolver's own default intensity. |
Site
Where the model stands on Earth.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* Where the model stands on Earth.
*/
export type Site = {
/**
* geometry — degrees north of the equator (WGS84); negative is south.
*/
latitude: number,
/**
* geometry — degrees east of Greenwich (WGS84); negative is west.
*/
longitude: number,
/**
* intent — compass bearing of the model's +Y axis, degrees clockwise
* from true north. Absent = 0 (+Y points true north).
*/
northAngle?: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
latitude | number | no | geometry | geometry — degrees north of the equator (WGS84); negative is south. |
longitude | number | no | geometry | geometry — degrees east of Greenwich (WGS84); negative is west. |
northAngle | number | yes | intent | intent — compass bearing of the model's +Y axis, degrees clockwise from true north. Absent = 0 (+Y points true north). |
SunMoment
The moment the sun is computed for — a document FACT, never the wall clock. hour is local solar time. A moment carries no year, so February closes at 28 (crate::document::vocabulary::days_in_month).
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The moment the sun is computed for — a document FACT, never the wall
* clock. `hour` is local solar time. A moment carries no year, so February
* closes at 28 (`crate::document::vocabulary::days_in_month`).
*/
export type SunMoment = {
/**
* intent — 1-12.
*/
month: number,
/**
* intent — 1-31, clamped to the month's real length (no year, so
* February always closes at 28).
*/
day: number,
/**
* intent — local solar time, 0-24.
*/
hour: number, };| field | type | optional | class | doc |
|---|---|---|---|---|
month | number | no | intent | intent — 1-12. |
day | number | no | intent | intent — 1-31, clamped to the month's real length (no year, so February always closes at 28). |
hour | number | no | intent | intent — local solar time, 0-24. |
LengthUnit
The display/input unit a surface shows length values in. The document's numbers are ALWAYS millimetres; this names only the edge conversion. DERIVED from LENGTH_UNITS (document/vocabulary.rs) — the same five units, as a closed enum instead of a string list.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The display/input unit a surface shows length values in. The document's
* numbers are ALWAYS millimetres; this names only the edge conversion.
* DERIVED from `LENGTH_UNITS` (`document/vocabulary.rs`) — the same five
* units, as a closed enum instead of a string list.
*/
export type LengthUnit = "mm" | "cm" | "m" | "in" | "ft";Values: "mm", "cm", "m", "in", "ft".
LineFamilyMethod
The one pattern-lane step method, a closed literal.
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
/**
* The one pattern-lane step method, a closed literal.
*/
export type LineFamilyMethod = "lineFamily";Values: "lineFamily".