# Strawberry

A berry-shelled field unit: sensor studs placed by the golden angle over equal areas of its own skin, running out along their own normals under a calyx of rigid blades.

> 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/robot-strawberry.json
```

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

## Notes

- The lattice is spaced by surface area, not by the profile's parameter: the cumulative area is integrated along the meridian and stepped through evenly, which is what keeps the studs the same distance apart on a body whose radius changes all the way up.
- Each stud extends along its own surface normal, and is drawn only while that normal faces the camera — so half the skin is honestly missing from every elevation, and it is the studs near the crown that survive into plan view.
- The calyx blades are rigid: their length is exact at every pitch, and they are projected as planar quads rather than redrawn per angle.
- Solved: the profile, the lattice, the normals, the blade hinge, the projection and the hidden-line pass. Illustrated: the pit each stud sits in, and the shoulder line. There is no crop or ripeness model — nothing here senses anything.

## Usage

```tsx
import { RobotStrawberry } from "@/components/ui/robot-strawberry"

<RobotStrawberry bloom={0.8} seeds={32} blades={6} interactive />
```

## Props

| name | type | default | description |
| --- | --- | --- | --- |
| `view` | `"plan" | "front" | "profile" | "iso"` | `"front"` | Where the camera stands. One berry, four projections: straight down, straight on, side elevation, or three-quarter from above. |
| `bloom` | `number` | — | Controlled bloom, 0 furled and seated to 1 splayed and run out. Omit and the calyx runs itself. |
| `behavior` | `"unfurl" | "probe" | "furl" | "static"` | `"unfurl"` | Unfurl opens, works and furls again; probe works the middle of the range with the studs never fully seated; furl stays shut bar the two moments it cracks open. |
| `speed` | `number` | `0.26` | Open-and-furl 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 work the calyx, or focus it and use the arrows: 5 per cent a press, 15 with shift, Home and End furled and splayed. |
| `onBloomChange` | `(bloom: number) => void` | — | Fires on every drag and key press, in controlled mode too. |
| `seeds` | `number` | `26` | Studs on the skin, clamped to 10..48. They are placed by the golden angle over equal areas of surface, so raising the count fills the same skin more finely rather than crowding the top. |
| `blades` | `number` | `6` | Calyx blades, clamped to 3..9. |
| `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/robot-strawberry.tsx`
