# Step keys

> A − / + pair that moves a point one step from where it is, inside a declared band.

**Step keys** is the − / + pair that nudges a setpoint on a station with a finger and
no keyboard. Each press writes *the point's reading plus one step*, so — unlike the
[Input](component-input)'s keys and the [Selector](component-selector)'s options, which
carry absolute values — the pair has to know the reading first: with nothing to read,
both keys are dead. It is a *Control* component; a new one occupies 4 × 1 cells.

The pair draws no reading of its own; compose a [Value](component-value) beside the
keys if the number should be on screen.

## Data {#data}

| Field | What it does | Values | Default |
|---|---|---|---|
| Address | The rooted Logic address of the moved point: a memory variable or a writable tag. The list is narrowed to writable points. | Free text; writable-point suggestions | empty |

## Format {#format}

| Field | What it does | Values | Default |
|---|---|---|---|
| Decimals | Decimal places a sent value is written with on the answer line — the one number this pair writes out. Blank follows the station's decimal preference. Out-of-band counts are taken at the edge and the panel says so. | 0 to 15, or blank | blank |

## Step {#step}

| Field | What it does | Values | Default |
|---|---|---|---|
| Step | How far one press moves the point. | Any positive finite number | 1 |
| Minimum | Lowest value the pair moves the point to. Blank leaves that side open — an unstated edge is not an edge at infinity, it is simply no edge. | Any number, or blank | blank |
| Maximum | Highest value the pair moves the point to. Blank leaves that side open. A minimum above the maximum leaves no value between them, and the panel warns that neither key would move the point. | Any number, or blank | blank |

## How the band holds a step {#how-the-band-holds-a-step}

- A step past an edge is **taken at that edge**: the operator asked for "one step, as
  far as this goes", which is not the typed number an Input refuses rather than move
  for him.
- A key with nowhere left to go is **disabled** — the point already sits at (or past)
  that edge.
- The band only ever *stops* a key, it never turns one around: a point already past an
  edge (written there by an Action, a recipe, another screen) is not walked back by the
  key pointing further out. The key for the way back in still works, and holds at the
  edge.

## Write semantics {#write-semantics}

Presses accumulate; writes do not pile up. A finger held on **+** can outrun the
plant, so presses arriving while a write is in flight are counted and the next write
carries all of them at once: ten fast touches are ten steps and never ten writes —
nothing asked for is dropped, and nothing not asked for is sent. Within one run, each
step counts from the value just sent, since the plant has not published it yet; the
screen keeps drawing only what the point reports.

Every write goes through the station's single logic funnel; every crossing re-checks
authorization, so a sign-out or role change mid-burst stops the rest of the touches. A
refusal ("This point holds text, so 4 is not a value it takes.") and every sent value
("21.5 written") land on the pair's answer line, which expires after a few seconds.

## Permissions and the lock {#permissions-and-the-lock}

Stepping needs the role permission to operate dashboards. Locked, both keys are
disabled and the component wears the shared lock mark with the reason in its tooltip
(see the [dashboards page](home)). A bound point that fails to read wears the shared
bad-reading mark — and disables the keys either way, since there is nothing to step
from.

The shared Appearance, Identification, Position and layer and Actions sections are
described on the [components page](components#the-shared-property-sections).
