lion/packages/icon/stories/icon.stories.mdx
Thijs Louisse e564223708
chore(icon): update icon story for icon sets (#626)
* chore(icon): update docs (icon story for icon sets and readme)
2020-03-05 13:20:42 +01:00

132 lines
3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Story, Meta, html } from '@open-wc/demoing-storybook';
import './icons/iconset-bugs.js';
import './icons/iconset-misc.js';
import * as spaceSet from './icons/iconset-space.js';
import '../lion-icon.js';
import './icon-resolvers.js';
<Meta title="Icons/Icon" />
# Icon
A web component for displaying icons.
<Story name="Default">
{html`
<style>
lion-icon {
width: 50px;
height: 50px;
}
</style>
<lion-icon icon-id="lion:space:alienSpaceship"></lion-icon>
`}
</Story>
```html
<lion-icon icon-id="lion:space:alienSpaceship"></lion-icon>
```
## How to use
### Installation
```sh
npm i --save @lion/icon
```
```js
import '@lion/icon/lion-icon.js';
```
### Icon sets
Icons are displayed using icon sets. These are collections of icons, lazily loaded on demand for performance.
See the system documentation to learn more about icon sets.
<Story name="Icon sets">
{html`
${Object.keys(spaceSet).map(
name => html`
<style>
.demo-icon__container {
display: inline-flex;
position: relative;
flex-grow: 1;
flex-direction: column;
align-items: center;
width: 80px;
height: 80px;
padding: 4px;
}
.demo-icon__name {
font-size: 10px;
}
</style>
<div class="demo-icon__container" title="lion:space:${name}">
<lion-icon
icon-id="lion:space:${name}"
aria-label="icon: ${name}"
></lion-icon>
<span class="demo-icon__name">${name}</span>
</div>
`
)}
`}
</Story>
```html
<lion-icon icon-id="lion:space:alienSpaceship"></lion-icon>
```
If for some reason you don't want to lazy load icons, you can still import and use them
synchronously.
### Accessibility
It is recommended to add an `aria-label` to provide information to visually impaired users:
A `lion-icon` without an `aria-label` attribute will be automatically given an `aria-hidden` attribute.
<Story name="Accessible label">
{html`
<lion-icon icon-id="lion:misc:arrowLeft" aria-label="Pointing left"></lion-icon>
`}
</Story>
```html
<lion-icon icon-id="lion:misc:arrowLeft" aria-label="Pointing left"></lion-icon>
```
### Styling
By default, a `lion-icon` will be `1em` × `1em` (the current line-height).
`lion-icon` uses SVGs and may be styled with CSS, including using CSS properties such as `fill`:
<Story name="Styling">
{html`
<style>
.demo-icon {
width: 160px;
height: 160px;
fill: blue;
}
</style>
<lion-icon icon-id="lion:bugs:bug02" aria-label="Bug" class="demo-icon"></lion-icon>
`}
</Story>
```html
<style>
.demo-icon {
width: 160px;
height: 160px;
fill: blue;
}
</style>
<lion-icon icon-id="lion:bugs:bug02" aria-label="Bug" class="demo-icon"></lion-icon>
```
See <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_and_CSS" target="_blank">SVG and CSS</a> on MDN web docs for more information.