# `CameraLimits`

> 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 { CameraLimits } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 10. Camera

A JSON Merge Patch (RFC 7396) over your app limits, which lie over the document's. A field you
omit keeps its value; `null` removes your value, so the document's shows. App limits are sticky:
no automatic rule rewrites them.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="mindistance"></a>[`minDistance?`](CameraLimits.minDistance.md) | property | Metres. |
| <a id="maxdistance"></a>[`maxDistance?`](CameraLimits.maxDistance.md) | property | Metres. |
| <a id="maxdistancefit"></a>[`maxDistanceFit?`](CameraLimits.maxDistanceFit.md) | property | Caps the distance at this multiple of the sphere-fit distance r / sin(h): r is half the diagonal of the role 'product' bounds box (or of what the last `fit` framed), h the smaller horizontal or vertical half field of… |
| <a id="minpolardeg"></a>[`minPolarDeg?`](CameraLimits.minPolarDeg.md) | property | Degrees in [0, 180]; 0 = from above. |
| <a id="maxpolardeg"></a>[`maxPolarDeg?`](CameraLimits.maxPolarDeg.md) | property | Degrees in [0, 180]; see `minPolarDeg`. |
| <a id="minazimuthdeg"></a>[`minAzimuthDeg?`](CameraLimits.minAzimuthDeg.md) | property | Degrees. |
| <a id="maxazimuthdeg"></a>[`maxAzimuthDeg?`](CameraLimits.maxAzimuthDeg.md) | property | Degrees; see `minAzimuthDeg`. |
| <a id="target"></a>[`target?`](CameraLimits.target.md) | property | The orbit target stays inside this box. |
| <a id="collision"></a>[`collision?`](CameraLimits.collision.md) | property | The camera keeps 0.08 m clear of pickable product and scenery parts, as 1.x's collision plugin (`bufferDistance`, viewer/plugins/camera-collision-plugin.ts:193 at eb5ce2afe): the shopper's orbit, pan, dolly, wheel and… |
| <a id="touchpaddollyscale"></a>[`touchpadDollyScale?`](CameraLimits.touchpadDollyScale.md) | property | Dolly speed for touchpad pinch, relative to wheel. |
| <a id="panaxes"></a>[`panAxes?`](CameraLimits.panAxes.md) | property | Which screen axes a pan moves the orbit target along. |
| <a id="rotatespeed"></a>[`rotateSpeed?`](CameraLimits.rotateSpeed.md) | property | Orbit speed on both axes, a multiplier. |
| <a id="dollyspeed"></a>[`dollySpeed?`](CameraLimits.dollySpeed.md) | property | Wheel and pinch dolly speed; `touchpadDollyScale` multiplies it for a touchpad, and `coarsePointerDollyScale` on a coarse pointer. |
| <a id="panspeed"></a>[`panSpeed?`](CameraLimits.panSpeed.md) | property | Pan speed; `coarsePointerPanScale` multiplies it on a coarse pointer. |
| <a id="coarsepointerdollyscale"></a>[`coarsePointerDollyScale?`](CameraLimits.coarsePointerDollyScale.md) | property | On a device whose primary pointer is coarse (the `(pointer: coarse)` media query: a phone or a tablet), `dollySpeed` is multiplied by this. |
| <a id="coarsepointerpanscale"></a>[`coarsePointerPanScale?`](CameraLimits.coarsePointerPanScale.md) | property | As `coarsePointerDollyScale`, for `panSpeed`. |
| <a id="dollytocursor"></a>[`dollyToCursor?`](CameraLimits.dollyToCursor.md) | property | A dolly moves toward the point under the pointer, not the view's centre. |
| <a id="gestures"></a>[`gestures?`](CameraLimits.gestures.md) | property · labs | How the view shares touch and the wheel with the page. |

## Declaration

```ts
export interface CameraLimits {
  minDistance?: number | null;
  maxDistance?: number | null;
  maxDistanceFit?: number | null;
  minPolarDeg?: number | null;
  maxPolarDeg?: number | null;
  minAzimuthDeg?: number | null;
  maxAzimuthDeg?: number | null;
  target?: {
    min: Point3;
    max: Point3;
  } | null;
  collision?: boolean | null;
  touchpadDollyScale?: number | null;
  panAxes?: 'both' | 'horizontal' | 'none' | null;
  rotateSpeed?: number | null;
  dollySpeed?: number | null;
  panSpeed?: number | null;
  coarsePointerDollyScale?: number | null;
  coarsePointerPanScale?: number | null;
  dollyToCursor?: boolean | null;
  gestures?: 'greedy' | 'cooperative' | null;
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `CameraLimits` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | pass: 26 apps (fleet cross-check: app-04c2774145, app-37356bf09f, app-378d190f1b, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508, app-59c5b5751e and 18 more) |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
