# `Input`

> 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 { Input } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 11. Input and drag

Picking, raycasts and drags on the canvas.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="pick"></a>[`pick`](Input.pick.md) | method | Observed (GPU or BVH work). |
| <a id="raycast"></a>[`raycast`](Input.raycast.md) | method | Observed. |
| <a id="drag"></a>[`drag`](Input.drag.md) | method | Makes parts draggable. |
| <a id="startdrag"></a>[`startDrag?`](Input.startDrag.md) | method · labs | Starts a drag from a pointer that is already down (a long press). |
| <a id="revert"></a>[`revert?`](Input.revert.md) | method · labs | `commit: 'app'` only: show the scene model's pose again (a refused drop). |

## Declaration

```ts
export interface Input {
  pick(at: ScreenPoint, options?: PickOptions): Promise<Hit | null>;
  raycast(ray: Ray, options?: RaycastOptions): Promise<Hit[]>;
  drag(query: Query, options: DragOptions): () => void;
  startDrag?(part: Part, from: {
    pointerId: number;
    at: ScreenPoint;
  }): void;
  revert?(part: Part): void;
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `Input` 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: 5 apps (fleet cross-check: app-04c2774145, app-37356bf09f, app-4762caacdc, app-e61a0b42ad, app-fc306ec3dc) |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
