# Component Reference
This package includes a library of generic WordPress components to be used for creating common UI elements shared between screens and features of the WordPress dashboard.
## Installation
```bash
npm install @wordpress/components --save
```
_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._
## Setup
Many components require the package's CSS stylesheet to be loaded.
### Within WordPress
To ensure proper load order, add the `wp-components` stylesheet as a dependency of your plugin's stylesheet. See [wp_enqueue_style documentation](https://developer.wordpress.org/reference/functions/wp_enqueue_style/#parameters) for how to specify dependencies.
### Outside WordPress
Load the stylesheet in your application:
```js
import '@wordpress/components/build-style/style.css';
```
The RTL version of the stylesheet is available at `@wordpress/components/build-style/style-rtl.css`.
## Usage
Within Gutenberg, these components can be accessed by importing from the `components` root directory:
```jsx
import { Button } from '@wordpress/components';
export default function MyButton() {
return ;
}
```
### Popovers
By default, the `Popover` component will render within an extra element appended to the body of the document.
If you want to precisely control where the popovers render, you will need to use the `Popover.Slot` component.
The following example illustrates how you can wrap a component using a
`Popover` and have those popovers render to a single location in the DOM.
```jsx
import { Popover, SlotFillProvider } from '@wordpress/components';
import { MyComponentWithPopover } from './my-component';
const Example = () => {
