# Drone fabricator

A free-flying fabricator with no envelope at all. A repulsor platform flies to each cell, rides a fixed standoff above the build line, and banks into its own travel.

> 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/drone-fabricator.json
```

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

## Notes

- Solved: the deposition order, the flight target and the bank, which is taken from how far the platform still has to travel to the next cell. Illustrated: the repulsors — there is no thrust or lift model behind them.
- No frame and no rails, so the reachable volume is bounded by where the platform can fly rather than by an envelope.
- Same field, same deposition order and same build line as the rest of the family.

## Usage

```tsx
import { DroneFabricator } from "@/components/ui/drone-fabricator"

<DroneFabricator shape="vessel" pods={6} behavior="build" />

// Controlled, or a control:
<DroneFabricator progress={0.35} resolution={8} view="front" />
```

## Props

| name | type | default | description |
| --- | --- | --- | --- |
| `shape` | `"sphere" | "block" | "pyramid" | "gear" | "vessel" | "lattice"` | `"vessel"` | Which occupancy field to sample. |
| `resolution` | `number` | `6` | Voxels along one edge, rounded and clamped to 2–14. |
| `progress` | `number` | — | Controlled build fraction, clamped to 0–1. |
| `behavior` | `"build" | "layer" | "refine" | "idle" | "static"` | `"build"` | The shared fabricator cycle. |
| `speed` | `number` | `0.12` | Build 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` | `false` | Drag up and down to lay or strip material; arrow keys step one layer. |
| `onProgressChange` | `(progress: number) => void` | — | The commanded build fraction. |
| `view` | `"plan" | "front" | "profile" | "iso"` | `"iso"` | Where the camera stands. |
| `pods` | `number` | `4` | Repulsor pods around the deck, rounded and clamped to 3–6. The deck tilts with the bank, so a pod on the low side really does sit lower. |
| `showPlate` | `boolean` | `true` | The plate the solid is built on. |
| `showReadout` | `boolean` | `true` | Build percentage and voxel resolution. |
| `showGround` | `boolean` | `true` | Contact shadow, plus the platform's own shadow tracking it across the plate. |
| `signal` | `"idle" | "ready" | "warning"` | — | Pod and deck lamps. Omit them and they light while material is landing. |
| `label` | `string` | — | Caption under the readout. |
| `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. |
| `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/drone-fabricator.tsx`
