Compare commits

...

158 Commits

Author SHA1 Message Date
Yashu Mittal
213990024b feat: pin icon (#438)
* feat: pin icon

* add tag

* Update tags.json

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

* fix: pin icon

* split path in pin icon

* split icon stroke `path`

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-12-27 22:48:39 +01:00
Eric Fennis
252962062b Allow lucide-static updating 2021-12-27 22:47:49 +01:00
Eric Fennis
211b42a416 Delete sprite-1.svg 2021-12-27 22:46:02 +01:00
Lucide Bot
ac9bbcfe83 📦 Bump lucide package versions to 0.16.22 2021-12-15 12:05:40 +00:00
Wojciech Maj
ab68e8acb1 feat: add scan, scan-line icons (#447) 2021-12-15 12:57:41 +01:00
Wojciech Maj
3def95875a feat: Add clock-1, clock-2, clock-3, clock-4, clock-5, clock-6, clock-7, clock-8, clock-9, clock-10, clock-11, clock-12 icons (#448) 2021-12-15 12:54:13 +01:00
Wojciech Maj
3774bec265 chore: remove unnecessary bit from pencil icon (#449)
There was a line drawn all the way to the beginning of the path, which is what `z` already does anyway.
2021-12-06 17:33:50 +01:00
Wojciech Maj
5d35573d89 fix: fix generateChangelog crashing on commits with no authors (#452)
Sample commit crashing: 3756ab98ef
2021-12-06 17:32:13 +01:00
Eric Fennis
6b79185cc6 Fix ChangeLog Generator 2021-12-06 17:28:49 +01:00
Wojciech Maj
58c0e3f16f feat: add arrow-left-right icon (#446) 2021-12-06 13:02:18 +01:00
Wojciech Maj
74605eef8a chore: simplify slack icon (#450)
Reduces size from 974B to 640B (-35%)
2021-12-06 12:55:39 +01:00
Eric Fennis
833533ea5a Merge branch 'master' of github.com:lucide-icons/lucide 2021-11-21 21:17:14 +01:00
Eric Fennis
e98a9b0e9b Fix lucide site build 2021-11-21 21:16:58 +01:00
Lucide Bot
3756ab98ef 📦 Bump lucide package versions to 0.16.19 2021-11-21 20:10:05 +00:00
Eric Fennis
6899f2f072 Add lucide-static to docs folder 2021-11-21 21:08:10 +01:00
Eric Fennis
a03aa9c58f Rename to japenese yen and add tags (#444)
* bump flutter package version

* Add Folder open icon

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>

* Rename icon

* update tags

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>
2021-11-21 21:01:10 +01:00
Eric Fennis
bbd554dd51 Bump up lucide-static version 2021-11-21 21:00:32 +01:00
Eric Fennis
27137d8c7c Fix workflow lucide-static 2021-11-21 20:58:32 +01:00
Eric Fennis
5bba16f432 fix tests 2021-11-21 20:48:06 +01:00
Eric Fennis
bb4f05e6c5 lucide-static (#401)
* Add lucide static

* add render files

* add read scripts

* Add sprite generator

* start with documentation

* Add docs

* adding documentation

* fix build command

* Add some extra static files

* bump version

* Update packages/lucide-static/README.md

Co-authored-by: Kathryn Reeve <67553+BinaryKitten@users.noreply.github.com>

* Fix sprite generation

* update readme

* Add lucide static workflow

* adjust readme

* Add font to release yml

* Temporary turn of new versioning for lucide-static

Co-authored-by: Kathryn Reeve <67553+BinaryKitten@users.noreply.github.com>
2021-11-21 20:27:15 +01:00
Yashu Mittal
6c31ab914a add timer off icon (#309) 2021-11-17 20:18:26 +01:00
SMAH1
f591c86aba Refactoring (#436) 2021-11-17 20:18:12 +01:00
Eric Fennis
8cab99a2ee New Figma Plugin setup (#434)
* Update changes

* Add new ui files

* add new script files

* process

* fix build

* try to fix the worker

* try to implement rollup for figma plugin

* bump flutter package version

* add vite for figma-plugin

* add vite

* add vite

* Fix ext output

* make plugin work!

* Add Folder open icon

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>

* add new fetcher

* Build new api

* add plugin fetcher

* fix fetch icons

* Fix search

* Fix site build

* update yarn.lock

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>
2021-11-17 20:12:45 +01:00
Brandon Duffany
ac25cdca38 Add wrap-text icon (#435)
* Add wrap text icon

* Optimize

* Add tags for wrap-text
2021-11-15 07:52:30 +01:00
dependabot[bot]
dca5f0f5a6 Bump dns-packet from 1.3.1 to 1.3.4 (#442)
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 1.3.1 to 1.3.4.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.3.1...v1.3.4)

---
updated-dependencies:
- dependency-name: dns-packet
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-14 16:09:34 +01:00
dependabot[bot]
dc988cdf45 Bump tar from 6.1.0 to 6.1.11 (#441)
Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.11.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-14 16:07:11 +01:00
dependabot[bot]
326267521d Bump url-parse from 1.5.1 to 1.5.3 (#440)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-14 16:07:02 +01:00
dependabot[bot]
e6253d2455 Bump jszip from 3.6.0 to 3.7.1 (#439)
Bumps [jszip](https://github.com/Stuk/jszip) from 3.6.0 to 3.7.1.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/master/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.6.0...v3.7.1)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-14 16:06:52 +01:00
SMAH1
fa55b04fa0 Use 'angular build workflow' in Windows (#433) 2021-11-14 15:50:03 +01:00
SMAH1
eded6e0db2 Support Angular version 11 or higher (#432) 2021-11-14 15:48:50 +01:00
Eric Fennis
1f9a3b6a8d Add folder-open icon (#429)
* bump flutter package version

* Add Folder open icon

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>

Co-authored-by: Jan <72730682+JanTrichter@users.noreply.github.com>
2021-11-09 20:32:31 +01:00
Yashu Mittal
ee3f9bf92d create wand icon (#351)
* create wand icon

* Update wand.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-23 12:48:09 +02:00
Yashu Mittal
11631bf008 add settings-2 icon (#231)
* add settings-2 icon

* Update settings-2.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-23 12:41:50 +02:00
Lucide Bot
46da57d763 📦 Bump lucide package versions to 0.16.12 2021-10-17 21:29:19 +00:00
David Pérez Cabrera
ce6935405d Added chevron-first and chevron-last (#423)
* Added chevron-first and chevron-last

* Update icons/chevron-first.svg

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

* Update icons/chevron-last.svg

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-17 23:19:05 +02:00
Prateek SU
a12d15cde1 Fix flutter test (#426)
* Fix flutter test

* Remove assets from gitignore
2021-10-15 16:17:40 +02:00
Eric Fennis
cbc058012e Merge branch 'master' of github.com:lucide-icons/lucide 2021-10-14 12:44:58 +02:00
Eric Fennis
c630032d40 remove pre generated icons in flutter package 2021-10-14 12:40:23 +02:00
Prateek SU
a7f2285e7d Add tests for flutter package and Formatted files (#421)
*  Add tests for flutter release package

* 👷 Format files

* Add long description to fix pubspec score
2021-10-14 12:37:40 +02:00
Martijn Loth
9d706ffc75 Fixed error in link to the Angular specific docs (#422)
Just a small typo in the readme that didn't link to the corrects docs in this repo.
2021-10-14 12:31:05 +02:00
Prateek SU
748c8d2f4e Fix for flutter release package (#420)
* Fix for flutter release package

* Lowercase font name for flutter package

* Simplify assets copying

* Update .github/workflows/release.yml

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-10 20:03:02 +02:00
Lucide Bot
f8e8f46085 📦 Bump lucide package versions to 0.16.10 2021-10-06 06:46:13 +00:00
Christoph Nölke
7964a535b2 add gem icon (#359)
* add gem icon

Co-authored-by: b0b90 <babersheikh@outlook.com>

* Update icons/gem.svg

Remove additional edges of the gem and reduce height.

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

Co-authored-by: b0b90 <babersheikh@outlook.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-06 08:35:58 +02:00
Eric Fennis
0e35ba400c Fix Piggybank name 2021-10-03 15:35:15 +02:00
b0b90
f920d52e08 add piggy-bank icon (#350)
* 4 icons added

* Delete rocking-chair.svg

* Delete gem.svg

* Delete landmark.svg

* Update piggy-bank-.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-10-03 15:28:37 +02:00
Eric Fennis
ebe64a6c7f Merge branch 'master' of github.com:lucide-icons/lucide 2021-10-03 15:26:34 +02:00
Eric Fennis
2672c011e5 Fix flutter package in release 2021-10-03 15:25:32 +02:00
Eric Fennis
63052c9d9e Fix types 2021-10-03 13:40:23 +02:00
Sri Aspari
e27d114c6e Add verified icon (#416)
* Add verified icon

* Add verified tag

* Fix verified icon
2021-10-03 12:23:09 +02:00
Eric Fennis
1404dbed83 Update ICON_DESIGN_GUIDE.md 2021-10-03 10:14:49 +02:00
Eric Fennis
4c868c92e5 Update the text a bit to avoid confusion, #416 2021-10-03 10:14:33 +02:00
Prateek SU
4cdb9f8b94 Fix flutter package generation (#415) 2021-10-02 20:40:53 +02:00
Lucide Bot
4ff430e49d 📦 Bump lucide package versions to 0.16.7 2021-10-01 15:03:24 +00:00
Eric Fennis
4e949b38e9 Add list-plus icon (#411)
* add list plug icon

* Add tags

* add list-minus and list-plus

* Add tags
2021-10-01 16:53:39 +02:00
Lucide Bot
c48679cc1a 📦 Bump lucide package versions to 0.16.6 2021-10-01 07:29:41 +00:00
Eric Fennis
6f7c94efa5 Add packages sections (#402)
* Add markdown support

* Fix a lot of issues

* Add core components

* Add codeblocks

* fix codeblocks

* Add More components

* add links

* Fix loading docs

* Fix docs

* Fix empty lines

* small Fix

* Add heading provider

* created menu

* remove borderline

* Add mobilemenu component

* add next env

* update code style

* generate heading element positions

* Add package pages

* add fetch packages

* Add lucide logo

* Add icons and adjust description

* improve some things

* fix types

* Fix logo types

* fix types

* Add logo's

* update packages docs

* resize icons

* small changes

* update packages links
2021-10-01 09:19:36 +02:00
Lucide Bot
24edd8cd6e 📦 Bump lucide package versions to 0.16.5 2021-09-27 19:21:01 +00:00
Sri Aspari
3e61ee5832 Add more bookmark icon variant (#413)
* Add bookmark-add icon

Signed-off-by: Sri Aspari <mail@siarie.me>

* Rename icon to bookmark-plus and add tags

Signed-off-by: Sri Aspari <mail@siarie.me>

* Fix icon size

Signed-off-by: Sri Aspari <mail@siarie.me>

* Fix bookmark icon

* Add bookmark-minus icon

Signed-off-by: Sri Aspari <mail@siarie.me>

* Fix coding style
2021-09-27 21:10:33 +02:00
Eric Fennis
38b14425a0 try to speed up the font build 2021-09-27 20:52:21 +02:00
Eric Fennis
87a18985f1 Add yarn --prefer-offline 2021-09-27 20:32:16 +02:00
Eric Fennis
6e5af5fb49 Fix sort icons, Switch asc desc stack (#412)
* Switch asc desc stack

* Update sort-asc.svg
2021-09-27 20:02:30 +02:00
Eric Fennis
6b90ff364c Merge branch 'master' of github.com:lucide-icons/lucide 2021-09-26 22:42:29 +02:00
Eric Fennis
96989ea74c Fix workflow tagname 2021-09-26 22:42:16 +02:00
Lucide Bot
90914f53e1 📦 Bump lucide package versions to 0.16.3 2021-09-26 19:57:54 +00:00
Yashu Mittal
a98692b37c add alarm-clock-off icon (#201)
* add alarm-clock-off icon

* Update alarm-clock-off.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-09-26 21:44:55 +02:00
dependabot[bot]
a843cf6d6b Bump ansi-regex from 5.0.0 to 5.0.1 in /site (#410)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-26 17:53:29 +02:00
Eric Fennis
72736a6879 Merge branch 'master' of github.com:lucide-icons/lucide 2021-09-26 17:50:44 +02:00
Eric Fennis
296bb35317 Fix bash if statement in release workflow 2021-09-26 17:50:15 +02:00
Christoph Nölke
7adecdc5df add landmark icon (#406) 2021-09-26 17:25:38 +02:00
Eric Fennis
23259c9e3f revert temp code 2021-09-26 12:48:31 +02:00
Eric Fennis
5770517a71 revert commented code 2021-09-26 12:46:47 +02:00
Eric Fennis
601b7ad1fc Fix some version adding 2021-09-26 12:22:25 +02:00
Eric Fennis
e79d778606 add yd 2021-09-26 11:53:15 +02:00
Eric Fennis
04dad48bc5 add yd 2021-09-26 11:45:10 +02:00
Eric Fennis
dd9c48196d disable some 2021-09-26 11:18:26 +02:00
Eric Fennis
db9cd7af52 disable check 2021-09-26 11:17:07 +02:00
Eric Fennis
893dc9e0e8 try to fix flutter workflow 2021-09-26 11:13:38 +02:00
Eric Fennis
b172f4316e Merge branch 'master' of github.com:lucide-icons/lucide 2021-09-26 11:08:59 +02:00
Eric Fennis
60e42bd350 Merge branch 'master' of github.com:ericfennis/lucide 2021-09-22 08:46:59 +02:00
Eric Fennis
272e33d320 📦 Roll up version numbers 2021-09-22 08:46:50 +02:00
dependabot[bot]
0af9969e53 Bump tmpl from 1.0.4 to 1.0.5 (#405)
Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/daaku/nodejs-tmpl/releases)
- [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5)

---
updated-dependencies:
- dependency-name: tmpl
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-22 08:42:12 +02:00
dependabot[bot]
afbe6576d6 Bump tmpl from 1.0.4 to 1.0.5 in /site (#404)
Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/daaku/nodejs-tmpl/releases)
- [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5)

---
updated-dependencies:
- dependency-name: tmpl
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-21 12:33:33 +02:00
dependabot[bot]
a61276c72e Bump semver-regex from 3.1.2 to 3.1.3 (#403)
Bumps [semver-regex](https://github.com/sindresorhus/semver-regex) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/sindresorhus/semver-regex/releases)
- [Commits](https://github.com/sindresorhus/semver-regex/commits)

---
updated-dependencies:
- dependency-name: semver-regex
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-21 09:25:40 +02:00
Eric Fennis
e43c2a7f23 Set package json version 2021-09-20 08:38:56 +02:00
Eric Fennis
06fe7d6a3f Add event listeners to vue component, fix #400 2021-09-20 08:33:32 +02:00
Eric Fennis
81ff3fc1d1 Update figma plugin 2021-09-20 08:32:57 +02:00
Eric Fennis
776ef4f43c revert disable workflow 2021-09-17 17:50:07 +02:00
Eric Fennis
e4edabddb9 add other docker image 2021-09-17 17:26:54 +02:00
Eric Fennis
028afec837 Temporary disable CI for packages 2021-09-17 17:03:02 +02:00
Eric Fennis
049c4cd61e Fix directory names 2021-09-17 16:58:47 +02:00
Eric Fennis
b13a7bf1ab Add custom build again 2021-09-17 16:44:25 +02:00
Eric Fennis
e278f27a61 fix versions 2021-09-17 16:33:23 +02:00
Eric Fennis
f70a0e1945 Add default classnames, fix #317 2021-09-17 16:23:17 +02:00
Eric Fennis
26f85a75d2 fix icon 2021-09-17 15:56:10 +02:00
Eric Fennis
da7c09f66e add paralel jobs 2021-09-17 15:51:18 +02:00
Eric Fennis
f5175bd4b2 Merge branch 'master' of github.com:ericfennis/lucide 2021-09-17 13:26:16 +02:00
Eric Fennis
cb7da732fe Split up merged paths 2021-09-16 10:06:19 +02:00
Snow
2200ab47d3 Feature/icon name class (#395)
* #317 Add icon-names to class list for Vue.

* #317 Tidy up class name.
2021-09-13 21:13:52 +02:00
Snow
c537469638 Update README.md (#396)
Small typ-oh.
2021-09-12 09:12:12 +02:00
Eric Fennis
f09836cc84 update release.yml 2021-09-06 21:29:31 +02:00
Eric Fennis
eaf51b2da4 update release yml 2021-09-06 21:02:13 +02:00
Billiam
66b3574d64 Add quote icon (#389)
* Add quote icon

* Split quote paths
2021-09-06 20:46:17 +02:00
Eric Fennis
435d2bd66b Add more tags (#393) 2021-09-05 16:11:59 +02:00
Eric Fennis
ca330378d0 Merge branch 'master' of github.com:lucide-icons/lucide 2021-09-05 13:21:57 +02:00
Eric Fennis
aa7efeacc4 fix release yml 2021-09-05 13:19:36 +02:00
tidoni
0febdd831f Created selection-flag start and end flag (#380)
* Created selection-flag start and end flag

* Update icons/selection-flag-start.svg

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

* Update icons/selection-flag-end.svg

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

* Rename selection-flag-start.svg to flag-triangle-right.svg

* Rename selection-flag-end.svg to flag-triangle-left.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-09-05 12:59:44 +02:00
Yashu Mittal
99d5d7a6da Add timer-reset icon (#308)
* add timer off icon

* remove icon

* add timer reset icon

* Update timer-reset.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-09-05 12:49:01 +02:00
dependabot[bot]
533b820e32 Bump next from 11.1.0 to 11.1.1 in /site (#391)
Bumps [next](https://github.com/vercel/next.js) from 11.1.0 to 11.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.0...v11.1.1)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-05 12:28:00 +02:00
venashial
cd7b9bf03d Support Nuxt auto-importing Vue components (#390)
* Add support for nuxt component auto importing

* Add documentation for using with nuxt components
2021-08-31 20:58:13 +02:00
Eric Fennis
c97b456bce fix indentation 2021-08-26 13:39:46 +02:00
Eric Fennis
9a04665ad2 refactor workflows 2021-08-26 13:22:20 +02:00
Eric Fennis
2d5a5fd90a Fix release workflow 2021-08-25 14:30:33 +02:00
Eric Fennis
7ed8092d8a Merge branch 'master' of github.com:lucide-icons/lucide 2021-08-24 23:36:50 +02:00
Eric Fennis
7128fc608e Fix post release 2021-08-24 23:36:16 +02:00
Yashu Mittal
b470bc691c Add megaphone icon (#214)
* add megaphone icon

* Update megaphone.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-08-24 23:28:03 +02:00
Eric Fennis
d67626a6e1 Merge branch 'feature/add-more-workflows' 2021-08-24 23:19:06 +02:00
Eric Fennis
10b146a358 fix indenting 2021-08-24 23:10:48 +02:00
Eric Fennis
641bf8a933 Fix #370 2021-08-24 23:05:18 +02:00
Mark Motliuk
f0f168376a Lucide Flutter packging (#369)
* Flutter plugin init

* Updated readme
2021-08-24 21:34:22 +02:00
Jan
34594af2bd Added the template and changed corresponding documentation (#377)
* Added the template and changed corresponding documentation

Added the illustrator template and created (ILLUSTRATOR_GUIDE.md) oder changed (CONTRIBUTING.md) files.

* fixed typo

* split up template instruction docs for programs

documentation concerning the templates and instrcutions is now separated in the documentation.

* updated illustrator export documentation

updated illustrator guide with the according options for exporting SVGs

* updated image path

image path should be correct now

* matching filenames

files names illustrator guide should match file name in /images

* image in illustrator guide path correction

image should work now

* layout adjustments to illustrator guide

layout should be pretty now

* layout corrections second try
2021-08-19 09:12:56 +02:00
Eric Fennis
e686494545 Add flutter release yml 2021-08-16 21:13:42 +02:00
Eric Fennis
6eb0acac4e add yaml transformer 2021-08-15 21:46:44 +02:00
Eric Fennis
8b0cf96c69 add working directory 2021-08-15 21:29:41 +02:00
Eric Fennis
48376a2621 Add dryrun flutter publish 2021-08-15 21:27:22 +02:00
Eric Fennis
2c580552b4 add flutter action 2021-08-15 21:19:38 +02:00
Eric Fennis
95a625dcd4 remove cache 2021-08-15 21:17:56 +02:00
Eric Fennis
3af8508c46 fix indenting 2021-08-15 21:17:19 +02:00
Eric Fennis
609fd065da test flutter 2021-08-15 21:16:09 +02:00
AB
b4afb9c8da Fix typescript declarations for lucide-react (#388)
* Fix typescript declarations for lucide-react

- removed leftover references to `vue`
- removed redundant property declarations on `LucideProps`

* Update buildTypes.js

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-08-15 21:05:51 +02:00
dependabot[bot]
3292edab39 Bump jszip from 3.6.0 to 3.7.0 in /site (#385)
Bumps [jszip](https://github.com/Stuk/jszip) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/master/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.6.0...v3.7.0)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: direct:production
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-15 20:48:23 +02:00
dependabot[bot]
754300465a Bump next from 10.2.3 to 11.1.0 in /site (#384)
* Bump next from 10.2.3 to 11.1.0 in /site

Bumps [next](https://github.com/vercel/next.js) from 10.2.3 to 11.1.0.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v10.2.3...v11.1.0)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

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

* Fix eslint

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-08-15 20:47:59 +02:00
dependabot[bot]
5834504dd9 Bump path-parse from 1.0.6 to 1.0.7 in /packages/lucide-figma (#383)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-13 22:52:33 +02:00
dependabot[bot]
29a7763ce2 Bump path-parse from 1.0.6 to 1.0.7 (#382)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-13 22:52:23 +02:00
Lucide Bot
f19e0696ce 📦 Bump lucide package versions to 0.15.30 2021-08-10 08:36:18 +00:00
Lukas Schätzle
872adfa333 Add graduation-cap icon (#367)
* add graduation-cap icon

* move graduation-cap into icons folder

* Add tags for graduation-cap

* Add trailing newline

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-08-10 10:31:34 +02:00
Lucide Bot
428460ea46 📦 Bump lucide package versions to 0.15.29 2021-08-08 19:06:07 +00:00
Christoph Nölke
96da221758 add rocking chair icon (#360)
Co-authored-by: b0b90 <babersheikh@outlook.com>

Co-authored-by: b0b90 <babersheikh@outlook.com>
2021-08-08 21:00:42 +02:00
delnyn
0cf7c22379 Refactor the archive icon (#365)
* Refactor the archive icon

* Format the SVG

Co-authored-by: delnyn <delnyn@e.email>
2021-08-08 21:00:23 +02:00
marchellodev
f78ef546a8 Updated readme 2021-08-05 22:39:34 +03:00
marchellodev
7558bef262 Flutter plugin init 2021-08-05 22:17:05 +03:00
Lucide Bot
51b12ae55c 📦 Bump lucide package versions to 0.15.28 2021-07-26 20:13:11 +00:00
David Kerkeslager
c60323c28c Added icons for mountain and mountain with snow (#284)
* Added icons for mountain and mountain with snow

* Update mountain.svg

* Update mountain-snow.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-07-26 22:08:40 +02:00
Lucide Bot
d71b18d0e7 📦 Bump lucide package versions to 0.15.27 2021-07-26 18:26:58 +00:00
Yashu Mittal
10e3aa4377 fix: smartphone outer line position (#315)
* fix: smartphone outer line position

* change path to rect tag
2021-07-26 20:22:20 +02:00
Avior
d1262f4c7f Allow to use with React 17 (#356)
The library works perfectly with React 17 so it will allow users to not use `npm --legacy-peer-deps`
2021-07-26 20:17:44 +02:00
Dan
03aefa2cd5 Add info about laravel blade icons repackage (#357) 2021-07-26 20:16:15 +02:00
Billiam
41f8ce9660 Build multiple font weights in action (#355)
* Build multiple font thicknesses

* Fontcustom empties directory during compilation
2021-07-26 20:12:13 +02:00
Baltazar Gomez
2b41a44538 add missing tag "text" to bold icon (#362) 2021-07-24 03:17:49 -04:00
Lucide Bot
8ffb43b8e0 📦 Bump lucide package versions to 0.15.26 2021-07-07 11:20:52 +00:00
Christoph Nölke
b39b835390 add currency icon (#353) 2021-07-07 13:15:56 +02:00
Eric Fennis
24a6ef9fd9 Add figma badge 2021-07-07 13:13:56 +02:00
Eric Fennis
17967a9598 Merge branch 'master' of github.com:lucide-icons/lucide 2021-06-28 10:30:09 +02:00
Eric Fennis
9dc93a602d update site 2021-06-28 10:29:44 +02:00
Lucide Bot
b672e884d9 📦 Bump lucide package versions to 0.15.25 2021-06-24 07:46:04 +00:00
Yashu Mittal
46bbb6485b add import icon (#239)
* add save-2 icon

* rename to import
2021-06-24 09:41:58 +02:00
Lucide Bot
b530c40486 📦 Bump lucide package versions to 0.15.24 2021-06-24 06:45:14 +00:00
Yashu Mittal
5d1fdd703c add smartphone-charging icon (#316)
* add smartphone-charging icon

* change path to rect tag

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-06-24 08:39:33 +02:00
Lucide Bot
706486b3b7 📦 Bump lucide package versions to 0.15.23 2021-06-21 17:52:28 +00:00
209 changed files with 12420 additions and 8424 deletions

View File

@@ -71,4 +71,3 @@ jobs:
tag_name: ${{ steps.new-version.outputs.NEW_VERSION }}
name: New icons ${{ steps.new-version.outputs.NEW_VERSION }}
body: ${{ steps.change-log.outputs.CHANGE_LOG }}

View File

@@ -1,7 +1,7 @@
name: 'Close stale issues and PR'
name: Close stale issues and PR
on:
schedule:
- cron: '45 1 * * *'
- cron: "45 1 * * *"
jobs:
stale:
@@ -10,9 +10,9 @@ jobs:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-pr-message: 'This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
close-pr-message: 'This PR was closed because it has been stalled for 5 days with no activity.'
close-pr-label: '🧶 stale'
stale-pr-message: This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.
close-pr-message: This PR was closed because it has been stalled for 5 days with no activity.
close-pr-label: 🧶 stale
days-before-stale: 30
days-before-close: 5
days-before-pr-close: -1

View File

@@ -1,61 +0,0 @@
name: Build Lucide
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
Build:
runs-on: ubuntu-latest
steps:
- name: Clone 'Lucide'
uses: actions/checkout@v2
- name: Update repos
run: sudo apt-get update
- name: Install FontForge
run: sudo apt-get install zlib1g-dev fontforge
- name: Clone sfnt2woff-zopfli repo
run: git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli
- name: Install and move sfnt2woff-zopfli
run: |
cd sfnt2woff-zopfli
make
sudo mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff
- name: Clone woff2
run: git clone --recursive https://github.com/google/woff2.git
- name: Install woff2
run: |
cd woff2
sudo make clean all
sudo mv woff2_compress /usr/local/bin/ && sudo mv woff2_decompress /usr/local/bin/
- name: Install Font Custom dependency
run: sudo gem install fontcustom
- name: Install "outline-stroke"
run: sudo yarn add svg-outline-stroke -W
- name: "Outline SVG"
run: mkdir converted_icons && node scripts/outline_svg.js
- name: Build 'Lucide'
run: echo "Building Lucide font" && fontcustom compile ./converted_icons -h -n Lucide -o build -F
- name: Zip 'Lucide'
run: zip -r Lucide.zip build
- name: 'Upload to Artifacts'
uses: actions/upload-artifact@v1.0.0
with:
name: Lucide
path: build

View File

@@ -3,21 +3,20 @@ name: Release Packages
on:
push:
tags:
- 'v*'
- "v*"
workflow_dispatch:
inputs:
version:
description: 'Version'
description: Version
required: true
jobs:
pre-build:
if: github.repository == 'lucide-icons/lucide'
if: github.repository == 'lucide-icons/lucide' && contains('["locness3","ericfennis", "johnletey"]', github.actor)
runs-on: ubuntu-latest
outputs:
VERSION: ${{ steps.get_version.outputs.VERSION }}
YARN_CACHE_DIR: ${{ steps.yarn_cache.outputs.YARN_CACHE_DIR }}
steps:
- name: Get the version
@@ -28,25 +27,20 @@ jobs:
env:
VERSION_REF: ${{ github.event.inputs.version || github.ref }}
- name: Get yarn cache directory path
id: yarn_cache
run: echo "::set-output name=YARN_CACHE_DIR::$(yarn cache dir)"
lucide:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/setup-node@v2.4.0
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
cache-dependency-path: 'yarn.lock'
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -75,15 +69,13 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/setup-node@v2.4.0
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -112,19 +104,13 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/setup-node@v2.4.0
with:
node-version: '12.x'
- uses: actions/cache@v2
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -153,19 +139,13 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/setup-node@v2.4.0
with:
node-version: '12.x'
- uses: actions/cache@v2
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -194,15 +174,13 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/setup-node@v2.4.0
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -231,15 +209,13 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/setup-node@v2.4.0
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --pure-lockfile
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
@@ -262,28 +238,207 @@ jobs:
name: lucide-preact-package-json
path: packages/lucide-preact/package.json
upload-package-jsons:
lucide-static:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: [pre-build, lucide, lucide-react, lucide-vue, lucide-vue-next, lucide-angular, lucide-preact]
needs: [pre-build, lucide-font]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- uses: actions/setup-node@v2.4.0
with:
node-version: "14"
cache: yarn
- name: Install dependencies
run: yarn --prefer-offline
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
- name: Set new version
run: yarn workspace lucide-static version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
- name: Move Font
run: cp -r lucide-font packages/lucide-static/font
- name: Build
run: yarn workspace lucide-static build
- name: Publish
run: yarn workspace lucide-static publish
- name: Upload package.json
uses: actions/upload-artifact@v2
with:
name: lucide-static-package-json
path: packages/lucide-static/package.json
lucide-font:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2.4.0
with:
node-version: "14"
cache: yarn
- name: Install FontForge
run: sudo apt-get install zlib1g-dev fontforge
- name: Clone sfnt2woff-zopfli repo
run: git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli
- name: Install and move sfnt2woff-zopfli
run: |
cd sfnt2woff-zopfli
make
sudo mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff
- name: Clone woff2
run: git clone --recursive https://github.com/google/woff2.git
- name: Install woff2
run: |
cd woff2
sudo make clean all
sudo mv woff2_compress /usr/local/bin/ && sudo mv woff2_decompress /usr/local/bin/
- name: Install Font Custom dependency
run: sudo gem install fontcustom
- name: Install
run: yarn --prefer-offline
- name: Build Icon Font
run: |
mkdir lucide-font
yarn build:outline-icons --outputDir=converted_icons && fontcustom compile "./converted_icons" -h -n "lucide" -o ./lucide-font -F
- name: "Upload to Artifacts"
uses: actions/upload-artifact@v1
with:
name: lucide-font
path: lucide-font
lucide-flutter:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: [pre-build, lucide-font]
container:
image: cirrusci/flutter:latest
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- uses: actions/cache@v2
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('~/.pub-cache') }}
restore-keys: |
${{ runner.os }}-pub-
- name: Setup credentials
run: |
mkdir -p ~/.pub-cache
cat <<EOF > ~/.pub-cache/credentials.json
{
"accessToken": "${{ secrets.GOOGLE_OAUTH_ACCESS_TOKEN }}",
"refreshToken": "${{ secrets.GOOGLE_OAUTH_REFRESH_TOKEN }}",
"idToken": "${{ secrets.GOOGLE_OAUTH_ID_TOKEN }}",
"tokenEndpoint":"https://accounts.google.com/o/oauth2/token",
"scopes": [ "openid", "https://www.googleapis.com/auth/userinfo.email" ],
"expiration": 1629835569218
}
EOF
- name: Get packages
run: flutter pub get
working-directory: packages/lucide-flutter
- name: List lucide-font folder
run: ls lucide-font
- name: Copy assets from lucide-font directory
run: |
mkdir packages/lucide-flutter/assets
cp lucide-font/lucide.ttf packages/lucide-flutter/assets/lucide.ttf
cp lucide-font/lucide-preview.html packages/lucide-flutter/assets/lucide-preview.html
- name: Generate exports file
run: |
dart tool/generate_fonts.dart assets/lucide-preview.html
flutter format .
working-directory: packages/lucide-flutter
- name: Test
run: flutter test
working-directory: packages/lucide-flutter
- name: Update yaml
run: sed -E 's/(version:)[^\n]*/\1 ${{ needs.pre-build.outputs.VERSION }}/;' pubspec.yaml > pubspec && mv pubspec pubspec.yaml
working-directory: packages/lucide-flutter
- name: Flutter publish
run: flutter pub publish -f
working-directory: packages/lucide-flutter
- name: Upload pubspec.yaml
uses: actions/upload-artifact@v2
with:
name: lucide-flutter-pubspec-yaml
path: packages/lucide-flutter/pubspec.yaml
post-release:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs:
[
pre-build,
lucide,
lucide-react,
lucide-vue,
lucide-vue-next,
lucide-angular,
lucide-preact,
lucide-flutter,
lucide-font,
]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- name: Commit package.jsons
run: |
mv lucide-package-json/package.json packages/lucide/package.json
mv lucide-react-package-json/package.json packages/lucide-react/package.json
mv lucide-vue-package-json/package.json packages/lucide-vue/package.json
mv lucide-preact-package-json/package.json packages/lucide-preact/package.json
mv lucide-vue-next-package-json/package.json packages/lucide-vue-next/package.json
mv lucide-angular-package-json/package.json packages/lucide-angular/package.json
- name: Commit package files
run: |
mv lucide-package-json/package.json packages/lucide/package.json
mv lucide-react-package-json/package.json packages/lucide-react/package.json
mv lucide-vue-package-json/package.json packages/lucide-vue/package.json
mv lucide-preact-package-json/package.json packages/lucide-preact/package.json
mv lucide-vue-next-package-json/package.json packages/lucide-vue-next/package.json
mv lucide-angular-package-json/package.json packages/lucide-angular/package.json
mv lucide-flutter-pubspec-yaml/pubspec.yaml packages/lucide-flutter/pubspec.yaml
- name: Commit package.jsons
run: |
git add packages/*/package.json
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump lucide package versions to ${{ needs.pre-build.outputs.VERSION }}" --no-verify --quiet
git remote set-url --push origin https://lucide-bot:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git
git push origin HEAD:master
- name: Commit package.jsons
run: |
git add packages/*/package.json packages/lucide-flutter/pubspec.yaml
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump lucide package versions to ${{ needs.pre-build.outputs.VERSION }}" --no-verify --quiet
git remote set-url --push origin https://lucide-bot:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git
git push origin HEAD:master
- name: Zip font and icons
run: |
zip -r lucide-font-${{ needs.pre-build.outputs.VERSION }}.zip lucide-font
zip -r lucide-icons-${{ needs.pre-build.outputs.VERSION }}.zip icons
- name: Release zip and fonts
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.CREATE_RELEASE_TOKEN }}
with:
tag_name: v${{ needs.pre-build.outputs.VERSION }}
files: |
lucide-font-${{ needs.pre-build.outputs.VERSION }}.zip
lucide-icons-${{ needs.pre-build.outputs.VERSION }}.zip

View File

@@ -1,3 +1,4 @@
# Contribution Guidelines
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
@@ -22,8 +23,23 @@ Guidelines for pull requests:
#### Guidelines
Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide
Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_GUIDE.md)
Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide.
Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_GUIDE.md).
### Templates
Here you can find templates and instructions on how to implement the guidelines with different programs.
#### Adobe Illustrator
`Template`: You can find a template for Adobe Illustrator under `/docs/templates/illustrator-template.ai`.
`Instructions`: You can find the [Illustrator Guide](/docs/ILLUSTRATOR_GUIDE.md) and how to work with the template in `/docs/ILLUSTRATOR_GUIDE.md`.
#### Inkscape
`Template`: None
`Instructions`: You can find the [Inkscape Guide](/docs/INKSCAPE_GUIDE.md) and how to set up Inkscape under `/docs/INKSCAPE_GUIDE.md`.
#### Submitting Mulitple Icons

View File

@@ -4,6 +4,7 @@
![NPM](https://img.shields.io/npm/l/lucide)
[![npm](https://img.shields.io/npm/v/lucide)](https://www.npmjs.com/package/lucide)
[![installs](https://img.shields.io/endpoint?logo=figma&label=installs&url=https://yuanqing.github.io/figma-plugins-stats/plugin/939567362549682242/installs.json)](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons)
[![Discord](https://img.shields.io/discord/723074157486800936?label=chat&logo=discord&logoColor=%23ffffff&colorB=%237289DA)](https://discord.gg/EH6nSts)
## What is Lucide?
@@ -16,7 +17,7 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
### Why choose Lucide over Feather Icons
- Lucide already expended the icon set by 130+ in less then a year, so more icons to work with.
- Lucide already expanded the icon set by 130+ in less then a year, so more icons to work with.
- Well maintained code base.
- Active community.
@@ -33,6 +34,8 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
* [Angular](#angular)
* [Preact](#preact)
* [Figma](#figma)
* [Laravel](#laravel)
* [Flutter](#flutter)
* [Contributing](#contributing)
* [Community](#community)
* [License](#license)
@@ -110,7 +113,7 @@ yarn add lucide-angular
npm install lucide-angular
```
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/packages/lucide-angular#lucide-angular).
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-angular#lucide-angular).
### Preact
@@ -134,6 +137,26 @@ Visit [Figma community page](https://www.figma.com/community/plugin/939567362549
<img width="420" src="https://www.figma.com/community/plugin/939567362549682242/thumbnail" alt="Figma Lucide Cover">
### Laravel
Implementation of Lucide icon's using `blade-icons` for Laravel based projects.
```sh
composer require mallardduck/blade-lucide-icons
```
For more details, see the [documentation](https://github.com/mallardduck/blade-lucide-icons/blob/main/README.md).
### Flutter
Implementation of Lucide icon library for Flutter applications.
```sh
flutter pub add lucide_icons
```
For more details, see the [pub.dev](https://pub.dev/packages/lucide_icons).
## Contributing
For more info on how to contribute please see the [contribution guidelines](https://github.com/lucide-icons/lucide/blob/master/CONTRIBUTING.md).

View File

@@ -5,7 +5,7 @@ Here are rules that should be followed to keep quality and consistency when maki
## Summary of the rules we have
1. Icons must be designed on a **24 by 24 pixels** canvas.
2. Icons must have a **1 pixel padding** within the canvas.
2. Icons must have at least **1 pixel padding** within the canvas.
3. Icons must have a **stroke width of 2 pixels**.
4. Icons must use **round joins**.
5. Icons must use **round caps**.
@@ -19,7 +19,7 @@ Here are rules that should be followed to keep quality and consistency when maki
![24px-24px](images/24px-24px.png?raw=true "24px-24px")
### 2. Icons must have a 1 pixel padding within the canvas.
### 2. Icons must have at least 1 pixel padding within the canvas.
![1px-padding](images/1px-padding.png?raw=true "1px-padding")

28
docs/ILLUSTRATOR_GUIDE.md Normal file
View File

@@ -0,0 +1,28 @@
# Illustrator Template Guide
This Guide explains how to properly use the Adobe Illustrator Template for Lucide.
>Attention: Even though it is unlikely the template can be outdated or not 100% correct. Please check the Icon Design Guide before you start working with the template to ensure integrity with the Lucide icon pack.
## General Workflow
The Illustrator template is created following guidelines from the [Icon Design Guide](ICON_DESIGN_GUIDE.md).
**Workflow:**
1. Open the Document which can be found under __*/docs/templates/illustrator_template.ai*__ .
2. You can now remove the content from the example logo layer ("Draw") and start creating.
3. Verify that you follow the [Icon Design Guidelines](ICON_DESIGN_GUIDE.md).
4. Before you export the file as an SVG make sure to check that you followed the guidelines and remove all unecessary layers (especially "Padding" and "Grid").
5. Export the file with the export menu under: `Export > Export As..` than safe the file as SVG. Select the following options in the SVG Options dialog:
![SVG export options in Illustrator](images/illustrator-svg-options.png?raw=true "Setting Page Size")
After that, double check that the [code conventions and SVG global attributes](https://github.com/lucide-icons/lucide/blob/master/docs/ICON_DESIGN_GUIDE.md#code-conventions) are correct.
7. Minify paths with [SVGOMG](https://jakearchibald.github.io/svgomg/).

View File

@@ -16,14 +16,14 @@ When opening a new document, Inkscape will create a canvas of a default size. T
![Setting Grid Properties](images/grid-2.png?raw=true "Setting Grid Properties")
5. Close the Document Properties dialog.
6. To center the canvas in the viewport, select View -> Zoom -> Drawing.
## Setting up The Paths
1. Create a path or shape.
2. With the path selected, open the Stroke and Fill panel by pressing `Ctrl+Shift+F` on your keyboard.
![Stroke Style Properties](images/strokes.png?raw=true "Setting Grid Properties")
3. On the “Stroke Style” tab:
* Set Stroke Width to `2px`.
* Set Stroke Width to `2px`.
* Select the rounded join type.
* Select the rounded cap type.
4. If the shape is a rectangle, select the rectangle and in the top of the screen below the menu bar, set `Rx` and `Ry` to `2px`.
@@ -34,4 +34,4 @@ When opening a new document, Inkscape will create a canvas of a default size. T
1. When ready to save the file, click Save As and select “Optimized SVG” as the file type.
![Save As](images/save-as.png?raw=true "Save as")
2. After clicking Save, to conform with the other icons in the package, set Pretty Printing to use spaces and set the indentation depth to 2.
![Optimize](images/optimize-settings.png?raw=true "Optimize")
![Optimize](images/optimize-settings.png?raw=true "Optimize")

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

116
docs/index.md Normal file
View File

@@ -0,0 +1,116 @@
---
title: Introduction
---
# Introduction
## What is Lucide?
Lucide is a community-run fork of [Feather Icons](https://github.com/feathericons/feather), open for anyone to contribute icons.
It began after growing disaffection of the [Feather Icons](https://github.com/feathericons/feather) project moderation. With over 300+ open issues and over 100+ open PRs, the Feather Icons project has been abandoned. This unfortunately means that hundreds of developers and designers wasted their time contributing to Feather Icons with no chance of PRs being accepted.
Lucide is trying to expand the icon set as much as possible while staying faithful to the original simplistic design language. We do this as a community of devs and designers and hope that you'll join us!
### Why choose Lucide over Feather Icons
- Lucide already expended the icon set by 130+ in less then a year, so more icons to work with.
- Well maintained code base.
- Active community.
## Getting Started
At its core, Lucide is a collection of [SVG](https://svgontheweb.com/#svg) files. This means that you can use Lucide icons in all the same ways you can use SVGs (e.g. `img`, `background-image`, `inline`, `object`, `embed`, `iframe`). Here's a helpful article detailing the many ways SVGs can be used on the web: [SVG on the Web Implementation Options](https://svgontheweb.com/#implementation)
### Using Lucide packages
### Web
Implementation of the lucide icon library for web applications.
```sh
npm install lucide
#or
yarn add lucide
```
For more details, see the [documentation](lucide).
### React
Implementation of the lucide icon library for react applications.
```sh
yarn add lucide-react
# or
npm install lucide-react
```
For more details, see the [documentation](lucide-react).
### Vue 2
Implementation of the lucide icon library for vue applications.
```sh
yarn add lucide-vue
# or
npm install lucide-vue
```
For more details, see the [documentation](lucide-vue).
### Vue 3
Implementation of the lucide icon library for vue applications.
```sh
yarn add lucide-vue-next
# or
npm install lucide-vue-next
```
For more details, see the [documentation](lucide-vue-next).
### Angular
```sh
yarn add lucide-angular
# or
npm install lucide-angular
```
For more details, see the [documentation](lucide-angular).
### Preact
Implementation of the lucide icon library for preact applications.
```sh
yarn add lucide-preact
# or
npm install lucide-preact
```
For more details, see the [documentation](lucide-preact).
### Figma
The lucide figma plugin.
Visit [Figma community page](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons) to install the plugin.
![Figma Lucide Cover](https://www.figma.com/community/plugin/939567362549682242/thumbnail "Figma Lucide Cover")

13
docs/installation.md Normal file
View File

@@ -0,0 +1,13 @@
---
title: Installation
---
# Installation
Hello
> hello
```js
console.log('asdadfasdf')
```

View File

@@ -0,0 +1,164 @@
# Lucide Angular
Implementation of the lucide icon library for angular applications.
## Installation
``` sh
yarn add lucide-angular
# or
npm install lucide-angular
```
## How to use
There are three ways for use this library.
### Method 1: createElement
After install `lucide-angular` change content of file `app.component.html` and `app.component.ts`.
``` html
<!-- app.component.html -->
<div id="lucide-icon"></div>
```
``` js
// app.component.ts
import { Component, OnInit } from '@angular/core';
import { createElement } from 'lucide-angular';
import { Activity } from 'lucide-angular/icons';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
ngOnInit(): void {
const div = document.getElementById('lucide-icon');
const elm = createElement(Activity);
elm.setAttribute('color', 'red'); // or set `width`, `height`, `fill`, `stroke-width`, ...
if (div) {
div.appendChild(elm);
}
}
}
```
### Method 2: User __Tag__ with __name__ property
After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`.
``` js
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { LucideAngularModule, AlarmCheck, Edit } from 'lucide-angular';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
LucideAngularModule.pick({ AlarmCheck, Edit }) // add all of icons that is imported.
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
```
``` html
<!-- app.component.html -->
<lucide-icon name="alarm-check" class="myicon"></lucide-icon>
<lucide-icon name="edit" class="myicon"></lucide-icon>
```
### Method 3: User __Tag__ with __img__ property
After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`.
``` js
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { LucideAngularModule } from 'lucide-angular';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
LucideAngularModule.pick({ })
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
```
``` xml
<!-- app.component.html -->
<lucide-icon [img]="ico1" class="myicon"></lucide-icon>
<lucide-icon [img]="ico2" class="myicon"></lucide-icon>
```
``` js
// app.component.ts
import { Component } from '@angular/core';
import { Airplay, Circle } from 'lucide-angular';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
ico1 = Airplay;
ico2 = Circle;
}
```
## Notes
### Import all icons
In `Method 2`: import all icons in `app.module.ts` by:
``` js
import { icons } from 'lucide-angular/icons';
LucideAngularModule.pick(icons)
...
```
### Tags
You can use the following tags instead of `lucide-icon`:
- lucide-angular
- i-lucide
- span-lucide
All of the above are the same

View File

@@ -0,0 +1,8 @@
# lucide_icons
Lucide Icons ([lucide.dev](https://lucide.dev)) for Flutter. Visit the website for the full list of icons
## Example
```dart
Icon(LucideIcons.activity);
```

View File

@@ -0,0 +1,79 @@
---
title: Lucide Preact
---
# Lucide Preact
Implementation of the lucide icon library for preact applications.
## Installation
```sh
yarn add lucide-preact
# or
npm install lucide-preact
```
## How to use
It's build with ESmodules so it's completely threeshakable.
Each icon can be imported as a preact component.
### Example
You can pass additional props to adjust the icon.
``` js
import { Camera } from 'lucide-preact';
// Returns PreactComponent
// Usage
const App = () => {
return <Camera color="red" size={48}/>
};
export default App;
```
### Props
| name | type | default
| ------------ | -------- | --------
| `size` | *Number* | 24
| `color` | *String* | currentColor
| `strokeWidth`| *Number* | 2
### Custom props / svg attributes
You can also pass custom props that will be added in the as attributes. With that you can modify the icons look by passing svg attributes.
``` js
// Usage
const App = () => {
return <Camera fill="red" stroke-linejoin="bevel"/>
};
```
> svg attributes in preact aren't transformed, so if want to change e.g. the `stroke-linejoin` you need to pass it in kebabcase, the way svg spec is written so. See this topic in the [preact documentation](https://preactjs.com/guide/v10/differences-to-react/#svg-inside-jsx).
### One generic icon component
It is possible to create one generic icon component to load icons.
> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly.
#### Icon Component Example
``` js
import * as icons from 'lucide-preact';
const Icon = ({name, color, size}) => {
const LucideIcon = icons[name];
return <LucideIcon color={color} size={size} />
};
export default Icon;
```

View File

@@ -0,0 +1,73 @@
# Lucide React
Implementation of the lucide icon library for react applications
## Installation
```sh
yarn add lucide-react
# or
npm install lucide-react
```
## How to use
It's build with ESmodules so it's completely threeshakable.
Each icon can be imported as a react component.
### Example
You can pass additional props to adjust the icon.
``` js
import { Camera } from 'lucide-react';
// Returns ReactComponent
// Usage
const App = () => {
return <Camera color="red" size={48}/>
};
export default App;
```
### Props
| name | type | default
| ------------ | -------- | --------
| `size` | *Number* | 24
| `color` | *String* | currentColor
| `strokeWidth`| *Number* | 2
### Custom props
You can also pass custom props that will be added in the svg as attributes.
``` js
// Usage
const App = () => {
return <Camera fill="red"/>
};
```
### One generic icon component
It is possible to create one generic icon component to load icons.
> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly.
#### Icon Component Example
``` js
import * as icons from 'lucide-react';
const Icon = ({name, color, size}) => {
const LucideIcon = icons[name];
return <LucideIcon color={color} size={size} />
};
export default Icon;
```

View File

@@ -0,0 +1,181 @@
# Lucide Static
This package include the following lucide implementations:
- All svg files
- Javascript library containing strings of svgs.
- Icon fonts
- Svg sprite
## Why lucide-static?
This package is suitable for very 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.
> ⚠️ It is not recommended to use this package for svg sprites or icon fonts for web pages/applications, for prototyping it is ok. We recommend to bundlers for web applications to make sure you only bundle the used icons from this icon library (Threeshaking). Otherwise it will load all the icons, making you webpage loading slower. Threeshaking is only available in the packages: [lucide](https://github.com/lucide-icons/lucide/tree/master/packages/lucide), [lucide-react](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-react), [lucide-vue](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue), [lucide-vue-next](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue-next), [lucide-angular](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-angular), [lucide-preact](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-preact)
## Installation
## Package Managers
```sh
yarn add lucide-static
# or
npm install lucide-static
```
### CDN
``` html
<!-- Svg File -->
<img src="https://unpkg.com/lucide-static@latest/icons/home.svg">
<!-- Icon Font -->
<style>
@font-face {
font-family: "LucideIcons";
src: url(https://unpkg.com/lucide-static@latest/font/Lucide.ttf) format("truetype");
}
</style>
```
## Usage
Checkout the [codesandbox examples](https://codesandbox.io/s/using-the-svg-sprite-lz1kk).
### SVG Files
#### Svg file as image
To use it in for example html:
``` html
<!-- Svg File -->
<img src="~lucide-static/icons/home.svg">
```
``` css
.home-icon {
background-image: url(~lucide-static/icons/home.svg)
}
```
Make sure you have the correct webpack loaders to make this work. [url-loader](https://v4.webpack.js.org/loaders/url-loader/)
#### Svg file Inline
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/).
```js
import arrowRightIcon from 'lucide-static/icons/arrow-right'
// return string of a svg
```
### SVG Sprite
You may need additional loader for this.
```html
<!-- Icon Sprite, not recommended for production! -->
<img src="lucide-static/sprite.svg#home">
<!-- or -->
<svg
width="24"
height="24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<use href="#alert-triangle" />
</svg>
<svg>
...sprite svg
</svg>
```
If you'd prefer, you can use CSS to hold your base SVG properties
```css
.lucide-icon {
width: 24px;
height: 24px;
stroke: currentColor;
fill: none;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
```
and update the svg as follows
```svg
<svg
xmlns="http://www.w3.org/2000/svg"
class="lucide-icon"
>
<use
href="#alert-triangle"
/>
</svg>
<svg>
...sprite svg
</svg>
```
### Icon Font
```css
@import("~lucide-static/font/Lucide.css")
```
```html
<div class="icon-home"></div>
```
### Node.js
To use lucide icons in your Nodejs project you can import each icon as:
```js
const { messageSquare } = require('lucide-static/lib')
```
> Note: Each icon name is in camelCase.
#### Example in node.js project
```js
const express = require('express')
const { messageSquare } = require('lucide-static/lib')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>Lucide Icons</h1>
<p>This is a lucide icon ${messageSquare}</p>
</body>
</html>
`)
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
```

View File

@@ -0,0 +1,105 @@
# Lucide Vue Next
Implementation of the lucide icon library for Vue 3 applications.
> ⚠️ This version of lucide is for Vue 3, For Vue 2 got to [lucide-vue-next](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue#lucide-vue)
## Installation
```sh
yarn add lucide-vue-next
# or
npm install lucide-vue-next
```
## How to use
It's build with ESmodules so it's completely threeshakable.
Each icon can be imported as a vue component.
### Example
You can pass additional props to adjust the icon.
``` vue
<template>
<Camera
color="red"
:size="32"
/>
</template>
<script>
// Returns Vue component
import { Camera } from 'lucide-vue-next';
export default {
name: "My Component",
components: { Camera }
}
</script>
```
### Props
| name | type | default
| ------------ | -------- | --------
| `size` | *Number* | 24
| `color` | *String* | currentColor
| `strokeWidth`| *Number* | 2
| `defaultClass`| *String* | lucide-icon
### Custom props
You can also pass custom props that will be added in the svg as attributes.
``` vue
<template>
<Camera fill="red" />
</template>
```
### One generic icon component
It is possible to create one generic icon component to load icons.
> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly.
#### Icon Component Example
``` vue
<template>
<component :is="icon" />
</template>
<script>
import * as icons from "lucide-vue-next";
export default {
props: {
name: {
type: String,
required: true,
},
},
computed: {
icon() {
return icons[this.name];
},
},
};
</script>
```
##### Then you can use it like this
``` vue
<template>
<div id="app">
<Icon name="Airplay" />
</div>
</template>
```

105
docs/packages/lucide-vue.md Normal file
View File

@@ -0,0 +1,105 @@
# Lucide Vue
Implementation of the lucide icon library for Vue applications.
> ⚠️ This version of lucide is for Vue 2, For Vue 3 got to [lucide-vue-next](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue-next#lucide-vue-next)
## Installation
```sh
yarn add lucide-vue
# or
npm install lucide-vue
```
## How to use
It's build with ESmodules so it's completely threeshakable.
Each icon can be imported as a vue component.
### Example
You can pass additional props to adjust the icon.
``` vue
<template>
<Camera
color="red"
:size="32"
/>
</template>
<script>
// Returns Vue component
import { Camera } from 'lucide-vue';
export default {
name: "My Component",
components: { Camera }
}
</script>
```
### Props
| name | type | default
| ------------ | -------- | --------
| `size` | *Number* | 24
| `color` | *String* | currentColor
| `strokeWidth`| *Number* | 2
| `defaultClass`| *String* | lucide-icon
### Custom props
You can also pass custom props that will be added in the svg as attributes.
``` vue
<template>
<Camera fill="red" />
</template>
```
### One generic icon component
It is possible to create one generic icon component to load icons.
> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly.
#### Icon Component Example
``` vue
<template>
<component :is="icon" />
</template>
<script>
import * as icons from "lucide-vue";
export default {
props: {
name: {
type: String,
required: true,
},
},
computed: {
icon() {
return icons[this.name];
},
},
};
</script>
```
##### Then you can use it like this
``` vue
<template>
<div id="app">
<Icon name="Airplay" />
</div>
</template>
```

120
docs/packages/lucide.md Normal file
View File

@@ -0,0 +1,120 @@
# Lucide
Implementation of the lucide icon library for web applications.
## Installation
### Package Managers
``` bash
npm install lucide
#or
yarn add lucide
```
### CDN
``` html
<!-- Development version -->
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
<!-- Production version -->
<script src="https://unpkg.com/lucide@latest"></script>
```
## Usage
### With unpkg
Here is a complete example with unpkg
```html
<!DOCTYPE html>
<body>
<i icon-name="volume-2" class="my-class"></i>
<i icon-name="x"></i>
<i icon-name="menu"></i>
<script src="https://unpkg.com/lucide@latest"></script>
<script>
lucide.createIcons();
</script>
</body>
```
### With ESModules
To reduce bundle size, lucide is built to be fully treeshakable.
The `createIcons` function will search for HTMLElements with the attribute `icon-name` and replace it with the svg from the given icon name.
```html
<!-- Your HTML file -->
<i icon-name="menu"></i>
```
```js
import { createIcons, icons } from 'lucide';
// Caution, this will import all the icons and bundle them.
createIcons({icons});
// Recommended way, to include only the icons you need.
import { createIcons, Menu, ArrowRight, Globe } from 'lucide';
createIcons({
icons: {
Menu,
ArrowRight,
Globe,
},
});
```
#### Additional Options
In the `createIcons` function you can pass some extra parameters to adjust the `nameAttr` or add custom attributes like for example classes.
Here is a full example:
```js
import { createIcons } from 'lucide';
createIcons({
attrs: {
class: ['my-custom-class', 'icon'],
'stroke-width': 1,
stroke: '#333',
},
nameAttr: 'icon-name', // attribute for the icon name.
});
```
#### Treeshake the library, only use the icons you use
```js
import { createIcons, Menu, ArrowRight, Globe } from 'lucide';
createIcons({
icons: {
Menu,
ArrowRight,
Globe,
},
});
```
#### Custom Element binding
```js
import { createElement, Menu } from 'lucide';
const menuIcon = createElement(Menu); // Returns HTMLElement (svg)
// set custom attributes with browser native functions
menuIcon.setAttribute('stroke', '#333');
menuIcon.classList.add('my-icon-class');
// Append HTMLElement in webpage
const myApp = document.getElementById('app');
myApp.appendChild(menuIcon);
```

1935
docs/templates/illustrator_template.ai vendored Normal file

File diff suppressed because one or more lines are too long

17
icons/alarm-clock-off.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="M19.94 14A8 8 0 0010 5.25m8.13 12.89A8 8 0 116.87 6.86" />
<path d="M22 6l-3-3" />
<path d="M6 19l-2 2" />
<path d="M2 2l20 20" />
<path d="M4 4L2 6" />
</svg>

After

Width:  |  Height:  |  Size: 380 B

View File

@@ -9,7 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="21 8 21 21 3 21 3 8" />
<rect x="1" y="3" width="22" height="5" />
<line x1="10" y1="12" x2="14" y2="12" />
<path d="M20 9v9a2 2 0 01-2 2H6a2 2 0 01-2-2V9m16-5H4a2 2 0 00-2 2v1a2 2 0 002 2h16a2 2 0 002-2V6a2 2 0 00-2-2zm-10 9h4" />
</svg>

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="17 11 21 7 17 3" />
<line x1="21" y1="7" x2="9" y2="7" />
<polyline points="7 21 3 17 7 13" />
<line x1="15" y1="17" x2="3" y2="17" />
</svg>

After

Width:  |  Height:  |  Size: 369 B

View File

@@ -9,7 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M7 7H3.78A1.73 1.73 0 002 8.67v6.66A1.73 1.73 0 003.78 17H6m8-10h2.22A1.73 1.73 0 0118 8.67v6.66A1.73 1.73 0 0116.22 17H13" />
<path d="M14 7h2a2 2 0 012 2v6a2 2 0 01-2 2h-3" />
<path d="M7 7H4a2 2 0 00-2 2v6a2 2 0 002 2h2" />
<polyline points="11 7 8 12 12 12 9 17" />
<line x1="22" x2="22" y1="11" y2="13" />
</svg>

Before

Width:  |  Height:  |  Size: 434 B

After

Width:  |  Height:  |  Size: 400 B

14
icons/bookmark-minus.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 21l-7-4-7 4V5a2 2 0 012-2h10a2 2 0 012 2v16z" />
<line x1="15" x2="9" y1="10" y2="10" />
</svg>

After

Width:  |  Height:  |  Size: 314 B

15
icons/bookmark-plus.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 21l-7-4-7 4V5a2 2 0 012-2h10a2 2 0 012 2v16z" />
<line x1="12" x2="12" y1="7" y2="13" />
<line x1="15" x2="9" y1="10" y2="10" />
</svg>

After

Width:  |  Height:  |  Size: 356 B

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z" />
<path d="M19 21l-7-4-7 4V5a2 2 0 012-2h10a2 2 0 012 2v16z" />
</svg>

Before

Width:  |  Height:  |  Size: 269 B

After

Width:  |  Height:  |  Size: 272 B

14
icons/chevron-first.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="17 18 11 12 17 6" />
<path d="M7 6v12" />
</svg>

After

Width:  |  Height:  |  Size: 272 B

14
icons/chevron-last.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="7 18 13 12 7 6" />
<path d="M17 6v12" />
</svg>

After

Width:  |  Height:  |  Size: 271 B

14
icons/clock-1.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<polyline points="12 6 12 12 14.5 8" />
</svg>

After

Width:  |  Height:  |  Size: 286 B

14
icons/clock-10.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 284 B

14
icons/clock-11.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<polyline points="12 6 12 12 9.5 8" />
</svg>

After

Width:  |  Height:  |  Size: 285 B

14
icons/clock-12.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 279 B

14
icons/clock-2.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 285 B

14
icons/clock-3.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 287 B

14
icons/clock-4.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 285 B

14
icons/clock-5.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<polyline points="12 6 12 12 14.5 16" />
</svg>

After

Width:  |  Height:  |  Size: 287 B

14
icons/clock-6.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 287 B

14
icons/clock-7.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<polyline points="12 6 12 12 9.5 16" />
</svg>

After

Width:  |  Height:  |  Size: 286 B

14
icons/clock-8.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 284 B

14
icons/clock-9.svg Normal file
View File

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

After

Width:  |  Height:  |  Size: 286 B

17
icons/currency.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"
>
<circle cx="12" cy="12" r="8" />
<line x1="3" y1="3" x2="6" y2="6" />
<line x1="21" y1="3" x2="18" y2="6" />
<line x1="3" y1="21" x2="6" y2="18" />
<line x1="21" y1="21" x2="18" y2="18" />
</svg>

After

Width:  |  Height:  |  Size: 407 B

View File

@@ -0,0 +1,13 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M17 22V2L7 7l10 5" />
</svg>

After

Width:  |  Height:  |  Size: 241 B

View File

@@ -0,0 +1,13 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M7 22V2l10 5-10 5" />
</svg>

After

Width:  |  Height:  |  Size: 241 B

13
icons/folder-open.svg Normal file
View File

@@ -0,0 +1,13 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 17l2-5h14l-3 8a2 2 0 01-2 1H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h7a2 2 0 012 2v4" />
</svg>

After

Width:  |  Height:  |  Size: 305 B

16
icons/gem.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polygon points="6 3 18 3 22 9 12 22 2 9" />
<path d="M12 22l4-13-3-6" />
<path d="M12 22L8 9l3-6" />
<path d="M2 9h20" />
</svg>

After

Width:  |  Height:  |  Size: 339 B

14
icons/graduation-cap.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M22 10v6M2 10l10-5 10 5-10 5z" />
<path d="M6 12v5c3 3 9 3 12 0v-5" />
</svg>

After

Width:  |  Height:  |  Size: 292 B

15
icons/import.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 3v12" />
<path d="M8 11l4 4 4-4" />
<path d="M8 5H4a2 2 0 00-2 2v10a2 2 0 002 2h16a2 2 0 002-2V7a2 2 0 00-2-2h-4" />
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -1,7 +1,7 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"

Before

Width:  |  Height:  |  Size: 304 B

After

Width:  |  Height:  |  Size: 304 B

18
icons/landmark.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="3" y1="22" x2="21" y2="22" />
<line x1="6" y1="18" x2="6" y2="11" />
<line x1="10" y1="18" x2="10" y2="11" />
<line x1="14" y1="18" x2="14" y2="11" />
<line x1="18" y1="18" x2="18" y2="11" />
<polygon points="12 2 20 7 4 7" />
</svg>

After

Width:  |  Height:  |  Size: 457 B

16
icons/list-minus.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M11 12H3" />
<path d="M16 6H3" />
<path d="M16 18H3" />
<path d="M21 12h-6" />
</svg>

After

Width:  |  Height:  |  Size: 304 B

17
icons/list-plus.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="M11 12H3" />
<path d="M16 6H3" />
<path d="M16 18H3" />
<path d="M18 9v6" />
<path d="M21 12h-6" />
</svg>

After

Width:  |  Height:  |  Size: 327 B

17
icons/list-x.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="M11 12H3" />
<path d="M16 6H3" />
<path d="M16 18H3" />
<path d="M19 10l-4 4" />
<path d="M15 10l4 4" />
</svg>

After

Width:  |  Height:  |  Size: 332 B

14
icons/megaphone.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 11l18-5v12L3 14v-3z" />
<path d="M11.6 16.8a3 3 0 11-5.8-1.6" />
</svg>

After

Width:  |  Height:  |  Size: 289 B

14
icons/mountain-snow.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M8 3l4 8 5-5 5 15H2L8 3z" />
<path d="M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19" />
</svg>

After

Width:  |  Height:  |  Size: 328 B

13
icons/mountain.svg Normal file
View File

@@ -0,0 +1,13 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M8 3l4 8 5-5 5 15H2L8 3z" />
</svg>

After

Width:  |  Height:  |  Size: 248 B

View File

@@ -10,5 +10,5 @@
stroke-linejoin="round"
>
<line x1="18" y1="2" x2="22" y2="6" />
<path d="M7.5 20.5L19 9l-4-4L3.5 16.5 2 22l5.5-1.5z" />
<path d="M7.5 20.5L19 9l-4-4L3.5 16.5 2 22z" />
</svg>

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 299 B

15
icons/piggy-bank.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z" />
<path d="M2 9v1c0 1.1.9 2 2 2h1" />
<path d="M16 11h0" />
</svg>

After

Width:  |  Height:  |  Size: 405 B

15
icons/pin.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 21v-7" />
<path d="M9 3v5l-2 4v2h10m0 0h-5m5 0v-2l-2-4V3" />
<path d="M7 3h10" />
</svg>

After

Width:  |  Height:  |  Size: 309 B

14
icons/quote.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" />
<path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" />
</svg>

After

Width:  |  Height:  |  Size: 506 B

16
icons/rocking-chair.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="3.5 2 6.5 12.5 18 12.5" />
<line x1="9.5" y1="12.5" x2="5.5" y2="20" />
<line x1="15" y1="12.5" x2="18.5" y2="20" />
<path d="M2.75 18a13 13 0 0018.5 0" />
</svg>

After

Width:  |  Height:  |  Size: 390 B

17
icons/scan-line.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="M3 7V5a2 2 0 012-2h2" />
<path d="M17 3h2a2 2 0 012 2v2" />
<path d="M21 17v2a2 2 0 01-2 2h-2" />
<path d="M7 21H5a2 2 0 01-2-2v-2" />
<line x1="7" y1="12" x2="17" y2="12" />
</svg>

After

Width:  |  Height:  |  Size: 402 B

16
icons/scan.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 7V5a2 2 0 012-2h2" />
<path d="M17 3h2a2 2 0 012 2v2" />
<path d="M21 17v2a2 2 0 01-2 2h-2" />
<path d="M7 21H5a2 2 0 01-2-2v-2" />
</svg>

After

Width:  |  Height:  |  Size: 360 B

16
icons/settings-2.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 7h-9" />
<path d="M14 17H5" />
<circle cx="17" cy="17" r="3" />
<circle cx="7" cy="7" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -9,12 +9,12 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z" />
<path d="M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z" />
<path d="M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z" />
<path d="M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z" />
<path d="M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z" />
<path d="M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z" />
<path d="M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z" />
<path d="M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z" />
<rect x="13" y="2" width="3" height="8" rx="1.5" />
<path d="M19 8.5v1.5h1.5a1.5 1.5 0 1 0-1.5-1.5" />
<rect x="8" y="14" width="3" height="8" rx="1.5" />
<path d="M5 15.5v-1.5h-1.5a1.5 1.5 0 1 0 1.5 1.5" />
<rect x="14" y="13" width="8" height="3" rx="1.5" />
<path d="M15.5 19h-1.5v1.5a1.5 1.5 0 1 0 1.5-1.5" />
<rect x="2" y="8" width="8" height="3" rx="1.5" />
<path d="M8.5 5h1.5v-1.5a1.5 1.5 0 1 0-1.5 1.5" />
</svg>

Before

Width:  |  Height:  |  Size: 974 B

After

Width:  |  Height:  |  Size: 640 B

View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect x="5" y="2" width="14" height="20" rx="2" ry="2" />
<path d="M12.667 8L10 12h4l-2.667 4" />
</svg>

After

Width:  |  Height:  |  Size: 310 B

View File

@@ -10,5 +10,5 @@
stroke-linejoin="round"
>
<rect x="5" y="2" width="14" height="20" rx="2" ry="2" />
<line x1="12" y1="18" x2="12.01" y2="18" />
<path d="M12 18h.01" />
</svg>

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -1,7 +1,7 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
@@ -9,9 +9,9 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M11 5h10" />
<path d="M11 5h4" />
<path d="M11 9h7" />
<path d="M11 13h4" />
<path d="M11 13h10" />
<path d="M3 17l3 3 3-3" />
<path d="M6 18V4" />
</svg>

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 331 B

View File

@@ -1,7 +1,7 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
@@ -9,9 +9,9 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M11 5h4" />
<path d="M11 5h10" />
<path d="M11 9h7" />
<path d="M11 13h10" />
<path d="M11 13h4" />
<path d="M3 17l3 3 3-3" />
<path d="M6 18V4" />
</svg>

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 331 B

16
icons/timer-off.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2h4" />
<path d="M7.43 7.433A8 8 0 0118.566 18.57M4.582 11A8 8 0 0015 21.419" />
<path d="M2 2l20 20" />
<path d="M12 12v-2" />
</svg>

After

Width:  |  Height:  |  Size: 357 B

16
icons/timer-reset.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 2h4" />
<path d="M12 14v-4" />
<path d="M4 13a8 8 0 018-7 8 8 0 11-5.3 14L4 17.6" />
<path d="M9 17H4v5" />
</svg>

After

Width:  |  Height:  |  Size: 337 B

View File

@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z" />
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5 0-.28-.03-.56-.08-.83A7.72 7.72 0 0023 3z" />
</svg>

Before

Width:  |  Height:  |  Size: 387 B

After

Width:  |  Height:  |  Size: 388 B

15
icons/verified.svg Executable file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 3a3.6 3.6 0 00-3.05 1.68 3.6 3.6 0 00-.9-.1 3.6 3.6 0 00-2.42 1.06 3.6 3.6 0 00-.94 3.32A3.6 3.6 0 003 12a3.6 3.6 0 001.69 3.05 3.6 3.6 0 00.95 3.32 3.6 3.6 0 003.35.96A3.6 3.6 0 0012 21a3.6 3.6 0 003.04-1.67 3.6 3.6 0 004.3-4.3A3.6 3.6 0 0021 12a3.6 3.6 0 00-1.67-3.04v0a3.6 3.6 0 00-4.3-4.3A3.6 3.6 0 0012 3z" />
<path d="M15 10l-4 4" />
<path d="M9 12l2 2" />
</svg>

After

Width:  |  Height:  |  Size: 590 B

21
icons/wand.svg Normal file
View File

@@ -0,0 +1,21 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 4V2" />
<path d="M15 16v-2" />
<path d="M8 9h2" />
<path d="M20 9h2" />
<path d="M17.8 11.8L19 13" />
<path d="M15 9h0" />
<path d="M17.8 6.2L19 5" />
<path d="M3 21l9-9" />
<path d="M12.2 6.2L11 5" />
</svg>

After

Width:  |  Height:  |  Size: 441 B

16
icons/wrap-text.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="3" y1="6" x2="21" y2="6" />
<path d="M3 12h15a3 3 0 110 6h-4" />
<polyline points="16 16 14 18 16 20" />
<line x1="3" y1="18" x2="10" y2="18" />
</svg>

After

Width:  |  Height:  |  Size: 371 B

View File

@@ -5,13 +5,20 @@
"packages/*"
],
"nohoist": [
"**/jest", "**/jest/**",
"**/jasmine", "**/jasmine/**",
"**/react", "**/react/**",
"**/testing-library__jest-dom", "**/testing-library__jest-dom/**",
"**/testing-library__react-hooks", "**/testing-library__react-hooks/**",
"**/react-dom", "**/react-dom/**",
"**/react-test-renderer", "**/react-test-renderer/**"
"**/jest",
"**/jest/**",
"**/jasmine",
"**/jasmine/**",
"**/react",
"**/react/**",
"**/testing-library__jest-dom",
"**/testing-library__jest-dom/**",
"**/testing-library__react-hooks",
"**/testing-library__react-hooks/**",
"**/react-dom",
"**/react-dom/**",
"**/react-test-renderer",
"**/react-test-renderer/**"
]
},
"scripts": {
@@ -23,7 +30,9 @@
"lucide-preact": "yarn workspace lucide-preact",
"lucide-vue": "yarn workspace lucide-vue",
"lucide-vue-next": "yarn workspace lucide-vue-next",
"lucide-static": "yarn workspace lucide-static",
"build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env",
"build:outline-icons": "babel-node ./scripts/outlineSvg.js --presets @babel/env",
"optimize": "babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
"addtags": "babel-node ./scripts/addMissingKeysToTags.js --presets @babel/env",
"generate:changelog": "babel-node ./scripts/generateChangelog.js --presets @babel/env"
@@ -68,5 +77,8 @@
},
"lint-staged": {
"icons/*.svg": "npx babel-node ./scripts/optimizeStagedSvgs.js --presets @babel/env"
},
"dependencies": {
"svg-outline-stroke": "^1.3.1"
}
}

View File

@@ -46,6 +46,9 @@ testem.log
.DS_Store
Thumbs.db
#npm-yarn
# npm-yarn
package-lock.json
src/createElement.js
# angular cache
.angular/cache

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-angular",
"description": "Lucide Angular package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
"version": "0.15.22",
"description": "A Lucide icon library package for Angular applications",
"version": "0.16.22",
"author": "SMAH1",
"license": "ISC",
"homepage": "https://lucide.dev",
@@ -23,7 +23,7 @@
],
"scripts": {
"build": "yarn clean && yarn build:icons && yarn build:ng",
"clean": "rm -rf dist && rm -rf ./src/icons/*.ts",
"clean": "npx shx rm -rf dist && npx shx rm -rf ./src/icons/*.ts",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-angular/src --templateSrc=../packages/lucide-angular/scripts/exportTemplate --iconFileExtention=.ts --exportFileName=index.ts",
"build:ng": "ng build --prod",
"test:headless": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI",
@@ -33,35 +33,31 @@
"postinstall": "ngcc"
},
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^11.2.6",
"@angular/core": "^11.2.6"
"tslib": "^2.3.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.1102.5",
"@angular/cli": "~11.2.5",
"@angular/common": "~11.2.6",
"@angular/compiler": "~11.2.6",
"@angular/compiler-cli": "~11.2.6",
"@angular/core": "~11.2.6",
"@angular/platform-browser": "~11.2.6",
"@angular/platform-browser-dynamic": "~11.2.6",
"@types/jasmine": "~3.6.0",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~6.1.0",
"@angular/cli": "~11.2.15",
"@angular/common": "~11.2.14",
"@angular/compiler": "~11.2.14",
"@angular/compiler-cli": "~11.2.14",
"@angular/core": "~11.2.14",
"@angular/platform-browser": "~11.2.14",
"@angular/platform-browser-dynamic": "~11.2.14",
"@types/jasmine": "~3.10.2",
"@types/node": "^16.11.7",
"codelyzer": "^6.0.2",
"jasmine-core": "~3.10.1",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.3.8",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"ng-packagr": "^11.0.0",
"karma-jasmine": "~4.0.1",
"karma-jasmine-html-reporter": "^1.7.0",
"ng-packagr": "^11.2.4",
"protractor": "~7.0.0",
"puppeteer": "^8.0.0",
"ts-node": "~8.3.0",
"ts-node": "~10.4.0",
"tslint": "~6.1.0",
"typescript": "~4.1.5"
}

View File

@@ -1,675 +0,0 @@
// Global variable with Figma's plugin API.
declare const figma: PluginAPI
declare const __html__: string
interface PluginAPI {
readonly currentPage: PageNode
// Root of the current Figma document.
readonly root: DocumentNode
// API for accessing viewport information.
readonly viewport: ViewportAPI
// call this once your plugin is finished executing.
closePlugin(): void
// Command that the user chose through menu when launching the plugin.
readonly command: string
// Finds a node by its id. If not found, returns null.
getNodeById(id: string): BaseNode | null
// Finds a style by its id. If not found, returns null.
getStyleById(id: string): BaseStyle | null
// Access browser APIs and/or show UI to the user.
showUI(html: string, options?: ShowUIOptions): void
readonly ui: UIAPI
// Lets you store persistent data on the user's local machine
readonly clientStorage: ClientStorageAPI
// This value is returned when a property is in a "mixed" state.
// In order to check if a property is in a mixed state, always
// compare directly to this value. I.e.
// `if (node.cornerRadius === figma.mixed) { ... }`
mixed: symbol
// Creates new nodes. Nodes will start off inserted
// into the current page.
// To move them elsewhere use `appendChild` or `insertChild`
createRectangle(): RectangleNode
createLine(): LineNode
createEllipse(): EllipseNode
createPolygon(): PolygonNode
createStar(): StarNode
createVector(): VectorNode
createText(): TextNode
createBooleanOperation(): BooleanOperationNode
createFrame(): FrameNode
createComponent(): ComponentNode
createPage(): PageNode
createSlice(): SliceNode
// Creates styles. A style's id can be assigned to
// node properties like textStyleId, fillStyleId, etc.
createPaintStyle(): PaintStyle
createTextStyle(): TextStyle
createEffectStyle(): EffectStyle
createGridStyle(): GridStyle
// These let you insert stuff from the team library if you have the key
importComponentByKeyAsync(key: string): Promise<ComponentNode>
importStyleByKeyAsync(key: string): Promise<BaseStyle>
// Return all fonts currently supported for use with the "fontName" property
listAvailableFontsAsync(): Promise<Font[]>
// You must await the promise returned here before being able to use "fontName"
loadFontAsync(fontName: FontName): Promise<void>
// Creates node from an SVG string.
createNodeFromSvg(svg: string): FrameNode
// Creates an Image object using the provided file contents.
createImage(data: Uint8Array): Image
// Groups every node in `nodes` under a new group.
group(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): FrameNode
// Flattens every node in `nodes` into a single vector network.
flatten(nodes: ReadonlyArray<BaseNode>, parent?: BaseNode & ChildrenMixin, index?: number): VectorNode
}
interface ClientStorageAPI {
// This stores information in the browser, not on the server. It's similar to localStorage, but is
// asynchronous, and allows storing objects, arrays, strings, numbers, booleans, null, undefined and Uint8Arrays.
getAsync(key: string): Promise<any | undefined>
setAsync(key: string, value: any): Promise<void>
}
type ShowUIOptions = {
visible?: boolean, // defaults to true
width?: number, // defaults to 300
height?: number, // defaults to 200
}
interface UIAPI {
show(): void
hide(): void
resize(width: number, height: number): void
close(): void
// Sends a message to the iframe.
postMessage(pluginMessage: any): void
// Registers a callback for messages sent by the iframe.
onmessage: ((pluginMessage: any) => void) | undefined
}
interface ViewportAPI {
center: { x: number, y: number }
// 1.0 means 100% zoom, 0.5 means 50% zoom.
zoom: number
// Adjust the viewport such that it shows the provided nodes.
scrollAndZoomIntoView(nodes: ReadonlyArray<BaseNode>)
}
// manifest.json format
interface ManifestJson {
// Name of the plugin.
name: string
// Version of the runtime that the plugin uses, e.g. '0.5.0'.
version: string
// The file name that contains the plugin code.
script: string
// The file name that contains the html code made available in script.
html?: string
// Shell command to be executed before the contents of the `html` and `script` files are read.
build?: string
// Menu items to show up in UI.
menu?: ManifestMenuItem[]
}
type ManifestMenuItem =
// Clickable menu item.
{ name: string, command: string } |
// Separator
{ separator: true } |
// Submenu
{ name: string, menu: ManifestMenuItem[] }
////////////////////////////////////////////////////////////////////////////////
// Values
// These are the top two rows of a 3x3 matrix. This is enough to represent
// translation, rotation, and skew.
type Transform = [
[number, number, number],
[number, number, number]
]
interface Vector {
readonly x: number
readonly y: number
}
interface RGB {
readonly r: number
readonly g: number
readonly b: number
}
interface RGBA {
readonly r: number
readonly g: number
readonly b: number
readonly a: number
}
interface FontName {
readonly family: string
readonly style: string
}
interface ArcData {
readonly startingAngle: number
readonly endingAngle: number
readonly innerRadius: number
}
interface ShadowEffect {
readonly type: "DROP_SHADOW" | "INNER_SHADOW"
readonly color: RGBA
readonly offset: Vector
readonly radius: number
readonly visible: boolean
readonly blendMode: BlendMode
}
interface BlurEffect {
readonly type: "LAYER_BLUR" | "BACKGROUND_BLUR"
readonly radius: number
readonly visible: boolean
}
type Effect = ShadowEffect | BlurEffect
type ConstraintType = "MIN" | "CENTER" | "MAX" | "STRETCH" | "SCALE"
interface Constraints {
readonly horizontal: ConstraintType
readonly vertical: ConstraintType
}
interface ColorStop {
readonly position: number
readonly color: RGBA
}
interface SolidPaint {
readonly type: "SOLID"
readonly color: RGB
readonly visible?: boolean
readonly opacity?: number
}
interface GradientPaint {
readonly type: "GRADIENT_LINEAR" | "GRADIENT_RADIAL" | "GRADIENT_ANGULAR" | "GRADIENT_DIAMOND"
readonly gradientTransform: Transform
readonly gradientStops: ReadonlyArray<ColorStop>
readonly visible?: boolean
readonly opacity?: number
}
interface ImagePaint {
readonly type: "IMAGE"
readonly scaleMode: "FILL" | "FIT" | "CROP" | "TILE"
readonly image: Image | null
readonly imageTransform?: Transform // setting for "CROP"
readonly scalingFactor?: number // setting for "TILE"
readonly visible?: boolean
readonly opacity?: number
}
type Paint = SolidPaint | GradientPaint | ImagePaint
interface Guide {
readonly axis: "X" | "Y"
readonly offset: number
}
interface RowsColsLayoutGrid {
readonly pattern: "ROWS" | "COLUMNS"
readonly alignment: "MIN" | "STRETCH" | "CENTER"
readonly gutterSize: number
readonly count: number // Infinity when "Auto" is set in the UI
readonly sectionSize?: number // Not set for alignment: "STRETCH"
readonly offset?: number // Not set for alignment: "CENTER"
readonly visible?: boolean
readonly color?: RGBA
}
interface GridLayoutGrid {
readonly pattern: "GRID"
readonly sectionSize: number
readonly visible?: boolean
readonly color?: RGBA
}
type LayoutGrid = RowsColsLayoutGrid | GridLayoutGrid
interface ExportSettingsImage {
format: "JPG" | "PNG"
contentsOnly?: boolean // defaults to true
suffix?: string
constraint?: { // defaults to unscaled ({ type: "SCALE", value: 1 })
type: "SCALE" | "WIDTH" | "HEIGHT"
value: number
}
}
interface ExportSettingsSVG {
format: "SVG"
contentsOnly?: boolean // defaults to true
suffix?: string
svgOutlineText?: boolean // defaults to true
svgIdAttribute?: boolean // defaults to false
svgSimplifyStroke?: boolean // defaults to true
}
interface ExportSettingsPDF {
format: "PDF"
contentsOnly?: boolean // defaults to true
suffix?: string
}
type ExportSettings = ExportSettingsImage | ExportSettingsSVG | ExportSettingsPDF
type WindingRule = "NONZERO" | "EVENODD"
interface VectorVertex {
readonly x: number
readonly y: number
readonly strokeCap?: StrokeCap
readonly strokeJoin?: StrokeJoin
readonly cornerRadius?: number
readonly handleMirroring?: HandleMirroring
}
interface VectorSegment {
readonly start: number
readonly end: number
readonly tangentStart?: Vector // Defaults to { x: 0, y: 0 }
readonly tangentEnd?: Vector // Defaults to { x: 0, y: 0 }
}
interface VectorRegion {
readonly windingRule: WindingRule
readonly loops: ReadonlyArray<ReadonlyArray<number>>
}
interface VectorNetwork {
readonly vertices: ReadonlyArray<VectorVertex>
readonly segments: ReadonlyArray<VectorSegment>
readonly regions?: ReadonlyArray<VectorRegion> // Defaults to []
}
interface VectorPath {
// Similar to the svg fill-rule
// "NONE" means an open path won't have a fill
readonly windingRule: WindingRule | "NONE"
readonly data: string
}
type VectorPaths = ReadonlyArray<VectorPath>
interface NumberWithUnits {
readonly value: number
readonly units: "PIXELS" | "PERCENT"
}
type BlendMode =
"PASS_THROUGH" |
"NORMAL" |
"DARKEN" |
"MULTIPLY" |
"LINEAR_BURN" |
"COLOR_BURN" |
"LIGHTEN" |
"SCREEN" |
"LINEAR_DODGE" |
"COLOR_DODGE" |
"OVERLAY" |
"SOFT_LIGHT" |
"HARD_LIGHT" |
"DIFFERENCE" |
"EXCLUSION" |
"HUE" |
"SATURATION" |
"COLOR" |
"LUMINOSITY"
interface Font {
fontName: FontName
}
////////////////////////////////////////////////////////////////////////////////
// Mixins
interface BaseNodeMixin {
readonly id: string
readonly parent: (BaseNode & ChildrenMixin) | null
name: string
visible: boolean
locked: boolean
removed: boolean
toString(): string
remove(): void
// Attach custom data to a node. Only your plugin will be able to read this.
getPluginData(key: string): string
setPluginData(key: string, value: string): void
// Attach custom data to a node. All plugins will be able to read this.
// Namespace is a string that must be at least 3 alphanumeric characters, and should
// be a name related to your plugin. This is a mandatory argument to avoid multiple
// multiple plugins adding keys like "data" and colliding with each other. Other
// plugins will still be able to read shared plugin data as long as they know the
// namespace you use.
getSharedPluginData(namespace: string, key: string): string
setSharedPluginData(namespace: string, key: string, value: string): void
}
interface ChildrenMixin {
// Sorted back-to-front. I.e. the top-most child is last in this array.
readonly children: ReadonlyArray<BaseNode>
// Adds to the end of the .children array. I.e. visually on top of all other
// children.
appendChild(child: BaseNode): void
insertChild(index: number, child: BaseNode): void
findAll(callback?: (node: BaseNode) => boolean): ReadonlyArray<BaseNode>
findOne(callback: (node: BaseNode) => boolean): BaseNode | null
}
interface LayoutMixin {
readonly absoluteTransform: Transform
relativeTransform: Transform
x: number // The same as "relativeTransform[0][2]"
y: number // The same as "relativeTransform[1][2]"
rotation: number // The angle of the x axis of "relativeTransform" in degrees. Returns values from -180 to 180.
readonly size: Vector
readonly width: number // The same as "size.x"
readonly height: number // The same as "size.y"
// Resizes the node. If children of the node has constraints, it applies those constraints
// width and height must be >= 0.01
resize(width: number, height: number): void
// Resizes the node. Children of the node are never resized, even if those children have
// constraints. width and height must be >= 0.01
resizeWithoutConstraints(width: number, height: number): void
constraints: Constraints
}
interface BlendMixin {
opacity: number
blendMode: BlendMode
isMask: boolean
effects: ReadonlyArray<Effect>
effectStyleId: string
}
interface FrameMixin {
backgrounds: ReadonlyArray<Paint>
layoutGrids: ReadonlyArray<LayoutGrid>
clipsContent: boolean
guides: ReadonlyArray<Guide>
gridStyleId: string
backgroundStyleId: string
}
type StrokeCap = "NONE" | "ROUND" | "SQUARE" | "ARROW_LINES" | "ARROW_EQUILATERAL"
type StrokeJoin = "MITER" | "BEVEL" | "ROUND"
type HandleMirroring = "NONE" | "ANGLE" | "ANGLE_AND_LENGTH"
interface GeometryMixin {
fills: ReadonlyArray<Paint> | symbol // This can return figma.mixed on TEXT nodes
strokes: ReadonlyArray<Paint>
strokeWeight: number
strokeAlign: "CENTER" | "INSIDE" | "OUTSIDE"
strokeCap: StrokeCap | symbol // This can return figma.mixed on VECTOR nodes if vertices have different strokeCap values
strokeJoin: StrokeJoin | symbol // This can return figma.mixed on VECTOR nodes if vertices have different strokeJoin values
dashPattern: ReadonlyArray<number>
fillStyleId: string | symbol // This can return figma.mixed on TEXT nodes
strokeStyleId: string
}
interface CornerMixin {
// This can return figma.mixed on VECTOR nodes if vertices have different cornerRadius values,
// and on RECTANGLE nodes if node.topLeftRadius etc has different values
cornerRadius: number | symbol
cornerSmoothing: number
}
interface ExportMixin {
exportSettings: ExportSettings[]
exportAsync(settings?: ExportSettings): Promise<Uint8Array> // Defaults to PNG format
}
////////////////////////////////////////////////////////////////////////////////
// Nodes
interface DocumentNode extends BaseNodeMixin, ChildrenMixin {
readonly type: "DOCUMENT"
clone(): DocumentNode // Note: this always throws an error
}
interface PageNode extends BaseNodeMixin, ChildrenMixin, ExportMixin {
readonly type: "PAGE"
clone(): PageNode // cloned node starts off inserted into current page
guides: ReadonlyArray<Guide>
selection: ReadonlyArray<BaseNode>
}
interface FrameNode extends BaseNodeMixin, BlendMixin, ChildrenMixin, FrameMixin, LayoutMixin, ExportMixin {
readonly type: "FRAME" | "GROUP"
clone(): FrameNode // cloned node starts off inserted into current page
}
interface SliceNode extends BaseNodeMixin, LayoutMixin, ExportMixin {
readonly type: "SLICE"
clone(): SliceNode // cloned node starts off inserted into current page
}
interface RectangleNode extends BaseNodeMixin, BlendMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "RECTANGLE"
clone(): RectangleNode // cloned node starts off inserted into current page
topLeftRadius: number
topRightRadius: number
bottomLeftRadius: number
bottomRightRadius: number
}
interface LineNode extends BaseNodeMixin, BlendMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "LINE"
clone(): LineNode // cloned node starts off inserted into current page
}
interface EllipseNode extends BaseNodeMixin, BlendMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "ELLIPSE"
clone(): EllipseNode // cloned node starts off inserted into current page
arcData: ArcData
}
interface PolygonNode extends BaseNodeMixin, BlendMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "POLYGON"
clone(): PolygonNode // cloned node starts off inserted into current page
pointCount: number
}
interface StarNode extends BaseNodeMixin, BlendMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "STAR"
clone(): StarNode // cloned node starts off inserted into current page
pointCount: number
// This is a percentage value from 0 to 1
innerRadius: number
}
interface VectorNode extends BaseNodeMixin, BlendMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "VECTOR"
clone(): VectorNode // cloned node starts off inserted into current page
vectorNetwork: VectorNetwork
vectorPaths: VectorPaths
handleMirroring: HandleMirroring | symbol // This can return figma.mixed if vertices have different handleMirroring values
}
interface TextNode extends BaseNodeMixin, BlendMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "TEXT"
clone(): TextNode // cloned node starts off inserted into current page
characters: string
textAlignHorizontal: "LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED"
textAlignVertical: "TOP" | "CENTER" | "BOTTOM"
textAutoResize: "NONE" | "WIDTH_AND_HEIGHT" | "HEIGHT"
paragraphIndent: number
paragraphSpacing: number
autoRename: boolean
// These properties can all return figma.mixed if the text has multiple values for the property
textStyleId: string | symbol
fontSize: number | symbol
fontName: FontName | symbol
textCase: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | symbol
textDecoration: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | symbol
letterSpacing: NumberWithUnits | symbol
lineHeight: NumberWithUnits | symbol
}
interface ComponentNode extends BaseNodeMixin, BlendMixin, ChildrenMixin, FrameMixin, LayoutMixin, ExportMixin {
readonly type: "COMPONENT"
clone(): ComponentNode // cloned node starts off inserted into current page
createInstance(): InstanceNode // instance starts off inserted into current page
description: string
readonly remote: boolean
readonly key: string // The key to use with "importComponentByKeyAsync"
}
interface InstanceNode extends BaseNodeMixin, BlendMixin, ChildrenMixin, FrameMixin, LayoutMixin, ExportMixin {
readonly type: "INSTANCE"
clone(): InstanceNode // cloned node starts off inserted into current page
masterComponent: ComponentNode
}
interface BooleanOperationNode extends BaseNodeMixin, BlendMixin, ChildrenMixin, CornerMixin, GeometryMixin, LayoutMixin, ExportMixin {
readonly type: "BOOLEAN_OPERATION"
clone(): BooleanOperationNode // cloned node starts off inserted into current page
booleanOperation: "UNION" | "INTERSECT" | "SUBTRACT" | "EXCLUDE"
}
type BaseNode =
DocumentNode |
PageNode |
SliceNode |
FrameNode |
ComponentNode |
InstanceNode |
BooleanOperationNode |
VectorNode |
StarNode |
LineNode |
EllipseNode |
PolygonNode |
RectangleNode |
TextNode
type NodeType =
"DOCUMENT" |
"PAGE" |
"SLICE" |
"FRAME" |
"GROUP" |
"COMPONENT" |
"INSTANCE" |
"BOOLEAN_OPERATION" |
"VECTOR" |
"STAR" |
"LINE" |
"ELLIPSE" |
"POLYGON" |
"RECTANGLE" |
"TEXT"
////////////////////////////////////////////////////////////////////////////////
// Styles
type StyleType = "PAINT" | "TEXT" | "EFFECT" | "GRID"
interface BaseStyle {
// The string to uniquely identify a style by
readonly id: string
readonly type: StyleType
name: string // Note: setting this also sets "autoRename" to false on TextNodes
description: string
remote: boolean
readonly key: string // The key to use with "importStyleByKeyAsync"
remove(): void
}
interface PaintStyle extends BaseStyle {
type: "PAINT"
paints: ReadonlyArray<Paint>
}
interface TextStyle extends BaseStyle {
type: "TEXT"
fontSize: number
textDecoration: "NONE" | "UNDERLINE" | "STRIKETHROUGH"
fontName: FontName
letterSpacing: NumberWithUnits
lineHeight: NumberWithUnits
paragraphIndent: number
paragraphSpacing: number
textCase: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE"
}
interface EffectStyle extends BaseStyle {
type: "EFFECT"
effects: ReadonlyArray<Paint>
}
interface GridStyle extends BaseStyle {
type: "GRID"
layoutGrids: ReadonlyArray<LayoutGrid>
}
////////////////////////////////////////////////////////////////////////////////
// Other
interface Image {
// Returns a unique hash for the image
readonly hash: string
// The contents of the image file
getBytesAsync(): Promise<Uint8Array>
}

View File

@@ -2,6 +2,16 @@
"name": "Lucide Icons",
"id": "939567362549682242",
"api": "1.0.0",
"ui": "build/ui.html",
"main": "build/main.js"
"editorType": ["figma"],
"main": "dist/assets/main.js",
"ui": {
"interface": "dist/src/interface/interface.html",
"worker": "dist/src/worker/worker.html"
},
"parameterOnly": false,
"parameters": [{
"name": "Icon",
"key": "icon-name",
"description": "Enter the name of the icon you want to insert."
}]
}

View File

@@ -1,27 +1,30 @@
{
"name": "lucide-figma",
"version": "0.15.11",
"license": "ISC",
"private": true,
"main": "build/ui.js",
"license": "ISC",
"main": "src/main.js",
"scripts": {
"build": "webpack --mode=production",
"watch": "webpack --mode=development --watch"
"dev": "vite",
"build": "tsc && rm -rf dist && yarn build:main && yarn build:worker && yarn build:interface",
"build:main": "INPUT=main vite build",
"build:worker": "INPUT=worker vite build",
"build:interface": "INPUT=interface vite build",
"serve": "vite preview"
},
"dependencies": {
"@emotion/core": "^10.0.14",
"@types/react": "^16.8.23",
"@types/react-dom": "^16.8.4",
"css-loader": "^3.0.0",
"html-webpack-inline-source-plugin": "^0.0.10",
"html-webpack-plugin": "^3.2.0",
"lucide-react": "0.15.11",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",
"ts-loader": "^6.0.4",
"typescript": "^3.5.2",
"webpack": "^4.35.2",
"webpack-cli": "^3.3.5"
"minimist": "^1.2.5",
"react": "^17.0.0",
"react-dom": "^17.0.0"
},
"devDependencies": {
"@figma/plugin-typings": "^1.36.0",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@vitejs/plugin-react": "^1.0.0",
"typescript": "^4.3.2",
"vite": "^2.6.4",
"vite-plugin-singlefile": "^0.5.1"
}
}

View File

@@ -0,0 +1,68 @@
import iconNodeToSvg from "../helpers/iconNodeToSvg"
export type IconNode = any[]
export type IconName = string
export type Tag = string[]
export interface Tags {
[key:string]: Tag
}
export interface LucideIcons {
version: string
iconNodes: { [key: IconName]: IconNode }
tags: Tags,
svgs: { [key: IconName]: string }
}
export const fetchIcons = async (cachedIcons? : LucideIcons): Promise<LucideIcons> => {
const response = await fetch('https://unpkg.com/lucide-static@latest/package.json')
const packageJson = await response.json();
if(cachedIcons && cachedIcons?.version === packageJson.version) {
return cachedIcons
}
const iconNodesResponse = await fetch(`https://unpkg.com/lucide-static@${packageJson.version}/icon-nodes.json`)
const tagsResponse = await fetch('https://unpkg.com/lucide-static@latest/tags.json')
const iconNodes = await iconNodesResponse.json();
const tags = await tagsResponse.json();
const svgs = Object.keys(iconNodes).reduce((acc : { [key:string]: string}, iconName) => {
acc[iconName] = iconNodeToSvg(iconName, iconNodes[iconName])
return acc
}, {})
const lucideIcons: LucideIcons = {
version: packageJson.version,
tags,
iconNodes,
svgs
}
parent.postMessage({
pluginMessage: {
type: "setCachedIcons",
lucideIcons
}
}, "*")
return lucideIcons
}
export const getIcons = () => new Promise<LucideIcons>(async (resolve, reject)=> {
parent.postMessage({
pluginMessage: {
type: "getCachedIcons",
}
}, "*")
window.onmessage = async (event) => {
if (event.type === 'message' && event?.data?.pluginMessage.type === 'cachedIcons') {
const lucideIcons = await fetchIcons(event?.data?.pluginMessage?.cachedIcons)
resolve(lucideIcons)
}
}
});

View File

@@ -0,0 +1,16 @@
.icon-button {
padding: 8px;
color: var(--color-black);
background: transparent;
border: 0;
border-radius: 2px;
appearance: none;
outline: 0;
&:hover {
background: rgba(0, 0, 0, 0.06);
}
&:focus,
&:active {
box-shadow: inset 0 0 0 2px var(--color-blue);
}
}

View File

@@ -0,0 +1,32 @@
import { renderToString } from 'react-dom/server'
import { FC } from 'react';
import './IconButton.scss'
interface IconButtonProps {
name: string,
component: FC,
}
function IconButton({ name, component: IconComponent }: IconButtonProps) {
const onIconClick = () => {
const svg = renderToString(<IconComponent/>);
parent.postMessage({ pluginMessage: {
type: 'drawIcon',
icon: { name, svg }
}}, '*')
}
return (
<button
key={name}
aria-label={name}
onClick={onIconClick}
className='icon-button'
>
<IconComponent />
</button>
)
}
export default IconButton

View File

@@ -0,0 +1 @@
export { default } from './IconButton'

View File

@@ -0,0 +1,17 @@
.search-input {
.icon {
position: absolute;
top: 0;
left: 0;
padding: 4px;
}
input {
width: 100%;
height: 40px;
padding: 0 16px 0 36px;
font-family: inherit;
font-size: 11px;
border: 0;
outline: 0;
}
}

View File

@@ -0,0 +1,30 @@
import "./SearchInput.scss"
import { ChangeEvent } from "react"
import SearchIcon from "../icons/SearchIcon"
interface SearchInputProps extends React.HTMLProps<HTMLDivElement> {
value: string,
iconCount: number,
onChange: (event: ChangeEvent<HTMLInputElement>) => void
}
function SearchInput({ value, onChange, iconCount, className, ...props }: SearchInputProps) {
return (
<div
className="search-input"
{...props}
>
<SearchIcon className='icon'/>
<input
autoFocus
type="search"
value={value}
onChange={onChange}
placeholder={`Search ${iconCount} icons`}
className="input__field"
/>
</div>
)
}
export default SearchInput

View File

@@ -0,0 +1 @@
export { default } from './SearchInput'

View File

@@ -1,44 +0,0 @@
import { jsx } from '@emotion/core'
import theme from '../theme'
import { renderToString } from 'react-dom/server'
import { FC } from 'react';
interface IconButtonProps {
name: string,
component: FC,
}
function IconButton({ name, component: IconComponent }: IconButtonProps) {
const onIconclick = () => {
const svg = renderToString(<IconComponent/>);
parent.postMessage({ pluginMessage: { name, svg }}, '*')
}
return (
<button
key={name}
aria-label={name}
onClick={onIconclick}
css={{
padding: theme.space[2],
color: '#333',
background: 'transparent',
border: 0,
borderRadius: theme.radii[1],
appearance: 'none',
outline: 0,
'&:hover': {
background: 'rgba(0, 0, 0, 0.06)',
},
'&:focus, &:active': {
boxShadow: `inset 0 0 0 2px ${theme.colors.blue}`,
},
}}
>
<IconComponent />
</button>
)
}
export default IconButton

View File

@@ -1,43 +0,0 @@
import { jsx } from '@emotion/core'
import theme from '../theme'
import SearchIcon from './search-icon'
interface SearchInputProps extends React.HTMLProps<HTMLDivElement> {
value: string,
iconCount: number,
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void
}
function SearchInput({ value, onChange, iconCount, ...props }: SearchInputProps) {
return (
<div css={{ position: 'relative' }} {...props}>
<div
css={{
position: 'absolute',
top: 0,
left: 0,
padding: theme.space[1],
}}
>
<SearchIcon fill="#333" />
</div>
<input
autoFocus
type="search"
value={value}
onChange={onChange}
placeholder={`Search ${iconCount} icons`}
css={{
width: '100%',
height: 40,
padding: `0 ${theme.space[4]} 0 36px`,
fontFamily: 'inherit',
fontSize: theme.fontSizes[0],
border: 0,
outline: 0,
}}
/>
</div>
)
}
export default SearchInput

View File

@@ -0,0 +1,13 @@
import { Tags } from "../api/fetchIcons";
import { Icon } from "../hooks/useSearch";
export default (icons: Icon[], tags: Tags ,query:string) =>
icons.filter(([name]: Icon) => {
const iconTags = tags && tags[name] ? tags[name] : []
return [name, ...iconTags].some(
(item:string) => item
.toLowerCase()
.includes(query)
)
})

View File

@@ -0,0 +1,11 @@
import { createReactComponent } from "lucide-react";
import { createElement } from "react";
import { renderToString } from "react-dom/server";
import { IconNode } from "../api/fetchIcons";
const iconNodeToSvg = (iconName: string, iconNode : IconNode) => {
const IconComponent = createReactComponent(iconName, iconNode)
return renderToString(createElement(IconComponent));
}
export default iconNodeToSvg

View File

@@ -0,0 +1,17 @@
import { IconName, IconNode, Tags } from "../api/fetchIcons";
import filterIcons from "../helpers/filterIcons";
export type Icon = [
name: IconName,
iconNode: IconNode
]
function useSearch(icons: Icon[], tags: Tags ,query: string) {
if(!query) return icons;
const searchString = query.toLowerCase()
return filterIcons(icons, tags, searchString);
}
export default useSearch;

View File

@@ -0,0 +1 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m18.8744 19.5815c-1.0453.8849-2.3975 1.4185-3.8744 1.4185-3.3137 0-6-2.6863-6-6s2.6863-6 6-6 6 2.6863 6 6c0 1.4769-.5336 2.8291-1.4185 3.8744l4.2721 4.272-.7072.7072zm1.1256-4.5815c0 2.7614-2.2386 5-5 5s-5-2.2386-5-5 2.2386-5 5-5 5 2.2386 5 5z" fill="#000" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 408 B

View File

@@ -0,0 +1 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m18.3972 18.6046c-.7793.625-1.7687.9988-2.8455.9988-2.5138 0-4.5517-2.0378-4.5517-4.5517 0-2.5138 2.0379-4.5517 4.5517-4.5517 2.5139 0 4.5517 2.0379 4.5517 4.5517 0 1.0769-.3739 2.0664-.999 2.8458l3.2491 3.2492-.7071.7071zm.7062-3.5529c0 1.9616-1.5901 3.5517-3.5517 3.5517-1.9615 0-3.5517-1.5901-3.5517-3.5517 0-1.9615 1.5902-3.5517 3.5517-3.5517 1.9616 0 3.5517 1.5902 3.5517 3.5517z" fill="#000" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 549 B

View File

@@ -0,0 +1,3 @@
<script type="module" src="./interface.tsx"></script>
<div id="root"></div>

View File

@@ -0,0 +1,49 @@
@font-face {
font-family: Inter;
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('https://rsms.me/inter/font-files/Inter-Regular.woff2?v=3.9')
format('woff2'),
url('https://rsms.me/inter/font-files/Inter-Regular.woff?v=3.9')
format('woff');
}
:root {
--color-blue: #18a0fb;
--color-black: #333;
}
body {
font-family: Inter, sans-serif;
font-size: 11px;
margin: 0;
}
.search-input {
position: sticky;
top: 0;
border-bottom: 1px solid #e5e5e5;
backface-visibility: hidden;
}
main {
padding-bottom: 8px;
}
.icon-grid {
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-gap: 8px;
}
footer {
margin-top: 8px;
padding: 8px;
font-size: 12px;
color: rgba(0, 0, 0, 0.5);
.footer-link {
color: inherit;
}
}

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