Compare commits

...

42 Commits

Author SHA1 Message Date
Karsa
6a7732077a Adds parking-* and parking-*-off icons (#972)
* adds parking and parking-off icons

* Update icons/parking-square.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update icons/parking-circle.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

---------

Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2023-03-20 20:42:08 +01:00
Lucide Bot
c1c0f99d65 📦 Bump lucide package versions to 0.126.0 2023-03-19 20:12:27 +00:00
Karsa
ee2bfaff0d Adds brain (ai) icons (#967)
* Add more music icons and another mic icon (#746)

* Revert "Add more music icons and another mic icon (#746)" (#750)

This reverts commit 57cba6ae0e.

* adds brain icons

* adds extra AI tags

* Update icons/brain-circuit.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update brain.svg

* Update brain-circuit.svg

---------

Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com>
Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2023-03-19 21:06:44 +01:00
Lucide Bot
9370449d7e 📦 Bump lucide package versions to 0.125.0 2023-03-10 21:18:55 +00:00
Karsa
244a5a396e Adds bird icon (#968)
* Add more music icons and another mic icon (#746)

* Revert "Add more music icons and another mic icon (#746)" (#750)

This reverts commit 57cba6ae0e.

* adds bird icon

* Update icons/bird.svg

---------

Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com>
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-10 22:13:44 +01:00
Lucide Bot
2396a53bad 📦 Bump lucide package versions to 0.124.0 2023-03-06 20:17:14 +00:00
Karsa
07a78731a5 Adds nfc icons (#960)
* added nfc icons

* fixes smartphone-nfc

* Update icons/nfc.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update icons/smartphone-nfc.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

---------

Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2023-03-06 21:11:05 +01:00
Lucide Bot
4e2449dc9f 📦 Bump lucide package versions to 0.123.0 2023-03-05 20:28:49 +00:00
Karsa
f02067ea55 adds utility-pole icon (#971)
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-05 21:23:11 +01:00
Eric Fennis
57a72cbb38 Add forklift icon (#943)
* Fix vercel build

* Add forklift icon

Co-Authored-By: willythewizard <119956499+willythewizard@users.noreply.github.com>

---------

Co-authored-by: willythewizard <119956499+willythewizard@users.noreply.github.com>
2023-03-05 21:22:38 +01:00
Karsa
0baf1a49ef Fixes incorrect relative links in documentation pages (#973)
* Fixes incorrect relative links in documentation pages

* Unifies documentation page names to avoid 404 links

---------

Co-authored-by: Karsa <karsa@karsa.org>
2023-03-05 21:21:26 +01:00
Lucide Bot
0879262bdb 📦 Bump lucide package versions to 0.122.0 2023-03-04 10:58:52 +00:00
Karsa
9a41d931e9 Adds blinds icon (#970)
* Add more music icons and another mic icon (#746)

* Revert "Add more music icons and another mic icon (#746)" (#750)

This reverts commit 57cba6ae0e.

* adds blinds icon

---------

Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com>
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-04 11:53:29 +01:00
Lucide Bot
7c111a53e1 📦 Bump lucide package versions to 0.121.0 2023-03-02 08:04:30 +00:00
Maxime Franco
7209ed3fcd [ADD] Router icon (#957)
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-02 08:58:27 +01:00
Karsa
e85dffa9b4 Adds gi = generate icons script (#975) 2023-03-02 08:51:56 +01:00
Lucide Bot
0c3d6cd097 📦 Bump lucide package versions to 0.120.0 2023-03-02 07:39:29 +00:00
Karsa
72c25a9936 Adds pill & tablets icons (#969)
* Add more music icons and another mic icon (#746)

* Revert "Add more music icons and another mic icon (#746)" (#750)

This reverts commit 57cba6ae0e.

* adds tablets & pill icons

* adds some extra tags

---------

Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com>
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-02 08:33:50 +01:00
Lucide Bot
5226c326f8 📦 Bump lucide package versions to 0.119.0 2023-03-01 18:15:18 +00:00
Karsa
de2e3036c0 Adds tower-control icon (#963)
* Add more music icons and another mic icon (#746)

* Revert "Add more music icons and another mic icon (#746)" (#750)

This reverts commit 57cba6ae0e.

* adds tower-control icon

* Update icons/tower-control.json

---------

Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com>
Co-authored-by: Karsa <karsa@karsa.org>
2023-03-01 19:09:35 +01:00
Lucide Bot
8adeb025a6 📦 Bump lucide package versions to 0.118.0 2023-02-28 17:15:47 +00:00
Karsa
22ffb58649 Adds ship icon (#965) 2023-02-28 18:10:57 +01:00
Karsa
278309fe55 Adds footprints icon (#961) 2023-02-28 18:10:44 +01:00
Karsa
bcbae1e406 Adds stamp icon (#962) 2023-02-28 18:10:33 +01:00
Karsa
1173134099 Adds helping-hand icon (#966) 2023-02-28 18:08:19 +01:00
Lucide Bot
894993478f 📦 Bump lucide package versions to 0.116.0 2023-02-28 16:32:39 +00:00
Karsa
36f84a74f6 adds construction icon (#959)
Co-authored-by: Karsa <karsa@karsa.org>
2023-02-28 17:25:08 +01:00
Karsa
1479a9dbd8 Fixes pre-commit git hook to ensure the optimisation of staged icons (#958)
* testing

* Fixes pre-commit hook

* Removing checkIcons from pre commit hook because it might result in false positives and negatives on an unclean local repository

* Added checkIcons Github action

---------

Co-authored-by: Karsa <karsa@karsa.org>
2023-02-28 17:24:17 +01:00
gubser
2485f6117a Added filter-x icon (#954)
* Added filter-off icon

* Renamed filter-off to filter-x

* Update icons/filter-x.svg

---------

Co-authored-by: Elio Gubser <3030498-gubser@users.noreply.gitlab.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-02-22 22:29:14 +01:00
Eric Fennis
0bbaaa8abd Fix site build (#955)
* Fix prebuild

* remove env file
2023-02-21 17:33:29 +01:00
Patchethium
a82af02687 Add split-square icon (#952)
* add split-square

* add horizontal icon

* rename vertical icon

* split path
2023-02-21 08:14:27 +01:00
Lucide Bot
a5be1b4101 📦 Bump lucide package versions to 0.115.0 2023-02-16 11:51:55 +00:00
Eric Fennis
639c0e8d85 Add creative commons icon (#945) 2023-02-16 12:45:45 +01:00
Eric Fennis
b863445492 Add remove formatting icon (#944) 2023-02-16 12:44:43 +01:00
Karsa
8c4a41035b Deprecate tags.json (#896)
* Deprecates tags.json and icons.json

* Removed tags.json dependency from Figma plugin

* Add JSON descriptor information to readme

* Restore packages/index.tsx

* Update packages/lucide-figma/src/api/fetchIcons.ts

Add multiple fetches to `Promise.all`

* Added caching to API endpoints

* Updates pnpm-lock.yaml

* Add tags to static

* Trigger site build

* Added prebuild script to generate api caches at build time

* Migrated NextCache function from arrow to regular to simplify markup

* test if contents are read from cache

* Add cache clear to prebuild

* removes debug object

---------

Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-02-16 08:26:29 +01:00
Lucide Bot
4a55ae4b91 📦 Bump lucide package versions to 0.114.0 2023-02-14 06:17:46 +00:00
Karsa
30f683a192 Fixes outline path joins in cat (#947) 2023-02-14 07:11:42 +01:00
Lucide Bot
25e0aaf33c 📦 Bump lucide package versions to 0.113.0 2023-02-12 22:09:06 +00:00
Leon Koole
3cd84c8adf Add grip and make all grip tags consistent (#941)
* Add grip and make all grip tags consistent

* Update icons/grip.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>

* Update icons/grip.json

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-02-12 23:03:16 +01:00
Ali
096ce92866 add title attr for "Available for" icons on home (#942) 2023-02-12 18:57:00 +01:00
Lucide Bot
57abe654b1 📦 Bump lucide package versions to 0.112.0 2023-02-07 08:40:49 +00:00
Jakob Guddas
852da97d46 Add fish-off icon (#923)
Co-authored-by: Kemie <kemie@monolinea.com>
2023-02-07 09:35:00 +01:00
119 changed files with 1563 additions and 16241 deletions

View File

@@ -1,4 +0,0 @@
#!/bin/sh
pnpm run checkIcons
exit $?

View File

@@ -5,11 +5,11 @@ labels: "🎨 <icon"
---
<!-- Thanks for submitting an icon! Please make sure you read the icon design guide
at https://github.com/lucide-icons/lucide/blob/main/docs/ICON_DESIGN_GUIDE.md beforehand,
at https://github.com/lucide-icons/lucide/blob/main/docs/icon-design-guide.md beforehand,
and please fill everything below. -->
- **Name of the icon** : <!-- `icon` -->
- **Tags (alternative names for this icon)** (add them in tags.json) :
- **Tags (alternative names for this icon)** (add them in as a separate json file using the same icon name) :
- **What is the purpose of this icon?** : <!-- Shows that one can click it to... / Is used to denote or label... -->
- **100% scale preview** : <!-- upload an image -->
- **Have you considered alternative possibilities** for its naming or design? :
- **Have you considered alternative possibilities** for its naming or design? :

41
.github/actions/check-icons.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: "Check icons"
description: "Cross-checks icon and category references in JSON descriptors"
inputs:
name:
description: “Name of the package”
required: true
runs:
using: "composite"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
key: ${{ runner.os }}-lucide-preact-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-lucide-preact-pnpm-store-
- name: Install dependencies
run: pnpm install --filter .
- name: Check icons and categories
run: pnpm checkIcons

2
.gitignore vendored
View File

@@ -18,3 +18,5 @@ packages/**/src/icons/*.ts
packages/**/src/icons/*.tsx
packages/**/src/aliases.ts
packages/**/LICENSE
categories.json
tags.json

5
.husky/pre-commit Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm lint-staged
pnpm checkIcons

View File

@@ -25,28 +25,21 @@ Guidelines for pull requests:
Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide.
Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_GUIDE.md).
Read it here: [ICON_GUIDELINES](/docs/icon-design-guide.md).
### Templates
### Editor guides
Here you can find templates and instructions on how to implement the guidelines with different programs.
Here you can find instructions on how to implement the guidelines with different vector graphics editors:
#### Adobe Illustrator
#### [Adobe Illustrator Guide](/docs/illustrator-guide.md)
`Template`: You can find a template for Adobe Illustrator under `/docs/templates/illustrator-template.ai`.
`Instructions`: You can find the [Illustrator Guide](/docs/ILLUSTRATOR_GUIDE.md) and how to work with the template in `/docs/ILLUSTRATOR_GUIDE.md`.
You can also [download an Adobe Illustrator template](/docs/templates/illustrator-template.ai).
#### Inkscape
#### [Inkscape Guide](/docs/inkscape-guide.md)
`Template`: None
`Instructions`: You can find the [Inkscape Guide](/docs/INKSCAPE_GUIDE.md) and how to set up Inkscape under `/docs/INKSCAPE_GUIDE.md`.
#### [Figma Guide](/docs/figma-guide.md)
#### Figma
`Template`: None
`Instructions`: You can find the [Figma Guide](/docs/FIGMA_GUIDE.md) and how to set up Figma under `/docs/FIGMA_GUIDE.md`.
#### Submitting Multiple Icons
### Submitting Multiple Icons
If you want submit multiple icons, please separate the icons and group them. That makes reviewing the icons easier and keep the thread clean and scoped.
So don't submit multiple icons in one PR that have noting to do with each other.

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,7 @@
"type": "string"
},
"icon": {
"$ref": "#/$defs/types/icon-reference"
"type": "string"
},
"weight": {
"type": "integer"

View File

@@ -16,7 +16,7 @@ To do this, create a frame of 24x24 pixels.
In this newly created frame, you will create your icon. If you want, you can change the name of your frame to the name of the icon you are going to create. Then it will be exported as `FRAME-NAME.svg`.
## Create your icon
## Create Your icon
To design your icon in the style of Feather Icons, you need to adjust a few settings in Figma.
Draw in your new frame with the pen tool. You can open it with the window at the top, or with the shortcut `P`. Once you click in your frame, you can adjust the settings for the pen tool in the design-window on the right.
@@ -26,19 +26,26 @@ Set the following:
1. Corner radius: 2px
2. Stroke
1. Stroke width: 2px
2. Stroke alignment: center
2. Stroke alignment: center
![Figma Stroke Options](images/figma-stroke-options.png)
## Export Your Icon
## Export Or Copy Your Icon
Once you have completed your icon, you can export it.
1. Select the frame
2. Open the *Export* tab on the right
3. Set the file type as SVG
4. Press export
Or you can also copy its source as SVG.
1. Select the frame
2. Right click it
3. Click on *Copy/Paste as*
4. Click on *Copy as SVG*
That's it. You just made your first icon. Congratulations!
## Figma Tips
1. The [Icon Design Guidelines](ICON_DESIGN_GUIDE.md) dictate that you keep 2px spacing between detached elements. In Figma, you can easily check this with: `⌥` Option (MacOS) or `Alt` (Windows).
1. The [Icon Design Guidelines](icon-design-guide.md) dictate that you keep 2px spacing between detached elements. In Figma, you can easily check this with: `⌥` Option (MacOS) or `Alt` (Windows).

View File

@@ -80,3 +80,21 @@ For each icon these attributes are applied, corresponding to the above rules.
Code of paths can get really big.
To reduce file size we like to minify the code.
We recommend to use the [SVGOMG](https://jakearchibald.github.io/svgomg/) to minify paths.
### JSON metadata descriptor
Each icon added must also come with a matching JSON file listing tags and categories for the icon.
Please use the following template:
```json
{
"$schema": "../icon.schema.json",
"tags": [
"foo",
"bar"
],
"categories": [
"devices"
]
}
```

View File

@@ -10,15 +10,15 @@ This Guide explains how to properly use the Adobe Illustrator Template for Lucid
## General Workflow
The Illustrator template is created following guidelines from the [Icon Design Guide](ICON_DESIGN_GUIDE.md).
The Illustrator template is created following guidelines from the [Icon Design Guide](icon-design-guide.md).
**Workflow:**
1. Open the Document which can be found under __*/docs/templates/illustrator_template.ai*__ .
1. Download and open the [Illustrator template](https://github.com/lucide-icons/lucide/blob/main/docs/templates/illustrator_template.ai).
2. You can now remove the content from the example logo layer ("Draw") and start creating.
3. Verify that you follow the [Icon Design Guidelines](ICON_DESIGN_GUIDE.md).
3. Verify that you follow the [Icon Design Guidelines](icon-design-guide.md).
4. Before you export the file as an SVG make sure to check that you followed the guidelines and remove all unecessary layers (especially "Padding" and "Grid").
@@ -26,6 +26,6 @@ The Illustrator template is created following guidelines from the [Icon Design G
![SVG export options in Illustrator](images/illustrator-svg-options.png?raw=true "Setting Page Size")
After that, double check that the [code conventions and SVG global attributes](https://github.com/lucide-icons/lucide/blob/main/docs/ICON_DESIGN_GUIDE.md#code-conventions) are correct.
After that, double check that the [code conventions and SVG global attributes](icon-design-guide.md#code-conventions) are correct.
7. Minify paths with [SVGOMG](https://jakearchibald.github.io/svgomg/).

View File

@@ -18,7 +18,7 @@ or
yarn add lucide
```
For more details, see the [documentation](packages/lucide).
For more details, see the [documentation](packages/lucide.md).
## React
@@ -34,7 +34,7 @@ or
npm install lucide-react
```
For more details, see the [documentation](packages/lucide-react).
For more details, see the [documentation](packages/lucide-react.md).
## Vue 2
@@ -50,7 +50,7 @@ or
npm install lucide-vue
```
For more details, see the [documentation](packages/lucide-vue).
For more details, see the [documentation](packages/lucide-vue.md).
## Vue 3
@@ -66,7 +66,7 @@ or
npm install lucide-vue-next
```
For more details, see the [documentation](packages/lucide-vue-next).
For more details, see the [documentation](packages/lucide-vue-next.md).
## Svelte
@@ -82,7 +82,7 @@ or
npm install lucide-svelte
```
For more details, see the [documentation](packages/lucide-svelte).
For more details, see the [documentation](packages/lucide-svelte.md).
## Angular
@@ -96,7 +96,7 @@ or
npm install lucide-angular
```
For more details, see the [documentation](packages/lucide-angular).
For more details, see the [documentation](packages/lucide-angular.md).
## Preact
@@ -112,7 +112,7 @@ or
npm install lucide-preact
```
For more details, see the [documentation](packages/lucide-preact).
For more details, see the [documentation](packages/lucide-preact.md).
## Figma

9682
icons.json

File diff suppressed because it is too large Load Diff

View File

@@ -1,84 +0,0 @@
{
"$id": "https://lucide.dev/icons.schema.json",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$vocabulary": {
"https://json-schema.org/draft/2020-12/vocab/core": true,
"https://json-schema.org/draft/2020-12/vocab/applicator": true,
"https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
"https://json-schema.org/draft/2020-12/vocab/validation": true,
"https://json-schema.org/draft/2020-12/vocab/meta-data": true,
"https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
"https://json-schema.org/draft/2020-12/vocab/content": true
},
"title": "Lucide Icons schema",
"type": "object",
"properties": {
"icons": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/types/icon"
}
},
"categories": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/types/category"
}
}
},
"$defs": {
"types": {
"icon": {
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
},
"categories": {
"type": "array",
"items": {
"$ref": "#/$defs/types/category-reference"
},
"uniqueItems": true
}
}
},
"category": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"icon": {
"$ref": "#/$defs/types/icon-reference"
},
"weight": {
"type": "integer"
}
},
"required": [
"title",
"icon"
]
},
"icon-reference": {
"type": "string",
"format": "uri-reference"
},
"category-reference": {
"type": "string",
"format": "uri-reference"
}
}
},
"description": "A JSON Schema for icons, tags & categories defined by Lucide Icons."
}

12
icons/bird.json Normal file
View File

@@ -0,0 +1,12 @@
{
"$schema": "../icon.schema.json",
"tags": [
"peace",
"freedom",
"wing",
"avian"
],
"categories": [
"animals"
]
}

18
icons/bird.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M16 7h.01" />
<path d="M3.4 18H12a8 8 0 0 0 8-8V7a4 4 0 0 0-7.28-2.3L2 20" />
<path d="m20 7 2 .5-2 .5" />
<path d="M10 18v3" />
<path d="M14 17.75V21" />
<path d="M7 18a6 6 0 0 0 3.84-10.61" />
</svg>

After

Width:  |  Height:  |  Size: 424 B

17
icons/blinds.json Normal file
View File

@@ -0,0 +1,17 @@
{
"$schema": "../icon.schema.json",
"tags": [
"shades",
"screen",
"curtain",
"shutter",
"roller blind",
"window",
"lighting",
"household",
"home"
],
"categories": [
"home"
]
}

19
icons/blinds.svg Normal file
View File

@@ -0,0 +1,19 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 3h18" />
<path d="M20 7H8" />
<path d="M20 11H8" />
<path d="M10 19h10" />
<path d="M8 15h12" />
<path d="M4 3v14" />
<circle cx="4" cy="19" r="2" />
</svg>

After

Width:  |  Height:  |  Size: 384 B

16
icons/brain-circuit.json Normal file
View File

@@ -0,0 +1,16 @@
{
"$schema": "../icon.schema.json",
"tags": [
"mind",
"intellect",
"artificial intelligence",
"ai",
"deep learning",
"machine learning",
"computing"
],
"categories": [
"science",
"development"
]
}

21
icons/brain-circuit.svg Normal file
View File

@@ -0,0 +1,21 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08 2.5 2.5 0 0 0 4.91.05L12 20V4.5Z" />
<path d="M16 8V5c0-1.1.9-2 2-2" />
<path d="M12 13h4" />
<path d="M12 18h6a2 2 0 0 1 2 2v1" />
<path d="M12 8h8" />
<path d="M20.5 8a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
<path d="M16.5 13a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
<path d="M20.5 21a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
<path d="M18.5 3a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
</svg>

After

Width:  |  Height:  |  Size: 721 B

16
icons/brain-cog.json Normal file
View File

@@ -0,0 +1,16 @@
{
"$schema": "../icon.schema.json",
"tags": [
"mind",
"intellect",
"artificial intelligence",
"ai",
"deep learning",
"machine learning",
"computing"
],
"categories": [
"science",
"development"
]
}

20
icons/brain-cog.svg Normal file
View File

@@ -0,0 +1,20 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 9.5 22c1.21 0 2.5-.74 2.5-2.5m0-15a2.5 2.5 0 0 1 4.96-.46 2.5 2.5 0 0 1 1.98 3 2.5 2.5 0 0 1 1.32 4.24 3 3 0 0 1-.34 5.58 2.5 2.5 0 0 1-2.96 3.08A2.5 2.5 0 0 1 14.5 22c-1.21 0-2.5-.74-2.5-2.5m0-15V5m0 14.5V19" />
<circle cx="12" cy="12" r="2" />
<path d="M12 9v1" />
<path d="M12 14v1" />
<path d="m14.6 10.5-.87.5" />
<path d="m10.27 13-.87.5" />
<path d="m14.6 13.5-.87-.5" />
<path d="m10.27 11-.87-.5" />
</svg>

After

Width:  |  Height:  |  Size: 775 B

17
icons/brain.json Normal file
View File

@@ -0,0 +1,17 @@
{
"$schema": "../icon.schema.json",
"tags": [
"medical",
"mind",
"intellect",
"cerebral",
"consciousness",
"genius",
"artificial intelligence",
"ai"
],
"categories": [
"medical",
"science"
]
}

14
icons/brain.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z" />
<path d="M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z" />
</svg>

After

Width:  |  Height:  |  Size: 564 B

View File

@@ -9,9 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 5.256A8.148 8.148 0 0 0 12 5a9.04 9.04 0 0 0-2 .227M20.098 10c.572 1.068.902 2.24.902 3.444C21 17.89 16.97 21 12 21s-9-3-9-7.556c0-1.251.288-2.41.792-3.444" />
<path d="M3.75 10S2.11 3.58 3.5 3C4.89 2.42 8 3 9.781 5" />
<path d="M20.172 10.002s1.64-6.42.25-7c-1.39-.58-4.5 0-6.282 2" />
<path d="M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z" />
<path d="M8 14v.5" />
<path d="M16 14v.5" />
<path d="M11.25 16.25h1.5L12 17l-.75-.75Z" />

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 537 B

View File

@@ -4,8 +4,7 @@
"arrow",
"expand",
"horizontal",
"unfold",
"horizonal"
"unfold"
],
"categories": [
"arrows"

View File

@@ -4,8 +4,7 @@
"arrow",
"collapse",
"fold",
"horizontal",
"horizonal"
"horizontal"
],
"categories": [
"arrows"

12
icons/construction.json Normal file
View File

@@ -0,0 +1,12 @@
{
"$schema": "../icon.schema.json",
"tags": [
"roadwork",
"maintenance",
"blockade",
"barricade"
],
"categories": [
"development"
]
}

20
icons/construction.svg Normal file
View File

@@ -0,0 +1,20 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 6H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1Z" />
<path d="M17 14v7" />
<path d="M7 14v7" />
<path d="M17 3v3" />
<path d="M7 3v3" />
<path d="M2.5 6.5 10 14" />
<path d="m8 6 8 8" />
<path d="m14 6 7.5 7.5" />
</svg>

After

Width:  |  Height:  |  Size: 470 B

View File

@@ -1,7 +1,8 @@
{
"$schema": "../icon.schema.json",
"tags": [
"licence"
"licence",
"license"
],
"categories": []
}
}

View File

@@ -0,0 +1,8 @@
{
"$schema": "../icon.schema.json",
"tags": [
"licence",
"license"
],
"categories": []
}

View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M10 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1" />
<path d="M17 9.3a2.8 2.8 0 0 0-3.5 1 3.1 3.1 0 0 0 0 3.4 2.7 2.7 0 0 0 3.5 1" />
</svg>

After

Width:  |  Height:  |  Size: 410 B

10
icons/filter-x.json Normal file
View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"funnel",
"hopper"
],
"categories": [
"layout"
]
}

15
icons/filter-x.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055" />
<path d="m22 3-5 5" />
<path d="m17 3 5 5" />
</svg>

After

Width:  |  Height:  |  Size: 314 B

22
icons/fish-off.json Normal file
View File

@@ -0,0 +1,22 @@
{
"$schema": "../icon.schema.json",
"tags": [
"food",
"dish",
"restaurant",
"course",
"meal",
"seafood",
"animal",
"pet",
"sea",
"marine",
"allergy",
"intolerance",
"diet"
],
"categories": [
"food-beverage",
"animals"
]
}

1
icons/fish-off.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M18 12.47v.03M18 12v.47M17.525 17.526A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38M12.065 6.532A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058"/><path d="M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33M14.48 8.958A9.77 9.77 0 0 1 16 6.07M16 17.93a9.77 9.77 0 0 1-1.728-3.618"/><path d="m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20"/></svg>

After

Width:  |  Height:  |  Size: 701 B

14
icons/footprints.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"steps",
"walking",
"foot",
"feet",
"trail",
"shoe"
],
"categories": [
"maps"
]
}

16
icons/footprints.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z" />
<path d="M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z" />
<path d="M16 17h4" />
<path d="M4 13h4" />
</svg>

After

Width:  |  Height:  |  Size: 520 B

11
icons/forklift.json Normal file
View File

@@ -0,0 +1,11 @@
{
"$schema": "../icon.schema.json",
"tags": [
"vehicle",
"transport",
"logistics"
],
"categories": [
"transportation"
]
}

16
icons/forklift.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 12H5a2 2 0 0 0-2 2v5" />
<circle cx="13" cy="19" r="2" />
<circle cx="5" cy="19" r="2" />
<path d="M8 19h3M16 2v17h6M6 12V7c0-1.1.9-2 2-2h3l5 5" />
</svg>

After

Width:  |  Height:  |  Size: 377 B

View File

@@ -3,7 +3,9 @@
"tags": [
"grab",
"dots",
"handle"
"handle",
"move",
"drag"
],
"categories": [
"layout"

13
icons/grip.json Normal file
View File

@@ -0,0 +1,13 @@
{
"$schema": "../icon.schema.json",
"tags": [
"grab",
"dots",
"handle",
"move",
"drag"
],
"categories": [
"layout"
]
}

21
icons/grip.svg Normal file
View File

@@ -0,0 +1,21 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="5" r="1" />
<circle cx="19" cy="5" r="1" />
<circle cx="5" cy="5" r="1" />
<circle cx="12" cy="12" r="1" />
<circle cx="19" cy="12" r="1" />
<circle cx="5" cy="12" r="1" />
<circle cx="12" cy="19" r="1" />
<circle cx="19" cy="19" r="1" />
<circle cx="5" cy="19" r="1" />
</svg>

After

Width:  |  Height:  |  Size: 517 B

14
icons/helping-hand.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"agreement",
"help",
"proposal",
"charity",
"begging",
"terms"
],
"categories": [
"emoji"
]
}

14
icons/helping-hand.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m3 15 5.12-5.12A3 3 0 0 1 10.24 9H13a2 2 0 1 1 0 4h-2.5m4-.68 4.17-4.89a1.88 1.88 0 0 1 2.92 2.36l-4.2 5.94A3 3 0 0 1 14.96 17H9.83a2 2 0 0 0-1.42.59L7 19" />
<path d="m2 14 6 6" />
</svg>

After

Width:  |  Height:  |  Size: 403 B

View File

@@ -10,6 +10,6 @@
stroke-linejoin="round"
>
<path d="M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z" />
<path d="M12 13v9" />
<path d="M12 2v4" />
<path d="M12 13v8" />
<path d="M12 3v3" />
</svg>

Before

Width:  |  Height:  |  Size: 323 B

After

Width:  |  Height:  |  Size: 323 B

13
icons/nfc.json Normal file
View File

@@ -0,0 +1,13 @@
{
"$schema": "../icon.schema.json",
"tags": [
"contactless",
"payment",
"near-field communication"
],
"categories": [
"communication",
"money",
"devices"
]
}

16
icons/nfc.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 8.32a7.43 7.43 0 0 1 0 7.36"/>
<path d="M9.46 6.21a11.76 11.76 0 0 1 0 11.58"/>
<path d="M12.91 4.1a15.91 15.91 0 0 1 .01 15.8"/>
<path d="M16.37 2a20.16 20.16 0 0 1 0 20"/>
</svg>

After

Width:  |  Height:  |  Size: 402 B

View File

@@ -0,0 +1,12 @@
{
"$schema": "../icon.schema.json",
"tags": [
"parking lot",
"car park",
"no parking"
],
"categories": [
"transportation",
"maps"
]
}

View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="m5 5 14 14" />
<path d="M13 13a3 3 0 1 0 0-6H9v2" />
<path d="M9 17v-2.34" />
</svg>

After

Width:  |  Height:  |  Size: 337 B

11
icons/parking-circle.json Normal file
View File

@@ -0,0 +1,11 @@
{
"$schema": "../icon.schema.json",
"tags": [
"parking lot",
"car park"
],
"categories": [
"transportation",
"maps"
]
}

14
icons/parking-circle.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M9 17V7h4a3 3 0 0 1 0 6H9" />
</svg>

After

Width:  |  Height:  |  Size: 285 B

View File

@@ -0,0 +1,12 @@
{
"$schema": "../icon.schema.json",
"tags": [
"parking lot",
"car park",
"no parking"
],
"categories": [
"transportation",
"maps"
]
}

View File

@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3.59 3.59A2 2 0 0 1 5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-.59 1.41" />
<path d="M3 8.66V19c0 1.1.9 2 2 2h10.34" />
<path d="m2 2 20 20" />
<path d="M13 13a3 3 0 1 0 0-6H9v2" />
<path d="M9 17v-2.34" />
</svg>

After

Width:  |  Height:  |  Size: 426 B

11
icons/parking-square.json Normal file
View File

@@ -0,0 +1,11 @@
{
"$schema": "../icon.schema.json",
"tags": [
"parking lot",
"car park"
],
"categories": [
"transportation",
"maps"
]
}

14
icons/parking-square.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="18" height="18" x="3" y="3" rx="2" />
<path d="M9 17V7h4a3 3 0 0 1 0 6H9" />
</svg>

After

Width:  |  Height:  |  Size: 302 B

14
icons/pill.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"medicine",
"medication",
"drug",
"prescription",
"tablet",
"pharmacy"
],
"categories": [
"medical"
]
}

14
icons/pill.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z" />
<path d="m8.5 8.5 7 7" />
</svg>

After

Width:  |  Height:  |  Size: 316 B

View File

@@ -0,0 +1,17 @@
{
"$schema": "../icon.schema.json",
"tags": [
"text",
"font",
"typography",
"format",
"x",
"remove",
"delete",
"times",
"clear"
],
"categories": [
"text"
]
}

View File

@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 7V4h16v3" />
<path d="M5 20h6" />
<path d="M13 4 8 20" />
<path d="m15 15 5 5" />
<path d="m20 15-5 5" />
</svg>

After

Width:  |  Height:  |  Size: 336 B

14
icons/router.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"computer",
"server",
"cloud"
],
"categories": [
"development",
"devices",
"connectivity",
"home"
]
}

18
icons/router.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="20" height="8" x="2" y="14" rx="2" />
<path d="M6.01 18H6" />
<path d="M10.01 18H10" />
<path d="M15 10v4" />
<path d="M17.84 7.17a4 4 0 0 0-5.66 0" />
<path d="M20.66 4.34a8 8 0 0 0-11.31 0" />
</svg>

After

Width:  |  Height:  |  Size: 428 B

14
icons/ship.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"boat",
"trip",
"maritime",
"navy"
],
"categories": [
"transportation",
"travel",
"maps"
]
}

17
icons/ship.svg Normal file
View File

@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1 .6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1" />
<path d="M19.38 20A11.6 11.6 0 0 0 21 14l-9-4-9 4c0 2.9.94 5.34 2.81 7.76" />
<path d="M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6" />
<path d="M12 10v4" />
<path d="M12 2v3" />
</svg>

After

Width:  |  Height:  |  Size: 514 B

13
icons/smartphone-nfc.json Normal file
View File

@@ -0,0 +1,13 @@
{
"$schema": "../icon.schema.json",
"tags": [
"contactless",
"payment",
"near-field communication"
],
"categories": [
"communication",
"money",
"devices"
]
}

16
icons/smartphone-nfc.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect x="2" y="6" width="7" height="12" rx="1" />
<path d="M13 8.32a7.43 7.43 0 0 1 0 7.36" />
<path d="M16.46 6.21a11.76 11.76 0 0 1 0 11.58" />
<path d="M19.91 4.1a15.91 15.91 0 0 1 .01 15.8" />
</svg>

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"split",
"divide"
],
"categories": [
"layout"
]
}

View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M8 19H5c-1 0-2-1-2-2V7c0-1 1-2 2-2h3" />
<path d="M16 5h3c1 0 2 1 2 2v10c0 1-1 2-2 2h-3" />
<line x1="12" x2="12" y1="4" y2="20" />
</svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"split",
"divide"
],
"categories": [
"layout"
]
}

View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3" />
<path d="M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3" />
<line x1="4" x2="20" y1="12" y2="12" />
</svg>

After

Width:  |  Height:  |  Size: 355 B

16
icons/stamp.json Normal file
View File

@@ -0,0 +1,16 @@
{
"$schema": "../icon.schema.json",
"tags": [
"mark",
"print",
"clone",
"loyalty",
"library"
],
"categories": [
"design",
"cursors",
"tools",
"maps"
]
}

15
icons/stamp.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 22h14" />
<path d="M19.27 13.73A2.5 2.5 0 0 0 17.5 13h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-1.5c0-.66-.26-1.3-.73-1.77Z" />
<path d="M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-3-3c-1.66 0-3 1-3 3s1 2 1 3.5V13" />
</svg>

After

Width:  |  Height:  |  Size: 454 B

9
icons/subtitles.json Normal file
View File

@@ -0,0 +1,9 @@
{
"$schema": "../icon.schema.json",
"tags": [
"captions",
"closed captions",
"accessibility"
],
"categories": []
}

14
icons/tablets.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"medicine",
"medication",
"drug",
"prescription",
"pills",
"pharmacy"
],
"categories": [
"medical"
]
}

16
icons/tablets.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="7" cy="7" r="5" />
<circle cx="17" cy="17" r="5" />
<path d="M12 17h10" />
<path d="m3.46 10.54 7.08-7.08" />
</svg>

After

Width:  |  Height:  |  Size: 338 B

14
icons/tower-control.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"airport",
"travel",
"tower",
"transportation",
"lighthouse"
],
"categories": [
"travel",
"transportation"
]
}

19
icons/tower-control.svg Normal file
View File

@@ -0,0 +1,19 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18.2 12.27 20 6H4l1.8 6.27a1 1 0 0 0 .95.73h10.5a1 1 0 0 0 .96-.73Z" />
<path d="M8 13v9" />
<path d="M16 22v-9" />
<path d="m9 6 1 7" />
<path d="m15 6-1 7" />
<path d="M12 6V2" />
<path d="M13 2h-2" />
</svg>

After

Width:  |  Height:  |  Size: 436 B

14
icons/utility-pole.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"electricity",
"energy",
"transmission line",
"telegraph pole"
],
"categories": [
"buildings",
"home",
"sustainability"
]
}

19
icons/utility-pole.svg Normal file
View File

@@ -0,0 +1,19 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 2v20" />
<path d="M2 5h20" />
<path d="M3 3v2" />
<path d="M7 3v2" />
<path d="M17 3v2" />
<path d="M21 3v2" />
<path d="m19 5-7 7-7-7" />
</svg>

After

Width:  |  Height:  |  Size: 374 B

View File

@@ -16,16 +16,17 @@
"build:outline-icons": "pnpm --filter outline-svg start",
"generate:supersprite": "node ./scripts/generateSuperSVG.mjs",
"optimize": "node ./scripts/optimizeSvgs.mjs",
"addtags": "node ./scripts/addMissingKeysToTags.mjs",
"addjsons": "node scripts/addMissingIconJsonFiles.mjs",
"checkIcons": "node scripts/checkIconsAndCategories.mjs --presets @babel/env",
"tags2icons": "node scripts/migrateTagsToIcons.mjs --presets @babel/env",
"icons2tags": "node scripts/migrateIconsToTags.mjs --presets @babel/env",
"icons2categories": "node scripts/migrateIconsToCategories.mjs --presets @babel/env",
"categories2icons": "node scripts/migrateCategoriesToIcons.mjs --presets @babel/env",
"icons2files": "node scripts/migrateIconsToJsonFiles.mjs --presets @babel/env",
"generate:changelog": "node ./scripts/generateChangelog.mjs",
"postinstall": "husky install",
"lint": "eslint --ext .ts,.js,.mjs ./{packages/lucide,scripts}"
"lint": "eslint --ext .ts,.js,.mjs ./{packages/lucide,scripts}",
"prepare": "husky install",
"gi": "node ./scripts/generate/generateIcons.mjs"
},
"devDependencies": {
"eslint": "^8.26.0",
@@ -41,11 +42,6 @@
"svgo": "^3.0.0",
"svgson": "^5.2.1"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"icons/*.svg": "node ./scripts/optimizeStagedSvgs.mjs"
},

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-angular",
"description": "A Lucide icon library package for Angular applications",
"version": "0.109.0",
"version": "0.126.0",
"author": "SMAH1",
"license": "ISC",
"homepage": "https://lucide.dev",

View File

@@ -23,8 +23,10 @@ export const fetchIcons = async (cachedIcons? : LucideIcons): Promise<LucideIcon
return cachedIcons
}
const iconNodesResponse = await fetch(`https://unpkg.com/lucide-static@${packageJson.version}/icon-nodes.json`)
const tagsResponse = await fetch('https://unpkg.com/lucide-static@latest/tags.json')
const [iconNodesResponse, tagsResponse] = await Promise.all([
fetch('https://lucide.dev/api/icon-nodes'),
fetch('https://lucide.dev/api/tags')
])
const iconNodes = await iconNodesResponse.json();
const tags = await tagsResponse.json();

View File

@@ -1,6 +1,6 @@
name: lucide_icons
description: A Lucide icon library package for Flutter applications. Fork of Feather Icons, open for anyone to contribute icons.
version: 0.109.0
version: 0.126.0
homepage: https://lucide.dev
repository: https://github.com/lucide-icons/lucide

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-preact",
"description": "A Lucide icon library package for Preact applications",
"version": "0.109.0",
"version": "0.126.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-react-native",
"description": "A Lucide icon library package for React Native applications",
"version": "0.109.0",
"version": "0.126.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-react",
"description": "A Lucide icon library package for React applications",
"version": "0.109.0",
"version": "0.126.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -12,11 +12,11 @@
"main": "lib/index.js",
"scripts": {
"copy:icons": "cp -r ../../icons icons",
"copy:tags": "cp ../../tags.json tags.json",
"copy:license": "cp ../../LICENSE ./LICENSE",
"build": "pnpm clean && pnpm copy:license && pnpm copy:icons && pnpm copy:tags && pnpm build:lib",
"build:tags": "node ../../scripts/migrateIconsToTags.mjs",
"build": "pnpm clean && pnpm copy:license && pnpm copy:icons && pnpm build:lib && pnpm build:tags",
"build:lib": "node ./scripts/buildLib.mjs",
"clean": "rm -rf lib && rm -rf build && rm -rf icons && rm -f sprite.svg && rm -f tags.json",
"clean": "rm -rf lib && rm -rf build && rm -rf icons && rm -f sprite.svg",
"version": "pnpm version --git-tag-version=false"
},
"devDependencies": {

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-svelte",
"description": "A Lucide icon library package for Svelte applications",
"version": "0.109.0",
"version": "0.126.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-vue-next",
"version": "0.109.0",
"version": "0.126.0",
"author": "Eric Fennis",
"description": "A Lucide icon library package for Vue 3 applications",
"license": "ISC",

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-vue",
"version": "0.109.0",
"version": "0.126.0",
"author": "Eric Fennis",
"description": "A Lucide icon library package for Vue 2 applications",
"license": "ISC",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide",
"description": "A Lucide icon library package for web and javascript applications.",
"version": "0.109.0",
"version": "0.126.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

281
pnpm-lock.yaml generated
View File

@@ -375,6 +375,7 @@ importers:
'@next/eslint-plugin-next': ^12.2.5
'@next/mdx': ^11.0.0
'@svgr/webpack': ^6.3.1
'@swc/core': ^1.3.35
'@testing-library/dom': ^7.31.2
'@testing-library/jest-dom': ^5.16.5
'@testing-library/react': ^11.2.7
@@ -400,6 +401,7 @@ importers:
lucide-react: ^0.94.0
next: '12'
next-mdx-remote: ^3.0.2
node-fetch: '2'
prettier: ^2.3.2
prism-react-renderer: ^1.2.1
react: 17.0.2
@@ -407,6 +409,9 @@ importers:
react-dom: 17.0.2
react-svg-loader: ^3.0.3
react-test-renderer: 17.0.2
svgson: ^5.2.1
ts-node: ~10.9.1
tslib: ^2.4.0
typescript: ^4.3.5
dependencies:
'@chakra-ui/react': 1.8.8_vt5jn3lkv6hocyebmjm7gusm6e
@@ -431,8 +436,10 @@ importers:
react-color: 2.19.3_react@17.0.2
react-dom: 17.0.2_react@17.0.2
react-svg-loader: 3.0.3
svgson: 5.2.1
devDependencies:
'@next/eslint-plugin-next': 12.2.5
'@swc/core': 1.3.35
'@testing-library/dom': 7.31.2
'@testing-library/jest-dom': 5.16.5
'@testing-library/react': 11.2.7_sfoxds7t5ydpegc3knd667wn6m
@@ -447,9 +454,12 @@ importers:
babel-loader: 8.2.5_webpack@5.74.0
eslint: 8.22.0
eslint-config-prettier: 8.5.0_eslint@8.22.0
jest: 26.6.3
jest: 26.6.3_ts-node@10.9.1
node-fetch: 2.6.7
prettier: 2.7.1
react-test-renderer: 17.0.2_react@17.0.2
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
tslib: 2.4.0
typescript: 4.8.4
tools/build-icons:
@@ -7487,7 +7497,7 @@ packages:
slash: 3.0.0
dev: true
/@jest/core/26.6.3:
/@jest/core/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==}
engines: {node: '>= 10.14.2'}
dependencies:
@@ -7502,14 +7512,14 @@ packages:
exit: 0.1.2
graceful-fs: 4.2.10
jest-changed-files: 26.6.2
jest-config: 26.6.3
jest-config: 26.6.3_ts-node@10.9.1
jest-haste-map: 26.6.2
jest-message-util: 26.6.2
jest-regex-util: 26.0.0
jest-resolve: 26.6.2
jest-resolve-dependencies: 26.6.3
jest-runner: 26.6.3
jest-runtime: 26.6.3
jest-runner: 26.6.3_ts-node@10.9.1
jest-runtime: 26.6.3_ts-node@10.9.1
jest-snapshot: 26.6.2
jest-util: 26.6.2
jest-validate: 26.6.2
@@ -7632,15 +7642,15 @@ packages:
collect-v8-coverage: 1.0.1
dev: true
/@jest/test-sequencer/26.6.3:
/@jest/test-sequencer/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==}
engines: {node: '>= 10.14.2'}
dependencies:
'@jest/test-result': 26.6.2
graceful-fs: 4.2.10
jest-haste-map: 26.6.2
jest-runner: 26.6.3
jest-runtime: 26.6.3
jest-runner: 26.6.3_ts-node@10.9.1
jest-runtime: 26.6.3_ts-node@10.9.1
transitivePeerDependencies:
- bufferutil
- canvas
@@ -9106,6 +9116,113 @@ packages:
- supports-color
dev: false
/@swc/core-darwin-arm64/1.3.35:
resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-darwin-x64/1.3.35:
resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf/1.3.35:
resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-gnu/1.3.35:
resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-musl/1.3.35:
resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-gnu/1.3.35:
resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-musl/1.3.35:
resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-arm64-msvc/1.3.35:
resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-ia32-msvc/1.3.35:
resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-x64-msvc/1.3.35:
resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core/1.3.35:
resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==}
engines: {node: '>=10'}
requiresBuild: true
optionalDependencies:
'@swc/core-darwin-arm64': 1.3.35
'@swc/core-darwin-x64': 1.3.35
'@swc/core-linux-arm-gnueabihf': 1.3.35
'@swc/core-linux-arm64-gnu': 1.3.35
'@swc/core-linux-arm64-musl': 1.3.35
'@swc/core-linux-x64-gnu': 1.3.35
'@swc/core-linux-x64-musl': 1.3.35
'@swc/core-win32-arm64-msvc': 1.3.35
'@swc/core-win32-ia32-msvc': 1.3.35
'@swc/core-win32-x64-msvc': 1.3.35
dev: true
/@swc/helpers/0.4.3:
resolution: {integrity: sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==}
dependencies:
@@ -10147,14 +10264,6 @@ packages:
acorn: 8.8.1
dev: true
/acorn-jsx/5.3.2_acorn@8.8.0:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
acorn: 8.8.0
dev: true
/acorn-jsx/5.3.2_acorn@8.8.1:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -10702,7 +10811,7 @@ packages:
loader-utils: 2.0.2
make-dir: 3.1.0
schema-utils: 2.7.1
webpack: 5.74.0
webpack: 5.74.0_@swc+core@1.3.35
dev: true
/babel-loader/8.2.5_xc6oct4hcywdrbo4ned6ytbybm:
@@ -14113,8 +14222,8 @@ packages:
resolution: {integrity: sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
acorn: 8.8.0
acorn-jsx: 5.3.2_acorn@8.8.0
acorn: 8.8.1
acorn-jsx: 5.3.2_acorn@8.8.1
eslint-visitor-keys: 3.3.0
dev: true
@@ -16097,12 +16206,12 @@ packages:
throat: 5.0.0
dev: true
/jest-cli/26.6.3:
/jest-cli/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==}
engines: {node: '>= 10.14.2'}
hasBin: true
dependencies:
'@jest/core': 26.6.3
'@jest/core': 26.6.3_ts-node@10.9.1
'@jest/test-result': 26.6.2
'@jest/types': 26.6.2
chalk: 4.1.2
@@ -16110,7 +16219,7 @@ packages:
graceful-fs: 4.2.10
import-local: 3.1.0
is-ci: 2.0.0
jest-config: 26.6.3
jest-config: 26.6.3_ts-node@10.9.1
jest-util: 26.6.2
jest-validate: 26.6.2
prompts: 2.4.2
@@ -16123,7 +16232,7 @@ packages:
- utf-8-validate
dev: true
/jest-config/26.6.3:
/jest-config/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==}
engines: {node: '>= 10.14.2'}
peerDependencies:
@@ -16133,7 +16242,7 @@ packages:
optional: true
dependencies:
'@babel/core': 7.20.2
'@jest/test-sequencer': 26.6.3
'@jest/test-sequencer': 26.6.3_ts-node@10.9.1
'@jest/types': 26.6.2
babel-jest: 26.6.3_@babel+core@7.20.2
chalk: 4.1.2
@@ -16143,13 +16252,14 @@ packages:
jest-environment-jsdom: 26.6.2
jest-environment-node: 26.6.2
jest-get-type: 26.3.0
jest-jasmine2: 26.6.3
jest-jasmine2: 26.6.3_ts-node@10.9.1
jest-regex-util: 26.0.0
jest-resolve: 26.6.2
jest-util: 26.6.2
jest-validate: 26.6.2
micromatch: 4.0.5
pretty-format: 26.6.2
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
transitivePeerDependencies:
- bufferutil
- canvas
@@ -16278,7 +16388,7 @@ packages:
fsevents: 2.3.2
dev: true
/jest-jasmine2/26.6.3:
/jest-jasmine2/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==}
engines: {node: '>= 10.14.2'}
dependencies:
@@ -16295,7 +16405,7 @@ packages:
jest-each: 26.6.2
jest-matcher-utils: 26.6.2
jest-message-util: 26.6.2
jest-runtime: 26.6.3
jest-runtime: 26.6.3_ts-node@10.9.1
jest-snapshot: 26.6.2
jest-util: 26.6.2
pretty-format: 26.6.2
@@ -16421,7 +16531,7 @@ packages:
slash: 3.0.0
dev: true
/jest-runner/26.6.3:
/jest-runner/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==}
engines: {node: '>= 10.14.2'}
dependencies:
@@ -16434,13 +16544,13 @@ packages:
emittery: 0.7.2
exit: 0.1.2
graceful-fs: 4.2.10
jest-config: 26.6.3
jest-config: 26.6.3_ts-node@10.9.1
jest-docblock: 26.0.0
jest-haste-map: 26.6.2
jest-leak-detector: 26.6.2
jest-message-util: 26.6.2
jest-resolve: 26.6.2
jest-runtime: 26.6.3
jest-runtime: 26.6.3_ts-node@10.9.1
jest-util: 26.6.2
jest-worker: 26.6.2
source-map-support: 0.5.21
@@ -16453,7 +16563,7 @@ packages:
- utf-8-validate
dev: true
/jest-runtime/26.6.3:
/jest-runtime/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==}
engines: {node: '>= 10.14.2'}
hasBin: true
@@ -16473,7 +16583,7 @@ packages:
exit: 0.1.2
glob: 7.2.3
graceful-fs: 4.2.10
jest-config: 26.6.3
jest-config: 26.6.3_ts-node@10.9.1
jest-haste-map: 26.6.2
jest-message-util: 26.6.2
jest-mock: 26.6.2
@@ -16618,14 +16728,14 @@ packages:
supports-color: 8.1.1
dev: true
/jest/26.6.3:
/jest/26.6.3_ts-node@10.9.1:
resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==}
engines: {node: '>= 10.14.2'}
hasBin: true
dependencies:
'@jest/core': 26.6.3
'@jest/core': 26.6.3_ts-node@10.9.1
import-local: 3.1.0
jest-cli: 26.6.3
jest-cli: 26.6.3_ts-node@10.9.1
transitivePeerDependencies:
- bufferutil
- canvas
@@ -22223,6 +22333,31 @@ packages:
supports-hyperlinks: 2.2.0
dev: true
/terser-webpack-plugin/5.3.5_oogp7xv4rppobi5ktio24rc7mq:
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
esbuild: '*'
uglify-js: '*'
webpack: ^5.1.0
peerDependenciesMeta:
'@swc/core':
optional: true
esbuild:
optional: true
uglify-js:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.15
'@swc/core': 1.3.35
jest-worker: 27.5.1
schema-utils: 3.1.1
serialize-javascript: 6.0.0
terser: 5.16.1
webpack: 5.74.0_@swc+core@1.3.35
dev: true
/terser-webpack-plugin/5.3.5_webpack@5.74.0:
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
@@ -22243,7 +22378,7 @@ packages:
jest-worker: 27.5.1
schema-utils: 3.1.1
serialize-javascript: 6.0.0
terser: 5.14.2
terser: 5.16.1
webpack: 5.74.0
dev: true
@@ -22484,7 +22619,39 @@ packages:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.3
'@types/node': 18.11.4
acorn: 8.8.0
acorn: 8.8.1
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 4.8.4
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
/ts-node/10.9.1_iuagarv54md6u2z4nbxsm6bl6u:
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@swc/core': 1.3.35
'@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.3
'@types/node': 14.18.25
acorn: 8.8.1
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
@@ -23620,6 +23787,46 @@ packages:
- uglify-js
dev: true
/webpack/5.74.0_@swc+core@1.3.35:
resolution: {integrity: sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
webpack-cli: '*'
peerDependenciesMeta:
webpack-cli:
optional: true
dependencies:
'@types/eslint-scope': 3.7.4
'@types/estree': 0.0.51
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
acorn: 8.8.1
acorn-import-assertions: 1.8.0_acorn@8.8.1
browserslist: 4.21.4
chrome-trace-event: 1.0.3
enhanced-resolve: 5.10.0
es-module-lexer: 0.9.3
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.10
json-parse-even-better-errors: 2.3.1
loader-runner: 4.3.0
mime-types: 2.1.35
neo-async: 2.6.2
schema-utils: 3.1.1
tapable: 2.2.1
terser-webpack-plugin: 5.3.5_oogp7xv4rppobi5ktio24rc7mq
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
- esbuild
- uglify-js
dev: true
/websocket-driver/0.7.4:
resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
engines: {node: '>=0.8.0'}

View File

@@ -0,0 +1,21 @@
import path from 'path';
import {getCurrentDirPath, readAllMetadata, readSvgDirectory, writeFile} from './helpers.mjs';
const currentDir = getCurrentDirPath(import.meta.url);
const ICONS_DIR = path.resolve(currentDir, '../icons');
const icons = readAllMetadata(ICONS_DIR);
const svgFiles = readSvgDirectory(ICONS_DIR);
const iconNames = svgFiles.map((icon) => icon.split('.')[0]);
iconNames.forEach(iconName => {
if (typeof icons[iconName] === 'undefined') {
const iconContent = JSON.stringify({
"$schema": "../icon.schema.json",
"tags": [],
"categories": []
}, null, 2);
writeFile(iconContent, `${iconName}.json`, path.resolve(currentDir, '..'));
}
});

View File

@@ -1,42 +0,0 @@
import path from 'path';
import tags from '../tags.json' assert { type: 'json' };
import { readSvgDirectory, writeFile, getCurrentDirPath } from './helpers.mjs';
const currentDir = getCurrentDirPath(import.meta.url);
const ICONS_DIR = path.resolve(currentDir, '../icons');
console.log(`Read all tags`);
const svgFiles = readSvgDirectory(ICONS_DIR);
const iconNames = svgFiles.map((icon) => icon.split('.')[0]);
const iconTags = iconNames
.map((iconName) => ({
name: iconName,
tags: tags[iconName] || [],
}))
.sort((a, b) => {
const nameA = a.name;
const nameB = b.name;
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
const newTags = iconTags.reduce((acc, { name, tags }) => {
acc[name] = tags;
return acc;
}, {});
const tagsContent = JSON.stringify(newTags, null, 2);
writeFile(tagsContent, 'tags.json', path.resolve(currentDir, '..'));

View File

@@ -1,50 +1,52 @@
import path from 'path';
import icons from '../icons.json' assert { type: 'json' };
import { readSvgDirectory, getCurrentDirPath } from './helpers.mjs';
import { readSvgDirectory, getCurrentDirPath, readAllMetadata } from './helpers.mjs';
const currentDir = getCurrentDirPath(import.meta.url)
const ICONS_DIR = path.resolve(currentDir, '../icons');
const icons = readAllMetadata(ICONS_DIR);
const CATEGORIES_DIR = path.resolve(currentDir, '../categories');
const categories = readAllMetadata(CATEGORIES_DIR);
console.log(`Read all icons`);
console.log('Reading all icons')
const svgFiles = readSvgDirectory(ICONS_DIR);
const iconNames = svgFiles.map(icon => icon.split('.')[0]);
let error = false;
iconNames.forEach(iconName => {
if (typeof icons.icons[iconName] === 'undefined') {
console.error(`'${iconName}.svg' is not present in 'icons.json'.`);
if (typeof icons[iconName] === 'undefined') {
console.error(`'${iconName}.svg' does not have a matching JSON file.`);
error = true;
}
});
Object.keys(icons.icons).forEach(iconName => {
const icon = icons.icons[iconName];
Object.keys(icons).forEach(iconName => {
const icon = icons[iconName];
if (iconNames.indexOf(iconName) === -1) {
console.error(`'${iconName}.svg' does not exist.`);
error = true;
}
icon.categories.forEach(categoryName => {
if (typeof icons.categories[categoryName] === 'undefined') {
if (typeof categories[categoryName] === 'undefined') {
console.error(`Icon '${iconName}' refers to the non-existing category '${categoryName}'.`);
error = true;
}
});
});
Object.keys(icons.categories).forEach(categoryName => {
const category = icons.categories[categoryName];
Object.keys(categories).forEach(categoryName => {
const category = categories[categoryName];
if (!category.icon) {
console.error(`Category '${categoryName}' does not use an icon '${category.icon}'.`);
error = true;
} else if (typeof icons.icons[category.icon] === 'undefined') {
} else if (typeof icons[category.icon] === 'undefined') {
console.error(`Category '${categoryName}' uses the non-existing icon '${category.icon}'.`);
error = true;
}
});
if (error) {
throw new Error('At least one error in icons.json prevents from committing changes.');
console.error('At least one error in icon JSONs prevents from committing changes.');
process.exit(1);
}

View File

@@ -0,0 +1,35 @@
import path from 'path';
import {getCurrentDirPath, writeFileIfNotExists} from "../helpers.mjs";
const currentDir = getCurrentDirPath(import.meta.url);
const ICONS_DIR = path.resolve(currentDir, '../../icons');
const iconNames = process.argv.slice(2);
const iconSvgTemplate = `<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
</svg>
`;
const iconJsonTemplate = `{
"$schema": "../icon.schema.json",
"tags": [
],
"categories": [
]
}
`;
iconNames.forEach(iconName => {
writeFileIfNotExists(iconSvgTemplate, `${iconName}.svg`, ICONS_DIR);
writeFileIfNotExists(iconJsonTemplate, `${iconName}.json`, ICONS_DIR);
});

View File

@@ -70,6 +70,43 @@ export const appendFile = (content, fileName, outputDirectory) =>
export const writeFile = (content, fileName, outputDirectory) =>
fs.writeFileSync(path.join(outputDirectory, fileName), content, 'utf-8');
/**
* writes content to a file if it does not exist
*
* @param {string} content
* @param {string} fileName
* @param {string} outputDirectory
*/
export const writeFileIfNotExists = (content, fileName, outputDirectory) => {
if (!fs.existsSync(path.join(outputDirectory, fileName))) {
writeFile(content, fileName, outputDirectory);
}
};
/**
* Reads metadata from the icons/categories directories
*
* @param {string} directory
* @returns {object} A map of icon or category metadata
*/
export const readAllMetadata = (directory) =>
fs.readdirSync(directory).filter((file) => path.extname(file) === '.json').reduce(
(acc, fileName, i) => {
acc[path.basename(fileName, '.json')] = readMetadata(fileName, directory);
return acc;
}, {}
);
/**
* Reads metadata for an icon or category
*
* @param {string} fileName
* @param {string} directory
* @returns {object} The metadata for the icon or category
*/
export const readMetadata = (fileName, directory) =>
JSON.parse(fs.readFileSync(path.join(directory, fileName), 'utf-8'));
/**
* reads the icon directory
*

View File

@@ -1,16 +1,19 @@
import path from 'path';
import icons from '../icons.json' assert { type: 'json' };
import categories from '../categories.json' assert { type: 'json' };
import { mergeArrays, writeFile, getCurrentDirPath } from './helpers.mjs';
import { mergeArrays, writeFile, readAllMetadata, getCurrentDirPath } from './helpers.mjs';
const currentDir = getCurrentDirPath(import.meta.url)
const ICONS_DIR = path.resolve(currentDir, '../icons');
const icons = readAllMetadata(ICONS_DIR);
Object.keys(categories).forEach(categoryName => {
categories[categoryName].forEach(iconName => {
mergeArrays(icons.icons[iconName].categories, [categoryName]);
icons[iconName].categories = mergeArrays(icons[iconName].categories, [categoryName]);
});
});
const iconsContent = JSON.stringify(icons, null, 2);
Object.keys(icons).forEach(iconName => {
const iconContent = JSON.stringify(icons[iconName], null, 2);
writeFile(iconContent, `${iconName}.json`, path.resolve(currentDir, '../icons'));
})
writeFile(iconsContent, 'icons.json', path.resolve(currentDir, '..'));

View File

@@ -1,12 +1,13 @@
import path from 'path';
import icons from '../icons.json' assert { type: 'json' };
import { writeFile, getCurrentDirPath } from './helpers.mjs';
import { writeFile, getCurrentDirPath, readAllMetadata } from './helpers.mjs';
const currentDir = getCurrentDirPath(import.meta.url)
const ICONS_DIR = path.resolve(currentDir, '../icons');
const icons = readAllMetadata(ICONS_DIR);
const newCategories = {};
Object.keys(icons.icons).forEach(iconName => {
icons.icons[iconName].categories.forEach(categoryName => {
Object.keys(icons).forEach(iconName => {
icons[iconName].categories.forEach(categoryName => {
newCategories[categoryName] = newCategories[categoryName] || [];
newCategories[categoryName].push(iconName);
});

Some files were not shown because too many files have changed in this diff Show More