Compare commits

...

36 Commits

Author SHA1 Message Date
Jakob Guddas
87a67cc314 feat(icons): added bottle-wine icon (#3265)
* Added icons/bottle-wine.svg

* Added icons/bottle-wine.json

* Updated icons/bottle-wine.svg

* Updated icons/bottle-wine.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-24 13:03:03 +02:00
Kyle Angelo Galendez
e418be64a1 feat(icons): add line-squiggle icon (#2393)
* Added icons/wavy-line.svg

* Added icons/wavy-line.json

* Updated icons/wavy-line.json

* Updated icons/wavy-line.json

* Rename wavy-line.json to line-curvy.json

* Rename wavy-line.svg to line-curvy.svg

* Rename line-curvy.json to line-swirly.json

* Rename line-curvy.svg to line-swirly.svg

* Rename line-swirly.json to line-squiggle.json

* Rename line-swirly.svg to line-squiggle.svg

* Align the icon in the center

* Update icon visually

* Circle the loop of the icon

* Add contributor

* Add `"annotate"` as tag

After seeing Google Chromebook the same icon, it says 'annotate'. I add it here as a tag.

* Update line-squiggle.json

* Update line-squiggle.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-21 08:50:54 +02:00
Jakob Guddas
0ca76a1de1 Updated icons/shopping-bag.svg (#2483)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-21 08:48:24 +02:00
Jakob Guddas
be81f20a6b docs(design-guide): added bad examples for 2px rule (#2879) 2025-06-21 08:47:28 +02:00
Aram Soneson
41d32b8f40 feat(icons): added squircle-dashed icon (#3262)
* Added icons/squircle-dashed.svg

* Added icons/squircle-dashed.json

* Update squircle-dashed.svg
2025-06-21 08:47:07 +02:00
Muhammad Tayyab Sheikh
c543914fb0 fix(icons): ensure shaft overlaps arrowhead in circle-arrow-left and circle-arrow-right (#3269)
Reordered SVG paths so the shaft renders after the arrowhead, eliminating visual gaps due to stroke rendering.

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-21 08:32:36 +02:00
Vladimir Kirilenko
40d9e44b03 feat(icons): added georgian-lari icon (#3323)
* Added icons/georgian-lari.svg

* Added icons/georgian-lari.json
2025-06-21 08:31:53 +02:00
Karsa
5821c62880 feat(icons): added spool icon (#2926)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Added icons/spool.svg

* Added icons/spool.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-06-20 22:27:20 +02:00
Jakob Guddas
d15973e7ef fix(icons): changed blocks icon (#3267)
* Updated icons/blocks.svg

* Updated icons/blocks.json

* Updated icons/blocks.svg

* Updated icons/blocks.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-19 22:26:53 +02:00
Eric Fennis
475439bca9 fix(docs): Add ts ext to files missing files 2025-06-19 16:46:10 +02:00
Eric Fennis
13fc99f80d fix(docs): Add TS extention to index file 2025-06-19 16:39:23 +02:00
Eric Fennis
6a49a51164 fix(docs): Fix site build 2025-06-19 16:31:36 +02:00
Eric Fennis
ba5a701faf ci(lint): Fix failing gh actions 2025-06-19 16:26:57 +02:00
shopped
9e74dbb617 feat(icons): added drone icon (#3247)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2025-06-19 08:54:03 +02:00
Eric Fennis
3e644fda2d chore(scripts): Refactor scripts to typescript (#3316)
* Adjust typescript types

* adjust types

* fix types in all helper files

* Fix types

* Migrate js files to ts files

* Refactor to TS files

* Rename extentions

* Adjust imports

* Fix builds

* Update lockfile

* Fix last typescript migration

* Fix entry path @lucide/outline-svg

* Fix types

* add checkout step

* format files

* Format files
2025-06-18 15:47:24 +02:00
Jakob Guddas
7517894f2d fix(icons): renamed *-help and *-question icons to *-question-mark (#2540)
* fix(icons): renamed `*-help` icons

* fix(icons): renamed `*-question` icons

* Add EOF

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-18 10:01:41 +02:00
Jamie Law
5e363f48af Updated egg and egg-off icons (#3299)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-18 09:27:59 +02:00
Karsa
537040bf81 feat(icons): adds barrel icon (#1955)
* feat(icons): adds barrel icon

* feat(icons): add maps category to barrel

* feat(icons): add brewery tags to barrel

* feat(icons): updates barrel design with 90deg rotated version, added jamiemlaw as a contributor

---------

Co-authored-by: Karsa <karsa@sztaki.hu>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-06-18 09:19:20 +02:00
Luis David Lopera
308e738e0e feat(icons): added wifi-cog icon (#3133)
* Added icons/wifi-cog.svg

* Added icons/wifi-cog.json
2025-06-16 22:14:00 +02:00
Epifânio Francisco
e16e8b2783 fix: remove flex-direction CSS causing absolute stroke width toggle positioning issue (#3308) (#3317)
- Remove 'flex-direction: row-reverse' CSS rule for #absolute-stroke-width
- Fixes toggle moving out of bounds and being pseudo active

Closes #3308
2025-06-16 22:10:56 +02:00
Epifânio Francisco
e7f03df844 perf(docs): optimize IconsOverview initial render - 50% faster load times (#3282)
- Reduce initial icon render from 1600 to 120-200 icons
- Implement dynamic initialGridItems calculation based on viewport
- Use slice() instead of splice() to avoid array mutation
- Fix NoResults condition to use searchResults.length
- Load time improved from (50-60%+ improvement)
2025-06-16 22:08:44 +02:00
Pranav Nedungadi
8aed9b826d fix: some typos (#3319)
Signed-off-by: Pranav <pranav10121@gmail.com>
2025-06-14 11:58:54 +02:00
Jakob Guddas
e332d8b7ce fix(icons): changed radio icon (#3293)
* Updated icons/radio.svg

* Updated icons/radio.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-13 09:24:03 +02:00
Jamie Law
92aeac569f Updated icons/mic.svg (#3301)
Co-authored-by: Karsa <contact@karsa.org>
2025-06-13 09:22:50 +02:00
Jamie Law
53c16e191b Updated icons/pocket.svg (#3304) 2025-06-13 09:19:16 +02:00
Jamie Law
4791674365 Updated icons/stamp.svg (#3310) 2025-06-13 09:18:58 +02:00
Zefir
8527049827 feat(icons): added rectangle-circle icon (#3245)
* Added icons/rectangle-circle.svg

* Added icons/rectangle-circle.json

* reduce rectangle radius to 1px

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

* added jguddas to rectangle-circle contributors

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

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-06-13 09:12:16 +02:00
Jamie Law
8205ef68ed Updated icons/radiation.svg (#3303) 2025-06-11 14:55:06 +02:00
Jakob Guddas
f5c708adf2 Updated icons/house-plus.svg (#3238) 2025-06-10 20:08:48 +02:00
Domas Markevičius
d42539d2b4 feat(icons): added book-alert icon (#3249)
* Added icons/book-alert.json

* Added icons/book-alert.svg

* Updated icons/book-alert.svg

Indentation fix

* Updated icons/book-alert

* Updated icons/book-alert.svg

* Updated icons/book-alert.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-10 20:04:31 +02:00
Epifânio Francisco
3614b6b46e fix: absoluteStrokeWidth not resetting with Reset button (#3261)
- Fix Switch component to properly handle v-model binding
- Add absoluteStrokeWidth to customizingActive computed property
- Ensure absoluteStrokeWidth resets correctly in both Home and Sidebar customizers

Resolves issue where absoluteStrokeWidth toggle remained enabled
after clicking Reset button, causing confusion with bold icons.

Fixes #2984

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-10 19:50:23 +02:00
Jakob Guddas
86443054e2 fix(icons): changed settings-2 icon (#2974)
* Updated icons/settings-2.svg

* Updated icons/settings-2.json
2025-06-10 19:48:39 +02:00
Jamie Law
cc09c2640f Update bandage.json (#3300)
Added `patch` as a tag to `bandage` icon
2025-06-10 19:32:30 +02:00
Jakob Guddas
394399bfb8 fix(pull-request-icon-preview): pinned and --forced svgson installation 5.3.1 (#3289) 2025-06-10 19:32:06 +02:00
Jakob Guddas
af1b0e033e fix(icons): changed trophy icon (#2475)
* Updated icons/trophy.svg

* Updated icons/trophy.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-06 10:53:30 +02:00
Eric Fennis
bdb5f6c137 feat(icons): Add sim card icon from lab (#3275)
* Add sim card from lab

* Update icons/card-sim.svg

Co-authored-by: Karsa <contact@karsa.org>

* Update card-sim.json

---------

Co-authored-by: Karsa <contact@karsa.org>
2025-06-04 09:56:26 +02:00
182 changed files with 1445 additions and 605 deletions

View File

@@ -9,4 +9,5 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/labeler@v5

View File

@@ -14,6 +14,9 @@ jobs:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v46
@@ -21,7 +24,7 @@ jobs:
files: icons/*
- name: Generate annotations
run: node ./scripts/lintFilenames.mjs
run: node ./scripts/lintFilenames.mts
env:
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}

View File

@@ -16,7 +16,7 @@ jobs:
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: 'package.json'
cache: 'pnpm'
- name: Install dependencies
@@ -32,7 +32,7 @@ jobs:
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3.8.1
with:
node-version: 18
node-version-file: 'package.json'
cache: 'pnpm'
- name: Install dependencies

View File

@@ -15,6 +15,9 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
- name: Get changed files
id: changed-files
@@ -24,7 +27,7 @@ jobs:
- uses: actions/setup-node@v4
- name: Install svgson for code preview (safer and faster than installing all deps)
run: npm install svgson
run: npm install svgson@5.3.1 --force
- name: Save PR number
run: |
@@ -32,7 +35,7 @@ jobs:
echo ${{ github.event.number }} > ./pr/NR
- name: Generate comment markup
run: node ./scripts/generateChangedIconsCommentMarkup.mjs >> ./pr/comment-markup.md
run: node ./scripts/generateChangedIconsCommentMarkup.mts >> ./pr/comment-markup.md
id: comment-markup
env:
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}

View File

@@ -1,15 +1,22 @@
<script setup>
import { ref } from 'vue'
import { Switch } from '@headlessui/vue'
const enabled = ref(false)
defineProps({
modelValue: {
type: Boolean,
default: false
}
})
const emit = defineEmits(['update:modelValue'])
</script>
<template>
<Switch
v-model="enabled"
:model-value="modelValue"
@update:model-value="emit('update:modelValue', $event)"
class="switch"
:class="{ enabled }"
:class="{ enabled: modelValue }"
>
<span class="thumb" />
</Switch>

View File

@@ -48,6 +48,7 @@ function resetStyle () {
color.value = 'currentColor'
strokeWidth.value = 2
size.value = 24
absoluteStrokeWidth.value = false
}
watch(absoluteStrokeWidth, (enabled) => {

View File

@@ -9,7 +9,7 @@ import {useData, useRouter} from 'vitepress';
import { computed } from 'vue';
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
import { diamond } from '../../../data/iconNodes'
import deprecationReasonTemplate from '../../../../../tools/build-icons/utils/deprecationReasonTemplate.mjs';
import deprecationReasonTemplate from '../../../../../tools/build-icons/utils/deprecationReasonTemplate.ts';
const props = defineProps<{

View File

@@ -14,7 +14,15 @@ import CarbonAdOverlay from './CarbonAdOverlay.vue';
const ICON_SIZE = 56;
const ICON_GRID_GAP = 8;
const DEFAULT_GRID_ITEMS = 10 * 160;
const initialGridItems = computed(() => {
if (containerWidth.value === 0) return 120;
const itemsPerRow = columnSize.value || 10;
const visibleRows = Math.ceil(window.innerHeight / (ICON_SIZE + ICON_GRID_GAP));
return Math.min(itemsPerRow * (visibleRows + 2), 200);
});
const props = defineProps<{
icons: IconEntity[];
@@ -115,15 +123,14 @@ function handleCloseDrawer() {
/>
</StickyBar>
<NoResults
v-if="list.length === 0 && searchQuery !== ''"
v-if="searchResults.length === 0 && searchQuery !== ''"
:searchQuery="searchQuery"
@clear="searchQuery = ''"
/>
<IconGrid
v-else-if="list.length === 0"
:key="index"
overlayMode
:icons="[...searchResults].splice(0, DEFAULT_GRID_ITEMS)"
:icons="searchResults.slice(0, initialGridItems)"
:activeIcon="activeIconName"
@setActiveIcon="setActiveIconName"
/>

View File

@@ -47,6 +47,7 @@ function resetStyle () {
color.value = STYLE_DEFAULTS.color
strokeWidth.value = STYLE_DEFAULTS.strokeWidth
size.value = STYLE_DEFAULTS.size
absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth
}
watch(absoluteStrokeWidth, (enabled) => {
@@ -59,9 +60,8 @@ const customizingActive = computed(() => {
return color.value !== STYLE_DEFAULTS.color
|| strokeWidth.value !== STYLE_DEFAULTS.strokeWidth
|| size.value !== STYLE_DEFAULTS.size
|| absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
})
</script>
<template>
@@ -120,8 +120,8 @@ const customizingActive = computed(() => {
label="Absolute Stroke width"
>
<Switch
id="size"
name="size"
id="absolute-stroke-width"
name="absolute-stroke-width"
v-model="absoluteStrokeWidth"
/>
</InputField>
@@ -161,9 +161,4 @@ const customizingActive = computed(() => {
.color-picker {
margin-left: auto;
}
#absolute-stroke-width {
flex-direction: row-reverse;
}
</style>

View File

@@ -42,7 +42,11 @@ Here are rules that should be followed to keep quality and consistency when maki
### 8. Distinct elements must have **2 pixels of spacing between each other**
![2px-element-spacing](../../images/2px-element-spacing.svg?raw=true "2px-element-spacing")
![2px-element-spacing](../../images/2px-element-spacing.svg?raw=true '2px-element-spacing')
![2px-element-spacing-connected](../../images/2px-element-spacing-connected.svg?raw=true '2px-element-spacing-connected')
![2px-element-spacing-abrupt-cut](../../images/2px-element-spacing-abrupt-cut.svg?raw=true '2px-element-spacing-abrupt-cut')
### 9. Icons should have a similar optical volume to `circle` and `square`.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -49,6 +49,8 @@
<path d="M120 350h240" stroke="#D8D8D9" stroke-width=".5"/>
<path d="M350 120v240" stroke="#D8D8D9" stroke-width=".5"/>
</g>
<path d="M219 396.5L208 407.5L203 402.5" stroke="#36EA83" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M241.052 414H233.06V391.455H241.118C243.386 391.455 245.338 391.906 246.975 392.809C248.611 393.704 249.87 394.992 250.751 396.673C251.639 398.353 252.083 400.364 252.083 402.705C252.083 405.054 251.639 407.072 250.751 408.76C249.87 410.448 248.604 411.743 246.953 412.646C245.309 413.549 243.342 414 241.052 414ZM237.827 409.916H240.854C242.263 409.916 243.448 409.666 244.41 409.167C245.379 408.661 246.105 407.879 246.59 406.822C247.081 405.758 247.327 404.386 247.327 402.705C247.327 401.039 247.081 399.678 246.59 398.621C246.105 397.564 245.382 396.786 244.421 396.287C243.459 395.788 242.274 395.539 240.865 395.539H237.827V409.916ZM263.166 414.33C261.456 414.33 259.977 413.967 258.729 413.24C257.489 412.507 256.531 411.486 255.856 410.18C255.181 408.866 254.843 407.344 254.843 405.612C254.843 403.865 255.181 402.338 255.856 401.032C256.531 399.718 257.489 398.698 258.729 397.972C259.977 397.238 261.456 396.871 263.166 396.871C264.876 396.871 266.351 397.238 267.591 397.972C268.839 398.698 269.8 399.718 270.475 401.032C271.151 402.338 271.488 403.865 271.488 405.612C271.488 407.344 271.151 408.866 270.475 410.18C269.8 411.486 268.839 412.507 267.591 413.24C266.351 413.967 264.876 414.33 263.166 414.33ZM263.188 410.697C263.966 410.697 264.615 410.477 265.136 410.037C265.657 409.589 266.05 408.98 266.314 408.21C266.586 407.439 266.721 406.562 266.721 405.578C266.721 404.595 266.586 403.718 266.314 402.947C266.05 402.177 265.657 401.568 265.136 401.12C264.615 400.672 263.966 400.449 263.188 400.449C262.402 400.449 261.742 400.672 261.206 401.12C260.678 401.568 260.278 402.177 260.006 402.947C259.742 403.718 259.61 404.595 259.61 405.578C259.61 406.562 259.742 407.439 260.006 408.21C260.278 408.98 260.678 409.589 261.206 410.037C261.742 410.477 262.402 410.697 263.188 410.697ZM277.279 414.286C276.552 414.286 275.928 414.029 275.407 413.516C274.893 412.995 274.637 412.371 274.637 411.644C274.637 410.925 274.893 410.308 275.407 409.795C275.928 409.281 276.552 409.024 277.279 409.024C277.983 409.024 278.6 409.281 279.128 409.795C279.656 410.308 279.921 410.925 279.921 411.644C279.921 412.129 279.796 412.573 279.546 412.976C279.304 413.373 278.985 413.692 278.589 413.934C278.192 414.169 277.756 414.286 277.279 414.286Z" fill="#36EA83"/>
<g id="embed-lucide-copy" stroke="#3C3C43" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" transform="translate(120 120), scale(10)">
<rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
<path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -9,13 +9,13 @@
"docs:build": "pnpm run /^prebuild:.*/ && vitepress build",
"docs:preview": "vitepress preview",
"build:docs": "vitepress build",
"prebuild:iconNodes": "node ./scripts/writeIconNodes.mjs",
"prebuild:metaJson": "node ./scripts/writeIconMetaIndex.mjs",
"prebuild:releaseJson": "node ./scripts/writeReleaseMetadata.mjs",
"prebuild:categoriesJson": "node ./scripts/writeCategoriesMetadata.mjs",
"prebuild:relatedIcons": "node ./scripts/writeIconRelatedIcons.mjs",
"prebuild:iconDetails": "node ./scripts/writeIconDetails.mjs",
"postbuild:vercelJson": "node ./scripts/writeVercelOutput.mjs",
"prebuild:iconNodes": "node --experimental-strip-types ./scripts/writeIconNodes.mjs",
"prebuild:metaJson": "node --experimental-strip-types ./scripts/writeIconMetaIndex.mjs",
"prebuild:releaseJson": "node --experimental-strip-types ./scripts/writeReleaseMetadata.mjs",
"prebuild:categoriesJson": "node --experimental-strip-types ./scripts/writeCategoriesMetadata.mjs",
"prebuild:relatedIcons": "node --experimental-strip-types ./scripts/writeIconRelatedIcons.mjs",
"prebuild:iconDetails": "node --experimental-strip-types ./scripts/writeIconDetails.mjs",
"postbuild:vercelJson": "node --experimental-strip-types ./scripts/writeVercelOutput.mjs",
"dev": "npx nitropack dev",
"prebuild:api": "npx nitropack prepare",
"build:api": "npx nitropack build",

View File

@@ -11,6 +11,10 @@
],
"categories": [
"accessibility",
"social"
"social",
"shapes"
],
"aliases": [
"badge-help"
]
}

View File

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 481 B

View File

@@ -18,7 +18,8 @@
"protection",
"emergency",
"aid",
"safety"
"safety",
"patch"
],
"categories": [
"medical"

31
icons/barrel.json Normal file
View File

@@ -0,0 +1,31 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"keg",
"drum",
"tank",
"wine",
"beer",
"oak",
"wood",
"firkin",
"hogshead",
"kilderkin",
"barrique",
"solera",
"aging",
"whiskey",
"brewery",
"distillery",
"winery",
"vineyard"
],
"categories": [
"food-beverage",
"navigation"
]
}

17
icons/barrel.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="M10 3a41 41 0 0 0 0 18" />
<path d="M14 3a41 41 0 0 1 0 18" />
<path d="M17 3a2 2 0 0 1 1.68.92 15.25 15.25 0 0 1 0 16.16A2 2 0 0 1 17 21H7a2 2 0 0 1-1.68-.92 15.25 15.25 0 0 1 0-16.16A2 2 0 0 1 7 3z" />
<path d="M3.84 17h16.32" />
<path d="M3.84 7h16.32" />
</svg>

After

Width:  |  Height:  |  Size: 486 B

View File

@@ -1,7 +1,8 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
"danielbayley",
"jguddas"
],
"tags": [
"addon",
@@ -14,10 +15,13 @@
"toys",
"kids",
"children",
"learning"
"learning",
"squares",
"corner"
],
"categories": [
"development",
"layout",
"shapes"
]
}

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="7" height="7" x="14" y="3" rx="1" />
<path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3" />
<path d="M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2" />
<rect x="14" y="2" width="8" height="8" rx="1" />
</svg>

Before

Width:  |  Height:  |  Size: 367 B

After

Width:  |  Height:  |  Size: 367 B

51
icons/book-alert.json Normal file
View File

@@ -0,0 +1,51 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere",
"lscheibel",
"domasmark"
],
"tags": [
"reading",
"paperback",
"booklet",
"magazine",
"leaflet",
"pamphlet",
"tome",
"library",
"writing",
"written",
"writer",
"author",
"story",
"script",
"fiction",
"novel",
"information",
"knowledge",
"education",
"high school",
"university",
"college",
"academy",
"student",
"study",
"learning",
"homework",
"research",
"documentation",
"warning",
"alert",
"danger",
"exclamation mark"
],
"categories": [
"text",
"development",
"gaming"
]
}

15
icons/book-alert.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="M12 13h.01" />
<path d="M12 6v3" />
<path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" />
</svg>

After

Width:  |  Height:  |  Size: 359 B

31
icons/bottle-wine.json Normal file
View File

@@ -0,0 +1,31 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"jamiemlaw"
],
"tags": [
"alcohol",
"drink",
"glass",
"goblet",
"chalice",
"vineyard",
"winery",
"red",
"white",
"rose",
"dry",
"sparkling",
"bar",
"party",
"nightclub",
"nightlife",
"sommelier",
"restaurant",
"dinner",
"meal"
],
"categories": [
"food-beverage"
]
}

14
icons/bottle-wine.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 3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a6 6 0 0 0 1.2 3.6l.6.8A6 6 0 0 1 17 13v8a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1v-8a6 6 0 0 1 1.2-3.6l.6-.8A6 6 0 0 0 10 5z" />
<path d="M17 13h-4a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h4" />
</svg>

After

Width:  |  Height:  |  Size: 432 B

35
icons/card-sim.json Normal file
View File

@@ -0,0 +1,35 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"karsa-mistmere"
],
"tags": [
"cellphone",
"smartphone",
"mobile",
"network",
"cellular",
"service",
"provider",
"signal",
"coverage",
"disk",
"data",
"format",
"storage",
"flash",
"digital",
"contacts",
"phone book",
"contractual",
"circuit board",
"chip"
],
"categories": [
"connectivity",
"communication",
"multimedia",
"devices"
]
}

16
icons/card-sim.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 14v4" />
<path d="M14.172 2a2 2 0 0 1 1.414.586l3.828 3.828A2 2 0 0 1 20 7.828V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2z" />
<path d="M8 14h8" />
<rect x="8" y="10" width="8" height="8" rx="1" />
</svg>

After

Width:  |  Height:  |  Size: 433 B

View File

@@ -10,6 +10,6 @@
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M16 12H8" />
<path d="m12 8-4 4 4 4" />
<path d="M16 12H8" />
</svg>

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 297 B

View File

@@ -10,6 +10,6 @@
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M8 12h8" />
<path d="m12 16 4-4-4-4" />
<path d="M8 12h8" />
</svg>

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 297 B

View File

@@ -16,6 +16,7 @@
"notifications"
],
"aliases": [
"help-circle"
"help-circle",
"circle-help"
]
}

View File

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 322 B

23
icons/drone.json Normal file
View File

@@ -0,0 +1,23 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"bernatfortet",
"shopped",
"karsa-mistmere",
"jguddas"
],
"tags": [
"quadcopter",
"uav",
"aerial",
"flight",
"flying",
"technology",
"airborne",
"robotics"
],
"categories": [
"transportation",
"devices"
]
}

21
icons/drone.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="M10 10 7 7" />
<path d="m10 14-3 3" />
<path d="m14 10 3-3" />
<path d="m14 14 3 3" />
<path d="M14.205 4.139a4 4 0 1 1 5.439 5.863" />
<path d="M19.637 14a4 4 0 1 1-5.432 5.868" />
<path d="M4.367 10a4 4 0 1 1 5.438-5.862" />
<path d="M9.795 19.862a4 4 0 1 1-5.429-5.873" />
<rect x="10" y="8" width="4" height="8" rx="1" />
</svg>

After

Width:  |  Height:  |  Size: 561 B

View File

@@ -2,7 +2,8 @@
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere",
"ericfennis"
"ericfennis",
"jamiemlaw"
],
"tags": [
"egg free",

View File

@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625" />
<path d="M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297" />
<line x1="2" x2="22" y1="2" y2="22" />
<path d="m2 2 20 20" />
<path d="M20 14.347V14c0-6-4-12-8-12-1.078 0-2.157.436-3.157 1.19" />
<path d="M6.206 6.21C4.871 8.4 4 11.2 4 14a8 8 0 0 0 14.568 4.568" />
</svg>

Before

Width:  |  Height:  |  Size: 484 B

After

Width:  |  Height:  |  Size: 378 B

View File

@@ -3,7 +3,8 @@
"contributors": [
"mittalyashu",
"Andreto",
"ericfennis"
"ericfennis",
"jamiemlaw"
],
"tags": [
"bird",

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z" />
<path d="M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" />
</svg>

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 271 B

View File

@@ -12,5 +12,8 @@
],
"categories": [
"files"
],
"aliases": [
"file-question"
]
}

View File

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 359 B

14
icons/georgian-lari.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"kivicode"
],
"tags": [
"currency",
"money",
"payment"
],
"categories": [
"finance"
]
}

16
icons/georgian-lari.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="M11.5 21a7.5 7.5 0 1 1 7.35-9" />
<path d="M13 12V3" />
<path d="M4 21h16" />
<path d="M9 12V3" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M13.22 2.416a2 2 0 0 0-2.511.057l-7 5.999A2 2 0 0 0 3 10v9a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7.354" />
<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" />
<path d="M15 6h6" />
<path d="M18 3v6" />
<path d="M12.662 21H5a2 2 0 0 1-2-2v-9a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v2.475" />
<path d="M14.959 12.717A1 1 0 0 0 14 12h-4a1 1 0 0 0-1 1v8" />
<path d="M15 18h6" />
<path d="M18 15v6" />
</svg>

Before

Width:  |  Height:  |  Size: 424 B

After

Width:  |  Height:  |  Size: 443 B

27
icons/line-squiggle.json Normal file
View File

@@ -0,0 +1,27 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"chessurisme",
"jguddas"
],
"tags": [
"line",
"snakes",
"annotate",
"curve",
"doodle",
"stroke",
"pen",
"tool",
"gesture",
"draw",
"wave",
"art",
"road"
],
"categories": [
"shapes",
"math",
"design"
]
}

13
icons/line-squiggle.svg Normal file
View File

@@ -0,0 +1,13 @@
<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="M7 3.5c5-2 7 2.5 3 4C1.5 10 2 15 5 16c5 2 9-10 14-7s.5 13.5-4 12c-5-2.5.5-11 6-2" />
</svg>

After

Width:  |  Height:  |  Size: 303 B

View File

@@ -12,5 +12,8 @@
],
"categories": [
"mail"
],
"aliases": [
"mail-question"
]
}

View File

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 458 B

View File

@@ -14,5 +14,8 @@
],
"categories": [
"social"
],
"aliases": [
"message-circle-question"
]
}

View File

Before

Width:  |  Height:  |  Size: 332 B

After

Width:  |  Height:  |  Size: 332 B

View File

@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" />
<path d="M12 19v3" />
<path d="M19 10v2a7 7 0 0 1-14 0v-2" />
<line x1="12" x2="12" y1="19" y2="22" />
<rect x="9" y="2" width="6" height="13" rx="3" />
</svg>

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 326 B

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z" />
<polyline points="8 10 12 14 16 10" />
<path d="M20 3a2 2 0 0 1 2 2v6a1 1 0 0 1-20 0V5a2 2 0 0 1 2-2z" />
<path d="m8 10 4 4 4-4" />
</svg>

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 306 B

View File

@@ -10,7 +10,7 @@
stroke-linejoin="round"
>
<path d="M12 12h.01" />
<path d="M7.5 4.2c-.3-.5-.9-.7-1.3-.4C3.9 5.5 2.3 8.1 2 11c-.1.5.4 1 1 1h5c0-1.5.8-2.8 2-3.4-1.1-1.9-2-3.5-2.5-4.4z" />
<path d="M21 12c.6 0 1-.4 1-1-.3-2.9-1.8-5.5-4.1-7.1-.4-.3-1.1-.2-1.3.3-.6.9-1.5 2.5-2.6 4.3 1.2.7 2 2 2 3.5h5z" />
<path d="M7.5 19.8c-.3.5-.1 1.1.4 1.3 2.6 1.2 5.6 1.2 8.2 0 .5-.2.7-.8.4-1.3-.5-.9-1.4-2.5-2.5-4.3-1.2.7-2.8.7-4 0-1.1 1.8-2 3.4-2.5 4.3z" />
<path d="M14 15.4641a4 4 0 0 1-4 0L7.52786 19.74597 A 1 1 0 0 0 7.99303 21.16211 10 10 0 0 0 16.00697 21.16211 1 1 0 0 0 16.47214 19.74597z" />
<path d="M16 12a4 4 0 0 0-2-3.464l2.472-4.282a1 1 0 0 1 1.46-.305 10 10 0 0 1 4.006 6.94A1 1 0 0 1 21 12z" />
<path d="M8 12a4 4 0 0 1 2-3.464L7.528 4.254a1 1 0 0 0-1.46-.305 10 10 0 0 0-4.006 6.94A1 1 0 0 0 3 12z" />
</svg>

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -5,7 +5,8 @@
"csandman",
"ericfennis",
"karsa-mistmere",
"danielbayley"
"danielbayley",
"jguddas"
],
"tags": [
"signal",

View File

@@ -9,9 +9,9 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4.9 19.1C1 15.2 1 8.8 4.9 4.9" />
<path d="M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5" />
<path d="M16.247 7.761a6 6 0 0 1 0 8.478" />
<path d="M19.075 4.933a10 10 0 0 1 0 14.134" />
<path d="M4.925 19.067a10 10 0 0 1 0-14.134" />
<path d="M7.753 16.239a6 6 0 0 1 0-8.478" />
<circle cx="12" cy="12" r="2" />
<path d="M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5" />
<path d="M19.1 4.9C23 8.8 23 15.1 19.1 19" />
</svg>

Before

Width:  |  Height:  |  Size: 432 B

After

Width:  |  Height:  |  Size: 437 B

View File

@@ -0,0 +1,17 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"zefir-git",
"jguddas"
],
"tags": [
"compose",
"keyboard",
"key",
"button"
],
"categories": [
"development",
"text"
]
}

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="M14 4v16H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z" />
<circle cx="14" cy="12" r="8" />
</svg>

After

Width:  |  Height:  |  Size: 300 B

View File

@@ -2,13 +2,15 @@
"$schema": "../icon.schema.json",
"contributors": [
"mittalyashu",
"ericfennis"
"ericfennis",
"jguddas"
],
"tags": [
"cog",
"edit",
"gear",
"preferences"
"preferences",
"slider"
],
"categories": [
"account"

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 7h-9" />
<path d="M14 17H5" />
<path d="M19 7h-9" />
<circle cx="17" cy="17" r="3" />
<circle cx="7" cy="7" r="3" />
</svg>

Before

Width:  |  Height:  |  Size: 324 B

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -56,5 +56,8 @@
"security",
"development",
"gaming"
],
"aliases": [
"shield-question"
]
}

View File

Before

Width:  |  Height:  |  Size: 463 B

After

Width:  |  Height:  |  Size: 463 B

View File

@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z" />
<path d="M3 6h18" />
<path d="M16 10a4 4 0 0 1-8 0" />
<path d="M3.103 6.034h17.794" />
<path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z" />
</svg>

Before

Width:  |  Height:  |  Size: 333 B

After

Width:  |  Height:  |  Size: 422 B

View File

@@ -17,9 +17,9 @@
"destroy",
"remove",
"erase",
"document,",
"document",
"destruction",
"secure ",
"secure",
"security",
"confidential",
"data",

View File

@@ -7,7 +7,7 @@
],
"tags": [
"wash",
"baht",
"bath",
"water",
"liquid",
"fluid",

20
icons/spool.json Normal file
View File

@@ -0,0 +1,20 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere"
],
"tags": [
"bobbin",
"spindle",
"yarn",
"thread",
"string",
"sewing",
"needlework"
],
"categories": [
"communication",
"tools",
"social"
]
}

14
icons/spool.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="M17 13.44 4.442 17.082A2 2 0 0 0 4.982 21H19a2 2 0 0 0 .558-3.921l-1.115-.32A2 2 0 0 1 17 14.837V7.66" />
<path d="m7 10.56 12.558-3.642A2 2 0 0 0 19.018 3H5a2 2 0 0 0-.558 3.921l1.115.32A2 2 0 0 1 7 9.163v7.178" />
</svg>

After

Width:  |  Height:  |  Size: 437 B

View File

@@ -7,7 +7,7 @@
"karsa-mistmere"
],
"tags": [
"sqaure",
"square",
"pathfinder",
"path",
"exclude",

View File

@@ -6,7 +6,7 @@
"karsa-mistmere"
],
"tags": [
"sqaure",
"square",
"pathfinder",
"path",
"intersect",

View File

@@ -6,7 +6,7 @@
"karsa-mistmere"
],
"tags": [
"sqaure",
"square",
"pathfinder",
"path",
"minus",

View File

@@ -6,7 +6,7 @@
"karsa-mistmere"
],
"tags": [
"sqaure",
"square",
"pathfinder",
"path",
"unite",

View File

@@ -0,0 +1,22 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"jguddas",
"aramsoneson"
],
"tags": [
"shape",
"pending",
"progress",
"issue",
"draft",
"code",
"coding",
"version control"
],
"categories": [
"development",
"shapes",
"design"
]
}

