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.
