Compare commits

...

195 Commits

Author SHA1 Message Date
Eric Fennis
251bfab76a Remove UMD support 2025-08-01 12:47:22 +02:00
Karsa
6d43b9feb3 feat(icons): added turntable icon (#3429)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Added icons/turntable.svg

* Added icons/turntable.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-08-01 12:30:47 +02:00
Jakob Guddas
16166f838b feat(lucide-static): include aliases in icons directory (#3368) 2025-08-01 12:21:31 +02:00
Jakob Guddas
425bcc3f3d fix(icons): arcified cake-slice icon (#3345)
* Updated icons/cake-slice.svg

* Updated icons/cake-slice.json
2025-08-01 12:19:13 +02:00
Jakob Guddas
982af91724 fix(icons): changed a-arrow-* icons (#3474)
* Updated icons/a-arrow-up.svg

* Updated icons/a-arrow-down.svg
2025-08-01 12:09:22 +02:00
Eric Fennis
a3ec4428f1 fix(lucide-vue-next): Support for kebabCase props (#3477)
* Fix kebabCase Vue props

* format code

* Fix tests

* Format code
2025-08-01 11:39:49 +02:00
Abdelrahman
673e76831d fix: add extensions to imports (#2950)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-08-01 11:39:36 +02:00
Karsa
b4291576b7 fix(icons): changed hospital icon (#2969)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/hospital.svg

* Update hospital.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-31 13:54:05 +02:00
Karsa
95f5ecacad fix(icons): arcified message icons & fixed optical volume (#3473)
* fix(icons): arcify message icons & fix optical volume

* fix(icons): increase optical volume of messages-square
2025-07-31 12:57:36 +02:00
Karsa
ef5c1b9bdd feat(icons): added hand-fist, renamed grab to hand-grab (#1843) 2025-07-31 12:44:26 +02:00
Eric Fennis
b01715ebe8 chore(docs): Update vitepress deps (#3470)
* Update vitepress

* Format code

* Update deps

* Fix build

* Update lockfile
2025-07-31 11:45:59 +02:00
Karsa
05dd5fcfde fix(icons): changed tiny heart icons (#3471)
* Updated icons/file-heart.svg

* Updated icons/folder-heart.svg

* Updated icons/calendar-heart.svg

* Updated icons/scan-heart.svg

* Updated icons/book-heart.svg

* Updated icons/book-heart.json

* Updated icons/hand-heart.svg

* Updated icons/hand-heart.json

* Updated icons/message-circle-heart.svg

* Updated icons/message-circle-heart.json

* fix(icons): revert changes made to message-circle-heart in favour of https://github.com/lucide-icons/lucide/pull/3473
2025-07-31 10:40:17 +02:00
Jakob Guddas
e71198d9b3 chore: icon alias improvements (#2861)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-30 16:52:50 +02:00
Jakob Guddas
57714e36ea feat(SvgPreview): add features from lucide studio (#3365)
* feat(SvgPreview): add features from lucide studio

* Update docs/.vitepress/lib/SvgPreview/index.tsx

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-30 16:20:24 +02:00
Epifânio Francisco
358c9c1e80 fix(docs): update prop name from absolute-stroke-width to absoluteStrokeWidth in vue-next guide (#3322)
- Changed kebab-case to camelCase for consistency with Vue prop naming conventions
- Updated props table in lucide-vue-next documentation
2025-07-30 15:56:48 +02:00
Alex
64ddff76c5 fix: properly select icons dir for tags & error if no metadata found (#3411)
Fixes #3359
Throwing an error in readAllMetadata now to ensure this error can't happen again in the future.
The error was caused by this script being moved to a different dir, but the relative url not being updated, causing no icons to be found.
2025-07-30 11:59:46 +02:00
Jakob Guddas
31a9cdcbcc ci: add "telegram" to close-issue-with-banned-phrases (#3475) 2025-07-30 09:04:52 +02:00
Karsa
69319ee2f0 feat(icons): arcified moon icons (#3380) 2025-07-29 20:50:39 +02:00
Karsa
7beb3ee666 fix(icons): changed gavel icon (#3465)
* Updated icons/gavel.svg

* Updated icons/gavel.json

* Update icons/gavel.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-29 19:16:31 +02:00
Eric Fennis
396d6d42ce ci(suggest-tags): Switch to github.event.pull_request.head.sha 2025-07-29 16:19:30 +02:00
Eric Fennis
37a60eefb2 ci: Switch to $GITHUB_SHA 2025-07-29 16:11:08 +02:00
Jakob Guddas
c2c46b21ed fix(icons): changed mails, tags, files, file-stack, book-copy and folders icon (#2935)
* Updated icons/folders.svg

* Updated icons/folders.svg

* Updated icons/folders.svg

* Updated icons/folders.svg

* Updated icons/files.svg

* Updated icons/files.json

* Updated icons/mails.svg

* Updated icons/mails.json

* Updated icons/tags.svg

* Updated icons/tags.json

* Updated icons/files.svg

* Updated icons/file-stack.svg

* Updated icons/file-stack.json

* Updated icons/files.json

* Updated icons/images.svg

* Updated icons/square-stack.svg

* Updated icons/square-stack.json

* Updated icons/square-stack.svg

* Updated icons/files.svg

* Update icons/square-stack.json

* Update icons/square-stack.svg

* Updated icons/book-copy.svg

* Updated icons/tags.svg

* Updated icons/tags.svg

* Update icons/mails.svg

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

* Update icons/folders.svg

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

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2025-07-29 09:37:58 +02:00
Karsa
0a0c8aa7e7 fix(icons): changed settings icon (#3467)
* Updated icons/settings.svg

* Updated icons/settings.json

* Updated icons/settings.svg

* Update settings.svg
2025-07-29 09:35:23 +02:00
Usama Khan
dc14e6ea8e feat(icons): added closed-caption icon (#2910)
* Added icons/closed-caption.svg

* Added icons/closed-caption.json

* Update closed-caption.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-29 09:28:40 +02:00
Jamie Law
1f67ef5307 fix(icons): Rounded and optically-centred flag-triangle-* icons (#3438)
* Rounded and optically-centred `flag-triangle-*` icons

* Increase size of flag
2025-07-29 09:23:43 +02:00
Jakob Guddas
ff6f9a09ad Updated icons/folder-symlink.svg (#2558) 2025-07-29 09:22:54 +02:00
Jakob Guddas
585b65f28f fix(icons): added rounding to heart-* icons (#3061)
* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.json

* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart.svg

* Updated icons/heart.json

* Updated icons/heart-pulse.svg

* Updated icons/heart-pulse.json

* Updated icons/heart-crack.svg

* Updated icons/heart-crack.json

* Updated icons/heart-off.svg

* Updated icons/heart-off.json

* Updated icons/heart-crack.svg

* Updated icons/heart-handshake.svg

* Updated icons/heart-minus.svg

* Updated icons/heart-minus.json

* Update icons/heart-minus.json

* Update icons/heart-minus.json

* Update icons/heart-minus.json

* Apply suggestions from code review

* Updated icons/heart-minus.svg

* Updated icons/heart-minus.svg

* Updated icons/heart-off.svg

* Updated icons/heart-plus.svg

* Updated icons/heart-plus.json

* Updated icons/heart-plus.json

* Update icons/heart-handshake.svg

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

* Update icons/heart-handshake.svg

* Update icons/heart-crack.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2025-07-29 07:31:19 +02:00
Victor Soteras
405feea8f6 fix(icons): Changed a-large-small icon (#3396)
* fix(icons): Changed a-large-small icon

* fix(icons): Changed case-sensitive icon

* fix(icons): Changed case-lower icon

* fix(icons): Changed case-upper icon

* Apply suggestions from code review

* Update .gitignore

* Update icons/a-large-small.json

* Update icons/case-upper.svg

* Update icons/case-upper.svg

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-28 17:08:39 +02:00
Karsa
5931a4a227 fix(icons): changed sailboat icon (#3460)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/sailboat.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 15:59:58 +02:00
Zlendy
d3bafc2848 fix(docs): Icon Component Example for Svelte 5 does not compile (#3416) 2025-07-28 15:58:31 +02:00
Karsa
a6f4a08bda fix(icons): changed wrench icon (#3459)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/wrench.svg

* Updated icons/wrench.json

* Updated icons/pickaxe.svg

* Updated icons/gavel.svg

* Updated icons/hammer.svg

* Updated icons/hammer.json

* Updated icons/pickaxe.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 15:57:03 +02:00
Jamie Law
5a93aff903 feat(icons): added handbag icon (#3298)
* Added icons/handbag.svg

* Added icons/handbag.json

* Update handbag.json

Added extra tags

* Fix trailing comma

* Update icons/handbag.svg

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

* Update handbag.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2025-07-28 15:56:37 +02:00
Bean Duong
e6c50d543b feat(icons): added clipboard-clock icon (#3427)
* Added icons/clipboard-clock.svg

* Added icons/clipboard-clock.json

* Flip clock side

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

* Add contributors

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

* Extend use cases

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

* Update icons/clipboard-clock.json

* Remove duplicated tag

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

---------

Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-28 15:51:52 +02:00
Karsa
0d7c70cab6 fix(icons): changed user-star icon (#3464)
* Updated icons/user-star.svg

* Updated icons/user-star.json

* Update user-star.json
2025-07-28 15:51:29 +02:00
Martin Vítek
379d1b1002 feat(icons): added user-star icon (#3331)
* Added icons/user-star.svg

* Added icons/user-star.json

* enlarge star in user-star icon

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-28 15:07:27 +02:00
Mariano Franzese
7d6998941d feat(icons): added map-minus icon (#3259)
* Added icons/map-minus.svg

* Added icons/map-minus.json

* Update icons/map-minus.svg

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

* Update icons/map-minus.json

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

* Update icons/map-minus.json

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

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-28 14:59:25 +02:00
Eric Fennis
667bb8034d fix(icons): Rename location-edit to map-pin-pencil (#3462)
* Rename `location-edit` to `map-pin-pencil`

* Updated "aliases" object
2025-07-28 14:51:16 +02:00
Karsa
fd9c489d7a fix(icons): changed castle icon (#2972)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/castle.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 13:57:04 +02:00
Karsa
acb0e37ac2 fix(icons): changed shovel icon (#3458)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/shovel.svg

* Updated icons/shovel.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 13:46:09 +02:00
Karsa
6c25cbee67 feat(icons): added hat-glasses icon (#3431)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Added icons/hat-glasses.svg

* Added icons/hat-glasses.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 10:41:43 +02:00
Jamie Law
08121af31e fix(icons): arcify arrow-big- icons (#3356)
* fix(icons): arcify `arrow-big-` icons

* give correct attribution

* shorten stems of `arrow-big-*-dash` icons
2025-07-28 10:30:59 +02:00
Karsa
2d484469cd fix(icons): changed sparkles icon (#3426)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/sparkle.svg

* Updated icons/sparkles.svg

* Updated icons/sparkles.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 10:24:37 +02:00
Karsa
f66d167ead fix(icons): arcified playback icons (#3425)
* fix(icons): arcified playback icons

* fix(icons): fix file-play name & file-video-2 => file-video-camera

* fix(icons): add `stop` tags to square

* fix(icons): fix lines on skip icons

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-07-28 10:17:44 +02:00
Jamie Law
c63e5a456e fix(icons): changed sprout icon (#3430)
* Updated icons/sprout.svg

* Updated icons/sprout.json

* Add a bend to the sprout stalk

* Add rounding to the leaf tip
2025-07-28 10:11:49 +02:00
Karsa
aac12f991a fix(icons): changed croissant icon (#3428)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/croissant.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-28 10:11:12 +02:00
Jamie Law
3844a4b346 Refine refresh-ccw-dot to match other refresh- icons (#3437)
Also update attributions to include contributors to `refresh-ccw`, ignoring optimisations
2025-07-28 10:10:41 +02:00
Karsa
98b43826a4 fix(icons): changed gem icon (#3442)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/gem.svg

* Updated icons/gem.json

* Update gem.svg

* Update gem.svg

* Update gem.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-28 10:10:14 +02:00
Jakob Guddas
e8194cbabe fix(icons): changed lasso icon (#3454)
* Updated icons/lasso.svg

* Updated icons/lasso.json
2025-07-28 09:57:12 +02:00
Kyle Angelo Galendez
17bbbe1cbb feat(icons): added spotlight icon (#3450)
* Added icons/spotlight.svg

* Added icons/spotlight.json
2025-07-28 09:56:11 +02:00
Jakob Guddas
c698121170 Updated icons/monitor-dot.svg (#3452) 2025-07-28 09:01:20 +02:00
Luis David Lopera
7a380a8177 feat(icons): added wifi-sync icon (#3132) 2025-07-26 21:04:49 +02:00
Karsa
55623e1611 fix(icons): changed magnet icon (#3435)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/magnet.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-22 18:47:49 +02:00
Karsa
803d237fef fix(icons): fixed ban icon (#3434)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/ban.svg

* Updated icons/ban.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-22 18:35:40 +02:00
Jakob Guddas
151bd33cd7 fix(icons): changed pen-line and pencil-line icon (#2663)
* Updated icons/pencil-line.svg

* Updated icons/pencil-line.json

* Updated icons/pen-line.svg

* Updated icons/pen-line.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-21 18:01:47 +02:00
Karsa
b3b8cfd59c fix(icons): changed trash icon (#3394)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/trash-2.svg

* Updated icons/trash.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-07-07 09:12:51 +02:00
Jakob Guddas
996fc68c7e fix(icons): changed podcast icon (#3385)
* Updated icons/podcast.svg

* Updated icons/podcast.json

* Update icons/podcast.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-04 17:34:00 +02:00
Eric Fennis
69e99093b8 ci(suggest-tags): Fix types import 2025-07-04 17:32:32 +02:00
Eric Fennis
030c7b9cb9 Merge branch 'main' of https://github.com/lucide-icons/lucide 2025-07-04 17:27:11 +02:00
Eric Fennis
6f384680b4 ci(suggest-tags): Fix failing job 2025-07-04 17:27:07 +02:00
Jakob Guddas
e810b7273f fix(icons): changed cable icon (#3374)
* Updated icons/cable.svg

* Update cable.svg

* Update cable.svg

* Updated icons/cable.svg

* Updated icons/cable.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-07-04 17:12:42 +02:00
Jamie Law
599c517188 fix(icons): changed brain icon (#3381)
* Updated icons/brain.svg

* Updated icons/brain.json
2025-07-04 17:06:45 +02:00
Jamie Law
95830a0d88 Add Turkish lira icons (#2873)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-30 21:59:19 +02:00
Eric Fennis
5f0c19afaa ci(suggest-tags): Allow to always run 2025-06-30 21:50:58 +02:00
Eric Fennis
37135af384 ci(suggest-tags): Switch to pull_request_target with suggest tags 2025-06-30 21:49:06 +02:00
Jakob Guddas
0fdc2413f6 Updated icons/circle-parking-off.svg (#3343) 2025-06-30 20:35:00 +02:00
Eric Fennis
d565b951d7 ci(suggest-tags): Fix tags suggestions 2025-06-30 20:25:12 +02:00
Itrulia
3e7d748827 docs(site): small changes for DynamicIcon (#3355)
* docs(lucide-react): small changes for DynamicIcon

Changed the sentence structure slightly for DynamicIcon to be easier to understand.

* Update lucide-react.md
2025-06-27 17:13:44 +02:00
Eric Fennis
0e54626bdb ci(icons): Add ChatGPT tags suggestions on icon PRs (#3372)
* Add gpt tags

* Add github actions flow

* Add link so people can use the chat

* Fix workflow

* Add openai dep

* Add actions core

* Try gh pr review in actions

* Try with octokit

* Remove changed files part

* Try with createReview function

* Try this

* fix broken json file

* Turn on review by gh action

* Try this

* Update icons/trash.json

* Update the runner

* Remove added tags

* Add more checks
2025-06-27 17:11:00 +02:00
Alex Naskidashvili
110d8cce27 feat(icons): added tool-case icon (#3333)
* Added icons/tool-case.svg

* Added icons/tool-case.json

* Update tool-case.svg

slightly alter the icon SVG code to match with the "archive" icon

* Update tool-case.svg

* Optimized version of tool-case.svg

* Update icons/tool-case.json

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

* Update tool-case.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-06-27 16:51:29 +02:00
Jamie Law
9db00bfe3c fix(icons): changed flag icon (#3370)
* Updated icons/flag.svg

* Updated icons/flag.json

* Update flag-off.svg

Applied same arcification to `flag-off`

* Update flag-off.json

Update attribute and add tags to `flag-off`
2025-06-27 12:11:16 +02:00
Zishan Kadri
e21d0e2dd6 fix(icons): changed sun-moon icon (#3328)
* Updated icons/sun-moon.svg

* Updated icons/sun-moon.json

* Updated icons/sun-moon.svg

* Updated icons/sun-moon.svg

* Update icons/sun-moon.json

Fix tag listing format to match original code style

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

* Updated icons/sun-moon.svg

* Updated icons/sun-moon.svg

* Updated icons/sun-moon.json

* Updated icons/sun-moon.svg

* Updated icons/sun-moon.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-06-27 11:39:31 +02:00
Jakob Guddas
483a594622 fix(icons): arcified shrub icon (#2292)
* Updated icons/shrub.svg

* Updated icons/shrub.json

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Updated icons/shrub.svg

* Update icons/shrub.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-27 11:39:04 +02:00
Jamie Law
2136843515 fix(icons): Changed megaphone icon (#2448)
* Lucidify megaphone.svg

Rounded the corners and increased the gap inside the handle

* Update megaphone.json

* Add bullhorn.json

* Add bullhorn.svg

* Lucidify megaphone-off.svg

* Update megaphone-off.json

* Add bullhorn-off.svg

* Add bullhorn-off.json

* Delete icons/megaphone-off.svg

* Delete icons/megaphone-off.json

* Delete icons/megaphone.svg

* Delete icons/megaphone.json

* Rename `bullhorn` to `megaphone`

* Update icons/megaphone-off.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-06-27 11:36:48 +02:00
Kyle Angelo Galendez
ad842796dc feat(icons): added vector-square icon (#2531)
* Rename box-select.svg to square-dashed.svg

* Update and rename box-select.json to square-dashed.json

* Add aliases

* Added icons/vector-square.svg

* Added icons/vector-square.json

* Update vector-square.svg

* Add contributor

* Update icons/vector-square.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-27 11:35:27 +02:00
Jamie Law
f6a7eadd99 fix(icons): Updates to clock-related icons (#2538)
* Update base `clock`-icons

Replace `<polyline/>`s with `<path/>`s, and adjust the angles of the 2-, 4-, 8- and 10 o'clock hour hands to better match the 1-, 5-, 7- and 11 o'clock hands

* Update clocks with symbols

Update `clock-arrow-down`, `clock-arrow-up` and `clock-alert` to match the hand angle of `clock`

Also align the exclamation mark of `clock-alert` to the pixel grid

* Update small clock faces

Make the clock faces in `calendar-clock`, `file-clock`, `folder-clock` and `watch` consistent with each other, and resolve some two-pixel-gap violations.

* Align the tips of all hours hands on large clocks to the grid

* Add self-attribution where appropriate

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-27 11:34:16 +02:00
Jamie Law
f51a01a7d0 Updated icons/ligature.svg (#3369) 2025-06-27 11:27:03 +02:00
Jakob Guddas
30ed887ad1 fix(icons): changed dessert icon (#3362)
* Updated icons/dessert.svg

* Updated icons/dessert.json
2025-06-27 10:08:12 +02:00
Karsa
a87ac013f7 docs(packages/lucide-static): update docs for better clarity (#3225)
* docs(packages/lucide-static): update docs for better clarity

* docs(packages/lucide-static): fix node.js heading level
2025-06-24 13:18:07 +02:00
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
Kuba Ratajczyk
d42a21610f feat(icons): added grid-3x2 icon (#3216)
* Added icons/grid-3x2.svg

* Added icons/grid-3x2.json

* Update grid-3x2.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-06-03 23:13:23 +02:00
Jakob Guddas
f5be7a9862 Updated icons/file-badge.svg (#2934) 2025-06-03 19:24:29 +02:00
Eric Fennis
52d408e6d0 Fixing vercel build 2025-06-02 21:06:33 +02:00
Jeevan
f69c760598 feat(angular): update peer dependencies for Angular to support version 20.x (#3273) 2025-06-01 08:22:28 +02:00
Nagesh Panchal
22a43cbdeb feat(icon): add id-card-lanyard icon (#2898)
* feat(icon): add id-card-with-lanyard icon

* Optimized svg

* Optimization and minor changes

* Renamed icon
2025-05-23 14:02:02 +02:00
Lennard Scheibel
1ca70df074 Add cloud-check icon (#2612) 2025-05-23 13:03:34 +02:00
Jakob Guddas
5514709fb3 fix(icons): changed eraser icon (#3076)
* Updated icons/eraser.svg

* Updated icons/eraser.json

* Updated icons/eraser.json

* Updated icons/eraser.svg

* Updated icons/eraser.svg

* Updated icons/eraser.svg
2025-05-23 13:03:21 +02:00
Jakob Guddas
34a8280ba8 fix(icons): changed paperclip icon (#2956)
* Updated icons/paperclip.svg

* Updated icons/paperclip.json

* Updated icons/paperclip.svg

* Updated icons/paperclip.svg

* Updated icons/paperclip.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-23 13:02:05 +02:00
Jakob Guddas
f814c94672 fix(icons): changed battery-* icons (#3083)
* Updated icons/battery-full.svg

* Updated icons/battery-full.json

* Updated icons/battery.svg

* Updated icons/battery.json

* Updated icons/battery-charging.svg

* Updated icons/battery-charging.json

* Updated icons/battery-plus.svg

* Updated icons/battery-warning.svg

* Updated icons/battery-warning.json

* Updated icons/battery-medium.svg

* Updated icons/battery-medium.json

* Updated icons/battery-low.svg

* Updated icons/battery-low.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-23 12:35:36 +02:00
Jakob Guddas
e1cfbe14be fix(icons): changed list-collapse icon (#3081)
* Updated icons/list-collapse.svg

* Updated icons/list-collapse.json
2025-05-23 12:35:03 +02:00
Jakob Guddas
a549fd65ef fix(icons): changed square-check-big icon (#3156)
* Updated icons/square-check-big.svg

* Updated icons/square-check-big.json

* Updated icons/square-check-big.svg
2025-05-23 12:34:25 +02:00
dependabot[bot]
239bbd9a9a build(deps-dev): bump vite from 6.0.7 to 6.1.6 (#3236)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.7 to 6.1.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.1.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.1.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.1.6
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-23 12:32:16 +02:00
Brizen Britt
85b6de6684 docs(docs): added testing website locally instructions (#3124)
* added testing website

* added build command

* resolve suggestions
2025-05-23 12:11:20 +02:00
dependabot[bot]
19fa01b5fc build(deps-dev): bump vite from 6.3.2 to 6.3.4 (#3181)
* build(deps-dev): bump vite from 6.3.2 to 6.3.4

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.2 to 6.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update vitest as well

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-16 14:25:07 +02:00
LieOnLion
e3e6dd9ccc feat(icons): added circle-pound-sterling icon (#2822)
* Added icons/circle-pound-sterling.svg

* Added icons/circle-pound-sterling.json

* Update icons/circle-pound-sterling.json

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

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-16 14:06:04 +02:00
Juan Pablo
ba77aa6a76 feat(icons): added square-dashed-top-solid icon (#3204)
* Added icons/square-dashed-top-solid.svg

* Added icons/square-dashed-top-solid.json
2025-05-16 13:55:55 +02:00
Abdalrhman Almarakeby
42f36a9da3 chore(cspell): remove duplicate 'pilcrow' from custom-words.txt (#3193) 2025-05-16 13:54:19 +02:00
Karsa
9abed5ee16 fix(icons): changed landmark icon (#2967)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/landmark.svg

* Updated icons/landmark.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-16 13:54:02 +02:00
Karsa
e6246ed5c6 fix(icons): changed warehouse icon (#2966)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/warehouse.svg

* Updated icons/warehouse.json

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-16 13:53:41 +02:00
Karsa
877b467d96 fix(icons): changed university icon (#2965)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/university.svg

* Updated icons/university.json

* Update university.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-16 13:53:16 +02:00
Karsa
781620d669 fix(icons): changed factory icon (#2970)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/factory.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-16 13:52:50 +02:00
Jan Vincent Liwanag
3ad1f07ffc fix(lucide-react-native): support react 19 (#2951) (#3126)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-16 13:38:02 +02:00
Karsa
47880403d3 fix(icons): changed satellite icon (#3180)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/satellite.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-16 12:55:42 +02:00
Jakob Guddas
89d204a35d fix(icons): changed square-code icon (#3173)
* Updated icons/square-code.svg

* Updated icons/square-code.json
2025-05-16 10:52:30 +02:00
Jakob Guddas
bdcd417c1c fix(icons): changed chevrons-left-right-ellipsis icon (#3189)
* Updated icons/chevrons-left-right-ellipsis.svg

* Updated icons/chevrons-left-right-ellipsis.json

* Updated icons/chevrons-left-right-ellipsis.json
2025-05-16 10:50:02 +02:00
Jakob Guddas
4c7738fea1 fix(icons): changed axis-3d icon (#3199)
* Updated icons/axis-3d.svg

* Updated icons/axis-3d.json
2025-05-16 10:48:40 +02:00
Jakob Guddas
12e7cfd7f7 Updated icons/clock-6.svg (#3209) 2025-05-16 10:48:03 +02:00
Jamie Law
09841dd721 Optimise a number of icons using <line> and <polyline> (#3168)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-16 10:47:35 +02:00
Yuta Osawa
8ae65a8fb1 feat(icons): added check-line icon (#2890)
* Added icons/check-line.svg

* Added icons/check-line.json

* Inherit contributors from check icon

* Fix order of properties

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-12 15:07:49 +02:00
Jakob Guddas
fda32bee52 fix(icons): changed brackets icon (#3172)
* Updated icons/brackets.svg

* Updated icons/brackets.svg

* Updated icons/brackets.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-09 10:34:07 +02:00
Alexandre
e913eab8bb feat(icons): added gpu icon (#2955)
* gpu icon added

* updated tags

* svg minification

* fix square view

* update contributors

* Update icons/gpu.json

* Update icons/gpu.json

* fix coma in gpu.json

* Format gpu.json

---------

Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-09 10:29:59 +02:00
Jakob Guddas
2408b8bb8f Revert "fix(dev): resets Absolute Stroke Width (#3005)" (#3197)
This reverts commit dcdc0b8bb3.
2025-05-09 10:10:15 +02:00
Karsa
8b257abaf6 fix(icons): changed axe icon (#3201)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/axe.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-05-09 10:08:49 +02:00
Abdalrhman Almarakeby
c00ef3a835 chore(metadata): add lens tag to icons with magnifying glass (#3192) 2025-05-06 10:58:27 +02:00
Jakob Guddas
0d3c8f4ea2 fix(icons): arcified laptop icon (#3190)
* Updated icons/laptop.svg

* Updated icons/laptop.json

* Updated icons/laptop.json
2025-05-06 10:58:01 +02:00
Eric Fennis
771cb0bbd6 Update names in docs (#3184) 2025-05-03 09:28:29 +02:00
Jamie Law
3f34f4e7b6 fix(icons): Optimised phone- icons (#3169)
* Optimised `phone-` icons

* fix(site): remove studio link from navbar (#3166)

* Redraw handset to better align arcs still, and replace some with straight lines

* Align ring lines

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
2025-05-02 22:10:13 +02:00
Kyle Angelo Galendez
e4f411ce9c feat(icons): added panda icon (#2094)
* Added icons/panda.svg

* Added icons/panda.json

* Enlarge `panda`

* Add contributors

Added "karsa-mistmere" because he redesign the `panda`

* Update panda.svg

fix(icons/panda): fix overeager optimisation by Lucide Studio

---------

Co-authored-by: Karsa <contact@karsa.org>
2025-05-02 22:04:31 +02:00
Jakob Guddas
0f47888a17 feat(icons): added soap-dispenser-droplet icon (#3088)
* Added icons/soap-dispenser-droplet.svg

* Added icons/soap-dispenser-droplet.json

* Updated icons/soap-dispenser-droplet.svg

* Updated icons/soap-dispenser-droplet.svg
2025-05-02 22:04:14 +02:00
Eric Fennis
81ce8fed07 Adjust pr template (#3183) 2025-05-02 13:17:01 +02:00
Jakob Guddas
03b3a4f179 fix(icons): changed mail icon (#3144)
* Updated icons/mail.svg

* Updated icons/mail.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 13:09:43 +02:00
Jakob Guddas
24178ca1bc fix(icons): changed menu icon (#3142)
* Updated icons/menu.svg

* Updated icons/menu.json

* Updated icons/menu.json
2025-05-02 13:07:07 +02:00
Jakob Guddas
e91dd659f0 fix(icons): changed bell-electric icon (#3139)
* Updated icons/bell-electric.svg

* Updated icons/bell-electric.json

* Updated icons/bell-electric.svg
2025-05-02 11:10:40 +02:00
Jakob Guddas
6277ceb274 fix(icons): changed touchpad-off icon (#3118)
* Updated icons/touchpad-off.svg

* Updated icons/touchpad-off.json
2025-05-02 11:04:16 +02:00
Jakob Guddas
45b22c9f2d fix(icons): rotate dumbbell icon (#3107)
* Updated icons/dumbbell.svg

* Updated icons/dumbbell.json

* Updated icons/dumbbell.svg

* Updated icons/dumbbell.json

* Updated icons/dumbbell.svg

* Updated icons/dumbbell.svg
2025-05-02 11:02:22 +02:00
Jakob Guddas
3a375e1a17 fix(icons): changed air-vent icon (#3117)
* Updated icons/air-vent.svg

* Updated icons/air-vent.json

* Updated icons/air-vent.svg
2025-05-02 11:00:28 +02:00
Jakob Guddas
ac09719ba6 fix(ci): reduces workflow triggers (#3150)
* ci: reduces workflow triggers

* chore: removed lint-contributors step

* Update .github/workflows/labeler.yml
2025-05-02 10:59:38 +02:00
ajokt123
8d8c41c371 4 missing categories (#3110) 2025-05-02 10:57:39 +02:00
Jamie Law
951c142e96 fix(icons): changed guitar icon (#3115)
* Updated icons/guitar.svg

* Add back missing path

* Remove guitar hole
2025-05-02 10:54:40 +02:00
Brizen Britt
dcdc0b8bb3 fix(dev): resets Absolute Stroke Width (#3005)
* Changed resetStyle to reflect changes of button on absolutestrokewidth

* removed nextTick

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 10:52:59 +02:00
Jakob Guddas
e11e134ce1 fix(icons): changed search icon (#3140)
* Updated icons/search.svg

* Updated icons/search.json
2025-05-02 10:31:02 +02:00
Jakob Guddas
e149de42ff fix(metadata): added tags to square-pen icon (#3155)
* Updated icons/square-pen.json

* Updated icons/square-pen.json
2025-05-02 10:27:55 +02:00
gubser
5baa37b85a feat(icons): Added clock plus icon. (#2996)
* Added clock plus icon.

* Reduced gaps.

---------

Co-authored-by: Elio Gubser <3030498-gubser@users.noreply.gitlab.com>
2025-05-02 10:24:08 +02:00
Jakob Guddas
7916c44484 fix(icons): changed expand icon (#2831)
* Updated icons/expand.svg

* Updated icons/expand.json

* Updated icons/expand.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 10:23:08 +02:00
Jamie Law
922ba5c781 fix(icons): changed locate-off icon (#3137)
* Updated icons/locate-off.svg

* Updated icons/locate-off.json
2025-05-02 10:14:35 +02:00
Jakob Guddas
c9c1b47e7a fix(icons): changed users icon (#3143)
* Updated icons/users.svg

* Updated icons/users.json
2025-05-02 10:14:09 +02:00
Viktor Andersson
03eb86287a use implicit return in react package (#2325)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 09:49:43 +02:00
Karsa
1ab3826607 feat(icons): added brush-cleaning icon (#2395)
Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 09:40:21 +02:00
shamaamahh
2fde138c46 fix(lucide-svelte): Resolve Svelte 5 deprecation of svelte:component (#3112)
* removed flutter package link

* created drumsticks.svg and json

* Update to Svelte 5 syntax (removed svelte:component)

* Remove drumsticks icons

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 09:39:05 +02:00
Jakob Guddas
2640a7c585 docs(icon-design-guide): point people to lucide studio instead of svgo (#3152) 2025-05-02 09:23:36 +02:00
Jakob Guddas
25ce89b191 fix(icons): changed package-2 icon (#3174)
* Updated icons/package-2.svg

* Updated icons/package-2.json
2025-05-02 09:22:30 +02:00
Karsa
fd3f3eb607 feat(icons): added hamburger icon (#3165)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Added icons/hamburger.svg

* Added icons/hamburger.json

* Update hamburger.svg

* Update icons/hamburger.json

* Update icons/hamburger.svg

* Update icons/hamburger.json

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

---------

Co-authored-by: Karsa <karsa@karsa.org>
Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-05-02 09:21:06 +02:00
Jakob Guddas
b473c10af9 fix(site): remove studio link from navbar (#3166) 2025-04-28 18:01:10 +02:00
Jakob Guddas
a01c15cc8c fix(icons): redesigned brush icon (#3011)
* Updated icons/brush.svg

* Updated icons/brush.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-04-21 21:19:52 +02:00
Eric Fennis
0fccc276c3 Bump dependencies (#3096) 2025-04-21 12:37:02 +02:00
lukedukeus
06c33964cb update door icons (#3060) 2025-04-21 12:31:07 +02:00
Luis David Lopera
232d7b4557 feat(icons): added wifi-pen icon (#2576)
* Added icons/wifi-pen.svg

* Added icons/wifi-pen.json

* Apply suggestion from @jguddas - wifi-pen.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-04-21 12:20:25 +02:00
Jakob Guddas
3205e11173 fix(icons): changed file-badge-2 icon (#2933)
* Updated icons/file-badge-2.svg

* Updated icons/file-badge-2.json

* Updated icons/file-badge-2.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2025-04-21 12:04:24 +02:00
Jakob Guddas
0778ec87ad feat(icons): added ruler-dimension-line icon (#2535) 2025-04-21 11:33:51 +02:00
Brizen Britt
85983552ee fix(docs): PR Conventions (#3066)
* added title for title guidelines

* added example title

---------

Co-authored-by: Jacob Padilla <jp@jacobpadilla.com>
2025-04-21 10:49:10 +02:00
Brizen Britt
7b954807da Added periods (#3065) 2025-04-21 10:45:14 +02:00
Jakob Guddas
9105f0e3dd fix(icons): changed baby icon (#3073)
* Updated icons/baby.svg

* Updated icons/baby.json
2025-04-21 10:38:22 +02:00
Jakob Guddas
fe57bdd291 fix(icons): changed orbit icon (#3074)
* Updated icons/orbit.svg

* Updated icons/orbit.svg
2025-04-21 10:37:41 +02:00
Jakob Guddas
34cb6b12f8 fix(icons): changed clipboard-paste icon (#3075)
* Updated icons/clipboard-paste.svg

* Updated icons/clipboard-paste.json
2025-04-21 10:35:01 +02:00
Jakob Guddas
6a8591c348 Updated icons/book-key.svg (#3062) 2025-04-21 10:31:36 +02:00
Jakob Guddas
547b1846ae fix(icons): changed calendar-plus icon (#3085)
* Updated icons/calendar-plus.svg

* Updated icons/calendar-plus.json
2025-04-21 10:27:03 +02:00
ajokt123
187ce5cff8 fixed grammatical and spelling issues (#3090) 2025-04-21 10:26:20 +02:00
Karsa
40f544433b fix(icons): rebase non-binary on square-asterisk (#3071) 2025-04-19 17:03:51 +02:00
Jacob Padilla
05fa11e073 fixed shredder.json formatting (#3072) 2025-04-19 17:03:27 +02:00
dependabot[bot]
e4988bc1df build(deps-dev): bump vite from 5.4.15 to 5.4.17 (#2993)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.15 to 5.4.17.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.17/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.17/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.17
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2025-04-19 08:42:07 +02:00
Brizen Britt
3a24adec64 Added link for jguddas next to lucide studio (#3063) 2025-04-19 08:39:42 +02:00
843 changed files with 10158 additions and 6223 deletions

View File

@@ -8,7 +8,6 @@ squircle
strikethrough
touchpad
ungroup
pilcrow
toc
# Brands

View File

@@ -1,16 +1,18 @@
<!-- Thank you for contributing! -->
<!--
PR Title Guidelines:
Please use the format: <type>(<scope>): <short description>
Example: feat(icons): added `camera` icon
Available types: fix, feat, perf, docs, style, refactor, test, chore, ci, build
Common scopes: icons, docs, studio, site, dev
-->
<!-- Insert `closes #issueNumber` here if merging this PR will resolve an existing issue -->
## What is the purpose of this pull request?
<!-- Please choose one of the following, and put an "x" next to it. -->
- [ ] New Icon
- [ ] Bug fix
- [ ] New Feature
- [ ] Documentation update
- [ ] Other:
### Description
## Description
<!-- Please insert your description here and provide info about the "what" this PR is contribution -->
### Icon use case <!-- ONLY for new icons, remove this part if not icon PR -->

View File

@@ -16,7 +16,7 @@ jobs:
- name: Check for blocked phrases in issue title
run: |
ISSUE_TITLE=$(jq -r '.issue.title' "$GITHUB_EVENT_PATH")
BLOCKED_PHRASES=("twitter" "whatsapp" "logo" "google" "tiktok" "facebook" "slack" "discord" "bluesky" "spotify" "behance" "pix" "x.com")
BLOCKED_PHRASES=("twitter" "whatsapp" "logo" "google" "tiktok" "facebook" "slack" "discord" "bluesky" "spotify" "behance" "pix" "x.com" "telegram")
# Check title and body for blocked phrases
for PHRASE in "${BLOCKED_PHRASES[@]}"

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

@@ -2,6 +2,8 @@ name: Linting PR
on:
pull_request:
paths-ignore:
- icons/*.svg
jobs:
lint-code:

View File

@@ -5,7 +5,6 @@ on:
types:
- opened
- edited
- synchronize
- reopened
jobs:
@@ -27,6 +26,7 @@ jobs:
docs
ci
build
chore
requireScope: true
ignoreLabels: |
bot

View File

@@ -14,59 +14,20 @@ jobs:
contents: read
steps:
- uses: actions/checkout@v4
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v46
with:
files: icons/*
- name: Generate annotations
run: node ./scripts/lintFilenames.mjs
env:
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
lint-contributors:
name: Lint Contributors
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v46
with:
files: icons/*
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
- name: Install simple-git (safer and faster than installing all deps)
run: npm install simple-git
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v46
with:
files: icons/*
- name: Generate annotations
run: node ./scripts/updateContributors.mjs
run: node ./scripts/lintFilenames.mts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FETCH_DEPTH: ${{ github.event.pull_request.commits }}
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
- name: Generate annotations
env:
ANNOTATION_SEVERITY: notice
ANNOTATION_TITLE: Contributors have changed!
ANNOTATION_DESCRIPTION: Don't add people who have only performed automatic optimizations.
run: |
git diff --unified=0 -- icons/*.json | # diff icon metadata (unified=0 gives the correct chunk line number)
perl -ne '/^(\+|- |@)/ && print' | # get chunks (lines that start with "+++", "@@", "+ ", "- ")
perl -pe 's/\n/%0A/' | # url encode line breaks (\n -> %0A)
perl -pe 's/%0A(\+\+\+ b\/)/\n\1/g' | # split chunks(one chunk per line)
perl -pe "s/\+\+\+ b\/([^@]*)%0A@@ -(\d+)[^\s]* \+(\d+)[^@]*@@(.*)/::$ANNOTATION_SEVERITY file=\1,line=\2,endLine=\3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A\4/"
# Example for the previous substitution
# input: +++ b/icons/accessibility.json%0A@@ -2,0 +3 @@%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
# output: ::$ANNOTATION_SEVERITY file=icons/accessibility.json,line=2,endLine=3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
lint-aliases:
name: Check Uniqueness of Aliases
runs-on: ubuntu-latest

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

@@ -3,7 +3,6 @@ name: Lucide font checks
on:
pull_request:
paths:
- icons/**
- tools/build-font/**
- pnpm-lock.yaml

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

@@ -0,0 +1,37 @@
name: Pull request tags suggestions
on:
pull_request_target:
paths:
- 'icons/*.json'
jobs:
pull-request-tags-suggestions:
name: Pull Request Tags Suggestions
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
# We checkout the main branch of main repository for security reasons.
# This is to prevent the workflow from running on a forked repository.
- uses: actions/checkout@v4
with:
repository: lucide-icons/lucide
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Generate comment markup
run: node ./scripts/suggestTags.mts
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
PULL_REQUEST_NUMBER: ${{ github.event.number }}
COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@
.obsidian
.now
.idea
.env
node_modules
dist
build

View File

@@ -16,8 +16,8 @@ Guidelines for pull requests:
- __Make your commit messages as descriptive as possible.__ Include as much information as you can. Explain anything that the file diffs themselves wont make apparent.
- __Document your pull request__. Explain your fix, link to the relevant issue, add screenshots when adding new icons.
- __Make sure the target of your pull request is the relevant branch__. Most of bugfix or new feature should go to the `main` branch.
- __Include only related work__. If your pull request has unrelated commit, it won't be accepted.
- __Make sure the target of your pull request is the relevant branch__. Most of bug fixes or new feature should go to the `main` branch.
- __Include only related work__. If your pull request has unrelated commits, it won't be accepted.
### Icon Pull Requests
@@ -29,7 +29,7 @@ Read it here: [ICON_GUIDELINES](https://lucide.dev/docs/icon-design-guide).
#### Lucide Studio
For formatting and adjusting SVG icons, @jguddas made a great tool called [Lucide Studio](https://studio.lucide.dev/). It is a web-based SVG editor that allows you to edit and adjust icons in the Lucide style. You can use it to create new icons or modify existing ones.
For formatting and adjusting SVG icons, [@jguddas](https://github.com/jguddas) made a great tool called [Lucide Studio](https://studio.lucide.dev/). It is a web-based SVG editor that allows you to edit and adjust icons in the Lucide style. You can use it to create new icons or modify existing ones.
#### Editor guides
@@ -47,10 +47,10 @@ You can also [download an Adobe Illustrator template](https://github.com/lucide-
#### 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.
If you want to submit multiple icons, please separate the icons and group them. That makes reviewing the icons easier and keeps the thread clean and scoped.
So don't submit multiple icons in one PR that have nothing to do with each other.
So for example don't create one PR with icons: `arrow-up`, `bicycle`, `arrow-down`.
Seperate them by two PRs; 'pr-01' `arrow`, `arrow-down` and 'pr-02' `bicycle`.
Separate them into two PRs; 'pr-01' `arrow`, `arrow-down` and 'pr-02' `bicycle`.
## Icon Requests
@@ -131,7 +131,7 @@ When adding new features to for example the icon component for a framework. It i
### Local Testing
To test changes in a local project, you can use `yarn link`, `npm link`, `bun link` or `pnpm link` to link the package. Before you do this make sure you builded the package first.
To test changes in a local project, you can use `yarn link`, `npm link`, `bun link` or `pnpm link` to link the package. Before you do this make sure you've built the package first.
```sh
# in packages/lucide-react
@@ -161,6 +161,30 @@ lucide
The lucide.dev website is using [vitepress](https://vitepress.dev/) to generate the static website. The markdown files are located in the docs directory.
#### Running the Docs Website Locally
To test the docs website locally, follow these steps:
1. **Navigate to the docs directory**
```sh
cd docs
```
2. **Start the Local Development Server**
```sh
pnpm run docs:dev
```
3. **Open the Website Locally**
Vitepress should open with the following format:
VitePress dev server is running at:
- **Local**: `http://localhost:3000/`
- **Network**: `http://192.168.x.x:3000/`
### Guides
Detailed documentation about: installation, guides, packages, design guides etc.
@@ -173,11 +197,9 @@ All the icons of lucide in SVG format. These will be used as source for all the
Includes all the (npm) packages of lucide.
> Note: One package is not managed by pnpm: **lucide-flutter**, this package is written in Dart and uses pub for publishing.
### Scripts
Includes usefully scripts to automate certain jobs. Big part of the scripts is the template generation, for example it generates icon components for all the packages. These scripts are usually executed from the "scripts" section in the package.json.
Includes useful scripts to automate certain jobs. Big part of the scripts is the template generation, for example it generates icon components for all the packages. These scripts are usually executed from the "scripts" section in the package.json.
## Documentation

View File

@@ -13,10 +13,10 @@ export default eventHandler((event) => {
const data = pathData.at(-1).slice(0, -4);
const [name] = pathData;
const src = Buffer.from(data, 'base64')
.toString('utf8')
.replaceAll('\n', '')
.replace(/<svg[^>]*>|<\/svg>/g, '');
const src = Buffer.from(data, 'base64').toString('utf8').replaceAll('\n', '');
const width = parseInt((src.includes('svg') ? src.match(/width="(\d+)"/)?.[1] : null) ?? '24');
const height = parseInt((src.includes('svg') ? src.match(/height="(\d+)"/)?.[1] : null) ?? '24');
const children = [];
@@ -38,7 +38,7 @@ export default eventHandler((event) => {
children.push(
createElement(Backdrop, {
backdropString,
src,
src: src.replace(/<svg[^>]*>|<\/svg>/g, ''),
color: '#777',
}),
);
@@ -46,7 +46,18 @@ export default eventHandler((event) => {
const svg = Buffer.from(
// We can't use jsx here, is not supported here by nitro.
renderToString(createElement(SvgPreview, { src, showGrid: true }, children)),
renderToString(
createElement(
SvgPreview,
{
src: src.replace(/<svg[^>]*>|<\/svg>/g, ''),
height,
width,
showGrid: true,
},
children,
),
),
).toString('utf8');
defaultContentType(event, 'image/svg+xml');

View File

@@ -36,6 +36,13 @@ export default defineConfig({
},
},
head: [
[
'link',
{
rel: 'preconnect',
href: 'https://analytics.lucide.dev',
},
],
[
'script',
{
@@ -153,7 +160,6 @@ export default defineConfig({
{ text: 'Icons', link: '/icons/' },
{ text: 'Guide', link: '/guide/' },
{ text: 'Packages', link: '/packages' },
{ text: 'Studio', link: 'https://studio.lucide.dev' },
{ text: 'Showcase', link: '/showcase' },
{ text: 'License', link: '/license' },
],

View File

@@ -79,7 +79,7 @@
},
{
"name": "lucide-lustre",
"description": "A library providing https://lucide.dev icons to lustre",
"description": "A library providing https://lucide.dev icons to lustre.",
"icon": "/framework-logos/lustre.webp",
"shields": [
{

View File

@@ -0,0 +1,137 @@
import React from 'react';
import pathToPoints from './path-to-points';
import { Path, PathProps } from './types';
export const GapViolationHighlight = ({
radius,
stroke,
strokeWidth,
strokeOpacity,
paths,
...props
}: {
paths: Path[];
} & PathProps<'stroke' | 'strokeOpacity' | 'strokeWidth', 'd'>) => {
const id = React.useId();
const groupedPaths = Object.entries(
paths.reduce(
(groups, val) => {
const key = val.c.id;
groups[key] = [...(groups[key] || []), val];
return groups;
},
{} as Record<number, Path[]>,
),
);
const groups: Group[] = [];
for (const [, paths] of groupedPaths) {
const d = paths.map((path) => path.d).join(' ');
const points = paths.flatMap((path) => pathToPoints(path));
groups.push({ id: d, points });
}
const mergedGroups = mergeGroups(groups, 2);
return (
<g {...props}>
<defs xmlns="http://www.w3.org/2000/svg">
<pattern
id={`backdrop-pattern-${id}`}
width=".1"
height=".1"
patternUnits="userSpaceOnUse"
patternTransform="rotate(45 50 50)"
>
<line
stroke={stroke}
strokeWidth={0.1}
y2={1}
/>
<line
stroke={stroke}
strokeWidth={0.1}
y2={1}
/>
</pattern>
</defs>
{mergedGroups.flatMap((ds, idx, arr) =>
arr.slice(0, idx).map((val, i) => (
<g
strokeWidth={strokeWidth}
key={i}
>
<mask
id={`svg-preview-backdrop-mask-${id}-${i}`}
maskUnits="userSpaceOnUse"
>
<path
stroke="white"
d={val.join(' ')}
/>
</mask>
<path
d={ds.join(' ')}
stroke={`url(#backdrop-pattern-${id})`}
strokeWidth={strokeWidth}
strokeOpacity={strokeOpacity}
mask={`url(#svg-preview-backdrop-mask-${id}-${i})`}
/>
</g>
)),
)}
</g>
);
};
type Point = { x: number; y: number };
type Group = { id: string; points: Point[] };
// Euclidean distance
function distance(a: Point, b: Point): number {
return Math.hypot(a.x - b.x, a.y - b.y);
}
// Check if two groups should be merged based on minimum distance
function shouldMerge(a: Group, b: Group, minDistance: number): boolean {
for (const pa of a.points) {
for (const pb of b.points) {
if (distance(pa, pb) <= minDistance) {
return true;
}
}
}
return false;
}
// Merge groups and return arrays of merged group IDs
function mergeGroups(groups: Group[], minDistance: number): string[][] {
const mergedGroups: Group[][] = groups.map((g) => [g]);
let changed = true;
while (changed) {
changed = false;
outer: for (let i = 0; i < mergedGroups.length; i++) {
for (let j = i + 1; j < mergedGroups.length; j++) {
// Check if any group in mergedGroups[i] should merge with any in mergedGroups[j]
if (
mergedGroups[i].some((ga) =>
mergedGroups[j].some((gb) => shouldMerge(ga, gb, minDistance)),
)
) {
// Merge group j into group i
mergedGroups[i] = [...mergedGroups[i], ...mergedGroups[j]];
mergedGroups.splice(j, 1);
changed = true;
break outer;
}
}
}
}
// Return only arrays of IDs
return mergedGroups.map((groupList) => groupList.map((g) => g.id));
}

View File

@@ -1,6 +1,7 @@
import React from 'react';
import { PathProps, Path } from './types';
import { getPaths, assert } from './utils';
import getPaths, { assert } from './utils';
import { GapViolationHighlight } from './GapViolationHighlight.tsx';
export const darkModeCss = `
@media screen and (prefers-color-scheme: light) {
@@ -20,10 +21,16 @@ export const darkModeCss = `
export const Grid = ({
radius,
fill = '#fff',
fill,
height,
width,
subGridSize = 0,
...props
}: {
height: number;
width: number;
strokeWidth: number;
subGridSize?: number;
radius: number;
} & PathProps<'stroke', 'strokeWidth'>) => (
<g
@@ -33,43 +40,53 @@ export const Grid = ({
>
<rect
className="svg-preview-grid-rect"
width={24 - props.strokeWidth}
height={24 - props.strokeWidth}
width={width - props.strokeWidth}
height={height - props.strokeWidth}
x={props.strokeWidth / 2}
y={props.strokeWidth / 2}
rx={radius}
fill={fill}
/>
<path
strokeDasharray={'0 0.1 ' + '0.1 0.15 '.repeat(11) + '0 0.15'}
strokeDasharray={
'0 0.1 ' + '0.1 0.15 '.repeat(subGridSize ? subGridSize * 4 - 1 : 95) + '0 0.15'
}
strokeWidth={0.1}
d={
props.d ||
new Array(Math.floor(24 - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => i % 3 !== 2)
.flatMap((i) => [
`M${props.strokeWidth} ${i + 1}h${24 - props.strokeWidth * 2}`,
`M${i + 1} ${props.strokeWidth}v${24 - props.strokeWidth * 2}`,
])
.join('')
}
/>
<path
d={
props.d ||
new Array(Math.floor(24 - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => i % 3 === 2)
.flatMap((i) => [
`M${props.strokeWidth} ${i + 1}h${24 - props.strokeWidth * 2}`,
`M${i + 1} ${props.strokeWidth}v${24 - props.strokeWidth * 2}`,
])
.join('')
[
...new Array(Math.floor(width - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => !subGridSize || i % subGridSize !== subGridSize - 1)
.flatMap((i) => [`M${i + 1} ${props.strokeWidth}v${height - props.strokeWidth * 2}`]),
...new Array(Math.floor(height - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => !subGridSize || i % subGridSize !== subGridSize - 1)
.flatMap((i) => [`M${props.strokeWidth} ${i + 1}h${width - props.strokeWidth * 2}`]),
].join('')
}
/>
{!!subGridSize && (
<path
d={
props.d ||
[
...new Array(Math.floor(width - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => i % subGridSize === subGridSize - 1)
.flatMap((i) => [`M${i + 1} ${props.strokeWidth}v${height - props.strokeWidth * 2}`]),
...new Array(Math.floor(height - 1))
.fill(null)
.map((_, i) => i)
.filter((i) => i % subGridSize === subGridSize - 1)
.flatMap((i) => [`M${props.strokeWidth} ${i + 1}h${width - props.strokeWidth * 2}`]),
].join('')
}
/>
)}
</g>
);
@@ -99,6 +116,7 @@ const Shadow = ({
>
{groupedPaths.map(([id, paths]) => (
<mask
key={`svg-preview-shadow-mask-${id}`}
id={`svg-preview-shadow-mask-${id}`}
maskUnits="userSpaceOnUse"
strokeOpacity="1"
@@ -108,8 +126,8 @@ const Shadow = ({
<rect
x={0}
y={0}
width={24}
height={24}
width="100%"
height="100%"
fill="#fff"
stroke="none"
rx={radius}
@@ -152,30 +170,34 @@ const ColoredPath = ({
colors,
paths,
...props
}: { paths: Path[]; colors: string[] } & PathProps<never, 'd' | 'stroke'>) => (
<g
className="svg-preview-colored-path-group"
{...props}
>
{paths.map(({ d, c }, i) => (
<path
key={i}
d={d}
stroke={colors[(c.name === 'path' ? i : c.id) % colors.length]}
/>
))}
</g>
);
}: { paths: Path[]; colors: string[] } & PathProps<never, 'd' | 'stroke'>) => {
let idx = 0;
return (
<g
className="svg-preview-colored-path-group"
{...props}
>
{paths.map(({ d, c }, i) => (
<path
key={i}
d={d}
stroke={colors[(c.name === 'path' ? idx++ : c.id) % colors.length]}
/>
))}
</g>
);
};
const ControlPath = ({
paths,
radius,
pointSize,
...props
}: { pointSize: number; paths: Path[]; radius: number } & PathProps<
'stroke' | 'strokeWidth',
'd'
>) => {
}: {
pointSize: number;
paths: Path[];
radius: number;
} & PathProps<'stroke' | 'strokeWidth', 'd'>) => {
const controlPaths = paths.map((path, i) => {
const element = paths.filter((p) => p.c.id === path.c.id);
const lastElement = element.at(-1)?.next;
@@ -207,8 +229,8 @@ const ControlPath = ({
<rect
x="0"
y="0"
width="24"
height="24"
width="100%"
height="100%"
fill="#fff"
stroke="none"
rx={radius}
@@ -243,7 +265,7 @@ const ControlPath = ({
)
.join('')}
/>
{controlPaths.map(({ d, prev, next, startMarker, endMarker }, i) => (
{controlPaths.map(({ prev, next, startMarker, endMarker }, i) => (
<React.Fragment key={i}>
{startMarker && (
<circle
@@ -279,11 +301,37 @@ const Radii = ({
{...props}
>
{paths.map(
({ c, prev, next, circle }, i) =>
({ circle, next, prev, c }, i) =>
circle && (
<React.Fragment key={i}>
{c.name !== 'circle' && (
<path d={`M${prev.x} ${prev.y} ${circle.x} ${circle.y} ${next.x} ${next.y}`} />
{circle.tangentIntersection && c.name === 'path' && (
<>
<circle
cx={next.x * 2 - circle.tangentIntersection.x}
cy={next.y * 2 - circle.tangentIntersection.y}
r={0.25}
/>
<circle
cx={prev.x * 2 - circle.tangentIntersection.x}
cy={prev.y * 2 - circle.tangentIntersection.y}
r={0.25}
/>
<path
d={`M${next.x * 2 - circle.tangentIntersection.x} ${
next.y * 2 - circle.tangentIntersection.y
}L${circle.tangentIntersection.x} ${circle.tangentIntersection.y}L${prev.x * 2 - circle.tangentIntersection.x} ${
prev.y * 2 - circle.tangentIntersection.y
}`}
/>
<circle
cx={circle.tangentIntersection.x}
cy={circle.tangentIntersection.y}
r={0.25}
/>
</>
)}
{c.name === 'path' && (
<path d={`M${next.x} ${next.y}L${circle.x} ${circle.y}L${prev.x} ${prev.y}`} />
)}
<circle
cy={circle.y}
@@ -313,55 +361,60 @@ const Radii = ({
const Handles = ({
paths,
...props
}: { paths: Path[] } & PathProps<
'strokeWidth' | 'stroke' | 'strokeDasharray' | 'strokeOpacity',
any
>) => {
return (
<g
className="svg-preview-handles-group"
{...props}
>
{paths.map(({ c, prev, next, cp1, cp2 }) => (
<>
{cp1 && <path d={`M${prev.x} ${prev.y} ${cp1.x} ${cp1.y}`} />}
{cp1 && (
<circle
cy={cp1.y}
cx={cp1.x}
r={0.25}
/>
)}
{cp2 && <path d={`M${next.x} ${next.y} ${cp2.x} ${cp2.y}`} />}
{cp2 && (
<circle
cy={cp2.y}
cx={cp2.x}
r={0.25}
/>
)}
</>
))}
</g>
);
};
}: { paths: Path[] } & PathProps<'strokeWidth' | 'stroke' | 'strokeOpacity', any>) => (
<g
className="svg-preview-handles-group"
{...props}
>
{paths.map(({ c, prev, next, cp1, cp2 }, i) => (
<React.Fragment key={i}>
{cp1 && <path d={`M${prev.x} ${prev.y} ${cp1.x} ${cp1.y}`} />}
{cp1 && (
<circle
cy={cp1.y}
cx={cp1.x}
r={0.25}
/>
)}
{cp2 && <path d={`M${next.x} ${next.y} ${cp2.x} ${cp2.y}`} />}
{cp2 && (
<circle
cy={cp2.y}
cx={cp2.x}
r={0.25}
/>
)}
</React.Fragment>
))}
</g>
);
const SvgPreview = React.forwardRef<
SVGSVGElement,
{
height?: number;
width?: number;
src: string | ReturnType<typeof getPaths>;
showGrid?: boolean;
} & React.SVGProps<SVGSVGElement>
>(({ src, children, showGrid = false, ...props }, ref) => {
>(({ src, children, height = 24, width = 24, showGrid = false, ...props }, ref) => {
const subGridSize =
Math.max(height, width) % 3 === 0
? Math.max(height, width) > 24
? 12
: 3
: Math.max(height, width) % 5 === 0
? 5
: 0;
const paths = typeof src === 'string' ? getPaths(src) : src;
return (
<svg
ref={ref}
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
width={width}
height={height}
viewBox={`0 0 ${width} ${height}`}
fill="none"
stroke="currentColor"
strokeWidth={2}
@@ -372,8 +425,12 @@ const SvgPreview = React.forwardRef<
<style>{darkModeCss}</style>
{showGrid && (
<Grid
height={height}
width={width}
subGridSize={subGridSize}
strokeWidth={0.1}
stroke="#777"
mask="url(#svg-preview-bounding-box-mask)"
strokeOpacity={0.3}
radius={1}
/>
@@ -385,6 +442,12 @@ const SvgPreview = React.forwardRef<
radius={1}
strokeOpacity={0.15}
/>
<GapViolationHighlight
paths={paths}
stroke="red"
strokeOpacity={0.75}
strokeWidth={4}
/>
<Handles
paths={paths}
strokeWidth={0.12}
@@ -433,4 +496,6 @@ const SvgPreview = React.forwardRef<
);
});
SvgPreview.displayName = 'SvgPreview';
export default SvgPreview;

View File

@@ -0,0 +1,19 @@
import memoize from 'lodash/memoize';
import SVGPathCommander from 'svg-path-commander';
import { Path } from './types';
function pathToPoints({ d, prev, next }: Path, interval = 1) {
const commander = new SVGPathCommander(d);
const points = [];
try {
const totalLength = commander.getTotalLength();
points.push(prev);
for (let i = interval; i < totalLength - interval; i += interval) {
points.push(commander.getPointAtLength(i));
}
points.push(next);
} catch (err) {}
return points;
}
export default memoize(pathToPoints);

View File

@@ -1,7 +1,10 @@
import { INode, parseSync } from 'svgson';
// @ts-ignore
import toPath from 'element-to-path';
// @ts-ignore
import { SVGPathData, encodeSVGPath } from 'svg-pathdata';
import { Path, Point } from './types';
import memoize from 'lodash/memoize';
function assertNever(x: never): never {
throw new Error('Unknown type: ' + x['type']);
@@ -44,17 +47,21 @@ const extractNodes = (node: INode): INode[] => {
return [];
};
export const getNodes = (src: string) =>
extractNodes(parseSync(src.includes('<svg') ? src : `<svg>${src}</svg>`));
export const getNodes = memoize((src: string) =>
extractNodes(parseSync(src.includes('<svg') ? src : `<svg>${src}</svg>`)),
);
export const getCommands = (src: string) =>
getNodes(src)
.map(convertToPathNode)
.flatMap(({ d, name }, idx) =>
new SVGPathData(d).toAbs().commands.map((c, cIdx) => ({ ...c, id: idx, idx: cIdx, name })),
new SVGPathData(d)
.toAbs()
// @ts-ignore
.commands.map((c, cIdx) => ({ ...c, id: idx, idx: cIdx, name })),
);
export const getPaths = (src: string) => {
const getPaths = (src: string) => {
const commands = getCommands(src.includes('<svg') ? src : `<svg>${src}</svg>`);
const paths: Path[] = [];
let prev: Point | undefined = undefined;
@@ -237,6 +244,7 @@ export const getPaths = (src: string) => {
break;
}
default: {
// @ts-ignore
assertNever(c);
}
}
@@ -244,7 +252,7 @@ export const getPaths = (src: string) => {
return paths;
};
export const arcEllipseCenter = (
const arcEllipseCenter = (
x1: number,
y1: number,
rx: number,
@@ -296,5 +304,52 @@ export const arcEllipseCenter = (
M2[1][0] * Cp[0] + M2[1][1] * Cp[1] + V3[1],
];
return { x: C[0], y: C[1] };
return {
x: C[0],
y: C[1],
tangentIntersection: intersectTangents(
{ x: x1, y: y1 },
{ x: x2, y: y2 },
{ x: C[0], y: C[1] },
),
};
};
function getTangentDirection(p: Point, center: Point): Point {
// Tangent is perpendicular to the radius vector (rotate radius 90°)
const dx = p.x - center.x;
const dy = p.y - center.y;
return { x: -dy, y: dx }; // 90° rotation
}
function intersectTangents(start: Point, end: Point, center: Point): Point | null {
const t1 = getTangentDirection(start, center);
const t2 = getTangentDirection(end, center);
// Solve: start + λ * t1 = end + μ * t2
const A = [
[t1.x, -t2.x],
[t1.y, -t2.y],
];
const b = [end.x - start.x, end.y - start.y];
// Compute determinant
const det = A[0][0] * A[1][1] - A[0][1] * A[1][0];
if (Math.abs(det) < 1e-10) {
// Lines are parallel, no intersection
return null;
}
const invDet = 1 / det;
const lambda = (b[0] * A[1][1] - b[1] * A[0][1]) * invDet;
// Intersection point = start + lambda * t1
return {
x: start.x + lambda * t1.x,
y: start.y + lambda * t1.y,
};
}
export default memoize(getPaths);

View File

@@ -1,5 +1,4 @@
import { bundledLanguages, type ThemeRegistration } from 'shikiji';
import { getHighlighter } from 'shikiji';
import { bundledLanguages, getHighlighter, type ThemeRegistration } from 'shikiji';
type CodeExampleType = {
title: string;
@@ -102,13 +101,8 @@ import { LucideAngularModule, $PascalCase } from 'lucide-angular';
},
{
language: 'html',
title: 'Icon Font',
code: `<style>
@import ('~lucide-static/font/Lucide.css');
</style>
<div class="icon-$Name"></div>
`,
title: 'Icon font',
code: `<div class="icon-$Name"></div>`,
},
];
};

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

@@ -25,6 +25,7 @@
--vp-code-editor-string: #032f62;
--vp-c-text-4: rgba(60, 60, 67, 0.32);
--vp-home-hero-name-color: var(--vp-c-text);
}
.dark {
@@ -60,36 +61,15 @@
.VPHomeHero .image-container {
transform: none;
width: 100%;
/* padding: 0 24px; */
}
/* .VPHomeHero .container {
flex-direction: column-reverse;
} */
.VPHomeHero .container .main {
/* flex:1; */
flex-shirk: 0;
}
.VPHomeHero .container .main h1.name {
color: var(--vp-c-text);
}
.VPHomeHero .container .main h1.name .clip {
color: inherit;
-webkit-text-fill-color: unset;
color: var(--vp-c-text);
font-size: 36px;
}
.VPHomeHero .container .main h1::first-line {
.VPHomeHero .name::first-line {
color: var(--vp-c-brand);
}
/* */
.VPHomeHero .container .image {
margin: 0;
order: 2;
/* flex: 1; */
margin-top: 32px;
}
@@ -98,10 +78,6 @@
justify-content: flex-end;
}
.VPHomeHero .container .image-bg {
display: none;
}
.VPFeature .icon {
background-color: var(--vp-c-bg);
}
@@ -115,12 +91,6 @@
padding-left: 0;
}
@media (min-width: 640px) {
.VPHomeHero .container .main h1.name .clip {
font-size: unset;
}
}
@media (min-width: 960px) {
.VPHomeHero .container .image {
order: 1;
@@ -140,18 +110,11 @@
.VPHomeHero .container .image-container {
display: block;
}
.VPHomeHero .container .main h1.name {
}
}
.VPNavBarHamburger .container > span {
border-radius: 2px;
}
/*
html:has(* .outline-link:target) {
scroll-behavior: smooth;
} */
.sp-wrapper + * {
margin-top: 24px;
@@ -183,7 +146,6 @@ html:has(* .outline-link:target) {
font-size: 14px;
font-weight: 500;
position: relative;
/* box-sizing: content-box; */
}
.sp-wrapper .sp-tabs .sp-tab-button:after {

View File

@@ -139,22 +139,22 @@ contained icon.
```tsx
// Don't do this
<button class="btn-icon">
<Home/>
<House/>
</button>
// Don't do this either
<button class="btn-icon">
<Home aria-label="Home icon"/>
<House aria-label="Home icon"/>
</button>
// This works but might not be the best solution, see below
<button aria-label="Go to home" class="btn-icon">
<Home/>
<House/>
</button>
// Do this instead
<button class="btn-icon">
<Home/>
<House/>
<span class="visually-hidden">Go to home</span>
</button>
```
@@ -167,6 +167,7 @@ Although you could provide accessible labels to your elements via the `aria-labe
generally recommend avoiding this and instead suggest that you use your chosen CSS framework's "
visually hidden" utility whenever possible. You can
[read more about why `aria-label` might not be the best solution](https://gomakethings.com/revisting-aria-label-versus-a-visually-hidden-class/).
### Example - Radix UI
Use [Radix UI's built-in accessible icon utility component](https://www.radix-ui.com/primitives/docs/utilities/accessible-icon).
@@ -179,6 +180,7 @@ import { AccessibleIcon } from '@radix-ui/react-accessible-icon';
<ArrowRightIcon />
</AccessibleIcon>
```
### Example - Bootstrap
```html

View File

@@ -7,9 +7,9 @@ Beside aliases names lucide also includes prefixed and suffixed names to use wit
```tsx
// These are all the same icon
import {
Home,
HomeIcon,
LucideHome,
House,
HouseIcon,
LucideHouse,
} from "lucide-react";
```

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`.
@@ -142,7 +146,7 @@ For each icon these attributes are applied, corresponding to the above rules.
### Minify paths
The code of paths can sometimes get quite large. To reduce file size we like to minify the code.
We recommend to use [SVGOMG](https://jakearchibald.github.io/svgomg/) to minify paths to 2 points of precision.
We recommend to use [Lucide Studio](https://studio.lucide.dev/) to tidy paths to 3 points of precision.
### Allowed elements

View File

@@ -31,11 +31,11 @@ bun add lucide-angular
In any Angular module you wish to use Lucide icons in, you have to import `LucideAngularModule`, and pick any icons you wish to use:
```js
import { LucideAngularModule, File, Home, Menu, UserCheck } from 'lucide-angular';
import { LucideAngularModule, File, House, Menu, UserCheck } from 'lucide-angular';
@NgModule({
imports: [
LucideAngularModule.pick({File, Home, Menu, UserCheck})
LucideAngularModule.pick({File, House, Menu, UserCheck})
]
})
export class AppModule { }
@@ -64,7 +64,7 @@ Within your templates you may now use one of the following component tags to ins
```html
<lucide-angular name="file" class="my-icon"></lucide-angular>
<lucide-icon name="home" class="my-icon"></lucide-icon>
<lucide-icon name="house" class="my-icon"></lucide-icon>
<i-lucide name="menu" class="my-icon"></i-lucide>
<span-lucide name="user-check" class="my-icon"></span-lucide>
```
@@ -88,7 +88,7 @@ You can pass additional props to adjust the icon appearance.
| `absoluteStrokeWidth` | *boolean* | false |
```html
<i-lucide name="home" [size]="48" color="red" [strokeWidth]="1"></i-lucide>
<i-lucide name="house" [size]="48" color="red" [strokeWidth]="1"></i-lucide>
```
### Global configuration
@@ -151,11 +151,11 @@ They can be used in the same way as the official icons.
```js
import { LucideAngularModule } from 'lucide-angular';
import { burger } from '@lucide/lab';
import { coconut } from '@lucide/lab';
@NgModule({
imports: [
LucideAngularModule.pick({ burger })
LucideAngularModule.pick({ coconut })
]
})
export class AppModule { }

View File

@@ -93,7 +93,7 @@ The package includes type definitions for all icons. This is useful if you want
```astro
---
import { Home, Library, Cog, type Icon as IconType } from '@lucide/astro';
import { House, Library, Cog, type Icon as IconType } from '@lucide/astro';
type MenuItem = {
name: string;
@@ -105,7 +105,7 @@ const menuItems: MenuItem[] = [
{
name: 'Home',
href: '/',
icon: Home,
icon: House,
},
{
name: 'Blog',

View File

@@ -84,10 +84,10 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```jsx
import { Icon } from 'lucide-preact';
import { burger } from '@lucide/lab';
import { coconut } from '@lucide/lab';
const App = () => (
<Icon iconNode={burger} />
<Icon iconNode={coconut} />
);
```
@@ -119,7 +119,7 @@ export default Icon;
import Icon from './Icon';
const App = () => {
return <Icon name="home" />;
return <Icon name="house" />;
};
export default App;

View File

@@ -78,10 +78,10 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```jsx
import { Icon } from 'lucide-react-native';
import { burger } from '@lucide/lab';
import { coconut } from '@lucide/lab';
const App = () => (
<Icon iconNode={burger} />
<Icon iconNode={coconut} />
);
```
@@ -113,7 +113,7 @@ export default Icon;
import Icon from './Icon';
const App = () => {
return <Icon name="home" />;
return <Icon name="house" />;
};
export default App;

View File

@@ -78,17 +78,16 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```jsx
import { Icon } from 'lucide-react';
import { burger } from '@lucide/lab';
import { coconut } from '@lucide/lab';
const App = () => (
<Icon iconNode={burger} />
<Icon iconNode={coconut} />
);
```
## Dynamic Icon Component
It is possible to create one generic icon component to load icons, but it is not recommended.
Since it is importing all icons during build. This increases build time and the different modules it will create.
It is possible to create one generic icon component to load icons. But it is not recommended, since it is importing all icons during the build. This increases build time and the different modules it will create.
`DynamicIcon` is useful for applications that want to show icons dynamically by icon name. For example, when using a content management system with where icon names are stored in a database.

View File

@@ -91,7 +91,7 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```jsx
import { Icon } from 'lucide-solid';
import { burger, sausage } from '@lucide/lab';
import { sausage } from '@lucide/lab';
const App = () => (
<Icon iconNode={sausage} color="red"/>

View File

@@ -1,24 +1,38 @@
# Lucide Static
This package include the following lucide implementations:
This package includes the following implementations of Lucide icons:
- All SVG files
- Individual SVG files
- SVG sprite
- Icon fonts
- JavaScript library containing strings of SVGs.
- Icon font files
- A JavaScript library exporting SVG strings
## Why lucide-static?
## Who is this for?
This package is suitable for specific use cases, for example if you want to use icon fonts, SVG sprites, normal SVGs or Common.js SVG strings in your javascript project.
`lucide-static` is suitable for _very specific use cases_ where you want to use Lucide icons without relying on a JavaScript framework or component system. It's ideal for:
::: warning
While they can be useful for prototyping, it is not recommended to use the SVG sprites or icon fonts provided by this package in production web apps as all the available icons are included in the app, hence increasing loading time and data usage. We recommend to use a bundler and tree-shaking to make sure only the icons you use are bundled with your app. Tree-shaking is only available in these packages: [lucide](lucide), [lucide-react](lucide-react), [lucide-vue](lucide-vue), [lucide-vue-next](lucide-vue-next), [lucide-angular](lucide-angular), [lucide-preact](lucide-preact)
- Projects that use icon fonts with plain CSS or utility-first frameworks
- Embedding raw SVG files or sprites directly in HTML
- Using SVGs as CSS background images
- Importing SVG strings into Node.js (CommonJS) environments
::: danger
### Not recommended for production {#production-warning}
SVG sprites and icon fonts include **all icons**, which can significantly increase your app's bundle size and load time.
For production environments, we recommend using a bundler with tree-shaking support to include only the icons you actually use. Consider using:
- [lucide](lucide)
- [lucide-react](lucide-react)
- [lucide-vue](lucide-vue)
- [lucide-vue-next](lucide-vue-next)
- [lucide-angular](lucide-angular)
- [lucide-preact](lucide-preact)
:::
## Installation
## Package Managers
::: code-group
```sh [pnpm]
@@ -39,64 +53,77 @@ bun add lucide-static
:::
### CDN
## SVG Files
```html
<!-- SVG file for a single icon -->
<img src="https://unpkg.com/lucide-static@latest/icons/house.svg" />
You can use standalone SVG files or SVG sprites in several ways.
<!-- Icon font -->
<style>
@font-face {
font-family: 'LucideIcons';
src: url(https://unpkg.com/lucide-static@latest/font/Lucide.ttf) format('truetype');
}
</style>
```
Check out our [codesandbox example](https://codesandbox.io/s/using-the-svg-sprite-lz1kk).
## Usage
### SVG file as image
Check out the [codesandbox examples](https://codesandbox.io/s/using-the-svg-sprite-lz1kk).
#### In HTML:
### SVG Files
::: code-group
#### SVG file as image
To use it in for example html:
```html
```html [Webpack]
<!-- SVG file for a single icon -->
<img src="~lucide-static/icons/house.svg" />
```
```css
```html [CDN]
<!-- SVG file for a single icon -->
<img src="https://unpkg.com/lucide-static@latest/icons/house.svg" />
```
:::
#### In CSS:
::: code-group
```css [Webpack]
.house-icon {
background-image: url(~lucide-static/icons/house.svg);
}
```
Make sure you have the correct webpack loaders to make this work. [url-loader](https://v4.webpack.js.org/loaders/url-loader/)
```css [CDN]
.house-icon {
background-image: url(https://unpkg.com/lucide-static@latest/icons/house.svg);
}
```
#### SVG file as string
:::
You can simply import each SVG by targeting `lucide-static/icons/{icon-name}.svg`.
To use SVGs in your project you can for example use a [SVG loader](https://v4.webpack.js.org/loaders/svg-inline-loader/).
Make sure you have the correct Webpack loader configured, such as [`url-loader`](https://v4.webpack.js.org/loaders/url-loader/).
### SVG file as string
To import an SVG as a string (e.g., for templating):
```js
import arrowRightIcon from 'lucide-static/icons/arrow-right';
// return string of an SVG
```
### SVG Sprite
You'll need an SVG loader like [`svg-inline-loader`](https://v4.webpack.js.org/loaders/svg-inline-loader/).
You may need additional loader for this.
### Using the SVG sprite
:::danger
[Not intended for production use.](#production-warning)
:::
You may also need an additional SVG loader to handle this.
#### Basic sprite usage (not production-optimized):
```html
<!-- Icon Sprite, not recommended for production! -->
<img src="lucide-static/sprite.svg#house" />
```
<!-- or -->
#### Inline usage:
```html
<svg
width="24"
height="24"
@@ -109,12 +136,13 @@ You may need additional loader for this.
<use href="#alert-triangle" />
</svg>
<svg>
...sprite svg
</svg>
<!-- sprite SVG -->
<svg>...</svg>
```
If you'd prefer, you can use CSS to hold your base SVG properties
#### Inline with CSS helper class
If you'd prefer, you can use CSS to hold your base SVG properties:
```css
.lucide-icon {
@@ -128,47 +156,71 @@ If you'd prefer, you can use CSS to hold your base SVG properties
}
```
and update the SVG as follows
...and update the SVG as follows:
```xml
<svg
xmlns="http://www.w3.org/2000/svg"
class="lucide-icon"
>
<use
href="#alert-triangle"
/>
</svg>
<svg>
...sprite svg
<use href="#triangle-alert" />
</svg>
<!-- sprite SVG -->
<svg>...</svg>
```
### Icon Font
## Icon font
```css
:::danger
[Not intended for production use.](#production-warning)
:::
Lucide icons are also available as a web font. To use them, you first need to include the corresponding stylesheet:
::: code-group
```css [Vite]
@import 'lucide-static/font/lucide.css';
```
```css [Webpack]
@import ('~lucide-static/font/lucide.css');
```
```html [CDN]
<link rel="stylesheet" href="https://unpkg.com/lucide-static@latest/font/lucide.css" />
```
```html [Static asset]
<link rel="stylesheet" href="/your/path/to/lucide.css" />
```
:::
Once included, use the format `icon-{kebab-case-name}`. You can copy icon names from the [Lucide Icons page](https://lucide.dev/icons).
```html
<div class="icon-house"></div>
```
### Node.js
If you're not using a package manager, you can download the font files directly from the [latest release](https://github.com/lucide-icons/lucide/releases/latest).
To use lucide icons in your Nodejs project you can import each icon as:
## Node.js
You can also import Lucide icons in Node.js (CommonJS) projects:
```js
const { messageSquare } = require('lucide-static/lib');
const {messageSquare} = require('lucide-static/lib');
```
> Note: Each icon name is in camelCase.
#### Example in node.js project
#### Express app example in Node.js
```js
const express = require('express');
const { messageSquare } = require('lucide-static/lib');
const {messageSquare} = require('lucide-static/lib');
const app = express();
const port = 3000;
@@ -181,7 +233,7 @@ app.get('/', (req, res) => {
</head>
<body>
<h1>Lucide Icons</h1>
<p>This is a lucide icon ${messageSquare}</p>
<p>This is a Lucide icon ${messageSquare}</p>
</body>
</html>

View File

@@ -162,11 +162,13 @@ The package includes type definitions for all icons. This is useful if you want
</script>
{#each menuItems as item}
{@const Icon = item.icon}
<a href={item.href}>
<svelte:component this={item.icon} />
<Icon />
<span>{item.name}</span>
</a>
{/each}
```
:::
@@ -246,8 +248,9 @@ The package includes type definitions for all icons. This is useful if you want
</script>
{#each menuItems as item}
{@const Icon = item.icon}
<a href={item.href}>
<svelte:component this={item.icon} />
<Icon />
<span>{item.name}</span>
</a>
{/each}
@@ -271,10 +274,10 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```svelte
<script>
import { Icon } from '@lucide/svelte';
import { burger, sausage } from '@lucide/lab';
import { pear, sausage } from '@lucide/lab';
</script>
<Icon iconNode={burger} />
<Icon iconNode={pear} />
<Icon iconNode={sausage} color="red"/>
```
@@ -293,7 +296,7 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
```svelte [Svelte 5]
<script>
import * as icons from '@lucide/svelte';
let { name } = $props();
let { name, ...props } = $props();
const Icon = icons[name];
</script>

View File

@@ -54,7 +54,7 @@ import { Camera } from 'lucide-vue-next';
| `size` | *number* | 24 |
| `color` | *string* | currentColor |
| `stroke-width` | *number* | 2 |
| `absolute-stroke-width` | *boolean* | false |
| `absoluteStrokeWidth` | *boolean* | false |
| `default-class` | *string* | lucide-icon |
### Applying props
@@ -81,11 +81,11 @@ This creates a single icon based on the iconNode passed and renders a Lucide ico
```vue
<script setup>
import { Icon } from 'lucide-vue-next';
import { burger } from '@lucide/lab';
import { baseball } from '@lucide/lab';
</script>
<template>
<Icon :iconNode="burger" />
<Icon :iconNode="baseball" />
</template>
```

View File

@@ -60,7 +60,7 @@ Additional props can be passed to adjust the icon:
| `size` | *number* | 24 |
| `color` | *string* | currentColor |
| `stroke-width` | *number* | 2 |
| `absolute-stroke-width` | *boolean* | false |
| `absoluteStrokeWidth` | *boolean* | false |
| `default-class` | *string* | lucide-icon |
### Applying props

View File

@@ -153,11 +153,11 @@ myApp.appendChild(menuIcon);
They can be used in the same way as the official icons.
```js
import { burger } from '@lucide/lab';
import { coconut } from '@lucide/lab';
createIcons({
icons: {
burger
coconut
}
});
```

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

@@ -2,6 +2,7 @@ import copy from 'rollup-plugin-copy';
import replace from '@rollup/plugin-replace';
export default defineNitroConfig({
compatibilityDate: '2025-07-30',
preset: 'vercel_edge',
srcDir: '.vitepress',
routeRules: {

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",
@@ -28,12 +28,12 @@
"@lucide/build-icons": "workspace:*",
"@lucide/helpers": "workspace:*",
"@lucide/shared": "workspace:*",
"@rollup/plugin-replace": "^6.0.1",
"@rollup/plugin-replace": "^6.0.2",
"@types/semver": "^7.5.3",
"h3": "^1.8.0",
"nitropack": "2.8.1",
"rollup-plugin-copy": "^3.4.0",
"vitepress": "^1.3.1"
"rollup-plugin-copy": "^3.5.0",
"vitepress": "^1.6.3",
"svg-path-commander": "^2.1.11"
},
"dependencies": {
"@floating-ui/vue": "^1.0.3",
@@ -57,6 +57,6 @@
"sitemap": "^7.1.1",
"svg-pathdata": "^6.0.3",
"svgson": "^5.2.1",
"vue": "^3.5.13"
"vue": "^3.5.18"
}
}

View File

@@ -21,10 +21,7 @@ const MAX_RELATED_ICONS = 4 * 17; // grid of 4x17 icons, = 68 icons
const arrayMatches = (a, b) => a.filter((item) => b.includes(item)).length;
const nameParts = (icon) =>
[
icon.name,
...(icon.aliases?.map((alias) => (typeof alias === 'string' ? alias : alias.name)) ?? []),
]
[icon.name, ...(icon.aliases?.map((alias) => alias.name) ?? [])]
.join('-')
.split('-')
.filter((word) => word.length > 2);

View File

@@ -159,16 +159,14 @@ try {
const aliases = iconMetaData.aliases ?? [];
if (aliases.length) {
aliases
.map((alias) => (typeof alias === 'string' ? alias : alias.name))
.forEach((alias) => {
if (!(alias in newReleaseMetaData)) {
return;
}
aliases.forEach((alias) => {
if (!(alias.name in newReleaseMetaData)) {
return;
}
contents.createdRelease =
newReleaseMetaData[alias].createdRelease ?? defaultReleaseMetaData.createdRelease;
});
contents.createdRelease =
newReleaseMetaData[alias.name].createdRelease ?? defaultReleaseMetaData.createdRelease;
});
}
const output = JSON.stringify(contents, null, 2);

View File

@@ -11,9 +11,7 @@ const iconMetaData = await getIconMetaData(path.resolve(scriptDir, '../../icons'
const iconAliasesRedirectRoutes = Object.entries(iconMetaData)
.filter(([, { aliases }]) => aliases?.length)
.map(([iconName, { aliases }]) => {
aliases = aliases.map((alias) => (typeof alias === 'object' ? alias.name : alias));
const aliasRouteMatches = aliases.join('|');
const aliasRouteMatches = aliases.map((alias) => alias.name).join('|');
return {
src: `/icons/${aliasRouteMatches}`,

View File

@@ -21,32 +21,29 @@
"aliases": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": ["name"],
"properties": {
"name": {
"type": "string"
},
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"deprecated": {
"const": true
},
"deprecationReason": {
"$ref": "#/$defs/aliasDeprecationReasons"
},
"toBeRemovedInVersion": {
"$ref": "#/$defs/versionNumber",
"description": "The version this icon will be removed in."
}
},
"dependentRequired": {
"deprecated": ["deprecationReason", "toBeRemovedInVersion"]
}
"deprecated": {
"const": true
},
"deprecationReason": {
"$ref": "#/$defs/aliasDeprecationReasons"
},
"toBeRemovedInVersion": {
"$ref": "#/$defs/versionNumber",
"description": "The version this icon will be removed in."
}
]
},
"dependentRequired": {
"deprecated": ["deprecationReason", "toBeRemovedInVersion"],
"deprecationReason": ["deprecated"],
"toBeRemovedInVersion": ["deprecated"]
}
},
"uniqueItems": true
},
@@ -130,7 +127,9 @@
}
},
"dependentRequired": {
"deprecated": ["deprecationReason", "toBeRemovedInVersion"]
"deprecated": ["deprecationReason", "toBeRemovedInVersion"],
"deprecationReason": ["deprecated"],
"toBeRemovedInVersion": ["deprecated"]
},
"$defs": {
"iconDeprecationReasons": {

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3.5 13h6" />
<path d="m2 16 4.5-9 4.5 9" />
<path d="M18 7v9" />
<path d="m14 12 4 4 4-4" />
</svg>
<path d="M18 16V7" />
<path d="m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16" />
<path d="M3.304 13h6.392" />
</svg>

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 349 B

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3.5 13h6" />
<path d="m2 16 4.5-9 4.5 9" />
<path d="M18 16V7" />
<path d="m14 11 4-4 4 4" />
</svg>
<path d="M18 16V7" />
<path d="m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16" />
<path d="M3.304 13h6.392" />
</svg>

Before

Width:  |  Height:  |  Size: 319 B

After

Width:  |  Height:  |  Size: 349 B

View File

@@ -4,7 +4,9 @@
"it-is-not",
"jguddas",
"danielbayley",
"ericfennis"
"ericfennis",
"vichotech",
"karsa-mistmere"
],
"tags": [
"letter",

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 14h-5" />
<path d="M16 16v-3.5a2.5 2.5 0 0 1 5 0V16" />
<path d="M4.5 13h6" />
<path d="m3 16 4.5-9 4.5 9" />
<path d="m15 16 2.536-7.328a1.02 1.02 1 0 1 1.928 0L22 16" />
<path d="M15.697 14h5.606" />
<path d="m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16" />
<path d="M3.304 13h6.392" />
</svg>

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 390 B

View File

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

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 17.5a2.5 2.5 0 1 1-4 2.03V12" />
<path d="M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2" />
<path d="M6 8h12" />
<path d="M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12" />
<path d="M6.6 15.6A2 2 0 1 0 10 17v-5" />
<path d="M6.6 15.572A2 2 0 1 0 10 17v-5" />
</svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 414 B

View File

@@ -19,6 +19,11 @@
"time"
],
"aliases": [
"alarm-check"
{
"name": "alarm-check",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -15,6 +15,11 @@
"time"
],
"aliases": [
"alarm-minus"
{
"name": "alarm-minus",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -15,6 +15,11 @@
"time"
],
"aliases": [
"alarm-plus"
{
"name": "alarm-plus",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

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

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 5H9" />
<path d="M15 9v3h4l-7 7-7-7h4V9z" />
<path d="M15 11a1 1 0 0 0 1 1h2.939a1 1 0 0 1 .75 1.811l-6.835 6.836a1.207 1.207 0 0 1-1.707 0L4.31 13.81a1 1 0 0 1 .75-1.811H8a1 1 0 0 0 1-1V9a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1z" />
<path d="M9 4h6" />
</svg>

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 411 B

View File

@@ -3,7 +3,9 @@
"contributors": [
"Andreto",
"mittalyashu",
"danielbayley"
"danielbayley",
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"backwards",

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 6v6h4l-7 7-7-7h4V6h6z" />
<path d="M15 11a1 1 0 0 0 1 1h2.939a1 1 0 0 1 .75 1.811l-6.835 6.836a1.207 1.207 0 0 1-1.707 0L4.31 13.81a1 1 0 0 1 .75-1.811H8a1 1 0 0 0 1-1V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1z" />
</svg>

Before

Width:  |  Height:  |  Size: 249 B

After

Width:  |  Height:  |  Size: 389 B

View File

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

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 15V9" />
<path d="M15 15h-3v4l-7-7 7-7v4h3v6z" />
<path d="M13 9a1 1 0 0 1-1-1V5.061a1 1 0 0 0-1.811-.75l-6.835 6.836a1.207 1.207 0 0 0 0 1.707l6.835 6.835a1 1 0 0 0 1.811-.75V16a1 1 0 0 1 1-1h2a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1z" />
<path d="M20 9v6" />
</svg>

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 414 B

View File

@@ -4,7 +4,9 @@
"Andreto",
"mittalyashu",
"ericfennis",
"danielbayley"
"danielbayley",
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"previous",

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 15h-6v4l-7-7 7-7v4h6v6z" />
<path d="M13 9a1 1 0 0 1-1-1V5.061a1 1 0 0 0-1.811-.75l-6.835 6.836a1.207 1.207 0 0 0 0 1.707l6.835 6.835a1 1 0 0 0 1.811-.75V16a1 1 0 0 1 1-1h6a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1z" />
</svg>

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 391 B

View File

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

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 9v6" />
<path d="M9 9h3V5l7 7-7 7v-4H9V9z" />
<path d="M11 9a1 1 0 0 0 1-1V5.061a1 1 0 0 1 1.811-.75l6.836 6.836a1.207 1.207 0 0 1 0 1.707l-6.836 6.835a1 1 0 0 1-1.811-.75V16a1 1 0 0 0-1-1H9a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1z" />
<path d="M4 9v6" />
</svg>

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -4,7 +4,9 @@
"Andreto",
"mittalyashu",
"ericfennis",
"danielbayley"
"danielbayley",
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"next",

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 9h6V5l7 7-7 7v-4H6V9z" />
<path d="M11 9a1 1 0 0 0 1-1V5.061a1 1 0 0 1 1.811-.75l6.836 6.836a1.207 1.207 0 0 1 0 1.707l-6.836 6.835a1 1 0 0 1-1.811-.75V16a1 1 0 0 0-1-1H5a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1z" />
</svg>

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 391 B

View File

@@ -2,7 +2,8 @@
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"karsa-mistmere"
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"caps lock",

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 19h6" />
<path d="M9 15v-3H5l7-7 7 7h-4v3H9z" />
<path d="M9 13a1 1 0 0 0-1-1H5.061a1 1 0 0 1-.75-1.811l6.836-6.835a1.207 1.207 0 0 1 1.707 0l6.835 6.835a1 1 0 0 1-.75 1.811H16a1 1 0 0 0-1 1v2a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1z" />
<path d="M9 20h6" />
</svg>

Before

Width:  |  Height:  |  Size: 273 B

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -3,7 +3,9 @@
"contributors": [
"Andreto",
"mittalyashu",
"danielbayley"
"danielbayley",
"karsa-mistmere",
"jamiemlaw"
],
"tags": [
"shift",

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 18v-6H5l7-7 7 7h-4v6H9z" />
<path d="M9 13a1 1 0 0 0-1-1H5.061a1 1 0 0 1-.75-1.811l6.836-6.835a1.207 1.207 0 0 1 1.707 0l6.835 6.835a1 1 0 0 1-.75 1.811H16a1 1 0 0 0-1 1v6a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1z" />
</svg>

Before

Width:  |  Height:  |  Size: 250 B

After

Width:  |  Height:  |  Size: 390 B

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-down-01"
{
"name": "arrow-down-01",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-down-10"
{
"name": "arrow-down-10",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-down-az"
{
"name": "arrow-down-az",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"sort-desc"
{
"name": "sort-desc",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -22,6 +22,11 @@
"arrows"
],
"aliases": [
"arrow-down-za"
{
"name": "arrow-down-za",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-up-01"
{
"name": "arrow-up-01",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-up-10"
{
"name": "arrow-up-10",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -21,6 +21,11 @@
"arrows"
],
"aliases": [
"arrow-up-az"
{
"name": "arrow-up-az",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -22,6 +22,11 @@
"arrows"
],
"aliases": [
"sort-asc"
{
"name": "sort-asc",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -22,6 +22,11 @@
"arrows"
],
"aliases": [
"arrow-up-za"
{
"name": "arrow-up-za",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m14 12-8.5 8.5a2.12 2.12 0 1 1-3-3L11 9" />
<path d="M15 13 9 7l4-4 6 6h3a8 8 0 0 1-7 7z" />
<path d="m14 12-8.381 8.38a1 1 0 0 1-3.001-3L11 9" />
<path d="M15 15.5a.5.5 0 0 0 .5.5A6.5 6.5 0 0 0 22 9.5a.5.5 0 0 0-.5-.5h-1.672a2 2 0 0 1-1.414-.586l-5.062-5.062a1.205 1.205 0 0 0-1.704 0L9.352 5.648a1.205 1.205 0 0 0 0 1.704l5.062 5.062A2 2 0 0 1 15 13.828z" />
</svg>

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 480 B

View File

@@ -1,7 +1,8 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"lscheibel"
"lscheibel",
"jguddas"
],
"tags": [
"gizmo",
@@ -11,6 +12,11 @@
"design"
],
"aliases": [
"axis-3-d"
{
"name": "axis-3-d",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -9,6 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 4v16h16" />
<path d="m4 20 7-7" />
<path d="M13.5 10.5 15 9" />
<path d="M4 4v15a1 1 0 0 0 1 1h15" />
<path d="M4.293 19.707 6 18" />
<path d="m9 15 1.5-1.5" />
</svg>

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 342 B

View File

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

View File

@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 12h.01" />
<path d="M15 12h.01" />
<path d="M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5" />
<path d="M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1" />
<path d="M15 12h.01" />
<path d="M19.38 6.813A9 9 0 0 1 20.8 10.2a2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1" />
<path d="M9 12h.01" />
</svg>

Before

Width:  |  Height:  |  Size: 467 B

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -5,7 +5,12 @@
"jguddas"
],
"aliases": [
"verified"
{
"name": "verified",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
],
"tags": [
"verified",

View File

@@ -0,0 +1,25 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere",
"jguddas"
],
"tags": [
"verified",
"unverified",
"help"
],
"categories": [
"accessibility",
"social",
"shapes"
],
"aliases": [
{
"name": "badge-help",
"deprecationReason": "alias.name",
"deprecated": true,
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 481 B

View File

@@ -0,0 +1,27 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"jamiemlaw"
],
"tags": [
"discount",
"offer",
"sale",
"voucher",
"tag",
"monetization",
"marketing",
"finance",
"financial",
"exchange",
"transaction",
"payment",
"try",
"₺"
],
"categories": [
"shopping",
"finance"
]
}

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="M11 7v10a5 5 0 0 0 5-5" />
<path d="m15 8-6 3" />
<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76" />
</svg>

After

Width:  |  Height:  |  Size: 445 B

View File

@@ -1,7 +1,7 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
"colebemis"
],
"tags": [
"cancel",

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4.929 4.929 19.07 19.071" />
<circle cx="12" cy="12" r="10" />
<path d="m4.9 4.9 14.2 14.2" />
</svg>

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 285 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

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