20
icons/squircle-dashed.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="M13.77 3.043a34 34 0 0 0-3.54 0" />
<path d="M13.771 20.956a33 33 0 0 1-3.541.001" />
<path d="M20.18 17.74c-.51 1.15-1.29 1.93-2.439 2.44" />
<path d="M20.18 6.259c-.51-1.148-1.291-1.929-2.44-2.438" />
<path d="M20.957 10.23a33 33 0 0 1 0 3.54" />
<path d="M3.043 10.23a34 34 0 0 0 .001 3.541" />
<path d="M6.26 20.179c-1.15-.508-1.93-1.29-2.44-2.438" />
<path d="M6.26 3.82c-1.149.51-1.93 1.291-2.44 2.44" />
</svg>

After

Width:  |  Height:  |  Size: 644 B

View File

@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-6 0c0 2 1 2 1 3.5V13" />
<path d="M20 15.5a2.5 2.5 0 0 0-2.5-2.5h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1z" />
<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>

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -1,7 +1,8 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere"
"karsa-mistmere",
"jguddas"
],
"tags": [
"prize",

View File

@@ -9,10 +9,10 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 9H4.5a2.5 2.5 0 0 1 0-5H6" />
<path d="M18 9h1.5a2.5 2.5 0 0 0 0-5H18" />
<path d="M10 14.66v1.626a2 2 0 0 1-.976 1.696A5 5 0 0 0 7 21.978" />
<path d="M14 14.66v1.626a2 2 0 0 0 .976 1.696A5 5 0 0 1 17 21.978" />
<path d="M18 9h1.5a1 1 0 0 0 0-5H18" />
<path d="M4 22h16" />
<path d="M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22" />
<path d="M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22" />
<path d="M18 2H6v7a6 6 0 0 0 12 0V2Z" />
<path d="M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z" />
<path d="M6 9H4.5a1 1 0 0 1 0-5H6" />
</svg>

Before

Width:  |  Height:  |  Size: 514 B

After

Width:  |  Height:  |  Size: 525 B

27
icons/wifi-cog.json Normal file
View File

@@ -0,0 +1,27 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"ericfennis",
"jguddas",
"karsa-mistmere",
"luisdlopera"
],
"tags": [
"connection",
"signal",
"wireless",
"directory",
"settings",
"control",
"preferences",
"cog",
"edit",
"gear"
],
"categories": [
"connectivity",
"devices",
"files"
]
}

