@indaco/svelte-iconoir
Version:
Iconoir SVG icons as Svelte components.
205 lines (151 loc) • 5.02 kB
Markdown
<div align="center">
<h1>Svelte Iconoir</h1>
<a href="https://github.com/indaco/svelte-iconoir/actions/workflows/release.yml" target="_blank">
<img src="https://github.com/indaco/svelte-iconoir/actions/workflows/release.yml/badge.svg" alt="CI" />
</a>
<a href="https://github.com/indaco/svelte-iconoir/blob/main/LICENSE" target="_blank">
<img src="https://img.shields.io/badge/license-mit-blue?style=flat-square&logo=none" alt="license" />
</a>
<a href="https://www.npmjs.com/package/@indaco/svelte-iconoir" target="_blank"><img src="https://img.shields.io/npm/v/@indaco/svelte-iconoir.svg?style=flat" alt="NPM Package" /></a>
</div>
The entire [iconoir](https://github.com/lucaburgio/iconoir) set (1500+ SVG icons) as Svelte components.
See all available icons on the **iconoir** [homepage](https://iconoir.com/).
## Install
```bash
# npm
npm install @indaco/svelte-iconoir
# pnpm
pnpm add @indaco/svelte-iconoir
# yarn
yarn add @indaco/svelte-iconoir
```
## Usage
```html
<script>
import { <ComponentName>Icon } from '@indaco/svelte-iconoir/<icon_variant>/<icon_name>';
</script>
```
where:
- `<ComponentName>`: named as _PascalCase_ variations of the icon name
- `<icon_variant>`:
- `regular` variant is the **default one and does not need to be specified**
- `solid` (check on [iconoir.com](https://iconoir.com) if available)
- `<icon_name>`: the original icon name as per iconoir.com
### Example
```html
<script>
import { SunLightIcon } from '@indaco/svelte-iconoir/sun-light';
// or...
import SunLightIcon from '@indaco/svelte-iconoir/components/SunLightIcon.svelte';
// variant `solid`
import { MinusCircleIcon } from '@indaco/svelte-iconoir/solid/minus-circle';
// or component import
import MinusCircleIcon from '@indaco/svelte-iconoir/components/solid/MinusCircleIcon.svelte';
</script>
```
### Exceptions
The naming convention above has few exceptions breaking it:
1. icons for companies (github, youtube etc.):
- to reflect the real company names (GitHub, YouTube, etc.).
| Icon Name | Component Name |
| :------------ | :--------------- |
| github | GitHubIcon |
| github-circle | GitHubCircleIcon |
| gitlab-full | GitLabFullIcon |
| linkedin | LinkedInIcon |
| tiktok | TikTokIcon |
| youtube | YouTubeIcon |
## Styling Icons
You can apply your own styles to the icon components in different ways:
### 1. Direct
```html
<script>
import { SunLightIcon } from '@indaco/svelte-iconoir/sun-light';
</script>
<SunLightIcon class="roundedColor" />
<style>
.roundedColor {
padding: 4px;
background-color: yellow;
border-style: solid;
border-color: #d1d5db;
}
</style>
```
### 2. Inline styles
```html
<script>
import { SunLightIcon } from '@indaco/svelte-iconoir/sun-light';
</script>
<SunLightIcon
style="background-color: green; padding: 4px; border-radius: 9999px;"
color="#ffffff"
/>
```
### 3. With Tailwind CSS
```html
<script>
import { SunLightIcon } from '@indaco/svelte-iconoir/sun-light';
</script>
<SunLightIcon class="p-1 rounded-full border-2 bg-green-400" size="xl" />
```
## Properties
Each icon component can take any attribute of a normal SVG Element, for example:
```html
<ZoomOutIcon fill="red" stroke-width="3" />
```
In addition to these, each component can take the following properties:
| Property | Type | Default | Description |
| :------- | :--------- | :-------- | :--------------------------------------------- |
| size | `IconSize` | `base` | Set the attributes `width` and `height` |
| altText | `string` | icon name | Set the `aria-labelledby` attribute on the svg |
The underlying properties can also be set and overriden manually, e.g. setting `width` explicitly takes precedence over `size`.
```javascript
/**
* The size of the icon.
* @typedef {(‘xs’|’sm’|’base’|’lg’|’xl’|number|string)} IconSize
*/
```
| Size | Value |
| :--- | -------: |
| xs | `1em` |
| sm | `1.25em` |
| base | `1.5em` |
| lg | `1.75em` |
| xl | `2em` |
## Event Forwarding
The following events are _forwarded_.
| Name |
| :-------------- |
| `on:click` |
| `on:dblclick` |
| `on:keyup` |
| `on:keydown` |
| `on:mouseenter` |
| `on:mouseleave` |
For example, you can set the `on:click` event on all icons.
```html
<script>
import { SunLightIcon } from '@indaco/svelte-iconoir/sun-light';
</script>
<SunLightIcon on:click="{()" =""> alert("hi!")} /></SunLightIcon>
```
## Dev Flow
```bash
git clone https://github.com/indaco/svelte-iconoir.git
cd svelte-iconoir
# Install all dependencies
pnpm install # (or npm, yarn)
# Update Iconoir submodule
git submodule update --remote
# Generate Svelte components for each icon
pnpm generate:icons
# Package
pnpm build
## Run postbuild script
pnpm postbuild
```
## License
Free and open-source software under the [MIT License](LICENSE)