# `Part`

> 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 { Part } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 6. Queries, rules and parts

One part of a loaded model or a collection. Reads are sync; each names its read class.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="id"></a>[`id`](Part.id.md) | property | Authored: `extras.holostep.id`, else the cleaned node name (a primitive part's: its cleaned mesh name, see [`Query`](Query.md)); for collection items, the item key (the item's root part is addressed … |
| <a id="name"></a>[`name`](Part.name.md) | property | Authored: the glTF node name (a primitive part's: its glTF mesh's name), or the item's `name`. |
| <a id="kind"></a>[`kind`](Part.kind.md) | property | Authored: what the part is. |
| <a id="source"></a>[`source`](Part.source.md) | property | Authored: whether it comes from a loaded model or a collection. |
| <a id="node"></a>[`node`](Part.node.md) | property | The ModelNode `nodeId`, for model parts. |
| <a id="collection"></a>[`collection`](Part.collection.md) | property | The collection's name, for collection parts. |
| <a id="key"></a>[`key`](Part.key.md) | property | The item key, for collection parts: the item's root part and every part below it carry it. |
| <a id="role"></a>[`role`](Part.role.md) | property | The role of its collection; 'product' for model parts, which cast and don't receive shadows until a rule says otherwise ([`PartState.shadows`](PartState.shadows.md)). |
| <a id="tags"></a>[`tags`](Part.tags.md) | property | Authored or creation-time tags. |
| <a id="slot"></a>[`slot`](Part.slot.md) | property | Authored: the material slot of a mesh; null for other kinds. |
| <a id="meta"></a>[`meta`](Part.meta.md) | property | Creation-time labels (collection items); empty for model parts. |
| <a id="parent"></a>[`parent`](Part.parent.md) | property | The parent part; null at the top of a model or a collection. |
| <a id="children"></a>[`children`](Part.children.md) | property | The child parts, in document order. |
| <a id="exists"></a>[`exists`](Part.exists.md) | property | False while the part is not loaded or once it is removed or disposed. |
| <a id="visible"></a>[`visible`](Part.visible.md) | property | Intent read. |
| <a id="pose"></a>[`pose`](Part.pose.md) | property | Local pose. |
| <a id="worldpose"></a>[`worldPose`](Part.worldPose.md) | property | Derived: computed on read from the parent chain, animated parts at their observed pose, preparing writes at their intent. |
| <a id="restpose"></a>[`restPose`](Part.restPose.md) | property | Authored: the pose as loaded, before rules and clips. |
| <a id="material"></a>[`material`](Part.material.md) | property | The material worn now (meshes). |

Inherited from [`PartActions`](PartActions.md): [`set`](PartActions.set.md), [`bounds`](PartActions.bounds.md), [`find`](PartActions.find.md), [`follow`](PartActions.follow.md).

## Declaration

```ts
export interface Part<C extends object = NoCommitOptions> extends PartActions<C> {
  readonly id: string;
  readonly name: string;
  readonly kind: 'group' | 'mesh' | 'joint' | 'light' | 'lines' | 'label' | 'other';
  readonly source: 'model' | 'collection' | 'other';
  readonly node: string | null;
  readonly collection: string | null;
  readonly key: string | null;
  readonly role: Role | 'other';
  readonly tags: readonly string[];
  readonly slot: string | null;
  readonly meta: Readonly<Record<string, JsonPrimitive>>;
  readonly parent: Part<C> | null;
  readonly children: readonly Part<C>[];
  readonly exists: boolean;
  readonly visible: boolean;
  readonly pose: Pose;
  readonly worldPose: Pose;
  readonly restPose: Pose;
  readonly material: Material<C> | null;
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `Part` names no product |
| 2. A precedent | pass: [DOM Document.getElementById](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById) (row `G31`) |
| 3. Two apps, or labs | pass: 28 apps (ledger: app-04c2774145, app-b362a81c85, app-c1384707fc, app-f9a32142f1, app-fc306ec3dc; fleet cross-check: app-04c2774145, app-0c773a4ee3, app-37356bf09f, app-378d190f1b, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508 and 20 more) |
| 4. The cheaper fix first | decided per need in Appendix B: rows `G31` at tier stable (a member only where no rule, data, asset or app code serves the need) |
