# `PoseInput`

> 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.

Type · `import type { PoseInput } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 1. Basics

A pose to write, with at most one rotation: `rotationDeg` or `quaternion`, never both (a type
error; an untyped call with both rejects HoloInputError 'rotation-twice'). A [`Pose`](Pose.md) read carries
both, so it is not a PoseInput: copy `{ position, quaternion, scale }` from it (see [`Pose`](Pose.md)).
Omitted fields keep the current value as a [`Pose`](Pose.md) read shows it (one decomposition: a mirror on
y or z as −1 on `scale.x` with a half-turn in the rotation), so a rotation-only write built from
a read keeps a mirror. A positive absolute `scale` on a mirrored part names its rotation too,
or the read's half-turn stays and the mirror goes.

## Declaration

```ts
export type PoseInput = {
  position?: Point3;
  scale?: Point3 | number;
} & ({
  rotationDeg?: Point3;
  quaternion?: never;
} | {
  quaternion?: Quat;
  rotationDeg?: never;
});
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `PoseInput` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | not recorded: no ledger row names this member or its owner |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
