# Reusable Form Field Component Prompt Create a reusable form field for ``. Inspect the existing form, label, input, select, and React Hook Form patterns before implementation. ## React contract - Support a controlled `value`/`onChange` API unless the native primitive and established form adapter require another pattern. - Forward the appropriate control ref. - Accept `name`, `label`, `description`, `error`, `required`, `disabled`, `className`, and relevant native control attributes. - Generate stable IDs with `useId()` when an ID is not supplied. - Keep validation rules in the parent/schema; render the resulting message. - Define React Hook Form integration: ``. ## Styling theme: clear data entry - Labels are concise and visually connected to their controls. - Controls use `bg-background`, `border-input`, and a strong `ring-ring` focus. - Placeholder and help text use muted foreground, with sufficient contrast. - Error styling uses destructive semantics plus text/icon—not border color alone. - Required, disabled, read-only, success, and loading states are visually distinct. - Spacing remains consistent whether help or error text is present. ## Accessibility behavior - Label and control are programmatically associated. - Help/error IDs are connected through `aria-describedby`. - Invalid controls set `aria-invalid`. - Required state is communicated to assistive technology. - Keyboard behavior follows the native element or selected accessible primitive. ## Acceptance criteria 1. The field works standalone and in the repository's established form pattern. 2. Help text is replaced or accompanied by a useful validation message. 3. Layout does not jump unexpectedly when validation appears. 4. Autofill, focus, disabled, and dark-mode styles remain readable. 5. The component contains no domain API or submission logic. Run focused linting allowed by the repository instructions and finish with a simple **TL;DR**.