Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
244a5a396e | ||
|
|
2396a53bad | ||
|
|
07a78731a5 | ||
|
|
4e2449dc9f | ||
|
|
f02067ea55 | ||
|
|
57a72cbb38 | ||
|
|
0baf1a49ef | ||
|
|
0879262bdb | ||
|
|
9a41d931e9 | ||
|
|
7c111a53e1 | ||
|
|
7209ed3fcd | ||
|
|
e85dffa9b4 | ||
|
|
0c3d6cd097 | ||
|
|
72c25a9936 | ||
|
|
5226c326f8 | ||
|
|
de2e3036c0 | ||
|
|
8adeb025a6 | ||
|
|
22ffb58649 | ||
|
|
278309fe55 | ||
|
|
bcbae1e406 | ||
|
|
1173134099 | ||
|
|
894993478f | ||
|
|
36f84a74f6 | ||
|
|
1479a9dbd8 | ||
|
|
2485f6117a | ||
|
|
0bbaaa8abd | ||
|
|
a82af02687 | ||
|
|
a5be1b4101 |
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
pnpm run checkIcons
|
||||
exit $?
|
||||
2
.github/PULL_REQUEST_TEMPLATE/new-icon.md
vendored
@@ -5,7 +5,7 @@ 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` -->
|
||||
|
||||
41
.github/actions/check-icons.yml
vendored
Normal 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
|
||||
5
.husky/pre-commit
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
pnpm lint-staged
|
||||
pnpm checkIcons
|
||||
@@ -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.
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"$ref": "#/$defs/types/icon-reference"
|
||||
"type": "string"
|
||||
},
|
||||
"weight": {
|
||||
"type": "integer"
|
||||
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
## 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).
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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/).
|
||||
@@ -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
|
||||
|
||||
|
||||
12
icons/bird.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"peace",
|
||||
"freedom",
|
||||
"wing",
|
||||
"avian"
|
||||
],
|
||||
"categories": [
|
||||
"animals"
|
||||
]
|
||||
}
|
||||
18
icons/bird.svg
Normal 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
@@ -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
@@ -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 |
12
icons/construction.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"roadwork",
|
||||
"maintenance",
|
||||
"blockade",
|
||||
"barricade"
|
||||
],
|
||||
"categories": [
|
||||
"development"
|
||||
]
|
||||
}
|
||||
20
icons/construction.svg
Normal 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 |
10
icons/filter-x.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"funnel",
|
||||
"hopper"
|
||||
],
|
||||
"categories": [
|
||||
"layout"
|
||||
]
|
||||
}
|
||||
15
icons/filter-x.svg
Normal 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 |
14
icons/footprints.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"steps",
|
||||
"walking",
|
||||
"foot",
|
||||
"feet",
|
||||
"trail",
|
||||
"shoe"
|
||||
],
|
||||
"categories": [
|
||||
"maps"
|
||||
]
|
||||
}
|
||||
16
icons/footprints.svg
Normal 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
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"vehicle",
|
||||
"transport",
|
||||
"logistics"
|
||||
],
|
||||
"categories": [
|
||||
"transportation"
|
||||
]
|
||||
}
|
||||
16
icons/forklift.svg
Normal 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 |
14
icons/helping-hand.json
Normal 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
@@ -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 |
@@ -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
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"contactless",
|
||||
"payment",
|
||||
"near-field communication"
|
||||
],
|
||||
"categories": [
|
||||
"communication",
|
||||
"money",
|
||||
"devices"
|
||||
]
|
||||
}
|
||||
16
icons/nfc.svg
Normal 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 |
14
icons/pill.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"medicine",
|
||||
"medication",
|
||||
"drug",
|
||||
"prescription",
|
||||
"tablet",
|
||||
"pharmacy"
|
||||
],
|
||||
"categories": [
|
||||
"medical"
|
||||
]
|
||||
}
|
||||
14
icons/pill.svg
Normal 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 |
14
icons/router.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"computer",
|
||||
"server",
|
||||
"cloud"
|
||||
],
|
||||
"categories": [
|
||||
"development",
|
||||
"devices",
|
||||
"connectivity",
|
||||
"home"
|
||||
]
|
||||
}
|
||||
18
icons/router.svg
Normal 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
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"boat",
|
||||
"trip",
|
||||
"maritime",
|
||||
"navy"
|
||||
],
|
||||
"categories": [
|
||||
"transportation",
|
||||
"travel",
|
||||
"maps"
|
||||
]
|
||||
}
|
||||
17
icons/ship.svg
Normal 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
@@ -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
@@ -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 |
10
icons/split-square-horizontal.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"split",
|
||||
"divide"
|
||||
],
|
||||
"categories": [
|
||||
"layout"
|
||||
]
|
||||
}
|
||||
15
icons/split-square-horizontal.svg
Normal 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 |
10
icons/split-square-vertical.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"split",
|
||||
"divide"
|
||||
],
|
||||
"categories": [
|
||||
"layout"
|
||||
]
|
||||
}
|
||||
15
icons/split-square-vertical.svg
Normal 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
@@ -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
@@ -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 |
14
icons/tablets.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"medicine",
|
||||
"medication",
|
||||
"drug",
|
||||
"prescription",
|
||||
"pills",
|
||||
"pharmacy"
|
||||
],
|
||||
"categories": [
|
||||
"medical"
|
||||
]
|
||||
}
|
||||
16
icons/tablets.svg
Normal 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
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../icon.schema.json",
|
||||
"tags": [
|
||||
"airport",
|
||||
"travel",
|
||||
"tower",
|
||||
"transportation",
|
||||
"lighthouse"
|
||||
],
|
||||
"categories": [
|
||||
"travel",
|
||||
"transportation"
|
||||
]
|
||||
}
|
||||
19
icons/tower-control.svg
Normal 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
@@ -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
@@ -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 |
@@ -24,7 +24,9 @@
|
||||
"categories2icons": "node scripts/migrateCategoriesToIcons.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",
|
||||
@@ -40,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"
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-angular",
|
||||
"description": "A Lucide icon library package for Angular applications",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"author": "SMAH1",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
|
||||
@@ -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.114.0
|
||||
version: 0.124.0
|
||||
homepage: https://lucide.dev
|
||||
repository: https://github.com/lucide-icons/lucide
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-preact",
|
||||
"description": "A Lucide icon library package for Preact applications",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-react-native",
|
||||
"description": "A Lucide icon library package for React Native applications",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-react",
|
||||
"description": "A Lucide icon library package for React applications",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-svelte",
|
||||
"description": "A Lucide icon library package for Svelte applications",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lucide-vue-next",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"author": "Eric Fennis",
|
||||
"description": "A Lucide icon library package for Vue 3 applications",
|
||||
"license": "ISC",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lucide-vue",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"author": "Eric Fennis",
|
||||
"description": "A Lucide icon library package for Vue 2 applications",
|
||||
"license": "ISC",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide",
|
||||
"description": "A Lucide icon library package for web and javascript applications.",
|
||||
"version": "0.114.0",
|
||||
"version": "0.124.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
|
||||
187
pnpm-lock.yaml
generated
@@ -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
|
||||
@@ -437,6 +439,7 @@ importers:
|
||||
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
|
||||
@@ -452,9 +455,10 @@ importers:
|
||||
eslint: 8.22.0
|
||||
eslint-config-prettier: 8.5.0_eslint@8.22.0
|
||||
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_gqqbkana4qauswgj6o2wzoub7a
|
||||
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
|
||||
tslib: 2.4.0
|
||||
typescript: 4.8.4
|
||||
|
||||
@@ -9112,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:
|
||||
@@ -10700,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:
|
||||
@@ -16148,7 +16259,7 @@ packages:
|
||||
jest-validate: 26.6.2
|
||||
micromatch: 4.0.5
|
||||
pretty-format: 26.6.2
|
||||
ts-node: 10.9.1_gqqbkana4qauswgj6o2wzoub7a
|
||||
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- canvas
|
||||
@@ -22222,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'}
|
||||
@@ -22483,7 +22619,7 @@ 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
|
||||
@@ -22494,7 +22630,7 @@ packages:
|
||||
yn: 3.1.1
|
||||
dev: true
|
||||
|
||||
/ts-node/10.9.1_gqqbkana4qauswgj6o2wzoub7a:
|
||||
/ts-node/10.9.1_iuagarv54md6u2z4nbxsm6bl6u:
|
||||
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -22509,6 +22645,7 @@ packages:
|
||||
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
|
||||
@@ -23650,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'}
|
||||
|
||||
@@ -7,7 +7,7 @@ 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]);
|
||||
@@ -47,5 +47,6 @@ Object.keys(categories).forEach(categoryName => {
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw new Error('At least one error in icon JSONs prevents from committing changes.');
|
||||
console.error('At least one error in icon JSONs prevents from committing changes.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
35
scripts/generate/generateIcons.mjs
Normal 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);
|
||||
});
|
||||
@@ -70,6 +70,19 @@ 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
|
||||
*
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import fs from 'fs';
|
||||
import processSvg from './render/processSvg.mjs';
|
||||
|
||||
const svgFiles = process.argv.slice(4);
|
||||
const svgFiles = process.argv.slice(2);
|
||||
|
||||
svgFiles.forEach(async (svgFile) => {
|
||||
console.log('Optimizing staged SVG file:', svgFile)
|
||||
const content = fs.readFileSync(svgFile);
|
||||
const svg = await processSvg(content);
|
||||
const svg = await processSvg(content, svgFile);
|
||||
fs.writeFileSync(svgFile, svg, 'utf-8');
|
||||
});
|
||||
|
||||
@@ -11,5 +11,5 @@ const svgFiles = readSvgDirectory(ICONS_DIR);
|
||||
|
||||
svgFiles.forEach((svgFile) => {
|
||||
const content = fs.readFileSync(path.join(ICONS_DIR, svgFile));
|
||||
processSvg(content).then((svg) => writeSvgFile(svgFile, ICONS_DIR, svg));
|
||||
processSvg(content, svgFile).then((svg) => writeSvgFile(svgFile, ICONS_DIR, svg));
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { optimize } from 'svgo';
|
||||
import {optimize} from 'svgo';
|
||||
import prettier from 'prettier';
|
||||
import { parseSync, stringify } from 'svgson';
|
||||
import {parseSync, stringify} from 'svgson';
|
||||
import DEFAULT_ATTRS from './default-attrs.json' assert { type: 'json' };
|
||||
|
||||
/**
|
||||
@@ -8,8 +8,9 @@ import DEFAULT_ATTRS from './default-attrs.json' assert { type: 'json' };
|
||||
* @param {string} svg - An SVG string.
|
||||
* @returns {Promise<string>} An optimized svg
|
||||
*/
|
||||
async function optimizeSvg(svg) {
|
||||
async function optimizeSvg(svg, path) {
|
||||
const result = optimize(svg, {
|
||||
path,
|
||||
plugins: [
|
||||
{
|
||||
name: 'preset-default',
|
||||
@@ -17,12 +18,15 @@ async function optimizeSvg(svg) {
|
||||
overrides: {
|
||||
convertShapeToPath: false,
|
||||
mergePaths: false,
|
||||
removeAttrs: {
|
||||
attrs: '(fill|stroke.*)',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'removeAttrs',
|
||||
params: {
|
||||
attrs: '(fill|stroke.*)',
|
||||
}
|
||||
}
|
||||
],
|
||||
});
|
||||
|
||||
@@ -47,12 +51,12 @@ function setAttrs(svg) {
|
||||
* @param {string} svg An SVG string.
|
||||
* @returns {Promise<string>} An optimized svg
|
||||
*/
|
||||
function processSvg(svg) {
|
||||
function processSvg(svg, path) {
|
||||
return (
|
||||
optimizeSvg(svg)
|
||||
optimizeSvg(svg, path)
|
||||
.then(setAttrs)
|
||||
.then((optimizedSvg) =>
|
||||
prettier.format(optimizedSvg, { parser: 'babel' }),
|
||||
prettier.format(optimizedSvg, {parser: 'babel'}),
|
||||
)
|
||||
// remove semicolon inserted by prettier
|
||||
// because prettier thinks it's formatting JSX not HTML
|
||||
|
||||
2
site/.gitignore
vendored
@@ -1,2 +1,4 @@
|
||||
.idea
|
||||
public/docs/images
|
||||
.vercel
|
||||
.env
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"copy-assets": "mkdir -p ./public/docs/images && cp -rf ../docs/images ./public/docs",
|
||||
"prebuild": "ts-node scripts/preBuild.tsx",
|
||||
"prebuild": "ts-node --swc scripts/preBuild.ts",
|
||||
"build": "pnpm copy-assets && pnpm prebuild && next build",
|
||||
"export": "next export -o build",
|
||||
"deploy": "pnpm build && pnpm export",
|
||||
@@ -42,6 +42,7 @@
|
||||
},
|
||||
"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",
|
||||
@@ -57,6 +58,7 @@
|
||||
"eslint": "^8.22.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"jest": "^26.5.2",
|
||||
"node-fetch": "2",
|
||||
"prettier": "^2.3.2",
|
||||
"react-test-renderer": "17.0.2",
|
||||
"ts-node": "~10.9.1",
|
||||
|
||||
@@ -2,6 +2,7 @@ import crypto from 'crypto';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { Contributor } from '../types';
|
||||
import fetch, { Headers } from 'node-fetch'
|
||||
|
||||
const IGNORE_COMMIT_MESSAGES = ['fork', 'optimize'];
|
||||
|
||||
|
||||
@@ -2,11 +2,20 @@ import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
const cacheDir = path.join(process.cwd(), '.next/cache');
|
||||
const nextDir = path.join(process.cwd(), '.next');
|
||||
const cachePath = (cacheKey: string) => path.join(cacheDir, `${cacheKey}.json`);
|
||||
|
||||
type AtomicCacheable = object|string|number|boolean|null;
|
||||
type Cacheable = AtomicCacheable|AtomicCacheable[];
|
||||
|
||||
if (!fs.existsSync(nextDir)) {
|
||||
fs.mkdirSync(nextDir)
|
||||
}
|
||||
|
||||
if (!fs.existsSync(cacheDir)) {
|
||||
fs.mkdirSync(cacheDir)
|
||||
}
|
||||
|
||||
function read<T extends Cacheable>(cacheKey: string): T {
|
||||
if (fs.existsSync(cachePath(cacheKey))) {
|
||||
const iconCache = fs.readFileSync(cachePath(cacheKey), "utf8")
|
||||
@@ -17,8 +26,10 @@ function read<T extends Cacheable>(cacheKey: string): T {
|
||||
}
|
||||
|
||||
function write<T extends Cacheable>(cacheKey: string, content: T): void {
|
||||
if (!fs.existsSync(cacheDir)) {
|
||||
fs.mkdirSync(cacheDir)
|
||||
|
||||
|
||||
if (!fs.existsSync(path.join(cacheDir, cacheKey))) {
|
||||
fs.mkdirSync(path.join(cacheDir, cacheKey))
|
||||
}
|
||||
|
||||
fs.writeFileSync(cachePath(cacheKey), JSON.stringify(content), 'utf-8')
|
||||
@@ -1,10 +1,13 @@
|
||||
{
|
||||
"ts-node": {
|
||||
"esm": true,
|
||||
"compilerOptions": {
|
||||
"module": "commonjs"
|
||||
"baseUrl": ".",
|
||||
"module": "nodenext",
|
||||
}
|
||||
},
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"target": "ESNext",
|
||||
"lib": [
|
||||
"dom",
|
||||
|
||||