# Guide droid

A rotor-lifted visitor guide whose hands and feet ride on coil springs, so one hover-height number flies it and stretches every limb at the same time.

> For the complete index, see [llms.txt](https://robocn.dev/llms.txt). A Markdown version of any page is available by appending `.md` to its URL or by sending an `Accept: text/markdown` header.

## Install

```bash
bunx --bun shadcn@latest add https://robocn.dev/r/guide-droid.json
```

Registry item: `guide-droid` · [`https://robocn.dev/r/guide-droid.json`](https://robocn.dev/r/guide-droid.json)

## Notes

- Front elevation is the view it is drawn in. The shell and the body are surfaces of revolution and the rotor is a disc, so off that axis they are projected solids rather than second drawings; the face is elevation artwork and goes edge-on in profile, which is what a face does.
- Lift is the whole machine: the same number raises the airframe and sets the spring extension, because a machine hanging in the air puts its limbs in tension and one sitting on its feet puts them in compression.
- Illustrative, not simulated: there is no thrust, mass, drag or spring constant, the sway is a drift term rather than an integrated acceleration, and the rotor is drawn rather than solved. Thrust shows in the wash ring, not the blade rate, so the blades never run backwards.
- The grille is a speaker: voice lights bars because it was told to. Nothing here infers state or starts a timer.
- An original archetype — a rotor-lifted guide companion — not a character.

## Usage

```tsx
import { GuideDroid } from "@/components/ui/guide-droid"

<GuideDroid behavior="beckon" blades={2} limbs="coil" onHeightChange={setHeight} />
```

## Props

| name | type | default | description |
| --- | --- | --- | --- |
| `view` | `"plan" | "front" | "profile" | "iso"` | `"front"` | Where the camera stands. One droid, four projections: straight down, straight on, side elevation, or three-quarter from above. |
| `height` | `number` | — | Hover height, 0 on the deck to 1 at altitude. Supplying it stops the loop; the springs stretch with it either way. |
| `behavior` | `"hover" | "beckon" | "settle" | "static"` | `"hover"` | Hover station-keeps with a slow bob and a drift; beckon rises, waves a hand and talks; settle puts the weight back on its feet. |
| `speed` | `number` | `0.4` | Hover cycles per second. |
| `animate` | `boolean` | `true` | Off parks the machine at phase and stops rendering. A reduced-motion preference does the same. |
| `paused` | `boolean` | `false` | Freeze where it stands. |
| `phase` | `number` | `0` | Seconds of offset, so a row of machines breaks step. |
| `interactive` | `boolean` | `true` | Drag it up and down to fly it, or use the arrow keys; Home is the deck and End the ceiling. Release eases it back into the behaviour. |
| `onHeightChange` | `(height: number) => void` | — | The hover height a drag or a key moved it to, reported in controlled mode too. |
| `rotorAngle` | `number` | — | Controlled blade angle in degrees. Omit and the rotor turns on the clock. |
| `voice` | `number` | — | Lit bars in the speaker grille, 0–1, filling out from the middle. Omit and the behaviour works it. |
| `blades` | `number` | `2` | Rotor blades, clamped to 2–6. |
| `limbs` | `"coil" | "strut"` | `"coil"` | Hands and feet on coil springs, or on rigid two-part struts with a visible knuckle. |
| `look` | `Vec2 | null` | `null` | Controlled optic aim in −1..1; overrides pointer tracking. |
| `track` | `boolean` | `true` | The ring optics follow the page pointer while look is null. |
| `variant` | `"solid" | "outline" | "blueprint" | "wire"` | `"solid"` | How the machine is painted. Geometry never changes between variants. |
| `size` | `"xs" | "sm" | "md" | "lg" | "xl" | number` | `"md"` | Rendered width in pixels, or a step on the scale. |
| `showGround` | `boolean` | `true` | Draw the contact line or shadow beneath the droid. |
| `signal` | `"idle" | "ready" | "warning"` | — | Status-lamp state using neutral, accent, or shell colour; each component documents its visual default in the demo. |
| `label` | `string` | — | Optional technical caption under the drawing. |
| `color` | `string` | `var(--robot-shell)` | Body panels — the colour the machine reads as. |
| `accent` | `string` | `var(--robot-accent)` | Status colour: tip light, live tool, readouts. |
| `metal` | `string` | `var(--robot-metal)` | Bare machined parts: collars, bolts, tool bodies. |
| `dark` | `string` | `var(--robot-dark)` | Cast joints, base, shadow side. |
| `palette` | `Partial<RobotPalette>` | — | Override any subset of roles at once, including glow and grid. |

## Source

- `src/components/ui/guide-droid.tsx`
