Compare commits
511 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f920d52e08 | ||
|
|
ebe64a6c7f | ||
|
|
2672c011e5 | ||
|
|
63052c9d9e | ||
|
|
e27d114c6e | ||
|
|
1404dbed83 | ||
|
|
4c868c92e5 | ||
|
|
4cdb9f8b94 | ||
|
|
4ff430e49d | ||
|
|
4e949b38e9 | ||
|
|
c48679cc1a | ||
|
|
6f7c94efa5 | ||
|
|
24edd8cd6e | ||
|
|
3e61ee5832 | ||
|
|
38b14425a0 | ||
|
|
87a18985f1 | ||
|
|
6e5af5fb49 | ||
|
|
6b90ff364c | ||
|
|
96989ea74c | ||
|
|
90914f53e1 | ||
|
|
a98692b37c | ||
|
|
a843cf6d6b | ||
|
|
72736a6879 | ||
|
|
296bb35317 | ||
|
|
7adecdc5df | ||
|
|
23259c9e3f | ||
|
|
5770517a71 | ||
|
|
601b7ad1fc | ||
|
|
e79d778606 | ||
|
|
04dad48bc5 | ||
|
|
dd9c48196d | ||
|
|
db9cd7af52 | ||
|
|
893dc9e0e8 | ||
|
|
b172f4316e | ||
|
|
60e42bd350 | ||
|
|
272e33d320 | ||
|
|
0af9969e53 | ||
|
|
afbe6576d6 | ||
|
|
a61276c72e | ||
|
|
e43c2a7f23 | ||
|
|
06fe7d6a3f | ||
|
|
81ff3fc1d1 | ||
|
|
776ef4f43c | ||
|
|
e4edabddb9 | ||
|
|
028afec837 | ||
|
|
049c4cd61e | ||
|
|
b13a7bf1ab | ||
|
|
e278f27a61 | ||
|
|
f70a0e1945 | ||
|
|
26f85a75d2 | ||
|
|
da7c09f66e | ||
|
|
f5175bd4b2 | ||
|
|
cb7da732fe | ||
|
|
2200ab47d3 | ||
|
|
c537469638 | ||
|
|
f09836cc84 | ||
|
|
eaf51b2da4 | ||
|
|
66b3574d64 | ||
|
|
435d2bd66b | ||
|
|
ca330378d0 | ||
|
|
aa7efeacc4 | ||
|
|
0febdd831f | ||
|
|
99d5d7a6da | ||
|
|
533b820e32 | ||
|
|
cd7b9bf03d | ||
|
|
c97b456bce | ||
|
|
9a04665ad2 | ||
|
|
2d5a5fd90a | ||
|
|
7ed8092d8a | ||
|
|
7128fc608e | ||
|
|
b470bc691c | ||
|
|
d67626a6e1 | ||
|
|
10b146a358 | ||
|
|
641bf8a933 | ||
|
|
f0f168376a | ||
|
|
34594af2bd | ||
|
|
e686494545 | ||
|
|
6eb0acac4e | ||
|
|
8b0cf96c69 | ||
|
|
48376a2621 | ||
|
|
2c580552b4 | ||
|
|
95a625dcd4 | ||
|
|
3af8508c46 | ||
|
|
609fd065da | ||
|
|
b4afb9c8da | ||
|
|
3292edab39 | ||
|
|
754300465a | ||
|
|
5834504dd9 | ||
|
|
29a7763ce2 | ||
|
|
f19e0696ce | ||
|
|
872adfa333 | ||
|
|
428460ea46 | ||
|
|
96da221758 | ||
|
|
0cf7c22379 | ||
|
|
f78ef546a8 | ||
|
|
7558bef262 | ||
|
|
51b12ae55c | ||
|
|
c60323c28c | ||
|
|
d71b18d0e7 | ||
|
|
10e3aa4377 | ||
|
|
d1262f4c7f | ||
|
|
03aefa2cd5 | ||
|
|
41f8ce9660 | ||
|
|
2b41a44538 | ||
|
|
8ffb43b8e0 | ||
|
|
b39b835390 | ||
|
|
24a6ef9fd9 | ||
|
|
17967a9598 | ||
|
|
9dc93a602d | ||
|
|
b672e884d9 | ||
|
|
46bbb6485b | ||
|
|
b530c40486 | ||
|
|
5d1fdd703c | ||
|
|
706486b3b7 | ||
|
|
3a7b878847 | ||
|
|
2eb158f32b | ||
|
|
3fa66dac91 | ||
|
|
9a236be5d5 | ||
|
|
dd39ba7722 | ||
|
|
1b6847f0c7 | ||
|
|
3b8297f10c | ||
|
|
530fffc49d | ||
|
|
6461798850 | ||
|
|
e731e808a3 | ||
|
|
099575b9cf | ||
|
|
d79a33d514 | ||
|
|
6630882137 | ||
|
|
a723c0f137 | ||
|
|
54a6ec1d5c | ||
|
|
4e53232d9d | ||
|
|
91d0a124ca | ||
|
|
1228999214 | ||
|
|
718f67d339 | ||
|
|
6cc2927ade | ||
|
|
a96e9db8e5 | ||
|
|
ced1431b6b | ||
|
|
82fcb2a896 | ||
|
|
846d303345 | ||
|
|
8ab0d4d739 | ||
|
|
cf19731e6a | ||
|
|
f86a6a960b | ||
|
|
9e63e97f31 | ||
|
|
81b85839eb | ||
|
|
15ac2cf282 | ||
|
|
1c1b6c7732 | ||
|
|
29236b45d1 | ||
|
|
1e9a09e8f3 | ||
|
|
9031285357 | ||
|
|
03fd0452f3 | ||
|
|
e4adf28a48 | ||
|
|
9af28b9247 | ||
|
|
e9879d5db0 | ||
|
|
95f66ca5b0 | ||
|
|
b72d86604b | ||
|
|
97c03c7d15 | ||
|
|
f8f98394f4 | ||
|
|
ff0901bf0c | ||
|
|
66f2dc24b1 | ||
|
|
fd20bc5fd9 | ||
|
|
997daac4e6 | ||
|
|
d218851416 | ||
|
|
acf51993d7 | ||
|
|
02cb296050 | ||
|
|
df3bd24540 | ||
|
|
75887dc14c | ||
|
|
a50076fcb9 | ||
|
|
eeff4e2718 | ||
|
|
f065767560 | ||
|
|
7cbc2ac5a7 | ||
|
|
494292618b | ||
|
|
820727329d | ||
|
|
c51bffbd54 | ||
|
|
cad3214584 | ||
|
|
733448d041 | ||
|
|
c7b9f9aaae | ||
|
|
d0e6b9c015 | ||
|
|
0e83769729 | ||
|
|
da5a92746f | ||
|
|
551cc30e79 | ||
|
|
09edf6d16c | ||
|
|
7cc4041a35 | ||
|
|
5418c63468 | ||
|
|
269d5fa2d0 | ||
|
|
c130e58c46 | ||
|
|
2a8f734a19 | ||
|
|
1ddce5b3cb | ||
|
|
859577768c | ||
|
|
606b6b2b22 | ||
|
|
10749409f1 | ||
|
|
77727bc40c | ||
|
|
59fe65b705 | ||
|
|
5e0d287cda | ||
|
|
910b2432ce | ||
|
|
3b05f0e574 | ||
|
|
62e5aae150 | ||
|
|
2dbf8ffaa3 | ||
|
|
938f7efeba | ||
|
|
ab00747371 | ||
|
|
4c42ebfcff | ||
|
|
182b127c12 | ||
|
|
2f3dfb4404 | ||
|
|
3348c1050d | ||
|
|
d0f26f4110 | ||
|
|
b450764c68 | ||
|
|
b71ae1e055 | ||
|
|
35d41c1763 | ||
|
|
7cdabd67be | ||
|
|
0922e72e3d | ||
|
|
f2582af4a3 | ||
|
|
61124e4619 | ||
|
|
60efb731fe | ||
|
|
96357adbe7 | ||
|
|
74c077b3ae | ||
|
|
af9dc9f510 | ||
|
|
abb6323d5e | ||
|
|
8fcec2a0b2 | ||
|
|
69397ee269 | ||
|
|
770d5a7557 | ||
|
|
58c11879c5 | ||
|
|
d14a85d644 | ||
|
|
22ea86dad5 | ||
|
|
cd75f0c384 | ||
|
|
8d9df97208 | ||
|
|
d87b423044 | ||
|
|
1877c1b2a8 | ||
|
|
739242a4f5 | ||
|
|
398d8fc9bb | ||
|
|
74a1ef8d9b | ||
|
|
3357de226b | ||
|
|
270936bce1 | ||
|
|
7021b19039 | ||
|
|
17491235cb | ||
|
|
fd1aa0893c | ||
|
|
262f906322 | ||
|
|
d58db71163 | ||
|
|
9e9efbe40b | ||
|
|
4e8acabf44 | ||
|
|
e0b585ddd3 | ||
|
|
ef5ef2f76a | ||
|
|
b1d5af7bd3 | ||
|
|
efe345db5e | ||
|
|
d6ebff0b78 | ||
|
|
f6afdc70cf | ||
|
|
0358960400 | ||
|
|
5a1e09073d | ||
|
|
fb6ce6eb0b | ||
|
|
435fbc9e26 | ||
|
|
01f577212c | ||
|
|
a5d1f2964b | ||
|
|
33caa024d2 | ||
|
|
c7fc71a66e | ||
|
|
1dba15f03b | ||
|
|
c3e7e0c834 | ||
|
|
456cb01982 | ||
|
|
38fb2ca283 | ||
|
|
b5201d2b38 | ||
|
|
9ca395c9ba | ||
|
|
d95e2170c5 | ||
|
|
676ded84ac | ||
|
|
dcef099aca | ||
|
|
1c0d763f70 | ||
|
|
a7e2399621 | ||
|
|
a3345217c2 | ||
|
|
c707c9438b | ||
|
|
bd0bdda5f2 | ||
|
|
e9d24e0086 | ||
|
|
686d6f8aec | ||
|
|
78cbae1061 | ||
|
|
4021f6954d | ||
|
|
8cdd66a1db | ||
|
|
9266183e95 | ||
|
|
b6e474908f | ||
|
|
7a088181cc | ||
|
|
8aa0295c9e | ||
|
|
49dffc9f43 | ||
|
|
74dfc929df | ||
|
|
80239f7c8a | ||
|
|
49e0889b63 | ||
|
|
e968bf51e3 | ||
|
|
4eb4837052 | ||
|
|
ded1a24668 | ||
|
|
3fa2ca3789 | ||
|
|
486f4fa260 | ||
|
|
ecc1b1262a | ||
|
|
343ebd3d7b | ||
|
|
46975e4b77 | ||
|
|
081a24d973 | ||
|
|
b131832876 | ||
|
|
a01d5c6f1e | ||
|
|
9de8e78460 | ||
|
|
b07c5fe0cb | ||
|
|
08e4ff1e85 | ||
|
|
d9981fc309 | ||
|
|
d883fc2c79 | ||
|
|
7e676e35e4 | ||
|
|
c40df12e05 | ||
|
|
b46b157dbc | ||
|
|
e749b67774 | ||
|
|
4ad6bb1b77 | ||
|
|
0b3b8ba09e | ||
|
|
0c81502532 | ||
|
|
ef3da7d14d | ||
|
|
53d3a31574 | ||
|
|
a2a7adfde8 | ||
|
|
73b242a611 | ||
|
|
9ed00c4266 | ||
|
|
36232cd771 | ||
|
|
87863402ea | ||
|
|
b4e4f002f2 | ||
|
|
9d101a5275 | ||
|
|
3e50bf13e4 | ||
|
|
da946d5657 | ||
|
|
16a1ffc40e | ||
|
|
b4c034e729 | ||
|
|
cb61706968 | ||
|
|
17bdd7aa91 | ||
|
|
0f3551e9c7 | ||
|
|
4a5898a458 | ||
|
|
3aa2521c37 | ||
|
|
5f6d20ad82 | ||
|
|
4bc8aae6bb | ||
|
|
d582a980d7 | ||
|
|
1513f61522 | ||
|
|
103d4aa3a4 | ||
|
|
303ad629fc | ||
|
|
32cef3bdbb | ||
|
|
f45ea99192 | ||
|
|
78690fb9ed | ||
|
|
f67eb1897a | ||
|
|
285f9446b4 | ||
|
|
95a7d8648f | ||
|
|
b07eb8c00d | ||
|
|
40cb396a6c | ||
|
|
87ab0bfb62 | ||
|
|
c4f50417d5 | ||
|
|
0ca1b98689 | ||
|
|
c2427cea6b | ||
|
|
7ce35bac34 | ||
|
|
7bd41d9b48 | ||
|
|
5ec34cb249 | ||
|
|
4024911219 | ||
|
|
acea1b4116 | ||
|
|
ec3542dab8 | ||
|
|
51cf68c11f | ||
|
|
7f1dc27ee3 | ||
|
|
381dca62d1 | ||
|
|
431a7b834a | ||
|
|
0c460bc3dd | ||
|
|
7e91be9e38 | ||
|
|
d042899a06 | ||
|
|
891115f6fd | ||
|
|
8ce52d834d | ||
|
|
b6ea440d70 | ||
|
|
a3125d53cb | ||
|
|
a7e8b3bcb7 | ||
|
|
c4dfe6b8cb | ||
|
|
90e86767d8 | ||
|
|
30f7be3fd4 | ||
|
|
313b46ecc1 | ||
|
|
367f89ef1f | ||
|
|
32ba19d591 | ||
|
|
5d945372d4 | ||
|
|
736b888608 | ||
|
|
fc03912eef | ||
|
|
0864092670 | ||
|
|
400f7871d2 | ||
|
|
0ce207bc2f | ||
|
|
8c85053002 | ||
|
|
a453c61aa5 | ||
|
|
5ad6f5bba3 | ||
|
|
68b91149f2 | ||
|
|
c50b8181a0 | ||
|
|
1db690953b | ||
|
|
cef1e1aafa | ||
|
|
d29667ed99 | ||
|
|
d31c2a2f2a | ||
|
|
e4a86687e2 | ||
|
|
2d9eee74c5 | ||
|
|
0668f8aebe | ||
|
|
330d7beb60 | ||
|
|
77f0243446 | ||
|
|
2c7fa08503 | ||
|
|
998199085e | ||
|
|
f9cf015e20 | ||
|
|
97677113e3 | ||
|
|
1f7d367afc | ||
|
|
1846b8b4ae | ||
|
|
3bedf3ba36 | ||
|
|
4352e985df | ||
|
|
e1936fb938 | ||
|
|
de815a7305 | ||
|
|
bd3f24f160 | ||
|
|
8f6062317f | ||
|
|
8f63d828af | ||
|
|
fc2fac9ca4 | ||
|
|
cf13cef475 | ||
|
|
485ae6f531 | ||
|
|
398421367c | ||
|
|
8832051f96 | ||
|
|
ce80469ecc | ||
|
|
12f2b29ac7 | ||
|
|
7b7ee1fe63 | ||
|
|
baee6032c6 | ||
|
|
deae140a6e | ||
|
|
ca90159fce | ||
|
|
03e287f2c1 | ||
|
|
b79aebe284 | ||
|
|
a21600984d | ||
|
|
8b09a5c1ef | ||
|
|
66ac072870 | ||
|
|
c073a2c529 | ||
|
|
cedf113b54 | ||
|
|
571cab88ee | ||
|
|
68c5ed6097 | ||
|
|
85efb8e1b6 | ||
|
|
00c3487dff | ||
|
|
cec73c5217 | ||
|
|
8f1c7eb737 | ||
|
|
0dd10483c9 | ||
|
|
a0c447cece | ||
|
|
7cf928e94c | ||
|
|
8caf6efe72 | ||
|
|
a9fec942ff | ||
|
|
00cbc81331 | ||
|
|
4e3af5c601 | ||
|
|
632dda526a | ||
|
|
c858240c01 | ||
|
|
1fb70e67ee | ||
|
|
b533cf8480 | ||
|
|
51fd3af446 | ||
|
|
f3c3fea228 | ||
|
|
29574a6385 | ||
|
|
5c96b8d848 | ||
|
|
2c38fac9b1 | ||
|
|
0b88415247 | ||
|
|
9b25845258 | ||
|
|
49973ff32b | ||
|
|
714f63d0d3 | ||
|
|
762cf32666 | ||
|
|
216f42cdcb | ||
|
|
b80c2805b2 | ||
|
|
d80a267c81 | ||
|
|
07fa908631 | ||
|
|
1bdf6febac | ||
|
|
78e1057515 | ||
|
|
9d6d0c340d | ||
|
|
77f3f49ce7 | ||
|
|
a55620d6ba | ||
|
|
dad9648e20 | ||
|
|
b3b39afb95 | ||
|
|
4406cbaea0 | ||
|
|
11c6a2e917 | ||
|
|
8b5278437a | ||
|
|
c84fcfe3cb | ||
|
|
058c40a1ec | ||
|
|
6dad37a1b5 | ||
|
|
85d3bb9b82 | ||
|
|
dee5d33bcd | ||
|
|
a26745a3be | ||
|
|
9550ec28b8 | ||
|
|
845d6add1f | ||
|
|
06972942cd | ||
|
|
d33b6674f3 | ||
|
|
70be911f69 | ||
|
|
6f06e05a47 | ||
|
|
8a15bca8cd | ||
|
|
5aef4e6110 | ||
|
|
e1cead9531 | ||
|
|
c686c1a0c3 | ||
|
|
af87274bf4 | ||
|
|
e3e4514dcc | ||
|
|
1b726f592a | ||
|
|
53ba672ca6 | ||
|
|
9b56ae3b25 | ||
|
|
bd52c058eb | ||
|
|
e8befb4681 | ||
|
|
dd5d84d5c0 | ||
|
|
031833a296 | ||
|
|
02b57108c3 | ||
|
|
a99637fc25 | ||
|
|
749a235dc7 | ||
|
|
ce8da13110 | ||
|
|
9a2eb1c16e | ||
|
|
bae239bd20 | ||
|
|
0f43116ca2 | ||
|
|
d051a09232 | ||
|
|
342b2b962a | ||
|
|
41836318ea | ||
|
|
bf7a6b4503 | ||
|
|
c8ff5a12ff | ||
|
|
da5b084a6b | ||
|
|
c00ebdacca | ||
|
|
3624f449f0 | ||
|
|
fc76ff2687 | ||
|
|
456b54c8b4 | ||
|
|
a905faa00e | ||
|
|
5ece90b035 | ||
|
|
cb5d712584 | ||
|
|
90966d2723 | ||
|
|
513216cc6e | ||
|
|
efc7c9c1f6 | ||
|
|
905eca3047 | ||
|
|
1fe87aa89d | ||
|
|
25b20dba9b | ||
|
|
a106a4c3fc | ||
|
|
030e314413 | ||
|
|
6726eb6b15 | ||
|
|
0345dc1208 | ||
|
|
cde1f11258 | ||
|
|
d652e795d6 | ||
|
|
6a3378ce5a |
13
.babelrc
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"presets": [
|
|
||||||
[
|
|
||||||
"env",
|
|
||||||
{
|
|
||||||
"targets": {
|
|
||||||
"browsers": ["last 2 versions"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"stage-2"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
11
.editorconfig
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
quote_type = single
|
||||||
|
max_line_length = 100
|
||||||
@@ -1,2 +1,5 @@
|
|||||||
dist
|
dist
|
||||||
|
build
|
||||||
coverage
|
coverage
|
||||||
|
lib
|
||||||
|
tests
|
||||||
|
|||||||
21
.eslintrc.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
extends: ['airbnb-base', 'prettier'],
|
||||||
|
plugins: ['import', 'prettier'],
|
||||||
|
rules: {
|
||||||
|
'no-console': 'off',
|
||||||
|
'no-param-reassign': 'off',
|
||||||
|
'no-shadow': 'off',
|
||||||
|
'no-use-before-define': 'off',
|
||||||
|
'prettier/prettier': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
singleQuote: true,
|
||||||
|
trailingComma: 'all'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": ["airbnb-base", "prettier"],
|
|
||||||
"plugins": ["import", "prettier"],
|
|
||||||
"rules": {
|
|
||||||
"no-console": ["error", { "allow": ["warn", "error"] }],
|
|
||||||
"no-param-reassign": "off",
|
|
||||||
"no-shadow": "off",
|
|
||||||
"no-use-before-define": "off",
|
|
||||||
"prettier/prettier": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
"singleQuote": true,
|
|
||||||
"trailingComma": "all"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Create a report to help us improve
|
||||||
|
labels: "🐛 bug"
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|||||||
6
.github/ISSUE_TEMPLATE/icon_request.md
vendored
@@ -1,14 +1,18 @@
|
|||||||
---
|
---
|
||||||
name: Icon request
|
name: Icon request
|
||||||
about: Suggest an new icon for this project
|
about: Suggest an new icon for this project
|
||||||
|
labels: "🙌 icon request"
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a 👍.
|
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a 👍.
|
||||||
|
A note about brand logos and related material : We follow the decision from Feather Icons (https://github.com/feathericons/feather/issues/763) to deprecate icons relating to brands.
|
||||||
|
You will find some in the set, but we won't add any new ones. https://simpleicons.org has 24x24 SVG icons for this purpose.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## Icon Request
|
## Icon Request
|
||||||
|
|
||||||
* Icon name:
|
* Icon name:
|
||||||
* Use case:
|
* Use case:
|
||||||
* Screenshots of similar icons:
|
* _Screenshots_ of similar icons:
|
||||||
|
|||||||
15
.github/PULL_REQUEST_TEMPLATE/new-icon.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
name: New icon
|
||||||
|
about: Add a new icon to the library
|
||||||
|
labels: "🎨 <icon"
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- Thanks for submitting an icon! Please make sure you read the icon design guide
|
||||||
|
at https://github.com/lucide-icons/lucide/blob/master/docs/ICON_DESIGN_GUIDE.md beforehand,
|
||||||
|
and please fill everything below. -->
|
||||||
|
|
||||||
|
- **Name of the icon** : <!-- `icon` -->
|
||||||
|
- **Tags (alternative names for this icon)** (add them in tags.json) :
|
||||||
|
- **What is the purpose of this icon?** : <!-- Shows that one can click it to... / Is used to denote or label... -->
|
||||||
|
- **100% scale preview** : <!-- upload an image -->
|
||||||
|
- **Have you considered alternative possibilities** for its naming or design? :
|
||||||
74
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
name: Continuous integration icons
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- icons/**
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-release:
|
||||||
|
if: github.repository == 'lucide-icons/lucide'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Fetch tags
|
||||||
|
run: git fetch --all --tags
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: latest-tag
|
||||||
|
run: echo "::set-output name=LATEST_TAG::$(git describe --tags `git rev-list --tags --max-count=1`)"
|
||||||
|
|
||||||
|
- name: Get yarn cache directory path
|
||||||
|
id: yarn_cache
|
||||||
|
run: echo "::set-output name=YARN_CACHE_DIR::$(yarn cache dir)"
|
||||||
|
|
||||||
|
- name: Get cached packaged
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarn_cache.outputs.YARN_CACHE_DIR }}
|
||||||
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-yarn-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn --pure-lockfile
|
||||||
|
|
||||||
|
- name: Check if we can patch
|
||||||
|
run: .github/workflows/version-up.sh --patch
|
||||||
|
|
||||||
|
- name: Create new version
|
||||||
|
id: new-version
|
||||||
|
run: echo "::set-output name=NEW_VERSION::$(.github/workflows/version-up.sh --patch)"
|
||||||
|
|
||||||
|
- name: Create change log
|
||||||
|
id: change-log
|
||||||
|
run: |
|
||||||
|
CHANGE_LOG=$(yarn --silent run generate:changelog --old-tag=${{ steps.latest-tag.outputs.LATEST_TAG }})
|
||||||
|
CHANGE_LOG="${CHANGE_LOG//'%'/'%25'}"
|
||||||
|
CHANGE_LOG="${CHANGE_LOG//$'\n'/'%0A'}"
|
||||||
|
CHANGE_LOG="${CHANGE_LOG//$'\r'/'%0D'}"
|
||||||
|
echo $CHANGE_LOG
|
||||||
|
echo "::set-output name=CHANGE_LOG::$CHANGE_LOG"
|
||||||
|
env:
|
||||||
|
GITHUB_API_KEY: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Check output
|
||||||
|
run: |
|
||||||
|
echo "${{ steps.new-version.outputs.NEW_VERSION }}"
|
||||||
|
echo "${{ steps.change-log.outputs.CHANGE_LOG }}"
|
||||||
|
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.CREATE_RELEASE_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ steps.new-version.outputs.NEW_VERSION }}
|
||||||
|
name: New icons ${{ steps.new-version.outputs.NEW_VERSION }}
|
||||||
|
body: ${{ steps.change-log.outputs.CHANGE_LOG }}
|
||||||
|
|
||||||
18
.github/workflows/close-stale-prs.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: 'Close stale issues and PR'
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '45 1 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- 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'
|
||||||
|
days-before-stale: 30
|
||||||
|
days-before-close: 5
|
||||||
|
days-before-pr-close: -1
|
||||||
401
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,401 @@
|
|||||||
|
name: Release Packages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: 'Version'
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pre-build:
|
||||||
|
if: github.repository == 'lucide-icons/lucide' && contains('["locness3","ericfennis", "johnletey"]', github.actor)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
VERSION: ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Get the version
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
echo $VERSION_REF
|
||||||
|
echo ::set-output name=VERSION::${VERSION_REF/refs\/tags\/\v}
|
||||||
|
env:
|
||||||
|
VERSION_REF: ${{ github.event.inputs.version || github.ref }}
|
||||||
|
|
||||||
|
lucide:
|
||||||
|
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 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 version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide test
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide publish
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-package-json
|
||||||
|
path: packages/lucide/package.json
|
||||||
|
|
||||||
|
lucide-react:
|
||||||
|
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 dependencies
|
||||||
|
run: yarn --prefer-offline
|
||||||
|
|
||||||
|
- name: Set Auth Token
|
||||||
|
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set package.json version lucide
|
||||||
|
run: yarn workspace lucide-react version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide-react build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide-react test
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide-react publish
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-react-package-json
|
||||||
|
path: packages/lucide-react/package.json
|
||||||
|
|
||||||
|
lucide-vue:
|
||||||
|
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 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-vue version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide-vue build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide-vue test
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide-vue publish
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-vue-package-json
|
||||||
|
path: packages/lucide-vue/package.json
|
||||||
|
|
||||||
|
lucide-vue-next:
|
||||||
|
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 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-vue-next version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide-vue-next build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide-vue-next test
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide-vue-next publish
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-vue-next-package-json
|
||||||
|
path: packages/lucide-vue-next/package.json
|
||||||
|
|
||||||
|
lucide-angular:
|
||||||
|
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 dependencies
|
||||||
|
run: yarn --prefer-offline
|
||||||
|
|
||||||
|
- name: Set Auth Token
|
||||||
|
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set package.json version lucide
|
||||||
|
run: yarn workspace lucide-angular version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide-angular build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide-angular test:headless
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide-angular publish dist
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-angular-package-json
|
||||||
|
path: packages/lucide-angular/package.json
|
||||||
|
|
||||||
|
lucide-preact:
|
||||||
|
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 dependencies
|
||||||
|
run: yarn --prefer-offline
|
||||||
|
|
||||||
|
- name: Set Auth Token
|
||||||
|
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set package.json version lucide
|
||||||
|
run: yarn workspace lucide-preact version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: yarn workspace lucide-preact build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: yarn workspace lucide-preact test
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: yarn workspace lucide-preact publish
|
||||||
|
|
||||||
|
- name: Upload package.json
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lucide-preact-package-json
|
||||||
|
path: packages/lucide-preact/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 build
|
||||||
|
list=(-200 -300 "" -500 -600)
|
||||||
|
command=''
|
||||||
|
for name in "${list[@]}"
|
||||||
|
do
|
||||||
|
subcommand="(yarn build:outline-icons --outputDir=converted_icons${name} && fontcustom compile "./converted_icons${name}" -h -n "lucide${name}" -o ./build -F)"
|
||||||
|
if [ -z "$command" ]
|
||||||
|
then
|
||||||
|
command="$subcommand";
|
||||||
|
else
|
||||||
|
command="$command & $subcommand";
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
eval $command
|
||||||
|
|
||||||
|
- name: 'Upload to Artifacts'
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: lucide-font
|
||||||
|
path: build
|
||||||
|
|
||||||
|
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: Move the assets files
|
||||||
|
run: mv lucide-font packages/lucide-flutter/assets
|
||||||
|
|
||||||
|
- name: Generate exports file
|
||||||
|
run: dart tool/generate_fonts.dart assets/lucide-preview.html
|
||||||
|
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
|
||||||
|
|
||||||
|
- 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 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
|
||||||
284
.github/workflows/version-up.sh
vendored
Executable file
@@ -0,0 +1,284 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
## Copyright (C) 2017, Oleksandr Kucherenko
|
||||||
|
## Last revisit: 2017-09-29
|
||||||
|
|
||||||
|
## get highest version tag for all branches
|
||||||
|
function highest_tag(){
|
||||||
|
local TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
|
||||||
|
echo "$TAG"
|
||||||
|
}
|
||||||
|
|
||||||
|
## extract current branch name
|
||||||
|
function current_branch(){
|
||||||
|
## expected: heads/{branch_name}
|
||||||
|
## expected: {branch_name}
|
||||||
|
local BRANCH=$(git rev-parse --abbrev-ref HEAD | cut -d"/" -f2)
|
||||||
|
echo "$BRANCH"
|
||||||
|
}
|
||||||
|
|
||||||
|
## get latest/head commit hash number
|
||||||
|
function head_hash(){
|
||||||
|
local COMMIT_HASH=$(git rev-parse --verify HEAD)
|
||||||
|
echo "$COMMIT_HASH"
|
||||||
|
}
|
||||||
|
|
||||||
|
## extract tag commit hash code, tag name provided by argument
|
||||||
|
function tag_hash(){
|
||||||
|
local TAG_HASH=$(git log -1 --format=format:"%H" $1 2>/dev/null | tail -n1)
|
||||||
|
echo "$TAG_HASH"
|
||||||
|
}
|
||||||
|
|
||||||
|
## get latest revision number
|
||||||
|
function latest_revision(){
|
||||||
|
local REV=$(git rev-list --count HEAD 2>/dev/null)
|
||||||
|
echo "$REV"
|
||||||
|
}
|
||||||
|
|
||||||
|
## parse last found tag, extract it PARTS
|
||||||
|
function parse_last(){
|
||||||
|
local position=$(($1-1))
|
||||||
|
|
||||||
|
# two parts found only
|
||||||
|
local SUBS=( ${PARTS[$position]//-/ } )
|
||||||
|
#echo ${SUBS[@]}, size: ${#SUBS}
|
||||||
|
|
||||||
|
# found NUMBER
|
||||||
|
PARTS[$position]=${SUBS[0]}
|
||||||
|
#echo ${PARTS[@]}
|
||||||
|
|
||||||
|
# found SUFFIX
|
||||||
|
if [[ ${#SUBS} -ge 1 ]]; then
|
||||||
|
PARTS[4]=${SUBS[1],,} #lowercase
|
||||||
|
#echo ${PARTS[@]}, ${SUBS[@]}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## increment REVISION part, don't touch STAGE
|
||||||
|
function increment_revision(){
|
||||||
|
PARTS[3]=$(( PARTS[3] + 1 ))
|
||||||
|
IS_DIRTY=1
|
||||||
|
}
|
||||||
|
|
||||||
|
## increment PATCH part, reset all other lower PARTS, don't touch STAGE
|
||||||
|
function increment_patch(){
|
||||||
|
PARTS[2]=$(( PARTS[2] + 1 ))
|
||||||
|
PARTS[3]=0
|
||||||
|
IS_DIRTY=1
|
||||||
|
}
|
||||||
|
|
||||||
|
## increment MINOR part, reset all other lower PARTS, don't touch STAGE
|
||||||
|
function increment_minor(){
|
||||||
|
PARTS[1]=$(( PARTS[1] + 1 ))
|
||||||
|
PARTS[2]=0
|
||||||
|
PARTS[3]=0
|
||||||
|
IS_DIRTY=1
|
||||||
|
}
|
||||||
|
|
||||||
|
## increment MAJOR part, reset all other lower PARTS, don't touch STAGE
|
||||||
|
function incremet_major(){
|
||||||
|
PARTS[0]="v$(( PARTS[0] + 1 ))"
|
||||||
|
PARTS[1]=0
|
||||||
|
PARTS[2]=0
|
||||||
|
PARTS[3]=0
|
||||||
|
IS_DIRTY=1
|
||||||
|
}
|
||||||
|
|
||||||
|
## increment the number only of last found PART: REVISION --> PATCH --> MINOR. don't touch STAGE
|
||||||
|
function increment_last_found(){
|
||||||
|
if [[ "${#PARTS[3]}" == 0 || "${PARTS[3]}" == "0" ]]; then
|
||||||
|
if [[ "${#PARTS[2]}" == 0 || "${PARTS[2]}" == "0" ]]; then
|
||||||
|
increment_minor
|
||||||
|
else
|
||||||
|
increment_patch
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
increment_revision
|
||||||
|
fi
|
||||||
|
|
||||||
|
# stage part is not EMPTY
|
||||||
|
if [[ "${#PARTS[4]}" != 0 ]]; then
|
||||||
|
IS_SHIFT=1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## compose version from PARTS
|
||||||
|
function compose(){
|
||||||
|
MAJOR="${PARTS[0]}"
|
||||||
|
MINOR=".${PARTS[1]}"
|
||||||
|
PATCH=".${PARTS[2]}"
|
||||||
|
REVISION=".${PARTS[3]}"
|
||||||
|
SUFFIX="-${PARTS[4]}"
|
||||||
|
|
||||||
|
if [[ "${#PATCH}" == 1 ]]; then # if empty {PATCH}
|
||||||
|
PATCH=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${#REVISION}" == 1 ]]; then # if empty {REVISION}
|
||||||
|
REVISION=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${PARTS[3]}" == "0" ]]; then # if revision is ZERO
|
||||||
|
REVISION=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# shrink patch and revision
|
||||||
|
if [[ -z "${REVISION// }" ]]; then
|
||||||
|
if [[ "${PARTS[2]}" == "0" ]]; then
|
||||||
|
PATCH=".0"
|
||||||
|
fi
|
||||||
|
else # revision is not EMPTY
|
||||||
|
if [[ "${#PATCH}" == 0 ]]; then
|
||||||
|
PATCH=".0"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove suffix if we don't have a alpha/beta/rc
|
||||||
|
if [[ "${#SUFFIX}" == 1 ]]; then
|
||||||
|
SUFFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo "${MAJOR}${MINOR}${PATCH}${REVISION}${SUFFIX}" #full format
|
||||||
|
}
|
||||||
|
|
||||||
|
# initial version used for repository without tags
|
||||||
|
INIT_VERSION=0.0.0.0-alpha
|
||||||
|
|
||||||
|
# do GIT data extracting
|
||||||
|
TAG=$(highest_tag)
|
||||||
|
REVISION=$(latest_revision)
|
||||||
|
BRANCH=$(current_branch)
|
||||||
|
TAG_HASH=$(tag_hash $TAG)
|
||||||
|
HEAD_HASH=$(head_hash)
|
||||||
|
|
||||||
|
# if tag and branch commit hashes are different, than print info about that
|
||||||
|
#echo $HEAD_HASH vs $TAG_HASH
|
||||||
|
if [[ "$@" == "" ]]; then
|
||||||
|
if [[ "$TAG_HASH" == "$HEAD_HASH" ]]; then
|
||||||
|
echo "Tag $TAG and HEAD are aligned. We will stay on the TAG version."
|
||||||
|
echo ""
|
||||||
|
NO_ARGS_VALUE='--stay'
|
||||||
|
else
|
||||||
|
PATTERN="^[0-9]+.[0-9]+(.[0-9]+)*(-(alpha|beta|rc))*$"
|
||||||
|
|
||||||
|
if [[ "$BRANCH" =~ $PATTERN ]]; then
|
||||||
|
echo "Detected version branch '$BRANCH'. We will auto-increment the last version PART."
|
||||||
|
echo ""
|
||||||
|
NO_ARGS_VALUE='--default'
|
||||||
|
else
|
||||||
|
echo "Detected branch name '$BRANCH' than does not match version pattern. We will increase MINOR."
|
||||||
|
echo ""
|
||||||
|
NO_ARGS_VALUE='--minor'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# {MAJOR}.{MINOR}[.{PATCH}[.{REVISION}][-(.*)]
|
||||||
|
#
|
||||||
|
# Suffix: alpha, beta, rc
|
||||||
|
# No Suffix --> {NEW_VERSION}-alpha
|
||||||
|
# alpha --> beta
|
||||||
|
# beta --> rc
|
||||||
|
# rc --> {VERSION}
|
||||||
|
#
|
||||||
|
PARTS=( ${TAG//./ } )
|
||||||
|
parse_last ${#PARTS[@]} # array size as argument
|
||||||
|
#echo ${PARTS[@]}
|
||||||
|
|
||||||
|
# if no parameters than emulate --default parameter
|
||||||
|
if [[ "$@" == "" ]]; then
|
||||||
|
set -- $NO_ARGS_VALUE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# parse input parameters
|
||||||
|
for i in "$@"
|
||||||
|
do
|
||||||
|
key="$i"
|
||||||
|
|
||||||
|
case $key in
|
||||||
|
-a|--alpha) # switched to ALPHA
|
||||||
|
PARTS[4]="alpha"
|
||||||
|
IS_SHIFT=1
|
||||||
|
;;
|
||||||
|
-b|--beta) # switched to BETA
|
||||||
|
PARTS[4]="beta"
|
||||||
|
IS_SHIFT=1
|
||||||
|
;;
|
||||||
|
-c|--release-candidate) # switched to RC
|
||||||
|
PARTS[4]="rc"
|
||||||
|
IS_SHIFT=1
|
||||||
|
;;
|
||||||
|
-r|--release) # switched to RELEASE
|
||||||
|
PARTS[4]=""
|
||||||
|
IS_SHIFT=1
|
||||||
|
;;
|
||||||
|
-p|--patch) # increment of PATCH
|
||||||
|
increment_patch
|
||||||
|
;;
|
||||||
|
-e|--revision) # increment of REVISION
|
||||||
|
increment_revision
|
||||||
|
;;
|
||||||
|
-g|--git-revision) # use git revision number as a revision part§
|
||||||
|
PARTS[3]=$(( REVISION ))
|
||||||
|
IS_DIRTY=1
|
||||||
|
;;
|
||||||
|
-i|--minor) # increment of MINOR by default
|
||||||
|
increment_minor
|
||||||
|
;;
|
||||||
|
--default) # stay on the same stage, but increment only last found PART of version code
|
||||||
|
increment_last_found
|
||||||
|
;;
|
||||||
|
-m|--major) # increment of MAJOR
|
||||||
|
incremet_major
|
||||||
|
;;
|
||||||
|
-s|--stay) # extract version info
|
||||||
|
IS_DIRTY=1
|
||||||
|
NO_APPLY_MSG=1
|
||||||
|
;;
|
||||||
|
-t|--tag-only) # extract version info
|
||||||
|
TAG_ONLY=1
|
||||||
|
;;
|
||||||
|
--apply)
|
||||||
|
DO_APPLY=1
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
help
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# detected shift, but no increment
|
||||||
|
if [[ "$IS_SHIFT" == "1" ]]; then
|
||||||
|
# temporary disable stage shift
|
||||||
|
stage=${PARTS[4]}
|
||||||
|
PARTS[4]=''
|
||||||
|
|
||||||
|
# detect first run on repository, INIT_VERSION was used
|
||||||
|
if [[ "$(compose)" == "0.0" ]]; then
|
||||||
|
increment_minor
|
||||||
|
fi
|
||||||
|
|
||||||
|
PARTS[4]=$stage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# no increment applied yet and no shift of state, do minor increase
|
||||||
|
if [[ "$IS_DIRTY$IS_SHIFT" == "" ]]; then
|
||||||
|
increment_minor
|
||||||
|
fi
|
||||||
|
|
||||||
|
compose
|
||||||
|
|
||||||
|
# is proposed tag in conflict with any other TAG
|
||||||
|
PROPOSED_HASH=$(tag_hash $(compose))
|
||||||
|
if [[ "${#PROPOSED_HASH}" -gt 0 && "$NO_APPLY_MSG" == "" ]]; then
|
||||||
|
echo -e "\033[31mERROR:\033[0m "
|
||||||
|
echo -e "\033[31mERROR:\033[0m Found conflict with existing tag \033[32m$(compose)\033[0m / $PROPOSED_HASH"
|
||||||
|
echo -e "\033[31mERROR:\033[0m Only manual resolving is possible now."
|
||||||
|
echo -e "\033[31mERROR:\033[0m "
|
||||||
|
echo -e "\033[31mERROR:\033[0m To Resolve try to add --revision or --patch modifier."
|
||||||
|
echo -e "\033[31mERROR:\033[0m "
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
7
.gitignore
vendored
@@ -1,6 +1,13 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
.next
|
||||||
|
.now
|
||||||
node_modules
|
node_modules
|
||||||
dist
|
dist
|
||||||
|
build
|
||||||
sandbox
|
sandbox
|
||||||
stash
|
stash
|
||||||
coverage
|
coverage
|
||||||
|
stats
|
||||||
|
*.log
|
||||||
|
packages/**/src/icons/*.js
|
||||||
|
packages/**/src/icons/*.ts
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"*.js": "eslint"
|
|
||||||
}
|
|
||||||
16
.npmignore
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.github
|
||||||
|
packages
|
||||||
|
stats
|
||||||
|
node_modules
|
||||||
|
tests
|
||||||
|
scripts
|
||||||
|
site
|
||||||
|
src
|
||||||
|
build
|
||||||
|
babel.config.js
|
||||||
|
categories.json
|
||||||
|
jest.config.js
|
||||||
|
netlify.toml
|
||||||
|
rollup.config.js
|
||||||
|
rollup.plugins.js
|
||||||
|
tags.json
|
||||||
19
.travis.yml
@@ -1,19 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- node_modules
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
node_js: 8
|
|
||||||
before_script:
|
|
||||||
- npm prune
|
|
||||||
script:
|
|
||||||
- npm run all
|
|
||||||
after_success:
|
|
||||||
- npx codecov
|
|
||||||
- npx babel-node ./bin/sync-algolia.js
|
|
||||||
deploy:
|
|
||||||
provider: script
|
|
||||||
skip_cleanup: true
|
|
||||||
script:
|
|
||||||
- npx semantic-release
|
|
||||||
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported by contacting the project team at cole@colebemis.com. All
|
reported by contacting the project team at johnletey@gmail.com. All
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
is deemed necessary and appropriate to the circumstances. The project team is
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
|||||||
@@ -1,72 +1,59 @@
|
|||||||
|
|
||||||
# Contribution Guidelines
|
# Contribution Guidelines
|
||||||
|
|
||||||
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
|
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
|
||||||
|
|
||||||
The following is a set of guidelines for contributing to Feather. Feel free to propose changes to this document in a pull request.
|
The following is a set of guidelines for contributing to Lucide. Feel free to propose changes to this document in a pull request.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
|
|
||||||
> **Note:** At the moment we are not accepting pull requests containing _**icons**_. The best way to contribute an icon is to create an issue with a screenshot and link to an SVG of your icon.
|
Feel free to open a pull-request to contribute to this project.
|
||||||
|
|
||||||
Pull requests for new features, bug fixes, etc. are often appreciated. Please checkout the [project roadmap](https://github.com/colebemis/feather#roadmap) and raise an issue to discuss any of the items on the list.
|
|
||||||
|
|
||||||
**Working on your first Pull Request?** You can learn how from this *free* series
|
**Working on your first Pull Request?** You can learn how from this *free* series
|
||||||
[How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
|
[How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
|
||||||
|
|
||||||
Guidelines for pull requests:
|
Guidelines for pull requests:
|
||||||
|
|
||||||
- __Make your commit messages as descriptive as possible.__ Include as much information as you can. Explain anything that the file diffs themselves won’t make apparent.
|
- __Make your commit messages as descriptive as possible.__ Include as much information as you can. Explain anything that the file diffs themselves won’t make apparent.
|
||||||
- __Document your pull request__. Explain your fix, link to the relevant issue, add screenshots when adding new icons.
|
- __Document your pull request__. Explain your fix, link to the relevant issue, add screenshots when adding new icons.
|
||||||
- __Make sure the target of your pull request is the relevant branch__. Most of bugfix or new feature should go to the `master` branch.
|
- __Make sure the target of your pull request is the relevant branch__. Most of bugfix or new feature should go to the `master` branch.
|
||||||
- __Include only related work__. If your pull request has unrelated commit, it won't be accepted.
|
- __Include only related work__. If your pull request has unrelated commit, it won't be accepted.
|
||||||
|
|
||||||
|
### Pull Requests Including Icons
|
||||||
|
|
||||||
|
#### 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).
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|
||||||
|
If you want submit multiple icons, please separate the icons and group them. That makes reviewing the icons easier and keep the thread clean and scoped.
|
||||||
|
So don't submit multiple icons in one PR that have noting to do with each other.
|
||||||
|
So for example don't create one PR with icons: `arrow-up`, `bicycle`, `arrow-down`.
|
||||||
|
Seperate them by two PRs; 'pr-01' `arrow`, `arrow-down` and 'pr-02' `bicycle`.
|
||||||
|
|
||||||
## Icon Requests
|
## Icon Requests
|
||||||
|
|
||||||
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a :+1:.
|
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a :+1:.
|
||||||
|
|
||||||
If the icon has not already been requested, [create an issue](https://github.com/colebemis/feather/issues/new?title=Icon%20Request:) with a title of `Icon request: <icon name>` and add as much information as possible.
|
If the icon has not already been requested, [create an issue](https://github.com/lucide-icons/lucide/issues/new?title=Icon%20Request:) with a title of `Icon request: <icon name>` and add as much information as possible.
|
||||||
|
|
||||||
## Bug Reports
|
## Icon Requests from Feather
|
||||||
|
|
||||||
Before reporting an issue, please search to see if someone has filed a similar issue before. If there is already an open issue, please add a :+1: and/or leave a comment with additional information.
|
If you are a designer who wants to contribute to Lucide but you don't know what icons to work on, then have a look at the Requests from Feather. All open, unfinished and valid requests can be found in [Feather Icon Requests](https://github.com/lucide-icons/lucide/issues/119).
|
||||||
|
|
||||||
When creating a new issue make sure to include the following:
|
|
||||||
- Version of `Feather` in use. Are you running from source/master? Are you using a released build? Which release?
|
|
||||||
- Your environment. What is your operating system? 32 or 64 bits?
|
|
||||||
- Step to reproduce. Even if the step is only one line change, __include it!__ Include the actual result and what you expected.
|
|
||||||
- Any message or error you get in the console, if you do.
|
|
||||||
- A screenshot of any visual bug.
|
|
||||||
|
|
||||||
Here is what a great bug report would look like:
|
|
||||||
|
|
||||||
```
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Version: Release v3.1.0
|
|
||||||
Running from: Import using webpack
|
|
||||||
Operating system: Mac OSX
|
|
||||||
Bits: 64 bits
|
|
||||||
|
|
||||||
## Step to reproduce
|
|
||||||
|
|
||||||
- Import `check` icon
|
|
||||||
- Add to a React component/view
|
|
||||||
- Run the react app
|
|
||||||
- Notice that the `check` isn't rendering correctly which seems a encoding problem
|
|
||||||
|
|
||||||
### Actual behavior:
|
|
||||||
|
|
||||||
- Import `check` icon
|
|
||||||
- Add to a React component/view
|
|
||||||
- Run the react app
|
|
||||||
- Check is displayed with correct encoding (e.g UTF-8)
|
|
||||||
|
|
||||||
## Any message or error
|
|
||||||
|
|
||||||
No console output
|
|
||||||
...
|
|
||||||
|
|
||||||
## Resources
|
|
||||||
|
|
||||||
No resources
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|||||||
30
LICENSE
@@ -1,21 +1,15 @@
|
|||||||
The MIT License (MIT)
|
ISC License
|
||||||
|
|
||||||
Copyright (c) 2013-2017 Cole Bemis
|
Copyright (c) 2020, Lucide Contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
in the Software without restriction, including without limitation the rights
|
copyright notice and this permission notice appear in all copies.
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
copies or substantial portions of the Software.
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|||||||
440
README.md
@@ -1,404 +1,178 @@
|
|||||||
# Feather
|
<p align=center><img width="410" src="https://lucide.dev/logo-text.svg" alt="Lucide Logo"></p>
|
||||||
|
|
||||||
[](https://travis-ci.org/feathericons/feather)
|
# Lucide
|
||||||
[](https://codecov.io/gh/feathericons/feather)
|
|
||||||
[](https://www.npmjs.com/package/feather-icons)
|
|
||||||
[](https://www.npmjs.com/package/feather-icons)
|
|
||||||
[](https://cdnjs.com/libraries/feather-icons)
|
|
||||||
[](https://www.paypal.me/colebemis/5)
|
|
||||||
|
|
||||||
## What is Feather?
|

|
||||||
|
[](https://www.npmjs.com/package/lucide)
|
||||||
|
[](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons)
|
||||||
|
[](https://discord.gg/EH6nSts)
|
||||||
|
|
||||||
Feather is a collection of simply beautiful open source icons. Each icon is designed on a 24x24 grid with an emphasis on simplicity, consistency, and flexibility.
|
## What is Lucide?
|
||||||
|
|
||||||
https://feathericons.com
|
Lucide is a community-run fork of [Feather Icons](https://github.com/feathericons/feather), open for anyone to contribute icons.
|
||||||
|
|
||||||
```shell
|
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.
|
||||||
npm install feather-icons
|
|
||||||
```
|
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 expanded the icon set by 130+ in less then a year, so more icons to work with.
|
||||||
|
- Well maintained code base.
|
||||||
|
- Active community.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
* [Quick Start](#quick-start)
|
* [Installation](#installation)
|
||||||
|
* [Package managers](#package-managers)
|
||||||
|
* [CDN](#cdn)
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Client-side JavaScript](#client-side-javascript)
|
* [Web](#web)
|
||||||
* [Node](#node)
|
* [React](#react)
|
||||||
* [SVG Sprite](#svg-sprite)
|
* [Vue 2](#vue-2)
|
||||||
|
* [Vue 3](#vue-3)
|
||||||
|
* [Angular](#angular)
|
||||||
|
* [Preact](#preact)
|
||||||
* [Figma](#figma)
|
* [Figma](#figma)
|
||||||
* [API Reference](#api-reference)
|
* [Laravel](#laravel)
|
||||||
* [`feather.icons`](#feathericons)
|
* [Flutter](#flutter)
|
||||||
* [`feather.icons[name].toSvg()`](#feathericonsnametosvgattrs)
|
|
||||||
* [`feather.replace()`](#featherreplaceattrs)
|
|
||||||
* [(DEPRECATED) `feather.toSvg()`](#deprecated-feathertosvgname-attrs)
|
|
||||||
* [Contributing](#contributing)
|
* [Contributing](#contributing)
|
||||||
* [Related Projects](#related-projects)
|
* [Community](#community)
|
||||||
* [License](#license)
|
* [License](#license)
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
Start with this [CodePen Template](https://codepen.io/pen?template=WOJZdM) to begin prototyping with Feather in the browser.
|
|
||||||
|
|
||||||
Or copy and paste the following code snippet into a blank `html` file.
|
|
||||||
|
|
||||||
```html
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<title></title>
|
|
||||||
<script src="https://unpkg.com/feather-icons"></script>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<!-- example icon -->
|
|
||||||
<i data-feather="circle"></i>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
feather.replace()
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
At its core, Feather is a collection of [SVG](https://svgontheweb.com/#svg) files. This means that you can use Feather 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)
|
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)
|
||||||
|
|
||||||
The following are additional ways you can use Feather.
|
The following are additional ways you can use Lucide.
|
||||||
|
With the Javascript library you can easily incorporate the icon you want in your webpage.
|
||||||
|
|
||||||
### Client-side JavaScript
|
### Web
|
||||||
|
|
||||||
#### 1. Install
|
Implementation of the lucide icon library for web applications.
|
||||||
|
|
||||||
> **Note:** If you intend to use Feather with a CDN, you can skip this installation step.
|
```sh
|
||||||
|
npm install lucide
|
||||||
|
|
||||||
Install with [npm](https://docs.npmjs.com/getting-started/what-is-npm).
|
#or
|
||||||
|
|
||||||
```shell
|
yarn add lucide
|
||||||
npm install feather-icons --save
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Or just copy [`feather.js`](https://unpkg.com/feather-icons/dist/feather.js) or [`feather.min.js`](https://unpkg.com/feather-icons/dist/feather.min.js) into your project directory. You don't need both `feather.js` and `feather.min.js`.
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide#lucide).
|
||||||
|
|
||||||
#### 2. Include
|
### React
|
||||||
|
|
||||||
Include `feather.js` or `feather.min.js` with a `<script>` tag:
|
Implementation of the lucide icon library for react applications.
|
||||||
|
|
||||||
```html
|
```sh
|
||||||
<script src="path/to/dist/feather.js"></script>
|
yarn add lucide-react
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
npm install lucide-react
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** `feather.js` and `feather.min.js` are located in the `dist` directory of the npm package.
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-react#lucide-react).
|
||||||
|
|
||||||
Or load the script from a CDN provider:
|
### Vue 2
|
||||||
|
|
||||||
```html
|
Implementation of the lucide icon library for vue applications.
|
||||||
<!-- choose one -->
|
|
||||||
<script src="https://unpkg.com/feather-icons"></script>
|
```sh
|
||||||
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
yarn add lucide-vue
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
npm install lucide-vue
|
||||||
```
|
```
|
||||||
|
|
||||||
After including the script, `feather` will be available as a global variable.
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue#lucide-vue).
|
||||||
|
|
||||||
#### 3. Use
|
### Vue 3
|
||||||
|
|
||||||
To use an icon on your page, add a `data-feather` attribute with the icon name to an element:
|
Implementation of the lucide icon library for vue applications.
|
||||||
|
|
||||||
```html
|
```sh
|
||||||
<i data-feather="circle"></i>
|
yarn add lucide-vue-next
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
npm install lucide-vue-next
|
||||||
```
|
```
|
||||||
|
|
||||||
See the complete list of icons at [feathericons.com](https://feathericons.com).
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue-next#lucide-vue-next).
|
||||||
|
|
||||||
#### 4. Replace
|
### Angular
|
||||||
|
|
||||||
Call the `feather.replace()` method:
|
```sh
|
||||||
|
yarn add lucide-angular
|
||||||
|
|
||||||
```html
|
# or
|
||||||
<script>
|
|
||||||
feather.replace()
|
npm install lucide-angular
|
||||||
</script>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
All elements that have a `data-feather` attribute will be replaced with SVG markup corresponding to their `data-feather` attribute value. See the [API Reference](#api-reference) for more information about `feather.replace()`.
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/packages/lucide-angular#lucide-angular).
|
||||||
|
|
||||||
### Node
|
### Preact
|
||||||
#### 1. Install
|
|
||||||
|
|
||||||
Install with [npm](https://docs.npmjs.com/getting-started/what-is-npm):
|
Implementation of the lucide icon library for preact applications.
|
||||||
|
|
||||||
```shell
|
```sh
|
||||||
npm install feather-icons --save
|
yarn add lucide-preact
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
npm install lucide-preact
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. Require
|
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-preact#lucide-preact).
|
||||||
|
|
||||||
```js
|
|
||||||
const feather = require('feather-icons')
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 3. Use
|
|
||||||
|
|
||||||
```js
|
|
||||||
feather.icons.x
|
|
||||||
// {
|
|
||||||
// name: 'x',
|
|
||||||
// contents: '<line ... /><line ... />`,
|
|
||||||
// tags: ['cancel', 'close', 'delete', 'remove'],
|
|
||||||
// attrs: {
|
|
||||||
// class: 'feather feather-x',
|
|
||||||
// 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',
|
|
||||||
// },
|
|
||||||
// toSvg: [Function],
|
|
||||||
// }
|
|
||||||
|
|
||||||
feather.icons.x.toSvg()
|
|
||||||
// <svg class="feather feather-x" ...><line ... /><line ... /></svg>
|
|
||||||
|
|
||||||
feather.icons.x.toSvg({ class: 'foo bar', 'stroke-width': 1, color: 'red' })
|
|
||||||
// <svg class="feather feather-x foo bar" stroke-width="1" color="red" ...><line ... /><line ... /></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
See the [API Reference](#api-reference) for more information about the available properties and methods of the `feather` object.
|
|
||||||
|
|
||||||
### SVG Sprite
|
|
||||||
|
|
||||||
#### 1. Install
|
|
||||||
|
|
||||||
> **Note:** If you intend to use Feather with a CDN, you can skip this installation step.
|
|
||||||
|
|
||||||
Install with [npm](https://docs.npmjs.com/getting-started/what-is-npm).
|
|
||||||
|
|
||||||
```shell
|
|
||||||
npm install feather-icons --save
|
|
||||||
```
|
|
||||||
|
|
||||||
Or just copy [`feather-sprite.svg`](https://unpkg.com/feather-icons/dist/feather-sprite.svg) into your project directory.
|
|
||||||
|
|
||||||
#### 2. Use
|
|
||||||
|
|
||||||
Include an icon on your page with the following markup:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<use xlink:href="path/to/feather-sprite.svg#circle"/>
|
|
||||||
</svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Note:** `circle` in the above example can be replaced with any valid icon name. See the complete list of icon names at [feathericons.com](https://feathericons.com).
|
|
||||||
|
|
||||||
However, this markup can be simplified using a simple CSS class to avoid repetition of SVG attributes between icons:
|
|
||||||
|
|
||||||
```css
|
|
||||||
.feather {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
stroke: currentColor;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: round;
|
|
||||||
fill: none;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg class="feather">
|
|
||||||
<use xlink:href="path/to/dist/feather-sprite.svg#circle"/>
|
|
||||||
</svg>
|
|
||||||
```
|
|
||||||
### Figma
|
### Figma
|
||||||
Feather is available as a [Figma component library](https://www.figma.com/file/dyJRSFTIajik4cdkcXN8yA3K/Feather-Component-Library). To use the components, log in to your Figma account and **duplicate** the file to your drafts.
|
|
||||||
|
|
||||||
## API Reference
|
The lucide figma plugin.
|
||||||
|
|
||||||
### `feather.icons`
|
Visit [Figma community page](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons) to install the plugin.
|
||||||
|
|
||||||
An object with data about every icon.
|
<img width="420" src="https://www.figma.com/community/plugin/939567362549682242/thumbnail" alt="Figma Lucide Cover">
|
||||||
|
|
||||||
#### Usage
|
### Laravel
|
||||||
|
|
||||||
```js
|
Implementation of Lucide icon's using `blade-icons` for Laravel based projects.
|
||||||
feather.icons.x
|
|
||||||
// {
|
|
||||||
// name: 'x',
|
|
||||||
// contents: '<line ... /><line ... />',
|
|
||||||
// tags: ['cancel', 'close', 'delete', 'remove'],
|
|
||||||
// attrs: {
|
|
||||||
// class: 'feather feather-x',
|
|
||||||
// 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',
|
|
||||||
// },
|
|
||||||
// toSvg: [Function],
|
|
||||||
// }
|
|
||||||
|
|
||||||
feather.icons.x.toString()
|
```sh
|
||||||
// '<line ... /><line ... />'
|
composer require mallardduck/blade-lucide-icons
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** `x` in the above example can be replaced with any valid icon name. See the complete list of icon names at [feathericons.com](https://feathericons.com). Icons with multi-word names (e.g. `arrow-right`) **cannot** be accessed using dot notation (e.g. `feather.icons.x`). Instead, use bracket notation (e.g. `feather.icons['arrow-right']`).
|
For more details, see the [documentation](https://github.com/mallardduck/blade-lucide-icons/blob/main/README.md).
|
||||||
|
|
||||||
[View Source](https://github.com/colebemis/feather/blob/master/src/icons.js)
|
### Flutter
|
||||||
|
|
||||||
---
|
Implementation of Lucide icon library for Flutter applications.
|
||||||
|
|
||||||
### `feather.icons[name].toSvg([attrs])`
|
```sh
|
||||||
|
flutter pub add lucide_icons
|
||||||
Returns an SVG string.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| --------- | ------ | ----------- |
|
|
||||||
| `attrs` (optional) | Object | Key-value pairs in the `attrs` object will be mapped to HTML attributes on the `<svg>` tag (e.g. `{ foo: 'bar' }` maps to `foo="bar"`). All default attributes on the `<svg>` tag can be overridden with the `attrs` object. |
|
|
||||||
|
|
||||||
> **Hint:** You might find these SVG attributes helpful for manipulating icons:
|
|
||||||
> * [`color`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/color)
|
|
||||||
> * [`width`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/width)
|
|
||||||
> * [`height`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/height)
|
|
||||||
> * [`stroke-width`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width)
|
|
||||||
> * [`stroke-linecap`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap)
|
|
||||||
> * [`stroke-linejoin`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin)
|
|
||||||
|
|
||||||
#### Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
feather.icons.circle.toSvg()
|
|
||||||
// '<svg class="feather feather-circle" 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"></circle></svg>'
|
|
||||||
|
|
||||||
feather.icons.circle.toSvg({ 'stroke-width': 1 })
|
|
||||||
// '<svg class="feather feather-circle" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle></svg>'
|
|
||||||
|
|
||||||
feather.icons.circle.toSvg({ class: 'foo bar' })
|
|
||||||
// '<svg class="feather feather-circle foo bar" 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"></circle></svg>'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[View Source](https://github.com/colebemis/feather/blob/master/src/icon.js)
|
For more details, see the [pub.dev](https://pub.dev/packages/lucide_icons).
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `feather.replace([attrs])`
|
|
||||||
|
|
||||||
Replaces all elements that have a `data-feather` attribute with SVG markup corresponding to the element's `data-feather` attribute value.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---------- | ------ | ----------- |
|
|
||||||
| `attrs` (optional) | Object | Key-value pairs in the `attrs` object will be mapped to HTML attributes on the `<svg>` tag (e.g. `{ foo: 'bar' }` maps to `foo="bar"`). All default attributes on the `<svg>` tag can be overridden with the `attrs` object. |
|
|
||||||
|
|
||||||
#### Usage
|
|
||||||
|
|
||||||
> **Note:** `feather.replace()` only works in a browser environment.
|
|
||||||
|
|
||||||
Simple usage:
|
|
||||||
```html
|
|
||||||
<i data-feather="circle"></i>
|
|
||||||
<!--
|
|
||||||
<i> will be replaced with:
|
|
||||||
<svg class="feather feather-circle" 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"></circle></svg>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script>
|
|
||||||
feather.replace()
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
You can pass `feather.replace()` an `attrs` object:
|
|
||||||
```html
|
|
||||||
<i data-feather="circle"></i>
|
|
||||||
<!--
|
|
||||||
<i> will be replaced with:
|
|
||||||
<svg class="feather feather-circle foo bar" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle></svg>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script>
|
|
||||||
feather.replace({ class: 'foo bar', 'stroke-width': 1 })
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
All attributes on the placeholder element (i.e. `<i>`) will be copied to the `<svg>` tag:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<i data-feather="circle" id="my-circle" class="foo bar" stroke-width="1"></i>
|
|
||||||
<!--
|
|
||||||
<i> will be replaced with:
|
|
||||||
<svg id="my-circle" class="feather feather-circle foo bar" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle></svg>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script>
|
|
||||||
feather.replace()
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
[View Source](https://github.com/colebemis/feather/blob/master/src/replace.js)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### (DEPRECATED) `feather.toSvg(name, [attrs])`
|
|
||||||
|
|
||||||
> **Note:** `feather.toSvg()` is deprecated. Please use `feather.icons[name].toSvg()` instead.
|
|
||||||
|
|
||||||
Returns an SVG string.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| --------- | ------ | ----------- |
|
|
||||||
| `name` | string | Icon name |
|
|
||||||
| `attrs` (optional) | Object | Key-value pairs in the `attrs` object will be mapped to HTML attributes on the `<svg>` tag (e.g. `{ foo: 'bar' }` maps to `foo="bar"`). All default attributes on the `<svg>` tag can be overridden with the `attrs` object. |
|
|
||||||
|
|
||||||
#### Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
feather.toSvg('circle')
|
|
||||||
// '<svg class="feather feather-circle" 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"></circle></svg>'
|
|
||||||
|
|
||||||
feather.toSvg('circle', { 'stroke-width': 1 })
|
|
||||||
// '<svg class="feather feather-circle" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle></svg>'
|
|
||||||
|
|
||||||
feather.toSvg('circle', { class: 'foo bar' })
|
|
||||||
// '<svg class="feather feather-circle foo bar" 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"></circle></svg>'
|
|
||||||
```
|
|
||||||
|
|
||||||
[View Source](https://github.com/colebemis/feather/blob/master/src/to-svg.js)
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
For more info on how to contribute please see the [contribution guidelines](https://github.com/colebemis/feather/blob/master/CONTRIBUTING.md).
|
For more info on how to contribute please see the [contribution guidelines](https://github.com/lucide-icons/lucide/blob/master/CONTRIBUTING.md).
|
||||||
|
|
||||||
Caught a mistake or want to contribute to the documentation? [Edit this page on Github](https://github.com/colebemis/feather/blob/master/README.md)
|
Caught a mistake or want to contribute to the documentation? [Edit this page on Github](https://github.com/lucide-icons/lucide/blob/master/README.md)
|
||||||
|
|
||||||
## Related Projects
|
## Community
|
||||||
|
|
||||||
- [angular-feather](https://github.com/michaelbazos/angular-feather) - Feather icons for Angular applications
|
Join the community on our [Discord](https://discord.gg/EH6nSts) server!
|
||||||
- [elm-feather](https://github.com/1602/elm-feather) - Feather icons for Elm applications
|
|
||||||
- [react-feather](https://github.com/carmelopullara/react-feather) - Feather icons as React components
|
|
||||||
- [sketch-feather](https://github.com/odmln/sketch-feather) - Feather icons as a Sketch library
|
|
||||||
- [vue-feather-icons](https://github.com/egoist/vue-feather-icons) - Feather icons as Vue components
|
|
||||||
- [php-feather](https://github.com/Pixelrobin/php-feather) - Feather icons as a PHP Library
|
|
||||||
- [django-feather](https://pypi.org/project/django-feather/) - Feather icons as Django Template Tag
|
|
||||||
- [svelte-feather-icons](https://github.com/dylanblokhuis/svelte-feather-icons) - Feather icons as Svelte components
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Feather is licensed under the [MIT License](https://github.com/colebemis/feather/blob/master/LICENSE).
|
Lucide is totally free for commercial use and personally use, this software is licensed under the [ISC License](https://github.com/lucide-icons/lucide/blob/master/LICENSE).
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
|
||||||
|
<a href="https://vercel.com?utm_source=lucide&utm_campaign=oss">
|
||||||
|
<img src="./site/public/vercel.svg" alt="Powered by Vercel" width="200" />
|
||||||
|
</a>
|
||||||
|
|||||||
20
babel.config.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: ['@babel/env'],
|
||||||
|
// babelrcRoots: ['.', './packages/*'],
|
||||||
|
env: {
|
||||||
|
test: {
|
||||||
|
presets: ['@babel/env'],
|
||||||
|
plugins: ['@babel/plugin-transform-runtime'],
|
||||||
|
},
|
||||||
|
dev: {
|
||||||
|
plugins: [
|
||||||
|
[
|
||||||
|
'transform-inline-environment-variables',
|
||||||
|
{
|
||||||
|
include: ['NODE_ENV'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"rules": {
|
|
||||||
"import/no-extraneous-dependencies": "off",
|
|
||||||
"no-console": "off"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`builds object correctly 1`] = `
|
|
||||||
Object {
|
|
||||||
"icon1": "<line x1=\\"23\\" y1=\\"1\\" x2=\\"1\\" y2=\\"23\\"></line><line x1=\\"1\\" y1=\\"1\\" x2=\\"23\\" y2=\\"23\\"></line>",
|
|
||||||
"icon2": "<circle cx=\\"12\\" cy=\\"12\\" r=\\"11\\"></circle>",
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`builds sprite correctly 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\"><defs><symbol id=\\"icon1\\" viewBox=\\"0 0 24 24\\"><line x1=\\"23\\" y1=\\"1\\" x2=\\"1\\" y2=\\"23\\"></line><line x1=\\"1\\" y1=\\"1\\" x2=\\"23\\" y2=\\"23\\"></line></symbol><symbol id=\\"icon2\\" viewBox=\\"0 0 24 24\\"><circle cx=\\"12\\" cy=\\"12\\" r=\\"11\\"></circle></symbol></defs></svg>"`;
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`processes SVG correctly 1`] = `
|
|
||||||
"<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=\\"23\\" y1=\\"1\\" x2=\\"1\\" y2=\\"23\\" />
|
|
||||||
<line x1=\\"1\\" y1=\\"1\\" x2=\\"23\\" y2=\\"23\\" />
|
|
||||||
</svg>
|
|
||||||
"
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`rejects when passed unparsable SVG string 1`] = `
|
|
||||||
[Error: Error in parsing SVG: Unclosed root tag
|
|
||||||
Line: 0
|
|
||||||
Column: 10
|
|
||||||
Char: ]
|
|
||||||
`;
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
/* eslint-env jest */
|
|
||||||
import buildIconsObject from '../build-icons-object';
|
|
||||||
|
|
||||||
const SVG_FILES = {
|
|
||||||
'icon1.svg':
|
|
||||||
'<svg\n xmlns="http://www.w3.org/2000/svg"\n width="24"\n height="24"\n viewBox="0 0 24 24"\n>\n <line x1="23" y1="1" x2="1" y2="23" />\n <line x1="1" y1="1" x2="23" y2="23" />\n</svg>',
|
|
||||||
'icon2.svg':
|
|
||||||
'<svg\n xmlns="http://www.w3.org/2000/svg"\n width="24"\n height="24"\n viewBox="0 0 24 24"\n>\n <circle cx="12" cy="12" r="11" />\n</svg>',
|
|
||||||
};
|
|
||||||
|
|
||||||
function getSvg(svgFile) {
|
|
||||||
return SVG_FILES[svgFile];
|
|
||||||
}
|
|
||||||
|
|
||||||
test('builds object correctly', () => {
|
|
||||||
expect(buildIconsObject(Object.keys(SVG_FILES), getSvg)).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
/* eslint-env jest */
|
|
||||||
import buildSpriteString from '../build-sprite-string';
|
|
||||||
|
|
||||||
const icons = {
|
|
||||||
icon1:
|
|
||||||
'<line x1="23" y1="1" x2="1" y2="23"></line><line x1="1" y1="1" x2="23" y2="23"></line>',
|
|
||||||
icon2: '<circle cx="12" cy="12" r="11"></circle>',
|
|
||||||
};
|
|
||||||
|
|
||||||
test('builds sprite correctly', () => {
|
|
||||||
expect(buildSpriteString(icons)).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
/* eslint-env jest */
|
|
||||||
import processSvg from '../process-svg';
|
|
||||||
|
|
||||||
test('processes SVG correctly', () => {
|
|
||||||
const SVG =
|
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Title</title><line x1="23" y1="1" x2="1" y2="23" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="1" y1="1" x2="23" y2="23" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>';
|
|
||||||
|
|
||||||
expect(processSvg(SVG)).resolves.toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('rejects when passed unparsable SVG string', () => {
|
|
||||||
const UNPARSABLE_SVG = '<svg></svg';
|
|
||||||
|
|
||||||
expect(processSvg(UNPARSABLE_SVG)).rejects.toMatchSnapshot();
|
|
||||||
});
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
import buildIconsObject from './build-icons-object';
|
|
||||||
|
|
||||||
const IN_DIR = path.resolve(__dirname, '../icons');
|
|
||||||
const OUT_FILE = path.resolve(__dirname, '../dist/icons.json');
|
|
||||||
|
|
||||||
console.log(`Building ${OUT_FILE}...`);
|
|
||||||
|
|
||||||
const svgFiles = fs
|
|
||||||
.readdirSync(IN_DIR)
|
|
||||||
.filter(file => path.extname(file) === '.svg');
|
|
||||||
|
|
||||||
const getSvg = svgFile => fs.readFileSync(path.join(IN_DIR, svgFile));
|
|
||||||
|
|
||||||
const icons = buildIconsObject(svgFiles, getSvg);
|
|
||||||
|
|
||||||
fs.writeFileSync(OUT_FILE, JSON.stringify(icons));
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
import path from 'path';
|
|
||||||
import cheerio from 'cheerio';
|
|
||||||
import { minify } from 'html-minifier';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build an object in the format: `{ <name>: <contents> }`.
|
|
||||||
* @param {string[]} svgFiles - A list of filenames.
|
|
||||||
* @param {Function} getSvg - A function that returns the contents of an SVG file given a filename.
|
|
||||||
* @returns {Object}
|
|
||||||
*/
|
|
||||||
function buildIconsObject(svgFiles, getSvg) {
|
|
||||||
return svgFiles
|
|
||||||
.map(svgFile => {
|
|
||||||
const name = path.basename(svgFile, '.svg');
|
|
||||||
const svg = getSvg(svgFile);
|
|
||||||
const contents = getSvgContents(svg);
|
|
||||||
return { name, contents };
|
|
||||||
})
|
|
||||||
.reduce((icons, icon) => {
|
|
||||||
icons[icon.name] = icon.contents;
|
|
||||||
return icons;
|
|
||||||
}, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get contents between opening and closing `<svg>` tags.
|
|
||||||
* @param {string} svg
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function getSvgContents(svg) {
|
|
||||||
const $ = cheerio.load(svg);
|
|
||||||
return minify($('svg').html(), { collapseWhitespace: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
export default buildIconsObject;
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
import DEFAULT_ATTRS from '../src/default-attrs.json';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build an SVG sprite string containing SVG symbols.
|
|
||||||
* @param {Object} icons
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function buildSpriteString(icons) {
|
|
||||||
const symbols = Object.keys(icons)
|
|
||||||
.map(icon => toSvgSymbol(icon, icons[icon]))
|
|
||||||
.join('');
|
|
||||||
|
|
||||||
return `<svg xmlns="${DEFAULT_ATTRS.xmlns}"><defs>${symbols}</defs></svg>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an SVG symbol string.
|
|
||||||
* @param {string} name - Icon name
|
|
||||||
* @param {string} contents - SVG contents
|
|
||||||
* @returns {string}
|
|
||||||
*/
|
|
||||||
function toSvgSymbol(name, contents) {
|
|
||||||
return `<symbol id="${name}" viewBox="${DEFAULT_ATTRS.viewBox}">${
|
|
||||||
contents
|
|
||||||
}</symbol>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default buildSpriteString;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import icons from '../dist/icons.json';
|
|
||||||
import buildSpriteString from './build-sprite-string';
|
|
||||||
|
|
||||||
const OUT_FILE = path.resolve(__dirname, '../dist/feather-sprite.svg');
|
|
||||||
|
|
||||||
console.log(`Building ${OUT_FILE}...`);
|
|
||||||
|
|
||||||
fs.writeFileSync(OUT_FILE, buildSpriteString(icons));
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import icons from '../src/icons';
|
|
||||||
|
|
||||||
const OUT_DIR = path.resolve(__dirname, '../dist/icons');
|
|
||||||
|
|
||||||
console.log(`Building SVGs in ${OUT_DIR}...`);
|
|
||||||
|
|
||||||
Object.keys(icons).forEach(name => {
|
|
||||||
const svg = icons[name].toSvg();
|
|
||||||
|
|
||||||
fs.writeFileSync(path.join(OUT_DIR, `${name}.svg`), svg);
|
|
||||||
});
|
|
||||||
25
bin/build.sh
@@ -1,25 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Process SVG files
|
|
||||||
npx babel-node bin/process-svgs.js
|
|
||||||
|
|
||||||
# Create dist directory
|
|
||||||
npx rimraf dist
|
|
||||||
mkdir dist
|
|
||||||
|
|
||||||
# Build icons.json
|
|
||||||
npx babel-node bin/build-icons-json.js
|
|
||||||
|
|
||||||
# Build SVG sprite
|
|
||||||
npx babel-node bin/build-sprite.js
|
|
||||||
|
|
||||||
# Create dist/icons directory
|
|
||||||
npx rimraf dist/icons
|
|
||||||
mkdir dist/icons
|
|
||||||
|
|
||||||
# Build SVG icons
|
|
||||||
npx babel-node bin/build-svgs.js
|
|
||||||
|
|
||||||
# Build JavaScript library
|
|
||||||
npx webpack --output-filename feather.js --mode development
|
|
||||||
npx webpack --output-filename feather.min.js --mode production
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
import processSvg from './process-svg';
|
|
||||||
|
|
||||||
const IN_DIR = path.resolve(__dirname, '../icons');
|
|
||||||
|
|
||||||
console.log(`Processing SVGs in ${IN_DIR}...`);
|
|
||||||
|
|
||||||
fs
|
|
||||||
.readdirSync(IN_DIR)
|
|
||||||
.filter(file => path.extname(file) === '.svg')
|
|
||||||
.forEach(svgFile => {
|
|
||||||
const svg = fs.readFileSync(path.join(IN_DIR, svgFile));
|
|
||||||
processSvg(svg).then(svg =>
|
|
||||||
fs.writeFileSync(path.join(IN_DIR, svgFile), svg),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
import algolia from 'algoliasearch';
|
|
||||||
import icons from '../dist/icons.json';
|
|
||||||
import tags from '../src/tags.json';
|
|
||||||
|
|
||||||
const ALGOLIA_APP_ID = '5EEOG744D0';
|
|
||||||
|
|
||||||
if (
|
|
||||||
process.env.TRAVIS_PULL_REQUEST === 'false' &&
|
|
||||||
process.env.TRAVIS_BRANCH === 'master'
|
|
||||||
) {
|
|
||||||
syncAlgolia();
|
|
||||||
} else {
|
|
||||||
console.log('Skipped Algolia sync.');
|
|
||||||
}
|
|
||||||
|
|
||||||
function syncAlgolia() {
|
|
||||||
// ALGOLIA_ADMIN_KEY must be added as an environment variable in Travis CI
|
|
||||||
const client = algolia(ALGOLIA_APP_ID, process.env.ALGOLIA_ADMIN_KEY);
|
|
||||||
|
|
||||||
console.log('Initializing target and temporary indexes...');
|
|
||||||
const index = client.initIndex('icons');
|
|
||||||
const indexTmp = client.initIndex('icons_tmp');
|
|
||||||
|
|
||||||
console.log(
|
|
||||||
"Copying target index's settings, synonyms and rules into temporary index...",
|
|
||||||
);
|
|
||||||
scopedCopyIndex(client, index.indexName, indexTmp.indexName)
|
|
||||||
.then(() => {
|
|
||||||
const objects = Object.keys(icons).map(name => ({
|
|
||||||
name,
|
|
||||||
tags: tags[name] || [],
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.log('Adding objects to the temporary index...');
|
|
||||||
return addObjects(indexTmp, objects);
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
console.log('Moving temporary index to target index...');
|
|
||||||
return moveIndex(client, indexTmp.indexName, index.indexName);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function scopedCopyIndex(
|
|
||||||
client,
|
|
||||||
indexNameSrc,
|
|
||||||
indexNameDest,
|
|
||||||
scope = ['settings', 'synonyms', 'rules'],
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
client.copyIndex(indexNameSrc, indexNameDest, scope, (error, contents) => {
|
|
||||||
if (error) reject(error);
|
|
||||||
resolve(contents);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addObjects(index, objects) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
index.addObjects(objects, (error, contents) => {
|
|
||||||
if (error) reject(error);
|
|
||||||
resolve(contents);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function moveIndex(client, indexNameSrc, indexNameDest) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
client.moveIndex(indexNameSrc, indexNameDest, (error, contents) => {
|
|
||||||
if (error) reject(error);
|
|
||||||
resolve(contents);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
19
categories.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"arrows": [],
|
||||||
|
"brands": [],
|
||||||
|
"code": [],
|
||||||
|
"connectivity": ["airplay"],
|
||||||
|
"cursors": [],
|
||||||
|
"development": [],
|
||||||
|
"devices": ["alarm-clock"],
|
||||||
|
"file-system": [],
|
||||||
|
"layout": [],
|
||||||
|
"maths": ["activity"],
|
||||||
|
"multimedia": [],
|
||||||
|
"notifications": ["alert-circle", "alert-octagon", "alert-triangle"],
|
||||||
|
"nature": [],
|
||||||
|
"shopping": [],
|
||||||
|
"shapes": [],
|
||||||
|
"sports": [],
|
||||||
|
"text-edit": ["align-center","align-right","align-left","align-justify" ]
|
||||||
|
}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
extends: ['@commitlint/config-conventional'],
|
|
||||||
rules: {
|
|
||||||
'scope-case': [0],
|
|
||||||
'subject-case': [2, 'always', 'sentence-case'],
|
|
||||||
'header-max-length': [0],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
78
docs/ICON_DESIGN_GUIDE.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Icon Design Guide
|
||||||
|
|
||||||
|
Here are rules that should be followed to keep quality and consistency when making icons for Lucide.
|
||||||
|
|
||||||
|
## Summary of the rules we have
|
||||||
|
|
||||||
|
1. Icons must be designed on a **24 by 24 pixels** 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**.
|
||||||
|
6. Icons must use **centered strokes**.
|
||||||
|
7. Shapes (such as rectangles) in icons must have **border radius of 2 pixels**.
|
||||||
|
8. Distinct elements must have **2 pixels of spacing between each other**.
|
||||||
|
|
||||||
|
## The Rules Visualized
|
||||||
|
|
||||||
|
### 1. Icons must be designed on a 24 by 24 pixels 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 6. Icons must use centered strokes.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 7. Shapes (such as squares) in icons must have border radius of 2 pixels.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 8. Distinct elements must have 2 pixels of spacing between each other.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Code Conventions
|
||||||
|
|
||||||
|
Before an icon is added to the library, we like to have readable and optimized svg code.
|
||||||
|
|
||||||
|
### Global Attributes
|
||||||
|
|
||||||
|
For each icon these attributes are applied, corresponding to the above rules.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<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"
|
||||||
|
>
|
||||||
|
<!-- SVGElements -->
|
||||||
|
</svg>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Minify paths
|
||||||
|
|
||||||
|
Code of paths can get really big.
|
||||||
|
To reduce file size we like to minify the code.
|
||||||
|
We recommend to use the [SVGOMG](https://jakearchibald.github.io/svgomg/) to minify paths.
|
||||||
28
docs/ILLUSTRATOR_GUIDE.md
Normal 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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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/).
|
||||||
37
docs/INKSCAPE_GUIDE.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Inkscape Setup Guide
|
||||||
|
|
||||||
|
This guide shows the steps to setup Inkscape for creating icons that conform to the Featherity design
|
||||||
|
guidelines.
|
||||||
|
|
||||||
|
## Setting up The Canvas
|
||||||
|
|
||||||
|
When opening a new document, Inkscape will create a canvas of a default size. To change the size to 24x24:
|
||||||
|
|
||||||
|
1. Open the Document Properties dialog (File -> Document Properties).
|
||||||
|
2. On the “Page Size” tab, under “Custom Size” set the Units to `px` and set both Height and Width to 24.
|
||||||
|

|
||||||
|
3. On the “Grid” tab, select `Rectangular Grid` and click “New Grid”.
|
||||||
|

|
||||||
|
4. Set the Grid Units to `px` and set Spacing X and Spacing Y both to 1.
|
||||||
|

|
||||||
|
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.
|
||||||
|

|
||||||
|
3. On the “Stroke Style” tab:
|
||||||
|
* 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`.
|
||||||
|

|
||||||
|
|
||||||
|
## Saving A File
|
||||||
|
|
||||||
|
1. When ready to save the file, click Save As and select “Optimized SVG” as the file type.
|
||||||
|

|
||||||
|
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.
|
||||||
|

|
||||||
BIN
docs/images/1px-padding.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
docs/images/24px-24px.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/images/2px-border-radius.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/images/2px-element-spacing.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/images/2px-stroke.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/centered-strokes.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/corner-radius.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
docs/images/grid-1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/images/grid-2.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/illustrator-svg-options.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/images/optimize-settings.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/images/page-size.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
docs/images/round-caps.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/images/round-joints.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/images/save-as.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
docs/images/strokes.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
116
docs/index.md
Normal 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
13
docs/installation.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: Installation
|
||||||
|
---
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
Hello
|
||||||
|
|
||||||
|
> hello
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log('asdadfasdf')
|
||||||
|
```
|
||||||
164
docs/packages/lucide-angular.md
Normal 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
|
||||||
8
docs/packages/lucide-flutter.md
Normal 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);
|
||||||
|
```
|
||||||
79
docs/packages/lucide-preact.md
Normal 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;
|
||||||
|
```
|
||||||
73
docs/packages/lucide-react.md
Normal 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;
|
||||||
|
```
|
||||||
105
docs/packages/lucide-vue-next.md
Normal 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
@@ -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
@@ -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
@@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Feather</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<i data-feather="eye"></i>
|
|
||||||
<i data-feather="heart"></i>
|
|
||||||
<i data-feather="feather"></i>
|
|
||||||
|
|
||||||
<script src="https://unpkg.com/feather-icons"></script>
|
|
||||||
<script>
|
|
||||||
feather.replace()
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -9,6 +9,6 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1" />
|
<path d="M5 17H4a2 2 0 01-2-2V5a2 2 0 012-2h16a2 2 0 012 2v10a2 2 0 01-2 2h-1" />
|
||||||
<polygon points="12 15 17 21 7 21 12 15" />
|
<polygon points="12 15 17 21 7 21 12 15" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 338 B |
18
icons/alarm-check.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M12 21a8 8 0 100-16 8 8 0 000 16z" />
|
||||||
|
<path d="M5 3L2 6" />
|
||||||
|
<path d="M22 6l-3-3" />
|
||||||
|
<path d="M6 19l-2 2" />
|
||||||
|
<path d="M18 19l2 2" />
|
||||||
|
<path d="M9 13l2 2 4-4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 388 B |
17
icons/alarm-clock-off.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M19.94 14A8 8 0 0 0 10 5.25m8.13 12.89A8 8 0 1 1 6.87 6.86" />
|
||||||
|
<path d="m22 6-3-3" />
|
||||||
|
<path d="m6 19-2 2" />
|
||||||
|
<path d="m2 2 20 20" />
|
||||||
|
<path d="M4 4 2 6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 382 B |
@@ -9,5 +9,10 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" />
|
<circle cx="12" cy="13" r="8" />
|
||||||
|
<path d="M12 9v4l2 2" />
|
||||||
|
<path d="M5 3L2 6" />
|
||||||
|
<path d="M22 6l-3-3" />
|
||||||
|
<path d="M6 19l-2 2" />
|
||||||
|
<path d="M18 19l2 2" />
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 376 B After Width: | Height: | Size: 372 B |
18
icons/alarm-minus.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M12 21a8 8 0 100-16 8 8 0 000 16z" />
|
||||||
|
<path d="M5 3L2 6" />
|
||||||
|
<path d="M22 6l-3-3" />
|
||||||
|
<path d="M6 19l-2 2" />
|
||||||
|
<path d="M18 19l2 2" />
|
||||||
|
<path d="M9 13h6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 382 B |
19
icons/alarm-plus.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M12 21a8 8 0 100-16 8 8 0 000 16z" />
|
||||||
|
<path d="M5 3L2 6" />
|
||||||
|
<path d="M22 6l-3-3" />
|
||||||
|
<path d="M6 19l-2 2" />
|
||||||
|
<path d="M18 19l2 2" />
|
||||||
|
<path d="M12 10v6" />
|
||||||
|
<path d="M9 13h6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 406 B |
14
icons/album.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
|
||||||
|
<polyline points="11 3 11 11 14 8 17 11 17 3" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 319 B |
@@ -9,7 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" />
|
<path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z" />
|
||||||
<line x1="12" y1="9" x2="12" y2="13" />
|
<line x1="12" y1="9" x2="12" y2="13" />
|
||||||
<line x1="12" y1="17" x2="12.01" y2="17" />
|
<line x1="12" y1="17" x2="12.01" y2="17" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 400 B After Width: | Height: | Size: 395 B |
@@ -9,8 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<line x1="18" y1="10" x2="6" y2="10" />
|
|
||||||
<line x1="21" y1="6" x2="3" y2="6" />
|
<line x1="21" y1="6" x2="3" y2="6" />
|
||||||
<line x1="21" y1="14" x2="3" y2="14" />
|
<line x1="17" y1="12" x2="7" y2="12" />
|
||||||
<line x1="18" y1="18" x2="6" y2="18" />
|
<line x1="19" y1="18" x2="5" y2="18" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 332 B |
@@ -9,8 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<line x1="21" y1="10" x2="3" y2="10" />
|
<line x1="3" y1="6" x2="21" y2="6" />
|
||||||
<line x1="21" y1="6" x2="3" y2="6" />
|
<line x1="3" y1="12" x2="21" y2="12" />
|
||||||
<line x1="21" y1="14" x2="3" y2="14" />
|
<line x1="3" y1="18" x2="21" y2="18" />
|
||||||
<line x1="21" y1="18" x2="3" y2="18" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 332 B |
@@ -9,8 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<line x1="17" y1="10" x2="3" y2="10" />
|
|
||||||
<line x1="21" y1="6" x2="3" y2="6" />
|
<line x1="21" y1="6" x2="3" y2="6" />
|
||||||
<line x1="21" y1="14" x2="3" y2="14" />
|
<line x1="15" y1="12" x2="3" y2="12" />
|
||||||
<line x1="17" y1="18" x2="3" y2="18" />
|
<line x1="17" y1="18" x2="3" y2="18" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 332 B |
@@ -9,8 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<line x1="21" y1="10" x2="7" y2="10" />
|
|
||||||
<line x1="21" y1="6" x2="3" y2="6" />
|
<line x1="21" y1="6" x2="3" y2="6" />
|
||||||
<line x1="21" y1="14" x2="3" y2="14" />
|
<line x1="21" y1="12" x2="9" y2="12" />
|
||||||
<line x1="21" y1="18" x2="7" y2="18" />
|
<line x1="21" y1="18" x2="7" y2="18" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 332 B |
@@ -11,5 +11,5 @@
|
|||||||
>
|
>
|
||||||
<circle cx="12" cy="5" r="3" />
|
<circle cx="12" cy="5" r="3" />
|
||||||
<line x1="12" y1="22" x2="12" y2="8" />
|
<line x1="12" y1="22" x2="12" y2="8" />
|
||||||
<path d="M5 12H2a10 10 0 0 0 20 0h-3" />
|
<path d="M5 12H2a10 10 0 0020 0h-3" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 325 B |
@@ -9,7 +9,5 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<polyline points="21 8 21 21 3 21 3 8" />
|
<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" />
|
||||||
<rect x="1" y="3" width="22" height="5" />
|
|
||||||
<line x1="10" y1="12" x2="14" y2="12" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 334 B |
13
icons/arrow-big-down.svg
Normal 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="M9 3h6v11h4l-7 7-7-7h4z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 247 B |
13
icons/arrow-big-left.svg
Normal 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="M3 12l7-7v4h11v6H10v4z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 246 B |
13
icons/arrow-big-right.svg
Normal 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="M21 12l-7-7v4H3v6h11v4z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 247 B |
13
icons/arrow-big-up.svg
Normal 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="M9 21V10H5l7-7 7 7h-4v11z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 249 B |
15
icons/asterisk.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M12 6v12" />
|
||||||
|
<path d="M17.196 9L6.804 15" />
|
||||||
|
<path d="M6.804 9l10.392 6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 299 B |
@@ -10,5 +10,5 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<circle cx="12" cy="12" r="4" />
|
<circle cx="12" cy="12" r="4" />
|
||||||
<path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94" />
|
<path d="M16 8v5a3 3 0 006 0v-1a10 10 0 10-3.92 7.94" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 302 B |
14
icons/axe.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M14 12l-8.501 8.501a2.12 2.12 0 01-2.998 0h-.002a2.12 2.12 0 010-2.998L11 9.002" />
|
||||||
|
<path d="M9 7l4-4 6 6h3l-.13.648a7.648 7.648 0 01-5.081 5.756L15 16v-3z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 381 B |
15
icons/banknote.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect x="2" y="6" width="20" height="12" rx="2" />
|
||||||
|
<circle cx="12" cy="12" r="2" />
|
||||||
|
<path d="M6 12h.01M18 12h.01" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 331 B |
@@ -9,7 +9,8 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19" />
|
<path d="M14 7h2a2 2 0 012 2v6a2 2 0 01-2 2h-3" />
|
||||||
<line x1="23" y1="13" x2="23" y2="11" />
|
<path d="M7 7H4a2 2 0 00-2 2v6a2 2 0 002 2h2" />
|
||||||
<polyline points="11 6 7 12 13 12 9 18" />
|
<polyline points="11 7 8 12 12 12 9 17" />
|
||||||
|
<line x1="22" x2="22" y1="11" y2="13" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 397 B After Width: | Height: | Size: 400 B |
17
icons/battery-full.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect x="2" y="7" width="16" height="10" rx="2" ry="2" />
|
||||||
|
<line x1="22" x2="22" y1="11" y2="13" />
|
||||||
|
<line x1="6" x2="6" y1="10" y2="14" />
|
||||||
|
<line x1="10" x2="10" y1="10" y2="14" />
|
||||||
|
<line x1="14" x2="14" y1="10" y2="14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 438 B |
15
icons/battery-low.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect x="2" y="7" width="16" height="10" rx="2" ry="2" />
|
||||||
|
<line x1="22" x2="22" y1="11" y2="13" />
|
||||||
|
<line x1="6" x2="6" y1="10" y2="14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 352 B |
16
icons/battery-medium.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect x="2" y="7" width="16" height="10" rx="2" ry="2" />
|
||||||
|
<line x1="22" x2="22" y1="11" y2="13" />
|
||||||
|
<line x1="6" x2="6" y1="10" y2="14" />
|
||||||
|
<line x1="10" x2="10" y1="10" y2="14" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 395 B |
@@ -9,6 +9,6 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<rect x="1" y="6" width="18" height="12" rx="2" ry="2" />
|
<rect x="2" y="7" width="16" height="10" rx="2" ry="2" />
|
||||||
<line x1="23" y1="13" x2="23" y2="11" />
|
<line x1="22" x2="22" y1="11" y2="13" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 311 B |
15
icons/beaker.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M4.5 3h15" />
|
||||||
|
<path d="M6 3v16a2 2 0 002 2h8a2 2 0 002-2V3" />
|
||||||
|
<path d="M6 14h12" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 308 B |
15
icons/bell-minus.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M13.73 21a2 2 0 01-3.46 0" />
|
||||||
|
<path d="M21 5h-6" />
|
||||||
|
<path d="M18.021 9C18.29 15.193 21 17 21 17H3s3-2 3-9a6 6 0 017-5.916" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 349 B |
@@ -9,9 +9,9 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M13.73 21a2 2 0 0 1-3.46 0" />
|
<path d="M13.73 21a2 2 0 01-3.46 0" />
|
||||||
<path d="M18.63 13A17.89 17.89 0 0 1 18 8" />
|
<path d="M18.63 13A17.888 17.888 0 0118 8" />
|
||||||
<path d="M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14" />
|
<path d="M6.26 6.26A5.86 5.86 0 006 8c0 7-3 9-3 9h14" />
|
||||||
<path d="M18 8a6 6 0 0 0-9.33-5" />
|
<path d="M18 8a6 6 0 00-9.33-5" />
|
||||||
<line x1="1" y1="1" x2="23" y2="23" />
|
<path d="M2 2l20 20" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 438 B After Width: | Height: | Size: 419 B |
16
icons/bell-plus.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M18.387 12C19.198 15.799 21 17 21 17H3s3-2 3-9a6 6 0 017-5.916" />
|
||||||
|
<path d="M13.73 21a2 2 0 01-3.46 0" />
|
||||||
|
<path d="M18 2v6" />
|
||||||
|
<path d="M21 5h-6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 374 B |
16
icons/bell-ring.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9" />
|
||||||
|
<path d="M13.73 21a2 2 0 01-3.46 0" />
|
||||||
|
<path d="M2 8c0-2.2.7-4.3 2-6" />
|
||||||
|
<path d="M22 8a10 10 0 00-2-6" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 378 B |