Labs ​

Contract 2.0.0 · package sha256 a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e · generated from configurator-runtime.d.ts by services/onsite-scripter/scripts/build-contract-docs.mjs; edit the source, not this file.

Interface · import type { Labs } from '@holostep-configurators/runtime-client/contract'; · labs · since 2.0.0 · section 20. Labs

Members that serve one app or wrap an engine-shaped capability. Their rows block the release exactly like stable rows. They graduate (the labs. prefix is removed by a codemod) when a second app uses them.

Members ​

Member Kind Summary
geometry property Read and write vertex data of loaded and created meshes.
skin method Skins a collection mesh to a model's skeleton; it then follows that model's clips.
decal method A decal on the matched surfaces, owned by owner: an item of that collection under a key the runtime makes, so its part has the owner's role and collection.
fire method Volumetric fire, owned by owner: an item of that collection, so it follows its parent and goes with its owner.
lightLinking method The light stops reaching the parts except matches; every other part stays lit by it.
mirror method A geometry mirror of models and collections about the world plane x = 0.
prefetch method Fetches into the browser cache what a write naming these nodes would load on this device and quality tier: a ModelNode with its active descendants; a MaterialNode's maps, using the optimized twin where the runtime would.
shading property Typed MaterialX shading graphs (a fabric grade, a wood grain).

Declaration ​

ts
export interface Labs<C extends object = NoCommitOptions> {
  readonly geometry: {
    read(query: Query, attributes: readonly GeometryAttribute[], options?: {
      from?: 'authored' | 'current';
      signal?: AbortSignal;
    }): Promise<GeometryData<C>[]>;
    write(query: Query, data: GeometryWrite | null, options?: C & SignalOption): Promise<Report>;
  };
  skin(part: Part, binding: SkinBinding, options?: C & SignalOption): Promise<Report>;
  decal(target: Query, spec: DecalSpec, options: {
    owner: Collection;
    signal?: AbortSignal;
  }): Promise<Part<C>>;
  fire(spec: FireSpec, placement: Placement & {
    owner: Collection;
  }): Promise<Part<C>>;
  lightLinking(light: Part, except: Query, options?: {
    signal?: AbortSignal;
  }): () => void;
  mirror(axis: 'x' | null, options: C & SignalOption & {
    owner: Collection;
  }): Promise<Report>;
  prefetch(nodes: readonly (string | DeepReadonly<ConfiguratorNode>)[], options?: SceneModelOptions): Promise<void>;
  readonly shading: {
    graph<U extends Record<string, ShadingUniformType>>(uniforms: U, build: (n: ShadingNodes<U>) => ShadingOutputs, options: {
      owner: Collection;
    }): Shading<U>;
  };
}

Generic-API test (spec 3.1) ​

Rule Result
1. Neutral name pass: Labs names no product
2. A precedent not recorded: no ledger row (coverage.json) names this member or its owner
3. Two apps, or labs labs: it graduates when a second app uses it
4. The cheaper fix first not recorded per member (Appendix B decides it per need)