phosphor-vue
A clear, playful, and adaptable icon family for Vue, too!
Installation
yarn add phosphor-vue
or
npm install --save phosphor-vue
Usage
<template>
<div>
<PhHorse />
<PhHeart :size="32" color="hotpink" weight="fill" />
<PhCube />
</div>
</template>
<script>
import { PhHorse, PhHeart, PhCube } from "phosphor-vue";
export default {
name: "App",
components: {
PhHorse,
PhHeart,
PhCube
}
};
</script>
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, includinghex,rgb,rgba,hsl,hsla, named colors, or the specialcurrentColorvariable. - size?:
number | string– Icon height & width. As with standard React elements, this can be a number, or a string with units inpx,%,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 withweight="regular"to denote an empty star, andweight="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:
<template>
<div>
<PhHorse /> {/* I'm lime-green, 32px, and bold! */}
<PhHeart /> {/* Me too! */}
<PhCube /> {/* Me three :) */}
</div>
</template>
<script>
import { PhHorse, PhHeart, PhCube } from "phosphor-vue";
export default {
name: "App",
components: {
PhHorse,
PhHeart,
PhCube
},
provide: {
color: "limegreen",
size: 32,
weight: "bold",
mirrored: false
}
};
</script>
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. Also be aware that when using this API, per Vue:
The
provideandinjectbindings are NOT reactive. This is intentional. However, if you pass down an observed object, properties on that object do remain reactive.