import * as React from 'react'; import { useKnobTheme } from '../core/theme'; export interface LampRowItem { label: string; on: boolean; color?: string; } export interface LampRowProps { lamps: readonly LampRowItem[]; /** Lamp diameter in px. Default: 9. */ size?: number; /** Caption font size in px. Default: 9.5. */ labelSize?: number; /** Caption placement relative to each lamp. Default: 'right'. */ labelPosition?: 'right' | 'below'; /** Make lamps clickable (a compact indicator toggle bank). */ onToggle?: (index: number, on: boolean) => void; /** Spacing between lamp cells in px. Default: 14. */ gap?: number; disabled?: boolean; className?: string; style?: React.CSSProperties; 'aria-label'?: string; } /** * A row of small indicator lamps with console-print captions — the * `● CUE ● MUTE` bank hardware panels use, standardized. Read-only status by * default; pass `onToggle` to make the lamps pressable. */ export const LampRow: React.FC = ({ lamps, size = 9, labelSize, labelPosition = 'right', onToggle, gap = 14, disabled = false, className, style, ...aria }) => { const theme = useKnobTheme(); const below = labelPosition === 'below'; const interactive = !!onToggle; return (
{lamps.map((lamp, i) => { const accent = lamp.color ?? theme.accent ?? theme.zoneGood; const dot = (
); };