Tier C
RN-universal RadioGroup pilot
ScaffoldedSingle-select list. Root holds value in state (controlled or uncontrolled). Items consume value via React context. accessibilityRole='radiogroup' on the root; accessibilityRole='radio' + accessibilityState.checked on each item.
Side-by-side: controlled
shadcn (Radix RadioGroup)
RN (Pressable + context via RN Web)
daily
weekly
monthly
Shared state: selecting on either surface updates both.
Rich option cards
Basic
Up to 100 students · email support
Pro
Up to 1,000 students · priority support
Enterprise
Unlimited · dedicated success manager
Selected plan: pro
Disabled item
Available option A
Available option B
Unavailable (disabled)
Semantics
| Aspect | shadcn | RN | Notes |
|---|---|---|---|
| Root role | implicit on Radix root | accessibilityRole="radiogroup" | Root announces as a group |
| Item role | role="radio" via Radix | accessibilityRole="radio" | Role parity |
| Selection | Radix orchestrates focus | React context holds value | Native parity — context works everywhere |
| Controlled | value + onValueChange | same | API parity |
| Keyboard | arrow keys move selection | inherits RN Web keyboard handling on Pressable | Native keyboard nav: Phase 7 |