# Hover Design System
> Hover's design system for building consistent product UI. Built on React and
> Chakra UI v2, with design tokens, components, hooks, and patterns. All imports
> come from `@hoverinc/design-system-react-web`. Never import directly from
> `@chakra-ui/react`.
> **Working in React Native?** This file documents the web build only — see
> the [React Native artifact](/llms-rn.txt) instead.
## Setup
- Package: `@hoverinc/design-system-react-web`
- Icons: `@hoverinc/icons`
- Theme: `@hoverinc/blueprint-theme`
```tsx
import { DesignSystemProvider } from '@hoverinc/design-system-react-web';
function App() {
return (
);
}
```
| Import path | Purpose |
| ---------------------------------------------- | ------------------------------------------------- |
| `@hoverinc/design-system-react-web` | Components, hooks, types |
| `@hoverinc/design-system-react-web/foundation` | Foundation theme tokens |
| `@hoverinc/design-system-react-web/brand` | Brand-specific components (Button, Link, Spinner) |
| `@hoverinc/design-system-react-web/chakra` | Raw Chakra re-exports (avoid unless necessary) |
## Design Tokens
Use string token keys as prop values — never raw pixel or hex values.
- Spacing: `padding="400"` (16px), `gap="300"` (12px)
- Sizes: `width="500"` (64px), `height="400"` (48px)
- Colors: prefer semantic tokens (for example `color="textPrimary"`)
- Shadows: `boxShadow="distance200"`
- Border radius: `borderRadius="500"` (8px)
Prefer semantic color tokens first (for text, surfaces, borders, status UI). Use
scale tokens like `primary.100`/`primary.600` only when a semantic token is not
available. Available color scales: `primary`, `neutral`, `success`, `warning`,
`danger`. Brand colors: `brandNavy`, `brandGreen`, `brandBrown`, `brandRed`,
`brandTan`, `brandOrange`, `brandYellow`, `brandPurple`.
For the full token reference, read `/llms/foundation.md`.
## Style Props
Prefer verbose prop names over shorthand:
| Prefer | Avoid |
| --------------------------- | --------------- |
| `padding` | `p` |
| `paddingX` / `paddingY` | `px` / `py` |
| `margin`, `marginTop`, etc. | `m`, `mt`, etc. |
| `width` / `height` | `w` / `h` |
| `backgroundColor` | `bg` |
| `borderRadius` | `rounded` |
## Components
### Layout
`Box`, `Flex`, `Grid`, `SimpleGrid`, `Stack`, `HStack`, `VStack`, `Center`,
`Container`, `Spacer`, `Wrap`, `AspectRatio`
### Forms
`Button`, `IconButton`, `Field`, `TextInput`, `PasswordInput`, `SearchInput`,
`Select`, `Textarea`, `Checkbox`, `CheckboxGroup`, `Radio`, `RadioGroup`,
`RadioButton`, `RadioButtonGroup`, `CheckButton`, `CheckButtonGroup`,
`TileCheckbox`, `TileRadio`, `Toggle`, `Slider`, `PinInput`, `Editable`
### Overlays
`Sheet`, `Popover`, `PopoverButton`, `Tooltip`, `Menu`, `MenuButton`,
`MenuItem`, `FilterMenu`, `LoadingOverlay`, `LoadingState`
These overlays are deprecated and strongly discouraged: `Modal`, `Dialog`,
`Drawer`,
### Feedback
`Progress`, `FauxProgress`, `Loader`, `Spinner`, `Skeleton`, `Alert`, `Toast`
### Data Display
`Accordion`, `Badge`, `Tag`, `Table`, `List`, `Tile`, `Gallery`
### Typography
`Heading`, `Body`, `Code`, `Blockquote`
### Navigation
`Tabs`, `Breadcrumb`, `Link`, `LinkOverlay`
### Media
`Icon`, `Pictogram`, `Avatar`, `AvatarGroup`, `Image`, `Logo`
### Utility
`Portal`, `Fade`, `ScaleFade`, `Slide`, `SlideFade`, `Hide`, `Show`,
`ForceMode`, `VisuallyHidden`
## Hooks
| Hook | Purpose |
| ----------------------------- | ------------------------------------------------ |
| `useDisclosure` | Boolean open/close state (modals, drawers, etc.) |
| `useToast` / `useCustomToast` | Show toast notifications |
| `useBreakpointValue` | Responsive values based on viewport |
| `useColorMode` | Access/toggle light/dark mode |
| `useTheme` | Access theme object |
| `useField` | Field-level form utilities |
| `useIsMotionReduced` | Check prefers-reduced-motion |
| `useMediaQuery` | Match CSS media queries |
| `useBoolean` | Boolean state helpers |
| `useClipboard` | Copy to clipboard |
## Common Patterns
### Responsive values
Use device breakpoints only: `base`, `tablet`, `desktop`. Prefer `tablet` for
responsive overrides. Use `desktop` only as a last resort for layouts that
cannot be solved at `base` + `tablet`. Do not use generic aliases like `md` or
`lg`. In rare cases that need finer control, use explicit `width*` breakpoints
(for example `width350`) instead of `md`/`lg`.
```tsx
Responsive padding
```
### Disclosure (open/close state)
```tsx
const { isOpen, onOpen, onClose } = useDisclosure();
...
```
## Common Mistakes to Avoid
- Don't import from `@chakra-ui/react` — always use
`@hoverinc/design-system-react-web`
- Don't use raw pixel values — use token strings (`"400"` not `"16px"`)
- Don't use shorthand style props — use `padding` not `p`, `marginX` not `mx`
- Don't default to scale colors like `primary.100` — prefer semantic color
tokens first
- Don't use `md`/`lg` responsive keys — use `base`, `tablet`, `desktop` (or
`width*` keys for rare fine-grained layouts)
- Don't use `leftIcon`/`rightIcon` on Button — use `iconBefore`/`iconAfter`
- Don't use `colorScheme` — use the `color` prop
- Don't forget `label` on `IconButton` — required for accessibility
- Don't nest `DesignSystemProvider` — it's a no-op
- Don't use fontSize tokens directly - use size prop on Body and Heading instead
## Detailed References
- [Foundation](/llms/foundation.md): Foundation overview
- [Responsive Breakpoints](/llms/foundation/tokens/breakpoints.md): Responsive breakpoint tokens for media queries etc.
- [Color](/llms/foundation/tokens/color.md): Color tokens
- [Favicon](/llms/foundation/tokens/favicon.md): Favicon
- [Grids](/llms/foundation/tokens/grids.md): Grids
- [Icons](/llms/foundation/tokens/icons.md): Icon usage and available icons
- [Layers](/llms/foundation/tokens/layers.md): Layer style tokens
- [Logo](/llms/foundation/tokens/logos.md): Logo usage and variants
- [Radius](/llms/foundation/tokens/radius.md): Border tokens
- [Shadow](/llms/foundation/tokens/shadow.md): Shadow and outline tokens
- [Size tokens](/llms/foundation/tokens/size.md): Size tokens
- [Spacing tokens](/llms/foundation/tokens/space.md): Spacing tokens
- [Typography](/llms/foundation/tokens/typography.md): Typography tokens
- [Components](/llms/components.md): Components overview
- [Accordion](/llms/components/data-display/accordion.md): Accordion component
- [Badge](/llms/components/data-display/badge.md): Badge component
- [Gallery](/llms/components/data-display/gallery.md): Image gallery component that displays image thumbnails in a grid and full size images in a modal.
- [List](/llms/components/data-display/list.md): List is used to display list items.
- [Table](/llms/components/data-display/table.md): A Table used to organize and display data efficiently. It renders a `
` element by default.
- [Tile](/llms/components/data-display/tile.md): A Tile used to display things like paint or material swatches, or anything that requires an image with subtext.
- [Alert](/llms/components/feedback/alert.md): Alert component
- [Faux Progress](/llms/components/feedback/faux-progress.md): Faux Progress is used to display the progress status for a task that takes a long time. This differs from the default Progress component because we simulate progress given a duration.
- [Loader](/llms/components/feedback/loader.md): A loading indicator is used to convey the state of action that is processing or waiting a result.
- [LoadingOverlay](/llms/components/feedback/loading-overlay.md): A modal loading overlay that blocks all user interaction while displaying a spinner.
- [LoadingState](/llms/components/feedback/loading-state.md): A loading overlay that blocks user interaction on a specific element while displaying a spinner.
- [Progress](/llms/components/feedback/progress.md): Progress is used to display the progress status for a task that takes a long time or consists of several steps.
- [Skeleton](/llms/components/feedback/skeleton.md): A loading state for a component to display an animated placeholder in place of the component, to convey data is being fetched and prevent layout shift.
- [Toast](/llms/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.
- [BinaryButton](/llms/components/forms/binary-button.md): Selectable tile button
- [Buttons](/llms/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.
- [CheckButton](/llms/components/forms/check-button.md): Selectable button for multiple selection
- [Checkbox](/llms/components/forms/checkbox.md): Checkbox component
- [Dropdown](/llms/components/forms/dropdown.md): An accessible, custom alternative to the native Select component
- [Field](/llms/components/forms/field.md): A comprehensive input field component for React Native with label, validation, and addon support
- [IconButton](/llms/components/forms/icon-button.md): Button component that uses an icon for its label
- [PinInput](/llms/components/forms/pin-input.md): Pin Input component for entering a sequence of digits
- [RadioButton](/llms/components/forms/radio-button.md): Selectable button for single selection
- [Radio](/llms/components/forms/radio.md): Radio component
- [SearchInput](/llms/components/forms/search-input.md): Search field with optional toggleable UI and clear button behaviors
- [Select](/llms/components/forms/select.md): Select component
- [Slider](/llms/components/forms/slider.md): Select component
- [TextInput](/llms/components/forms/text-input.md): Text Input component
- [Textarea](/llms/components/forms/textarea.md): Textarea component
- [Toggle](/llms/components/forms/toggle.md): A toggle component to set on or off state
- [Avatar](/llms/components/media/avatar.md): Display photo of a user, or their initials, on a background
- [Icon](/llms/components/media/icon.md): Display an icon using system colors and sizing
- [Pictogram](/llms/components/media/pictogram.md): Display larger iconography, called pictograms, using system colors and sizing
- [Aspect Ratio](/llms/components/layout/aspect-ratio.md): AspectRatio component is used to embed responsive videos and maps, etc.
- [Box](/llms/components/layout/box.md): Box is the most abstract component on top of which all other Chakra UI components are built. By default, it renders a `div` element
- [Center](/llms/components/layout/center.md): Center is a layout component that centers its child within itself.
- [Container](/llms/components/layout/container.md): Containers are used to constrain a content's width to the current breakpoint, while keeping it fluid.
- [Flex](/llms/components/layout/flex.md): Flex is Box with display set to flex and comes with helpful style shorthand. It renders a `div` element.
- [Grid](/llms/components/layout/grid.md): A responsive grid layout component for React Native
- [PageContainer](/llms/components/layout/page-container.md): PageContainer sets a standardized max width and horizontal padding for page content.
- [SimpleGrid](/llms/components/layout/simple-grid.md): SimpleGrid provides a friendly interface to create responsive grid layouts with ease.
- [Stack](/llms/components/layout/stack.md): Stack is a layout component used to group elements together and apply a space between them.
- [Menu](/llms/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/components/overlay/popover.md): Popover is a non-modal dialog that floats around a trigger.
- [Sheet](/llms/components/overlay/sheet.md): A responsive overlay component optimized for mobile devices
- [Tooltip](/llms/components/overlay/tooltip.md): Tooltip component
- [Breadcrumb](/llms/components/navigation/breadcrumb.md): Breadcrumbs is a navigation pattern that helps users understand the hierarchy of a website.
- [Link Overlay](/llms/components/navigation/link-overlay.md): Link overlay is a semantic component used to wrap elements (cards, blog posts, articles, etc.) in a link.
- [Link](/llms/components/navigation/link.md): A link component that renders a native anchor tag with system styles.
- [Tabs](/llms/components/navigation/tabs.md): A React component that helps you build accessible tabs, by providing keyboard interactions and ARIA attributes described in the WAI-ARIA Tab Panel Design Pattern.
- [FocusLock](/llms/components/other/focus-lock.md): Lock focus to a particular element in the document
- [Portal](/llms/components/other/portal.md): Renders a component outside the current DOM hierarchy.
- [RemoveScroll](/llms/components/other/remove-scroll.md): Disable document scroll when a component is mounted
- [Visually Hidden](/llms/components/other/visually-hidden.md): VisuallyHidden is a common technique used in web accessibility to hide content from the visual client, but keep it readable for screen readers.
- [Body](/llms/components/typography/body.md): A typography primitiving for displaying text and paragraphs in an interface.
- [Code](/llms/components/typography/code.md): A typography primitiving for displaying inline code snippets with a monospace font.
- [Heading](/llms/components/typography/heading.md): A typography primitive for ensuring consistent heading styles and hierarchy
- [Drawer (Deprecated)](/llms/engineering/deprecated/drawer.md): Drawer component
- [Modal (Deprecated)](/llms/engineering/deprecated/modal.md): Modal component
- [Getting Started with Bootstrap](/llms/engineering/getting-started/bootstrap.md): A guide for installing and using the Hover Design System Bootstrap theme
- [Getting Started with React Native](/llms/engineering/getting-started/react-native.md): A guide for installing and setting up Hover Design System in React Native projects
- [Getting Started with React](/llms/engineering/getting-started/react.md): A guide for installing and setting up Blueprint in React projects
- [Stripe Integration](/llms/engineering/integrations/stripe.md): Integrating Stripe payments with the design system
- [Design System Provider](/llms/engineering/provider/design-system-provider.md): The root provider that injects the theme and other global configurations.
- [useBoolean](/llms/engineering/hooks/use-boolean.md): React hook to manage boolean (on - off) states
- [useBreakpointValue](/llms/engineering/hooks/use-breakpoint-value.md): React hook for getting the value for the current breakpoint from the provided responsive values object.
- [useClipboard](/llms/engineering/hooks/use-clipboard.md): useClipboard is a custom hook that handles copying content to clipboard.
- [useConst](/llms/engineering/hooks/use-const.md): React hook to initialize and return a constant value
- [useControllableState](/llms/engineering/hooks/use-controllable-state.md): React hook to handle controlled vs uncontrolled component scenarios
- [useDimensions](/llms/engineering/hooks/use-dimensions.md): React hook to measure dimensions of the referenced element
- [useDisclosure](/llms/engineering/hooks/use-disclosure.md): React hook to handle common open and close scenarios in UI components
- [useIsMotionReduced](/llms/engineering/hooks/use-is-motion-reduced.md): React hook to detect animation preference
- [useLatestCallback](/llms/engineering/hooks/use-latest-callback.md): A version of React's useCallback that always has the latest render scope
- [useMediaQuery](/llms/engineering/hooks/use-media-query.md): React hook to detect media queries
- [useMergeRefs](/llms/engineering/hooks/use-merge-refs.md): React hook that merges react refs into a single memoized function
- [useTheme](/llms/engineering/hooks/use-theme.md): React hook to get access to theme by reading from theme context
- [useZoom](/llms/engineering/hooks/use-zoom.md): A hook for adding scroll-based zoom functionality to an image element.
- [CSS Variables](/llms/engineering/styled-system/css-variables.md): CSS variables automatically generated from the system theme
- [Custom Styles](/llms/engineering/styled-system/custom-styles.md): Conventions for applying custom styles to system components
- [System Factory](/llms/engineering/styled-system/factory.md): Using the system factory and elements
- [Gradient](/llms/engineering/styled-system/gradient.md): Learn how to use gradients in Chakra UI. Gradients are a way to transition between two or more colors.
- [Motion](/llms/engineering/styled-system/motion.md): Motion tokens for animations, transitions
- [Style Props](/llms/engineering/styled-system/style-props.md): Learn how to use style props in Chakra UI. Style props are a way to alter the style of a component by simply passing props to it
- [The `sx` Prop](/llms/engineering/styled-system/the-sx-prop.md): The sx prop lets you style components inline, using your theme tokens.
- [Data Display](/llms/patterns/data-display.md): Patterns
- [Feedback](/llms/patterns/feedback.md): Patterns
- [Forms](/llms/patterns/forms.md): Patterns
- [Layout](/llms/patterns/layout.md): Patterns
- [Media](/llms/patterns/media.md): Patterns
- [Navigation](/llms/patterns/navigation.md): Patterns
- [Overlay](/llms/patterns/overlay.md): Patterns
- [Typography](/llms/patterns/typography.md): Patterns