# `` _(no submodules)_ ## Purpose Read-only 7-segment / LCD-style readout for the control surface. The component is a typed information sink: it accepts a discriminated `mode` (`numeric` | `text` | `scrolling`) and renders the appropriate visualisation. Although `` implements the same `BoundControlProps` contract as input controls (so it can drop into the same schema slots), it never emits `onChange` — the display is pure output. ## Features - Three modes (`numeric` with precision + optional units, `text`, `scrolling` with CSS-keyframe overflow scroll). - Scrolling mode honours `prefers-reduced-motion` by disabling the animation via a `@media` block injected alongside the keyframes. - `role="status"` with `aria-live="polite"` so screen readers receive numeric updates without taking focus. - A hidden screen-reader-only span echoes the numeric / text content outside the clipped visual area, so SR users get the full value even when the visible LCD is too short. - CSS-variable theming: `--cs-display-font`, `--cs-display-color`, `--cs-display-bg`. - NaN / Infinity render as `—` (em-dash). ## Usage: Basic ```tsx import { DigitalDisplay } from "@suaveplan/react-control-surface"; export function TempoReadout({ bpm }: { bpm: number }) { return ( undefined} label="Tempo" /> ); } ``` ## Usage: Advanced A patch-name readout that scrolls when the patch name is longer than the LCD window: ```tsx import { DigitalDisplay } from "@suaveplan/react-control-surface"; export function PatchName({ name }: { name: string }) { return ( undefined} widthPx={160} heightPx={28} label="Patch Name" /> ); } ``` ## API Reference | Prop | Type | Default | | ----------- | ----------------------------------------------------------------- | -------- | | `mode` | `{kind: "numeric" \| "text" \| "scrolling", ...}` | required | | `value` | `number` | required | | `min`/`max` | `number` | required | | `onChange` | `(v: number) => void` | required | | `disabled` | `boolean` | `false` | | `label` | `string` | — | | `ariaLabel` | `string` | — | | `widthPx` | `number` | `120` | | `heightPx` | `number` | `32` | | `className` | `string` | — | `numeric` mode adds: `precision?: number` (default 0), `units?: string`. `text` mode adds: `text: string`. `scrolling` mode adds: `text: string`, `speedPxPerSec?: number` (default 30), `windowChars?: number` (default 8). ## Implementation Notes Scrolling mode injects an inline `