> **ATTENTION:** As part of a major update, we will be replacing the existing `phosphor-vue` package with `@phosphor-icons/vue`. We recommend using this new version, as it has improved performance and significantly smaller bundle size. No APIs have been changed, so drop-in replacement should be straightforward. The legacy package will continue to recieve maintenance, but will not be updated with new icons upstream. [Take me to the legacy version ➜](https://github.com/phosphor-icons/vue/tree/vue2)
# Vue Phosphor icons
Phosphor is a flexible icon family for interfaces, diagrams, presentations — whatever, really. Explore all our icons at [phosphoricons.com](https://phosphoricons.com).
[](https://www.npmjs.com/package/phosphor-vue) [](https://standardjs.com) [](https://travis-ci.com/github/rektdeckard/phosphor-vue)
[](https://github.com/phosphor-icons/phosphor-vue)
[](https://github.com/phosphor-icons/phosphor-vue/fork)
[](https://github.com/phosphor-icons/phosphor-vue)
[](https://github.com/rektdeckard)
## Playground
Check out our playground in StackBlitz and start experimenting!
[](https://stackblitz.com/github/phosphor-icons/vue/tree/main?file=src%2FApp.vue)
## Installation
```bash
yarn add @phosphor-icons/vue
```
or
```bash
npm install @phosphor-icons/vue
```
## Usage
```html
```
### Global install
Allthough we strongly advise against installing your icons globally, you can do so by registering it in your app as follows:
```typescript
import { createApp } from 'vue'
import App from './App.vue'
import PhosphorIcons from "@phosphor-icons/vue"
let app = createApp(App)
app.use(PhosphorIcons)
app.mount('#app')
```
> Why do we advise against global installs?
>
> Bundlers such as Vite and Webpack rely on ESM imports to do tree-shaking. When you install entire library globally, you lose the ability to do tree-shaking, since all components are registered within vue, and the bundler cannot know which components are actually used in your app.
### Props
Icon components accept all attributes that you can pass to a normal SVG element, including inline `height`/`width`, `x`/`y`, `opacity`, plus `@click` and other `v-on` handlers. The main way of styling them will usually be with the following props:
- **color?**: `string` – Icon stroke/fill color. Can be any CSS color string, including `hex`, `rgb`, `rgba`, `hsl`, `hsla`, named colors, or the special `currentColor` variable.
- **size?**: `number | string` – Icon height & width. As with standard React elements, this can be a number, or a string with units in `px`, `%`, `em`, `rem`, `pt`, `cm`, `mm`, `in`.
- **weight?**: `"thin" | "light" | "regular" | "bold" | "fill" | "duotone"` – Icon weight/style. Can be used, for example, to "toggle" an icon's state: a rating component could use Stars with `weight="regular"` to denote an empty star, and `weight="fill"` to denote a filled star.
- **mirrored?**: `boolean` – Flip the icon horizontally. Can be useful in RTL languages where normal icon orientation is not appropriate.
### Composition
Phosphor takes advantage of Vue's `provide`/`inject` options to make applying a default style to all icons simple. Create a `provide` object or function at the root of the app (or anywhere above the icons in the tree) that returns a configuration object with props to be applied by default to all icons below it in the tree:
```html
{/* I'm lime-green, 32px, and bold! */}
{/* Me too! */}
{/* Me three :) */}
```
You may create multiple providers for styling icons differently in separate regions of an application; icons use the nearest provider above them to determine their style.
**Note:** The **color**, **size**, **weight**, and **mirrored** properties are all _optional_ props when creating a context, but default to `"currentColor"`, `"1em"`, `"regular"` and `false`.
### Slots
Components have a `` for arbitrary SVG elements, so long as they are valid children of the `