Tier D1
RN-universal Textarea pilot
ScaffoldedMulti-line TextInput. Same API shape as RnInput (value/onChangeText/disabled/invalid). On web, RN Web renders a real <textarea> via multiline={true}; on native, TextInput auto-grows per rows.
Side-by-side: controlled
shadcn (native textarea)
RN (TextInput via RN Web)
Shared state — edits on either surface update both.
States
Semantics
| Aspect | shadcn | RN | Notes |
|---|---|---|---|
| Element | <textarea> | <TextInput multiline> | RN Web renders a real <textarea> when multiline |
| Change handler | onChange(e) | onChangeText(text) | RN hands back the string directly |
| Disabled | disabled | disabled (→ editable={false}) | Same semantics |
| Invalid | aria-invalid | invalid prop → aria-invalid | Web forwarded |
| Row hint | rows={n} | rows={n} | min-height and row hint both flow from rows |