ai / frontend /src /components /ui /Field.jsx
Aissugur Kurganbekov
Claude Opus 4.8 (1M context)
UI/UX pass: accessibility, motion, design tokens, and an eval results chart
c412fbd
Raw History Blame Contribute Delete
931 Bytes
// Field primitives: labelled Textarea and Select wrappers.
export function Textarea({ label, error, id, className = "", ...rest }) {
const errId = error && id ? `${id}-err` : error ? "field-err" : undefined;
return (
<label className="field">
{label && <span className="field-label">{label}</span>}
<textarea
id={id}
className={`textarea ${className}`}
aria-invalid={error ? true : undefined}
aria-describedby={errId}
{...rest}
/>
{error && (
<span className="field-error" id={errId} role="alert">
{error}
</span>
)}
</label>
);
}
export function Select({ label, children, className = "", ...rest }) {
return (
<label className="field">
{label && <span className="field-label">{label}</span>}
<select className={`select ${className}`} {...rest}>
{children}
</select>
</label>
);
}