24
icons/wifi-cog.svg Normal file
View File

@@ -0,0 +1,24 @@
<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="m14.305 19.53.923-.382" />
<path d="m15.228 16.852-.923-.383" />
<path d="m16.852 15.228-.383-.923" />
<path d="m16.852 20.772-.383.924" />
<path d="m19.148 15.228.383-.923" />
<path d="m19.53 21.696-.382-.924" />
<path d="M2 7.82a15 15 0 0 1 20 0" />
<path d="m20.772 16.852.924-.383" />
<path d="m20.772 19.148.924.383" />
<path d="M5 11.858a10 10 0 0 1 11.5-1.785" />
<path d="M8.5 15.429a5 5 0 0 1 2.413-1.31" />
<circle cx="18" cy="18" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 691 B

0
lucide-font/lucide.svg Normal file
View File

View File

@@ -17,16 +17,12 @@
"lucide-static": "pnpm --filter lucide-static",
"build:outline-icons": "pnpm --filter outline-svg start",
"build:font": "pnpm --filter docs prebuild:releaseJson && pnpm --filter build-font start",
"optimize": "node ./scripts/optimizeSvgs.mjs",
"addjsons": "node scripts/addMissingIconJsonFiles.mjs",
"checkIcons": "node scripts/checkIconsAndCategories.mjs",
"tags2icons": "node scripts/migrateTagsToIcons.mjs",
"icons2tags": "node scripts/migrateIconsToTags.mjs",
"icons2categories": "node scripts/migrateIconsToCategories.mjs",
"categories2icons": "node scripts/migrateCategoriesToIcons.mjs",
"generate:changelog": "node ./scripts/generateChangelog.mjs",
"generate:contributors": "node ./scripts/updateContributors.mjs icons/*.svg",
"generate:nextJSAliases": "node ./scripts/generateNextJSAliases.mjs",
"optimize": "node ./scripts/optimizeSvgs.mts",
"addjsons": "node ./scripts/addMissingIconJsonFiles.mts",
"checkIcons": "node ./scripts/checkIconsAndCategories.mts",
"generate:changelog": "node ./scripts/generateChangelog.mts",
"generate:contributors": "node ./scripts/updateContributors.mts icons/*.svg",
"generate:nextJSAliases": "node ./scripts/generateNextJSAliases.mts",
"postinstall": "husky install",
"lint:es": "eslint .",
"lint:format": "prettier \"**/*.{js,mjs,ts,jsx,tsx,html,css,scss,json,yml,yaml}\" --check",
@@ -37,9 +33,9 @@
"lint": "pnpm lint:es && pnpm lint:format && pnpm lint:json",
"format": "prettier \"**/*.{js,mjs,ts,jsx,tsx,html,css,scss,json,yml,yaml}\" --write",
"prepare": "husky install",
"gi": "node ./scripts/generate/generateIcons.mjs",
"rename": "node scripts/rename/renameIcon.mjs",
"renamePattern": "node scripts/rename/renamePattern.mjs"
"gi": "node ./scripts/generate/generateIcons.mts",
"rename": "node ./scripts/rename/renameIcon.mts",
"renamePattern": "node ./scripts/rename/renamePattern.mts"
},
"devDependencies": {
"@html-eslint/eslint-plugin": "^0.19.1",

View File

@@ -40,7 +40,7 @@
},
"scripts": {
"build": "pnpm clean && pnpm copy:license && pnpm build:icons",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts --pretty=false",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts --pretty=false",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.ts",
"copy:license": "cp ../../LICENSE ./LICENSE",
"test": "pnpm build:icons && vitest run",

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async ({
componentName,
iconName,
children,
@@ -39,4 +39,4 @@ const ${componentName} = createLucideIcon('${iconName}', ${JSON.stringify(keyles
export default ${componentName};
`;
};
});

View File

@@ -29,7 +29,7 @@
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:ng",
"copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf ./src/icons/*.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=lucide-icons.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=lucide-icons.ts",
"build:ng": "ng build --configuration production",
"test": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI",
"test:watch": "ng test",

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async ({
componentName,
iconName,
children,
@@ -30,4 +30,4 @@ const ${componentName}: LucideIconData = ${JSON.stringify(children)}; //eslint-d
export default ${componentName};
`;
};
});

View File

@@ -36,7 +36,7 @@
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:bundles",
"copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"build:bundles": "rollup -c ./rollup.config.mjs",
"test": "pnpm build:icons && vitest run",
"version": "pnpm version --git-tag-version=false"

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async ({
componentName,
iconName,
children,
@@ -30,4 +30,4 @@ const ${componentName} = createLucideIcon('${iconName}', ${JSON.stringify(childr
export default ${componentName};
`;
};
});

View File

@@ -37,7 +37,7 @@
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:bundles",
"copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --iconFileExtension=.ts --exportFileName=index.ts --withAliases --aliasesFileExtension=.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --iconFileExtension=.ts --exportFileName=index.ts --withAliases --aliasesFileExtension=.ts",
"build:bundles": "rollup -c ./rollup.config.mjs",
"test": "pnpm build:icons && vitest run",
"version": "pnpm version --git-tag-version=false"

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async ({
componentName,
iconName,
children,
@@ -30,4 +30,4 @@ const ${componentName} = createLucideIcon('${componentName}', ${JSON.stringify(c
export default ${componentName};
`;
};
});

View File

@@ -42,7 +42,7 @@
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm typecheck && pnpm build:bundles",
"copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.ts && rm -f dynamic.* && rm -f dynamicIconImports.d.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --withDynamicImports --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --withDynamicImports --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"build:bundles": "rollup -c ./rollup.config.mjs",
"typecheck": "tsc",
"typecheck:watch": "tsc -w",

View File

@@ -2,7 +2,7 @@ import plugins from '@lucide/rollup-plugins';
import preserveDirectives from 'rollup-plugin-preserve-directives';
import pkg from './package.json' with { type: 'json' };
import dts from 'rollup-plugin-dts';
import getAliasesEntryNames from './scripts/getAliasesEntryNames.mjs';
import getAliasesEntryNames from './scripts/getAliasesEntryNames.mts';
const aliasesEntries = await getAliasesEntryNames();

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async({
componentName,
iconName,
children,
@@ -33,4 +33,4 @@ const ${componentName} = createLucideIcon('${iconName}', __iconNode);
export default ${componentName};
`;
};
});

View File

@@ -1,6 +1,5 @@
import path from 'path';
// eslint-disable-next-line import/no-extraneous-dependencies
import getIconMetaData from '@lucide/build-icons/utils/getIconMetaData.mjs';
import getIconMetaData from '@lucide/build-icons/utils/getIconMetaData';
const ICONS_DIR = path.resolve(process.cwd(), '../../icons');
@@ -12,6 +11,6 @@ export default async function getAliasesEntryNames() {
const aliases = iconWithAliases.flatMap(({ aliases }) => aliases);
return aliases
.map((alias) => (typeof alias === 'string' ? alias : alias.name))
.map((alias) => (typeof alias === 'string' ? alias : alias?.name))
.map((alias) => path.join('src/icons', `${alias}.ts`));
}

View File

@@ -14,6 +14,7 @@
"skipLibCheck": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"allowImportingTsExtensions": true,
"downlevelIteration": true,
"sourceMap": true,
"outDir": "./dist",
@@ -21,4 +22,5 @@
"types": ["@testing-library/jest-dom"],
},
"exclude": ["**/node_modules"],
"include": ["src"],
}

View File

@@ -61,7 +61,7 @@
"build:transpile": "tsc --jsx preserve -t es2020 --rootDir src --outDir dist --noEmit false",
"build:version": "node ./scripts/replaceVersion.mjs",
"build:bundle": "rollup -c rollup.config.mjs",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.tsx --exportFileName=index.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.tsx --exportFileName=index.ts",
"test": "pnpm build:icons && vitest run",
"version": "pnpm version --git-tag-version=false"
},

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async ({
componentName,
iconName,
children,
@@ -35,4 +35,4 @@ const ${componentName} = (props: LucideProps) => (
export default ${componentName};
`;
};
});

View File

@@ -30,19 +30,20 @@
"scripts": {
"copy:license": "cp ../../LICENSE ./LICENSE",
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:bundles && pnpm build:lib && pnpm build:tags",
"build:tags": "node ../../scripts/migrateIconsToTags.mjs",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --iconFileExtension=.ts --withAliases --aliasNamesOnly --aliasesFileExtension=.ts --exportFileName=index.ts",
"build:lib": "node ./scripts/buildLib.mjs",
"build:tags": "node ./scripts/migrateIconsToTags.mts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --iconFileExtension=.ts --withAliases --aliasNamesOnly --aliasesFileExtension=.ts --exportFileName=index.ts",
"build:lib": "node ./scripts/buildLib.mts",
"build:bundles": "rollup -c rollup.config.mjs",
"clean": "rm -rf lib && rm -rf build && rm -rf icons && rm -f sprite.svg",
"version": "pnpm version --git-tag-version=false"
},
"devDependencies": {
"@lucide/build-icons": "workspace:*",
"@lucide/helpers": "workspace:*",
"@lucide/rollup-plugins": "workspace:*",
"@types/node": "^22.15.30",
"prettier": "^2.3.2",
"svgson": "^5.2.1",
"@lucide/build-icons": "workspace:*",
"@lucide/rollup-plugins": "workspace:*",
"@lucide/helpers": "workspace:*",
"rollup": "^4.40.0",
"rollup-plugin-dts": "^6.2.1"
}

View File

@@ -1,18 +1,16 @@
import fs from 'fs';
import path from 'path';
import getArgumentOptions from 'minimist';
import { parseSync } from 'svgson';
import { readSvgDirectory, getCurrentDirPath } from '@lucide/helpers';
import readSvgs from './readSvgs.mjs';
import generateSprite from './generateSprite.mjs';
import generateIconNodes from './generateIconNodes.mjs';
import copyIcons from './copyIcons.mjs';
import readSvgs from './readSvgs.mts';
import generateSprite from './generateSprite.mts';
import generateIconNodes from './generateIconNodes.mts';
import copyIcons from './copyIcons.mts';
import pkg from '../package.json' with { type: 'json' };
const cliArguments = getArgumentOptions(process.argv.slice(2));
const createDirectory = (dir) => {
const createDirectory = (dir: string) => {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
@@ -22,7 +20,7 @@ const currentDir = getCurrentDirPath(import.meta.url);
const PACKAGE_DIR = path.resolve(currentDir, '../');
const ICONS_DIR = path.join(PACKAGE_DIR, '../../icons');
const LIB_DIR = path.join(PACKAGE_DIR, cliArguments.output || 'lib');
const LIB_DIR = path.join(PACKAGE_DIR, 'lib');
const ICON_MODULE_DIR = path.join(LIB_DIR, 'icons');
const license = `@license ${pkg.name} v${pkg.version} - ${pkg.license}`;
@@ -33,14 +31,8 @@ createDirectory(ICON_MODULE_DIR);
const svgFiles = await readSvgDirectory(ICONS_DIR);
const svgs = await readSvgs(svgFiles, ICONS_DIR);
const parsedSvgs = svgs.map(({ name, contents }) => ({
name,
contents,
parsedSvg: parseSync(contents),
}));
await Promise.all([
generateSprite(parsedSvgs, PACKAGE_DIR, license),
generateIconNodes(parsedSvgs, PACKAGE_DIR),
copyIcons(parsedSvgs, PACKAGE_DIR, license),
generateSprite(svgs, PACKAGE_DIR, license),
generateIconNodes(svgs, PACKAGE_DIR),
copyIcons(svgs, PACKAGE_DIR, license),
]);

View File

@@ -1,7 +1,12 @@
import { writeFile } from 'fs/promises';
import { existsSync, unlinkSync, mkdirSync } from 'fs';
import { type SVGFile } from './readSvgs.mts';
export default async function copyIcons(parsedSvgs, packageDir, license) {
export default async function copyIcons(
parsedSvgs: SVGFile[],
packageDir: string,
license: string
) {
const iconsDirectory = `${packageDir}/icons`;
if (existsSync(iconsDirectory)) {

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({ componentName, iconName, getSvg, deprecated, deprecationReason }) => {
export default defineExportTemplate(async ({ componentName, iconName, getSvg, deprecated, deprecationReason }) => {
let svgContents = await getSvg();
const svgBase64 = base64SVG(svgContents);
@@ -29,4 +29,4 @@ ${svgContents}\
export default ${componentName};
`;
};
});

View File

@@ -1,11 +1,12 @@
import { writeFile } from '@lucide/helpers';
import { type SVGFile } from './readSvgs.mts';
export default async function generateIconNodes(parsedSvgs, packageDir) {
export default async function generateIconNodes(parsedSvgs: SVGFile[], packageDir: string) {
const iconNodes = parsedSvgs.reduce((acc, { name, parsedSvg }) => {
acc[name] = parsedSvg.children.map(({ name, attributes }) => [name, attributes]);
return acc;
}, {});
}, {} as Record<string, [string, Record<string, unknown> | undefined][]>);
const iconNodesStringified = JSON.stringify(iconNodes, null, 2);

View File

@@ -1,36 +1,44 @@
/* eslint-disable import/no-extraneous-dependencies */
import { stringify } from 'svgson';
import { type INode, stringify } from 'svgson';
import { format } from 'prettier';
import { appendFile } from '@lucide/helpers';
import { type SVGFile } from './readSvgs.mts';
export default async function generateSprite(svgs, packageDir, license) {
const symbols = svgs.map(({ name, parsedSvg }) => ({
export default async function generateSprite(
svgs: SVGFile[],
packageDir: string,
license: string
) {
const symbols = svgs.map<INode>(({ name, parsedSvg }) => ({
name: 'symbol',
type: 'element',
value: '',
attributes: {
id: name,
},
children: parsedSvg.children,
}));
const spriteSvgObject = {
const spriteSvgObject: INode = {
name: 'svg',
type: 'element',
attributes: {
xmlns: 'http://www.w3.org/2000/svg',
version: '1.1',
},
value: '',
children: [
{
name: 'defs',
type: 'element',
children: symbols,
},
value: '',
} as INode,
],
};
const spriteSvg = stringify(spriteSvgObject);
const prettifiedSprite = format(spriteSvg, { parser: 'babel' }).replace(/;/g, '');
const prettifiedSprite = (await format(spriteSvg, { parser: 'babel' })).replace(/;/g, '');
const xmlMeta = `<?xml version="1.0" encoding="utf-8"?>\n<!-- ${license} -->\n`;

View File

@@ -1,5 +1,5 @@
import path from 'path';
import { writeFile, getCurrentDirPath, readAllMetadata } from '../tools/build-helpers/helpers.mjs';
import { writeFile, getCurrentDirPath, readAllMetadata } from '@lucide/helpers';
const currentDir = getCurrentDirPath(import.meta.url);
const ICONS_DIR = path.resolve(currentDir, '../icons');

View File

@@ -1,6 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import { basename } from 'path';
import { readSvg } from '@lucide/helpers';
import { type INode, parseSync } from 'svgson';
/**
* Build an object in the format: `{ <name>: <contents> }`.
@@ -8,13 +9,23 @@ import { readSvg } from '@lucide/helpers';
* @param {Function} getSvg - A function that returns the contents of an SVG file given a filename.
* @returns {Object}
*/
export default function readSVGs(svgFiles, iconsDirectory) {
export default function readSVGs(svgFiles: string[], iconsDirectory: string) {
const SVGReadPromises = svgFiles.map(async (svgFile) => {
const name = basename(svgFile, '.svg');
const contents = await readSvg(svgFile, iconsDirectory);
return { name, contents };
return {
name,
contents,
parsedSvg: parseSync(contents),
};
});
return Promise.all(SVGReadPromises);
}
export type SVGFile = {
name: string;
contents: string;
parsedSvg: INode
}

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