React components for the Primer Design System
Our documentation site lives at primer.style/components. You'll be able to find the information listed in this README as well as detailed docs for each component, our theme, and system props.
Install @primer/components in your project with npm:
npm install @primer/components
All of our components are exported by name from @primer/components
, so you can import them with:
import {
Box,
Button,
Heading,
Text
} from '@primer/components'
Primer Components come with all the necessary CSS built-in, so you don't need to worry about including Primer CSS.
You can establish base Primer styles for your app by wrapping all of your Primer components in <BaseStyles>
:
import {BaseStyles, Box, Heading} from '@primer/components'
export default () => (
<BaseStyles>
<Box m={4}>
<Heading mb={2}>Hello, world!</Heading>
<p>This will get Primer text styles.</p>
</Box>
</BaseStyles>
)
This will set the color
, font-family
, and line-height
CSS properties to the same ones used in primer-base.
If you're rendering React components both server-side and client-side, we suggest following styled-component's server-side rendering instructions to avoid the flash of unstyled content for server-rendered components. This repo's documentation template component demonstrates how to do this in Next.js.
To run @primer/components
locally when adding or updating components:
- Clone this repo:
git clone https://github.com/primer/components
- Install dependencies:
npm install
- Run the dev app:
npm run dev
👉 See the contributing docs for more info on code style, testing, and coverage.
- Everything is a component.
- Aim for total style encapsulation; don't rely on inheritance to provide default styles.
- Build small building blocks with minimal props to keep complexity low.
- Keep system constrained by only including props needed per component.
- Favor extending or wrapping components for more complex operations.
- Maintain design system consistency with utilities as props (for spacing, color, font-size, line-height, widths, and radii).