# Hover Design System (React Native) > Hover's Bauhaus design system for React Native. Built on Tamagui. All imports > come from `@hoverinc/design-system-react-native`. Components use Tamagui token > notation (`$400`, `$background`) and ship with light/dark theme support. > **Working on the web build?** This file documents the React Native build > only — see the [React/Chakra artifact](/llms.txt) instead. ## Setup - Package: `@hoverinc/design-system-react-native` - Underlying engine: [Tamagui](https://tamagui.dev/) - Font: Hover Diatype (Regular, Bold, Regular-Italic, Bold-Italic) ```tsx import { DesignSystemProvider, FontScaleProvider, } from '@hoverinc/design-system-react-native'; function App() { return ( ); } ``` `FontScaleProvider` supports OS-level font scaling for accessibility. Wrap the app once, near the root. ## Design Tokens Use Tamagui token strings as prop values — never raw pixel or hex values. Tokens carry a `$` prefix. ### Spacing Used for `padding`, `margin`, `gap`. The same scale also drives `width`, `height`, and other size-shaped props. ```tsx ``` ### Color tokens Always prefer **semantic** tokens — they auto-resolve light and dark mode. Only fall back to raw color tokens (`$primary600`, `$neutral200`) when no semantic equivalent exists. #### Backgrounds `$background`, `$backgroundSecondary`, `$backgroundInvert`, `$backgroundPress`, `$backgroundDisabled`, `$backgroundWeak`, `$backgroundSecondaryInvert` #### Text `$color`, `$colorDimmed`, `$colorDisabled`, `$colorInvert`, `$colorPress` #### Borders and dividers `$borderColor`, `$borderColorPress`, `$divider`, `$selectedBorderColor` #### Status - Error: `$errorColor`, `$errorBackground`, `$errorAccent` - Success: `$successColor`, `$successBackground`, `$successAccent` - Warning: `$warningColor`, `$warningBackground`, `$warningAccent` - Info: `$infoColor`, `$infoBackground`, `$infoAccent` #### Glass `$glassBackground`, `$glassColor`, `$glassAccent`, `$glassBorderStroke`, `$glassBorderPress`, `$glassBorderHighlight` #### Default and selected states `$defaultAccent`, `$defaultBackground`, `$defaultColor`, `$selectedBackground`, `$selectedColor`, `$selectedBorderColor` For exact pixel values per token (spacing, sizes, radius, fonts), see the per-topic detail pages under `/llms-rn/foundation/...`. ## Style Props Always use **verbose** prop names — never Tamagui shorthand: | Prefer | Avoid | | ------------------------ | ------------ | | `padding` | `p` | | `paddingHorizontal` | `px` | | `paddingVertical` | `py` | | `margin`, `marginTop`, … | `m`, `mt`, … | | `width` / `height` | `w` / `h` | | `backgroundColor` | `bg` | | `borderRadius` | `br` | | `alignItems` | `ai` | | `justifyContent` | `jc` | | `flexDirection` | `fd` | ## Components All UI components are imported from `@hoverinc/design-system-react-native`. Layout primitives are re-exported from Tamagui and follow the same import path. ### Forms and inputs `Button`, `IconButton`, `Field`, `InputField`, `FieldSearch`, `FieldPassword`, `TextInput`, `TextArea`, `Checkbox`, `Radio`, `RadioGroup`, `Select`, `SelectNative`, `Toggle`, `BinaryButton`, `BinaryButtonGroup` ### Typography `Heading`, `Body` — always use these instead of raw `` with manual font styles. ### Layout `Stack`, `View`, `XStack`, `YStack`, `ZStack`, `Grid`, `ScrollView`, `FlatList`, `SectionList` ### Feedback `Loader`, `Progress`, `Toast` ### Media `Avatar`, `AvatarGroup`, `Icon`, `Image`, `Logo` ### Overlay `Sheet`, `Popover`, `Menu` ### Decorative `Shadow`, `Glass` For each component's props, variants, and examples, see the matching detail page under `/llms-rn/components/...`. ## Common Patterns ### Vertical stack with consistent spacing ```tsx Title Description text ``` ### Themed semantic surface ```tsx Secondary content ``` ### Error state ```tsx Something went wrong. ``` ## Common Mistakes to Avoid - Don't import from `style-guide/*` — always use `@hoverinc/design-system-react-native` - Don't hardcode hex color values — use semantic tokens (`$color`, `$background`, …) - Don't hardcode pixel values for spacing, sizes, or radius — use Tamagui tokens (`$400`, `$300`, …) - Don't use `StyleSheet.create()` — use Tamagui `styled()` or apply token props directly - Don't use `styled-components/native` — use Tamagui `styled()` from the design system - Don't use raw `` with manual `fontSize`/`fontWeight` — use `` or `` with the `size` prop - Don't use `Box` from `style-guide/layout/Box` — use `View` or `Stack` from the design system - Don't use Tamagui shorthand props (`p`, `bg`, `br`, `ai`, `jc`, `fd`) — always use the verbose names - Don't nest `DesignSystemProvider` — it's a no-op; wrap once near the root ## Detailed References - [Responsive Breakpoints](/llms-rn/foundation/tokens/breakpoints.md): Responsive breakpoint tokens for media queries etc. - [Shadow](/llms-rn/foundation/tokens/shadow.md): Shadow and outline tokens - [Typography](/llms-rn/foundation/tokens/typography.md): Typography tokens - [Badge](/llms-rn/components/data-display/badge.md): Badge component - [Toast](/llms-rn/components/feedback/toast.md): Toasts are used to show alerts on top of an overlay, usually used to give feedback to users after an action has taken place. - [Buttons](/llms-rn/components/forms/button.md): Use buttons to let users perform key actions tied to what they see—submitting a form, opening a modal, or editing content. - [Checkbox](/llms-rn/components/forms/checkbox.md): Checkbox component - [Field](/llms-rn/components/forms/field.md): A comprehensive input field component for React Native with label, validation, and addon support - [IconButton](/llms-rn/components/forms/icon-button.md): Button component that uses an icon for its label - [Radio](/llms-rn/components/forms/radio.md): Radio component - [Select](/llms-rn/components/forms/select.md): Select component - [TextInput](/llms-rn/components/forms/text-input.md): Text Input component - [Toggle](/llms-rn/components/forms/toggle.md): A toggle component to set on or off state - [Avatar](/llms-rn/components/media/avatar.md): Display photo of a user, or their initials, on a background - [Grid](/llms-rn/components/layout/grid.md): A responsive grid layout component for React Native - [Menu](/llms-rn/components/overlay/menu.md): An accessible dropdown menu for the common dropdown menu button design pattern. Menu uses roving tabIndex for focus management. - [Popover](/llms-rn/components/overlay/popover.md): Popover is a non-modal dialog that floats around a trigger. - [Sheet](/llms-rn/components/overlay/sheet.md): A responsive overlay component optimized for mobile devices - [Body](/llms-rn/components/typography/body.md): A typography primitiving for displaying text and paragraphs in an interface. - [Heading](/llms-rn/components/typography/heading.md): A typography primitive for ensuring consistent heading styles and hierarchy ## Coverage Gaps The React Native artifact does not yet cover all of the design system. See [llms-rn-gaps.md](/llms-rn-gaps.md) for the full list. - **MDX pages without a `## React Native` section:** 86 (data-display: 5, engineering: 27, feedback: 7, forms: 8, foundation: 10, layout: 8, media: 2, navigation: 4, other: 5, overlay: 1, patterns: 8, typography: 1) - **RN package exports without an MDX page:** 29