Compare commits

...

121 Commits

Author SHA1 Message Date
Yashu Mittal
77727bc40c add ticket icon (#220) 2021-04-23 22:45:32 +02:00
dependabot[bot]
59fe65b705 Bump ssri from 6.0.1 to 6.0.2 in /site (#295)
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-22 20:57:31 +02:00
dependabot[bot]
5e0d287cda Bump ssri from 6.0.1 to 6.0.2 in /packages/lucide-figma (#294)
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-22 20:57:11 +02:00
Eric Fennis
910b2432ce Fix workflow for angular 2021-04-22 20:54:16 +02:00
Eric Fennis
3b05f0e574 Merge branch 'master' of github.com:lucide-icons/lucide 2021-04-22 20:49:31 +02:00
Eric Fennis
62e5aae150 Merge branch 'lucide-angular-fix-structure' 2021-04-22 20:47:56 +02:00
SMAH1
2dbf8ffaa3 Add workflow for release lucide-angular (#282) 2021-04-21 23:47:44 +02:00
Eric Fennis
938f7efeba Merge branch 'master' of github.com:lucide-icons/lucide 2021-04-20 00:00:18 +02:00
Yashu Mittal
ab00747371 add ghost icon (#285)
* add ghost icon

* fix: ghost wavely lines

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-19 23:43:08 +02:00
Eric Fennis
4c42ebfcff add move command 2021-04-19 23:41:15 +02:00
Yashu Mittal
182b127c12 fix: add 1px spacing around settings icon (#212)
* add 1px spacing around settings icon

* Update icons/settings.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-19 22:54:52 +02:00
Eric Fennis
2f3dfb4404 Change release step 2021-04-19 22:48:14 +02:00
Eric Fennis
3348c1050d readme changes 2021-04-17 23:16:34 +02:00
Eric Fennis
d0f26f4110 minor fixes 2021-04-17 23:11:59 +02:00
Eric Fennis
b450764c68 Add new version 2021-04-17 22:22:02 +02:00
Eric Fennis
b71ae1e055 simplify exports 2021-04-17 22:00:21 +02:00
Eric Fennis
35d41c1763 Move files 2021-04-17 01:09:23 +02:00
Eric Fennis
7cdabd67be add styling 2021-04-14 23:49:43 +02:00
Eric Fennis
0922e72e3d move files 2021-04-14 23:43:47 +02:00
Eric Fennis
f2582af4a3 fix tsconfig 2021-04-14 23:02:35 +02:00
Eric Fennis
61124e4619 Fix link 2021-04-14 22:15:35 +02:00
Eric Fennis
60efb731fe Merge branch 'master' of github.com:lucide-icons/lucide 2021-04-14 17:58:21 +02:00
Alexandr Antonov
96357adbe7 feat: Add glasses icon (#149)
* feat: Add glasses icon

* Update icons/glasses.svg

Co-authored-by: Alexander Antonov <aantonov@131.ru>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-14 17:42:55 +02:00
Locness
74c077b3ae Add note about brand icons to issue template (#287) 2021-04-13 16:06:42 +02:00
SMAH1
af9dc9f510 Fix link of README (#286) 2021-04-13 16:06:08 +02:00
Eric Fennis
abb6323d5e 📦 Bump package versions 2021-04-11 20:41:13 +02:00
Eric Fennis
8fcec2a0b2 Add personal token 2021-04-11 20:37:49 +02:00
Eric Fennis
69397ee269 Add bug icon (#256) 2021-04-11 19:47:06 +02:00
Eric Fennis
770d5a7557 Format directories 2021-04-11 19:04:24 +02:00
Eric Fennis
58c11879c5 Merge branch 'master' of github.com:lucide-icons/lucide 2021-04-11 13:42:16 +02:00
SMAH1
d14a85d644 Add lucide-angular again! (#281)
* Add lucide-angular

* README of lucide-angular
2021-04-11 13:18:50 +02:00
Eric Fennis
22ea86dad5 Add fix for release workflow 2021-04-11 12:29:18 +02:00
Eric Fennis
cd75f0c384 add github repo check in workflow 2021-04-11 02:03:49 +02:00
Eric Fennis
8d9df97208 fix wind icon 2021-04-11 02:01:32 +02:00
Eric Fennis
d87b423044 some formatting 2021-04-11 01:55:11 +02:00
Eric Fennis
1877c1b2a8 turn on path check 2021-04-11 01:53:52 +02:00
Eric Fennis
739242a4f5 tes release workflow 2021-04-11 01:47:40 +02:00
Eric Fennis
398d8fc9bb make yarn silent 2021-04-11 01:43:09 +02:00
Eric Fennis
74a1ef8d9b Fix changelog in workflow 2021-04-11 01:35:28 +02:00
Eric Fennis
3357de226b test workflow 2021-04-11 01:29:34 +02:00
Eric Fennis
270936bce1 fix step output 2021-04-07 23:36:18 +02:00
Eric Fennis
7021b19039 remove check 2021-04-07 23:31:35 +02:00
Eric Fennis
17491235cb test workflow 2021-04-07 23:24:38 +02:00
Eric Fennis
fd1aa0893c move vercel 2021-04-07 22:35:08 +02:00
Eric Fennis
262f906322 Fix site 2021-04-07 22:27:09 +02:00
Eric Fennis
d58db71163 Adjust changelog generation 2021-04-07 09:04:17 +02:00
Eric Fennis
9e9efbe40b fix workflow 2021-04-05 18:41:27 +02:00
Eric Fennis
4e8acabf44 remove check workflow 2021-04-05 18:33:04 +02:00
Eric Fennis
e0b585ddd3 get highest tag 2021-04-05 18:31:44 +02:00
Eric Fennis
ef5ef2f76a Test workflow 2021-04-05 18:29:06 +02:00
Eric Fennis
b1d5af7bd3 check output 2021-04-05 18:25:15 +02:00
Eric Fennis
efe345db5e test workflow 2021-04-05 18:15:28 +02:00
Eric Fennis
d6ebff0b78 test ci workflow 2021-04-05 18:06:31 +02:00
Eric Fennis
f6afdc70cf Fix formatting 2021-04-05 18:03:21 +02:00
Eric Fennis
0358960400 test workflow 2021-04-05 18:00:05 +02:00
Yashu Mittal
5a1e09073d Add template icon (#179)
* add template icon

* rename to layout-template icon

* update icon with consisent layout structure
2021-04-05 17:47:00 +02:00
Eric Fennis
fb6ce6eb0b test ci workflow 2021-04-05 17:44:24 +02:00
Eric Fennis
435fbc9e26 add config for vercel 2021-04-05 17:18:26 +02:00
Eric Fennis
01f577212c Merge branch 'feature/fix-workflows' 2021-04-05 17:17:49 +02:00
Eric Fennis
a5d1f2964b small fixes workflow 2021-04-05 17:17:29 +02:00
Eric Fennis
33caa024d2 Merge branch 'feature/fix-types' 2021-04-05 16:52:57 +02:00
SMAH1
c7fc71a66e Build d.ts for use in typescript (#277)
* Add lucide-angular

* Build d.ts for use in typescript

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

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

* Update packages/lucide/scripts/buildTypes.js

* Update package.json

* Update package.json

* Delete .gitignore

* Delete angular.json

* Delete package.json

* Delete README.md

* Delete default-attributes.ts

* Delete icons-index.ts

* Delete package.json

* Delete karma.conf.js

* Delete lucide.ts

* Delete ng-package.json

* Delete package.json

* Delete lib-index.ts

* Delete icons.provider.ts

* Delete lucide-angular.component.spec.ts

* Delete lucide-angular.component.ts

* Delete lucide-angular.module.ts

* Delete test.ts

* Delete tsconfig.lib.json

* Delete tsconfig.lib.prod.json

* Delete tsconfig.spec.json

* Delete tslint.json

* Delete buildIconsIndex.js

* Delete exportTemplate.js

* Delete tsconfig.json

* Delete tslint.json

* Update buildTypes.js

Pretty code

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-05 16:50:00 +02:00
Eric Fennis
1dba15f03b Fix bugs in types 2021-04-05 16:48:25 +02:00
Eric Fennis
c3e7e0c834 format file 2021-04-04 23:46:18 +02:00
Yashu Mittal
456cb01982 add power-off icon (#207) 2021-04-04 22:48:25 +02:00
Eric Fennis
38fb2ca283 fix indentation 2021-04-04 14:47:01 +02:00
Eric Fennis
b5201d2b38 improve workflows 2021-04-04 14:45:49 +02:00
SMAH1
9ca395c9ba Update buildTypes.js
Pretty code
2021-04-04 09:38:09 +04:30
SMAH1
d95e2170c5 Delete tslint.json 2021-04-04 09:34:55 +04:30
SMAH1
676ded84ac Delete tsconfig.json 2021-04-04 09:34:46 +04:30
SMAH1
dcef099aca Delete exportTemplate.js 2021-04-04 09:34:27 +04:30
SMAH1
1c0d763f70 Delete buildIconsIndex.js 2021-04-04 09:34:14 +04:30
SMAH1
a7e2399621 Delete tslint.json 2021-04-04 09:33:56 +04:30
SMAH1
a3345217c2 Delete tsconfig.spec.json 2021-04-04 09:33:49 +04:30
SMAH1
c707c9438b Delete tsconfig.lib.prod.json 2021-04-04 09:33:42 +04:30
SMAH1
bd0bdda5f2 Delete tsconfig.lib.json 2021-04-04 09:33:37 +04:30
SMAH1
e9d24e0086 Delete test.ts 2021-04-04 09:33:28 +04:30
SMAH1
686d6f8aec Delete lucide-angular.module.ts 2021-04-04 09:33:05 +04:30
SMAH1
78cbae1061 Delete lucide-angular.component.ts 2021-04-04 09:32:57 +04:30
SMAH1
4021f6954d Delete lucide-angular.component.spec.ts 2021-04-04 09:32:50 +04:30
SMAH1
8cdd66a1db Delete icons.provider.ts 2021-04-04 09:32:43 +04:30
SMAH1
9266183e95 Delete lib-index.ts 2021-04-04 09:32:26 +04:30
SMAH1
b6e474908f Delete package.json 2021-04-04 09:32:17 +04:30
SMAH1
7a088181cc Delete ng-package.json 2021-04-04 09:32:02 +04:30
SMAH1
8aa0295c9e Delete lucide.ts 2021-04-04 09:31:55 +04:30
SMAH1
49dffc9f43 Delete karma.conf.js 2021-04-04 09:31:45 +04:30
SMAH1
74dfc929df Delete package.json 2021-04-04 09:31:33 +04:30
SMAH1
80239f7c8a Delete icons-index.ts 2021-04-04 09:31:26 +04:30
SMAH1
49e0889b63 Delete default-attributes.ts 2021-04-04 09:31:19 +04:30
SMAH1
e968bf51e3 Delete README.md 2021-04-04 09:31:08 +04:30
SMAH1
4eb4837052 Delete package.json 2021-04-04 09:30:17 +04:30
SMAH1
ded1a24668 Delete angular.json 2021-04-04 09:30:01 +04:30
SMAH1
3fa2ca3789 Delete .gitignore 2021-04-04 09:29:48 +04:30
SMAH1
486f4fa260 Update package.json 2021-04-04 09:29:17 +04:30
SMAH1
ecc1b1262a Update package.json 2021-04-04 09:28:50 +04:30
Eric Fennis
343ebd3d7b test 2021-04-03 18:45:12 +02:00
Eric Fennis
46975e4b77 Merge branch 'feature/add-changelog-generator' into feature/fix-workflows 2021-04-03 18:10:26 +02:00
Eric Fennis
081a24d973 Add rm stats dir to clean command (#279) 2021-04-03 16:40:14 +02:00
Yashu Mittal
b131832876 add lightbulb-off icon (#206)
* add lightbulb-off icon

* fix 2px spacing on one side

* update icon
2021-04-03 16:19:26 +02:00
SMAH1
a01d5c6f1e Update packages/lucide/scripts/buildTypes.js 2021-04-03 11:05:08 +04:30
SMAH1
9de8e78460 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 11:00:09 +04:30
SMAH1
b07c5fe0cb Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 11:00:02 +04:30
SMAH1
08e4ff1e85 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 10:59:54 +04:30
SMAH1
d9981fc309 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 10:59:48 +04:30
SMAH1
d883fc2c79 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 10:59:42 +04:30
SMAH1
7e676e35e4 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 10:59:36 +04:30
SMAH1
c40df12e05 Update packages/lucide/scripts/buildTypes.js
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-03 10:59:17 +04:30
Eric Fennis
b46b157dbc Add code-2 icon 2021-04-02 22:06:40 +02:00
Eric Fennis
e749b67774 Merge branch 'master' of github.com:ericfennis/lucide 2021-04-02 21:58:42 +02:00
Yashu Mittal
4ad6bb1b77 Add terminal-2 icon (#181)
* Add terminal-2 icon

* rename terminal-square icon

* use base square shape

* Update icons/terminal-square.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-01 20:48:52 +02:00
Yashu Mittal
0b3b8ba09e Add star-half icon (#180)
* Add star-half icon

* Update icons/star-half.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-04-01 20:44:33 +02:00
dependabot[bot]
0c81502532 chore(deps): Bump y18n from 4.0.0 to 4.0.1 in /packages/lucide-react (#278)
Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-01 20:44:09 +02:00
SMAH1
ef3da7d14d Build d.ts for use in typescript 2021-03-31 11:58:04 +04:30
SMAH1
53d3a31574 Add lucide-angular 2021-03-30 18:52:38 +04:30
Eric Fennis
a2a7adfde8 bump version figma 2021-03-28 22:54:08 +02:00
Eric Fennis
73b242a611 Bump version lucide to 0.15.0 2021-03-23 20:21:14 +01:00
Lucide Bot
9ed00c4266 📦 Bump version lucide-vue to 0.15.0 2021-03-23 19:18:09 +00:00
Eric Fennis
c2427cea6b Merge branch 'master' of github.com:lucide-icons/lucide into feature/add-changelog-generator 2021-02-22 20:37:37 +01:00
Eric Fennis
7f1dc27ee3 Add Changelog generator 2021-02-21 18:57:11 +01:00
Eric Fennis
381dca62d1 Merge branch 'master' of github.com:lucide-icons/lucide into feature/add-changelog-generator 2021-02-21 13:49:40 +01:00
Eric Fennis
431a7b834a init changelog script 2021-02-21 13:48:23 +01:00
63 changed files with 6359 additions and 286 deletions

View File

@@ -6,10 +6,13 @@ 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 👍.
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 name:
* Use case:
* Screenshots of similar icons:
* _Screenshots_ of similar icons:

71
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,71 @@
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 --tags
- name: Get latest tag
id: latest-tag
run: echo "::set-output name=LATEST_TAG::$(git tag --list 2>/dev/null | tail -n1 2>/dev/null)"
- 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: 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 }}

View File

@@ -2,6 +2,7 @@ name: Build Lucide
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

View File

@@ -28,12 +28,7 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '12.x'
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
@@ -41,7 +36,6 @@ jobs:
${{ runner.os }}-yarn-
- name: Install dependencies
if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn --pure-lockfile
- name: Set Auth Token
@@ -59,13 +53,11 @@ jobs:
- name: Publish
run: yarn workspace lucide publish
- name: Commit package.json
run: |
git add packages/lucide/package.json
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump version lucide 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: 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'
@@ -73,12 +65,7 @@ jobs:
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '12.x'
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
@@ -86,7 +73,6 @@ jobs:
${{ runner.os }}-yarn-
- name: Install dependencies
if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn --pure-lockfile
- name: Set Auth Token
@@ -104,13 +90,11 @@ jobs:
- name: Publish
run: yarn workspace lucide-react publish
- name: Commit package.json
run: |
git add packages/lucide-react/package.json
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump version lucide-react 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: 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'
@@ -123,7 +107,6 @@ jobs:
node-version: '12.x'
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
@@ -131,7 +114,6 @@ jobs:
${{ runner.os }}-yarn-
- name: Install dependencies
if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn --pure-lockfile
- name: Set Auth Token
@@ -149,10 +131,67 @@ jobs:
- name: Publish
run: yarn workspace lucide-vue publish
- name: Commit package.json
run: |
git add packages/lucide-vue/package.json
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump version lucide-vue 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: Upload package.json
uses: actions/upload-artifact@v2
with:
name: lucide-vue-package-json
path: packages/lucide-vue/package.json
lucide-angular:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn --pure-lockfile
- 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:
path: packages/lucide-angular/package.json
upload-package-jsons:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: [lucide, lucide-react, lucide-vue, lucide-angular]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- name: Commit package.jsons
run: |
mv lucide-package-json/package.json packages/lucide/package.json
mv lucide-react-package-json/package.json packages/lucide-react/package.json
mv lucide-vue-package-json/package.json packages/lucide-vue/package.json
- name: Commit package.jsons
run: |
git add packages/*/package.json
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
commit -m ":package: Bump lucide package versions to ${{ needs.pre-build.outputs.VERSION }}" --no-verify --quiet
git remote set-url --push origin https://lucide-bot:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git
git push origin HEAD:master

284
.github/workflows/version-up.sh vendored Executable file
View 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 tag --list 2>/dev/null | tail -n1 2>/dev/null)
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

1
.gitignore vendored
View File

@@ -10,3 +10,4 @@ coverage
stats
*.log
packages/**/src/icons/*.js
packages/**/src/icons/*.ts

View File

@@ -12,12 +12,13 @@ Feel free to open a pull-request to contribute to this project.
[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:
- __Make your commit messages as descriptive as possible.__ Include as much information as you can. Explain anything that the file diffs themselves wont make apparent.
- __Document your pull request__. Explain your fix, link to the relevant issue, add screenshots when adding new icons.
- __Make sure the target of your pull request is the relevant branch__. Most of bugfix or new feature should go to the `master` branch.
- __Include only related work__. If your pull request has unrelated commit, it won't be accepted.
### Pull Requests Including Icons
### Pull Requests Including Icons
#### Guidelines
@@ -27,7 +28,7 @@ Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_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 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`.
@@ -38,4 +39,5 @@ Before creating an icon request, please search to see if someone has requested t
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.
## Icon Requests from Feather
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).

View File

@@ -28,6 +28,7 @@ We're trying to expanding the icon set as much as possible while keeping it nice
* [Web](#web)
* [React](#react)
* [Vue](#vue)
* [Angular](#angular)
* [Figma](#figma)
* [Contributing](#contributing)
* [Community](#community)
@@ -52,7 +53,7 @@ npm install lucide
yarn add lucide
```
For more details, see the [documentation](https://github.com/lucide-icons/lucide/blob/master/packages/lucide-react/README.md).
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide#lucide).
### React
@@ -82,6 +83,18 @@ npm install lucide-vue
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-vue#lucide-vue).
### Angular
```sh
yarn add lucide-angular
# or
npm install lucide-angular
```
For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/packages/lucide-angular#lucide-angular).
### Figma
The lucide figma plugin.

22
icons/bug.svg Normal file
View File

@@ -0,0 +1,22 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="8" height="14" x="8" y="6" rx="4" />
<path d="M19 7l-3 2" />
<path d="M5 7l3 2" />
<path d="M19 19l-3-2" />
<path d="M5 19l3-2" />
<path d="M20 13h-4" />
<path d="M4 13h4" />
<path d="M10 4l1 2" />
<path d="M14 4l-1 2" />
</svg>

After

Width:  |  Height:  |  Size: 462 B

15
icons/code-2.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 16L22 12L18 8" />
<path d="M6 8L2 12L6 16" />
<path d="M14.5 4L9.5 20" />
</svg>

After

Width:  |  Height:  |  Size: 301 B

15
icons/ghost.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 10h.01" />
<path d="M15 10h.01" />
<path d="M12 2a8 8 0 00-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 00-8-8z" />
</svg>

After

Width:  |  Height:  |  Size: 349 B

17
icons/glasses.svg Normal file
View File

@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="6" cy="15" r="4" />
<circle cx="18" cy="15" r="4" />
<path d="M14 15a2 2 0 00-2-2 2 2 0 00-2 2" />
<path d="M2.5 13L5 7c.7-1.3 1.4-2 3-2" />
<path d="M21.5 13L19 7c-.7-1.3-1.5-2-3-2" />
</svg>

After

Width:  |  Height:  |  Size: 416 B

15
icons/layout-template.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 3H3v7h18V3z" />
<path d="M21 14h-5v7h5v-7z" />
<path d="M12 14H3v7h9v-7z" />
</svg>

After

Width:  |  Height:  |  Size: 304 B

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

@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 18h6" />
<path d="M10 22h4" />
<path d="M2 2l20 20" />
<path d="M8.91 14a4.61 4.61 0 00-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 01.084-1M9 2.804A6 6 0 0118 8a4.651 4.651 0 01-1.031 3" />
</svg>

After

Width:  |  Height:  |  Size: 409 B

15
icons/power-off.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18.36 6.64A9 9 0 0120.77 15M5.63 6.64A9 9 0 1018.706 19" />
<path d="M12 2v4" />
<path d="M2 2l20 20" />
</svg>

After

Width:  |  Height:  |  Size: 329 B

View File

@@ -10,5 +10,5 @@
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="3" />
<path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z" />
<path d="M18.727 14.727a1.5 1.5 0 00.3 1.655l.055.054a1.816 1.816 0 010 2.573 1.818 1.818 0 01-2.573 0l-.055-.055a1.5 1.5 0 00-1.654-.3 1.5 1.5 0 00-.91 1.373v.155a1.818 1.818 0 11-3.636 0V20.1a1.5 1.5 0 00-.981-1.373 1.5 1.5 0 00-1.655.3l-.054.055a1.818 1.818 0 01-3.106-1.287 1.818 1.818 0 01.533-1.286l.054-.055a1.5 1.5 0 00.3-1.654 1.5 1.5 0 00-1.372-.91h-.155a1.818 1.818 0 110-3.636H3.9a1.5 1.5 0 001.373-.981 1.5 1.5 0 00-.3-1.655l-.055-.054A1.818 1.818 0 117.491 4.99l.054.054a1.5 1.5 0 001.655.3h.073a1.5 1.5 0 00.909-1.372v-.155a1.818 1.818 0 013.636 0V3.9a1.499 1.499 0 00.91 1.373 1.5 1.5 0 001.654-.3l.054-.055a1.817 1.817 0 012.573 0 1.819 1.819 0 010 2.573l-.055.054a1.5 1.5 0 00-.3 1.655v.073a1.5 1.5 0 001.373.909h.155a1.818 1.818 0 010 3.636H20.1a1.499 1.499 0 00-1.373.91v0z" />
</svg>

Before

Width:  |  Height:  |  Size: 942 B

After

Width:  |  Height:  |  Size: 1.0 KiB

13
icons/star-half.svg Normal file
View File

@@ -0,0 +1,13 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 17.8L5.8 21 7 14.1 2 9.3l7-1L12 2" />
</svg>

After

Width:  |  Height:  |  Size: 261 B

15
icons/terminal-square.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M7 11l2-2-2-2" />
<path d="M11 13h4" />
<rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
</svg>

After

Width:  |  Height:  |  Size: 321 B

18
icons/ticket.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 9V7a2 2 0 012-2h14a2 2 0 012 2v2M3 15v2a2 2 0 002 2h14a2 2 0 002-2v-2" />
<path d="M21 15a3 3 0 110-6" />
<path d="M3 15a3 3 0 100-6" />
<path d="M13 5v2" />
<path d="M13 17v2" />
<path d="M13 11v2" />
</svg>

After

Width:  |  Height:  |  Size: 434 B

View File

@@ -9,5 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9.59 4.59A2 2 0 1111 8H2m10.59 11.41A2 2 0 1014 16H2m15.73-8.27A2.5 2.5 0 1119.5 12H2" />
<path d="M17.7 7.7a2.5 2.5 0 111.8 4.3H2" />
<path d="M9.6 4.6A2 2 0 1111 8H2" />
<path d="M12.6 19.4A2 2 0 1014 16H2" />
</svg>

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 336 B

View File

@@ -1,18 +1,31 @@
{
"private": true,
"workspaces": [
"packages/*",
"site"
],
"workspaces": {
"packages": [
"packages/*",
"site"
],
"nohoist": [
"**/jest", "**/jest/**",
"**/jasmine", "**/jasmine/**",
"**/react", "**/react/**",
"**/testing-library__jest-dom", "**/testing-library__jest-dom/**",
"**/testing-library__react-hooks", "**/testing-library__react-hooks/**",
"**/react-dom", "**/react-dom/**",
"**/react-test-renderer", "**/react-test-renderer/**"
]
},
"scripts": {
"build": "yarn lucide build && yarn lucide-react build && yarn lucide-vue build",
"test": "yarn lucide build:icons && yarn lucide-react build:icons && yarn lucide-vue build:icons && jest",
"lucide": "yarn workspace lucide",
"lucide-angular": "yarn workspace lucide-angular",
"lucide-react": "yarn workspace lucide-react",
"lucide-vue": "yarn workspace lucide-vue",
"build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env",
"optimize": "babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
"addtags": "babel-node ./scripts/addMissingKeysToTags.js --presets @babel/env"
"addtags": "babel-node ./scripts/addMissingKeysToTags.js --presets @babel/env",
"generate:changelog": "babel-node ./scripts/generateChangelog.js --presets @babel/env"
},
"devDependencies": {
"@ampproject/rollup-plugin-closure-compiler": "^0.25.2",
@@ -38,6 +51,7 @@
"jest": "^26.4.2",
"lint-staged": "^10.5.3",
"minimist": "^1.2.5",
"node-fetch": "^2.6.1",
"prettier": "1.17.1",
"rollup": "^2.7.3",
"rollup-plugin-license": "^2.0.0",

51
packages/lucide-angular/.gitignore vendored Normal file
View File

@@ -0,0 +1,51 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
speed-measure-plugin*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
.editorconfig
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
#npm-yarn
package-lock.json
src/createElement.js

View File

@@ -0,0 +1,15 @@
ISC License
Copyright (c) 2020, Lucide Contributors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

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

View File

@@ -0,0 +1,48 @@
{
"$schema": "../../node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "",
"projects": {
"lucide-angular": {
"projectType": "library",
"root": "",
"sourceRoot": "src",
"prefix": "lib",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:ng-packagr",
"options": {
"tsConfig": "tsconfig.lib.json",
"project": "ng-package.json"
},
"configurations": {
"production": {
"tsConfig": "tsconfig.lib.prod.json"
}
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.lib.json",
"tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "lucide-angular"
}

View File

@@ -0,0 +1,49 @@
/* eslint-disable import/no-extraneous-dependencies, global-require, func-names */
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
process.env.CHROME_BIN = require('puppeteer').executablePath();
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, '../../coverage/lucide-angular'),
subdir: '.',
reporters: [{ type: 'html' }, { type: 'text-summary' }],
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadlessCI'],
customLaunchers: {
ChromeHeadlessCI: {
base: 'ChromeHeadless',
flags: ['--no-sandbox'],
},
},
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -0,0 +1,7 @@
{
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
"dest": "dist",
"lib": {
"entryFile": "src/index.ts"
}
}

View File

@@ -0,0 +1,68 @@
{
"name": "lucide-angular",
"description": "Lucide Angular package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
"version": "0.15.1-beta.1",
"author": "SMAH1",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",
"repository": {
"type": "git",
"url": "https://github.com/lucide-icons/lucide.git",
"directory": "packages/lucide-angular"
},
"keywords": [
"Lucide",
"Angular",
"Feather",
"Icons",
"Icon",
"Feather Icons",
"Fontawesome",
"Font Awesome"
],
"scripts": {
"build": "yarn clean && yarn build:icons && yarn build:ng",
"clean": "rm -rf dist && rm -rf ./src/icons/*.ts",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-angular/src --templateSrc=../packages/lucide-angular/scripts/exportTemplate --iconFileExtention=.ts --exportFileName=index.ts",
"build:ng": "ng build --prod",
"test:headless": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"postinstall": "ngcc"
},
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^11.2.6",
"@angular/core": "^11.2.6"
},
"devDependencies": {
"@angular/common": "~11.2.6",
"@angular/compiler": "~11.2.6",
"@angular/core": "~11.2.6",
"@angular/platform-browser": "~11.2.6",
"@angular/platform-browser-dynamic": "~11.2.6",
"@angular-devkit/build-angular": "~0.1102.5",
"@angular/cli": "~11.2.5",
"@angular/compiler-cli": "~11.2.6",
"@types/jasmine": "~3.6.0",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"karma": "~6.1.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"ng-packagr": "^11.0.0",
"protractor": "~7.0.0",
"puppeteer": "^8.0.0",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "~4.1.5"
}
}

View File

@@ -0,0 +1,12 @@
export default ({ componentName, children }) => `
import { IconData } from './types';
import defaultAttributes from './constants/default-attributes';
const ${componentName}: IconData = [
'svg',
defaultAttributes,
${JSON.stringify(children)}
];
export default ${componentName};
`;

View File

@@ -0,0 +1,26 @@
import { IconData } from '../icons/types'
/**
* Creates a new SVGElement from icon node
* @param {string} tag
* @param {object} attrs
* @param {array} children
* @returns {SVGElement}
*/
export const createElement = ([tag, attrs, children = []]: IconData): SVGElement => {
const element = document.createElementNS('http://www.w3.org/2000/svg', tag);
Object.keys(attrs).forEach(name => {
element.setAttribute(name, attrs[name]);
});
if (children.length) {
children.forEach((child: IconData) => {
const childElement = createElement(child);
element.appendChild(childElement);
});
}
return element;
};

View File

@@ -0,0 +1,11 @@
export default {
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',
};

View File

@@ -0,0 +1,8 @@
{
"ngPackage": {
"dest": "dist",
"lib": {
"entryFile": "./index.ts"
}
}
}

View File

@@ -0,0 +1,3 @@
export type IconNode = readonly [string, object];
export type IconData = readonly [string, object, IconNode[]? ];
export type Icons = { [key: string]: IconData }

View File

@@ -0,0 +1,7 @@
import * as icons from './icons';
export * from './lib/lucide-angular.component';
export * from './lib/lucide-angular.module';
export * from './helpers/create-element';
export * from './icons';
export { icons };

View File

@@ -0,0 +1,3 @@
export class Icons {
constructor(private icons: object) {}
}

View File

@@ -0,0 +1,28 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LucideAngularModule } from './lucide-angular.module';
import { LucideAngularComponent } from './lucide-angular.component';
describe('LucideAngularComponent', () => {
let component: LucideAngularComponent;
let fixture: ComponentFixture<LucideAngularComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ LucideAngularComponent ],
imports: [
LucideAngularModule.pick({ })
],
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(LucideAngularComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,72 @@
import { Component, ElementRef, Input, Inject, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
import { Icons } from './icons.provider';
import { IconData } from '../icons/types';
import { createElement } from '../helpers/create-element';
@Component({
selector: 'lucide-angular, lucide-icon, i-lucide, span-lucide',
template: `<ng-content></ng-content>`,
styles: [`
:host {
display: inline-block;
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
width: 24px;
height: 24px;
}
`]
})
export class LucideAngularComponent implements OnChanges {
@Input() name!: string;
@Input() img!: IconData;
constructor(
@Inject(ElementRef) private elem: ElementRef,
@Inject(ChangeDetectorRef) private changeDetector: ChangeDetectorRef,
@Inject(Icons) private icons: Icons
) { }
ngOnChanges(changes: SimpleChanges): void {
if (changes.name) {
// icons are provided as an array of objects because of "multi: true"
const icons = Object.assign({}, ...(this.icons as any as object[]));
const icoOfName = icons[this.toPascalCase(changes.name.currentValue)] || '';
if (!icoOfName) {
console.warn(
`Icon not found: ${changes.name.currentValue}\n` +
`Please check icon name or \'lucide icon list\'`
);
} else {
const icoElement = createElement(icoOfName);
icoElement.setAttribute('stroke-width', 'inherit');
icoElement.setAttribute('fill', 'inherit');
icoElement.removeAttribute('width');
icoElement.removeAttribute('height');
this.elem.nativeElement.innerHTML = '';
this.elem.nativeElement.append(icoElement);
}
}
else if (changes.img) {
const icoElement = createElement(changes.img.currentValue);
icoElement.setAttribute('stroke-width', 'inherit');
icoElement.setAttribute('fill', 'inherit');
icoElement.removeAttribute('width');
icoElement.removeAttribute('height');
this.elem.nativeElement.innerHTML = '';
this.elem.nativeElement.append(icoElement);
}
this.changeDetector.markForCheck();
}
toPascalCase(str: string): string {
return str.replace(/(\w)([a-z0-9]*)(_|-|\s*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase());
}
}

View File

@@ -0,0 +1,30 @@
import { NgModule, ModuleWithProviders, Optional } from '@angular/core';
import { LucideAngularComponent } from './lucide-angular.component';
import { Icons } from './icons.provider';
import { IconData } from '../icons/types';
@NgModule({
declarations: [LucideAngularComponent],
imports: [
],
exports: [LucideAngularComponent]
})
export class LucideAngularModule {
constructor(@Optional() private icons: Icons) {
if (!this.icons) {
throw new Error(
`No icon provided. Make sure to use 'LucideAngularModule.pick({ ... })' when importing the module\n`
);
}
}
static pick(icons: { [key: string]: IconData }): ModuleWithProviders<LucideAngularModule> {
return {
ngModule: LucideAngularModule,
providers: [
{ provide: Icons, multi: true, useValue: icons }
]
};
}
}

View File

@@ -0,0 +1,26 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -0,0 +1,32 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": true,
"downlevelIteration": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"paths": {
"lucide-angular": [
"dist"
],
"lucide-angular/*": [
"dist/*"
],
},
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"module": "es2020",
"lib": [
"es2018",
"dom"
]
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false
}
}

View File

@@ -0,0 +1,27 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true,
"fullTemplateTypeCheck": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -0,0 +1,10 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
}
}

View File

@@ -0,0 +1,17 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -0,0 +1,152 @@
{
"extends": "tslint:recommended",
"rulesDirectory": [
"codelyzer"
],
"rules": {
"align": {
"options": [
"parameters",
"statements"
]
},
"array-type": false,
"arrow-return-shorthand": true,
"curly": true,
"deprecation": {
"severity": "warning"
},
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"",
"kebab-case"
],
"eofline": true,
"import-blacklist": [
true,
"rxjs/Rx"
],
"import-spacing": true,
"indent": {
"options": [
"spaces"
]
},
"max-classes-per-file": false,
"max-line-length": [
true,
140
],
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-empty": false,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-non-null-assertion": true,
"no-redundant-jsdoc": true,
"no-switch-case-fall-through": true,
"no-var-requires": false,
"object-literal-key-quotes": [
true,
"as-needed"
],
"quotemark": [
true,
"single"
],
"semicolon": {
"options": [
"always"
]
},
"space-before-function-paren": {
"options": {
"anonymous": "never",
"asyncArrow": "always",
"constructor": "never",
"method": "never",
"named": "never"
}
},
"typedef": [
true,
"call-signature"
],
"typedef-whitespace": {
"options": [
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
},
{
"call-signature": "onespace",
"index-signature": "onespace",
"parameter": "onespace",
"property-declaration": "onespace",
"variable-declaration": "onespace"
}
]
},
"variable-name": {
"options": [
"ban-keywords",
"check-format",
"allow-pascal-case"
]
},
"whitespace": {
"options": [
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type",
"check-typecast"
]
},
"component-class-suffix": true,
"contextual-lifecycle": true,
"directive-class-suffix": true,
"no-conflicting-lifecycle": true,
"no-host-metadata-property": true,
"no-input-rename": true,
"no-inputs-metadata-property": true,
"no-output-native": true,
"no-output-on-prefix": true,
"no-output-rename": true,
"no-outputs-metadata-property": true,
"template-banana-in-box": true,
"template-no-negated-async": true,
"use-lifecycle-interface": true,
"use-pipe-transform-interface": true
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-figma",
"version": "0.13.0",
"version": "0.15.1",
"license": "ISC",
"private": true,
"main": "build/ui.js",
@@ -15,7 +15,7 @@
"css-loader": "^3.0.0",
"html-webpack-inline-source-plugin": "^0.0.10",
"html-webpack-plugin": "^3.2.0",
"lucide-react": "^0.13.0",
"lucide-react": "^0.15.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",

View File

@@ -2077,13 +2077,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lucide-react@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.13.0.tgz#7bcc60f85c207b9eed6f4a6c713dfdcb5928d2b3"
integrity sha512-4BmILrkeydq8YhHjDRe9qKd42nsog77ZW/bgqy3A56d9pV5v3/2a2gK8qDbAAwpYZva+MIhOTRWpJW8BgtQGUA==
lucide-react@^0.15.1:
version "0.15.5"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.15.5.tgz#694cfe1f6bbc6e736199785c58cc7f8dcfc14309"
integrity sha512-iCplw/CRck/E5gA5YGGASBm6qvMZfvqtPE+ew75dSz50+LDKEbNhu9wy1s6HC1A6isgvVCeED9mqtdzd0x2RmA==
dependencies:
prop-types "^15.7.2"
react "^17.0.1"
react "^16.5.1"
make-dir@^2.0.0:
version "2.1.0"
@@ -2723,7 +2723,7 @@ react-is@^16.8.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react@^16.8.6:
react@^16.5.1, react@^16.8.6:
version "16.14.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
@@ -2732,14 +2732,6 @@ react@^16.8.6:
object-assign "^4.1.1"
prop-types "^15.6.2"
react@^17.0.1:
version "17.0.1"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
@@ -3084,9 +3076,9 @@ split-string@^3.0.1, split-string@^3.0.2:
extend-shallow "^3.0.0"
ssri@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
version "6.0.2"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
dependencies:
figgy-pudding "^3.5.1"

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-react",
"description": "Lucide React package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
"version": "0.14.1",
"version": "0.15.1",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",
@@ -19,7 +19,7 @@
"typings": "dist/lucide-react.d.ts",
"scripts": {
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
"clean": "rm -rf dist && rm -rf ./src/icons/*.js",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-react/src --templateSrc=../packages/lucide-react/scripts/exportTemplate --renderUniqueKey",
"build:es": "yarn --cwd ../../ babel packages/lucide-react/src -d packages/lucide-react/dist/esm",
"build:types": "yarn --cwd ../../ babel-node packages/lucide-react/scripts/buildTypes.js",

View File

@@ -4593,9 +4593,9 @@ xmlchars@^2.2.0:
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
version "4.0.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
yallist@^4.0.0:
version "4.0.0"

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-vue",
"version": "0.14.0",
"version": "0.15.1",
"author": "Eric Fennis",
"description": "Lucide Vue Package",
"license": "ISC",
@@ -22,7 +22,7 @@
},
"scripts": {
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:bundles",
"clean": "rm -rf dist && rm -rf ./src/icons/*.js",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-vue/src --templateSrc=../packages/lucide-vue/scripts/exportTemplate",
"build:es": "yarn --cwd ../../ babel packages/lucide-vue/src -d packages/lucide-vue/dist/esm",
"build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-vue/rollup.config.js",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide",
"description": "Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
"version": "0.14.0",
"version": "0.15.1",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",
@@ -20,7 +20,7 @@
"sideEffects": false,
"scripts": {
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
"clean": "rm -rf dist && rm -rf ./src/icons/*.js",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide/src",
"build:es": "babel src -d dist/esm",
"build:types": "yarn --cwd ../../ babel-node packages/lucide/scripts/buildTypes.js",

View File

@@ -1,6 +1,7 @@
import path from 'path';
import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../scripts/helpers';
import defaultAttributes from '../src/defaultAttributes';
const TARGET_DIR = path.join(__dirname, '../dist');
const ICONS_DIR = path.resolve(__dirname, '../../../icons');
@@ -8,16 +9,44 @@ const TYPES_FILE_NAME = 'lucide.d.ts';
// Generates header of d.ts file include some types and functions
const typeDefinitions = `\
export type IconName = string;
export type IconNode = readonly [tag: string, object:SVGProps<SVGSVGElement>, children:IconNode?];
export type IconsObj = { [IconName]: IconNode }
declare module 'lucide'
export interface SVGProps extends Partial<SVGElement> ${JSON.stringify(defaultAttributes, null, 2)}
export interface Attributes extends Partial<Props<Element>> {}
export declare type IconNode = readonly [tag: string, attrs:SVGProps, children?:IconNode];
export declare type CustomAttrs = { [attr:string]: any }
export type Icons = { [key: string]: IconNode }
export interface CreateIconsOptions {
/**
* List of icons you want to replace
*
* For example: \`{ Menu, Circle}\`.
*
* For replace all icons in lucide library, import \`icons\` and use it.
*/
icons: Icons;
/**
* Search HTML emelemt by \`nameAttr\` property.
*
* For example if define \`<i lucide-icon="circle"></i>\`, fill by \`lucide-icon\`.
*
* @default 'icon-name'
*/
nameAttr?: string;
/**
* Change defult attribute for show like color, fill, width , ...
*
* @default undefined
*/
attrs?: CustomAttrs;
}
export function createElement(icon: IconNode): SVGSVGElement;
export function createIcons({ icons: IconsObj, nameAttr: string = 'icon-name', attrs: Attributes = {} }): VoidFunction;
export function createIcons(options: CreateIconsOptions): void;
export declare const icons: IconsObj;
export declare const icons: Icons;
// Generated icons
`;

View File

@@ -4,7 +4,7 @@ import path from 'path';
import prettier from 'prettier';
import { toPascalCase } from '../helpers';
export default function(iconNodes, outputDirectory, template, { showLog = true }) {
export default function({ iconNodes, outputDirectory, template, showLog = true, iconFileExtention = '.js' }) {
const icons = Object.keys(iconNodes);
const iconsDistDirectory = path.join(outputDirectory, `icons`);
@@ -13,7 +13,7 @@ export default function(iconNodes, outputDirectory, template, { showLog = true }
}
icons.forEach(iconName => {
const location = path.join(iconsDistDirectory, `${iconName}.js`);
const location = path.join(iconsDistDirectory, `${iconName}${iconFileExtention}`);
const componentName = toPascalCase(iconName);
let { children } = iconNodes[iconName];

View File

@@ -12,22 +12,38 @@ const cliArguments = getArgumentOptions(process.argv.slice(2));
const ICONS_DIR = path.resolve(__dirname, '../icons');
const OUTPUT_DIR = path.resolve(__dirname, cliArguments.output || '../build');
const SRC_DIR = path.resolve(__dirname, '../src');
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR);
}
const {
renderUniqueKey = false,
templateSrc = './templates/defaultIconFileTemplate',
silent = false,
iconFileExtention = '.js',
exportFileName = 'index.js',
} = cliArguments;
const svgFiles = readSvgDirectory(ICONS_DIR);
const icons = renderIconsObject(svgFiles, ICONS_DIR, cliArguments.renderUniqueKey);
const icons = renderIconsObject(svgFiles, ICONS_DIR, renderUniqueKey);
const defaultIconFileTemplate = './templates/defaultIconFileTemplate';
// eslint-disable-next-line import/no-dynamic-require
const iconFileTemplate = require(cliArguments.templateSrc || defaultIconFileTemplate).default;
const iconFileTemplate = require(templateSrc).default;
// Generates iconsNodes files for each icon
generateIconFiles(icons, OUTPUT_DIR, iconFileTemplate, { showLog: !cliArguments.silent });
generateIconFiles({
iconNodes: icons,
outputDirectory: OUTPUT_DIR,
template: iconFileTemplate,
showLog: !silent,
iconFileExtention,
});
// Generates entry files for the compiler filled with icons exports
generateExportsFile(path.join(SRC_DIR, 'icons/index.js'), path.join(OUTPUT_DIR, 'icons'), icons);
generateExportsFile(
path.join(OUTPUT_DIR, 'icons', exportFileName),
path.join(OUTPUT_DIR, 'icons'),
icons,
);

View File

@@ -0,0 +1,87 @@
import getArgumentOptions from 'minimist'; // eslint-disable-line import/no-extraneous-dependencies
import githubApi from './githubApi';
const fetchCompareTags = oldTag =>
githubApi(`https://api.github.com/repos/lucide-icons/lucide/compare/${oldTag}...master`);
const iconRegex = /icons\/(.*)\.svg/g;
const iconTemplate = ({ name, pullNumber, author }) =>
`- \`${name}\` (${pullNumber}) by @${author}`;
const topics = [
{
title: 'New icons 🎨',
template: iconTemplate,
filter: ({ status, filename }) => status === 'added' && filename.match(iconRegex),
},
{
title: 'Modified Icons 🔨',
template: iconTemplate,
filter: ({ status, filename }) => status === 'modified' && filename.match(iconRegex),
},
{
title: 'Code improvements ⚡',
template: ({ title, pullNumber, author }) => `- ${title} (${pullNumber}) by @${author}`,
filter: ({ filename }, index, self) =>
!filename.match(iconRegex) && self.indexOf(filename) === index,
},
];
const fetchCommits = async file => {
const commits = await githubApi(
`https://api.github.com/repos/lucide-icons/lucide/commits?path=${file.filename}`,
);
return { ...file, commits };
};
const cliArguments = getArgumentOptions(process.argv.slice(2));
// eslint-disable-next-line func-names
(async function() {
try {
const output = await fetchCompareTags(cliArguments['old-tag']);
const changedFiles = output.files.filter(
({ filename }) => !filename.match(/site\/(.*)|(.*)package\.json|tags.json/g),
);
const commits = await Promise.all(changedFiles.map(fetchCommits));
if (!commits.length) {
throw new Error('No commits found');
}
const mappedCommits = commits
.map(({ commits: [pr], filename, sha, status }) => {
const pullNumber = /(.*)\((#[0-9]*)\)/gm.exec(pr.commit.message);
const nameRegex = /^\/?(.+\/)*(.+)\.(.+)$/g.exec(filename);
return {
filename,
name: nameRegex && nameRegex[2] ? nameRegex[2] : null,
title: pullNumber && pullNumber[1] ? pullNumber[1].trim() : null,
pullNumber: pullNumber && pullNumber[2] ? pullNumber[2].trim() : null,
author: pr.author.login,
sha,
status,
};
})
.filter(({ pullNumber }) => !!pullNumber);
const changelog = topics.map(({ title, filter, template }) => {
const lines = mappedCommits.filter(filter).map(template);
if (lines.length) {
return [`## ${title}`, ' ', ...lines, ' '];
}
return [''];
});
const changelogMarkown = changelog.flat().join('\n');
console.log(changelogMarkown);
} catch (error) {
throw new Error(error);
}
})();

22
scripts/githubApi.js Normal file
View File

@@ -0,0 +1,22 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import fetch, { Headers } from 'node-fetch';
const githubApi = async endpoint => {
const headers = new Headers();
const username = 'ericfennis';
const password = process.env.GITHUB_API_KEY;
headers.set(
'Authorization',
`Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`,
);
const res = await fetch(endpoint, {
method: 'GET',
headers,
});
return res.json();
};
export default githubApi;

View File

@@ -1,6 +1,6 @@
import { getAllData } from '../lib/icons';
import { getAllData } from '../src/lib/icons';
import { renderHook } from '@testing-library/react-hooks';
import useSearch from '../lib/useSearch';
import useSearch from '../src/lib/useSearch';
describe('Icon Overview', () => {
it('can search filter icons', async () => {

View File

@@ -1,10 +1,10 @@
import { act, fireEvent, screen } from '@testing-library/react';
import Index from '../pages/index';
import Index from '../src/pages/index';
import React from 'react';
import { render } from './test-utils';
import { getAllData } from '../lib/icons';
import { getAllData } from '../src/lib/icons';
import App from '../pages/_app';
import App from '../src/pages/_app';
describe('App', () => {
it('renders without crashing', () => {

View File

@@ -15,5 +15,5 @@
"jsx": "preserve"
},
"exclude": ["node_modules"],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
"include": ["next-env.d.ts", "src/**/*.ts", "src/**/*.tsx"]
}

5
site/vercel.json Normal file
View File

@@ -0,0 +1,5 @@
{
"github": {
"silent": true
}
}

View File

@@ -3843,11 +3843,6 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
fuse.js@^6.0.4:
version "6.4.4"
resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.4.tgz#68b92aad73f2a00980c34afaf5a727761c314c3b"
integrity sha512-tw9+6zGBerQG207qz4r9TJRA4xhVWiB/4UTA8cw8b2X5v7t94YbgxZ0/9ey9X7268D28HKHlWn10Q0s+kHe+xw==
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -5211,13 +5206,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lucide-react@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.11.0.tgz#fafe14ac757d25efb3a751b229485bfd4f21b37f"
integrity sha512-grt4lPHj3lrFHoYIArYoHP8XEEJ+QL+oZruAGGmqGWthaxe51P2mE/9eUHdFEXTv8DBHCg3NDOY2Q6QMbIgblg==
lucide-react@0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.14.0.tgz#2cc897379cb399d7a58d4d1005a4a6b1b5d40892"
integrity sha512-4dKiKn9bwLEfK0F7hNtMyxXpPTM68Y4GLbFJ2JpgBZ9B/V3MbKtvN4z8zIkysLJsjcscwvzULizE7Efmp+yx3w==
dependencies:
prop-types "^15.7.2"
react "^17.0.1"
react "^16.5.1"
lz-string@^1.4.4:
version "1.4.4"
@@ -5752,11 +5747,6 @@ object-keys@^1.0.12, object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
object-path@0.11.5:
version "0.11.5"
resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a"
integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==
object-visit@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
@@ -6459,7 +6449,7 @@ react-test-renderer@^16.13.1:
react-is "^16.8.6"
scheduler "^0.19.1"
react@^16.13.1:
react@^16.13.1, react@^16.5.1:
version "16.14.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
@@ -6468,14 +6458,6 @@ react@^16.13.1:
object-assign "^4.1.1"
prop-types "^15.6.2"
react@^17.0.1:
version "17.0.1"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
reactcss@^1.2.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd"
@@ -7125,9 +7107,9 @@ sshpk@^1.7.0:
tweetnacl "~0.14.0"
ssri@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
version "6.0.2"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
dependencies:
figgy-pudding "^3.5.1"

View File

@@ -687,6 +687,10 @@
"logo",
"version control"
],
"glasses": [
"glasses",
"spectacles"
],
"globe": [
"world",
"browser",

4810
yarn.lock

File diff suppressed because it is too large Load Diff