The native components share their logic with the web Kit (each component's
core/ folder: date and number maths, stores, validation, the agent
contract), and keep the same prop names wherever the platform allows. What
differs follows from React Native itself.
Styling
| Web | Native |
|---|---|
className on the root | style |
classNames={{ slot }} | styles={{ slot }} |
data-state="open" and other data-* | a state object passed to style / styles functions |
--gbs-* CSS variables | the KitProvider theme (Theming) |
theme prop / .dark class | KitProvider colorScheme |
Events
onClickbecomesonPress. An asynconPresson Button shows progress, asonClickdoes on the web.- Value callbacks keep their web names (
onValueChange,onCheckedChange,onChangeon pickers). Text fields also fireonChangeText. - There are no forms: no
name,form,type="submit"or form status.requiredmarks the label and is announced; validation is yours.
Overlays
There is no browser top layer, so Kit has its own:
- Modals, dialogs, sheets and menus render above everything and close on Android back. Their exit animation finishes before they unmount.
- Pickers and menus take a
presentationprop:"sheet"(a bottom sheet),"popover"(anchored to the trigger), or"auto": a sheet below 600dp, a popover on tablets. - Popovers are placed by the same
placePopoverfunction as the web, so flipping and edge rules match. - Toasts float above the app without blocking touches. One fired from inside an open modal appears once the modal closes (known gap).
Touch, keyboard and screen readers
- Touch has no hover: Tooltip shows on long-press.
- Arrow-key navigation (tabs, menus, grids, calendars) is web only. On native, each item is its own target.
- Steppers (NumberInput, time fields) expose increment and decrement actions to VoiceOver and TalkBack.
- Accessibility uses React Native's
roleandaria-*props.descriptionanderrorbecome the accessibility hint, since there is noaria-describedby. - Everything tappable is at least 44dp (
touchTargetin the theme).
Not on native (yet)
- DataGrid is not part of the native edition.
- Typed date entry; pickers are tap-to-pick.
- Agent operability (
AgentSurface, WebMCP) is web only for now; the agent contracts incore/already port. - Passports describe the web props; native props are documented on these pages, generated from the components' TypeScript.
New on native
Mobile patterns with no web counterpart: AppBar, BottomNavigation, Fab & SpeedDial, SegmentedControl, ListItem & List, BottomSheet and SearchBar.